summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore42
-rw-r--r--Artistic125
-rw-r--r--ChangeLog1457
-rwxr-xr-xConfigure4739
-rw-r--r--Credits112
-rw-r--r--Jmakefile39
-rw-r--r--Known_bugs14
-rw-r--r--MANIFEST754
-rwxr-xr-xMakefile.SH271
-rw-r--r--README138
-rw-r--r--Wishlist60
-rw-r--r--bin/Jmakefile42
-rwxr-xr-xbin/Makefile.SH241
-rwxr-xr-xbin/manicheck.SH82
-rw-r--r--bin/manicheck.man51
-rwxr-xr-xbin/manilist.SH483
-rw-r--r--bin/manilist.man332
-rwxr-xr-xbin/packinit.SH462
-rw-r--r--bin/packinit.man148
-rwxr-xr-xbin/perload648
-rwxr-xr-xbin/svn-revision66
-rw-r--r--dist.man317
-rwxr-xr-xinstall.SH218
-rw-r--r--jmake/Jmakefile53
-rwxr-xr-xjmake/Makefile.SH317
-rw-r--r--jmake/NOTES189
-rw-r--r--jmake/README70
-rwxr-xr-xjmake/bindex.SH185
-rw-r--r--jmake/files/Jmake.rules1901
-rw-r--r--jmake/files/Jmake.tmpl268
-rwxr-xr-xjmake/fixcpp.SH185
-rwxr-xr-xjmake/jmake.SH547
-rw-r--r--jmake/jmake.man518
-rwxr-xr-xjmake/jmkmf.SH106
-rw-r--r--jmake/jmkmf.man80
-rw-r--r--kit/Jmakefile46
-rwxr-xr-xkit/Makefile.SH266
-rw-r--r--kit/README35
-rwxr-xr-xkit/kitpost.SH237
-rw-r--r--kit/kitpost.man89
-rwxr-xr-xkit/kitsend.SH192
-rw-r--r--kit/kitsend.man42
-rw-r--r--kit/makeSH76
-rw-r--r--kit/makeSH.man46
-rwxr-xr-xkit/makedist.SH460
-rw-r--r--kit/makedist.man147
-rwxr-xr-xkit/manifake.SH51
-rw-r--r--kit/manifake.man46
-rw-r--r--lib/C/Jmakefile20
-rwxr-xr-xlib/C/Makefile.SH211
-rw-r--r--lib/C/fake/Jmakefile27
-rwxr-xr-xlib/C/fake/Makefile.SH172
-rw-r--r--lib/C/fake/dup2.C78
-rw-r--r--lib/C/fake/getopt.C133
-rw-r--r--lib/C/fake/rename.C45
-rw-r--r--lib/C/fake/scandir.C131
-rw-r--r--lib/C/fake/setsid.C64
-rw-r--r--lib/Jmakefile53
-rwxr-xr-xlib/Makefile.SH275
-rw-r--r--lib/errnolist.a52
-rw-r--r--lib/errnolist.mk42
-rw-r--r--lib/errnolist.sh44
-rw-r--r--lib/makedepend.sh169
-rw-r--r--lib/makedir.sh86
-rw-r--r--mcon/INTRO109
-rw-r--r--mcon/Jmakefile90
-rwxr-xr-xmcon/Makefile.SH432
-rw-r--r--mcon/NOTES174
-rw-r--r--mcon/README24
-rw-r--r--mcon/U/AAAAA.U46
-rw-r--r--mcon/U/Alpha_mieee.U41
-rw-r--r--mcon/U/Assert.U26
-rw-r--r--mcon/U/Begin.U39
-rw-r--r--mcon/U/Checkcc.U135
-rw-r--r--mcon/U/Chk_MANI.U88
-rw-r--r--mcon/U/Chk_whoami.U25
-rw-r--r--mcon/U/Compile.U63
-rw-r--r--mcon/U/Config_h.U114
-rw-r--r--mcon/U/Config_sh.U110
-rw-r--r--mcon/U/Configdir.U28
-rw-r--r--mcon/U/Cppsym.U286
-rw-r--r--mcon/U/Cross.U350
-rw-r--r--mcon/U/Csym.U111
-rw-r--r--mcon/U/End.U27
-rw-r--r--mcon/U/Extract.U106
-rw-r--r--mcon/U/Extractall.U51
-rw-r--r--mcon/U/Filexp.U73
-rw-r--r--mcon/U/Findhdr.U73
-rw-r--r--mcon/U/Finish.U141
-rw-r--r--mcon/U/GCC_pipe.U65
-rw-r--r--mcon/U/Getfile.U340
-rw-r--r--mcon/U/Guess.U248
-rw-r--r--mcon/U/Head.U282
-rw-r--r--mcon/U/Inhdr.U77
-rw-r--r--mcon/U/Init.U81
-rw-r--r--mcon/U/Inlibc.U64
-rw-r--r--mcon/U/Instruct.U116
-rw-r--r--mcon/U/Largefile.U74
-rw-r--r--mcon/U/Loc.U442
-rw-r--r--mcon/U/Loc_sed.U33
-rw-r--r--mcon/U/Magic_h.U43
-rw-r--r--mcon/U/MailAuthor.U192
-rw-r--r--mcon/U/MailList.U82
-rw-r--r--mcon/U/Mips.U69
-rw-r--r--mcon/U/Mkdirp.U51
-rw-r--r--mcon/U/Mksymlinks.U90
-rw-r--r--mcon/U/Myinit.U26
-rw-r--r--mcon/U/Myread.U199
-rw-r--r--mcon/U/Nothing.U19
-rw-r--r--mcon/U/Null.U20
-rw-r--r--mcon/U/Obsol_h.U28
-rw-r--r--mcon/U/Obsol_sh.U27
-rw-r--r--mcon/U/Oldconfig.U715
-rw-r--r--mcon/U/Oldsym.U72
-rw-r--r--mcon/U/Options.U374
-rw-r--r--mcon/U/Prefixit.U68
-rw-r--r--mcon/U/Prefixup.U38
-rw-r--r--mcon/U/Rcs.U34
-rw-r--r--mcon/U/Sendfile64.U36
-rw-r--r--mcon/U/Setvar.U50
-rw-r--r--mcon/U/Signal.U271
-rw-r--r--mcon/U/Tr.U103
-rw-r--r--mcon/U/Trylink.U110
-rw-r--r--mcon/U/Typedef.U63
-rw-r--r--mcon/U/Unix.U70
-rw-r--r--mcon/U/Warn.U57
-rw-r--r--mcon/U/Warn_v7EXT.U34
-rw-r--r--mcon/U/Warn_v7ND.U33
-rw-r--r--mcon/U/Whoa.U51
-rw-r--r--mcon/U/abortsig.U80
-rw-r--r--mcon/U/active.U50
-rw-r--r--mcon/U/afs.U55
-rw-r--r--mcon/U/alignbytes.U141
-rw-r--r--mcon/U/archlib.U125
-rw-r--r--mcon/U/archname.U76
-rw-r--r--mcon/U/baserev.U22
-rw-r--r--mcon/U/basicshell.U47
-rw-r--r--mcon/U/bin.U88
-rw-r--r--mcon/U/bitpbyte.U74
-rw-r--r--mcon/U/byteorder.U68
-rw-r--r--mcon/U/cc.U58
-rw-r--r--mcon/U/ccflags.U457
-rw-r--r--mcon/U/cf_email.U69
-rw-r--r--mcon/U/cf_name.U72
-rw-r--r--mcon/U/cf_who.U65
-rw-r--r--mcon/U/charorder.U143
-rw-r--r--mcon/U/charsize.U64
-rw-r--r--mcon/U/contains.U43
-rw-r--r--mcon/U/cpp_stuff.U157
-rw-r--r--mcon/U/cpp_trad.U41
-rw-r--r--mcon/U/cppfilecom.U204
-rw-r--r--mcon/U/cppstdin.U249
-rw-r--r--mcon/U/d_NOFILE.U189
-rw-r--r--mcon/U/d_NeWS.U102
-rw-r--r--mcon/U/d_PORTAR.U79
-rw-r--r--mcon/U/d_SHM_MAC.U141
-rw-r--r--mcon/U/d_access.U93
-rw-r--r--mcon/U/d_alarm.U46
-rw-r--r--mcon/U/d_arc4random.U40
-rw-r--r--mcon/U/d_attribut.U51
-rw-r--r--mcon/U/d_backtrace.U45
-rw-r--r--mcon/U/d_bcmp.U54
-rw-r--r--mcon/U/d_bcopy.U68
-rw-r--r--mcon/U/d_bfd_lib.U51
-rw-r--r--mcon/U/d_bindtxtcode.U38
-rw-r--r--mcon/U/d_brokstat.U75
-rw-r--r--mcon/U/d_bsdjmp.U85
-rw-r--r--mcon/U/d_bsearch.U39
-rw-r--r--mcon/U/d_built_bswap32.U35
-rw-r--r--mcon/U/d_built_bswap64.U35
-rw-r--r--mcon/U/d_built_clz.U37
-rw-r--r--mcon/U/d_built_ctz.U37
-rw-r--r--mcon/U/d_built_memcmp.U37
-rw-r--r--mcon/U/d_built_popcount.U36
-rw-r--r--mcon/U/d_byacc.U33
-rw-r--r--mcon/U/d_bzero.U54
-rw-r--r--mcon/U/d_casti32.U87
-rw-r--r--mcon/U/d_castneg.U143
-rw-r--r--mcon/U/d_cbrt.U42
-rw-r--r--mcon/U/d_charsprf.U52
-rw-r--r--mcon/U/d_chown.U49
-rw-r--r--mcon/U/d_chroot.U46
-rw-r--r--mcon/U/d_chsize.U42
-rw-r--r--mcon/U/d_ckeypad.U56
-rw-r--r--mcon/U/d_clearenv.U38
-rw-r--r--mcon/U/d_clock_getres.U38
-rw-r--r--mcon/U/d_clock_gettime.U38
-rw-r--r--mcon/U/d_closedir.U121
-rw-r--r--mcon/U/d_closefrom.U45
-rw-r--r--mcon/U/d_const.U69
-rw-r--r--mcon/U/d_crypt.U82
-rw-r--r--mcon/U/d_csh.U62
-rw-r--r--mcon/U/d_ctermid.U41
-rw-r--r--mcon/U/d_cuserid.U44
-rw-r--r--mcon/U/d_datastart_symbol.U64
-rw-r--r--mcon/U/d_dbl_dig.U61
-rw-r--r--mcon/U/d_debugging.U42
-rw-r--r--mcon/U/d_deflate.U42
-rw-r--r--mcon/U/d_devpoll.U52
-rw-r--r--mcon/U/d_difftime.U80
-rw-r--r--mcon/U/d_dirent_d_namlen.U42
-rw-r--r--mcon/U/d_dirent_d_type.U52
-rw-r--r--mcon/U/d_dirfd.U42
-rw-r--r--mcon/U/d_dladdr.U42
-rw-r--r--mcon/U/d_dlerror.U50
-rw-r--r--mcon/U/d_dliterphdr.U44
-rw-r--r--mcon/U/d_dlopen.U49
-rw-r--r--mcon/U/d_dosuid.U169
-rw-r--r--mcon/U/d_drem.U45
-rw-r--r--mcon/U/d_dup2.U44
-rw-r--r--mcon/U/d_end_symbol.U37
-rw-r--r--mcon/U/d_eofpipe.U93
-rw-r--r--mcon/U/d_epoll.U51
-rw-r--r--mcon/U/d_etext_symbol.U37
-rw-r--r--mcon/U/d_euc2jis.U32
-rw-r--r--mcon/U/d_fast_assert.U85
-rw-r--r--mcon/U/d_fchdir.U40
-rw-r--r--mcon/U/d_fchmod.U47
-rw-r--r--mcon/U/d_fchown.U48
-rw-r--r--mcon/U/d_fcntl.U48
-rw-r--r--mcon/U/d_fd_set.U141
-rw-r--r--mcon/U/d_fdatasync.U41
-rw-r--r--mcon/U/d_fdopendir.U42
-rw-r--r--mcon/U/d_ffs.U43
-rw-r--r--mcon/U/d_fgetpos.U42
-rw-r--r--mcon/U/d_flexfnam.U79
-rw-r--r--mcon/U/d_flock.U44
-rw-r--r--mcon/U/d_fmod.U44
-rw-r--r--mcon/U/d_fork.U47
-rw-r--r--mcon/U/d_fsetpos.U42
-rw-r--r--mcon/U/d_fstatat.U43
-rw-r--r--mcon/U/d_fsync.U41
-rw-r--r--mcon/U/d_ftime.U100
-rw-r--r--mcon/U/d_ftrncate.U46
-rw-r--r--mcon/U/d_gconvert.U147
-rw-r--r--mcon/U/d_getaddrinfo.U82
-rw-r--r--mcon/U/d_getcontext.U38
-rw-r--r--mcon/U/d_geteuid.U40
-rw-r--r--mcon/U/d_getgrps.U48
-rw-r--r--mcon/U/d_gethbynm.U42
-rw-r--r--mcon/U/d_gethent.U41
-rw-r--r--mcon/U/d_gethid.U44
-rw-r--r--mcon/U/d_gethname.U287
-rw-r--r--mcon/U/d_getifaddrs.U54
-rw-r--r--mcon/U/d_getinvent.U37
-rw-r--r--mcon/U/d_getlogin.U47
-rw-r--r--mcon/U/d_getnameinfo.U73
-rw-r--r--mcon/U/d_getopt.U46
-rw-r--r--mcon/U/d_getpagsz.U122
-rw-r--r--mcon/U/d_getpgid.U48
-rw-r--r--mcon/U/d_getpgrp.U83
-rw-r--r--mcon/U/d_getpgrp2.U46
-rw-r--r--mcon/U/d_getppid.U48
-rw-r--r--mcon/U/d_getprior.U47
-rw-r--r--mcon/U/d_getprogname.U40
-rw-r--r--mcon/U/d_getpwent.U42
-rw-r--r--mcon/U/d_getpwnam.U38
-rw-r--r--mcon/U/d_getpwuid.U38
-rw-r--r--mcon/U/d_getrlimit.U46
-rw-r--r--mcon/U/d_gettext.U37
-rw-r--r--mcon/U/d_getuid.U40
-rw-r--r--mcon/U/d_getwd.U48
-rw-r--r--mcon/U/d_gnugettext.U54
-rw-r--r--mcon/U/d_gnulibc.U98
-rw-r--r--mcon/U/d_group.U23
-rw-r--r--mcon/U/d_havetlib.U125
-rw-r--r--mcon/U/d_herror.U36
-rw-r--r--mcon/U/d_hidnet.U68
-rw-r--r--mcon/U/d_hstrerror.U37
-rw-r--r--mcon/U/d_htonl.U80
-rw-r--r--mcon/U/d_iconv.U47
-rw-r--r--mcon/U/d_ieee754.U88
-rw-r--r--mcon/U/d_inetaton.U48
-rw-r--r--mcon/U/d_inetd.U70
-rw-r--r--mcon/U/d_inflate.U42
-rw-r--r--mcon/U/d_initstate.U43
-rw-r--r--mcon/U/d_internet.U52
-rw-r--r--mcon/U/d_iptos.U94
-rw-r--r--mcon/U/d_ipv6.U91
-rw-r--r--mcon/U/d_isascii.U46
-rw-r--r--mcon/U/d_itimer.U46
-rw-r--r--mcon/U/d_keepsig.U81
-rw-r--r--mcon/U/d_kevent_udata.U49
-rw-r--r--mcon/U/d_killpg.U45
-rw-r--r--mcon/U/d_kqueue.U57
-rw-r--r--mcon/U/d_link.U44
-rw-r--r--mcon/U/d_linuxstd.U55
-rw-r--r--mcon/U/d_locale_charset.U39
-rw-r--r--mcon/U/d_locconv.U46
-rw-r--r--mcon/U/d_lockf.U51
-rw-r--r--mcon/U/d_lstat.U45
-rw-r--r--mcon/U/d_madvise.U43
-rw-r--r--mcon/U/d_mblen.U48
-rw-r--r--mcon/U/d_mbstowcs.U46
-rw-r--r--mcon/U/d_mbtowc.U47
-rw-r--r--mcon/U/d_memalign.U48
-rw-r--r--mcon/U/d_memccpy.U45
-rw-r--r--mcon/U/d_memchr.U44
-rw-r--r--mcon/U/d_memcmp.U45
-rw-r--r--mcon/U/d_memcpy.U46
-rw-r--r--mcon/U/d_memmove.U45
-rw-r--r--mcon/U/d_mempcpy.U51
-rw-r--r--mcon/U/d_memset.U47
-rw-r--r--mcon/U/d_mkdir.U48
-rw-r--r--mcon/U/d_mkfifo.U51
-rw-r--r--mcon/U/d_mktime.U44
-rw-r--r--mcon/U/d_mmap.U53
-rw-r--r--mcon/U/d_msem_lck.U42
-rw-r--r--mcon/U/d_msg.U64
-rw-r--r--mcon/U/d_msg_flags.U59
-rw-r--r--mcon/U/d_msgctl.U44
-rw-r--r--mcon/U/d_msgget.U45
-rw-r--r--mcon/U/d_msgrcv.U47
-rw-r--r--mcon/U/d_msgsnd.U44
-rw-r--r--mcon/U/d_msync.U49
-rw-r--r--mcon/U/d_munmap.U46
-rw-r--r--mcon/U/d_nanosleep.U38
-rw-r--r--mcon/U/d_newsadm.U72
-rw-r--r--mcon/U/d_nice.U46
-rw-r--r--mcon/U/d_nls.U45
-rw-r--r--mcon/U/d_nolnbuf.U99
-rw-r--r--mcon/U/d_normsig.U57
-rw-r--r--mcon/U/d_open3.U90
-rw-r--r--mcon/U/d_openat.U38
-rw-r--r--mcon/U/d_passwd.U23
-rw-r--r--mcon/U/d_pathconf.U83
-rw-r--r--mcon/U/d_pause.U47
-rw-r--r--mcon/U/d_perror.U53
-rw-r--r--mcon/U/d_pidcheck.U75
-rw-r--r--mcon/U/d_pipe.U47
-rw-r--r--mcon/U/d_pipe2.U46
-rw-r--r--mcon/U/d_poll.U64
-rw-r--r--mcon/U/d_popen.U42
-rw-r--r--mcon/U/d_portable.U71
-rw-r--r--mcon/U/d_posix_fadvise.U47
-rw-r--r--mcon/U/d_posix_memalign.U41
-rw-r--r--mcon/U/d_pread.U48
-rw-r--r--mcon/U/d_preadv.U48
-rw-r--r--mcon/U/d_proginvocname.U40
-rw-r--r--mcon/U/d_psignal.U41
-rw-r--r--mcon/U/d_ptattr_setstack.U40
-rw-r--r--mcon/U/d_pwrite.U48
-rw-r--r--mcon/U/d_pwritev.U48
-rw-r--r--mcon/U/d_random.U40
-rw-r--r--mcon/U/d_raster.U57
-rw-r--r--mcon/U/d_rdchk.U42
-rw-r--r--mcon/U/d_readdir.U135
-rw-r--r--mcon/U/d_readlink.U49
-rw-r--r--mcon/U/d_recvmsg.U70
-rw-r--r--mcon/U/d_regcmp.U64
-rw-r--r--mcon/U/d_regcomp.U44
-rw-r--r--mcon/U/d_regparm.U48
-rw-r--r--mcon/U/d_rename.U43
-rw-r--r--mcon/U/d_rmdir.U45
-rw-r--r--mcon/U/d_rusage.U53
-rw-r--r--mcon/U/d_sa_interrupt.U37
-rw-r--r--mcon/U/d_safebcpy.U124
-rw-r--r--mcon/U/d_safemcpy.U127
-rw-r--r--mcon/U/d_sanemcmp.U88
-rw-r--r--mcon/U/d_sbrk.U44
-rw-r--r--mcon/U/d_scandir.U58
-rw-r--r--mcon/U/d_scannl.U74
-rw-r--r--mcon/U/d_sched_yield.U36
-rw-r--r--mcon/U/d_scorfl.U58
-rw-r--r--mcon/U/d_select.U61
-rw-r--r--mcon/U/d_sem.U62
-rw-r--r--mcon/U/d_semctl.U52
-rw-r--r--mcon/U/d_semget.U46
-rw-r--r--mcon/U/d_semop.U84
-rw-r--r--mcon/U/d_sendfile.U41
-rw-r--r--mcon/U/d_sendmsg.U70
-rw-r--r--mcon/U/d_setegid.U47
-rw-r--r--mcon/U/d_setenv.U38
-rw-r--r--mcon/U/d_seteuid.U47
-rw-r--r--mcon/U/d_setgrps.U48
-rw-r--r--mcon/U/d_setlnbuf.U45
-rw-r--r--mcon/U/d_setlocale.U47
-rw-r--r--mcon/U/d_setpgid.U52
-rw-r--r--mcon/U/d_setpgrp.U96
-rw-r--r--mcon/U/d_setpgrp2.U47
-rw-r--r--mcon/U/d_setprior.U47
-rw-r--r--mcon/U/d_setproctitle.U45
-rw-r--r--mcon/U/d_setprogname.U40
-rw-r--r--mcon/U/d_setregid.U78
-rw-r--r--mcon/U/d_setreuid.U78
-rw-r--r--mcon/U/d_setrgid.U47
-rw-r--r--mcon/U/d_setrlimit.U47
-rw-r--r--mcon/U/d_setruid.U47
-rw-r--r--mcon/U/d_setsid.U48
-rw-r--r--mcon/U/d_sgndchr.U50
-rw-r--r--mcon/U/d_shm.U45
-rw-r--r--mcon/U/d_shmat.U147
-rw-r--r--mcon/U/d_shmctl.U44
-rw-r--r--mcon/U/d_shmdt.U42
-rw-r--r--mcon/U/d_shmget.U46
-rw-r--r--mcon/U/d_sigaction.U45
-rw-r--r--mcon/U/d_sigaltstack.U42
-rw-r--r--mcon/U/d_sigblock.U41
-rw-r--r--mcon/U/d_sighold.U41
-rw-r--r--mcon/U/d_siglist.U41
-rw-r--r--mcon/U/d_sigprocmask.U42
-rw-r--r--mcon/U/d_sigsetjmp.U104
-rw-r--r--mcon/U/d_sigsetmk.U43
-rw-r--r--mcon/U/d_sigvec.U99
-rw-r--r--mcon/U/d_sjis2jis.U32
-rw-r--r--mcon/U/d_sockaddr_in_sin_len.U53
-rw-r--r--mcon/U/d_sockaddr_un.U61
-rw-r--r--mcon/U/d_socker_get.U65
-rw-r--r--mcon/U/d_socket.U140
-rw-r--r--mcon/U/d_speedopt.U62
-rw-r--r--mcon/U/d_srandom.U39
-rw-r--r--mcon/U/d_stat.U45
-rw-r--r--mcon/U/d_statblks.U46
-rw-r--r--mcon/U/d_statfs.U50
-rw-r--r--mcon/U/d_statvfs.U39
-rw-r--r--mcon/U/d_stdstdio.U325
-rw-r--r--mcon/U/d_strcasestr.U37
-rw-r--r--mcon/U/d_strccmp.U49
-rw-r--r--mcon/U/d_strchr.U87
-rw-r--r--mcon/U/d_strcoll.U43
-rw-r--r--mcon/U/d_strcspn.U42
-rw-r--r--mcon/U/d_strctcpy.U53
-rw-r--r--mcon/U/d_strdup.U43
-rw-r--r--mcon/U/d_strerror.U117
-rw-r--r--mcon/U/d_strftime.U43
-rw-r--r--mcon/U/d_strlcat.U38
-rw-r--r--mcon/U/d_strlcpy.U38
-rw-r--r--mcon/U/d_strstr.U41
-rw-r--r--mcon/U/d_strtod.U48
-rw-r--r--mcon/U/d_strtok.U45
-rw-r--r--mcon/U/d_strtol.U46
-rw-r--r--mcon/U/d_strtoul.U48
-rw-r--r--mcon/U/d_strxfrm.U44
-rw-r--r--mcon/U/d_su_chown.U41
-rw-r--r--mcon/U/d_symlink.U45
-rw-r--r--mcon/U/d_sync_atomic.U42
-rw-r--r--mcon/U/d_syscall.U45
-rw-r--r--mcon/U/d_sysconf.U47
-rw-r--r--mcon/U/d_sysctl.U41
-rw-r--r--mcon/U/d_syslog.U45
-rw-r--r--mcon/U/d_system.U44
-rw-r--r--mcon/U/d_table.U45
-rw-r--r--mcon/U/d_tcgtpgrp.U48
-rw-r--r--mcon/U/d_tcstpgrp.U49
-rw-r--r--mcon/U/d_time.U66
-rw-r--r--mcon/U/d_times.U74
-rw-r--r--mcon/U/d_tminsys.U41
-rw-r--r--mcon/U/d_truncate.U46
-rw-r--r--mcon/U/d_ttyname.U47
-rw-r--r--mcon/U/d_tzmin.U53
-rw-r--r--mcon/U/d_tzname.U45
-rw-r--r--mcon/U/d_uctx_mctx.U44
-rw-r--r--mcon/U/d_uctx_mctx_gregs.U44
-rw-r--r--mcon/U/d_ulimit.U42
-rw-r--r--mcon/U/d_umask.U48
-rw-r--r--mcon/U/d_unsetenv.U38
-rw-r--r--mcon/U/d_usendir.U79
-rw-r--r--mcon/U/d_usleep.U44
-rw-r--r--mcon/U/d_uwait.U123
-rw-r--r--mcon/U/d_vfork.U105
-rw-r--r--mcon/U/d_voidsig.U89
-rw-r--r--mcon/U/d_volatile.U79
-rw-r--r--mcon/U/d_vprintf.U81
-rw-r--r--mcon/U/d_vsnprintf.U47
-rw-r--r--mcon/U/d_wait3.U53
-rw-r--r--mcon/U/d_wait4.U52
-rw-r--r--mcon/U/d_waitpid.U48
-rw-r--r--mcon/U/d_wcstombs.U47
-rw-r--r--mcon/U/d_wctomb.U53
-rw-r--r--mcon/U/d_wifstat.U87
-rw-r--r--mcon/U/d_xdrs.U42
-rw-r--r--mcon/U/defeditor.U45
-rw-r--r--mcon/U/doublesize.U58
-rw-r--r--mcon/U/ebcdic.U58
-rw-r--r--mcon/U/enablenls.U61
-rw-r--r--mcon/U/errnolist.U106
-rw-r--r--mcon/U/etc.U42
-rw-r--r--mcon/U/fieldn.U82
-rw-r--r--mcon/U/filexp_path.U30
-rw-r--r--mcon/U/floatsize.U58
-rw-r--r--mcon/U/fpostype.U39
-rw-r--r--mcon/U/fpu.U73
-rw-r--r--mcon/U/gccvers.U110
-rw-r--r--mcon/U/gidtype.U61
-rw-r--r--mcon/U/groupstype.U63
-rw-r--r--mcon/U/h_fcntl.U23
-rw-r--r--mcon/U/h_sysfile.U23
-rw-r--r--mcon/U/i_alloca.U36
-rw-r--r--mcon/U/i_arpainet.U31
-rw-r--r--mcon/U/i_db.U146
-rw-r--r--mcon/U/i_dbm.U97
-rw-r--r--mcon/U/i_dirent.U146
-rw-r--r--mcon/U/i_dld.U34
-rw-r--r--mcon/U/i_dlfcn.U34
-rw-r--r--mcon/U/i_execinfo.U27
-rw-r--r--mcon/U/i_fcntl.U61
-rw-r--r--mcon/U/i_float.U35
-rw-r--r--mcon/U/i_gdbm.U46
-rw-r--r--mcon/U/i_grp.U31
-rw-r--r--mcon/U/i_iconv.U31
-rw-r--r--mcon/U/i_ifaddrs.U27
-rw-r--r--mcon/U/i_inttypes.U35
-rw-r--r--mcon/U/i_invent.U27
-rw-r--r--mcon/U/i_langinfo.U27
-rw-r--r--mcon/U/i_libcharset.U27
-rw-r--r--mcon/U/i_libintl.U27
-rw-r--r--mcon/U/i_limits.U33
-rw-r--r--mcon/U/i_linux_netlink.U29
-rw-r--r--mcon/U/i_linux_rtnetlink.U29
-rw-r--r--mcon/U/i_locale.U32
-rw-r--r--mcon/U/i_malloc.U31
-rw-r--r--mcon/U/i_math.U52
-rw-r--r--mcon/U/i_memory.U65
-rw-r--r--mcon/U/i_mswsock.U27
-rw-r--r--mcon/U/i_ndbm.U49
-rw-r--r--mcon/U/i_netdb.U27
-rw-r--r--mcon/U/i_neterrno.U65
-rw-r--r--mcon/U/i_netif.U27
-rw-r--r--mcon/U/i_netroute.U30
-rw-r--r--mcon/U/i_niin.U45
-rw-r--r--mcon/U/i_niip.U30
-rw-r--r--mcon/U/i_poll.U28
-rw-r--r--mcon/U/i_pthread.U26
-rw-r--r--mcon/U/i_pwd.U162
-rw-r--r--mcon/U/i_regex.U35
-rw-r--r--mcon/U/i_sched.U25
-rw-r--r--mcon/U/i_sfio.U32
-rw-r--r--mcon/U/i_stddef.U32
-rw-r--r--mcon/U/i_stdlib.U32
-rw-r--r--mcon/U/i_string.U62
-rw-r--r--mcon/U/i_sysdir.U34
-rw-r--r--mcon/U/i_sysfile.U60
-rw-r--r--mcon/U/i_sysioctl.U202
-rw-r--r--mcon/U/i_sysipc.U28
-rw-r--r--mcon/U/i_sysmman.U34
-rw-r--r--mcon/U/i_sysmount.U29
-rw-r--r--mcon/U/i_sysndir.U31
-rw-r--r--mcon/U/i_sysparam.U31
-rw-r--r--mcon/U/i_syspoll.U28
-rw-r--r--mcon/U/i_sysresrc.U34
-rw-r--r--mcon/U/i_sysselct.U39
-rw-r--r--mcon/U/i_syssem.U28
-rw-r--r--mcon/U/i_syssendfile.U27
-rw-r--r--mcon/U/i_syssock.U32
-rw-r--r--mcon/U/i_sysstat.U32
-rw-r--r--mcon/U/i_sysstatvfs.U29
-rw-r--r--mcon/U/i_syssysctl.U27
-rw-r--r--mcon/U/i_systable.U32
-rw-r--r--mcon/U/i_systimeb.U55
-rw-r--r--mcon/U/i_systimes.U31
-rw-r--r--mcon/U/i_systwgcf.U31
-rw-r--r--mcon/U/i_systypes.U34
-rw-r--r--mcon/U/i_sysun.U35
-rw-r--r--mcon/U/i_sysutsname.U27
-rw-r--r--mcon/U/i_sysvfs.U29
-rw-r--r--mcon/U/i_syswait.U34
-rw-r--r--mcon/U/i_termio.U134
-rw-r--r--mcon/U/i_time.U171
-rw-r--r--mcon/U/i_ucontext.U96
-rw-r--r--mcon/U/i_unistd.U31
-rw-r--r--mcon/U/i_utime.U31
-rw-r--r--mcon/U/i_values.U35
-rw-r--r--mcon/U/i_varhdr.U165
-rw-r--r--mcon/U/i_vfork.U40
-rw-r--r--mcon/U/i_whoami.U35
-rw-r--r--mcon/U/i_winsock2.U27
-rw-r--r--mcon/U/i_ws2tcpip.U27
-rw-r--r--mcon/U/i_zlib.U31
-rw-r--r--mcon/U/ilp.U116
-rw-r--r--mcon/U/inc.U39
-rw-r--r--mcon/U/install.U199
-rw-r--r--mcon/U/intsize.U89
-rw-r--r--mcon/U/ipc.U171
-rw-r--r--mcon/U/issymlink.U86
-rw-r--r--mcon/U/kernel.U63
-rw-r--r--mcon/U/lex.U67
-rw-r--r--mcon/U/lib.U54
-rw-r--r--mcon/U/libc.U405
-rw-r--r--mcon/U/libdbm.U47
-rw-r--r--mcon/U/libflex.U65
-rw-r--r--mcon/U/libnlist.U49
-rw-r--r--mcon/U/libnm.U45
-rw-r--r--mcon/U/libpth.U133
-rw-r--r--mcon/U/libs.U256
-rw-r--r--mcon/U/libyacc.U64
-rw-r--r--mcon/U/lintlib.U38
-rw-r--r--mcon/U/lns.U41
-rw-r--r--mcon/U/locale.U70
-rw-r--r--mcon/U/locdist.U174
-rw-r--r--mcon/U/longsize.U24
-rw-r--r--mcon/U/lseektype.U40
-rw-r--r--mcon/U/maildir.U41
-rw-r--r--mcon/U/mailer.U61
-rw-r--r--mcon/U/mailfile.U56
-rw-r--r--mcon/U/make.U60
-rw-r--r--mcon/U/mallocsrc.U181
-rw-r--r--mcon/U/man1dir.U147
-rw-r--r--mcon/U/man3dir.U158
-rw-r--r--mcon/U/manfmt.U118
-rw-r--r--mcon/U/mansrc.U150
-rw-r--r--mcon/U/mboxchar.U70
-rw-r--r--mcon/U/mkdep.U271
-rw-r--r--mcon/U/models.U214
-rw-r--r--mcon/U/modetype.U40
-rw-r--r--mcon/U/msgmerge_update.U29
-rw-r--r--mcon/U/myhostname.U284
-rw-r--r--mcon/U/n.U45
-rw-r--r--mcon/U/nametype.U134
-rw-r--r--mcon/U/nblock_io.U261
-rw-r--r--mcon/U/newslevel.U53
-rw-r--r--mcon/U/newslib.U61
-rw-r--r--mcon/U/newsspool.U52
-rw-r--r--mcon/U/nis.U168
-rw-r--r--mcon/U/nlist_pfx.U135
-rw-r--r--mcon/U/official.U47
-rw-r--r--mcon/U/orderlib.U95
-rw-r--r--mcon/U/orgname.U65
-rw-r--r--mcon/U/packadmin.U33
-rw-r--r--mcon/U/package.U56
-rw-r--r--mcon/U/pager.U62
-rw-r--r--mcon/U/patchlevel.U69
-rw-r--r--mcon/U/perlpath.U56
-rw-r--r--mcon/U/pidtype.U39
-rw-r--r--mcon/U/pkgsrc.U26
-rw-r--r--mcon/U/prefix.U80
-rw-r--r--mcon/U/prefshell.U60
-rw-r--r--mcon/U/privlib.U96
-rw-r--r--mcon/U/prototype.U117
-rw-r--r--mcon/U/ptrsize.U53
-rw-r--r--mcon/U/randbits.U83
-rw-r--r--mcon/U/randfunc.U164
-rw-r--r--mcon/U/rcs_branch.U43
-rw-r--r--mcon/U/registers.U103
-rw-r--r--mcon/U/rootid.U35
-rw-r--r--mcon/U/sbrksmart.U85
-rw-r--r--mcon/U/sbrktype.U44
-rw-r--r--mcon/U/scriptdir.U110
-rw-r--r--mcon/U/selecttype.U116
-rw-r--r--mcon/U/sh.U92
-rw-r--r--mcon/U/shm_for.U118
-rw-r--r--mcon/U/sig_name.U157
-rw-r--r--mcon/U/sitearch.U94
-rw-r--r--mcon/U/sitelib.U97
-rw-r--r--mcon/U/sizetype.U40
-rw-r--r--mcon/U/so.U50
-rw-r--r--mcon/U/sockopt.U88
-rw-r--r--mcon/U/spitshell.U107
-rw-r--r--mcon/U/src.U96
-rw-r--r--mcon/U/ssizetype.U91
-rw-r--r--mcon/U/startperl.U95
-rw-r--r--mcon/U/startsh.U50
-rw-r--r--mcon/U/stdchar.U40
-rw-r--r--mcon/U/sunscanf.U55
-rw-r--r--mcon/U/sysman.U50
-rw-r--r--mcon/U/trnl.U56
-rw-r--r--mcon/U/uidtype.U57
-rw-r--r--mcon/U/usenm.U144
-rw-r--r--mcon/U/usesocks.U46
-rw-r--r--mcon/U/usrinc.U54
-rw-r--r--mcon/U/vaproto.U65
-rw-r--r--mcon/U/voidflags.U180
-rw-r--r--mcon/U/warnflags.U55
-rw-r--r--mcon/U/yacc.U90
-rw-r--r--mcon/configure144
-rw-r--r--mcon/files/Internal.U20
-rw-r--r--mcon/files/README6
-rw-r--r--mcon/files/d_function.U31
-rw-r--r--mcon/files/dir.U47
-rw-r--r--mcon/files/file.U47
-rw-r--r--mcon/files/i_include.U32
-rw-r--r--mcon/files/keyword.U54
-rw-r--r--mcon/files/locate.U47
-rw-r--r--mcon/files/question.U58
-rw-r--r--mcon/files/rcshead.U15
-rw-r--r--mcon/files/shell.U68
-rw-r--r--mcon/files/type.U47
-rwxr-xr-xmcon/makegloss.SH217
-rw-r--r--mcon/man/Jmakefile22
-rwxr-xr-xmcon/man/Makefile.SH190
-rwxr-xr-xmcon/man/mconfig.SH2126
-rwxr-xr-xmcon/man/mlint.SH585
-rwxr-xr-xmcon/man/mxref.SH146
-rwxr-xr-xmcon/mconfig.SH193
-rwxr-xr-xmcon/mlint.SH139
-rwxr-xr-xmcon/mxref.SH152
-rw-r--r--mcon/pl/common.pl289
-rw-r--r--mcon/pl/configure.pl248
-rw-r--r--mcon/pl/cosmetic.pl110
-rw-r--r--mcon/pl/depend.pl141
-rw-r--r--mcon/pl/eval.pl300
-rw-r--r--mcon/pl/extract.pl109
-rw-r--r--mcon/pl/files.pl134
-rw-r--r--mcon/pl/gensym.pl22
-rw-r--r--mcon/pl/init.pl55
-rw-r--r--mcon/pl/lint.pl1473
-rw-r--r--mcon/pl/locate.pl153
-rw-r--r--mcon/pl/makefile.pl172
-rw-r--r--mcon/pl/obsolete.pl103
-rw-r--r--mcon/pl/order.pl42
-rw-r--r--mcon/pl/tsort.pl166
-rw-r--r--mcon/pl/wanted.pl263
-rw-r--r--mcon/pl/xref.pl70
-rw-r--r--mcon/pl/xwant.pl149
-rw-r--r--pat/Jmakefile62
-rwxr-xr-xpat/Makefile.SH297
-rw-r--r--pat/README120
-rwxr-xr-xpat/pat.SH154
-rw-r--r--pat/pat.man513
-rwxr-xr-xpat/patbase.SH122
-rw-r--r--pat/patchlevel.h34
-rwxr-xr-xpat/patcil.SH541
-rwxr-xr-xpat/patclean.SH185
-rwxr-xr-xpat/patcol.SH235
-rwxr-xr-xpat/patdiff.SH236
-rwxr-xr-xpat/patftp.SH118
-rwxr-xr-xpat/patindex.SH66
-rwxr-xr-xpat/patlog.SH388
-rwxr-xr-xpat/patmake.SH411
-rwxr-xr-xpat/patname.SH175
-rwxr-xr-xpat/patnotify.SH232
-rwxr-xr-xpat/patpost.SH179
-rwxr-xr-xpat/patsend.SH218
-rwxr-xr-xpat/patsnap.SH124
-rw-r--r--patchlevel.h5
-rw-r--r--pl/comment.pl46
-rw-r--r--pl/copyright.pl71
-rw-r--r--pl/editor.pl23
-rw-r--r--pl/fullname.pl49
-rw-r--r--pl/listedit.pl36
-rw-r--r--pl/logname.pl24
-rw-r--r--pl/makedir.pl29
-rw-r--r--pl/manifake.pl42
-rw-r--r--pl/newer.pl78
-rw-r--r--pl/package.pl40
-rw-r--r--pl/patseq.pl27
-rw-r--r--pl/profile.pl73
-rw-r--r--pl/rangeargs.pl48
-rw-r--r--pl/rcsargs.pl60
-rw-r--r--pl/snapshot.pl28
-rw-r--r--pl/tilde.pl25
-rw-r--r--pl/users.pl48
741 files changed, 74246 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..103f8de
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,42 @@
+.config/
+*.bak
+*.1
+Makefile
+bin/manicheck
+bin/manilist
+bin/packinit
+config.sh
+install
+jmake/Index
+jmake/bindex
+jmake/fixcpp
+jmake/jmake
+jmake/jmkmf
+kit/kitpost
+kit/kitsend
+kit/makedist
+kit/manifake
+mcon/Glossary
+mcon/makegloss
+mcon/mconfig
+mcon/metaconfig
+mcon/metalint
+mcon/metaxref
+mcon/mlint
+mcon/mxref
+pat/pat
+pat/patbase
+pat/patcil
+pat/patclean
+pat/patcol
+pat/patdiff
+pat/patftp
+pat/patindex
+pat/patlog
+pat/patmake
+pat/patname
+pat/patnotify
+pat/patpost
+pat/patsend
+pat/patsnap
+revision.h
diff --git a/Artistic b/Artistic
new file mode 100644
index 0000000..a05f9e8
--- /dev/null
+++ b/Artistic
@@ -0,0 +1,125 @@
+ The "Artistic License"
+
+ Preamble
+
+The intent of this document is to state the conditions under which a
+Package may be copied, such that the Copyright Holder maintains some
+semblance of artistic control over the development of the Package,
+while giving the users of the package the right to use and distribute
+the Package in a more-or-less customary fashion, plus the right to make
+reasonable modifications.
+
+It also grants you the rights to reuse parts of a Package in your own
+programs without transferring this License to those programs, provided
+that you meet some reasonable requirements.
+
+Definitions:
+
+ "Package" refers to the collection of files distributed by the
+ Copyright Holder, and derivatives of that collection of files
+ created through textual modification.
+
+ "Standard Version" refers to such a Package if it has not been
+ modified, or has been modified in accordance with the wishes
+ of the Copyright Holder as specified below.
+
+ "Copyright Holder" is whoever is named in the copyright or
+ copyrights for the package.
+
+ "You" is you, if you're thinking about copying or distributing
+ this Package.
+
+ "Reasonable copying fee" is whatever you can justify on the
+ basis of media cost, duplication charges, time of people involved,
+ and so on. (You will not be required to justify it to the
+ Copyright Holder, but only to the computing community at large
+ as a market that must bear the fee.)
+
+ "Freely Available" means that no fee is charged for the item
+ itself, though there may be fees involved in handling the item.
+ It also means that recipients of the item may redistribute it
+ under the same conditions they received it.
+
+1. You may make and give away verbatim copies of the source form of the
+Standard Version of this Package without restriction, provided that you
+duplicate all of the original copyright notices and associated disclaimers.
+
+2. You may apply bug fixes, portability fixes and other modifications
+derived from the Public Domain or from the Copyright Holder. A Package
+modified in such a way shall still be considered the Standard Version.
+
+3. You may otherwise modify your copy of this Package in any way, provided
+that you insert a prominent notice in each changed file stating how and
+when you changed that file, and provided that you do at least ONE of the
+following:
+
+ a) place your modifications in the Public Domain or otherwise make them
+ Freely Available, such as by posting said modifications to Usenet or
+ an equivalent medium, or placing the modifications on a major archive
+ site such as uunet.uu.net, or by allowing the Copyright Holder to include
+ your modifications in the Standard Version of the Package.
+
+ b) use the modified Package only within your corporation or organization.
+
+ c) rename any non-standard executables so the names do not conflict
+ with standard executables, which must also be provided, and provide
+ a separate manual page for each non-standard executable that clearly
+ documents how it differs from the Standard Version.
+
+ d) make other distribution arrangements with the Copyright Holder.
+
+4. You may distribute the programs of this Package in object code or
+executable form, provided that you do at least ONE of the following:
+
+ a) distribute a Standard Version of the executables and library files,
+ together with instructions (in the manual page or equivalent) on where
+ to get the Standard Version.
+
+ b) accompany the distribution with the machine-readable source of
+ the Package with your modifications.
+
+ c) give non-standard executables non-standard names, and clearly
+ document the differences in manual pages (or equivalent), together
+ with instructions on where to get the Standard Version.
+
+ d) make other distribution arrangements with the Copyright Holder.
+
+5. You may charge a reasonable copying fee for any distribution of this
+Package. You may charge any fee you choose for support of this
+Package. You may not charge a fee for this Package itself. However,
+you may distribute this Package in aggregate with other (possibly
+commercial) programs as part of a larger (possibly commercial) software
+distribution provided that you do not advertise this Package as a
+product of your own.
+
+6. The scripts and library files supplied as input to or produced as
+output from the programs of this Package do not automatically fall
+under the copyright of this Package, but belong to whoever generated
+them, and may be sold commercially, and may be aggregated with this
+Package. If such scripts or library files are aggregated with this
+Package via the so-called "undump" or "unexec" methods of producing a
+binary executable image, then distribution of such an image shall
+neither be construed as a distribution of this Package nor shall it
+fall under the restrictions of Paragraphs 3 and 4, provided that you do
+not represent such an executable image as a Standard Version of this
+Package.
+
+7. You may reuse parts of this Package in your own programs, provided that
+you explicitly state where you got them from, in the source code (and, left
+to your courtesy, in the documentation), duplicating all the associated
+copyright notices and disclaimers. Besides your changes, if any, must be
+clearly marked as such. Parts reused that way will no longer fall under this
+license if, and only if, the name of your program(s) have no immediate
+connection with the name of the Package itself or its associated programs.
+You may then apply whatever restrictions you wish on the reused parts or
+choose to place them in the Public Domain--this will apply only within the
+context of your package.
+
+8. The name of the Copyright Holder may not be used to endorse or promote
+products derived from this software without specific prior written permission.
+
+9. THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
+WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+ The End
diff --git a/ChangeLog b/ChangeLog
new file mode 100644
index 0000000..4a11de9
--- /dev/null
+++ b/ChangeLog
@@ -0,0 +1,1457 @@
+Fri Feb 28 17:48:41 MET 1997 Raphael Manfredi <Raphael_Manfredi@grenoble.hp.com>
+
+. Description:
+
+ This huge set of patch results from an integration of the
+ perl5 units into the dist-3.0 package. A few improvements
+ of mine are also incorporated here, but this patch set should
+ mainly be credited to Andy Dougherty and Chip Salzenberg, who
+ have both assumed the perl5 Patch Pumpkin with success and brio.
+
+ I won't document most of the changes in detail. Only the obvious
+ ones were kept here. You can look closer to the patches themselves
+ to see what really changed. Especially the new units, since you
+ now have more symbols to check for in your C code...
+
+ Regenerated Configure with current set of units.
+
+ Added Perl Patch Pumpkin credits. Thanks to Andy Dougherty and
+ to Chip Salzenberg for their incredible contributions to
+ metaconfig.
+
+ Changed my email address and updated copyright dates
+
+ Added support for src.U. This means you can now run Configure
+ from a remote directory to separate the build directory and
+ the (possibly read-only) source tree.
+ Note that some of your private units may require some changes
+ due to that...
+
+ Removed support for NO_PROTOTYPE detection on SCO.
+
+ Added cute quoting trick for wild stringify support, which
+ allows non-ANSI stringification to occur.
+
+ Replaced .a with $_a all over the place.
+ Likewise for .o replaced by $_o.
+ You'll have to do that to your own private units.
+
+ Integrated new units from perl5. I will not document most
+ of the perl5-related changes here. People interested can
+ look at Andy's notes in the perl5 distribution.
+
+ New USE_BSD_GETPGRP to detect the getpgrp() flavour. The old
+ USE_BSDPGRP has been obsoleted in favor of USE_BSD_SETPGRP.
+ Indeed, setpgrp() and getpgrp() can have distinct flavors,
+ so we need two distinct tests for them.
+
+ Useless units dropped: d_group.U and d_passwd.U.
+
+ Mention that <poll.h> can be included if HAS_POLL defined.
+
+ Improved overlapping copy check.
+
+ Added support for Free_t, the type of free().
+
+ Don't use nm with the GNU C library.
+ Added support for Linux shared libs.
+
+ Don't prompt them if the void support is high enough for us
+ and don't ask for the include path unless they are on a MIPS.
+
+ Added the srcdir support to "configure" now that we have src.U.
+
+ Documented the runnning environment and the src.U unit in
+ the metaconfig man page. The $_a and $_o are also mentionned.
+ All the generated scripts must now start with a "$startsh"
+ to ensure proper shell execution.
+
+ New "create" and "empty" lint directives.
+
+ New -L option for metaxref to match metaconfig and metalint.
+
+ Documents contents of the message sent by patnotify:
+ we now let them know the patch priority and description.
+
+ Added a whole bunch of new units, mostly from the perl5 team.
+
+. Files changed:
+
+ * bin/packinit.SH: Fixed one wrong ':' comment in .package.
+
+ * jmake/files/Jmake.rules: Now handles USRINC for dependencies.
+ Smarter about dependencies computation.
+
+ * jmake/files/Jmake.tmpl: Lex path can now be configured.
+
+ * mcon/U/Begin.U: Added Extractall dependency.
+
+ * mcon/U/Config_sh.U, mcon/U/Oldsym.U, mcon/U/Extract.U,
+ mcon/U/patchlevel.U, mcon/U/MailAuthor.U, mcon/U/Chk_MANI.U,
+ mcon/U/Config_h.U: Added support for src.U.
+
+ * mcon/U/Configdir.U: Have README explicitly mention the package
+ name.
+
+ * mcon/U/make.U, mcon/U/d_strtoul.U, mcon/U/Unix.U,
+ mcon/U/d_inetaton.U, mcon/U/sitearch.U, mcon/U/d_sanemcmp.U,
+ mcon/U/i_locale.U, mcon/U/d_sigaction.U, mcon/U/d_getpgid.U,
+ mcon/U/src.U, mcon/U/sitelib.U, mcon/U/d_brokstat.U, mcon/U/man3dir.U,
+ , mcon/U/d_sigsetjmp.U, mcon/U/i_sysstat.U, mcon/U/d_strtod.U,
+ mcon/U/d_byacc.U, mcon/U/sh.U, mcon/U/Signal.U, mcon/U/d_gnulibc.U,
+ mcon/U/man1dir.U, mcon/U/Extractall.U, mcon/U/i_values.U,
+ mcon/U/i_sfio.U: Created.
+
+ * mcon/U/Getfile.U: Getfile script now begins with "startsh".
+
+ * mcon/U/Head.U: Make sure we unset CDPATH for shells that support
+ this. Improved Korn shell detection and handling.
+
+ * mcon/U/Instruct.U: Logname / whoami sequence rewritten to use case.
+
+ * mcon/U/Loc.U: Allow users to specify paths on the command line.
+ Will now substitute cp for ln if not supported.
+
+ * mcon/U/Myread.U: Myread script now starts with a "startsh".
+ Miscellaneous fixes.
+
+ * mcon/U/Oldconfig.U: Added support for src.U. New OSNAME define.
+ Can now sense new OSes.
+
+ * mcon/U/Options.U: Optdef.sh now starts with a "startsh". Moved
+ some code from Head.U.
+
+ * mcon/U/Whoa.U: Whoa script now starts with leading "startsh".
+
+ * mcon/U/afs.U: Can now explicitly tell Configure whether AFS is
+ running.
+
+ * mcon/U/archlib.U: Skip existence checks for archlib.
+
+ * mcon/U/archname.U: Changed the way the archname is mangled from
+ uname.
+
+ * mcon/U/byteorder.U: No longer ask the user if the test runs ok.
+
+ * mcon/U/ccflags.U: Removed support for NO_PROTOTYPE detection on
+ SCO. New locincpth variable. Added info on the "additional ld
+ flags" question.
+
+ * mcon/U/cf_who.U: New computation method avoiding use of temporary
+ file.
+
+ * mcon/U/cpp_stuff.U: Added cute quoting trick for wild stringify
+ support.
+
+ * mcon/U/d_bsdjmp.U, mcon/U/d_fd_set.U, mcon/U/models.U,
+ mcon/U/d_scannl.U, mcon/U/d_open3.U, mcon/U/d_closedir.U: Added ?F:
+ metalint hint.
+
+ * mcon/U/libs.U, mcon/U/libnm.U, mcon/U/libyacc.U, mcon/U/libflex.U,
+ mcon/U/libdbm.U, mcon/U/d_socket.U, mcon/U/d_normsig.U,
+ mcon/U/d_crypt.U: Replaced .a with $_a all over the place.
+
+ * mcon/U/d_csh.U: Added full_csh to preserve the full path even when
+ portable.
+
+ * mcon/U/d_dosuid.U: Moved unit to TOP via a ?Y: layout directive.
+ Tell them /dev/fd is not about floppy disks.
+
+ * mcon/U/d_gconvert.U: Integrated new unit from perl5.
+
+ * mcon/U/d_getpgrp.U: New USE_BSD_GETPGRP to detect the getpgrp()
+ flavour.
+
+ * mcon/U/d_group.U, mcon/U/d_passwd.U: Useless unit dropped.
+
+ * mcon/U/d_usendir.U, mcon/U/d_havetlib.U, mcon/U/errnolist.U:
+ Replaced .a with $_a all over the place. Likewise for .o replaced by
+ $_o.
+
+ * mcon/U/d_newsadm.U: Added Guess dependency.
+
+ * mcon/U/d_pidcheck.U: Replaced .o with $_o all over the place.
+ Added ?F: metalint hint.
+
+ * mcon/U/d_poll.U: Mention that <poll.h> can be included if HAS_POLL
+ defined.
+
+ * mcon/U/d_safebcpy.U, mcon/U/d_safemcpy.U: Improved overlapping copy
+ check. Comfort them if they have memmove. Added ?F: metalint hint.
+
+ * mcon/U/d_setpgid.U: Reworded symbol comments.
+
+ * mcon/U/d_setpgrp.U: Obsoleted USE_BSDGRP in favor of
+ USE_BSD_SETPGRP. Another unit now also defines a USE_BSD_GETPGRP.
+ Fallback for test program failure improved.
+
+ * mcon/U/d_sgndchr.U, mcon/U/d_wifstat.U: Added a ?F: metalint hint.
+
+ * mcon/U/d_sigvec.U: There is now a separate routine for sigaction().
+
+ * mcon/U/d_stdstdio.U: Merged with perl5's unit.
+
+ * mcon/U/d_syslog.U, mcon/U/mkdep.U: Replaced .o with $_o all over
+ the place.
+
+ * mcon/U/i_dbm.U: Added I_RPCSVC_DBM check.
+
+ * mcon/U/i_varhdr.U: Varargs script now starts with leading "startsh".
+
+ * mcon/U/intsize.U: Avoid prompting the user if the test runs ok.
+ Moved code from longsize.U into there. New tests for shortsize as
+ well.
+
+ * mcon/U/libc.U: Replaced .a with $_a all over the place. Added
+ support for HPUX-10 nm output.
+
+ * mcon/U/libnlist.U: Added usrinc and mips on the dependency line.
+ Make sure we call ./mips. Added a ?LINT: hint.
+
+ * mcon/U/libpth.U: New loclibpth variable.
+
+ * mcon/U/longsize.U: Code moved to intsize.U.
+
+ * mcon/U/mallocsrc.U: Added support for Free_t, the type of free().
+ Replaced .o with $_o all over the place.
+
+ * mcon/U/manfmt.U, mcon/U/mansrc.U: Don't ask for AFS when they
+ choose to not install pages.
+
+ * mcon/U/myhostname.U: Improved hostname lookup by using ypmatch when
+ NIS is used.
+
+ * mcon/U/nblock_io.U: Simplify here document for shells that can't
+ handle them well. Force use of "startsh" at the head of the
+ generated script. Added new files to the ?F: metalint hint.
+
+ * mcon/U/nis.U: Ensure suitable defaults for hostcat and friends.
+
+ * mcon/U/orderlib.U: Replaced .a with $_a all over the place.
+ Likewise for .o replaced by $_o. Now uses the ar located by Loc.U.
+
+ * mcon/U/randbits.U: Added <unistd.h> and <stdlib.h> to the C program
+ test.
+
+ * mcon/U/registers.U: Removed empty ?LINT lines.
+
+ * mcon/U/selecttype.U: Always include <sys/select.h> when available
+ for test.
+
+ * mcon/U/sig_name.U: Brand new algorithm for sig_name and (new!)
+ sig_num.
+
+ * mcon/U/spitshell.U: Removed useless chatter as this is now done
+ very early.
+
+ * mcon/U/ssizetype.U: Integrated perl5 concerns for mis-configured
+ sfio.
+
+ * mcon/U/startperl.U: Warn them if the #! line is too long for their
+ OS.
+
+ * mcon/U/startsh.U: Avoid needless chatter since this is now done
+ very early.
+
+ * mcon/U/usenm.U: Don't use nm with the GNU C library. Added support
+ for Linux shared libs.
+
+ * mcon/U/usrinc.U: Don't ask for the include path unless they are on
+ a MIPS.
+
+ * mcon/U/voidflags.U: Don't prompt them if the void support is high
+ enough for us.
+
+ * mcon/configure: Added the srcdir support now that we have src.U.
+ Random cleanup for nicer help message.
+
+ * mcon/man/mconfig.SH: Documents the runnning environment and the
+ src.U unit. Added warnings for $_a and $_o, as well as "startsh".
+
+ * mcon/man/mlint.SH: New "create" and "empty" lint directives.
+ Documented new messages.
+
+ * mcon/mxref.SH, mcon/man/mxref.SH: New -L option to match metaconfig
+ and metalint.
+
+ * mcon/pl/lint.pl: Added support for ?F: lines to monitor file usage.
+ Now honours "create" and "empty" lint directives.
+
+ * pat/pat.man: Documents contents of the message sent by patnotify.
+
+ * pat/patlog.SH: Typo fix.
+
+ * pat/patnotify.SH: Let them know the patch priority and description.
+
+Mon Sep 25 10:33:26 MET 1995 Raphael Manfredi <ram@hptnos02.grenoble.hp.com>
+
+. Description:
+
+ Smarter sed command to strip /usr/include dependencies in
+ jmake-generated Makfiles. Thanks to Ulrich Pfeifer
+ <pfeifer@buster.informatik.uni-dortmund.de> for contributing it.
+
+ In response to the discussion on dist-users, jmake will now force
+ macro definitions to the left in the generated Makefile, even
+ though they may be nicely formatted in the imake-style within
+ the Jmakefile itself (centered on the =).
+
+ Commented the purpose of the #un-def directive in the relevant
+ unit, since I tend to forget about this hack and almost considered
+ removing it without seeing the consequences. ;-)
+
+ Configure will now abort when a mandatory command is missing.
+ Indeed, Configure relies on such commands to perform its various
+ tasks, and a miss can have dreadful consequences, without the
+ end-users noticing it.
+
+ Protected option parsing code against 'echo -*' option failure.
+
+ Various units are now forced to the top of Configure, if possible.
+ This is mainly interactive questions. Note that dependencies are
+ still respected, i.e. all the units on which those depend will
+ come before, so the top-ness is a relative issue.
+
+ All possible install programs are now looked for, instead of
+ breaking the loop once one was found. Also, to optimize cache
+ access on AFS directories, the lookup is done on directories
+ first, then on programs instead of the other way round.
+
+ New ?Y: directive to change unit layout. You may specify a
+ TOP, DEFAULT or BOTTOM request on that line to respectively
+ force the unit to the earliest possible, default or latest
+ possible place in the Configure script, as dependencies
+ permit.
+
+ Symbols are now sorted according to the ?Y: layout directive.
+
+ If you use the MailAuthor.U unit, you will be interested by the
+ new -i option for patsend to add extra instructions for people
+ receiving mailed patches. patnotify also tells users how to directly
+ request for mailed patches. The patch making process now automatically
+ supply the -i when invoking patsend. Changes contributed by Graham
+ Stoney <greyham@research.canon.oz.au>.
+
+. Files changed:
+
+ * jmake/files/Jmake.rules: Smarter sed command to strip /usr/include
+ dependencies.
+
+ * jmake/jmake.SH: Will now force macro definitions to the left.
+
+ * mcon/U/Config_h.U: Commented the purpose of the #un-def directive.
+
+ * mcon/U/Loc.U: Commented the purpose of the #un-def directive.
+ Abort Configure run when mandatory command is missing.
+
+ * mcon/U/Options.U: Protected option parsing code against 'echo -*'
+ option failure.
+
+ * mcon/U/perlpath.U, mcon/U/manfmt.U, mcon/U/mansrc.U,
+ mcon/U/scriptdir.U, mcon/U/archlib.U, mcon/U/lib.U, mcon/U/privlib.U,
+ mcon/U/bin.U: Unit is now forced to the top of Configure, if possible.
+
+ * mcon/U/install.U: All possible install programs are now looked for.
+
+ * mcon/man/mconfig.SH, mcon/man/mlint.SH: Documented new ?Y:
+ directive. Fixed my e-mail address.
+
+ * mcon/pl/depend.pl, mcon/pl/init.pl, mcon/pl/lint.pl: New ?Y:
+ directive to change unit layout.
+
+ * mcon/pl/makefile.pl: Symbols are now sorted according to the ?Y:
+ layout directive.
+
+ * mcon/pl/xref.pl: Added empty p_layout stub for new ?Y: directives.
+
+ * pat/pat.man: New -i option for patsend to add extra instructions.
+
+ * pat/patmake.SH: Now calls patsend with -i to add more instructions.
+
+ * pat/patnotify.SH: Now tells users how to directly request for
+ mailed patches.
+
+ * pat/patsend.SH: New -i option to add more instructions for
+ end-users.
+
+Tue Jul 25 16:41:40 METDST 1995 Raphael Manfredi <ram@hptnos02.grenoble.hp.com>
+
+. Description:
+
+ pat/Jmakefile was missing an entry for the patlog program, which
+ prevented it from being installed, leading to chaos when patmake
+ was run.
+
+ New contributions from Ilya Zakharevich <ilya@math.ohio-state.edu>
+ to provide OS/2 support. Configure can now be run under OS/2 using
+ a ksh shell interpreter. Support for pdksh is undergoing, as far
+ as I understand.
+
+ The installation of script man pages can now cope with missing
+ files. The jmake rules used to require that all scripts or none
+ have .man files associated with them. From now on, the generated
+ Makefile will check for the manual page existence before trying
+ to install it.
+
+ The clobber target now removes the .config directory as well,
+ which is generated by Configure to cache various information
+ over runs. Since clobber is intended to make a clean distribution,
+ that directory must be removed at that stage.
+
+ All jmake error messages are now prefixed with the program name.
+
+ Re-arranged compile line to include ldflags before objects
+ within all the compile-link tests in the metaconfig units, since
+ some systems require that ld flags be specfied at that place.
+ The only exception to this being the -llib directive, which stays
+ at the end of the line (from Spider Boardman).
+
+ added SVR4-ish /opt directories to path list (ADO)
+
+ Added backslash escapes within evals in Typedef.U to prevent problems
+ when the assigned variables have space in them (such as 'int *')...
+
+ Force compile-link test for dl* routines since those symbols might lie
+ in crt0.o, and not in any other library (ADO)
+
+ Improved comments about the Gconvert macro and forced a compile-link
+ test since the gconvert routine may exist but be unusable because
+ it would refer to otherwise missing routines... Sigh! (ADO)
+
+ Made cc and ccflags optional dependencies in several units.
+
+ Added knowledge of the O_NONBLOCK symbol in d_open3.U (required for
+ non-blocking I/O support, which is now computed by the new nblock_io.U
+ unit).
+
+ Use findhdr to find <sys/shm.h>, to get the right one (ADO)
+
+ Typo fix on ?C: line for FILE_bufsiz in d_stdstdio.U.
+ Also fixed unbalanced parenthesis and check whether FILE_cnt
+ and FILE_ptr can be assigned to, i.e. may be used as lvalues. (ADO)
+
+ Typo fix, sytem -> system in d_time.U and d_times.U.
+
+ Conditionally use const in test programs for i_db.U (ADO)
+
+ Use setvar so hint file values can override our guesses in
+ i_pwd.U. (ADO)
+
+ Removed <> characters from comments, per metalint suggestion
+
+ Ensure ctrl-A characters are visible in prompt within the
+ mboxchar.U unit (WED)
+
+ Removed harmful spaces in assignment for selecttype.U.
+
+ Added <asm/signal.h> lookup for correct signal name lookup
+ under linux. That's probably as far as we'll get to support
+ those idiosyncracies.
+
+ Obsoleted KEEPALIVE in favor of CAN_KEEPALIVE for consistency
+ with the 3.0 naming scheme.
+
+ New metaconfig -G option to include a GNU configure-like
+ wrapper over the generated Configure script. That way,
+ people with a GNU background will be able to use (some) of
+ the GNU configure options to configure the package. The
+ wrapper computes suitable Configure options and then launches
+ that script.
+
+ Manual page for metaconfig now documents the new -G option,
+ includes an extended description of the Csym.U unit and
+ mentions what a compile-link test line should look like.
+
+ Metalint will now check : comments line for potential danger,
+ since those lines are really interpreted by the shell. Therefore,
+ unbalanced quotes could cause huge parts of the Configure script
+ to be ignored at run time, yielding weird results. Anyway,
+ metalint will tell you about them.
+
+ Two new files: a new unit, and the GNU configure-like wrapper.
+
+. Files changed:
+
+ * Jmakefile: Re-ordered macros, moving the install at the end.
+
+ * bin/packinit.man: Fixed a typo.
+
+ * jmake/files/Jmake.rules: Install of script man pages can now cope
+ with missing files. The clobber target now removes the .config
+ directory as well.
+
+ * jmake/jmake.SH: All error messages are now prefixed with the
+ program name.
+
+ * mcon/Jmakefile: Installs the GNU configure-like front-end to
+ Configure.
+
+ * mcon/U/Csym.U: Re-arranged compile line to include ldflags before
+ objects. Added quotes for OS/2 support.
+
+ * mcon/U/libs.U, mcon/U/Loc.U, mcon/U/Guess.U, mcon/U/Oldconfig.U,
+ mcon/U/libc.U: Now knows about OS/2 platforms.
+
+ * mcon/U/Head.U: Added SVR4-ish /opt directories to path list (ADO).
+ OS/2 platforms are using another path separator.
+
+ * mcon/U/Typedef.U: Added backslash escapes within evals to prevent
+ space problems.
+
+ * mcon/U/d_safebcpy.U, mcon/U/d_wifstat.U, mcon/U/d_setpgrp.U,
+ mcon/U/ccflags.U, mcon/U/d_safemcpy.U: Re-arranged compile line to
+ include ldflags before objects.
+
+ * mcon/U/d_dlerror.U, mcon/U/d_dlopen.U: Force compile-link test
+ since symbol might lie in crt0.o (ADO).
+
+ * mcon/U/d_gconvert.U: Improved comments about the Gconvert macro
+ (ADO). Force compile-link test since it may exist but be unusable
+ (ADO).
+
+ * mcon/U/d_volatile.U, mcon/U/d_sgndchr.U, mcon/U/d_scannl.U,
+ mcon/U/d_keepsig.U: Made cc and ccflags optional dependencies.
+
+ * mcon/U/d_open3.U: Added knowledge of the O_NONBLOCK symbol.
+
+ * mcon/U/d_shmat.U: Use findhdr to find <sys/shm.h>, to get the right
+ one (ADO).
+
+ * mcon/U/d_stdstdio.U: Typo fix on ?C: line for FILE_bufsiz. Fixed
+ unbalanced parenthesis (ADO). Check whether FILE_cnt and FILE_ptr
+ can be assigned to (ADO).
+
+ * mcon/U/d_times.U, mcon/U/d_time.U: Typo fix, sytem -> system.
+
+ * mcon/U/i_db.U: Conditionally use const in test programs (ADO).
+
+ * mcon/U/i_pwd.U: Use setvar so hint file values can override our
+ guesses (ADO).
+
+ * mcon/U/i_sysfile.U: Removed <> characters from comment, per
+ metalint suggestion.
+
+ * mcon/U/mboxchar.U: Ensure ctrl-A characters are visible in prompt
+ (WED).
+
+ * mcon/U/nblock_io.U, mcon/configure: Created.
+
+ * mcon/U/selecttype.U: Removed harmful spaces in assignment.
+
+ * mcon/U/sig_name.U: Added <asm/signal.h> lookup for linux.
+
+ * mcon/U/sockopt.U: Obsoleted KEEPALIVE in favor of CAN_KEEPALIVE for
+ consistency.
+
+ * mcon/man/mconfig.SH: Added extra nroff escapes at line heads to
+ keep leading dots. Documented new -G option. Extended description
+ of the Csym.U unit. Now mentions what a compile-link test line
+ should look like.
+
+ * mcon/man/mlint.SH: Added two new warnings for : comments lines in
+ Configure.
+
+ * mcon/mconfig.SH: New -G option.
+
+ * mcon/pl/cosmetic.pl: Added support for new -G option.
+
+ * mcon/pl/lint.pl: Will now check : comments line for potential
+ danger.
+
+ * pat/Jmakefile: Was missing an entry for the patlog program.
+
+Fri May 12 14:39:16 METDST 1995 Raphael Manfredi <ram@hptnos02.grenoble.hp.com>
+
+. Description:
+
+ Regenerated Configure with pre-release of PL54.
+
+ Updated my e-mail address in all manual pages. I had forgotten
+ about that in my previous patch.
+
+ Various fixes in units from Andy Dougherty. Thanks to him and
+ to the efficient perl5-porters team that strive to port perl5
+ to every possible existing platform on Earth, hence making
+ Configure more and more robust ;-). Here are Andy's fixes:
+
+ . split awk command onto two lines for older awks
+ . fixed C test program to bypasss gcc builtin type checks
+ . deleted tabs that caused some /bin/sh to core dump
+ . cleaned up and extended osvers for DEC OSF/1
+ . added MachTen detection
+ . protect against spaces in "uname -m" output
+ . extended for more intimate DB probing
+ . made more robust [ng]dbm units by checking both header
+ and libraries for features
+ . can now grok linux nm output with leading __IO
+ . added support for linux ELF output, using 'W' for alias
+ . now looks for <linux/signal.h> too
+ . ensure that ./mips always exists
+
+ Added -K option for experts. That Configure option should only
+ be used when you know what you are doing. The config.sh reload
+ logic now knows about new -K switch so that you now have to say:
+ Configure -dK
+ to get the old
+ Configure -d
+ behaviour.
+
+ Configure now checks for a valid C compiler and that the
+ specified ccflags and ldflags are coherent with the choice
+ of the C compiler. It aborts if the C compiler does not
+ work (since it might be used for feature testing), but only
+ offers to abort when a flag inconsistency is detected.
+ Contributed by Tye McQueen (again!).
+
+ Complete rewrite of d_stdstdio.U by Tye McQueen to fit modern
+ systems. The USE_STD_STDIO symbol has been obsoleted by the
+ new USE_STDIO_PTR symbol. Also, access to _ptr, _cnt and
+ _base fields in the FILE structure should be made only via the
+ new metaconfig macros FILE_ptr, FILE_cnt, etc...
+
+ Made sure only most recent version of shared lib is picked.
+ This is for systems where libc.so.3 and libc.so.13 might
+ co-exist. We really need to pick the second one, whereas the
+ previous alphabetic sort was picking the first.
+
+ Final "nm -p" check now uses xscan and xrun like everybody.
+ It used to do its checking manually. Using xscan and xrun allows
+ for the printing of the busy dots while scanning.
+
+ The patpost script will now add an explicit From: header line
+ pointing to the maintainer address, as configured in your
+ .package. This is to prevent broken inews to insert the hostname
+ where patpost is ran, which might not be visible from the outside.
+
+. Files changed:
+
+ * pat/pat.man, bin/packinit.man, jmake/jmake.man, kit/kitpost.man,
+ bin/manilist.man, kit/makedist.man, jmake/jmkmf.man, kit/manifake.man,
+ , dist.man: Updated my e-mail address.
+
+ * mcon/U/Cppsym.U: Split awk command onto two lines for older awks
+ (ADO).
+
+ * mcon/U/Csym.U: Fixed C test program to bypasss gcc builtin type
+ checks (ADO).
+
+ * mcon/U/Inhdr.U: Deleted tabs that caused some /bin/sh to core dump
+ (ADO).
+
+ * mcon/U/Oldconfig.U: Config.sh reload logic now knows about new -K
+ switch. Cleaned up and extended osvers for DEC OSF/1 (ADO). Added
+ MachTen detection (ADO).
+
+ * mcon/U/Options.U: Added -K option for experts.
+
+ * mcon/U/archname.U: Protect against spaces in "uname -m" output
+ (ADO).
+
+ * mcon/U/cc.U: May now abort Configure when cc does not work.
+
+ * mcon/U/ccflags.U: Now checks for cc/ccflags/ldflags coherency.
+
+ * mcon/U/d_casti32.U: Made sure cc and ccflags are conditional
+ dependencies.
+
+ * mcon/U/d_castneg.U: Made sure cc and ccflags are conditional
+ dependencies. Added improved test case for Interactive Unix.
+
+ * mcon/U/d_stdstdio.U: Complete rewrite by Tye McQueen to fit modern
+ systems.
+
+ * mcon/U/d_voidsig.U: Made cppflags dependency optional.
+
+ * mcon/U/i_db.U: Extended for more intimate DB probing (ADO).
+
+ * mcon/U/i_gdbm.U, mcon/U/i_ndbm.U, mcon/U/i_dbm.U: Made more robust
+ by checking both header and lib (ADO).
+
+ * mcon/U/libc.U: Made sure only most recent version of shared lib is
+ picked. Final "nm -p" check now uses xscan and xrun like everybody.
+ Can now grok linux nm output with lead __IO (ADO). Added support for
+ linux ELF output, using 'W' for alias (ADO).
+
+ * mcon/U/sig_name.U: Now looks for <linux/signal.h> too (ADO).
+
+ * mcon/U/usrinc.U: Ensure that ./mips always exists (ADO).
+
+ * mcon/man/mconfig.SH: Documented new -K switch for knowledgeable
+ users.
+
+ * pat/patpost.SH: Added explicit From: header line pointing to the
+ maintainer.
+
+Tue Mar 21 09:55:57 MET 1995 Raphael Manfredi <ram@hptnos02.grenoble.hp.com>
+
+. Description:
+
+ Regenerated Configure to reflect my email address change. I moved
+ from ACRI to HP, and my email is now: <ram@hptnos02.grenoble.hp.com>.
+ The "critical" nature of this patch is due to that mere fix.
+
+ Jmake was not working at all on HP-UX due to the way their cpp
+ systematically removes trailing backslashes in text. The new
+ fixcpp script is now a wrapper over cpp to first escape those
+ backslashes that should be preserved accross cpp before feeding
+ it with the text of the Jmakefile...
+
+ Suppressed extra argument to NormalProgramTarget call in jmake rules.
+
+ Definition of the paths variable in Head.U wrongly added spurious
+ ':' chars. Thanks to Karst Koymans <Karst.Koymans@phil.ruu.nl> for
+ pointing it out.
+
+ Swapped two first arguments of memcpy() calls for memcpy safe
+ overlapping copy tests. Indeed, the memcpy() calling sequence used
+ was the same as bcopy(), but the first two arguments should be
+ swapped to preserve the same semantics.
+
+ Continued fix for NeXT NIS/NetInfo handling, from Graham Stoney.
+
+ Two new files.
+
+. Files changed:
+
+ * jmake/Jmakefile: Now installs new fixcpp script in the private
+ libdir.
+
+ * jmake/files/Jmake.rules: Suppressed extra argument to
+ NormalProgramTarget call.
+
+ * jmake/fixcpp.SH, mcon/U/d_wifstat.U: Created.
+
+ * jmake/jmake.SH: Now invokes cpp through new fixcpp script. First
+ pass now skips cpp comments alltogether.
+
+ * mcon/U/Head.U: Definition of paths wrongly added spurious ':' chars.
+
+ * mcon/U/d_safemcpy.U: Swapped two first arguments of memcpy() calls.
+
+ * mcon/U/nis.U: Continued fix for NeXT NIS/NetInfo handling.
+
+Wed Feb 15 15:23:06 MET 1995 Raphael Manfredi <ram@acri.fr>
+
+. Description:
+
+ This patch only contains random cleanup and minor fixes that were
+ brought to my attention on the dist-users list.
+
+ Regenerated Configure with pre-release of 3.0 PL51, since it
+ was a little outdated.
+
+ Wayne Davison's changes:
+ . now clearer about how to edit config.sh at the end of Configure.
+ . Getfile was not working if ~'s allowed with d_portable on
+ . Instruct.U: author name now appears at the end of a paragraph
+
+ Andy Dougherty adapted osvers computation for AIX. He also
+ fixed mansrc.U where I had mistakenly duplicated /usr/local/man/man1.
+ He added /opt/man/man1 to the lookpath instead, a change originating
+ from Tye McQueen <tye@metronet.com>.
+
+ Architecture name is now computed by a separate unit. This allows
+ authors to precompute it in a hint file, while warning the user
+ when the machine's architecture name changes (because for instance
+ the OS was upgraded), preventing mistakes.
+
+ Now correctly handles NeXT using NIS rather than NetInfo, thanks
+ to a patch sent by Graham Stoney <greyham@research.canon.oz.au>.
+
+ One new file (unit archname.U).
+
+. Files changed:
+
+ * mcon/U/Finish.U: Now clearer about how to edit config.sh at the
+ prompt (WED).
+
+ * mcon/U/Getfile.U: Was not working if ~'s allowed with d_portable on
+ (WED).
+
+ * mcon/U/Instruct.U: Author name now appears at the end of the
+ paragraph (WED).
+
+ * mcon/U/Oldconfig.U: Adapted osvers computation for AIX (ADO).
+
+ * mcon/U/archlib.U: Architecture name is now computed by a separate
+ unit.
+
+ * mcon/U/archname.U: Created.
+
+ * mcon/U/mansrc.U: Was mistakenly duplicating /usr/local/man/man1
+ (ADO). Added /opt/man/man1 to the lookpath (ADO).
+
+ * mcon/U/nis.U: Now correctly handles NeXT using NIS rather than
+ NetInfo.
+
+Mon Jan 30 15:59:00 MET 1995 Raphael Manfredi <ram@acri.fr>
+
+. Description:
+
+ The dist-3.0 package now works with perl 5.0. I have made perl 5.0
+ the default perl on my machine and ran the whole set of pat* tools,
+ jmake and metaconfig without any trouble so far. However, you need
+ a patched-up version of perl 5.0 PL0, as explained in README.
+
+ This set of patches is mainly an integration of Wayne Davison's
+ changes for trn. His changes are flagged as WED.
+
+ Begin.U:
+ Avoid an empty rmlist: systems might choke on it (WED).
+
+ Config_h.U:
+ Typo fixes in leading config.h comment (WED).
+
+ Oldconfig.U:
+ Update code for myuname changed (WED).
+
+ Configure can now handle installation prefix changes. I have
+ slightly adapted the changes proposed by Wayne, introducing two
+ new special units (Prefixit.U and Prefixup.U) to factorize code.
+
+ d_attribut.U:
+ Test C program now includes <stdio.h> (WED)
+
+ page.U:
+ Ensure dflt gets initialized in case no pagers are found (WED)
+
+ prefix.U:
+ Save off previous prefix value in oldprefix if changed (WED)
+ Added the INSTALLPREFIX define for C programs to use (WED)
+
+ Archname is now systematically recomputed. This avoids problem when
+ the user changes his mind about the OS name.
+
+ Now looks for POSIX regcomp() routine, and for <regex.h>, thanks
+ to Sidney C. Smith <scsmith@cbda9.apgea.army.mil>.
+
+ New installmanfmt and AFS-lookup for formatted man pages, derived
+ from what is done for troffed man pages.
+
+ New prefixexp variable holding a fully expanded prefix, in case
+ they use ~name expansion in their prefix.
+
+ Documented new special units Prefixit.U and Prefixup.U.
+
+ Clean-up and workarounds for perl 5.0 PL0 port:
+ Removed old "do name()" routine call constructs.
+ Forgot to localize the spaces variable.
+ Random clean-up in &record_obsolete.
+
+ Three new files.
+
+. Files changed:
+
+ * mcon/U/Begin.U: Avoid an empty rmlist: systems might choke on it
+ (WED).
+
+ * mcon/U/Config_h.U: Typo fixes in leading config.h comment (WED).
+
+ * mcon/U/Oldconfig.U: Unit Options.U now exports file optdef.sh, not
+ a variable. Update code for myuname changed (WED).
+
+ * mcon/U/Options.U: This unit now exports file optdef.sh, not a
+ variable.
+
+ * mcon/U/i_regex.U, mcon/U/Prefixit.U, mcon/U/Prefixup.U: Created.
+
+ * mcon/U/archlib.U: Archname is now systematically recomputed. Can
+ now handle installation prefix changes (from WED).
+
+ * mcon/U/mansrc.U, mcon/U/scriptdir.U, mcon/U/lib.U, mcon/U/privlib.U,
+ , mcon/U/bin.U: Can now handle installation prefix changes (from WED).
+
+ * mcon/U/d_attribut.U: Test C program now includes <stdio.h> (WED).
+
+ * mcon/U/d_regcmp.U: Now looks for POSIX regcomp() routine.
+
+ * mcon/U/manfmt.U: New installmanfmt and AFS-lookup for formatted man
+ pages. Can now handle installation prefix changes (from WED).
+
+ * mcon/U/pager.U: Ensure dflt gets initialized in case no pagers are
+ found (WED).
+
+ * mcon/U/prefix.U: New prefixexp variable holding a fully expanded
+ prefix. Save off previous prefix value in oldprefix if changed
+ (WED). Added the INSTALLPREFIX define for C programs to use (WED).
+
+ * mcon/U/rootid.U: Now only prints a single empty line when
+ outputting something.
+
+ * mcon/man/mconfig.SH: Documented new special units Prefixit.U and
+ Prefixup.U.
+
+ * mcon/pl/configure.pl, mcon/pl/eval.pl: Removed old "do name()"
+ routine call constructs.
+
+ * mcon/pl/cosmetic.pl: Forgot to localize the spaces variable.
+
+ * mcon/pl/obsolete.pl: Random clean-up in &record_obsolete.
+
+Wed Jan 11 17:03:22 MET 1995 Raphael Manfredi <ram@acri.fr>
+
+. Description:
+
+ Regenerated Configure with pre-release of metaconfig PL45 to
+ benefit from the new install program lookup. From now on, the
+ supplied install.SH script will not be used if a BSD-compatible
+ install executable is found on your host (to accelerate the whole
+ install procedure).
+
+ Regenerated many Makefile.SH files with pre-release of jmake PL45
+ to correctly handle the new install and installdir configuration
+ variables.
+
+ Updated the Wishlist file.
+
+ New jmake macros. Also the MakeDirs macro was modified to benefit
+ from the information gathered by Configure concerning the way to
+ install nested directories (uses the new installdir variable).
+
+ As a consequence, Makefile.SH files now pre-compute INSTALL and
+ INSTALLDIR variables before substituting (concerns jmake-generated
+ makefiles).
+
+ Moved path stripping from d_portable.U to end of Configure. This
+ lets Configure use $vi and $perl, etc... set to their fully
+ qualified path name, hence making it easier for units to know
+ whether a particular program was located. Formerly, you had to
+ use $_vi, $_perl, etc... in case they asked for portability, which
+ stripped out executable paths.
+
+ New cc vs. cpp symbol checking, as well as more cpp symbols in
+ the attribute list. Configure will now try to determine separately
+ symbols defined by cpp and by the cc wrapper, letting you know about
+ what is defined and by whom. Thanks to Jarkko Hietaniemi for this
+ suggestion.
+
+ Added support for escaping answers to skip various checks in the
+ Getfile.U unit. For instance, you may now say:
+ fn='/fe~(foo)'
+ . ./getfile
+ and let them answer only fully qualified paths OR the string 'foo'.
+ You may supply a comma-separated list between the parenthesis. See
+ the manual page or the new install.U unit for more information.
+
+ Modified message issued after file expansion in the Getfile unit.
+
+ Protected various "sh -c" calls within backquotes for Linux and
+ SGI shells (to prevent an "ambiguous output redirection" message).
+ Thanks to Xavier Le Vourch for suggesting it.
+
+ Added & escape allowing user to turn on -d from the prompt. Several
+ people have expressed the need for such a feature, arguing that
+ once they have re-run a Configure script to fix the answer to a
+ particular question, they would like to have the remaining of the
+ script ran as if -d had been given to Configure. Well, they now
+ may reply '& -d' at the Myread prompt to turn -d on.
+
+ New -O option allowing -D and -U to override config.sh setttings.
+ This may be used to alter particular variables but still re-use
+ most of the previously guessed-at ones. Still, this may produce
+ inconsistencies and therefore is not the default behaviour (the
+ -D and -U switches have no effect by default if a previous config
+ file is loaded).
+
+ Therefore, file optdef.sh is no longer removed after sourcing from
+ the UU directory.
+
+ Changed gcc checking message to a more explicit one (WED)
+ Call ./mips instead of just mips (WED)
+ Use 'test -f' instead of 'test -r' for exec-only cat progs (WED)
+ Fixed typo in the d_attribut variable (ADO)
+
+ New unit install.U to locate BSD-compatible install programs.
+ New unit poll.U to check for the poll() routine availability.
+
+ Allows hint files to specify their own value for 'ranlib', to
+ overcome a bug in the NeXT ranlib program. Suggested by
+ Andreas Koenig <k@franz.ww.tu-berlin.de> on the perl5-porters
+ mailing list. Thanks!
+
+ Now sets sbrksmart to undef explicitly when lacking sbrk().
+ Forgot a cast when using return value from sbrk(). Both fixes
+ reported by Xavier Le Vourch <xavierl@eiffel.com>.
+
+ Now allows @if statements for the add.Config_sh unit inclusion.
+
+ Metaconfig will now tell users about possible extra file-extension
+ lookups they have requested via 'packinit'.
+
+. Files changed:
+
+ * jmake/files/Jmake.rules: New macros ShellScriptTargetExt and
+ SimpleShellScriptTargetExt. Directory installation is now made via
+ INSTALLDIR (Configure).
+
+ * jmake/files/Jmake.tmpl: Now pre-computes INSTALL and INSTALLDIR
+ variables.
+
+ * mcon/U/Config_sh.U: Moved path stripping from d_portable.U to end
+ of Configure.
+
+ * mcon/U/Cppsym.U: New cc vs. cpp symbol checking suggested by JHI.
+ Added more cpp symbols (JHI).
+
+ * mcon/U/Getfile.U: Added support for escaping answers to skip
+ various checks. Modified message issued after file expansion.
+
+ * mcon/U/Instruct.U: Now documents the & escape to turn -d on at the
+ read prompt.
+
+ * mcon/U/Loc.U: Protected "sh -c" within backquotes for Linux and
+ SGI. Added path lookup for the 'comm' program.
+
+ * mcon/U/Myread.U: Added & escape allowing user to turn on -d from
+ the prompt.
+
+ * mcon/U/Oldconfig.U: Added quotes around the INITPROG variable
+ (ADO). Allows variable overriding after config file loading.
+
+ * mcon/U/Options.U: New -O option allowing -D and -U to override
+ config.sh setttings. File optdef.sh is no longer removed after
+ sourcing.
+
+ * mcon/U/cc.U: Changed gcc checking message to a more explicit one
+ (WED).
+
+ * mcon/U/d_attribut.U: Fixed typo in the d_attribut variable (ADO).
+
+ * mcon/U/d_keepsig.U: Protected "sh -c" within backquotes for Linux
+ and SGI.
+
+ * mcon/U/install.U, mcon/U/d_poll.U: Created.
+
+ * mcon/U/d_portable.U: Executable path stripping moved to the end in
+ Config_sh.U.
+
+ * mcon/U/d_safebcpy.U: Added 'ldflags' to the test compile line (ADO).
+
+ * mcon/U/defeditor.U: Can now use the 'vi' variable since path
+ stripping is deferred.
+
+ * mcon/U/libpth.U: Call ./mips instead of just mips (WED).
+
+ * mcon/U/perlpath.U, mcon/U/mansrc.U, mcon/U/mailer.U: Can now use
+ Loc variables since path stripping is deferred.
+
+ * mcon/U/orderlib.U: Allows hint files to specify their own value for
+ 'ranlib'.
+
+ * mcon/U/sbrksmart.U: Now sets sbrksmart to undef explicitly when
+ lacking sbrk(). Forgot a cast when using return value from sbrk().
+
+ * mcon/U/spitshell.U: Use 'test -f' instead of 'test -r' for
+ exec-only cat progs (WED). Protected "sh -c" within backquotes for
+ Linux and SGI.
+
+ * mcon/U/voidflags.U: Cosmetic change to avoid spurious blank lines
+ when using -s.
+
+ * mcon/man/mconfig.SH: Documents new -O option and new Getfile escape
+ supports. Documents the & escape in Myread and the new cc symbol
+ lookup.
+
+ * mcon/pl/configure.pl: Now allows @if statements for the
+ add.Config_sh unit inclusion.
+
+ * mcon/pl/wanted.pl: Added % in front of hash table names for perl5's
+ each() (ADO). Tell users about possible extra file-extension lookups.
+
+Mon Oct 31 10:57:05 MET 1994 Raphael Manfredi <ram@acri.fr>
+
+. Description:
+
+ It used to be that option processing was done before Configure
+ initializations were performed, because Options was listed in
+ the dependency line of Init.U. However, this was wrong because
+ -D and -U command line switches were then unable to override any
+ default setting done in Myinit.U, which is counter-intuitive at
+ best. Thanks to Andras Salamon <andras@is.co.za> for pointing
+ this out.
+
+ I therefore created a new unit Begin.U, which clearly marks
+ the beginning of the configuration questions (so End.U now
+ has its pending unit). On that unit, we list Myinit followed
+ by Options on the ?MAKE: line, so that option processing
+ comes after user-defined or default initializations but before
+ the real interactive start (which is mandatory for a correct
+ Configure -h processing, for instance).
+
+ A few units were making use of variables set up in Options.U
+ and made visible. However, those did not need to list Options
+ in their ?MAKE: line due to the way metalint performs its visible
+ symbol lookup (by following dependencies recursively and implicitely
+ placing Init at the top). Since Options is no longer a dependency
+ of Init, Myread.U and Csym.U now explicitly mention Options in
+ their dependency line.
+
+ Also, the leading comment in Chk_MANI.U now explains how this
+ unit gets included into the Configure script. There used to be
+ an explaination there, but it was no longer accurate.
+
+ One new unit file (Begin.U).
+
+. Files changed:
+
+ * mcon/U/Begin.U: Created.
+
+ * mcon/U/Chk_MANI.U: Now lists Begin instead of Myinit in its
+ dependencies. Leading comment now explains how this unit is included.
+
+ * mcon/U/Myread.U, mcon/U/Csym.U: Added Options to the MAKE line
+ since it's no longer in Init.U.
+
+ * mcon/U/Init.U: Removed Options from MAKE to prevent Init overrides.
+ Option processing now done after Myinit thanks to new Begin.U. Moved
+ "Beginning of configuration questions" to Begin.U. Moved signal
+ trapping instruction to Begin.U as well.
+
+ * mcon/U/Myinit.U: Leading comment states this unit comes before
+ option processing.
+
+Sat Oct 29 19:05:42 MET 1994 Raphael Manfredi <ram@acri.fr>
+
+. Description:
+
+ I forgot to quote $@ to protect against "evil" characters.
+ Unfortunately, this causes Configure to output an error message
+ when calling the created 'tr' script (which it does all the time
+ given the leading '.' in PATH) with arguments like '\012'. The
+ final
+ exec tr $@
+ line causes a 'tr' failure because it does not understand the
+ arguments it is given. Saying
+ exec tr "$@"
+ fixes the problem since then the original quotes are "propagated"
+ to the new call.
+
+ The amazing thing is that I have tested this, but apparently the
+ simple Configure script I generated for that purpose did not make
+ use of the "tr '/012' ' '" construct. Hence I missed it. Sorry.
+
+. Files changed:
+
+ * mcon/U/Tr.U: Forgot to quote $@ to protect against "evil"
+ characters.
+
+Sat Oct 29 18:16:03 MET 1994 Raphael Manfredi <ram@acri.fr>
+
+. Description:
+
+ Regenerated Configure with metaconfig 3.0 PL35 to benefit from
+ the lattest enhancements. Unfortunately, I have not pre-installed
+ the patch relased before regenerating, so Configure is still behind
+ the current patchlevel. I hope you don't mind ;-)
+
+ The good news is: I've made sure all the scripts compile fine
+ with perl 5.0. This involved fixing an open precedence problem
+ in manilist, and some escapes in strings and regexps to make
+ sure all dangerous '@' are protected since they now interpolate.
+ I also fixed perload since perl5's packages are now introduced
+ by '::' instead of the single quote.
+
+ The bad news is: it's not guaranteed to work. At least with the
+ pre-release version of perl 5.0 I have, metaconfig (the dataloaded
+ version) fails, and I've not been able to narrow down the problem
+ to a small test-case so I don't know what's happening. The non
+ dataloaded version appears to be running fine, but if you get
+ strange problems, make sure you use perl 4.0 PL36 before sending
+ me a bug report. :-)
+
+ Added support for user-defined C and shell file extensions. This
+ was needed in perl5 for instance (.xs files are containing C
+ symbols and metaconfig should really look at those). Well, you
+ may now add as many extensions (C or SH) from within packinit.
+
+ Packinit also asks whether a ChangeLog file is to be managed.
+ This is a new feature relying on the new patlog script. If you
+ don't ask for a ChangeLog file, you should get the old behaviour.
+ If you do, well you will have to read the documentation to know
+ what changes it involves (mainly at the user-interface level when
+ running 'patmake', which now calls 'patlog'). Don't forget to
+ add ChangeLog to your MANIFEST.new before running patmake anyway.
+
+ Optionally, you can include the RCS logs within your ChangeLog
+ file, and they will follow the description (what you are reading
+ now) which normally appears within the Description: section of
+ the patch itself.
+
+ Packinit now creates new variables cext, shext, changelog and
+ changercs in the .package file to handle user-defined file extensions
+ and the ChangeLog file.
+
+ Added new RemoteDependency rule for jmake.
+
+ Don't use rootid as a variable, it is known by metaconfig and
+ results in having Configure compute the root uid when it's not
+ needed. Renamed it to rootmsgid to avoid this kind of problem.
+
+ Added ?F: lines in units creating files for metalint checking.
+ This incurred many small changes in units where things like
+ if usg; then
+ were written when in fact meaning:
+ if ./usg; then
+ Well, I know Configure sets '.' at the beginning of the PATH, but
+ since metalint now systematically warns about such abuse (provided
+ files are declared in the ?F: lines in the special unit defining
+ them), it was the only way to shut up metalint.
+
+ Metalint also now checks for variables used as ${var}.
+
+ Symbols ardent and titan are now looked at for cpp definition. (ADO)
+
+ Make sure ENV is unset before calling /bin/ksh. Not doing this
+ is known to produce strange results. For instance, if one has
+ a ~/.kshrc aliasing 'cd' to something else. Configure might
+ get confused and do the wrong thing. Not setting ENV ensures
+ no such startup file will be used. Of course, this does not
+ work if you say 'ksh Configure', but then you are supposed to
+ know what you are doing.
+
+ The loc script can now perform safe wildcard searching. (ADO)
+
+ The Oldconfig.U unit was merged with the version used for perl5's
+ Configure (ADO). Be careful if you use hints, the behaviour you
+ will now get might not be fully backward compatible. Since the
+ Author currently does not have any such package, he did not test
+ that specific feature. You have been warned. (But everything
+ should be fine).
+
+ Configure now protects variable definitions with spaces in them,
+ so that people saying:
+ Configure -D cc='cc -posix'
+ will get what they expect.
+
+ Added checks for secure setuid scripts. (Tye McQueen)
+
+ Spurious single quote in the lex.U unit could cause Configure
+ to crash, reported by Xavier Le Vourch <xavierl@eiffel.com>.
+ Indeed, the unit was saying something like
+ : .... and they'll ...
+ so the shell happily began to eat everything up to the next
+ single quote it could found, resulting in weird behaviours...
+
+ Now looks for shared libraries before anything else and
+ removed the old broken thislib/thatlib processing in libs.U.
+ This has been tested in the perl5 distribution and is believed
+ to be better than the previous scheme. (ADO)
+
+ New Tr unit to convert to/from lowercase. Whenever you need
+ to say:
+ tr '[A-Z]' '[a-z]'
+ or the other way round, add Tr in your dependency line and
+ say something like
+ ./tr '[A-Z]' '[a-z]'
+ i.e. you need to call a local tr script that will trap the
+ arguments and possibly call
+ tr '[:upper:]' '[:lower:]'
+ if your machine supports this. Otherwise, with a non-ascii
+ character set, you will get strange results (HP is know
+ to exercise this, thanks to Andreas Sahlbach
+ <a.sahlbach@tu-bs.de> for letting me know about it).
+
+ ranlib checking is more accurate now (ADO)
+
+ Newer RCS programs chop trailing spaces in log messages, and
+ that could cause 'patcil -s' to fail stripping the RSC logs.
+
+ separated V/E and v/e commands in the patcil built-in prompter.
+ The new 'v' command now edits the file being patcil'ed.
+ added hook for 'V' command (not implemented yet)
+ The 'e' and 'E' commands have retained their semantics.
+
+ 19 new files, mostly metaconfig units.
+
+. Files changed:
+
+ * bin/manilist.SH: Fixed open precedence problem for perl5.
+
+ * bin/packinit.SH: Added support for user-defined C and shell file
+ extensions. Now asks whether a ChangeLog file is to be managed.
+
+ * bin/packinit.man: Added new variables cext, shext, changelog and
+ changercs.
+
+ * bin/perload: Added minimal support for perl5 dataloading.
+
+ * dist.man: Mentions new patlog script and ChangeLog file.
+
+ * jmake/files/Jmake.rules: Added RemoteDependency rule.
+
+ * jmake/jmake.SH, pat/patnotify.SH, mcon/pl/depend.pl: Added various
+ escapes in strings for perl5 support.
+
+ * kit/kitpost.SH: Don't use rootid as a variable, it is known by
+ metaconfig.
+
+ * mcon/U/bitpbyte.U, mcon/U/d_NOFILE.U, mcon/U/mkdep.U,
+ mcon/U/d_PORTAR.U, mcon/U/alignbytes.U, mcon/U/byteorder.U,
+ mcon/U/Finish.U, mcon/U/nlist_pfx.U, mcon/U/charorder.U,
+ mcon/U/d_getpagsz.U, mcon/U/ptrsize.U, mcon/U/intsize.U,
+ mcon/U/Getfile.U, mcon/U/Extract.U, mcon/U/Myread.U, mcon/U/Whoa.U,
+ mcon/U/longsize.U, mcon/U/floatsize.U, mcon/U/Config_sh.U,
+ mcon/U/cppstdin.U, mcon/U/doublesize.U, mcon/U/Findhdr.U,
+ mcon/U/i_varhdr.U, mcon/U/charsize.U: Added ?F: line for metalint
+ file checking.
+
+ * mcon/U/Cppsym.U: Added ?F: line for metalint file checking. New
+ symbols ardent and titan (ADO).
+
+ * mcon/U/Filexp.U: Added ?F: line for metalint file checking. Added
+ HOME to the ?T: line since metalint now checks ${HOME}.
+
+ * mcon/U/Guess.U: Added ?F: line for metalint file checking. Call
+ ./xenix explicitly instead of relying on PATH.
+
+ * mcon/U/Head.U: Make sure ENV is unset before calling /bin/ksh.
+
+ * mcon/U/Setvar.U, mcon/U/Inhdr.U, mcon/U/Inlibc.U: Call ./whoa
+ explicitly instead of relying on PATH.
+
+ * mcon/U/Loc.U: Added ?F: line for metalint file checking. Be
+ careful and guard against wildcard searching (ADO).
+
+ * mcon/U/Oldconfig.U: Added ?F: line for metalint file checking.
+ Merged with the version used for perl5's Configure (ADO).
+
+ * mcon/U/Options.U: Ensure option definition file is removed before
+ appending. Protect variable definitions with spaces in them.
+
+ * pat/patlog.SH, mcon/U/Tr.U: Created.
+
+ * mcon/U/Typedef.U: Don't clobber visible 'val' variable, use
+ 'varval' instead.
+
+ * mcon/U/Warn_v7EXT.U, mcon/U/Warn_v7ND.U: Call ./v7 explicitly
+ instead of relying on PATH.
+
+ * mcon/U/abortsig.U, mcon/U/d_bsdjmp.U: Call ./usg explicitly
+ instead of relying on PATH.
+
+ * mcon/U/d_attribut.U, mcon/U/d_gconvert.U, mcon/U/d_drem.U,
+ mcon/U/d_locconv.U, mcon/U/d_mkfifo.U, mcon/U/d_fmod.U,
+ mcon/U/d_linuxstd.U, mcon/U/d_pathconf.U, mcon/U/archlib.U,
+ mcon/U/d_dlerror.U, mcon/U/d_sysconf.U, mcon/U/i_dld.U,
+ mcon/U/modetype.U: Created by ADO.
+
+ * mcon/U/cc.U: Detect gcc even when not called as 'gcc' (ADO).
+ Simplified gcc version checking (ADO). Added ?F: line for metalint
+ file checking.
+
+ * mcon/U/ccflags.U: Gcc versionning no longer relies on the C
+ compiler's name. Simplified check for gcc version checking (ADO).
+
+ * mcon/U/cpp_stuff.U: Now uses cppstdin instead of plain cpp for
+ consistency (ADO). Remove temporary files when done.
+
+ * mcon/U/d_casti32.U: Declare signal handler correctly (ADO).
+
+ * mcon/U/d_castneg.U: Don't forget to tell user about compilation
+ failures (ADO). Declare signal handler correctly using 'signal_t'
+ (ADO).
+
+ * mcon/U/d_closedir.U, mcon/U/d_safemcpy.U, mcon/U/d_isascii.U: Added
+ 'ldflags' to the test compile line (ADO).
+
+ * mcon/U/d_dosuid.U: Added checks for secure setuid scripts (Tye
+ McQueen).
+
+ * mcon/U/d_keepsig.U, mcon/U/d_eofpipe.U, mcon/U/d_normsig.U,
+ mcon/U/d_tzmin.U: Call ./bsd explicitly instead of relying on PATH.
+
+ * mcon/U/d_gethname.U: Call ./xenix explicitly instead of relying on
+ PATH.
+
+ * mcon/U/d_newsadm.U: Call ./eunice explicitly instead of relying on
+ PATH.
+
+ * mcon/U/d_setpgrp.U: Added 'ldflags' to the test compile line (ADO).
+ Call ./usg explicitly instead of relying on PATH.
+
+ * mcon/U/registers.U, mcon/U/shm_for.U, mcon/U/d_speedopt.U: Call
+ ./Cppsym explicitly instead of relying on PATH.
+
+ * mcon/U/d_time.U: Now uses new Typedef unit to compute type
+ information (ADO).
+
+ * mcon/U/groupstype.U: No longer uses Setvar to set 'groupstype'
+ (ADO). Typo fix in the word 'argument' (ADO).
+
+ * mcon/U/i_dirent.U: Failed scanning for 'd_namlen' with missing
+ <dirent.h> (ADO).
+
+ * mcon/U/i_neterrno.U: Forgot to initialize 'val' to an empty value
+ (ADO).
+
+ * mcon/U/i_termio.U: Call ./usg and ./Cppsym explicitly instead of
+ relying on PATH.
+
+ * mcon/U/lex.U: Spurious single quote could cause Configure to crash.
+ (reported by Xavier Le Vourch <xavierl@eiffel.com>.).
+
+ * mcon/U/libc.U: Now looks for shared libraries before anything else
+ (ADO). Added new nm output format (ADO).
+
+ * mcon/U/libs.U: Removed old broken thislib/thatlib processing (ADO).
+
+ * mcon/U/mailfile.U: The Loc unit was missing from the dependency
+ line.
+
+ * mcon/U/myhostname.U: Call ./xenix explicitly instead of relying on
+ PATH. Now uses new Tr unit to convert to/from lowercase.
+
+ * mcon/U/nametype.U: Call ./usg and ./bsd explicitly instead of
+ relying on PATH.
+
+ * mcon/U/orderlib.U: Now performs a real small compile for accurate
+ checks (ADO).
+
+ * mcon/U/package.U: Beware of non-ascii character sets when
+ translating case.
+
+ * mcon/U/pager.U: Replaced Myread by Getfile in the dependency line.
+
+ * mcon/U/prefshell.U: Added SHELL temporary since metalint now sees
+ ${SHELL}.
+
+ * mcon/U/so.U: Now tells user how he can suppress shared lib lookup
+ (ADO). Removed echo at the top, since it's now in the here-doc (ADO).
+
+ * mcon/U/ssizetype.U: Added ?F: line for metalint file checking.
+ Added 'ldflags' to the test compile line (ADO).
+
+ * mcon/man/mconfig.SH: Added nroff protection for lines beginning
+ with '.'. Documents new ?F: line for file declarations. Added
+ example showing how ./loc can be used.
+
+ * mcon/man/mlint.SH: Documents new ?F: lines and the related metalint
+ warnings. Removed statement in BUGS since all warnings may now be
+ shut.
+
+ * mcon/man/mxref.SH: The leading .TH was referring to metaconfig.
+
+ * mcon/pl/common.pl: Metaconfig and metaxref ignore ?F: lines from
+ now on.
+
+ * mcon/pl/files.pl: Added user-defined file extension support for
+ lookups.
+
+ * mcon/pl/lint.pl: Now extensively checks created files thanks to new
+ ?F: lines.
+
+ * mcon/pl/locate.pl: Misspelled a 'closedir' as a 'close' statement.
+
+ * pat/pat.SH: Now unlinks all the files created by patlog in bugs.
+
+ * pat/pat.man: Documents new patlog script and the files it uses.
+ The RCS layer section has been extended slightly.
+
+ * pat/patcil.SH: Now honors the VISUAL and EDITOR environment
+ variables. Newer RCS programs chop trailing spaces in log messages.
+ Separated V/E and v/e commands. New 'v' command to edit the file
+ being patcil'ed. Added hook for 'V' command (not implemented yet).
+
+ * pat/patmake.SH: A lot of setup is now performed by patlog. Added
+ various escapes in strings for perl5 support.
+
diff --git a/Configure b/Configure
new file mode 100755
index 0000000..40a347d
--- /dev/null
+++ b/Configure
@@ -0,0 +1,4739 @@
+#! /bin/sh
+#
+# If these # comments don't work, trim them. Don't worry about any other
+# shell scripts, Configure will trim # comments from them for you.
+#
+# (If you are trying to port this package to a machine without sh,
+# I would suggest you have a look at the prototypical config_h.SH file
+# and edit it to reflect your system. Some packages may include samples
+# of config.h for certain machines, so you might look for one of those.)
+#
+# Yes, you may rip this off to use in other distribution packages. This
+# script belongs to the public domain and cannot be copyrighted.
+#
+# Note: this Configure script was generated automatically. Rather than
+# working with this copy of Configure, you may wish to get metaconfig.
+# The dist package (which contains metaconfig) is available via SVN:
+# svn co https://svn.code.sf.net/p/dist/code/trunk/dist
+
+# $Id: Head.U 167 2013-05-08 17:58:00Z rmanfredi $
+#
+# Generated on Sat Nov 14 16:05:58 CET 2015 [metaconfig 3.5-197]
+
+cat >c1$$ <<EOF
+ARGGGHHHH!!!!!
+
+SCO csh still thinks true is false. Write to SCO today and tell them that next
+year Configure ought to "rm /bin/csh" unless they fix their blasted shell. :-)
+
+(Actually, Configure ought to just patch csh in place. Hmm. Hmmmmm. All
+we'd have to do is go in and swap the && and || tokens, wherever they are.)
+
+[End of diatribe. We now return you to your regularly scheduled programming...]
+EOF
+cat >c2$$ <<EOF
+
+OOPS! You naughty creature! You didn't run Configure with sh!
+I will attempt to remedy the situation by running sh for you...
+EOF
+
+true || cat c1$$ c2$$
+true || exec sh $0 $argv:q
+
+(exit $?0) || cat c2$$
+(exit $?0) || exec sh $0 $argv:q
+rm -f c1$$ c2$$
+
+: compute my invocation name
+me=$0
+case "$0" in
+*/*)
+ me=`echo $0 | sed -e 's!.*/\(.*\)!\1!' 2>/dev/null`
+ test "$me" || me=$0
+ ;;
+esac
+
+: Proper separator for the PATH environment variable
+p_=:
+: On OS/2 this directory should exist if this is not floppy only system ":-]"
+if test -d c:/. ; then
+ if test -n "$OS2_SHELL"; then
+ p_=\;
+ PATH=`cmd /c "echo %PATH%" | tr '\\\\' / `
+ OS2_SHELL=`cmd /c "echo %OS2_SHELL%" | tr '\\\\' / | tr '[A-Z]' '[a-z]'`
+ elif test -n "$DJGPP"; then
+ case "X${MACHTYPE:-nonesuchmach}" in
+ *cygwin|*msys) ;;
+ *) p_=\; ;;
+ esac
+ fi
+fi
+
+: Proper PATH setting
+paths='/bin /usr/bin /usr/local/bin /usr/ucb /usr/local /usr/lbin'
+paths="$paths /opt/bin /opt/local/bin /opt/local /opt/lbin"
+paths="$paths /usr/5bin /etc /usr/gnu/bin /usr/new /usr/new/bin /usr/nbin"
+paths="$paths /opt/gnu/bin /opt/new /opt/new/bin /opt/nbin"
+paths="$paths /sys5.3/bin /sys5.3/usr/bin /bsd4.3/bin /bsd4.3/usr/ucb"
+paths="$paths /bsd4.3/usr/bin /usr/bsd /bsd43/bin /usr/ccs/bin"
+paths="$paths /etc /usr/lib /usr/ucblib /lib /usr/ccs/lib"
+paths="$paths /sbin /usr/sbin /usr/libexec"
+paths="$paths /system/gnu_library/bin"
+
+for p in $paths
+do
+ case "$p_$PATH$p_" in
+ *$p_$p$p_*) ;;
+ *) test -d $p && PATH=$PATH$p_$p ;;
+ esac
+done
+
+PATH=.$p_$PATH
+export PATH
+
+: shall we be using ksh?
+inksh=''
+needksh=''
+avoidksh=''
+newsh=/bin/ksh
+changesh=''
+if (PATH=.; alias -x) >/dev/null 2>&1; then
+ inksh=true
+fi
+if test -f /hp-ux -a -f /bin/ksh; then
+ needksh='to avoid sh bug in "here document" expansion'
+fi
+if test -d /usr/lpp -a -f /usr/bin/bsh -a -f /usr/bin/uname; then
+ if test X`/usr/bin/uname -v` = X4; then
+ avoidksh="to avoid AIX 4's /bin/sh"
+ newsh=/usr/bin/bsh
+ fi
+fi
+if test -f /osf_boot -a -f /usr/sbin/setld; then
+ if test X`/usr/bin/uname -s` = XOSF1; then
+ avoidksh="to avoid Digital UNIX' ksh"
+ newsh=/bin/sh
+ unset BIN_SH
+ fi
+fi
+case "$inksh/$needksh" in
+/[a-z]*)
+ ENV=''
+ changesh=true
+ reason="$needksh"
+ ;;
+esac
+case "$inksh/$avoidksh" in
+true/[a-z]*)
+ changesh=true
+ reason="$avoidksh"
+ ;;
+esac
+case "$inksh/$needksh-$avoidksh-" in
+true/--)
+ cat <<EOM
+(I see you are using the Korn shell. Some ksh's blow up on $me,
+mainly on older exotic systems. If yours does, try the Bourne shell instead.)
+EOM
+ ;;
+esac
+case "$changesh" in
+true)
+ export newsh
+ echo "(Feeding myself to $newsh $reason.)"
+ case "$0" in
+ Configure|*/Configure) exec $newsh $0 "$@";;
+ *) exec $newsh Configure "$@";;
+ esac
+ ;;
+esac
+
+: if needed, set CDPATH to a harmless value that is not chatty
+case "$CDPATH" in
+'') ;;
+*) case "$SHELL" in
+ *bash*) CDPATH='.' ;;
+ *) CDPATH='' ;;
+ esac
+ ;;
+esac
+
+: Configure runs within the UU subdirectory
+test -d UU || mkdir UU
+cd UU && rm -f ./*
+
+ccname=''
+ccversion=''
+from=''
+run=''
+targetarch=''
+to=''
+usecrosscompile=''
+d_bsd=''
+d_dos=''
+d_eunice=''
+d_linux=''
+d_os2=''
+d_windows=''
+d_xenix=''
+_exe=''
+eunicefix=''
+ar=''
+awk=''
+bash=''
+bison=''
+byacc=''
+cat=''
+chgrp=''
+chmod=''
+chown=''
+comm=''
+compress=''
+cp=''
+cpio=''
+cpp=''
+csh=''
+date=''
+echo=''
+egrep=''
+emacs=''
+expr=''
+find=''
+flex=''
+gcc=''
+gmake=''
+gmsgfmt=''
+grep=''
+gzip=''
+inews=''
+ksh=''
+less=''
+line=''
+lint=''
+ln=''
+lp=''
+lpr=''
+ls=''
+mail=''
+mailx=''
+make=''
+mkdir=''
+more=''
+msgfmt=''
+msgmerge=''
+mv=''
+nawk=''
+nm=''
+nroff=''
+perl=''
+pg=''
+pmake=''
+pr=''
+rm=''
+rmail=''
+sed=''
+sendmail=''
+shar=''
+sleep=''
+smail=''
+sort=''
+submit=''
+tail=''
+tar=''
+tbl=''
+tee=''
+test=''
+touch=''
+tr=''
+troff=''
+uname=''
+uniq=''
+uuname=''
+vi=''
+wc=''
+xgettext=''
+zcat=''
+zip=''
+incpath=''
+mips_type=''
+hint=''
+myuname=''
+osname=''
+osvers=''
+Author=''
+Date=''
+Header=''
+Id=''
+Locker=''
+Log=''
+RCSfile=''
+Revision=''
+Source=''
+State=''
+_a=''
+_o=''
+archobjs=''
+firstmakefile=''
+afs=''
+afsroot=''
+baserev=''
+ccflags=''
+cppflags=''
+ldflags=''
+lkflags=''
+locincpth=''
+optimize=''
+pthread=''
+cf_email=''
+cf_by=''
+cf_time=''
+contains=''
+cpp_trad=''
+cpplast=''
+cppminus=''
+cpprun=''
+cppstdin=''
+d_portable=''
+defeditor=''
+gccosandvers=''
+gccversion=''
+install=''
+installdir=''
+issymlink=''
+glibpth=''
+libpth=''
+loclibpth=''
+plibpth=''
+xlibpth=''
+lns=''
+mailer=''
+make_set_make=''
+installmansrc=''
+manext=''
+mansrc=''
+mansrcexp=''
+mydomain=''
+myhostname=''
+phostname=''
+c=''
+n=''
+d_berknames=''
+d_passnames=''
+d_usgnames=''
+nametype=''
+groupcat=''
+hostcat=''
+passcat=''
+orgname=''
+package=''
+spackage=''
+pager=''
+patchlevel=''
+revision=''
+perlpath=''
+pkgsrc=''
+prefix=''
+prefixexp=''
+installprivlib=''
+privlib=''
+privlibexp=''
+installscript=''
+scriptdir=''
+scriptdirexp=''
+sh=''
+sharpbang=''
+shsharp=''
+spitshell=''
+src=''
+startperl=''
+startsh=''
+sysman=''
+trnl=''
+usrinc=''
+CONFIG=''
+
+: Initialize wide constants
+define='define'
+undef='undef'
+smallmach='pdp11 i8086 z8000 i80286 iAPX286'
+rmlist=''
+
+: We must find out about Eunice early
+eunicefix=':'
+if test -f /etc/unixtovms; then
+ eunicefix=/etc/unixtovms
+fi
+if test -f /etc/unixtovms.exe; then
+ eunicefix=/etc/unixtovms.exe
+fi
+
+: Set executable suffix now -- needed before hints available
+if test -f "/libs/version.library"; then
+ : Amiga OS
+ _exe=""
+elif test -f "/system/gnu_library/bin/ar.pm"; then
+ : Stratus VOS
+ _exe=".pm"
+elif test -n "$DJGPP"; then
+ : DOS DJGPP
+ _exe=".exe"
+elif test -d c:/. ; then
+ : OS/2 or cygwin
+ _exe=".exe"
+else
+ : All other UNIX systems
+ _exe=""
+fi
+
+ccname=''
+ccversion=''
+: Extra object files, if any, needed on this platform.
+archobjs=''
+bin='/usr/local/bin'
+cc='cc'
+: Possible local include directories to search.
+: Set locincpth to "" in a hint file to defeat local include searches.
+locincpth=""
+:
+: no include file wanted by default
+inclwanted=''
+
+: change the next line if compiling for Xenix/286 on Xenix/386
+xlibpth='/usr/lib/386 /lib/386'
+: Possible local library directories to search.
+loclibpth=""
+
+: general looking path for locating libraries
+glibpth="/lib /usr/lib $xlibpth"
+glibpth="$glibpth /usr/ccs/lib /usr/ucblib /usr/local/lib"
+test -f /usr/shlib/libc.so && glibpth="/usr/shlib $glibpth"
+test -f /shlib/libc.so && glibpth="/shlib $glibpth"
+glibpth="$glibpth /lib32 /lib64 "`ls -1d /usr/lib/*-gnu 2>/dev/null`
+: Private path used by Configure to find libraries. Its value
+: is prepended to libpth. This variable takes care of special
+: machines, like the mips. Usually, it should be empty.
+plibpth=''
+
+: Find the basic shell for Bourne shell scripts
+case "$sh" in
+'')
+ case "$SYSTYPE" in
+ *bsd*|sys5*) xxx="/$SYSTYPE/bin/sh";;
+ *) xxx='/bin/sh';;
+ esac
+ if test -f "$xxx"; then
+ sh="$xxx"
+ else
+ : Build up a list and do a single loop so we can 'break' out.
+ pth=`echo $PATH | sed -e "s/$p_/ /g"`
+ for xxx in sh bash ksh pdksh ash; do
+ for p in $pth; do
+ try="$try ${p}/${xxx}"
+ done
+ done
+ for xxx in $try; do
+ if test -f "$xxx"; then
+ sh="$xxx"
+ break
+ elif test -f "$xxx$_exe"; then
+ sh="$xxx$_exe"
+ break
+ elif test -f "$xxx.exe"; then
+ sh="$xxx.exe"
+ break
+ fi
+ done
+ fi
+ ;;
+esac
+
+case "$sh" in
+'') cat >&2 <<EOM
+$me: Fatal Error: I can't find a Bourne Shell anywhere.
+
+Usually it's in /bin/sh. How did you even get this far?
+Please contact me (Raphael Manfredi) at Raphael_Manfredi@pobox.com and
+we'll try to straighten this all out.
+EOM
+ exit 1
+ ;;
+esac
+
+: see if sh knows # comments
+if `$sh -c '#' >/dev/null 2>&1`; then
+ shsharp=true
+ spitshell=cat
+ xcat=/bin/cat
+ test -f $xcat$_exe || xcat=/usr/bin/cat
+ if test ! -f $xcat$_exe; then
+ for p in `echo $PATH | sed -e "s/$p_/ /g"` $paths; do
+ if test -f $p/cat$_exe; then
+ xcat=$p/cat
+ break
+ fi
+ done
+ if test ! -f $xcat$_exe; then
+ echo "Can't find cat anywhere!"
+ exit 1
+ fi
+ fi
+ echo "#!$xcat" >sharp
+ $eunicefix sharp
+ chmod +x sharp
+ ./sharp > today 2>/dev/null
+ if test -s today; then
+ sharpbang='#!'
+ else
+ echo "#! $xcat" > sharp
+ $eunicefix sharp
+ chmod +x sharp
+ ./sharp > today 2>/dev/null
+ if test -s today; then
+ sharpbang='#! '
+ else
+ sharpbang=': use '
+ fi
+ fi
+else
+ echo " "
+ echo "Your $sh doesn't grok # comments--I will strip them later on."
+ shsharp=false
+ cd ..
+ echo "exec grep -v '^[ ]*#'" >spitshell
+ chmod +x spitshell
+ $eunicefix spitshell
+ spitshell=`pwd`/spitshell
+ cd UU
+ echo "I presume that if # doesn't work, #! won't work either!"
+ sharpbang=': use '
+fi
+rm -f sharp today
+
+: figure out how to guarantee sh startup
+case "$startsh" in
+'') startsh=${sharpbang}${sh} ;;
+*)
+esac
+cat >sharp <<EOSS
+$startsh
+set abc
+test "$?abc" != 1
+EOSS
+
+chmod +x sharp
+$eunicefix sharp
+if ./sharp; then
+ : echo "Yup, it does."
+else
+ echo "Hmm... '$startsh' does not guarantee sh startup..."
+ echo "You may have to fix up the shell scripts to make sure $sh runs them."
+fi
+rm -f sharp
+
+: Save command line options in file UU/cmdline.opt for later use in
+: generating config.sh.
+cat > cmdline.opt <<EOSH
+: Configure command line arguments.
+config_arg0='$0'
+config_args='$*'
+config_argc=$#
+EOSH
+argn=1
+args_exp=''
+args_sep=''
+for arg in "$@"; do
+ cat >>cmdline.opt <<EOSH
+config_arg$argn='$arg'
+EOSH
+ cat <<EOC | sed -e "s/'/'"'"'"'"'"'"'/g" > cmdl.opt
+$arg
+EOC
+ arg_exp=`cat cmdl.opt`
+ args_exp="$args_exp$args_sep'$arg_exp'"
+ argn=`expr $argn + 1`
+ args_sep=' '
+done
+rm -f cmdl.opt
+
+: produce awk script to parse command line options
+cat >options.awk <<'EOF'
+BEGIN {
+ optstr = "A:dD:eEf:hKOrsSU:V"; # getopt-style specification
+
+ len = length(optstr);
+ for (i = 1; i <= len; i++) {
+ c = substr(optstr, i, 1);
+ if (i < len) a = substr(optstr, i + 1, 1); else a = "";
+ if (a == ":") {
+ arg[c] = 1;
+ i++;
+ }
+ opt[c] = 1;
+ }
+}
+{
+ expect = 0;
+ str = $0;
+ if (substr(str, 1, 1) != "-") {
+ printf("'%s'\n", str);
+ next;
+ }
+ len = length($0);
+ for (i = 2; i <= len; i++) {
+ c = substr(str, i, 1);
+ if (!opt[c]) {
+ printf("-%s\n", substr(str, i));
+ next;
+ }
+ printf("-%s\n", c);
+ if (arg[c]) {
+ if (i < len)
+ printf("'%s'\n", substr(str, i + 1));
+ else
+ expect = 1;
+ next;
+ }
+ }
+}
+END {
+ if (expect)
+ print "?";
+}
+EOF
+
+: process the command line options
+set X `for arg in "$@"; do echo "X$arg"; done |
+ sed -e s/X// | awk -f options.awk`
+eval "set $*"
+shift
+rm -f options.awk
+
+: set up default values
+fastread=''
+reuseval=false
+config_sh=''
+alldone=''
+error=''
+silent=''
+extractsh=''
+override=''
+knowitall=''
+rm -f optdef.sh posthint.sh
+cat >optdef.sh <<EOS
+$startsh
+EOS
+
+
+: option parsing
+while test $# -gt 0; do
+ case "$1" in
+ -d) shift; fastread=yes;;
+ -e) shift; alldone=cont;;
+ -f)
+ shift
+ cd ..
+ if test -r "$1"; then
+ config_sh="$1"
+ else
+ echo "$me: cannot read config file $1." >&2
+ error=true
+ fi
+ cd UU
+ shift;;
+ -h) shift; error=true;;
+ -r) shift; reuseval=true;;
+ -s) shift; silent=true; realsilent=true;;
+ -E) shift; alldone=exit;;
+ -K) shift; knowitall=true;;
+ -O) shift; override=true;;
+ -S) shift; silent=true; extractsh=true;;
+ -D)
+ shift
+ case "$1" in
+ *=)
+ echo "$me: use '-U symbol=', not '-D symbol='." >&2
+ echo "$me: ignoring -D $1" >&2
+ ;;
+ *=*) echo "$1" | \
+ sed -e "s/'/'\"'\"'/g" -e "s/=\(.*\)/='\1'/" >> optdef.sh;;
+ *) echo "$1='define'" >> optdef.sh;;
+ esac
+ shift
+ ;;
+ -U)
+ shift
+ case "$1" in
+ *=) echo "$1" >> optdef.sh;;
+ *=*)
+ echo "$me: use '-D symbol=val', not '-U symbol=val'." >&2
+ echo "$me: ignoring -U $1" >&2
+ ;;
+ *) echo "$1='undef'" >> optdef.sh;;
+ esac
+ shift
+ ;;
+ -A)
+ shift
+ xxx=''
+ yyy="$1"
+ zzz=''
+ uuu=undef
+ case "$yyy" in
+ *=*) zzz=`echo "$yyy"|sed 's!=.*!!'`
+ case "$zzz" in
+ *:*) zzz='' ;;
+ *) xxx=append
+ zzz=" "`echo "$yyy"|sed 's!^[^=]*=!!'`
+ yyy=`echo "$yyy"|sed 's!=.*!!'` ;;
+ esac
+ ;;
+ esac
+ case "$xxx" in
+ '') case "$yyy" in
+ *:*) xxx=`echo "$yyy"|sed 's!:.*!!'`
+ yyy=`echo "$yyy"|sed 's!^[^:]*:!!'`
+ zzz=`echo "$yyy"|sed 's!^[^=]*=!!'`
+ yyy=`echo "$yyy"|sed 's!=.*!!'` ;;
+ *) xxx=`echo "$yyy"|sed 's!:.*!!'`
+ yyy=`echo "$yyy"|sed 's!^[^:]*:!!'` ;;
+ esac
+ ;;
+ esac
+ case "$xxx" in
+ append)
+ echo "$yyy=\"\${$yyy}$zzz\"" >> posthint.sh ;;
+ clear)
+ echo "$yyy=''" >> posthint.sh ;;
+ define)
+ case "$zzz" in
+ '') zzz=define ;;
+ esac
+ echo "$yyy='$zzz'" >> posthint.sh ;;
+ eval)
+ echo "eval \"$yyy=$zzz\"" >> posthint.sh ;;
+ prepend)
+ echo "$yyy=\"$zzz\${$yyy}\"" >> posthint.sh ;;
+ undef)
+ case "$zzz" in
+ '') zzz="$uuu" ;;
+ esac
+ echo "$yyy=$zzz" >> posthint.sh ;;
+ *) echo "$me: unknown -A command '$xxx', ignoring -A $1" >&2 ;;
+ esac
+ shift
+ ;;
+ -V) echo "$me generated by metaconfig 3.5-197." >&2
+ exit 0;;
+ --) break;;
+ -*) echo "$me: unknown option $1" >&2; shift; error=true;;
+ *) break;;
+ esac
+done
+
+case "$error" in
+true)
+ cat >&2 <<EOM
+Usage: $me [-dehrsEKOSV] [-f config.sh] [-D symbol] [-D symbol=value]
+ [-U symbol] [-U symbol=] [-A command:symbol...]
+ -d : use defaults for all answers.
+ -e : go on without questioning past the production of config.sh.
+ -f : specify an alternate default configuration file.
+ -h : print this help message and exit (with an error status).
+ -r : reuse C symbols value if possible (skips costly nm extraction).
+ -s : silent mode, only echoes questions and essential information.
+ -D : define symbol to have some value:
+ -D symbol symbol gets the value 'define'
+ -D symbol=value symbol gets the value 'value'
+ -E : stop at the end of questions, after having produced config.sh.
+ -K : do not use unless you know what you are doing.
+ -O : let -D and -U override definitions from loaded configuration file.
+ -S : perform variable substitutions on all .SH files (can mix with -f)
+ -U : undefine symbol:
+ -U symbol symbol gets the value 'undef'
+ -U symbol= symbol gets completely empty
+ -A : manipulate symbol after the platform specific hints have been applied:
+ -A symbol=value append " "value to symbol
+ -A append:symbol=value append value to symbol
+ -A define:symbol=value define symbol to have value
+ -A clear:symbol define symbol to be ''
+ -A define:symbol define symbol to be 'define'
+ -A eval:symbol=value define symbol to be eval of value
+ -A prepend:symbol=value prepend value to symbol
+ -A undef:symbol define symbol to be 'undef'
+ -A undef:symbol= define symbol to be ''
+ -V : print version number and exit (with a zero status).
+EOM
+ exit 1
+ ;;
+esac
+
+: Sanity checks
+case "$fastread$alldone" in
+yescont|yesexit) ;;
+*)
+ case "$extractsh" in
+ true) ;;
+ *)
+ if test ! -t 0; then
+ echo "Say 'sh Configure', not 'sh <Configure'"
+ exit 1
+ fi
+ ;;
+ esac
+ ;;
+esac
+
+exec 4>&1
+case "$silent" in
+true) exec 1>/dev/null;;
+esac
+
+touch optdef.sh
+if grep -q '\\' optdef.sh >/dev/null 2>&1; then
+ echo "Configure does not support \\ in -D or -U arguments" >&2
+ exit 1
+fi
+
+: run the defines and the undefines, if any, but leave the file out there...
+. ./optdef.sh
+: create the posthint manipulation script and leave the file out there...
+touch posthint.sh
+
+: set package name
+package='dist'
+first=`echo $package | sed -e 's/^\(.\).*/\1/'`
+last=`echo $package | sed -e 's/^.\(.*\)/\1/'`
+case "`echo AbyZ | tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
+ABYZ) spackage=`echo $first | tr '[:lower:]' '[:upper:]'`$last;;
+*) spackage=`echo $first | tr '[a-z]' '[A-Z]'`$last;;
+esac
+
+: script used to emulate mkdir -p
+cat >mkdirp <<EOS
+$startsh
+EOS
+cat >>mkdirp <<'EOS'
+name=$1;
+create="";
+while test $name; do
+ if test ! -d "$name"; then
+ create="$name $create"
+ name=`echo $name | sed -e "s|^[^/]*$||"`
+ name=`echo $name | sed -e "s|\(.*\)/.*|\1|"`
+ else
+ name=""
+ fi
+done
+for file in $create; do
+ mkdir $file
+done
+EOS
+chmod +x mkdirp
+$eunicefix mkdirp
+
+: Some greps do not return status, grrr.
+echo "grimblepritz" >grimble
+if grep blurfldyick grimble >/dev/null 2>&1 ; then
+ contains=contains
+elif grep grimblepritz grimble >/dev/null 2>&1 ; then
+ contains=grep
+else
+ contains=contains
+fi
+rm -f grimble
+: the following should work in any shell
+case "$contains" in
+contains*)
+ echo " "
+ echo "AGH! Grep doesn't return a status. Attempting remedial action."
+ cat >contains <<'EOSS'
+grep "$1" "$2" >.greptmp && cat .greptmp && test -s .greptmp
+EOSS
+chmod +x contains
+esac
+
+: Find the path to the source tree
+case "$src" in
+'') case "$0" in
+ */*)
+ src=`echo $0 | sed -e 's%/[^/][^/]*$%%'`
+ ;;
+ *) src='.';;
+ esac;;
+esac
+case "$src" in
+'') src=/
+ rsrc=/
+ ;;
+/*) rsrc="$src";;
+*) rsrc="../$src";;
+esac
+if test -f $rsrc/Configure && \
+ $contains "^package='$package'\$" $rsrc/Configure >/dev/null 2>&1
+then
+ : found it, so we are ok.
+else
+ rsrc=''
+ for src in . .. ../.. ../../.. ../../../..; do
+ if test -f ../$src/Configure && \
+ $contains "^package=$package$" ../$src/Configure >/dev/null 2>&1
+ then
+ rsrc=../$src
+ break
+ fi
+ done
+fi
+case "$rsrc" in
+'')
+ cat <<EOM >&4
+
+Sorry, I can't seem to locate the source dir for $package. Please start
+Configure with an explicit path -- i.e. /some/path/Configure.
+
+EOM
+ exit 1
+ ;;
+../.) rsrc='..';;
+*)
+ echo " "
+ echo "Sources for $package found in \"$src\"." >&4
+ ;;
+esac
+
+: script used to extract .SH files with variable substitutions
+cat >extract <<EOS
+CONFIG=true
+SRC="$src"
+TOP=`cd ..; pwd 2>/dev/null`
+EOS
+cat >>extract <<'EOS'
+echo "Doing variable substitutions on .SH files..."
+if test -f "$SRC/MANIFEST"; then
+ set x `awk '{print $1}' <$SRC/MANIFEST | grep '\.SH'`
+else
+ echo "(Looking for .SH files under the source directory.)"
+ set x `(cd "$SRC"; find . -name "*.SH" -print)`
+fi
+shift
+case $# in
+0) set x `(cd "$SRC"; echo *.SH)`; shift;;
+esac
+if test ! -f "$SRC/$1"; then
+ shift
+fi
+for file in $*; do
+ case "$SRC" in
+ ".")
+ case "$file" in
+ */*)
+ dir=`expr X$file : 'X\(.*\)/'`
+ file=`expr X$file : 'X.*/\(.*\)'`
+ (cd $dir && . ./$file)
+ ;;
+ *)
+ . ./$file
+ ;;
+ esac
+ ;;
+ *)
+ case "$file" in
+ */*)
+ dir=`expr X$file : 'X\(.*\)/'`
+ file=`expr X$file : 'X.*/\(.*\)'`
+ ./mkdirp $dir
+ sh <"$SRC/$dir/$file"
+ ;;
+ *)
+ sh <"$SRC/$file"
+ ;;
+ esac
+ ;;
+ esac
+done
+if test -f "$SRC/config_h.SH"; then
+ if test ! -f config.h; then
+ sh <"$SRC/config_h.SH"
+ fi
+fi
+EOS
+
+: extract files and exit if asked to do so
+case "$extractsh" in
+true)
+ case "$realsilent" in
+ true) ;;
+ *) exec 1>&4;;
+ esac
+ case "$config_sh" in
+ '') config_sh='config.sh';;
+ esac
+ echo " "
+ echo "Fetching answers from $config_sh..."
+ cd ..
+ . $config_sh
+ test "$override" && . ./optdef.sh
+ echo " "
+ . UU/extract
+ rm -rf UU
+ echo "Extraction done."
+ exit 0
+ ;;
+esac
+
+: Eunice requires " " instead of "", can you believe it
+echo " "
+: Here we go...
+echo "Beginning of configuration questions for $package."
+
+trap 'echo " "; test -d ../UU && rm -rf X $rmlist; exit 1' 1 2 3 15
+
+: first determine how to suppress newline on echo command
+echo " "
+echo "Checking echo to see how to suppress newlines..."
+(echo "hi there\c" ; echo " ") >.echotmp
+if $contains c .echotmp >/dev/null 2>&1 ; then
+ echo "...using -n."
+ n='-n'
+ c=''
+else
+ cat <<'EOM'
+...using \c
+EOM
+ n=''
+ c='\c'
+fi
+echo $n "The star should be here-->$c"
+echo '*'
+rm -f .echotmp
+
+: Now test for existence of everything in MANIFEST
+echo " "
+if test -f "$rsrc/MANIFEST"; then
+ echo "First let's make sure your kit is complete. Checking..." >&4
+ awk '$1 !~ /PACK[A-Z]+/ {print $1}' "$rsrc/MANIFEST" | \
+ (split -l 50 2>/dev/null || split -50)
+ rm -f missing
+ tmppwd=`pwd`
+ for filelist in x??; do
+ (cd "$rsrc"; ls `cat "$tmppwd/$filelist"` \
+ >/dev/null 2>>"$tmppwd/missing")
+ done
+ if test -s missing; then
+ cat missing >&4
+ cat >&4 <<'EOM'
+
+THIS PACKAGE SEEMS TO BE INCOMPLETE.
+
+You have the option of continuing the configuration process, despite the
+distinct possibility that your kit is damaged, by typing 'y'es. If you
+do, don't blame me if something goes wrong. I advise you to type 'n'o
+and contact the author (Raphael_Manfredi@pobox.com).
+
+EOM
+ echo $n "Continue? [n] $c" >&4
+ read ans
+ case "$ans" in
+ y*)
+ echo "Continuing..." >&4
+ rm -f missing
+ ;;
+ *)
+ echo "ABORTING..." >&4
+ kill $$
+ ;;
+ esac
+ else
+ echo "Looks good..."
+ fi
+else
+ echo "There is no MANIFEST file. I hope your kit is complete !"
+fi
+rm -f missing x??
+
+: Find the appropriate value for a newline for tr
+if test -n "$DJGPP"; then
+ trnl='\012'
+fi
+if test X"$trnl" = X; then
+ case "`echo foo | tr '\n' x 2>/dev/null`" in
+ foox) trnl='\n' ;;
+ esac
+fi
+if test X"$trnl" = X; then
+ case "`echo foo | tr '\012' x 2>/dev/null`" in
+ foox) trnl='\012' ;;
+ esac
+fi
+if test X"$trnl" = X; then
+ case "`echo foo | tr '\r\n' xy 2>/dev/null`" in
+ fooxy) trnl='\n\r' ;;
+ esac
+fi
+if test X"$trnl" = X; then
+ cat <<EOM >&2
+
+$me: Fatal Error: cannot figure out how to translate newlines with 'tr'.
+
+EOM
+ exit 1
+fi
+
+: compute the number of columns on the terminal for proper question formatting
+case "$COLUMNS" in
+'') COLUMNS='80';;
+esac
+
+: set up the echo used in my read
+myecho="case \"\$xxxm\" in
+'') echo $n \"\$rp $c\" >&4;;
+*) case \"\$rp\" in
+ '') echo $n \"[\$xxxm] $c\";;
+ *)
+ if test \`echo \"\$rp [\$xxxm] \" | wc -c\` -ge $COLUMNS; then
+ echo \"\$rp\" >&4
+ echo $n \"[\$xxxm] $c\" >&4
+ else
+ echo $n \"\$rp [\$xxxm] $c\" >&4
+ fi
+ ;;
+ esac;;
+esac"
+
+: now set up to do reads with possible shell escape and default assignment
+cat <<EOSC >myread
+$startsh
+xxxm=\$dflt
+$myecho
+ans='!'
+case "\$fastread" in
+yes) case "\$dflt" in
+ '') ;;
+ *) ans='';
+ case "\$silent-\$rp" in
+ true-) ;;
+ *) echo " " >&4;;
+ esac;;
+ esac;;
+*) case "\$silent" in
+ true) case "\$rp" in
+ '') ans='';;
+ esac;;
+ esac;;
+esac
+while expr "X\$ans" : "X!" >/dev/null; do
+ read answ
+ set x \$xxxm
+ shift
+ aok=''; eval "ans=\\"\$answ\\"" && aok=y
+ case "\$answ" in
+ "!")
+ sh 1>&4
+ echo " "
+ $myecho
+ ;;
+ !*)
+ set x \`expr "X\$ans" : "X!\(.*\)\$"\`
+ shift
+ sh 1>&4 -c "\$*"
+ echo " "
+ $myecho
+ ;;
+ "\$ans")
+ case "\$ans" in
+ \\&*)
+ set x \`expr "X\$ans" : "X&\(.*\)\$"\`
+ shift
+ case "\$1" in
+ -d)
+ fastread=yes
+ echo "(OK, I'll run with -d after this question.)" >&4
+ ;;
+ -*)
+ echo "*** Sorry, \$1 not supported yet." >&4
+ ;;
+ esac
+ $myecho
+ ans=!
+ ;;
+ esac;;
+ *)
+ case "\$aok" in
+ y)
+ echo "*** Substitution done -- please confirm."
+ xxxm="\$ans"
+ ans=\`echo $n "\$ans$c" | tr '$trnl' ' '\`
+ xxxm="\$ans"
+ ans=!
+ ;;
+ *)
+ echo "*** Error -- try again."
+ ans=!
+ ;;
+ esac
+ $myecho
+ ;;
+ esac
+ case "\$ans\$xxxm\$nostick" in
+ '')
+ ans=!
+ $myecho
+ ;;
+ esac
+done
+case "\$ans" in
+'') ans="\$xxxm";;
+esac
+EOSC
+
+: create .config dir to save info across Configure sessions
+test -d ../.config || mkdir ../.config
+cat >../.config/README <<EOF
+This directory created by Configure to save information that should
+persist across sessions for $package.
+
+You may safely delete it if you wish.
+EOF
+
+: general instructions
+needman=true
+firsttime=true
+user=`(logname) 2>/dev/null`
+case "$user" in
+'') user=`whoami 2>&1`;;
+esac
+if $contains "^$user\$" ../.config/instruct >/dev/null 2>&1; then
+ firsttime=false
+ echo " "
+ rp='Would you like to see the instructions?'
+ dflt=n
+ . ./myread
+ case "$ans" in
+ [yY]*) ;;
+ *) needman=false;;
+ esac
+fi
+if $needman; then
+ cat <<EOH
+
+This installation shell script will examine your system and ask you questions
+to determine how the dist package should be installed. If you get
+stuck on a question, you may use a ! shell escape to start a subshell or
+execute a command. Many of the questions will have default answers in square
+brackets; typing carriage return will give you the default.
+
+On some of the questions which ask for file or directory names you are allowed
+to use the ~name construct to specify the login directory belonging to "name",
+even if you don't have a shell which knows about that. Questions where this is
+allowed will be marked "(~name ok)".
+
+EOH
+ rp=''
+ dflt='Type carriage return to continue'
+ . ./myread
+ cat <<'EOH'
+
+The prompter used in this script allows you to use shell variables and
+backticks in your answers. You may use $1, $2, etc... to refer to the words
+in the default answer, as if the default line was a set of arguments given to a
+script shell. This means you may also use $* to repeat the whole default line,
+so you do not have to re-type everything to add something to the default.
+
+Everytime there is a substitution, you will have to confirm. If there is an
+error (e.g. an unmatched backtick), the default answer will remain unchanged
+and you will be prompted again.
+
+If you are in a hurry, you may run 'Configure -d'. This will bypass nearly all
+the questions and use the computed defaults (or the previous answers if there
+was already a config.sh file). Type 'Configure -h' for a list of options.
+You may also start interactively and then answer '& -d' at any prompt to turn
+on the non-interactive behaviour for the remainder of the execution.
+
+EOH
+ . ./myread
+ cat <<EOH
+
+Much effort has been expended to ensure that this shell script will run on any
+Unix system. If despite that it blows up on yours, your best bet is to edit
+Configure and run it again. If you can't run Configure for some reason,
+you'll have to generate a config.sh file by hand. Whatever problems you
+have, let me (Raphael_Manfredi@pobox.com) know how I blew it.
+
+This installation script affects things in two ways:
+
+1) it may do direct variable substitutions on some of the files included
+ in this kit.
+2) it builds a config.h file for inclusion in C programs. You may edit
+ any of these files as the need arises after running this script.
+
+If you make a mistake on a question, there is no easy way to back up to it
+currently. The easiest thing to do is to edit config.sh and rerun all the SH
+files. Configure will offer to let you do this before it runs the SH files.
+
+EOH
+ dflt='Type carriage return to continue'
+ . ./myread
+ case "$firsttime" in
+ true) echo $user >>../.config/instruct;;
+ esac
+fi
+
+: script used to emit important warnings
+cat >warn <<EOS
+$startsh
+if test \$# -gt 0; then
+ echo "\$@" >msg
+else
+ cat >msg
+fi
+echo "*** WARNING:" >&4
+sed -e 's/^/*** /' <msg >&4
+echo "*** " >&4
+cat msg >>config.msg
+echo " " >>config.msg
+rm -f msg
+EOS
+chmod +x warn
+$eunicefix warn
+
+: find out where common programs are
+echo " "
+echo "Locating common programs..." >&4
+cat <<EOSC >loc
+$startsh
+case \$# in
+0) exit 1;;
+esac
+thing=\$1
+shift
+dflt=\$1
+shift
+for dir in \$*; do
+ case "\$thing" in
+ .)
+ if test -d \$dir/\$thing; then
+ echo \$dir
+ exit 0
+ fi
+ ;;
+ *)
+ for thisthing in \$dir/\$thing; do
+ : just loop through to pick last item
+ done
+ if test -f \$thisthing; then
+ echo \$thisthing
+ exit 0
+ elif test -f \$thisthing$_exe; then
+ echo \$thisthing
+ exit 0
+ elif test -f \$dir/\$thing.exe; then
+ if test -n "$DJGPP"; then
+ echo \$dir/\$thing.exe
+ else
+ : on Eunice apparently
+ echo \$dir/\$thing
+ fi
+ exit 0
+ fi
+ ;;
+ esac
+done
+echo \$dflt
+exit 1
+EOSC
+chmod +x loc
+$eunicefix loc
+loclist="
+awk
+cat
+chgrp
+chmod
+chown
+cp
+echo
+expr
+grep
+make
+mkdir
+mv
+rm
+sed
+sort
+touch
+tr
+uniq
+"
+trylist="
+cpp
+date
+inews
+less
+line
+ln
+mail
+more
+nroff
+perl
+pg
+rmail
+sendmail
+smail
+test
+uname
+vi
+wc
+zcat
+"
+pth=`echo $PATH | sed -e "s/$p_/ /g"`
+pth="$pth /sbin /usr/sbin /lib /usr/lib /etc"
+for file in $loclist; do
+ eval xxx=\$$file
+ case "$xxx" in
+ /*|?:[\\/]*)
+ if test -f "$xxx"; then
+ : ok
+ else
+ ./warn "no $xxx -- ignoring your setting for $file." 4>&4
+ xxx=`./loc $file $file $pth`
+ fi
+ ;;
+ '') xxx=`./loc $file $file $pth`;;
+ *) xxx=`./loc $xxx $xxx $pth`;;
+ esac
+ eval $file=$xxx
+ eval _$file=$xxx
+ case "$xxx" in
+ /*)
+ echo $file is in $xxx.
+ ;;
+ ?:[\\/]*)
+ echo $file is in $xxx.
+ ;;
+ *)
+ echo "I don't know where '$file' is, and my life depends on it." >&4
+ echo "Go find a public domain implementation or fix your PATH!" >&4
+ exit 1
+ ;;
+ esac
+done
+echo " "
+echo "Don't worry if any of the following aren't found..."
+say=offhand
+for file in $trylist; do
+ eval xxx=\$$file
+ case "$xxx" in
+ /*|?:[\\/]*)
+ if test -f "$xxx"; then
+ : ok
+ else
+ ./warn "no $xxx -- ignoring your setting for $file." 4>&4
+ xxx=`./loc $file $file $pth`
+ fi
+ ;;
+ '') xxx=`./loc $file $file $pth`;;
+ *) xxx=`./loc $xxx $xxx $pth`;;
+ esac
+ eval $file=$xxx
+ eval _$file=$xxx
+ case "$xxx" in
+ /*)
+ echo $file is in $xxx.
+ ;;
+ ?:[\\/]*)
+ echo $file is in $xxx.
+ ;;
+ *)
+ echo "I don't see $file out there, $say."
+ say=either
+ ;;
+ esac
+done
+case "$egrep" in
+egrep$_exe|egrep)
+ echo "Substituting grep for egrep."
+ egrep=$grep
+ _egrep=$_grep
+ ;;
+esac
+case "$ln" in
+ln$_exe|ln)
+ echo "Substituting cp for ln."
+ ln=$cp
+ _ln=$_cp
+ ;;
+esac
+case "$make" in
+make$_exe|make)
+ case "$gmake" in
+ gmake)
+ echo "I can't find make or gmake, and my life depends on it." >&4
+ echo "Go find a public domain implementation or fix your PATH setting!" >&4
+ exit 1
+ ;;
+ esac
+ ;;
+esac
+case "$gmake" in
+gmake$_exe|gmake) ;;
+*)
+ if test -f "/system/gnu_library/bin/ar.pm"; then
+ : Stratus VOS
+ echo "Substituting gmake for make."
+ make=$gmake
+ _make=$_gmake
+ fi
+ ;;
+esac
+case "$test" in
+test|test$_exe)
+ echo "Hopefully test is built into your sh."
+ test=test
+ ;;
+*)
+ if `sh -c "PATH= test true" >/dev/null 2>&1`; then
+ echo "Using the test built into your sh."
+ test=test
+ _test=test
+ fi
+ ;;
+esac
+case "$echo" in
+echo|echo$_exe)
+ echo "Hopefully echo is built into your sh."
+ echo=echo
+ ;;
+'') ;;
+*)
+ echo " "
+echo "Checking compatibility between $_echo and builtin echo (if any)..." >&4
+ $echo $n "hi there$c" >foo1
+ echo $n "hi there$c" >foo2
+ if cmp foo1 foo2 >/dev/null 2>&1; then
+ echo "They are compatible. In fact, they may be identical."
+ else
+ case "$n" in
+ '-n') n='' c='\c';;
+ *) n='-n' c='';;
+ esac
+ cat <<FOO
+They are not compatible! You are probably running ksh on a non-USG system.
+I'll have to use $echo instead of the builtin, since Bourne shell doesn't
+have echo built in and we may have to run some Bourne shell scripts. That
+means I'll have to use '$n$c' to suppress newlines now. Life is ridiculous.
+
+FOO
+ $echo $n "The star should be here-->$c"
+ $echo "*"
+ fi
+ $rm -f foo1 foo2
+ ;;
+esac
+
+: generate the trygcc script for later perusal
+cat <<EOS >trygcc
+$startsh
+EOS
+cat <<'EOSC' >>trygcc
+case "$cc" in
+'') ;;
+*) $rm -f try try.*
+ $cat >try.c <<EOM
+int main(int argc, char *argv[]) {
+ (void) argc;
+ (void) argv;
+ return 0;
+}
+EOM
+ if $cc -o try $ccflags $ldflags try.c; then
+ :
+ else
+ echo "Uh-oh, the C compiler '$cc' doesn't seem to be working." >&4
+ despair=yes
+ trygcc=yes
+ case "$cc" in
+ *gcc*) trygcc=no ;;
+ esac
+ case "`$cc -v -c try.c 2>&1`" in
+ *gcc*) trygcc=no ;;
+ esac
+ if $test X"$trygcc" = Xyes; then
+ if gcc -o try -c try.c; then
+ echo " "
+ echo "You seem to have a working gcc, though." >&4
+ rp="Would you like to use it?"
+ dflt=y
+ if $test -f myread; then
+ . ./myread
+ else
+ if $test -f UU/myread; then
+ . ./UU/myread
+ else
+ echo "Cannot find myread, sorry. Aborting." >&2
+ exit 1
+ fi
+ fi
+ case "$ans" in
+ [yY]*) cc=gcc; ccname=gcc; ccflags=''; despair=no;
+ $cat *.cbu >checktmp 2>/dev/null
+ if $contains ccflags checktmp >/dev/null; then
+ ./warn 4>&4 <<EOM
+Any previous setting of the C compiler flags has been lost.
+It may be necessary to pass -Dcc=gcc to Configure right away.
+EOM
+ fi;;
+ esac
+ fi
+ fi
+ fi
+ $rm -f try try.*
+ ;;
+esac
+EOSC
+
+: generate the checkcc script for later perusal
+cat <<EOS >checkcc
+$startsh
+EOS
+cat <<'EOSC' >>checkcc
+case "$cc" in
+'') ;;
+*) $rm -f try try.*
+ $cat >try.c <<EOM
+int main(int argc, char *argv[]) {
+ (void) argc;
+ (void) argv;
+ return 0;
+}
+EOM
+ if $cc -o try $ccflags $ldflags try.c; then
+ :
+ else
+ if $test X"$despair" = Xyes; then
+ echo "Uh-oh, the C compiler '$cc' doesn't seem to be working." >&4
+ fi
+ $cat >&4 <<EOM
+You need to find a working C compiler.
+Either (purchase and) install the C compiler supplied by your OS vendor,
+or for a free C compiler try http://gcc.gnu.org/
+I cannot continue any further, aborting.
+EOM
+ exit 1
+ fi
+ $rm -f try try.*
+ ;;
+esac
+EOSC
+
+: determine whether symbolic links are supported
+echo " "
+$rm -f blurfl sym
+$touch blurfl
+if $ln -s blurfl sym > /dev/null 2>&1 && $test -f sym; then
+ echo "Symbolic links are supported." >&4
+ lns="$ln -s"
+else
+ echo "Symbolic links are NOT supported." >&4
+ lns="$ln"
+fi
+$rm -f blurfl sym
+
+: determine whether symbolic links are supported
+echo " "
+case "$lns" in
+*"ln"*" -s")
+ echo "Checking how to test for symbolic links..." >&4
+ $lns blurfl sym
+ if $test "X$issymlink" = X; then
+ case "$newsh" in
+ '') sh -c "PATH= test -h sym" >/dev/null 2>&1 ;;
+ *) $newsh -c "PATH= test -h sym" >/dev/null 2>&1 ;;
+ esac
+ if test $? = 0; then
+ issymlink="test -h"
+ else
+ echo "Your builtin 'test -h' may be broken." >&4
+ case "$test" in
+ /*) ;;
+ *) pth=`echo $PATH | sed -e "s/$p_/ /g"`
+ for p in $pth
+ do
+ if test -f "$p/$test"; then
+ test="$p/$test"
+ break
+ fi
+ done
+ ;;
+ esac
+ case "$test" in
+ /*)
+ echo "Trying external '$test -h'." >&4
+ issymlink="$test -h"
+ if $test ! -h sym >/dev/null 2>&1; then
+ echo "External '$test -h' is broken, too." >&4
+ issymlink=''
+ fi
+ ;;
+ *) issymlink='' ;;
+ esac
+ fi
+ fi
+ if $test "X$issymlink" = X; then
+ if $test -L sym 2>/dev/null; then
+ issymlink="$test -L"
+ echo "The builtin '$test -L' worked." >&4
+ fi
+ fi
+ if $test "X$issymlink" != X; then
+ echo "You can test for symbolic links with '$issymlink'." >&4
+ else
+ echo "I do not know how you can test for symbolic links." >&4
+ fi
+ $rm -f blurfl sym
+ ;;
+*) echo "No symbolic links, so not testing for their testing..." >&4
+ ;;
+esac
+
+: define absolute package source directory
+case "$src" in
+/*) pkgsrc=$src;;
+*) pkgsrc=`cd $rsrc; pwd`;;
+esac
+
+: Duplicate the tree with symbolic links if -Dmksymlinks was supplied
+case "$mksymlinks" in
+$define|true|[yY]*)
+ echo " "
+ case "$src" in
+ ''|'.') echo "Cannot create symlinks in the original directory." >&4
+ exit 1
+ ;;
+ *) case "$lns:$issymlink" in
+ *"ln"*" -s:"*"test -"?)
+ echo "Creating the symbolic links..." >&4
+ echo "(First creating the subdirectories...)" >&4
+ cd ..
+ awk '{print $1}' $src/MANIFEST | grep / | sed 's:/[^/]*$::' | \
+ sort -u | while true
+ do
+ read dir
+ test -z "$dir" && break
+ ./UU/mkdirp $dir 2>/dev/null
+ if test -d $dir; then
+ : ok
+ else
+ echo "Failed to create '$dir'. Aborting." >&4
+ exit 1
+ fi
+ done
+ echo "(Now creating the symlinks...)" >&4
+ awk '{print $1}' $src/MANIFEST | while true; do
+ read filename
+ test -z "$filename" && break
+ if test -f $filename; then
+ if $issymlink $filename; then
+ rm -f $filename
+ fi
+ fi
+ if test -f $filename; then
+ echo "$filename already exists, not symlinking."
+ else
+ ln -s $pkgsrc/$filename $filename
+ fi
+ done
+ echo "(Checking current directory...)" >&4
+ cd UU
+ awk '$1 !~ /PACK[A-Z]+/ {print $1}' "$rsrc/MANIFEST" | \
+ (split -l 50 2>/dev/null || split -50)
+ rm -f missing
+ tmppwd=`pwd`
+ for filelist in x??; do
+ (cd ..; ls `cat "$tmppwd/$filelist"` \
+ >/dev/null 2>>"$tmppwd/missing")
+ done
+ if test -s missing; then
+ echo "Failed duplication of source tree. Aborting." >&4
+ exit 1
+ fi
+ ;;
+ *) echo "(I cannot figure out how to do symbolic links, ignoring!)" >&4
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+esac
+
+: see whether [:lower:] and [:upper:] are supported character classes
+echo " "
+case "`echo AbyZ | LC_ALL=C $tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
+ABYZ)
+ echo "Good, your tr supports [:lower:] and [:upper:] to convert case." >&4
+ up='[:upper:]'
+ low='[:lower:]'
+ ;;
+*) # There is a discontinuity in EBCDIC between 'I' and 'J'
+ # (0xc9 and 0xd1), therefore that is a nice testing point.
+ if test "X$up" = X -o "X$low" = X; then
+ case "`echo IJ | LC_ALL=C $tr '[I-J]' '[i-j]' 2>/dev/null`" in
+ ij) up='[A-Z]'
+ low='[a-z]'
+ ;;
+ esac
+ fi
+ if test "X$up" = X -o "X$low" = X; then
+ case "`echo IJ | LC_ALL=C $tr I-J i-j 2>/dev/null`" in
+ ij) up='A-Z'
+ low='a-z'
+ ;;
+ esac
+ fi
+ if test "X$up" = X -o "X$low" = X; then
+ case "`echo IJ | od -x 2>/dev/null`" in
+ *C9D1*|*c9d1*)
+ echo "Hey, this might be EBCDIC." >&4
+ if test "X$up" = X -o "X$low" = X; then
+ case "`echo IJ | \
+ LC_ALL=C $tr '[A-IJ-RS-Z]' '[a-ij-rs-z]' 2>/dev/null`" in
+ ij) up='[A-IJ-RS-Z]'
+ low='[a-ij-rs-z]'
+ ;;
+ esac
+ fi
+ if test "X$up" = X -o "X$low" = X; then
+ case "`echo IJ | LC_ALL=C $tr A-IJ-RS-Z a-ij-rs-z 2>/dev/null`" in
+ ij) up='A-IJ-RS-Z'
+ low='a-ij-rs-z'
+ ;;
+ esac
+ fi
+ ;;
+ esac
+ fi
+esac
+case "`echo IJ | LC_ALL=C $tr \"$up\" \"$low\" 2>/dev/null`" in
+ij)
+ echo "Using $up and $low to convert case." >&4
+ ;;
+*)
+ echo "I don't know how to translate letters from upper to lower case." >&4
+ echo "Your tr is not acting any way I know of." >&4
+ exit 1
+ ;;
+esac
+: set up the translation script tr, must be called with ./tr of course
+cat >tr <<EOSC
+$startsh
+case "\$1\$2" in
+'[A-Z][a-z]') LC_ALL=C exec $tr '$up' '$low';;
+'[a-z][A-Z]') LC_ALL=C exec $tr '$low' '$up';;
+esac
+LC_ALL=C exec $tr "\$@"
+EOSC
+chmod +x tr
+$eunicefix tr
+
+: setup for possible cross-compilation
+run=''
+to=:
+from=:
+usecrosscompile='undef'
+targetarch=''
+case "$usecrosscompile" in
+$define|true|[yY]*)
+ echo "Cross-compilation is not supported for this package." >&4
+ exit 1
+ ;;
+esac
+
+: Determine the name of the machine
+myuname=`$uname -a 2>/dev/null`
+$test -z "$myuname" && myuname=`hostname 2>/dev/null`
+myuname=`echo $myuname | $sed -e 's/^[^=]*=//' -e 's/\///g' | \
+ ./tr '[A-Z]' '[a-z]' | $tr $trnl ' '`
+newmyuname="$myuname"
+has_uname=
+$test -f "$uname" && has_uname=y
+
+: Guessing of the OS name -- half the following guesses are probably wrong...
+: If you have better tests or hints, please send them to the metaconfig
+: authors and to Raphael_Manfredi@pobox.com
+$test -f /irix && osname=irix
+$test -f /xenix && osname=sco_xenix
+$test -f /dynix && osname=dynix
+$test -f /dnix && osname=dnix
+$test -f /lynx.os && osname=lynxos
+$test -f /unicos && osname=unicos && osvers=`$uname -r`
+$test -f /unicosmk && osname=unicosmk && osvers=`$uname -r`
+$test -f /unicosmk.ar && osname=unicosmk && osvers=`$uname -r`
+$test -f /bin/mips && /bin/mips && osname=mips
+$test -d /NextApps && set X `hostinfo | $grep 'NeXT Mach.*:' | \
+ $sed -e 's/://' -e 's/\./_/'` && osname=next && osvers=$4
+$test -d /usr/apollo/bin && osname=apollo
+$test -f /etc/saf/_sactab && osname=svr4
+$test -d /usr/include/minix && osname=minix
+$test -f /system/gnu_library/bin/ar.pm && osname=vos
+if $test -d /MachTen -o -d /MachTen_Folder; then
+ osname=machten
+ if $test -x /sbin/version; then
+ osvers=`/sbin/version | $awk '{print $2}' |
+ $sed -e 's/[A-Za-z]$//'`
+ elif $test -x /usr/etc/version; then
+ osvers=`/usr/etc/version | $awk '{print $2}' |
+ $sed -e 's/[A-Za-z]$//'`
+ else
+ osvers="$2.$3"
+ fi
+fi
+$test -f /sys/posix.dll &&
+ $test -f /usr/bin/what &&
+ set X `/usr/bin/what /sys/posix.dll` &&
+ $test "$3" = UWIN &&
+ osname=uwin &&
+ osvers="$5"
+if $test "X$has_uname" != X; then
+ set X $myuname
+ shift
+ case "$5" in
+ fps*) osname=fps ;;
+ mips*)
+ case "$4" in
+ umips) osname=umips ;;
+ *) osname=mips ;;
+ esac;;
+ [23]100) osname=mips ;;
+ next*) osname=next ;;
+ i386*)
+ tmp=`/bin/uname -X 2>/dev/null|awk '/3\.2v[45]/{ print $(NF) }'`
+ if $test "$tmp" != "" -a "$3" = "3.2" -a -f '/etc/systemid'; then
+ osname='sco'
+ osvers=$tmp
+ elif $test -f /etc/kconfig; then
+ osname=isc
+ if $test "$lns" = "$ln -s"; then
+ osvers=4
+ elif $contains _SYSV3 /usr/include/stdio.h > /dev/null 2>&1 ; then
+ osvers=3
+ elif $contains _POSIX_SOURCE /usr/include/stdio.h > /dev/null 2>&1
+ then
+ osvers=2
+ fi
+ fi
+ tmp=''
+ ;;
+ pc*)
+ if $test -n "$DJGPP"; then
+ osname=dos
+ osvers=djgpp
+ fi
+ ;;
+ esac
+ case "$1" in
+ aix) osname=aix
+ tmp=`( (oslevel) 2>/dev/null || echo "not found") 2>&1`
+ case "$tmp" in
+ 'not found') osvers="$4"."$3" ;;
+ '<3240'|'<>3240') osvers=3.2.0 ;;
+ '=3240'|'>3240'|'<3250'|'<>3250') osvers=3.2.4 ;;
+ '=3250'|'>3250') osvers=3.2.5 ;;
+ *) osvers=$tmp;;
+ esac
+ ;;
+ bsd386) osname=bsd386
+ osvers=`$uname -r`
+ ;;
+ cygwin*) osname=cygwin
+ osvers=`echo "$3" | sed -e 's/\(.*\)(.*/\1/'`
+ ;;
+ mingw*) osname=mingw
+ osvers=`echo "$3" | sed -e 's/\(.*\)(.*/\1/'`
+ ;;
+ *dc.osx) osname=dcosx
+ osvers="$3"
+ ;;
+ dnix) osname=dnix
+ osvers="$3"
+ ;;
+ domainos) osname=apollo
+ osvers="$3"
+ ;;
+ dgux) osname=dgux
+ osvers="$3"
+ ;;
+ dynixptx*) osname=dynixptx
+ osvers=`echo "$4"|sed 's/^v//'`
+ ;;
+ freebsd) osname=freebsd
+ osvers="$3" ;;
+ genix) osname=genix ;;
+ hp*) osname=hpux
+ osvers=`echo "$3" | $sed 's,.*\.\([0-9]*\.[0-9]*\),\1,'`
+ ;;
+ irix*) osname=irix
+ case "$3" in
+ 4*) osvers=4 ;;
+ 5*) osvers=5 ;;
+ *) osvers="$3" ;;
+ esac
+ ;;
+ linux) osname=linux
+ case "$3" in
+ *) osvers="$3" ;;
+ esac
+ ;;
+ MiNT) osname=mint
+ ;;
+ netbsd*) osname=netbsd
+ osvers="$3"
+ ;;
+ news-os) osvers="$3"
+ case "$3" in
+ 4*) osname=newsos4 ;;
+ *) osname=newsos ;;
+ esac
+ ;;
+ next*) osname=next ;;
+ nonstop-ux) osname=nonstopux ;;
+ openbsd) osname=openbsd
+ osvers="$3"
+ ;;
+ POSIX-BC | posix-bc ) osname=posix-bc
+ osvers="$3"
+ ;;
+ powerux | power_ux | powermax_os | powermaxos | \
+ powerunix | power_unix) osname=powerux
+ osvers="$3"
+ ;;
+ qnx) osname=qnx
+ osvers="$4"
+ ;;
+ solaris) osname=solaris
+ case "$3" in
+ 5*) osvers=`echo $3 | $sed 's/^5/2/g'` ;;
+ *) osvers="$3" ;;
+ esac
+ ;;
+ sunos) osname=sunos
+ case "$3" in
+ 5*) osname=solaris
+ osvers=`echo $3 | $sed 's/^5/2/g'` ;;
+ *) osvers="$3" ;;
+ esac
+ ;;
+ titanos) osname=titanos
+ case "$3" in
+ 1*) osvers=1 ;;
+ 2*) osvers=2 ;;
+ 3*) osvers=3 ;;
+ 4*) osvers=4 ;;
+ *) osvers="$3" ;;
+ esac
+ ;;
+ ultrix) osname=ultrix
+ osvers="$3"
+ ;;
+ osf1|mls+) case "$5" in
+ alpha)
+ osname=dec_osf
+ osvers=`sizer -v | awk '{print $3}' | \
+ ./tr '[A-Z]' '[a-z]' | sed 's/^[xvt]//'`
+ case "$osvers" in
+ [1-9].[0-9]*) ;;
+ *) osvers=`echo "$3" | sed 's/^[xvt]//'` ;;
+ esac
+ ;;
+ hp*) osname=hp_osf1 ;;
+ mips) osname=mips_osf1 ;;
+ esac
+ ;;
+ unixware) osname=svr5
+ osvers="$4"
+ ;;
+ uts) osname=uts
+ osvers="$3"
+ ;;
+ vos) osvers="$3"
+ ;;
+ $2) case "$osname" in
+ *isc*) ;;
+ *freebsd*) ;;
+ svr*)
+ : svr4.x or possibly later
+ case "svr$3" in
+ ${osname}*)
+ osname=svr$3
+ osvers=$4
+ ;;
+ esac
+ case "$osname" in
+ svr4.0)
+ : Check for ESIX
+ if $test -f /stand/boot ; then
+ eval `$grep '^INITPROG=[a-z/0-9]*$' /stand/boot`
+ if $test -n "$INITPROG" -a -f "$INITPROG"; then
+ isesix=`strings -a $INITPROG | \
+ $grep 'ESIX SYSTEM V/386 Release 4.0'`
+ if $test -n "$isesix"; then
+ osname=esix4
+ fi
+ fi
+ fi
+ ;;
+ esac
+ ;;
+ *) if $test -f /etc/systemid; then
+ osname=sco
+ set `echo $3 | $sed 's/\./ /g'` $4
+ if $test -f $src/hints/sco_$1_$2_$3.sh; then
+ osvers=$1.$2.$3
+ elif $test -f $src/hints/sco_$1_$2.sh; then
+ osvers=$1.$2
+ elif $test -f $src/hints/sco_$1.sh; then
+ osvers=$1
+ fi
+ else
+ case "$osname" in
+ '') : Still unknown. Probably a generic Sys V.
+ osname="sysv"
+ osvers="$3"
+ ;;
+ esac
+ fi
+ ;;
+ esac
+ ;;
+ *) case "$osname" in
+ '') : Still unknown. Probably a generic BSD.
+ osname="$1"
+ osvers="$3"
+ ;;
+ esac
+ ;;
+ esac
+else
+ if $test -f /vmunix -a -f $src/hints/news_os.sh; then
+ (what /vmunix | UU/tr '[A-Z]' '[a-z]') > UU/kernel.what 2>&1
+ if $contains news-os UU/kernel.what >/dev/null 2>&1; then
+ osname=news_os
+ fi
+ $rm -f UU/kernel.what
+ elif $test -d c:/.; then
+ set X $myuname
+ osname=os2
+ osvers="$5"
+ fi
+fi
+
+: Try to determine whether config.sh was made on this system
+case "$config_sh" in
+'')
+dflt=n
+case "$knowitall" in
+'')
+ if test -f ../config.sh; then
+ if $contains myuname= ../config.sh >/dev/null 2>&1; then
+ eval "`$grep myuname= ../config.sh`"
+ fi
+ if test "X$myuname" = "X$newmyuname"; then
+ dflt=y
+ fi
+ fi
+ ;;
+*) dflt=y;;
+esac
+
+saved_osname="$osname"
+saved_osvers="$osvers"
+saved_libswanted="$libswanted"
+tmp_n="$n"
+tmp_c="$c"
+tmp_sh="$sh"
+
+: Get old answers from config file if it was generated on the same system
+hint=default
+if $test -f ../config.sh; then
+ echo " "
+ rp="I see a config.sh file. Shall I use it to set the defaults?"
+ . ./myread
+ case "$ans" in
+ n*|N*) echo "OK, I'll ignore it."
+ mv ../config.sh ../config.sh.old
+ myuname="$newmyuname"
+ ;;
+ *) echo "Fetching default answers from your old config.sh file..." >&4
+ . ../config.sh
+ cp ../config.sh .
+ hint=previous
+ case "$dflt" in
+ n)
+ echo " "
+ rp="Do you want further invocations to use these defaults?"
+ . ./myread
+ case "$ans" in
+ y*|Y*) myuname="$newmyuname";;
+ esac
+ ;;
+ esac
+ ;;
+ esac
+fi
+;;
+*)
+ echo " "
+ echo "Fetching default answers from $config_sh..." >&4
+ cd ..
+ cp $config_sh config.sh 2>/dev/null
+ chmod +w config.sh
+ . ./config.sh
+ cd UU
+ cp ../config.sh .
+ hint=previous
+ ;;
+esac
+case "$sh" in
+'') sh="$tmp_sh" ;;
+esac
+$test "$override" && . ./optdef.sh
+
+: Restore computed paths
+for file in $loclist $trylist; do
+ eval $file="\$_$file"
+done
+
+osname="$saved_osname"
+osvers="$saved_osvers"
+n="$tmp_n"
+c="$tmp_c"
+
+case "$libswanted" in
+"$saved_libswanted") ;;
+*) libs='';;
+esac
+libswanted="$saved_libswanted"
+
+. ./checkcc
+case "$targetarch" in
+'') ;;
+*) hostarch=$osname
+ osname=`echo $targetarch|sed 's,^[^-]*-,,'`
+ osvers=''
+ ;;
+esac
+
+: Process their -A options
+. ./posthint.sh
+
+: Ask them to confirm the OS name
+cat << EOM
+
+Configure uses the operating system name and version to set some defaults.
+The default value is probably right if the name rings a bell. Otherwise,
+since spelling matters for me, either accept the default or answer "none"
+to leave it blank.
+
+EOM
+case "$osname" in
+ ''|' ')
+ case "$hintfile" in
+ ''|' '|none) dflt=none ;;
+ *) dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/_.*$//'` ;;
+ esac
+ ;;
+ *) dflt="$osname" ;;
+esac
+rp="Operating system name?"
+. ./myread
+case "$ans" in
+none) osname='' ;;
+*) osname=`echo "$ans" | $sed -e 's/[ ][ ]*/_/g' | ./tr '[A-Z]' '[a-z]'`;;
+esac
+echo " "
+case "$osvers" in
+ ''|' ')
+ case "$hintfile" in
+ ''|' '|none) dflt=none ;;
+ *) dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/^[^_]*//'`
+ dflt=`echo $dflt | $sed -e 's/^_//' -e 's/_/./g'`
+ case "$dflt" in
+ ''|' ') dflt=none ;;
+ esac
+ ;;
+ esac
+ ;;
+ *) dflt="$osvers" ;;
+esac
+rp="Operating system version?"
+. ./myread
+case "$ans" in
+none) osvers='' ;;
+*) osvers="$ans" ;;
+esac
+
+: who configured the system
+cf_time=`LC_ALL=C; LANGUAGE=C; export LC_ALL; export LANGUAGE; $date 2>&1`
+cf_by=`(logname) 2>/dev/null`
+case "$cf_by" in
+"")
+ cf_by=`(whoami) 2>/dev/null`
+ case "$cf_by" in
+ "") cf_by=unknown ;;
+ esac ;;
+esac
+
+: allow them to override the AFS root
+case "$afsroot" in
+'') afsroot=/afs ;;
+*) afsroot=$afsroot ;;
+esac
+
+: is AFS running?
+echo " "
+case "$afs" in
+$define|true) afs=true ;;
+$undef|false) afs=false ;;
+*) if $test -d $afsroot; then
+ afs=true
+ else
+ afs=false
+ fi
+ ;;
+esac
+if $afs; then
+ echo "AFS may be running... I'll be extra cautious then..." >&4
+else
+ echo "AFS does not seem to be running..." >&4
+fi
+
+: determine where manual pages are on this system
+echo " "
+case "$sysman" in
+'')
+ syspath='/usr/share/man/man1 /usr/man/man1'
+ syspath="$syspath /usr/man/mann /usr/man/manl /usr/man/local/man1"
+ syspath="$syspath /usr/man/u_man/man1 /usr/share/man/man1"
+ syspath="$syspath /usr/catman/u_man/man1 /usr/man/l_man/man1"
+ syspath="$syspath /usr/local/man/u_man/man1 /usr/local/man/l_man/man1"
+ syspath="$syspath /usr/man/man.L /local/man/man1 /usr/local/man/man1"
+ sysman=`./loc . /usr/man/man1 $syspath`
+ ;;
+esac
+if $test -d "$sysman"; then
+ echo "System manual is in $sysman." >&4
+else
+ echo "Could not find manual pages in source form." >&4
+fi
+
+: decide how portable to be
+case "$d_portable" in
+"$define") dflt=y;;
+*) dflt=n;;
+esac
+$cat <<'EOH'
+
+I can set things up so that your shell scripts and binaries are more portable,
+at what may be a noticable cost in performance. In particular, if you
+ask to be portable, the following happens:
+
+ 1) Shell scripts will rely on the PATH variable rather than using
+ the paths derived above.
+ 2) ~username interpretations will be done at run time rather than
+ by Configure.
+
+EOH
+rp="Do you expect to run these scripts and binaries on multiple machines?"
+. ./myread
+case "$ans" in
+ y*) d_portable="$define"
+ ;;
+ *) d_portable="$undef" ;;
+esac
+
+: set up shell script to do ~ expansion
+cat >filexp <<EOSS
+$startsh
+: expand filename
+case "\$1" in
+ ~/*|~)
+ echo \$1 | $sed "s|~|\${HOME-\$LOGDIR}|"
+ ;;
+ ~*)
+ if $test -f /bin/csh; then
+ /bin/csh -f -c "glob \$1"
+ failed=\$?
+ echo ""
+ exit \$failed
+ else
+ name=\`$expr x\$1 : '..\([^/]*\)'\`
+ dir=\`$sed -n -e "/^\${name}:/{s/^[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\).*"'\$'"/\1/" -e p -e q -e '}' </etc/passwd\`
+ if $test ! -d "\$dir"; then
+ me=\`basename \$0\`
+ echo "\$me: can't locate home directory for: \$name" >&2
+ exit 1
+ fi
+ case "\$1" in
+ */*)
+ echo \$dir/\`$expr x\$1 : '..[^/]*/\(.*\)'\`
+ ;;
+ *)
+ echo \$dir
+ ;;
+ esac
+ fi
+ ;;
+*)
+ echo \$1
+ ;;
+esac
+EOSS
+chmod +x filexp
+$eunicefix filexp
+
+: now set up to get a file name
+cat <<EOS >getfile
+$startsh
+EOS
+cat <<'EOSC' >>getfile
+tilde=''
+fullpath=''
+already=''
+skip=''
+none_ok=''
+exp_file=''
+nopath_ok=''
+orig_rp="$rp"
+orig_dflt="$dflt"
+case "$gfpth" in
+'') gfpth='.' ;;
+esac
+
+case "$fn" in
+*\(*)
+ : getfile will accept an answer from the comma-separated list
+ : enclosed in parentheses even if it does not meet other criteria.
+ expr "$fn" : '.*(\(.*\)).*' | $tr ',' $trnl >getfile.ok
+ fn=`echo $fn | sed 's/(.*)//'`
+ ;;
+esac
+
+case "$fn" in
+*:*)
+ loc_file=`expr $fn : '.*:\(.*\)'`
+ fn=`expr $fn : '\(.*\):.*'`
+ ;;
+esac
+
+case "$fn" in
+*~*) tilde=true;;
+esac
+case "$fn" in
+*/*) fullpath=true;;
+esac
+case "$fn" in
+*+*) skip=true;;
+esac
+case "$fn" in
+*n*) none_ok=true;;
+esac
+case "$fn" in
+*e*) exp_file=true;;
+esac
+case "$fn" in
+*p*) nopath_ok=true;;
+esac
+
+case "$fn" in
+*f*) type='File';;
+*d*) type='Directory';;
+*l*) type='Locate';;
+esac
+
+what="$type"
+case "$what" in
+Locate) what='File';;
+esac
+
+case "$exp_file" in
+'')
+ case "$d_portable" in
+ "$define") ;;
+ *) exp_file=true;;
+ esac
+ ;;
+esac
+
+cd ..
+while test "$type"; do
+ redo=''
+ rp="$orig_rp"
+ dflt="$orig_dflt"
+ case "$tilde" in
+ true) rp="$rp (~name ok)";;
+ esac
+ . UU/myread
+ if test -f UU/getfile.ok && \
+ $contains "^$ans\$" UU/getfile.ok >/dev/null 2>&1
+ then
+ value="$ans"
+ ansexp="$ans"
+ break
+ fi
+ case "$ans" in
+ none)
+ value=''
+ ansexp=''
+ case "$none_ok" in
+ true) type='';;
+ esac
+ ;;
+ *)
+ case "$tilde" in
+ '') value="$ans"
+ ansexp="$ans";;
+ *)
+ value=`UU/filexp $ans`
+ case $? in
+ 0)
+ if test "$ans" != "$value"; then
+ echo "(That expands to $value on this system.)"
+ fi
+ ;;
+ *) value="$ans";;
+ esac
+ ansexp="$value"
+ case "$exp_file" in
+ '') value="$ans";;
+ esac
+ ;;
+ esac
+ case "$fullpath" in
+ true)
+ case "$ansexp" in
+ /*) value="$ansexp" ;;
+ [a-zA-Z]:/*) value="$ansexp" ;;
+ [a-zA-Z]:\\*) value="$ansexp" ;;
+ *)
+ redo=true
+ case "$already" in
+ true)
+ echo "I shall only accept a full path name, as in /bin/ls." >&4
+ echo "Use a ! shell escape if you wish to check pathnames." >&4
+ ;;
+ *)
+ echo "Please give a full path name, starting with slash." >&4
+ case "$tilde" in
+ true)
+ echo "Note that using ~name is ok provided it expands well." >&4
+ already=true
+ ;;
+ esac
+ esac
+ ;;
+ esac
+ ;;
+ esac
+ case "$redo" in
+ '')
+ case "$type" in
+ File)
+ for fp in $gfpth; do
+ if test "X$fp" = X.; then
+ pf="$ansexp"
+ else
+ pf="$fp/$ansexp"
+ fi
+ if test -f "$pf"; then
+ type=''
+ elif test -r "$pf" || (test -h "$pf") >/dev/null 2>&1
+ then
+ echo "($value is not a plain file, but that's ok.)"
+ type=''
+ fi
+ if test X"$type" = X; then
+ value="$pf"
+ break
+ fi
+ done
+ ;;
+ Directory)
+ for fp in $gfpth; do
+ if test "X$fp" = X.; then
+ dir="$ans"
+ direxp="$ansexp"
+ else
+ dir="$fp/$ansexp"
+ direxp="$fp/$ansexp"
+ fi
+ if test -d "$direxp"; then
+ type=''
+ value="$dir"
+ break
+ fi
+ done
+ ;;
+ Locate)
+ if test -d "$ansexp"; then
+ echo "(Looking for $loc_file in directory $value.)"
+ value="$value/$loc_file"
+ ansexp="$ansexp/$loc_file"
+ fi
+ if test -f "$ansexp"; then
+ type=''
+ fi
+ case "$nopath_ok" in
+ true) case "$value" in
+ */*) ;;
+ *) echo "Assuming $value will be in people's path."
+ type=''
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+ esac
+
+ case "$skip" in
+ true) type='';
+ esac
+
+ case "$type" in
+ '') ;;
+ *)
+ if test "$fastread" = yes; then
+ dflt=y
+ else
+ dflt=n
+ fi
+ rp="$what $value doesn't exist. Use that name anyway?"
+ . UU/myread
+ dflt=''
+ case "$ans" in
+ y*) type='';;
+ *) echo " ";;
+ esac
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+ esac
+done
+cd UU
+ans="$value"
+rp="$orig_rp"
+dflt="$orig_dflt"
+rm -f getfile.ok
+test "X$gfpthkeep" != Xy && gfpth=""
+EOSC
+
+: determine root of directory hierarchy where package will be installed.
+case "$prefix" in
+'')
+ dflt=`./loc . /usr/local /usr/local /local /opt /usr`
+ ;;
+*)
+ dflt="$prefix"
+ ;;
+esac
+$cat <<EOM
+
+By default, $package will be installed in $dflt/bin, manual
+pages under $dflt/man, etc..., i.e. with $dflt as prefix for
+all installation directories. Typically set to /usr/local, but you
+may choose /usr if you wish to install $package among your system
+binaries. If you wish to have binaries under /bin but manual pages
+under /usr/local/man, that's ok: you will be prompted separately
+for each of the installation directories, the prefix being only used
+to set the defaults.
+
+EOM
+fn=d~
+rp='Installation prefix to use?'
+. ./getfile
+oldprefix=''
+case "$prefix" in
+'') ;;
+*)
+ case "$ans" in
+ "$prefix") ;;
+ *) oldprefix="$prefix";;
+ esac
+ ;;
+esac
+prefix="$ans"
+prefixexp="$ansexp"
+
+: set the prefixit variable, to compute a suitable default value
+prefixit='case "$3" in
+""|none)
+ case "$oldprefix" in
+ "") eval "$1=\"\$$2\"";;
+ *)
+ case "$3" in
+ "") eval "$1=";;
+ none)
+ eval "tp=\"\$$2\"";
+ case "$tp" in
+ ""|" ") eval "$1=\"\$$2\"";;
+ *) eval "$1=";;
+ esac;;
+ esac;;
+ esac;;
+*)
+ eval "tp=\"$oldprefix-\$$2-\""; eval "tp=\"$tp\"";
+ case "$tp" in
+ --|/*--|\~*--) eval "$1=\"$prefix/$3\"";;
+ /*-$oldprefix/*|\~*-$oldprefix/*)
+ eval "$1=\`echo \$$2 | sed \"s,^$oldprefix,$prefix,\"\`";;
+ *) eval "$1=\"\$$2\"";;
+ esac;;
+esac'
+
+: set the prefixup variable, to restore leading tilda escape
+prefixup='case "$prefixexp" in
+"$prefix") ;;
+*) eval "$1=\`echo \$$1 | sed \"s,^$prefixexp,$prefix,\"\`";;
+esac'
+
+: determine where manual pages go
+set mansrc mansrc none
+eval $prefixit
+$cat <<EOM
+
+$spackage has manual pages available in source form.
+EOM
+case "$nroff" in
+nroff)
+ echo "However, you don't have nroff, so they're probably useless to you."
+ case "$mansrc" in
+ '') mansrc="none";;
+ esac;;
+esac
+echo "If you don't want the manual sources installed, answer 'none'."
+case "$mansrc" in
+'')
+ lookpath="$prefixexp/share/man/man1 $prefixexp/man/man1"
+ lookpath="$lookpath $prefixexp/man/u_man/man1 $prefixexp/man/l_man/man1"
+ lookpath="$lookpath /usr/local/man/man1 /opt/man/man1 /usr/man/manl"
+ lookpath="$lookpath /usr/share/man/man1 /usr/local/share/man/man1"
+ lookpath="$lookpath /usr/man/local/man1 /usr/man/l_man/man1"
+ lookpath="$lookpath /usr/local/man/u_man/man1 /usr/local/man/l_man/man1"
+ lookpath="$lookpath /usr/man/man.L"
+ mansrc=`./loc . $prefixexp/man/man1 $lookpath`
+ if $test -d "$mansrc"; then
+ dflt="$mansrc"
+ else
+ dflt="$sysman"
+ fi
+ set dflt
+ eval $prefixup
+ ;;
+' ') dflt=none;;
+*) dflt="$mansrc"
+ ;;
+esac
+echo " "
+fn=dn~
+rp='Where do the manual pages (source) go?'
+. ./getfile
+if test "X$mansrcexp" != "X$ansexp"; then
+ installmansrc=''
+fi
+mansrc="$ans"
+mansrcexp="$ansexp"
+case "$mansrc" in
+'') mansrc=' '
+ installmansrc='';;
+esac
+if $afs && $test "$mansrc"; then
+ $cat <<EOM
+
+Since you are running AFS, I need to distinguish the directory in which
+manual pages reside from the directory in which they are installed (and from
+which they are presumably copied to the former directory by occult means).
+
+EOM
+ case "$installmansrc" in
+ '') dflt=`echo $mansrcexp | sed 's#^/afs/#/afs/.#'`;;
+ *) dflt="$installmansrc";;
+ esac
+ fn=de~
+ rp='Where will man pages be installed?'
+ . ./getfile
+ installmansrc="$ans"
+else
+ installmansrc="$mansrcexp"
+fi
+
+case "$mansrc" in
+' ') manext='0';;
+*l) manext=l;;
+*n) manext=n;;
+*o) manext=l;;
+*p) manext=n;;
+*C) manext=C;;
+*L) manext=L;;
+*L1) manext=L1;;
+*) manext=1;;
+esac
+
+: determine where private executables go
+set dflt privlib lib/$package
+eval $prefixit
+$cat <<EOM
+
+There are some auxiliary files for $package that need to be put into a
+private library directory that is accessible by everyone.
+
+EOM
+fn=d~+
+rp='Pathname where the private library files will reside?'
+. ./getfile
+if $test "X$privlibexp" != "X$ansexp"; then
+ installprivlib=''
+fi
+privlib="$ans"
+privlibexp="$ansexp"
+if $afs; then
+ $cat <<EOM
+
+Since you are running AFS, I need to distinguish the directory in which
+private files reside from the directory in which they are installed (and from
+which they are presumably copied to the former directory by occult means).
+
+EOM
+ case "$installprivlib" in
+ '') dflt=`echo $privlibexp | sed 's#^/afs/#/afs/.#'`;;
+ *) dflt="$installprivlib";;
+ esac
+ fn=de~
+ rp='Where will private files be installed?'
+ . ./getfile
+ installprivlib="$ans"
+else
+ installprivlib="$privlibexp"
+fi
+
+: determine where public executable scripts go
+set scriptdir scriptdir
+eval $prefixit
+case "$scriptdir" in
+'')
+ dflt="$bin"
+ : guess some guesses
+ $test -d /usr/share/scripts && dflt=/usr/share/scripts
+ $test -d /usr/share/bin && dflt=/usr/share/bin
+ $test -d /usr/local/script && dflt=/usr/local/script
+ $test -d $prefixexp/script && dflt=$prefixexp/script
+ set dflt
+ eval $prefixup
+ ;;
+*) dflt="$scriptdir"
+ ;;
+esac
+$cat <<EOM
+
+Some installations have a separate directory just for executable scripts so
+that they can mount it across multiple architectures but keep the scripts in
+one spot. You might, for example, have a subdirectory of /usr/share for this.
+Or you might just lump your scripts in with all your other executables.
+
+EOM
+fn=d~
+rp='Where do you keep publicly executable scripts?'
+. ./getfile
+if $test "X$ansexp" != "X$scriptdirexp"; then
+ installscript=''
+fi
+scriptdir="$ans"
+scriptdirexp="$ansexp"
+if $afs; then
+ $cat <<EOM
+
+Since you are running AFS, I need to distinguish the directory in which
+scripts reside from the directory in which they are installed (and from
+which they are presumably copied to the former directory by occult means).
+
+EOM
+ case "$installscript" in
+ '') dflt=`echo $scriptdirexp | sed 's#^/afs/#/afs/.#'`;;
+ *) dflt="$installscript";;
+ esac
+ fn=de~
+ rp='Where will public scripts be installed?'
+ . ./getfile
+ installscript="$ans"
+else
+ installscript="$scriptdirexp"
+fi
+
+: preserve RCS keywords in files with variable substitution, grrr
+Header='$Header'
+Id='$Id'
+Log='$Log'
+
+: Define several unixisms.
+: Hints files or command line option can be used to override them.
+case "$_a" in
+'') _a='.a';;
+esac
+case "$_o" in
+'') _o='.o';;
+esac
+
+: set the base revision
+baserev=3.5
+
+: make some quick guesses about what we are up against
+echo " "
+$echo $n "Hmm... $c"
+echo exit 1 >bsd
+echo exit 1 >usg
+echo exit 1 >v7
+echo exit 1 >osf1
+echo exit 1 >eunice
+echo exit 1 >xenix
+echo exit 1 >venix
+echo exit 1 >os2
+echo exit 1 >gnu
+echo exit 1 >linux
+echo exit 1 >dos
+echo exit 1 >windows
+d_bsd="$undef"
+d_linux="$undef"
+d_dos="$undef"
+d_os2="$undef"
+d_windows="$undef"
+$cat /usr/include/signal.h /usr/include/sys/signal.h >foo 2>/dev/null
+if test -f /osf_boot || $contains 'OSF/1' /usr/include/ctype.h >/dev/null 2>&1
+then
+ echo "Looks kind of like an OSF/1 system, but we'll see..."
+ echo exit 0 >osf1
+elif test `echo abc | $tr a-z A-Z` = Abc ; then
+ xxx=`./loc addbib blurfl $pth`
+ if $test -f $xxx; then
+ echo "Looks kind of like a USG system with BSD features, but we'll see..."
+ echo exit 0 >bsd
+ echo exit 0 >usg
+ else
+ if $contains SIGTSTP foo >/dev/null 2>&1 ; then
+ echo "Looks kind of like an extended USG system, but we'll see..."
+ else
+ echo "Looks kind of like a USG system, but we'll see..."
+ fi
+ echo exit 0 >usg
+ fi
+elif $contains SIGTSTP foo >/dev/null 2>&1 ; then
+ echo "Looks kind of like a BSD system, but we'll see..."
+ d_bsd="$define"
+ echo exit 0 >bsd
+elif
+ $rm --version 2>/dev/null >foo;
+ $contains "Free Software Foundation" foo >/dev/null
+then
+ xxx=`uname`
+ echo exit 0 >gnu
+ echo "Looks kind of like a GNU/$xxx system, but we'll see..."
+ if $test X$xxx = XLinux; then
+ d_linux="$define"
+ echo exit 0 >linux
+ fi
+else
+ echo "Looks kind of like a Version 7 system, but we'll see..."
+ echo exit 0 >v7
+fi
+case "$eunicefix" in
+*unixtovms*)
+ $cat <<'EOI'
+There is, however, a strange, musty smell in the air that reminds me of
+something...hmm...yes...I've got it...there's a VMS nearby, or I'm a Blit.
+EOI
+ echo exit 0 >eunice
+ d_eunice="$define"
+: it so happens the Eunice I know will not run shell scripts in Unix format
+ ;;
+*)
+ echo " "
+ echo "Congratulations. You aren't running Eunice."
+ d_eunice="$undef"
+ ;;
+esac
+if test -d c:/.; then
+ case "X${MACHTYPE:-nonesuchmach}" in
+ *cygwin) echo " "; echo "Hah!... you're running under Cygwin!";;
+ *msys) echo " "; echo "Hah!... you're running under MinGW!";;
+ esac
+ case "X${MACHTYPE:-nonesuchmach}" in
+ *cygwin|*msys)
+ echo exit 0 >windows
+ d_windows="$define"
+ ;;
+ esac
+fi
+case "$p_" in
+:) ;;
+*)
+ $cat <<'EOI'
+I have the feeling something is not exactly right, however...don't tell me...
+EOI
+ if test -n "$DJGPP"; then
+ echo exit 0 >dos
+ d_dos="$define"
+ else
+ $cat <<'EOI'
+lemme think...does HAL ring a bell?...no, of course, you're only running OS/2!
+EOI
+ echo exit 0 >os2
+ d_os2="$define"
+ fi
+ ;;
+esac
+if test -f /xenix; then
+ echo "Actually, this looks more like a XENIX system..."
+ echo exit 0 >xenix
+ d_xenix="$define"
+else
+ echo " "
+ echo "It's not Xenix..."
+ d_xenix="$undef"
+fi
+chmod +x xenix
+$eunicefix xenix
+if test -f /venix; then
+ echo "Actually, this looks more like a VENIX system..."
+ echo exit 0 >venix
+else
+ echo " "
+ if ./xenix; then
+ : null
+ else
+ echo "Nor is it Venix..."
+ fi
+fi
+chmod +x bsd usg v7 osf1 eunice xenix venix dos os2 gnu linux windows
+$eunicefix bsd usg v7 osf1 eunice xenix venix dos os2 gnu linux windows
+$rm -f foo
+
+: What should the include directory be ?
+echo " "
+$echo $n "Hmm... $c"
+incpath=''
+mips_type=''
+if $test -f /bin/mips && /bin/mips; then
+ echo "Looks like a MIPS system..."
+ $cat >usr.c <<'EOCP'
+#ifdef SYSTYPE_BSD43
+/bsd43
+#endif
+EOCP
+ if cc -E usr.c > usr.out && $contains / usr.out >/dev/null 2>&1; then
+ dflt='/bsd43/usr/include'
+ incpath='/bsd43'
+ mips_type='BSD 4.3'
+ else
+ mips_type='System V'
+ fi
+ $rm -f usr.c usr.out
+ echo "and you're compiling with the $mips_type compiler and libraries."
+ echo "exit 0" >mips
+else
+ echo "Doesn't look like a MIPS system."
+ echo "exit 1" >mips
+fi
+chmod +x mips
+$eunicefix mips
+
+: What should the include directory be ?
+echo " "
+dflt='/usr/include'
+case "$usrinc" in
+'') dflt="$incpath/usr/include";;
+*) dflt="$usrinc";;
+esac
+fn=d/
+rp='Where are the include files you want to use?'
+. ./getfile
+usrinc="$ans"
+
+: see if we have to deal with yellow pages, now NIS.
+if $test -d /usr/etc/yp || $test -d /etc/yp || $test -d /usr/lib/yp; then
+ if $test -f /usr/etc/nibindd; then
+ echo " "
+ echo "I'm fairly confident you're on a NeXT."
+ echo " "
+ rp='Do you get the hosts file via NetInfo?'
+ dflt=y
+ case "$hostcat" in
+ nidump*) ;;
+ '') ;;
+ *) dflt=n;;
+ esac
+ . ./myread
+ case "$ans" in
+ y*) hostcat='nidump hosts .';;
+ *) case "$hostcat" in
+ nidump*) hostcat='';;
+ esac
+ ;;
+ esac
+ fi
+ case "$hostcat" in
+ nidump*) ;;
+ *)
+ case "$hostcat" in
+ *ypcat*) dflt=y;;
+ '') if $contains '^\+' /etc/passwd >/dev/null 2>&1; then
+ dflt=y
+ else
+ dflt=n
+ fi;;
+ *) dflt=n;;
+ esac
+ echo " "
+ rp='Are you getting the hosts file via yellow pages?'
+ . ./myread
+ case "$ans" in
+ y*) hostcat='ypcat hosts';;
+ *) hostcat='cat /etc/hosts';;
+ esac
+ ;;
+ esac
+fi
+case "$hostcat" in
+'') hostcat=':'
+ $test -f /etc/hosts && hostcat='cat /etc/hosts';;
+esac
+case "$groupcat" in
+'') groupcat=':'
+ $test -f /etc/group && groupcat='cat /etc/group';;
+esac
+case "$passcat" in
+'') passcat=':'
+ $test -f /etc/passwd && passcat='cat /etc/passwd';;
+esac
+
+: now get the host name
+echo " "
+echo "Figuring out host name..." >&4
+case "$myhostname" in
+'') cont=true
+ echo 'Maybe "hostname" will work...'
+ if tans=`sh -c hostname 2>&1` ; then
+ myhostname=$tans
+ phostname=hostname
+ cont=''
+ fi
+ ;;
+*) cont='';;
+esac
+if $test "$cont"; then
+ if ./xenix; then
+ echo 'Oh, dear. Maybe "/etc/systemid" is the key...'
+ if tans=`cat /etc/systemid 2>&1` ; then
+ myhostname=$tans
+ phostname='cat /etc/systemid'
+ echo "Whadyaknow. Xenix always was a bit strange..."
+ cont=''
+ fi
+ elif $test -r /etc/systemid; then
+ echo "(What is a non-Xenix system doing with /etc/systemid?)"
+ fi
+fi
+if $test "$cont"; then
+ echo 'No, maybe "uuname -l" will work...'
+ if tans=`sh -c 'uuname -l' 2>&1` ; then
+ myhostname=$tans
+ phostname='uuname -l'
+ else
+ echo 'Strange. Maybe "uname -n" will work...'
+ if tans=`sh -c 'uname -n' 2>&1` ; then
+ myhostname=$tans
+ phostname='uname -n'
+ else
+ echo 'Oh well, maybe I can mine it out of whoami.h...'
+ if tans=`sh -c $contains' sysname $usrinc/whoami.h' 2>&1` ; then
+ myhostname=`echo "$tans" | $sed 's/^.*"\(.*\)"/\1/'`
+ phostname="sed -n -e '"'/sysname/s/^.*\"\\(.*\\)\"/\1/{'"' -e p -e q -e '}' <$usrinc/whoami.h"
+ else
+ case "$myhostname" in
+ '') echo "Does this machine have an identity crisis or something?"
+ phostname='';;
+ *)
+ echo "Well, you said $myhostname before..."
+ phostname='echo $myhostname';;
+ esac
+ fi
+ fi
+ fi
+fi
+case "$myhostname" in
+'') myhostname=noname ;;
+esac
+: you do not want to know about this
+set $myhostname
+myhostname=$1
+
+: verify guess
+if $test "$myhostname" ; then
+ dflt=y
+ rp='Your host name appears to be "'$myhostname'".'" Right?"
+ . ./myread
+ case "$ans" in
+ y*) ;;
+ *) myhostname='';;
+ esac
+fi
+
+: bad guess or no guess
+while $test "X$myhostname" = X ; do
+ dflt=''
+ rp="Please type the (one word) name of your host:"
+ . ./myread
+ myhostname="$ans"
+done
+
+: translate upper to lower if necessary
+case "$myhostname" in
+*[A-Z]*)
+ echo "(Normalizing case in your host name)"
+ myhostname=`echo $myhostname | ./tr '[A-Z]' '[a-z]'`
+ ;;
+esac
+
+case "$myhostname" in
+*.*)
+ dflt=`expr "X$myhostname" : "X[^.]*\(\..*\)"`
+ myhostname=`expr "X$myhostname" : "X\([^.]*\)\."`
+ echo "(Trimming domain name from host name--host name is now $myhostname)"
+ ;;
+*) case "$mydomain" in
+ '')
+ {
+ test "X$hostcat" = "Xypcat hosts" &&
+ ypmatch "$myhostname" hosts 2>/dev/null |\
+ $sed -e 's/[ ]*#.*//; s/$/ /' > hosts && \
+ $test -s hosts
+ } || {
+ $hostcat | $sed -n -e "s/[ ]*#.*//; s/\$/ /
+ /[ ]$myhostname[ . ]/p" > hosts
+ }
+ tmp_re="[ . ]"
+ $test x`$awk "/[0-9].*[ ]$myhostname$tmp_re/ { sum++ }
+ END { print sum }" hosts` = x1 || tmp_re="[ ]"
+ dflt=.`$awk \
+ "/[0-9].*[ ]$myhostname$tmp_re/ {for(i=2; i<=NF;i++) print \\\$i}" \
+ hosts | $sort | $uniq | \
+ $sed -n -e "s/$myhostname\.\([-a-zA-Z0-9_.]\)/\1/p"`
+ case `$echo X$dflt` in
+ X*\ *) echo "(Several hosts in /etc/hosts matched hostname)"
+ dflt=.
+ ;;
+ X.)
+ if $test -f /etc/hosts; then
+ echo "(You do not have fully-qualified names in /etc/hosts)"
+ else
+ echo "(I cannot locate a hosts database anywhere)"
+ fi
+ ;;
+ esac
+ case "$dflt" in
+ .)
+ tans=`./loc resolv.conf X /etc /usr/etc`
+ if $test -f "$tans"; then
+ echo "(Attempting domain name extraction from $tans)"
+ dflt=.`$sed -n -e 's/ / /g' \
+ -e 's/^search *\([^ ]*\).*/\1/p' $tans \
+ | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
+ case "$dflt" in
+ .) dflt=.`$sed -n -e 's/ / /g' \
+ -e 's/^domain *\([^ ]*\).*/\1/p' $tans \
+ | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
+ ;;
+ esac
+ fi
+ ;;
+ esac
+ case "$dflt" in
+ .) echo "(No help from resolv.conf either -- attempting clever guess)"
+ dflt=.`sh -c domainname 2>/dev/null`
+ case "$dflt" in
+ '') dflt='.';;
+ .nis.*|.yp.*|.main.*) dflt=`echo $dflt | $sed -e 's/^\.[^.]*//'`;;
+ esac
+ ;;
+ esac
+ case "$dflt$osname" in
+ .os390)
+ file="//'SYS1.TCPPARMS(TCPDATA)'"
+ echo "(Attempting domain name extraction from $file)"
+ dflt=.`awk '/^DOMAINORIGIN/ {print $2}' "$file" 2>/dev/null`
+ ;;
+ esac
+ case "$dflt" in
+ .) echo "(Lost all hope -- silly guess then)"
+ dflt='.nonet'
+ ;;
+ esac
+ $rm -f hosts
+ ;;
+ *) dflt="$mydomain";;
+ esac;;
+esac
+echo " "
+rp="What is your domain name?"
+. ./myread
+tans="$ans"
+case "$ans" in
+'') ;;
+.*) ;;
+*) tans=".$tans";;
+esac
+mydomain="$tans"
+
+: translate upper to lower if necessary
+case "$mydomain" in
+*[A-Z]*)
+ echo "(Normalizing case in your domain name)"
+ mydomain=`echo $mydomain | ./tr '[A-Z]' '[a-z]'`
+ ;;
+esac
+
+: a little sanity check here
+case "$phostname" in
+'') ;;
+*)
+ case `$phostname | ./tr '[A-Z]' '[a-z]'` in
+ $myhostname$mydomain|$myhostname) ;;
+ *)
+ case "$phostname" in
+ sed*)
+ echo "(That doesn't agree with your whoami.h file, by the way.)"
+ ;;
+ *)
+ echo "(That doesn't agree with your $phostname command, by the way.)"
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+esac
+
+: determine the e-mail address of the user who is running us
+$cat <<EOM
+
+I need to get your e-mail address in Internet format if possible, i.e.
+something like user@host.domain. Please answer accurately since I have
+no easy means to double check it. The default value provided below
+is most probably close to reality but may not be valid from outside
+your organization...
+
+EOM
+cont=x
+while test "$cont"; do
+ case "$MAILDOMAIN" in
+ '')
+ if $test -s /etc/mailname; then
+ maildomain=`$cat /etc/mailname`
+ else
+ maildomain="$myhostname$mydomain"
+ fi
+ ;;
+ *) maildomain="$MAILDOMAIN";;
+ esac
+ case "$cf_email" in
+ '') dflt="$cf_by@$maildomain";;
+ *) dflt="$cf_email";;
+ esac
+ rp='What is your e-mail address?'
+ . ./myread
+ cf_email="$ans"
+ case "$cf_email" in
+ *@*.*) cont='' ;;
+ *)
+ rp='Address does not look like an Internet one. Use it anyway?'
+ case "$fastread" in
+ yes) dflt=y ;;
+ *) dflt=n ;;
+ esac
+ . ./myread
+ case "$ans" in
+ y*) cont='' ;;
+ *) echo " " ;;
+ esac
+ ;;
+ esac
+done
+
+: how do we get traditional cpp semantics?
+echo " "
+echo "Checking to see how to get traditional cpp semantics..." >&4
+$cat >foo.c <<'EOF'
+#define A(x) x
+#define B(y) y
+A(a)B(b)
+EOF
+if $cpp foo.c >foo.cpp; $contains ab foo.cpp >/dev/null 2>&1; then
+ echo "Plain '$cpp' works just fine."
+ cpp_trad="$cpp"
+elif $cpp -traditional foo.c >foo.cpp; \
+ $contains ab foo.cpp >/dev/null 2>&1; then
+ echo "We'll use '$cpp -traditional' to get proper semantics."
+ cpp_trad="$cpp -traditional"
+else
+ echo "I don't know how to get traditional semantics with '$cpp'." >&4
+ cpp_trad="$cpp"
+fi
+$rm -f foo.c foo.cpp
+
+: Check whether they have gcc in any guise.
+echo " "
+echo "Checking for GNU cc in disguise and/or its version number..." >&4
+$cat >try.c <<EOM
+int main(void) {
+#ifdef __GNUC__
+gcc_version_major __GNUC__
+#ifdef __GNUC_MINOR__
+gcc_version_minor __GNUC__
+#endif
+#ifdef __GNUC_PATCHLEVEL__
+gcc_version_patchlevel __GNUC_PATCHLEVEL__
+#endif
+#endif
+}
+EOM
+if $cc -E try.c > try 2>&1
+then
+ gccversion=`$grep gcc_version_major try |
+ sed 's/^.*gcc_version_major[\t ]*//'`
+ case "$gccversion" in
+ '') echo "You are not using GNU cc." ;;
+ *) echo "You are using GNU cc $gccversion."
+ ccname=gcc
+ ;;
+ esac
+else
+ gccversion=''
+fi
+$rm -f try try.*
+case "$gccversion" in
+1*) cpp=`./loc gcc-cpp $cpp $pth` ;;
+esac
+case "$gccversion" in
+'') gccosandvers='' ;;
+*) gccshortvers=`echo "$gccversion"|sed 's/ .*//'`
+ gccosandvers=`$cc -v 2>&1 | \
+ $grep '/specs$'|sed "s!.*/[^-/]*-[^-/]*-\([^-/]*\)/$gccshortvers/specs!\1!"`
+ gccshortvers=''
+ case "$gccosandvers" in
+ $osname) gccosandvers='' ;; # linux gccs seem to have no linux osvers, grr
+ $osname$osvers) ;; # looking good
+ $osname*) cat <<EOM >&4
+
+*** WHOA THERE!!! ***
+
+ Your gcc has not been compiled for the exact release of
+ your operating system ($gccosandvers versus $osname$osvers).
+
+ In general it is a good idea to keep gcc synchronized with
+ the operating system because otherwise serious problems
+ may ensue when trying to compile software, like Perl.
+
+ I'm trying to be optimistic here, though, and will continue.
+ If later during the configuration and build icky compilation
+ problems appear (headerfile conflicts being the most common
+ manifestation), I suggest reinstalling the gcc to match
+ your operating system release.
+
+EOM
+ ;;
+ *) gccosandvers='' ;; # failed to parse, better be silent
+ esac
+ ;;
+esac
+case "$ccname" in
+'') ccname="$cc" ;;
+esac
+
+: gcc 3.1 complains about adding -Idirectories that it already knows about,
+: so we will take those off from locincpth.
+case "$gccversion" in
+3*)
+ echo "main(){}">try.c
+ for incdir in `$cc -v -c try.c 2>&1 | \
+ sed '1,/^#include <\.\.\.>/d;/^End of search list/,$d;s/^ //'` ; do
+ locincpth=`echo $locincpth | sed s!$incdir!!`
+ done
+ $rm -f try try.*
+esac
+
+: see how we invoke the C preprocessor
+echo " "
+echo "Now, how can we feed standard input to your C preprocessor..." >&4
+cat <<'EOT' >testcpp.c
+#define ABC abc
+#define XYZ xyz
+ABC.XYZ
+EOT
+cd ..
+if $test ! -f cppstdin; then
+ echo "$startsh" >cppstdin
+if $test "X$osname" = "Xaix" -a "X$gccversion" = X; then
+ echo 'cat >.$$.c; rm -f .$$.u; '"$cc"' ${1+"$@"} -M -c .$$.c 2>/dev/null; \
+ test -s .$$.u && \
+ awk '"'"'$2 ~ /\.h$/ { print "# 0 \""$2"\"" }'"'"' .$$.u; \
+ rm -f .$$.o .$$.u; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' >> cppstdin
+else
+ echo 'cat >.$$.c; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' >>cppstdin
+fi; else
+ echo "Keeping your $hint cppstdin wrapper."
+fi
+chmod 755 cppstdin
+$eunicefix cppstdin
+wrapper=`pwd`/cppstdin
+ok='false'
+cd UU
+
+if $test "X$cppstdin" != "X" && \
+ $cppstdin $cppminus <testcpp.c >testcpp.out 2>&1 && \
+ $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
+then
+ echo "You used to use $cppstdin $cppminus so we'll use that again."
+ case "$cpprun" in
+ '') echo "But let's see if we can live without a wrapper..." ;;
+ *)
+ if $cpprun $cpplast <testcpp.c >testcpp.out 2>&1 && \
+ $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
+ then
+ echo "(And we'll use $cpprun $cpplast to preprocess directly.)"
+ ok='true'
+ else
+ echo "(However, $cpprun $cpplast does not work, let's see...)"
+ fi
+ ;;
+ esac
+else
+ case "$cppstdin" in
+ '') ;;
+ *)
+ echo "Good old $cppstdin $cppminus does not seem to be of any help..."
+ ;;
+ esac
+fi
+
+if $ok; then
+ : nothing
+elif echo 'Maybe "'"$cc"' -E" will work...'; \
+ $cc -E <testcpp.c >testcpp.out 2>&1; \
+ $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
+ echo "Yup, it does."
+ x_cpp="$cc -E"
+ x_minus='';
+elif echo 'Nope...maybe "'"$cc"' -E -" will work...'; \
+ $cc -E - <testcpp.c >testcpp.out 2>&1; \
+ $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
+ echo "Yup, it does."
+ x_cpp="$cc -E"
+ x_minus='-';
+elif echo 'Nope...maybe "'"$cc"' -P" will work...'; \
+ $cc -P <testcpp.c >testcpp.out 2>&1; \
+ $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
+ echo "Yipee, that works!"
+ x_cpp="$cc -P"
+ x_minus='';
+elif echo 'Nope...maybe "'"$cc"' -P -" will work...'; \
+ $cc -P - <testcpp.c >testcpp.out 2>&1; \
+ $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
+ echo "At long last!"
+ x_cpp="$cc -P"
+ x_minus='-';
+elif echo 'No such luck, maybe "'$cpp'" will work...'; \
+ $cpp <testcpp.c >testcpp.out 2>&1; \
+ $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
+ echo "It works!"
+ x_cpp="$cpp"
+ x_minus='';
+elif echo 'Nixed again...maybe "'$cpp' -" will work...'; \
+ $cpp - <testcpp.c >testcpp.out 2>&1; \
+ $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
+ echo "Hooray, it works! I was beginning to wonder."
+ x_cpp="$cpp"
+ x_minus='-';
+elif echo 'Uh-uh. Time to get fancy. Trying a wrapper...'; \
+ $wrapper <testcpp.c >testcpp.out 2>&1; \
+ $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
+ x_cpp="$wrapper"
+ x_minus=''
+ echo "Eureka!"
+else
+ dflt=''
+ rp="No dice. I can't find a C preprocessor. Name one:"
+ . ./myread
+ x_cpp="$ans"
+ x_minus=''
+ $x_cpp <testcpp.c >testcpp.out 2>&1
+ if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
+ echo "OK, that will do." >&4
+ else
+echo "Sorry, I can't get that to work. Go find one and rerun Configure." >&4
+ exit 1
+ fi
+fi
+
+case "$ok" in
+false)
+ cppstdin="$x_cpp"
+ cppminus="$x_minus"
+ cpprun="$x_cpp"
+ cpplast="$x_minus"
+ set X $x_cpp
+ shift
+ case "$1" in
+ "$cpp")
+ echo "Perhaps can we force $cc -E using a wrapper..."
+ if $wrapper <testcpp.c >testcpp.out 2>&1; \
+ $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
+ then
+ echo "Yup, we can."
+ cppstdin="$wrapper"
+ cppminus='';
+ else
+ echo "Nope, we'll have to live without it..."
+ fi
+ ;;
+ esac
+ case "$cpprun" in
+ "$wrapper")
+ cpprun=''
+ cpplast=''
+ ;;
+ esac
+ ;;
+esac
+
+case "$cppstdin" in
+"$wrapper"|'cppstdin') ;;
+*) $rm -f $wrapper;;
+esac
+$rm -f testcpp.c testcpp.out
+
+: Set private lib path
+case "$plibpth" in
+'') if ./mips; then
+ plibpth="$incpath/usr/lib /usr/local/lib /usr/ccs/lib"
+ fi;;
+esac
+case "$libpth" in
+' ') dlist='';;
+'') dlist="$loclibpth $plibpth $glibpth";;
+*) dlist="$libpth";;
+esac
+
+: Now check and see which directories actually exist, avoiding duplicates
+libpth=''
+for xxx in $dlist
+do
+ if $test -d $xxx; then
+ case " $libpth " in
+ *" $xxx "*) ;;
+ *) libpth="$libpth $xxx";;
+ esac
+ fi
+done
+$cat <<'EOM'
+
+Some systems have incompatible or broken versions of libraries. Among
+the directories listed in the question below, please remove any you
+know not to be holding relevant libraries, and add any that are needed.
+Say "none" for none.
+
+EOM
+case "$libpth" in
+'') dflt='none';;
+*)
+ set X $libpth
+ shift
+ dflt=${1+"$@"}
+ ;;
+esac
+rp="Directories to use for library searches?"
+. ./myread
+case "$ans" in
+none) libpth=' ';;
+*) libpth="$ans";;
+esac
+
+: determine optimize, if desired, or use for debug flag also
+case "$optimize" in
+' '|$undef) dflt='none';;
+'')
+ case "$gccversion" in
+ '') dflt='-O';;
+ *) dflt='-O2 -g';;
+ esac
+ ;;
+*) dflt="$optimize";;
+esac
+case "$gccversion" in
+'') $cat <<EOH
+
+Some C compilers have problems with their optimizers. By default, $package
+compiles with the -O flag to use the optimizer. Alternately, you might want
+to use the symbolic debugger, which uses the -g flag (on traditional Unix
+systems). Either flag can be specified here. To use neither flag, specify
+the word "none".
+
+EOH
+ ;;
+*) $cat <<EOH
+
+With the GNU C compiler, it is possible to supply both -O2 and -g flags, to
+be able to reasonably optimize, whilst retaining the ability to use a
+symbolic debugger. Either flag can be specified here. To use neither flag,
+specify the word "none".
+
+EOH
+ ;;
+esac
+rp="What optimizer/debugger flag should be used?"
+. ./myread
+optimize="$ans"
+case "$optimize" in
+'none') optimize=" ";;
+esac
+
+
+dflt=''
+: We will not override a previous value, but we might want to
+: augment a hint file
+case "$hint" in
+default|recommended)
+ case "$gccversion" in
+ 1*) dflt='-fpcc-struct-return' ;;
+ esac
+ case "$gccversion" in
+ 2*) if test -d /etc/conf/kconfig.d &&
+ $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1
+ then
+ dflt="$dflt -posix"
+ fi
+ ;;
+ esac
+ case "$gccversion" in
+ 1*|2*) dflt="$dflt -Wall";;
+ *) dflt="$dflt -W -Wall -Wformat=2 -Wshadow";;
+ esac
+ ;;
+esac
+
+case "$mips_type" in
+*BSD*|'') inclwanted="$locincpth $usrinc";;
+*) inclwanted="$locincpth $inclwanted $usrinc/bsd";;
+esac
+for thisincl in $inclwanted; do
+ if $test -d $thisincl; then
+ if $test x$thisincl != x$usrinc; then
+ case "$dflt" in
+ *$thisincl*);;
+ *) dflt="$dflt -I$thisincl";;
+ esac
+ fi
+ fi
+done
+
+inctest='if $contains $2 $usrinc/$1 >/dev/null 2>&1; then
+ xxx=true;
+elif $contains $2 $usrinc/sys/$1 >/dev/null 2>&1; then
+ xxx=true;
+else
+ xxx=false;
+fi;
+if $xxx; then
+ case "$dflt" in
+ *$2*);;
+ *) dflt="$dflt -D$2";;
+ esac;
+fi'
+
+if ./osf1; then
+ set signal.h __LANGUAGE_C__; eval $inctest
+else
+ set signal.h LANGUAGE_C; eval $inctest
+fi
+
+case "$hint" in
+default|recommended) dflt="$dflt $ccflags" ;;
+*) dflt="$ccflags";;
+esac
+
+case "$dflt" in
+''|' ') dflt=none;;
+esac
+$cat <<EOH
+
+Your C compiler may want other flags. For this question you should include
+-I/whatever and -DWHATEVER flags and any other flags used by the C compiler,
+but you should NOT include libraries or ld flags like -lwhatever.
+
+To use no flags, specify the word "none".
+
+EOH
+set X $dflt
+shift
+dflt=${1+"$@"}
+rp="Any additional cc flags?"
+. ./myread
+case "$ans" in
+none) ccflags='';;
+*) ccflags="$ans";;
+esac
+
+: the following weeds options from ccflags that are of no interest to cpp
+cppflags="$ccflags"
+case "$gccversion" in
+1*) cppflags="$cppflags -D__GNUC__"
+esac
+case "$mips_type" in
+'');;
+*BSD*) cppflags="$cppflags -DSYSTYPE_BSD43";;
+esac
+case "$cppflags" in
+'');;
+*)
+ echo " "
+ echo "Let me guess what the preprocessor flags are..." >&4
+ set X $cppflags
+ shift
+ cppflags=''
+ $cat >cpp.c <<'EOM'
+#define BLURFL foo
+
+BLURFL xx LFRULB
+EOM
+ previous=''
+ for flag in $*
+ do
+ case "$flag" in
+ -*) ftry="$flag";;
+ *) ftry="$previous $flag";;
+ esac
+ if $cppstdin -DLFRULB=bar $ftry $cppminus <cpp.c \
+ >cpp1.out 2>/dev/null && \
+ $cpprun -DLFRULB=bar $ftry $cpplast <cpp.c \
+ >cpp2.out 2>/dev/null && \
+ $contains 'foo.*xx.*bar' cpp1.out >/dev/null 2>&1 && \
+ $contains 'foo.*xx.*bar' cpp2.out >/dev/null 2>&1
+ then
+ cppflags="$cppflags $ftry"
+ previous=''
+ else
+ previous="$flag"
+ fi
+ done
+ set X $cppflags
+ shift
+ cppflags=${1+"$@"}
+ case "$cppflags" in
+ *-*) echo "They appear to be: $cppflags";;
+ esac
+ $rm -f cpp.c cpp?.out
+ ;;
+esac
+
+: flags used in final linking phase
+case "$ldflags" in
+'') if ./venix; then
+ dflt='-i -z'
+ else
+ dflt=''
+ fi
+ case "$ccflags" in
+ *-posix*) dflt="$dflt -posix" ;;
+ esac
+ ;;
+*) dflt="$ldflags";;
+esac
+
+: Try to guess additional flags to pick up local libraries.
+for thislibdir in $libpth; do
+ case " $loclibpth " in
+ *" $thislibdir "*)
+ case "$dflt " in
+ *"-L$thislibdir "*) ;;
+ *) dflt="$dflt -L$thislibdir" ;;
+ esac
+ ;;
+ esac
+done
+
+case "$dflt" in
+'') dflt='none' ;;
+*) set X $dflt; shift; dflt="$@";;
+esac
+
+$cat <<EOH
+
+Your C linker may need flags. For this question you should
+include -L/whatever and any other flags used by the C linker, but you
+should NOT include libraries like -lwhatever.
+
+Make sure you include the appropriate -L/path flags if your C linker
+does not normally search all of the directories you specified above,
+namely
+ $libpth
+To use no flags, specify the word "none".
+
+EOH
+
+rp="Any additional ld flags (NOT including libraries)?"
+. ./myread
+case "$ans" in
+none) ldflags='';;
+*) ldflags="$ans";;
+esac
+rmlist="$rmlist pdp11"
+
+: coherency check
+echo " "
+echo "Checking your choice of C compiler and flags for coherency..." >&4
+set X $cc $optimize $pthread $ccflags $ldflags -o try try.c
+shift
+$cat >try.msg <<EOM
+I've tried to compile and run a simple program with:
+
+ $*
+ ./try
+
+and I got the following output:
+
+EOM
+$cat > try.c <<'EOF'
+int main() { return 0; }
+EOF
+dflt=y
+if sh -c "$cc $optimize $ccflags $ldflags -o try try.c" >>try.msg 2>&1; then
+ if sh -c './try' >>try.msg 2>&1; then
+ dflt=n
+ else
+ echo "The program compiled OK, but exited with status $?." >>try.msg
+ rp="You have a problem. Shall I abort Configure"
+ dflt=y
+ fi
+else
+ echo "I can't compile the test program." >>try.msg
+ rp="You have a BIG problem. Shall I abort Configure"
+ dflt=y
+fi
+case "$dflt" in
+y)
+ $cat try.msg >&4
+ case "$knowitall" in
+ '')
+ echo "(The supplied flags might be incorrect with this C compiler.)"
+ ;;
+ *) dflt=n;;
+ esac
+ echo " "
+ . ./myread
+ case "$ans" in
+ n*|N*) ;;
+ *) echo "Ok. Stopping Configure." >&4
+ exit 1
+ ;;
+ esac
+ ;;
+n) echo "OK, that should do.";;
+esac
+$rm -f try try.* core
+
+: determine default editor
+echo " "
+case "$defeditor" in
+'')
+ case "$vi" in
+ */*) dflt="$vi";;
+ *) dflt=/usr/ucb/vi;;
+ esac
+ ;;
+*) dflt="$defeditor"
+ ;;
+esac
+fn=f/
+rp="What is the default editor on your system?"
+. ./getfile
+defeditor="$ans"
+
+: locate a BSD compatible install program
+echo " "
+echo "Looking for a BSD-compatible install program..." >&4
+creatdir=''
+case "$install" in
+'')
+ tryit=''
+ for dir in $pth; do
+ for file in ginstall installbsd scoinst install; do
+ if $test -f $dir/$file; then
+ tryit="$tryit $dir/$file"
+ fi
+ done
+ done
+ $cat >try.c <<EOC
+int main()
+{
+ printf("OK\n");
+ exit(0);
+}
+EOC
+ if $cc -o try try.c >/dev/null 2>&1; then
+ cp try try.ns
+ strip try >/dev/null 2>&1
+ else
+ echo "(I can't seem to compile a trivial C program -- bypassing.)"
+ echo "try" >try
+ cp try try.ns
+ fi
+ $cat >tryinst <<EOS
+$startsh
+$rm -rf foo d
+\$1 -d foo/bar
+$mkdir d
+\$1 -c -m 764 try.ns d
+\$1 -c -s -m 642 try.ns d/try
+EOS
+ chmod +x tryinst
+ $eunicefix tryinst
+ dflt=''
+ either=''
+ for prog in $tryit; do
+ $echo $n "Checking $prog... $c"
+ ./tryinst $prog >/dev/null 2>&1
+ if $test -d foo/bar; then
+ creatdir="$prog -d"
+ fi
+ (ls -l d/try >try.ls; ls -l d/try.ns >tryno.ls) 2>/dev/null
+ try_wc=`($wc -c try | $awk '{ print $1}') 2>/dev/null`
+ tryns_wc=`($wc -c try.ns | $awk '{ print $1}') 2>/dev/null`
+ d_try_wc=`($wc -c d/try | $awk '{ print $1}') 2>/dev/null`
+ d_tryns_wc=`($wc -c d/try.ns | $awk '{ print $1}') 2>/dev/null`
+ if ($test "X$try_wc" = "X$d_try_wc" && \
+ $test "X$tryns_wc" = "X$d_tryns_wc" && \
+ $contains 'rwxrw-r--' tryno.ls && \
+ $contains 'rw-r---w-' try.ls) >/dev/null 2>&1
+ then
+ dflt="$prog"
+ echo "ok, that will do."
+ break
+ fi
+ echo "not good$either."
+ either=' either'
+ $rm -f try*.ls
+ done
+ $rm -rf foo d tryinst try try*.ls try.*
+ case "$dflt" in
+ '')
+ echo "Hopefully, $package comes with its own install script!"
+ dflt='./install'
+ ;;
+ esac
+ ;;
+*) dflt="$install";;
+esac
+$cat <<EOM
+
+I will be requiring a BSD-compatible install program (one that allows
+options like -s to strip executables or -m to specify a file mode) to
+install $package.
+
+If the question below contains a fully qualified default path, then it
+is probably ok. If it is an unqualified name such as 'install', then it
+means I was unable to find out a good install program I could use. If
+you know of one, please tell me about it. If the default is './install',
+then I shall be using the install script supplied with $package.
+
+EOM
+fn='/fe~(install,./install)'
+rp='Which install program shall I use?'
+. ./getfile
+install="$ans"
+
+: how can we create nested directories?
+echo " "
+echo "Ok, let's see how we can create nested directories..." >&4
+case "$installdir" in
+'')
+ $mkdir -p foo/bar >/dev/null 2>&1
+ if $test -d foo/bar; then
+ echo "Great, we can build them using 'mkdir -p'."
+ creatdir='mkdir -p'
+ else
+ case "$creatdir" in
+ '')
+ if eval "$install -d foo/bar"; $test -d foo/bar; then
+ creatdir="install -d"
+ echo "It looks like '$creatdir' will do it for us."
+ fi
+ ;;
+ *)
+ eval "$creatdir foo/bar" >/dev/null 2>&1
+ if $test -d foo/bar; then
+ echo "Ah! We can use '$creatdir' to do just that."
+ else
+ creatdir=''
+ fi
+ ;;
+ esac
+ fi
+ $rm -rf foo
+ case "$creatdir" in
+ '')
+ echo "Heck! Another ancient system lacking the comfort of modern ones!"
+ echo "You can thank $package for bringing you its own install script!"
+ installdir='./install -d'
+ ;;
+ *) installdir="$creatdir";;
+ esac
+ ;;
+*) echo "As you already told me, '$installdir' should work.";;
+esac
+
+: determine the name of a reasonable mailer
+case "$mailer" in
+'')
+ if $test -f "$sendmail"; then
+ dflt="$sendmail"
+ elif $test -f "$smail"; then
+ dflt="$smail"
+ elif $test -f "$rmail"; then
+ dflt="$rmail"
+ elif $test -f /bin/mail; then
+ dflt=/bin/mail
+ else
+ dflt=$mail
+ fi
+ ;;
+*) dflt="$mailer";;
+esac
+$cat <<EOM
+
+I need the full pathname of the program used to deliver mail on your system.
+A typical answer would be /usr/lib/sendmail or /bin/rmail, but you may choose
+any other program, as long as it can be fed from standard input and will
+honour any user-supplied headers.
+
+EOM
+fn=f
+rp='Mail transport agent to be used?'
+. ./getfile
+mailer="$ans"
+
+: find out how to find out full name
+case "$d_berknames" in
+"$define")
+ dflt=y;;
+"$undef")
+ dflt=n;;
+*)
+ if ./bsd; then
+ dflt=y
+ elif ./xenix; then
+ dflt=y
+ else
+ dflt=n
+ fi
+ ;;
+esac
+$cat <<'EOM'
+
+Does your /etc/passwd file keep full names in Berkeley/V7 format (name first
+thing after ':' in GCOS field)? In that case, a typical entry in the password
+file looks like this:
+
+ guest:**paswword**:10:100:Mister Guest User:/usr/users:/bin/sh
+ ^^^^^^^^^^^^^^^^^
+EOM
+rp="Berkeley/V7 format for full name in /etc/passwd?"
+. ./myread
+case "$ans" in
+y*) d_passnames="$define"
+ d_berknames="$define"
+ d_usgnames="$undef"
+ nametype=bsd
+ ;;
+*)
+ case "$d_usgnames" in
+ "$define") dflt=y;;
+ "$undef") dflt=n;;
+ *)
+ if ./usg; then
+ dflt=y
+ else
+ dflt=n
+ fi
+ ;;
+ esac
+$cat <<'EOM'
+
+Does your passwd file keep full names in USG format (name sandwiched between a
+'-' and a '(')? In that case, a typical entry in the password file looks like
+this:
+
+ guest:**paswword**:10:100:000-Mister Guest User(000):/usr/users:/bin/sh
+ ^^^^^^^^^^^^^^^^^
+EOM
+ rp="USG format for full name in /etc/passwd?"
+ . ./myread
+ case "$ans" in
+ n*) echo "Full name will be taken from ~/.fullname"
+ d_passnames="$undef"
+ d_berknames="$undef"
+ d_usgnames="$undef"
+ nametype=other
+ ;;
+ *)
+ d_passnames="$define"
+ d_berknames="$undef"
+ d_usgnames="$define"
+ nametype=usg
+ ;;
+ esac;;
+esac
+
+: get organization name
+longshots='/local/src /usr/src/new /usr/src/local /usr/local/src'
+case "$orgname" in
+'') if xxx=`./loc news/src/defs.h x $longshots`; then
+ dflt=`$sed -n 's/^.*MYORG[ ]*"\(.*\)".*$/\1/p' $xxx`
+ else
+ dflt=''
+ fi
+ ;;
+*) dflt="$orgname";;
+esac
+$cat << 'EOH'
+
+Please type the name of your organization as you want it to appear on the
+Organization line of outgoing articles. (It's nice if this also specifies
+your location. Your city name is probably sufficient if well known.)
+For example:
+
+ University of Southern North Dakota, Hoople
+
+You may also put the name of a file, as long as it begins with a slash.
+For example:
+
+ /etc/organization
+
+EOH
+orgname=""
+while test "X$orgname" = "X"; do
+ rp='Organization:'
+ . ./myread
+ orgname="$ans"
+done
+
+: locate the preferred pager for this system
+fn=f/
+case "$pager" in
+'')
+ dflt=''
+ case "$pg" in
+ /*) dflt=$pg;;
+ [a-zA-Z]:/*) dflt=$pg;;
+ esac
+ case "$more" in
+ /*) dflt=$more;;
+ [a-zA-Z]:/*) dflt=$more;;
+ esac
+ case "$less" in
+ /*) dflt=$less;;
+ [a-zA-Z]:/*) dflt=$less;;
+ esac
+ case "$dflt" in
+ '') dflt=/usr/ucb/more;;
+ esac
+ ;;
+*) dflt="$pager"
+ fn="f/($pager)"
+ ;;
+esac
+echo " "
+rp='What pager is used on your system?'
+. ./getfile
+pager="$ans"
+
+: get the patchlevel / revision
+echo " "
+echo "Getting the current patchlevel / revision..." >&4
+if $test -r $rsrc/patchlevel.h;then
+ patchlevel=`awk \
+ '/^#[ ]*define[ ][ ]*PATCHLEVEL/ {print $3}' \
+ < $rsrc/patchlevel.h`
+else
+ patchlevel=0
+fi
+if $test -r $rsrc/revision.h;then
+ revision=`awk \
+ '/^#[ ]*define[ ][ ]*REVISION/ {print $3}' \
+ < $rsrc/revision.h`
+ case "$revision" in
+ '"$Revision:')
+ revision=`awk \
+ '/^#[ ]*define[ ][ ]*REVISION/ {print $4}' \
+ < $rsrc/revision.h`
+ ;;
+ esac
+else
+ revision=0
+fi
+case "$revision" in
+0) echo "(You have $package $baserev PL$patchlevel.)" ;;
+*)
+ case "$patchlevel" in
+ 0) echo "(You have $package $baserev-$revision)";;
+ *) echo "(You have $package $baserev-$revision PL$patchlevel)";;
+ esac
+ ;;
+esac
+
+: determine perl absolute location
+case "$perlpath" in
+'')
+ if test -f /usr/bin/perl; then
+ dflt=/usr/bin/perl
+ else
+ case "$perl" in
+ */*) dflt="$perl";;
+ *) dflt=/usr/bin/perl;;
+ esac
+ fi
+ ;;
+*) dflt="$perlpath"
+ ;;
+esac
+echo " "
+fn=f~/
+rp="Where is perl located on your system?"
+. ./getfile
+perlpath="$ans"
+
+: figure out how to guarantee perl startup
+case "$sharpbang" in
+*!)
+ $cat >xtry <<EOP
+#!$perlpath
+system("exit 0");
+EOP
+ chmod a+x xtry
+ if ./xtry >/dev/null 2>&1; then
+ $cat <<EOH
+
+I can use the #! construct to start perl on your system. This will make
+startup of perl scripts faster, but may cause problems if you want to share
+those scripts and perl is not in a standard place (/usr/bin/perl) on all your
+platforms. The alternative is to force a shell by starting the script with a
+single ':' character.
+
+EOH
+ pdflt=y
+ else
+ $cat <<EOH
+
+I could use the #! construct to start perl on your system, but using
+ #!$perlpath
+would be too long for your kernel to grok. Indeed, most systems do
+limit the size of the leading #! string to 32 characters.
+
+EOH
+ pdflt=n
+ fi
+ $rm -f xtry
+ case "$startperl" in
+ *!*) dflt=y;;
+ '') case "$d_portable" in
+ "$define") dflt=n;;
+ *) dflt=$pdflt;;
+ esac;;
+ *) dflt=n;;
+ esac
+ rp='Shall I use #! to start up perl?'
+ . ./myread
+ case "$ans" in
+ y*|Y*) startperl="#!$perlpath";;
+ *) startperl=": # use perl";;
+ esac;;
+*) startperl=": # use perl";;
+esac
+
+: end of configuration questions
+echo " "
+echo "End of configuration questions."
+
+: back to where it started
+if test -d ../UU; then
+ cd ..
+fi
+
+: configuration may be unconditionally patched via a 'config.arch' file
+if $test -f config.arch; then
+ echo "I see a config.arch file, loading it." >&4
+ . ./config.arch
+fi
+
+: configuration may be patched via a 'config.over' file
+if $test -f config.over; then
+ echo " "
+ dflt=y
+ rp='I see a config.over file. Do you wish to load it?'
+ . UU/myread
+ case "$ans" in
+ n*) echo "OK, I'll ignore it.";;
+ *) . ./config.over
+ echo "Configuration override changes have been loaded."
+ ;;
+ esac
+fi
+
+: in case they want portability, strip down executable paths
+case "$d_portable" in
+"$define")
+ echo " "
+ echo "Stripping down executable paths..." >&4
+ xsed=$sed
+ for file in $loclist $trylist; do
+ eval sfile="\$$file"
+ sfile=`echo $sfile | $xsed -e 's,.*/\(.*\),\1,'`
+ eval $file="$sfile"
+ done
+ ;;
+esac
+
+: create config.sh file
+echo " "
+echo "Creating config.sh..." >&4
+$spitshell <<EOT >config.sh
+$startsh
+#
+# This file was produced by running the Configure script. It holds all the
+# definitions figured out by Configure. Should you modify one of these values,
+# do not forget to propagate your changes by running "Configure -der". You may
+# instead choose to run each of the .SH files by yourself, or "Configure -S".
+#
+
+# Package name : $package
+# Source directory : $src
+# Configuration time: $cf_time
+# Configured by : $cf_by
+# Target system : $myuname
+
+EOT
+$test -f UU/cmdline.opt && $cat UU/cmdline.opt >> config.sh
+$spitshell <<EOT >>config.sh
+
+Author='$Author'
+Date='$Date'
+Header='$Header'
+Id='$Id'
+Locker='$Locker'
+Log='$Log'
+RCSfile='$RCSfile'
+Revision='$Revision'
+Source='$Source'
+State='$State'
+_a='$_a'
+_exe='$_exe'
+_o='$_o'
+afs='$afs'
+afsroot='$afsroot'
+ar='$ar'
+archobjs='$archobjs'
+awk='$awk'
+baserev='$baserev'
+bash='$bash'
+bison='$bison'
+byacc='$byacc'
+c='$c'
+cat='$cat'
+ccflags='$ccflags'
+ccname='$ccname'
+ccversion='$ccversion'
+cf_by='$cf_by'
+cf_email='$cf_email'
+cf_time='$cf_time'
+chgrp='$chgrp'
+chmod='$chmod'
+chown='$chown'
+comm='$comm'
+compress='$compress'
+contains='$contains'
+cp='$cp'
+cpio='$cpio'
+cpp='$cpp'
+cpp_trad='$cpp_trad'
+cppflags='$cppflags'
+cpplast='$cpplast'
+cppminus='$cppminus'
+cpprun='$cpprun'
+cppstdin='$cppstdin'
+csh='$csh'
+d_berknames='$d_berknames'
+d_bsd='$d_bsd'
+d_dos='$d_dos'
+d_eunice='$d_eunice'
+d_linux='$d_linux'
+d_os2='$d_os2'
+d_passnames='$d_passnames'
+d_portable='$d_portable'
+d_usgnames='$d_usgnames'
+d_windows='$d_windows'
+d_xenix='$d_xenix'
+date='$date'
+defeditor='$defeditor'
+echo='$echo'
+egrep='$egrep'
+emacs='$emacs'
+eunicefix='$eunicefix'
+expr='$expr'
+find='$find'
+firstmakefile='$firstmakefile'
+flex='$flex'
+from='$from'
+gcc='$gcc'
+gccosandvers='$gccosandvers'
+gccversion='$gccversion'
+glibpth='$glibpth'
+gmake='$gmake'
+gmsgfmt='$gmsgfmt'
+grep='$grep'
+groupcat='$groupcat'
+gzip='$gzip'
+hint='$hint'
+hostcat='$hostcat'
+incpath='$incpath'
+inews='$inews'
+install='$install'
+installdir='$installdir'
+installmansrc='$installmansrc'
+installprivlib='$installprivlib'
+installscript='$installscript'
+issymlink='$issymlink'
+ksh='$ksh'
+ldflags='$ldflags'
+less='$less'
+libpth='$libpth'
+line='$line'
+lint='$lint'
+lkflags='$lkflags'
+ln='$ln'
+lns='$lns'
+locincpth='$locincpth'
+loclibpth='$loclibpth'
+lp='$lp'
+lpr='$lpr'
+ls='$ls'
+mail='$mail'
+mailer='$mailer'
+mailx='$mailx'
+make='$make'
+make_set_make='$make_set_make'
+manext='$manext'
+mansrc='$mansrc'
+mansrcexp='$mansrcexp'
+mips_type='$mips_type'
+mkdir='$mkdir'
+more='$more'
+msgfmt='$msgfmt'
+msgmerge='$msgmerge'
+mv='$mv'
+mydomain='$mydomain'
+myhostname='$myhostname'
+myuname='$myuname'
+n='$n'
+nametype='$nametype'
+nawk='$nawk'
+nm='$nm'
+nroff='$nroff'
+optimize='$optimize'
+orgname='$orgname'
+osname='$osname'
+osvers='$osvers'
+package='$package'
+pager='$pager'
+passcat='$passcat'
+patchlevel='$patchlevel'
+perl='$perl'
+perlpath='$perlpath'
+pg='$pg'
+phostname='$phostname'
+pkgsrc='$pkgsrc'
+plibpth='$plibpth'
+pmake='$pmake'
+pr='$pr'
+prefix='$prefix'
+prefixexp='$prefixexp'
+privlib='$privlib'
+privlibexp='$privlibexp'
+pthread='$pthread'
+revision='$revision'
+rm='$rm'
+rmail='$rmail'
+run='$run'
+scriptdir='$scriptdir'
+scriptdirexp='$scriptdirexp'
+sed='$sed'
+sendmail='$sendmail'
+sh='$sh'
+shar='$shar'
+sharpbang='$sharpbang'
+shsharp='$shsharp'
+sleep='$sleep'
+smail='$smail'
+sort='$sort'
+spackage='$spackage'
+spitshell='$spitshell'
+src='$src'
+startperl='$startperl'
+startsh='$startsh'
+submit='$submit'
+sysman='$sysman'
+tail='$tail'
+tar='$tar'
+targetarch='$targetarch'
+tbl='$tbl'
+tee='$tee'
+test='$test'
+to='$to'
+touch='$touch'
+tr='$tr'
+trnl='$trnl'
+troff='$troff'
+uname='$uname'
+uniq='$uniq'
+usecrosscompile='$usecrosscompile'
+usrinc='$usrinc'
+uuname='$uuname'
+vi='$vi'
+wc='$wc'
+xgettext='$xgettext'
+xlibpth='$xlibpth'
+zcat='$zcat'
+zip='$zip'
+EOT
+
+: add special variables
+$test -f $src/patchlevel.h && \
+awk '/^#define/ {printf "%s=%s\n",$2,$3}' $src/patchlevel.h >>config.sh
+$test -f $src/revision.h && \
+sed -ne 's/^#define \([A-Za-z0-9_]*\) ".*: \([0-9]*\).*"/\1=\2/p' \
+ < $src/revision.h >>config.sh
+echo "CONFIG=true" >>config.sh
+
+: propagate old symbols
+if $test -f UU/config.sh; then
+ <UU/config.sh $sort | $uniq >UU/oldconfig.sh
+ $sed -n 's/^\([a-zA-Z_0-9]*\)=.*/\1/p' \
+ config.sh config.sh UU/oldconfig.sh |\
+ $sort | $uniq -u >UU/oldsyms
+ set X `cat UU/oldsyms`
+ shift
+ case $# in
+ 0) ;;
+ *)
+ cat <<EOM
+Hmm...You had some extra variables I don't know about...I'll try to keep 'em...
+EOM
+ echo ": Variables propagated from previous config.sh file." >>config.sh
+ for sym in `cat UU/oldsyms`; do
+ echo " Propagating $hint variable "'$'"$sym..."
+ eval 'tmp="$'"${sym}"'"'
+ echo "$tmp" | \
+ sed -e "s/'/'\"'\"'/g" -e "s/^/$sym='/" -e "s/$/'/" >>config.sh
+ done
+ ;;
+ esac
+fi
+
+: Finish up by extracting the .SH files
+case "$alldone" in
+exit)
+ echo "Stopping at your request, leaving temporary files around."
+ exit 0
+ ;;
+cont)
+ ;;
+'')
+ dflt=''
+ nostick=true
+ $cat <<EOM
+
+If you'd like to make any changes to the config.sh file before I begin
+to configure things, do it as a shell escape now (e.g. !vi config.sh).
+
+EOM
+ rp="Press return or use a shell escape to edit config.sh:"
+ . UU/myread
+ nostick=''
+ case "$ans" in
+ '') ;;
+ *) : in case they cannot read
+ sh 1>&4 -c "$ans";;
+ esac
+ ;;
+esac
+
+: if this fails, just run all the .SH files by hand
+. ./config.sh
+
+echo " "
+exec 1>&4
+pwd=`pwd`
+. ./UU/extract
+cd "$pwd"
+
+if $contains '^depend:' [Mm]akefile >/dev/null 2>&1; then
+ dflt=y
+ case "$silent" in
+ true) ;;
+ *)
+ $cat <<EOM
+
+Now you need to generate make dependencies by running "$make depend".
+You might prefer to run it in background: "$make depend > makedepend.out &"
+It can take a while, so you might not want to run it right now.
+
+EOM
+ ;;
+ esac
+ rp="Run $make depend now?"
+ . UU/myread
+ case "$ans" in
+ y*)
+ $make depend && echo "Now you must run '$make'."
+ ;;
+ *)
+ echo "You must run '$make depend' then '$make'."
+ ;;
+ esac
+elif test -f [Mm]akefile; then
+ echo " "
+ echo "Now you must run a $make."
+else
+ echo "Configure done."
+fi
+
+if $test -f Policy.sh; then
+ $cat <<EOM
+
+If you compile $package on a different machine or from a different object
+directory, copy the Policy.sh file from this object directory to the
+new one before you run Configure -- this will help you with most of
+the policy defaults.
+
+EOM
+fi
+if $test -f UU/config.msg; then
+ echo "Hmm. I also noted the following information while running:"
+ echo " "
+ $cat UU/config.msg >&4
+fi
+$rm -f kit*isdone ark*isdone
+$rm -rf UU
+
+: End of Configure
+
diff --git a/Credits b/Credits
new file mode 100644
index 0000000..8368c96
--- /dev/null
+++ b/Credits
@@ -0,0 +1,112 @@
+INTRO
+
+This version of dist has been written by Raphael Manfredi based on
+previous work from Larry Wall and Harlan Stenn.
+
+HISTORY
+
+I started working on this in September 1990 while I was still a student
+at the Ecole des Mines de Saint-Etienne, France. From then on, I worked
+during two years at ISE (building the Eiffel 3.0 compiler -- the run-time
+part and code generation). Since I chose to use metaconfig for the run-time
+library, which is written in plain C, I had the chance to continue improving
+the whole dist package.
+
+By the end of 1991, I contacted Harlan Stenn <harlan@mumps.pfcs.com> who had
+been working separately on his own dist version. I started the painful merge.
+At the same time, I started releasing alpha version of dist 3.0.
+
+In 1992, I started a parallel project: mailagent. The dist 2.0 release upon
+which this work is based included a simple perl script called mailagent, whose
+sole job was to filter out @SH commands to automatically mail patches to some
+people. I liked the idea of having a perl mail filter and so I extended
+mailagent up to the point where it became really big and only marginally
+dist-related. I released it on the net (comp.sources.misc) on July 1992, after
+7 months of hard work.
+
+In March 1993, I left ISE and returned to France to join ACRI. The dist 3.0
+package was "almost" finished by that time, but the documentation was no
+longer accurate and needed a lot of work. My new job does not give me enough
+free time, so things have been longer than I expected.
+
+In July 1993, under the pressure of many of my alpha testers, I decided to
+go into the final process, sacrifying nights and week ends to finish up what
+turns out to have been a 3 years process...
+
+CREDITS
+
+My first thanks will go to Larry Wall <lwall@netlabs.com> who wrote perl
+and dist 2.0 in the first place. I would never have dived into dist 2.0
+if it had not been written in perl.
+
+During my work, I had the chance to benefit some useful comments and
+contributions from Craig Kolb <craig@weedeater.math.yale.edu> who
+has been the very first user of metaconfig (with a rather pre-historic
+version). He used it on its rayshade 4.0 release (a ray tracing program).
+
+Then of course, many thanks are due to my co-worker, Harlan Stenn
+<harlan@mumps.pfcs.com>. Although I did the integration of his work all by
+myself, I have found many good ideas in his early work. For instance, he wrote
+the first implementation of the metalint program, something I could not live
+without today! His remarks, comments and encouragements have always been
+appreciated, even though we did not always agree on the same things at the
+same time...
+
+Then I would like to thank the many contributors to the metaconfig units.
+I hope I'm not forgetting anybody! Here they come, in alphabetical order:
+(sorted on the first name)
+
+ Andy Dougherty <doughera@lafcol.lafayette.edu>
+ Craig Kolb <craig@weedeater.math.yale.edu>
+ Graham Stoney <greyham@research.canon.oz.au>
+ Harlan Stenn <harlan@mumps.pfcs.com>
+ Jan Djarv <Jan.Djarv@sa.erisoft.se>
+ Larry Wall <lwall@netlabs.com>
+ Ralf E. Stranzenbach <ralf@reswi.en.open.de>
+ Scott Grosch <garath@engin.umich.edu>
+ Syd Weinstein <syd@dsi.com>
+ Thomas Neumann <tom@smart.bo.open.de>
+ Wayne Davison <davison@borland.com>
+
+If I forgot your name, please let me know, and accept my apologies (not
+necessarily in that order ;-).
+
+Finally, thank you Shigeya Suzuki <shigeya@foretune.co.jp> for hosting the
+dist-users mailing list. Send mail to majordomo@foretune.co.jp to subscribe.
+
+ Raphael Manfredi <Raphael.Manfredi@pobox.com>
+ Lyon, France, August 1993
+
+[This section added by subsequent patches]
+
+PATCHES
+
+I'm grateful to the following people for sending me patches and/or reporting
+bugs and giving me some suggestions (sorted on the first name):
+
+ Andy Dougherty <andy@crystal.phys.lafayette.edu>
+ Graham Stoney <greyham@research.canon.oz.au>
+ Ilya Zakharevich <ilya@math.ohio-state.edu>
+ Jarkko Hietaniemi <jhi@snakemail.hut.fi>
+ Joseph H Buehler <jhpb@sarto.gaithersburg.md.us>
+ Keith Walker <kew@timesink.spk.wa.us>
+ Scott Presnell <srp@cgl.ucsf.edu>
+ Wayne Davison <davison@borland.com>
+
+Due to a mistake of mine, changes from Wayne Davison were flagged 'WAD',
+but his middle initial being an 'E', new ones are now flagged as 'WED'.
+Sorry Wayne, I did not know. We don't use middle initials here in Europe.
+
+Special thanks to the perl5 Patch Pumpkin Holders (in chronological order):
+
+ Andy Dougherty <andy@crystal.phys.lafayette.edu>
+ Chip Salzenberg <chip@atlantic.net>
+
+for their wonderful creativity. Perl5 is by far the largest metaconfig
+customer with the widest audience, so Configure got run on a variety
+of new platforms requiring specific fixes... which they provided,
+thereby greatly enhancing the metaconfig "portability database".
+
+ Raphael Manfredi <Raphael_Manfredi@grenoble.hp.com>
+ Grenoble, France, February 1997
+
diff --git a/Jmakefile b/Jmakefile
new file mode 100644
index 0000000..40e77dd
--- /dev/null
+++ b/Jmakefile
@@ -0,0 +1,39 @@
+/*
+ * Main Jmakefile for dist 3.0
+ */
+
+;# $Id$
+;#
+;# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+;#
+;# You may redistribute only under the terms of the Artistic Licence,
+;# as specified in the README file that comes with the distribution.
+;# You may reuse parts of this distribution only within the terms of
+;# that same Artistic Licence; a copy of which may be found at the root
+;# of the source tree for dist 4.0.
+;#
+;# $Log: Jmakefile,v $
+;# Revision 3.0.1.2 1995/07/25 13:29:41 ram
+;# patch56: re-ordered macros, moving the install at the end
+;#
+;# Revision 3.0.1.1 1994/01/24 13:42:41 ram
+;# patch16: added dependency generation stage
+;#
+;# Revision 3.0 1993/08/18 12:03:53 ram
+;# Baseline for dist 3.0 netwide release.
+;#
+
+all:: /* So that default target is not clobber! */
+
+SetSubdirs(bin mcon jmake pat kit lib)
+DependSubdirs()
+AddedByConfigure(install)
+
+InstallManPage(dist,$(MANSRC))
+
+all:: revision.h
+
+.FORCE:
+
+revision.h: .FORCE
+ $(TOP)/bin/svn-revision $(TOP) $@
diff --git a/Known_bugs b/Known_bugs
new file mode 100644
index 0000000..b5c6180
--- /dev/null
+++ b/Known_bugs
@@ -0,0 +1,14 @@
+Here are some known bugs that I plan to fix soon.
+
++ Patname ought to ask for a log message for the symbolic number.
+
++ A unit name is always wanted by Configure. Hence in a unit d_waitpid, if
+you write:
+
+ @if WAITPID || d_waitpid
+ .....
+ @end
+
+then the <....> part of the code will always be loaded even if no shell
+script references d_waitpid or C code references WAITPID.
+
diff --git a/MANIFEST b/MANIFEST
new file mode 100644
index 0000000..f15caea
--- /dev/null
+++ b/MANIFEST
@@ -0,0 +1,754 @@
+Artistic The Artistic Licence
+ChangeLog Where changes are recorded.
+Configure Portability tool
+Credits Traditional "thank you" list
+Jmakefile Description of the main Makefile
+Known_bugs A list of known bugs
+MANIFEST This list of files
+Makefile.SH A makefile to run subsidiary makefiles
+README Basic instructions
+Wishlist Features I would like to add
+bin/ Some binary tools
+bin/Jmakefile Generic makefile description for bin
+bin/Makefile.SH Jmake-generated configured makefile
+bin/manicheck.SH Check manifest accuracy
+bin/manicheck.man Manual page for manicheck
+bin/manilist.SH Produces reports based on manifest
+bin/manilist.man Manual page for manilist
+bin/packinit.SH Creates a .package file describing your package
+bin/packinit.man Manual page for packinit
+bin/perload Build dynamically loaded perl scripts
+bin/svn-revision Updates the top "revision.h" file if needed
+dist.man Introduction to dist
+install.SH Installation script with a BSD-like syntax
+jmake/ Where makefile generator is stored
+jmake/Jmakefile High level makefile description for jmake
+jmake/Makefile.SH Generated makefile for jmake
+jmake/NOTES Quick description of the internal syntax
+jmake/README Welcome to jmake
+jmake/bindex.SH Script to build an index of rules
+jmake/files/ Where rules for jmake are held
+jmake/files/Jmake.rules Generic rules for jmake
+jmake/files/Jmake.tmpl Template used by jmake to produce Makefile.SH
+jmake/fixcpp.SH Wrapper around cpp to fix buggy backslash hanling
+jmake/jmake.SH The makefile generator
+jmake/jmake.man Manual page for jmake
+jmake/jmkmf.SH Wrapper for jmake
+jmake/jmkmf.man Manual page for jmkmf
+kit/ Where distribution tools are stored
+kit/Jmakefile Jmake's description of kit builder's makefile
+kit/Makefile.SH Builds kit builder
+kit/README Instructions on makedist
+kit/kitpost.SH Post shell archive kits
+kit/kitpost.man Manual page for kitpost
+kit/kitsend.SH Mail shell archive kits
+kit/kitsend.man Manual page for kitsend
+kit/makeSH Does most of turning a script into an SH file
+kit/makeSH.man Manual page for same
+kit/makedist.SH Makes a set of kits in the current directory
+kit/makedist.man Manual page for same
+kit/manifake.SH Makes a MANIFEST.new file out of a MANIFEST
+kit/manifake.man Manual page for same
+lib/ Some library support files
+lib/C/ Some useful C routines
+lib/C/Jmakefile Generic makefile for C lib routines
+lib/C/Makefile.SH Produces Makefile for C lib routines
+lib/C/fake/ Fake implementations of real routines
+lib/C/fake/Jmakefile Generic makefile for faked C routines
+lib/C/fake/Makefile.SH Jmake-generated configured makefile
+lib/C/fake/dup2.C A dup2() replacement
+lib/C/fake/getopt.C A getopt() replacement
+lib/C/fake/rename.C A rename() replacement for files
+lib/C/fake/scandir.C A scandir() replacement
+lib/C/fake/setsid.C A setsid() pale imitation
+lib/Jmakefile Generic makefile description for lib
+lib/Makefile.SH Jmake-generated configured makefile
+lib/errnolist.a Awk script to build sys_errnolist[]
+lib/errnolist.mk Rule files to add for errnolist.c
+lib/errnolist.sh Script to build errnolist.c
+lib/makedepend.sh Script to make dependecies, Larry Wall's way
+lib/makedir.sh Emulates 'mkdir -p'
+mcon/ Where metaconfig tools are stored
+mcon/INTRO Quick introduction for newcommers
+mcon/Jmakefile The file used by jmake to produce the Makefile
+mcon/Makefile.SH Builds metaconfig
+mcon/NOTES Documents the changes in metaconfig
+mcon/README Instructions on using metaconfig
+mcon/U/ Holds Units for metaconfig
+mcon/U/AAAAA.U Does magic before Head.U
+mcon/U/Alpha_mieee.U Can -mieee be passed to cc?
+mcon/U/Assert.U Generates the "static_assert.h" file for tests
+mcon/U/Begin.U "Beginning of configuration questions"
+mcon/U/Checkcc.U A unit for checking the C compiler for sanity
+mcon/U/Chk_MANI.U MANIFEST checks
+mcon/U/Chk_whoami.U A unit which checks for conflicts
+mcon/U/Compile.U Unit for performing compile and link tests
+mcon/U/Config_h.U Makes config.h.SH--bizarrity here
+mcon/U/Config_sh.U Makes config.sh
+mcon/U/Configdir.U Creates .config directory to store persistent info
+mcon/U/Cppsym.U Makes program to test for cpp symbols
+mcon/U/Cross.U Unit for cross-compiling support
+mcon/U/Csym.U Determines whether C symbol is defined
+mcon/U/End.U "End of configuration questions"
+mcon/U/Extract.U .SH file extraction
+mcon/U/Extractall.U Support for the -S Configure option
+mcon/U/Filexp.U Makes program to do tilde expansion
+mcon/U/Findhdr.U Locate header files
+mcon/U/Finish.U A unit which always goes last
+mcon/U/GCC_pipe.U Is the -pipe option supported by gcc?
+mcon/U/Getfile.U Get file/directory name
+mcon/U/Guess.U Hazard guesses as to overall philosophy
+mcon/U/Head.U First unit, does "#!/bin/sh" et al
+mcon/U/Inhdr.U Defines a look-for-header function
+mcon/U/Init.U Magically gathers ?Init: lines from other units
+mcon/U/Inlibc.U Defines an is-in-libc? function
+mcon/U/Instruct.U Prints instructions
+mcon/U/Largefile.U Which cc flags are required for large file support?
+mcon/U/Loc.U Look for common programs
+mcon/U/Loc_sed.U Full path of sed interpreter, even when portable
+mcon/U/Magic_h.U Makes confmagic.h--bizarrity here
+mcon/U/MailAuthor.U Offers user to register himself
+mcon/U/MailList.U Offers user to subscribe to users list
+mcon/U/Mips.U Are we on a MIPS system?
+mcon/U/Mkdirp.U Unit producing shell script to "mkdir -p"
+mcon/U/Mksymlinks.U Unit to generate symlink to source tree
+mcon/U/Myinit.U For copying to private U directories
+mcon/U/Myread.U Makes program to do read with shell escape
+mcon/U/Nothing.U For empty dependencies
+mcon/U/Null.U Zeroes out variables. Probably unnecessary
+mcon/U/Obsol_h.U Warnings about obsolete C symbols
+mcon/U/Obsol_sh.U Warnings about obsolete shell symbols
+mcon/U/Oldconfig.U Looks for old config.sh file
+mcon/U/Oldsym.U Try to propagate symbols
+mcon/U/Options.U Configure option parsing
+mcon/U/Prefixit.U Fixes path prefix in variables in case it changed
+mcon/U/Prefixup.U Fixes vars with path prefix using ~name expansion
+mcon/U/Rcs.U Some stupid redefinitions to keep RCS happy
+mcon/U/Sendfile64.U Is sendfile() working with the largefile flags?
+mcon/U/Setvar.U Set a variable with some sanity checks
+mcon/U/Signal.U Utilities for sig_name.U
+mcon/U/Tr.U Builds a tr script to handle lower and upper classes
+mcon/U/Trylink.U Compiles and links a test program
+mcon/U/Typedef.U Defines a typedef lookup function
+mcon/U/Unix.U Common UNIX settings and assumptions
+mcon/U/Warn.U Summarizes warnings emitted during Configure run
+mcon/U/Warn_v7EXT.U V7 has some ideosyncracies
+mcon/U/Warn_v7ND.U V7 has no O_NDELAY read
+mcon/U/Whoa.U Warning function
+mcon/U/abortsig.U Which signal is sent by abort()?
+mcon/U/active.U Find the news active file
+mcon/U/afs.U Look whether AFS is running or not
+mcon/U/alignbytes.U Check for alignment constraints
+mcon/U/archlib.U Where architecture-dependent files are installed
+mcon/U/archname.U Computes the architecture name (cpu-osname)
+mcon/U/baserev.U Base revision of package
+mcon/U/basicshell.U Which basic shell is available
+mcon/U/bin.U Find where to install public executables
+mcon/U/bitpbyte.U Computes the number of bits in a byte
+mcon/U/byteorder.U Computes the byte order (big-endian?)
+mcon/U/cc.U Which C compiler should be used?
+mcon/U/ccflags.U Any additional C flags?
+mcon/U/cf_email.U Computes user's e-mail address
+mcon/U/cf_name.U Computes user's full name
+mcon/U/cf_who.U Who configured the sytem, where and when
+mcon/U/charorder.U Character order within a byte
+mcon/U/charsize.U What is the size of "char"?
+mcon/U/contains.U Makes status-returning grep
+mcon/U/cpp_stuff.U Some cpp stuff
+mcon/U/cpp_trad.U Checks how to get traditional cpp behaviour
+mcon/U/cppfilecom.U Running cpp while preserving C comments
+mcon/U/cppstdin.U Check how to invoke the C pre-processor
+mcon/U/d_NOFILE.U Maximum # of file descriptors
+mcon/U/d_NeWS.U Old NeWS stuff
+mcon/U/d_PORTAR.U Do we know about portable archives?
+mcon/U/d_SHM_MAC.U SHMLBA macro stuff
+mcon/U/d_access.U Do we have access()?
+mcon/U/d_alarm.U Do we have alarm()?
+mcon/U/d_arc4random.U Do we have arc4random()?
+mcon/U/d_attribut.U Checks wether your cc groks __attribute__
+mcon/U/d_backtrace.U Do we have backtrace()?
+mcon/U/d_bcmp.U Do we have bcmp() or memcmp()?
+mcon/U/d_bcopy.U Do we have bcopy() or memcpy()?
+mcon/U/d_bfd_lib.U Is the BFD library available?
+mcon/U/d_bindtxtcode.U Do we have bind_textdomain_codeset()?
+mcon/U/d_brokstat.U Check whether stat() macros are broken
+mcon/U/d_bsdjmp.U Do we have BSD _setjmp() and _longjmp()?
+mcon/U/d_bsearch.U Do we have bsearch()?
+mcon/U/d_built_bswap32.U Is __builtin_bswap32() available?
+mcon/U/d_built_bswap64.U Is __builtin_bswap64() available?
+mcon/U/d_built_clz.U Is __builtin_clz() available?
+mcon/U/d_built_ctz.U Is __builtin_ctz() available?
+mcon/U/d_built_memcmp.U Is __builtin_memcmp() available?
+mcon/U/d_built_popcount.U Is __builtin_popcount() available?
+mcon/U/d_byacc.U Is byacc available?
+mcon/U/d_bzero.U Do we have bzero() or memset()?
+mcon/U/d_casti32.U Can the compiler cast large flots to 32-bit ints?
+mcon/U/d_castneg.U Can the C compiler cast negative to unsigned?
+mcon/U/d_cbrt.U Do we have cubic root cbrt()?
+mcon/U/d_charsprf.U How is sprintf() defined?
+mcon/U/d_chown.U Do we have chown()?
+mcon/U/d_chroot.U Do we have chroot()?
+mcon/U/d_chsize.U Size of a char
+mcon/U/d_ckeypad.U Do we have the curses keypad()?
+mcon/U/d_clearenv.U Do we have clearenv()?
+mcon/U/d_clock_getres.U Do we have clock_getres()?
+mcon/U/d_clock_gettime.U Do we have clock_gettime()?
+mcon/U/d_closedir.U Do we have closedir()?
+mcon/U/d_closefrom.U Do we have closefrom()?
+mcon/U/d_const.U Can cc grok the const keyword?
+mcon/U/d_crypt.U Does crypt() exist?
+mcon/U/d_csh.U csh path
+mcon/U/d_ctermid.U Do we have ctermid()?
+mcon/U/d_cuserid.U Do we have cuserid()?
+mcon/U/d_datastart_symbol.U Whether linker defines the "__data_start" symbol
+mcon/U/d_dbl_dig.U Is DBL_DIG defined in <limits.h> or <float.h>?
+mcon/U/d_debugging.U Conditionally defines -DDEBUGGING
+mcon/U/d_deflate.U Do we have zlib's deflate()?
+mcon/U/d_devpoll.U Can we use /dev/poll?
+mcon/U/d_difftime.U Do we have difftime()?
+mcon/U/d_dirent_d_namlen.U Does struct dirent has a member d_namlen?
+mcon/U/d_dirent_d_type.U Does struct dirent has a member d_type?
+mcon/U/d_dirfd.U Do we have dirfd()?
+mcon/U/d_dladdr.U Do we have dladdr()?
+mcon/U/d_dlerror.U Do we have dlerror()?
+mcon/U/d_dliterphdr.U Do we have dl_iterate_phdr()?
+mcon/U/d_dlopen.U Do we have dlopen()?
+mcon/U/d_dosuid.U Do they want setuid emulation?
+mcon/U/d_drem.U Do we have drem()?
+mcon/U/d_dup2.U Do we have dup2()?
+mcon/U/d_end_symbol.U Whether linker defines the "end" symbol
+mcon/U/d_eofpipe.U Will EOF be seen on closed pipes?
+mcon/U/d_epoll.U Can we use epoll_xxx() routines?
+mcon/U/d_etext_symbol.U Whether linker defines the "etext" symbol
+mcon/U/d_euc2jis.U Do we have euc2jis()?
+mcon/U/d_fast_assert.U Can we use fast assertions?
+mcon/U/d_fchdir.U Do we have fchdir()?
+mcon/U/d_fchmod.U Do we have fchmod()?
+mcon/U/d_fchown.U Do we have fchown()?
+mcon/U/d_fcntl.U Do we have fcntl()?
+mcon/U/d_fd_set.U Do we have the fd set manipulation macros?
+mcon/U/d_fdatasync.U Do we have fdatasync()?
+mcon/U/d_fdopendir.U Do we have fdopendir()?
+mcon/U/d_ffs.U Do we have ffs()?
+mcon/U/d_fgetpos.U Do we have fgetpos()?
+mcon/U/d_flexfnam.U Long filenames?
+mcon/U/d_flock.U Do we have flock()?
+mcon/U/d_fmod.U Do we have fmod()?
+mcon/U/d_fork.U Do we have fork()?
+mcon/U/d_fsetpos.U Do we have fsetpos()?
+mcon/U/d_fstatat.U Do we have fstatat()?
+mcon/U/d_fsync.U Do we have fsync()?
+mcon/U/d_ftime.U Do we have ftime()?
+mcon/U/d_ftrncate.U Do we have ftruncate()?
+mcon/U/d_gconvert.U Do we have gconvert() or gcvt()?
+mcon/U/d_getaddrinfo.U Do we have etaddrinfo()?
+mcon/U/d_getcontext.U Do we have getcontext()?
+mcon/U/d_geteuid.U Do we have geteuid()?
+mcon/U/d_getgrps.U Do we have getgroups()?
+mcon/U/d_gethbynm.U Do we have gethostbyname()?
+mcon/U/d_gethent.U Do we have gethostent()?
+mcon/U/d_gethid.U Do we have gethostid()?
+mcon/U/d_gethname.U What is the C function to get host name?
+mcon/U/d_getifaddrs.U Do we have getifaddrs() and freeifaddrs()?
+mcon/U/d_getinvent.U Do we have getinvent()?
+mcon/U/d_getlogin.U Do we have getlogin()?
+mcon/U/d_getnameinfo.U Do we have getnameinfo()?
+mcon/U/d_getopt.U Do we have getopt()?
+mcon/U/d_getpagsz.U Computes system's page size
+mcon/U/d_getpgid.U Do we have getpgid()?
+mcon/U/d_getpgrp.U Do we have getpgrp()?
+mcon/U/d_getpgrp2.U Do we have getpgrp2()? (DG/UX)
+mcon/U/d_getppid.U Do we have getppid()?
+mcon/U/d_getprior.U Do we have getpriority()?
+mcon/U/d_getprogname.U Do we have getprogname()?
+mcon/U/d_getpwent.U How is passwd info gotten?
+mcon/U/d_getpwnam.U Do we have getpwnam()?
+mcon/U/d_getpwuid.U Do we have getpwuid()?
+mcon/U/d_getrlimit.U Do we have getrlimit()?
+mcon/U/d_gettext.U Checks whether gettext() is available
+mcon/U/d_gettext.U Do we have gettext()?
+mcon/U/d_getuid.U Do we have getuid()?
+mcon/U/d_getwd.U Do we have getwd()?
+mcon/U/d_gnugettext.U Do we have GNU gettext()?
+mcon/U/d_gnulibc.U Are we using the GNU C library?
+mcon/U/d_group.U Do we have group()?
+mcon/U/d_havetlib.U Where is termlib?
+mcon/U/d_herror.U Do we have herror()?
+mcon/U/d_hidnet.U Do hiddennet stuff?
+mcon/U/d_hstrerror.U Do we have hstrerror()?
+mcon/U/d_htonl.U Do we have htonl() and friends?
+mcon/U/d_iconv.U Do we have iconv()?
+mcon/U/d_ieee754.U De we have IEEE-754 floats?
+mcon/U/d_inetaton.U Do we have inet_aton()?
+mcon/U/d_inetd.U Should internet communication be done via inetd?
+mcon/U/d_inflate.U Do we have zlib's inflate()?
+mcon/U/d_initstate.U Do we have initstate()?
+mcon/U/d_internet.U Use internet addresses?
+mcon/U/d_iptos.U Do we have IP TOS support?
+mcon/U/d_ipv6.U Do we have IPv6 support?
+mcon/U/d_isascii.U Do we have isascii()?
+mcon/U/d_itimer.U Do we have setitimer()?
+mcon/U/d_keepsig.U Will signal handlers need to be rearmed?
+mcon/U/d_kevent_udata.U Is udata within struct kevent an integer?
+mcon/U/d_killpg.U Do we have killpg()?
+mcon/U/d_kqueue.U Do we have kqueue()?
+mcon/U/d_link.U Do we have link()?
+mcon/U/d_linuxstd.U Do we have Linux standard I/O structures?
+mcon/U/d_locale_charset.U Do we have locale_charset()?
+mcon/U/d_locconv.U Do we have localeconv()?
+mcon/U/d_lockf.U Do we have lockf()?
+mcon/U/d_lstat.U Do we have lstat()?
+mcon/U/d_madvise.U Do we have madvise()?
+mcon/U/d_mblen.U Do we have mblen()?
+mcon/U/d_mbstowcs.U Do we have mbstowcs()?
+mcon/U/d_mbtowc.U Do we have mbtowc()?
+mcon/U/d_memalign.U Do we have memalign()?
+mcon/U/d_memccpy.U Do we have memccpy()?
+mcon/U/d_memchr.U Do we have memchr()?
+mcon/U/d_memcmp.U Do we have memcmp()?
+mcon/U/d_memcpy.U Do we have memcpy()?
+mcon/U/d_memmove.U Do we have memmove()?
+mcon/U/d_mempcpy.U Do we have mempcpy()?
+mcon/U/d_memset.U Do we have memset()?
+mcon/U/d_mkdir.U Do we have mkdir()?
+mcon/U/d_mkfifo.U Do we have mkfifo()?
+mcon/U/d_mktime.U Do we have mktime()?
+mcon/U/d_mmap.U Do we have mmap()?
+mcon/U/d_msem_lck.U Do we have msem_lock()?
+mcon/U/d_msg.U Do we have full msg(2) support?
+mcon/U/d_msg_flags.U Does struct msghdr have a msg_flags member?
+mcon/U/d_msgctl.U Do we have msgctl()?
+mcon/U/d_msgget.U Do we have msgget()?
+mcon/U/d_msgrcv.U Do we have msgrcv()?
+mcon/U/d_msgsnd.U Do we have msgsnd()?
+mcon/U/d_msync.U Do we have msync()?
+mcon/U/d_munmap.U Do we have munmap()?
+mcon/U/d_nanosleep.U Do we have nanosleep()?
+mcon/U/d_newsadm.U Who is news administrator?
+mcon/U/d_nice.U Do we have nice()?
+mcon/U/d_nls.U Do we support NLS?
+mcon/U/d_nolnbuf.U Is stdout line buffered?
+mcon/U/d_normsig.U signal() vs sigset()
+mcon/U/d_open3.U Do we have the 3 arguments form for open()?
+mcon/U/d_openat.U Do we have openat()?
+mcon/U/d_passwd.U Do we have passwd()?
+mcon/U/d_pathconf.U Do we have pathconf()?
+mcon/U/d_pause.U Do we have pause()?
+mcon/U/d_perror.U Do we have perror()?
+mcon/U/d_pidcheck.U Is kill(pid, 0) allowed for PID checks?
+mcon/U/d_pipe.U Do we have pipe()?
+mcon/U/d_pipe2.U Do we have pipe2()?
+mcon/U/d_poll.U Do we have poll()?
+mcon/U/d_popen.U Do we have popen()?
+mcon/U/d_portable.U How portable do we want to be?
+mcon/U/d_posix_fadvise.U Do we have posix_fadvise()?
+mcon/U/d_posix_memalign.U Do we have posix_memalign()?
+mcon/U/d_pread.U Do we have pread()?
+mcon/U/d_preadv.U Do we have preadv()?
+mcon/U/d_proginvocname.U Do we have program_invocation_name variables?
+mcon/U/d_psignal.U Do we have psignal()?
+mcon/U/d_ptattr_setstack.U Do we have pthread_attr_setstack()?
+mcon/U/d_pwrite.U Do we have pwrite()?
+mcon/U/d_pwritev.U Do we have pwritev()?
+mcon/U/d_random.U Do we have random()?
+mcon/U/d_raster.U Is this a Raster Tech machine?
+mcon/U/d_rdchk.U Is rdchk() there to check for input?
+mcon/U/d_readdir.U Do we have readdir()?
+mcon/U/d_readlink.U Do we have readlink()?
+mcon/U/d_recvmsg.U Do we have recvmsg()?
+mcon/U/d_regcmp.U Do we have regcmp() or re_comp()?
+mcon/U/d_regcomp.U Do we have POSIX regcomp()?
+mcon/U/d_regparm.U Can we use __attribute__((__regparm__(n)))?
+mcon/U/d_rename.U Do we have rename()?
+mcon/U/d_rmdir.U Do we have rmdir()?
+mcon/U/d_rusage.U Do we have getrusage()?
+mcon/U/d_sa_interrupt.U Can SA_INTERRUPT be used in sigaction()?
+mcon/U/d_safebcpy.U Can bcopy() handle overlapping blocks?
+mcon/U/d_safemcpy.U Can memcpy() handle overlapping blocks?
+mcon/U/d_sanemcmp.U Can we compare 8th bit in chars with memcmp()?
+mcon/U/d_sbrk.U Do we have sbrk()?
+mcon/U/d_scandir.U Do we have scandir()?
+mcon/U/d_scannl.U Does scanf() groks '\n' correctly?
+mcon/U/d_sched_yield.U Do we have sched_yield()?
+mcon/U/d_scorfl.U Keep scoreboards by full name?
+mcon/U/d_select.U Do we have select()?
+mcon/U/d_sem.U Do we have full sem(2) support?
+mcon/U/d_semctl.U Do we have d_semctl()?
+mcon/U/d_semget.U Do we have semget()?
+mcon/U/d_semop.U Do we have semop()?
+mcon/U/d_sendfile.U Do we have sendfile()?
+mcon/U/d_sendmsg.U Do we have sendmsg()?
+mcon/U/d_setegid.U Do we have setegid()?
+mcon/U/d_setenv.U Do we have setenv()?
+mcon/U/d_seteuid.U Do we have seteuid()?
+mcon/U/d_setgrps.U Do we have setgroups()?
+mcon/U/d_setlnbuf.U Do we have setlinebuf()?
+mcon/U/d_setlocale.U Do we have setlocale()?
+mcon/U/d_setpgid.U Do we have setpgid()?
+mcon/U/d_setpgrp.U Do we have setpgrp()?
+mcon/U/d_setpgrp2.U Do we have setpgrp2()? (DG/UX)
+mcon/U/d_setprior.U Do we have setpriority()?
+mcon/U/d_setproctitle.U Do we have setproctitle()?
+mcon/U/d_setprogname.U Do we have setprogname()?
+mcon/U/d_setregid.U Do we have setregid()?
+mcon/U/d_setreuid.U Do we have setreuid()?
+mcon/U/d_setrgid.U Do we have setrgid()?
+mcon/U/d_setrlimit.U Do we have setrlimit()?
+mcon/U/d_setruid.U Do we have setruid()?
+mcon/U/d_setsid.U Do we have setsid()?
+mcon/U/d_sgndchr.U Are chars signed?
+mcon/U/d_shm.U Do we have full shm(2) support?
+mcon/U/d_shmat.U Do we have shmat()?
+mcon/U/d_shmctl.U Do we have shmctl()?
+mcon/U/d_shmdt.U Do we have shmdt()?
+mcon/U/d_shmget.U Do we have shmget()?
+mcon/U/d_sigaction.U Do we have sigaction()?
+mcon/U/d_sigaltstack.U Do we have sigaltstack()?
+mcon/U/d_sigblock.U Do we have sigblock()?
+mcon/U/d_sighold.U Do we have sighold()?
+mcon/U/d_siglist.U Do we have sys_siglist[]?
+mcon/U/d_sigprocmask.U Do we have sigprocmask()?
+mcon/U/d_sigsetjmp.U Do we have sigsetjmp()?
+mcon/U/d_sigsetmk.U Do we have sigsetmask()?
+mcon/U/d_sigvec.U BSD reliable signals supported?
+mcon/U/d_sjis2jis.U Do we have sjis2jis()?
+mcon/U/d_sockaddr_in_sin_len.U Is there a sin_len within struct sockaddr_in?
+mcon/U/d_sockaddr_un.U Is struct sockaddr_un available?
+mcon/U/d_socker_get.U Has socker_get() to listen to privileged ports?
+mcon/U/d_socket.U BSD socket interface supported?
+mcon/U/d_speedopt.U Optimize speed vs memory?
+mcon/U/d_srandom.U Do we have srandom()?
+mcon/U/d_stat.U Do we have stat()?
+mcon/U/d_statblks.U Does stat know about blksize and blocks?
+mcon/U/d_statfs.U Do we have statfs()?
+mcon/U/d_statvfs.U Do we have statvfs()?
+mcon/U/d_stdstdio.U How standard is stdio?
+mcon/U/d_strcasestr.U Do we have strcasestr()?
+mcon/U/d_strccmp.U Do we have strcasecmp()?
+mcon/U/d_strchr.U Use strchr() or index()?
+mcon/U/d_strcoll.U Do we have strcoll()?
+mcon/U/d_strcspn.U Do we have strcspn()?
+mcon/U/d_strctcpy.U Do we do struct copies?
+mcon/U/d_strdup.U Do we have strdup()?
+mcon/U/d_strerror.U Do we have strerror()?
+mcon/U/d_strftime.U Do we have strftime()?
+mcon/U/d_strlcat.U Do we have strlcat()?
+mcon/U/d_strlcpy.U Do we have strlcpy()?
+mcon/U/d_strstr.U Do we have strtr()?
+mcon/U/d_strtod.U Do we have strtod()?
+mcon/U/d_strtok.U Do we have strtok()?
+mcon/U/d_strtol.U Do we have strtol()?
+mcon/U/d_strtoul.U Do we have strtoul()?
+mcon/U/d_strxfrm.U Do we have strxfrm()?
+mcon/U/d_su_chown.U Do we need to be root to do a chown?
+mcon/U/d_symlink.U Does symlink() exist?
+mcon/U/d_sync_atomic.U Are __sync_synchronize() and friends available?
+mcon/U/d_syscall.U Do we have syscall()?
+mcon/U/d_sysconf.U Do we have sysconf()?
+mcon/U/d_sysctl.U Do we have sysctl()?
+mcon/U/d_syslog.U Do we have syslog()?
+mcon/U/d_system.U Do we have system()?
+mcon/U/d_table.U De we have table()?
+mcon/U/d_tcgtpgrp.U Do we have tcgetpgrp()?
+mcon/U/d_tcstpgrp.U Do we have tcsetpgrp()?
+mcon/U/d_time.U Do we have time()?
+mcon/U/d_times.U Do we have a times() function?
+mcon/U/d_tminsys.U Is struct tm in <sys/time.h>?
+mcon/U/d_truncate.U Do we have truncate()?
+mcon/U/d_tzmin.U Do we use tz_minuteswest?
+mcon/U/d_tzname.U Do we have tzname[]?
+mcon/U/d_uctx_mctx.U Do we have a uc_mcontext field in struct ucontext?
+mcon/U/d_uctx_mctx_gregs.U Do we have uc_mcontext.gregs[] in struct ucontext?
+mcon/U/d_ulimit.U Do we have ulimit()?
+mcon/U/d_umask.U Do we have umask()?
+mcon/U/d_unsetenv.U Do we have unsetenv()?
+mcon/U/d_usendir.U Use our own ndir routines?
+mcon/U/d_usleep.U Do we have usleep()?
+mcon/U/d_uwait.U Is there a 'union wait' declaration around here?
+mcon/U/d_vfork.U vfork() vs fork()
+mcon/U/d_voidsig.U How is signal() declared?
+mcon/U/d_volatile.U Does our C compiler support "volatile"?
+mcon/U/d_vprintf.U Do we have vprintf()?
+mcon/U/d_vsnprintf.U Do we have vsnprintf()?
+mcon/U/d_wait3.U Do we have wait3()?
+mcon/U/d_wait4.U Do we have wait4()?
+mcon/U/d_waitpid.U Do we have waitpid() system call?
+mcon/U/d_wcstombs.U Do we have wcstombs()?
+mcon/U/d_wctomb.U Do we have wctomb()?
+mcon/U/d_wifstat.U Can we safely use WIFEXITED() and friends?
+mcon/U/d_xdrs.U Do we have XDR serialization routines?
+mcon/U/defeditor.U Find default editor
+mcon/U/doublesize.U What is the size of "double"?
+mcon/U/ebcdic.U Check for an EBCDIC system
+mcon/U/enablenls.U Shall we enable NLS?
+mcon/U/errnolist.U See if we need our own .c to get sys_errnolist[]
+mcon/U/etc.U Where administrative executable should go
+mcon/U/fieldn.U Compute included filename position in cpp output
+mcon/U/filexp_path.U Finds location of filexp made by Filexp.U
+mcon/U/floatsize.U What is the size of "float"?
+mcon/U/fpostype.U What is the type for file positions?
+mcon/U/fpu.U What kind of Sun fpu is in use?
+mcon/U/gccvers.U Computes the version of the GCC compiler
+mcon/U/gidtype.U What is the type of gids?
+mcon/U/groupstype.U What is the type for groups in getgroups()?
+mcon/U/h_fcntl.U Do we need to include fcntl.h?
+mcon/U/h_sysfile.U Do we need to include sys/file.h?
+mcon/U/i_alloca.U Shall we include <alloca.h>?
+mcon/U/i_arpainet.U Shall we include <arpa/inet.h>?
+mcon/U/i_db.U Shall we include <db.h>?
+mcon/U/i_dbm.U Shall we include <dbm.h>?
+mcon/U/i_dirent.U Shall we include <dirent.h>
+mcon/U/i_dld.U Shall we include <dld.h>?
+mcon/U/i_dlfcn.U Shall we include <dlfcn.h>?
+mcon/U/i_execinfo.U Shall we include <execinfo.h>?
+mcon/U/i_fcntl.U Shall we include <fcntl.h>?
+mcon/U/i_float.U Shall we include <float.h>?
+mcon/U/i_gdbm.U Shall we include <gdbm.h>?
+mcon/U/i_grp.U Shall we include <grp.h>?
+mcon/U/i_iconv.U Shall we include <iconv.h>?
+mcon/U/i_ifaddrs.U Shall we include <ifaddrs.h>?
+mcon/U/i_inttypes.U Shall we include <inttypes.h>?
+mcon/U/i_invent.U Shall we include <invent.h>?
+mcon/U/i_langinfo.U Shall we include <langinfo.h>?
+mcon/U/i_libcharset.U Shall we include <libcharset.h>?
+mcon/U/i_libintl.U Shall we include <libintl.h>?
+mcon/U/i_limits.U Shall we include <limits.h>?
+mcon/U/i_linux_netlink.U Shall we include <linux/netlink.h>?
+mcon/U/i_linux_rtnetlink.U Shall we include <linux/rtnetlink.h>?
+mcon/U/i_locale.U Shall we include <locale.h>?
+mcon/U/i_malloc.U Shall we include <malloc.h>?
+mcon/U/i_math.U Shall we include <math.h>?
+mcon/U/i_memory.U Shall we include <memory.h>?
+mcon/U/i_mswsock.U Shall we include <Mswsock.h>?
+mcon/U/i_ndbm.U Shall we include <ndbm.h>?
+mcon/U/i_netdb.U Shall we include <netdb.h>?
+mcon/U/i_neterrno.U Shall we include <net/errno.h>?
+mcon/U/i_netif.U Shall we include <net/if.h>?
+mcon/U/i_netroute.U Can we include <net/route.h>?
+mcon/U/i_niin.U Shall we include <netinet/in.h>?
+mcon/U/i_niip.U Shall we include <netinet/ip.h>?
+mcon/U/i_poll.U Shall we include <poll.h>?
+mcon/U/i_pthread.U Shall we include <pthread.h>?
+mcon/U/i_pwd.U Shall we include <pwd.h>?
+mcon/U/i_regex.U Shall we include <regex.h>?
+mcon/U/i_sched.U Shall we include <sched.h>?
+mcon/U/i_sfio.U Shall we include <sfio.h>?
+mcon/U/i_stddef.U Shall we include <stddef.h>?
+mcon/U/i_stdlib.U Shall we include <stdlib.h>?
+mcon/U/i_string.U <string.h> or <strings.h>?
+mcon/U/i_sysdir.U Shall we include <sys/dir.h>?
+mcon/U/i_sysfile.U Do we need <sys/file.h>?
+mcon/U/i_sysioctl.U Include <sys/ioctl.h> or <sgtty.h>?
+mcon/U/i_sysipc.U Shall we include <sys/ipc.h>?
+mcon/U/i_sysmman.U Do we have to include <sys/mman.h>?
+mcon/U/i_sysmount.U Shall we include <sys/mount.h>?
+mcon/U/i_sysndir.U Shall we include <sys/ndir.h>?
+mcon/U/i_sysparam.U Shall we include <sys/param.h>?
+mcon/U/i_syspoll.U Shall we include <sys/poll.h>?
+mcon/U/i_sysresrc.U Shall we include <sys/resource.h>?
+mcon/U/i_sysselct.U Shall we include <sys/select.h>?
+mcon/U/i_syssem.U Shall we include <sys/sem.h>?
+mcon/U/i_syssendfile.U Shall we include <sys/sendfile.h>?
+mcon/U/i_syssock.U Shall we include <sys/socket.h>?
+mcon/U/i_sysstat.U Shall we include <sys/stat.h>
+mcon/U/i_sysstatvfs.U Shall we include <sys/statvfs.h>?
+mcon/U/i_syssysctl.U Shall we include <sys/sysctl.h>?
+mcon/U/i_systable.U De we have to include <sys/table.h>?
+mcon/U/i_systimeb.U Is struct timeb defined in <sys/timeb.h>?
+mcon/U/i_systimes.U Shall we include <sys/times.h>?
+mcon/U/i_systwgcf.U Shall we include <sys/twg_config.h>?
+mcon/U/i_systypes.U Do we have to include <sys/types.h>?
+mcon/U/i_sysun.U Shall we include <sys/un.h>?
+mcon/U/i_sysutsname.U Shall we include <sys/utsname.h>?
+mcon/U/i_sysvfs.U Shall we include <sys/vfs.h>?
+mcon/U/i_syswait.U Is there a <sys/wait.h>?
+mcon/U/i_termio.U Include <termio.h> or <sgtty.h>?
+mcon/U/i_time.U Which time.h should we include?
+mcon/U/i_ucontext.U Shall we include <ucontext.h>
+mcon/U/i_unistd.U Include <unistd.h>?
+mcon/U/i_utime.U Include <utime.h>?
+mcon/U/i_values.U Shall we include <values.h>
+mcon/U/i_varhdr.U Choose between <varargs.h> and <stdarg.h>
+mcon/U/i_vfork.U Include <vfork.h>?
+mcon/U/i_whoami.U Include <whoami.h>?
+mcon/U/i_winsock2.U Shall we include <Winsock2.h>?
+mcon/U/i_ws2tcpip.U Shall we include <Ws2tcpip.h>?
+mcon/U/i_zlib.U Shall we include <zlib.h>?
+mcon/U/ilp.U Supported integer-long-pointer architecture.
+mcon/U/inc.U Where to put public include files?
+mcon/U/install.U Look for a BSD-compatible install
+mcon/U/intsize.U What is the size of "int"?
+mcon/U/ipc.U Choose IPC mechanism
+mcon/U/issymlink.U How to test for symlink status from the shell
+mcon/U/kernel.U Compute the kernel pathname
+mcon/U/lex.U Use lex or flex?
+mcon/U/lib.U Where to put public library files ?
+mcon/U/libc.U Where is libc?
+mcon/U/libdbm.U Look for a suitable dbm library
+mcon/U/libflex.U Locate flex library
+mcon/U/libnlist.U Locate an nlist library
+mcon/U/libnm.U New math library?
+mcon/U/libpth.U Set path to locate libraries
+mcon/U/libs.U Optional libraries?
+mcon/U/libyacc.U Locate yacc library
+mcon/U/lintlib.U Where lint library should be placed
+mcon/U/lns.U Are symbolic links supported by ln?
+mcon/U/locale.U Configuration of I18N files
+mcon/U/locdist.U Find distribution names for news
+mcon/U/longsize.U What is the size of "long"?
+mcon/U/lseektype.U What is the type of lseek()?
+mcon/U/maildir.U Where is mail spooled
+mcon/U/mailer.U What delivers mail?
+mcon/U/mailfile.U What filename in maildir?
+mcon/U/make.U Does make set the $(MAKE) macro?
+mcon/U/mallocsrc.U Use malloc included in kit?
+mcon/U/man1dir.U Where to put traditional section 1 manpage sources
+mcon/U/man3dir.U Where to put traditional section 3 manpage sources
+mcon/U/manfmt.U Formatted man directories
+mcon/U/mansrc.U Where to put manual pages source
+mcon/U/mboxchar.U How to determine if file is mailbox
+mcon/U/mkdep.U How to generate makefile dependencies?
+mcon/U/models.U Large vs small, split I&D, etc
+mcon/U/modetype.U What is the type for file modes?
+mcon/U/msgmerge_update.U Does msgmerge --update work?
+mcon/U/myhostname.U How to determine hostname from shell
+mcon/U/n.U How to suppress newline with echo
+mcon/U/nametype.U How to get user's fullname
+mcon/U/nblock_io.U Support for non-blocking I/O
+mcon/U/newslevel.U What version of news are we running?
+mcon/U/newslib.U Where is the news library?
+mcon/U/newsspool.U Where is news spooled?
+mcon/U/nis.U Do we have to deal with NIS (former YP)?
+mcon/U/nlist_pfx.U nlist() related stuff
+mcon/U/official.U Are we making an official build with no local ref?
+mcon/U/orderlib.U Shall we order components libraries?
+mcon/U/orgname.U What is the organizaton name?
+mcon/U/packadmin.U E-mail address of the package administrator
+mcon/U/package.U Gets package name from .package magically
+mcon/U/pager.U What's the pager, more or less?
+mcon/U/patchlevel.U Grab current patchlevel out of patchlevel.h
+mcon/U/perlpath.U The full path of perl
+mcon/U/pidtype.U What is the type of a PID?
+mcon/U/pkgsrc.U Computes the absolute package source directory
+mcon/U/prefix.U Installation prefix setting (none, /usr/local)
+mcon/U/prefshell.U Preferred user shell
+mcon/U/privlib.U Where is the private library?
+mcon/U/prototype.U Do we support prototypes?
+mcon/U/ptrsize.U What is the size of a pointer?
+mcon/U/randbits.U How many bits in rand()?
+mcon/U/randfunc.U Which random number function shall we use?
+mcon/U/rcs_branch.U Does RCS know about the -b switch?
+mcon/U/registers.U How many register declarations to use
+mcon/U/rootid.U Root user id
+mcon/U/sbrksmart.U Can sbrk() be used to release core?
+mcon/U/sbrktype.U What is the return type of sbrk()?
+mcon/U/scriptdir.U Where to put public scripts
+mcon/U/selecttype.U What type for select() file bitfields?
+mcon/U/sh.U Where the shell is located
+mcon/U/shm_for.U More shared memory stuff
+mcon/U/sig_name.U Signal names
+mcon/U/sitearch.U Where user-installed arch-dependant files should go
+mcon/U/sitelib.U Where user-installed regular library files should go
+mcon/U/sizetype.U What is the type for byte size?
+mcon/U/so.U Shared object extension
+mcon/U/sockopt.U Check for socket options
+mcon/U/spitshell.U Shell comment stripper, maybe
+mcon/U/src.U Build and source tree separation support
+mcon/U/ssizetype.U What is the signed type for byte size?
+mcon/U/startperl.U Do we start perl with #! or what?
+mcon/U/startsh.U How to guarantee sh startup
+mcon/U/stdchar.U Are chars unsigned in stdio?
+mcon/U/sunscanf.U Is this Sun's version of scanf()?
+mcon/U/sysman.U Where is the man(1) located?
+mcon/U/trnl.U Finds appropriate value for a newline in tr
+mcon/U/uidtype.U What is the type of uids?
+mcon/U/usenm.U Shall we use the costly nm extraction?
+mcon/U/usesocks.U Defines USE_SOCKS when SOCKS is to be used
+mcon/U/usrinc.U Where are include files located?
+mcon/U/vaproto.U How do we prototype varargs, with ...?
+mcon/U/voidflags.U How supported is void?
+mcon/U/warnflags.U Any additional cc warning flags?
+mcon/U/yacc.U Which compiler-compiler to use?
+mcon/configure GNU configure-like wrapper to metaconfig's Configure
+mcon/files/ Templates for new units
+mcon/files/Internal.U Template for special units with internal symbols
+mcon/files/README Why those templates are here...
+mcon/files/d_function.U Template for C defines
+mcon/files/dir.U Template to get a directory
+mcon/files/file.U Template get a file
+mcon/files/i_include.U Template for include files
+mcon/files/keyword.U Template for keyword checking
+mcon/files/locate.U Template to locate a file
+mcon/files/question.U Template for setvar questions
+mcon/files/rcshead.U Template for unit head
+mcon/files/shell.U Template for non-setvar questions
+mcon/files/type.U Template for type lookup
+mcon/makegloss.SH Extracts Glossary from Unit files
+mcon/man/ Manual pages for metaconfig et al.
+mcon/man/Jmakefile Generic makefile description for manual pages
+mcon/man/Makefile.SH Jmake-generated makefile for manual pages
+mcon/man/mconfig.SH Manual page for metaconfig
+mcon/man/mlint.SH Manual page for metalint
+mcon/man/mxref.SH Manual page for metaxref
+mcon/mconfig.SH Writes Configure scripts for you
+mcon/mlint.SH Lints metaconfig units
+mcon/mxref.SH Builds symbol cross-reference files
+mcon/pl/ Perl library for metaconfig et al.
+mcon/pl/common.pl Common control lines extraction
+mcon/pl/configure.pl Generates Configure
+mcon/pl/cosmetic.pl Some cosmetic fixes
+mcon/pl/depend.pl Metaconfig-only dependencies
+mcon/pl/eval.pl Built-in interpreter
+mcon/pl/extract.pl Dependency extractor engine
+mcon/pl/files.pl Extracts files from MANIFEST.new
+mcon/pl/gensym.pl Dynamic symbol generator
+mcon/pl/init.pl Initialization of dependency control array
+mcon/pl/lint.pl Lint-only dependencies
+mcon/pl/locate.pl Locate units
+mcon/pl/makefile.pl Builds temporary Makefiles
+mcon/pl/obsolete.pl Deals with obsolete symbols
+mcon/pl/order.pl Re-order units within Configure
+mcon/pl/tsort.pl Topological sort
+mcon/pl/wanted.pl Set up Wanted file
+mcon/pl/xref.pl Metaxref-only dependencies
+mcon/pl/xwant.pl Metaxref symbol extraction
+pat/ Where patching tools are stored
+pat/Jmakefile High level makefile description for pat
+pat/Makefile.SH Makefile for pat tools
+pat/README Instructions for patch/developping tools
+pat/pat.SH Check in, do diffs, make patch, send it
+pat/pat.man Manual page for patch tools
+pat/patbase.SH To set the base for future differences
+pat/patchlevel.h Prototypical patchlevel.h
+pat/patcil.SH Check in the latest changes
+pat/patclean.SH Check in latest changes and remove files
+pat/patcol.SH Check out working file
+pat/patdiff.SH Find the differences since last patch
+pat/patftp.SH Put patches in ftp pub directory
+pat/patindex.SH Create an index of patches sent out
+pat/patlog.SH Handles the ChangeLog file
+pat/patmake.SH Put together a patch file
+pat/patname.SH Assign symbolic name to a revision
+pat/patnotify.SH Notifies that new patches have been released
+pat/patpost.SH Send patches via news
+pat/patsend.SH Sends patches via mail
+pat/patsnap.SH Builds RCS snapshot file
+patchlevel.h The current patchlevel for dist
+pl/ Directory for public perl libraries
+pl/comment.pl Perl library to find comment in front of $Log
+pl/copyright.pl Perl library to expand copyright
+pl/editor.pl Perl library to compute suitable editor name
+pl/fullname.pl Perl library to get full name
+pl/listedit.pl Perl library to edit list of items
+pl/logname.pl Perl library to get login name
+pl/makedir.pl Perl library to emulate 'mkdir -p'
+pl/manifake.pl Perl library to build a MANIFEST.new if none found
+pl/newer.pl Perl library to Find files newer than patchlevel.h
+pl/package.pl Perl library to read .package
+pl/patseq.pl Perl library to compute issued patch sequence
+pl/profile.pl Perl library to get ~/.dist_profile
+pl/rangeargs.pl Perl library to expand number lists
+pl/rcsargs.pl Perl library to expand rcs filename lists
+pl/snapshot.pl Perl library to parse RCS snapshot file
+pl/tilde.pl Perl library to perform ~name expansion
+pl/users.pl Perl library to parse users file
diff --git a/Makefile.SH b/Makefile.SH
new file mode 100755
index 0000000..3d204eb
--- /dev/null
+++ b/Makefile.SH
@@ -0,0 +1,271 @@
+: Makefile.SH generated from Jmake.tmpl and Jmakefile [jmake 3.5-119]
+: $X-Id: Jmake.tmpl 69 2011-01-09 13:57:07Z rmanfredi $
+
+case $CONFIG in
+'')
+ if test -f config.sh; then TOP=.;
+ elif test -f ../config.sh; then TOP=..;
+ elif test -f ../../config.sh; then TOP=../..;
+ elif test -f ../../../config.sh; then TOP=../../..;
+ elif test -f ../../../../config.sh; then TOP=../../../..;
+ else
+ echo "Can't find config.sh."; exit 1
+ fi
+ . $TOP/config.sh
+ ;;
+esac
+case "$0" in
+*/*) cd `expr X$0 : 'X\(.*\)/'` ;;
+esac
+CURRENT=.
+DIR=`echo $CURRENT/ | sed -e 's/\.\///g'`
+echo "Extracting ${DIR}Makefile (with variable substitutions)"
+
+INSTALL=`echo $install | sed -e 's,\./i,\$(TOP)/i,'`
+INSTALLDIR=`echo $installdir | sed -e 's,\./i,\$(TOP)/i,'`
+DATE=`date`
+
+$spitshell >Makefile <<!GROK!THIS!
+########################################################################
+# Makefile generated from Makefile.SH on $DATE
+
+SHELL = /bin/sh
+JMAKE = jmake
+TOP = .
+CURRENT = $CURRENT
+DIR = $DIR
+INSTALL = $INSTALL
+INSTALLDIR = $INSTALLDIR
+
+########################################################################
+# Parameters set by Configure -- edit config.sh if changes are needed
+
+CTAGS = ctags
+JCPPFLAGS = $cppflags
+L = $manext
+MANSRC = $installmansrc
+MV = $mv
+RM = $rm -f
+
+########################################################################
+# Automatically generated parameters -- do not edit
+
+SUBDIRS = bin mcon jmake pat kit lib
+
+!GROK!THIS!
+$spitshell >>Makefile <<'!NO!SUBS!'
+########################################################################
+# Jmake rules for building libraries, programs, scripts, and data files
+# $X-Id: Jmake.rules 106 2011-11-25 20:36:12Z rmanfredi $
+
+########################################################################
+# Start of Jmakefile
+
+# $X-Id: Jmakefile 48 2010-11-28 23:05:09Z rmanfredi $
+#
+# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+#
+# You may redistribute only under the terms of the Artistic Licence,
+# as specified in the README file that comes with the distribution.
+# You may reuse parts of this distribution only within the terms of
+# that same Artistic Licence; a copy of which may be found at the root
+# of the source tree for dist 4.0.
+#
+# $X-Log: Jmakefile,v $
+# Revision 3.0.1.2 1995/07/25 13:29:41 ram
+# patch56: re-ordered macros, moving the install at the end
+#
+# Revision 3.0.1.1 1994/01/24 13:42:41 ram
+# patch16: added dependency generation stage
+#
+# Revision 3.0 1993/08/18 12:03:53 ram
+# Baseline for dist 3.0 netwide release.
+#
+
+all::
+
+depend:: sub_depend
+
+sub_depend::
+ @case '${MFLAGS}' in *[ik]*) set +e;; esac; \
+ for i in $(SUBDIRS) ;\
+ do \
+ (cd $$i ; echo "Depending" "in $(DIR)$$i..."; \
+ $(MAKE) $(MFLAGS) depend) || exit 1; \
+ done
+
+local_clobber::
+ $(RM) install
+
+local_install.man:: dist.man
+ @case '${MFLAGS}' in *[i]*) set +e;; esac; \
+ (set -x; test -d $(INSTALL_PREFIX)$(MANSRC) || \
+ $(INSTALLDIR) $(INSTALL_PREFIX)$(MANSRC)); \
+ $(INSTALL) -c -m 444 dist.man $(INSTALL_PREFIX)$(MANSRC)/dist.$(L)
+
+local_deinstall.man::
+ $(RM) $(INSTALL_PREFIX)$(MANSRC)/dist.$(L)
+
+all:: revision.h
+
+.FORCE:
+
+revision.h: .FORCE
+ $(TOP)/bin/svn-revision $(TOP) $@
+
+########################################################################
+# Common rules for all Makefiles -- do not edit
+
+all::
+
+clean: sub_clean local_clean
+realclean: sub_realclean local_realclean
+clobber: sub_clobber local_clobber
+
+local_clean::
+ if test -f core; then $(RM) core; fi
+ $(RM) *~ *.o
+
+local_realclean:: local_clean
+ $(RM) -r UU
+
+local_clobber:: local_realclean
+ $(RM) config.sh config.h
+ $(RM) -r .config
+ $(RM) Makefile
+
+install:: local_install sub_install
+ @exit 0
+
+install.man:: maybe_install.man sub_install.man
+deinstall:: sub_deinstall local_deinstall
+deinstall.man:: sub_deinstall.man maybe_deinstall.man
+
+install.man-yes: local_install.man
+install.man-no:
+deinstall.man-yes: local_deinstall.man
+deinstall.man-no:
+
+!NO!SUBS!
+case "$installmansrc" in
+'') man=no;;
+*) man=yes;;
+esac
+$spitshell >>Makefile <<!GROK!THIS!
+maybe_install.man: install.man-$man
+maybe_deinstall.man: deinstall.man-$man
+!GROK!THIS!
+$spitshell >>Makefile <<'!NO!SUBS!'
+
+Makefile.SH: Jmakefile
+ -@if test -f $(TOP)/.package; then \
+ if test -f Makefile.SH; then \
+ echo " $(RM) Makefile.SH~; $(MV) Makefile.SH Makefile.SH~"; \
+ $(RM) Makefile.SH~; $(MV) Makefile.SH Makefile.SH~; \
+ fi; \
+ echo " $(JMAKE) -DTOPDIR=$(TOP) -DCURDIR=$(CURRENT)" ; \
+ $(JMAKE) -DTOPDIR=$(TOP) -DCURDIR=$(CURRENT) ; \
+ else touch $@; fi
+
+Makefile: Makefile.SH
+ /bin/sh Makefile.SH
+
+tags::
+ $(CTAGS) -w *.[ch]
+ $(CTAGS) -xw *.[ch] > tags
+
+local_clobber::
+ $(RM) tags
+
+depend::
+
+########################################################################
+# Rules for building in sub-directories -- do not edit
+
+subdirs:
+ @case '${MFLAGS}' in *[ik]*) set +e;; esac; \
+ for i in $(SUBDIRS) ;\
+ do \
+ (cd $$i ; echo $(VERB) "in $(DIR)$$i..."; \
+ $(MAKE) $(MFLAGS) $(FLAGS) $(TARGET)) || exit 1; \
+ done
+
+sub_install::
+ @$(MAKE) subdirs TARGET=install VERB="Installing" FLAGS=
+
+sub_deinstall::
+ @$(MAKE) subdirs TARGET=deinstall VERB="Deinstalling" FLAGS=
+ @echo "Back to $(CURRENT) for "deinstall...
+
+sub_install.man::
+ @$(MAKE) subdirs TARGET=install.man VERB="Installing man pages" FLAGS=
+
+sub_deinstall.man::
+ @$(MAKE) subdirs TARGET=deinstall.man VERB="Deinstalling man pages" FLAGS=
+ @echo "Back to $(CURRENT) for "deinstall.man...
+
+sub_clean::
+ @$(MAKE) subdirs TARGET=clean VERB="Cleaning" FLAGS=
+ @echo "Back to $(CURRENT) for "clean...
+
+sub_realclean::
+ @$(MAKE) subdirs TARGET=realclean VERB="Real cleaning" FLAGS=
+ @echo "Back to $(CURRENT) for "realclean...
+
+sub_clobber::
+ @$(MAKE) subdirs TARGET=clobber VERB="Clobbering" FLAGS=
+ @echo "Back to $(CURRENT) for "clobber...
+
+tag::
+ @case '${MFLAGS}' in *[ik]*) set +e;; esac; \
+ for i in $(SUBDIRS) ;\
+ do \
+ (cd $$i ; echo "Tagging" "in $(DIR)$$i..."; \
+ $(MAKE) $(MFLAGS) tag) || exit 1; \
+ done
+
+Makefiles::
+ @case '${MFLAGS}' in *[ik]*) set +e;; esac; \
+ for i in $(SUBDIRS);\
+ do \
+ echo "Making "Makefiles" in $(DIR)$$i..."; \
+ (cd $$i || exit 1; \
+ if test ! -f Makefile; then /bin/sh Makefile.SH; fi; \
+ $(MAKE) $(MFLAGS) Makefiles) || exit 1;\
+ done
+
+Makefiles.SH:: Makefile.SH
+ @case '${MFLAGS}' in *[ik]*) set +e;; esac; \
+ for i in $(SUBDIRS);\
+ do \
+ case "$(DIR)$$i/" in \
+ */*/*/*/) newtop=../../../..;; \
+ */*/*/) newtop=../../..;; \
+ */*/) newtop=../..;; \
+ */) newtop=..;; \
+ esac; \
+ case "$(TOP)" in \
+ /*) newtop="$(TOP)" ;; \
+ esac; \
+ echo "Making Makefiles.SH in $(DIR)$$i..."; \
+ (cd $$i || exit 1; \
+ if test -f Jmakefile; then \
+ $(MAKE) $(MFLAGS) -f ../Makefile \
+ Makefile TOP=$$newtop CURRENT=$(DIR)$$i && \
+ $(MAKE) $(MFLAGS) Makefiles.SH; \
+ fi; \
+ ) || exit 1; \
+ done
+
+all::
+ @$(MAKE) subdirs TARGET=all VERB="Making all" FLAGS=
+
+local_install::
+local_deinstall::
+local_install.man::
+local_deinstall.man::
+
+!NO!SUBS!
+chmod 644 Makefile
+$eunicefix Makefile
+
diff --git a/README b/README
new file mode 100644
index 0000000..86f250a
--- /dev/null
+++ b/README
@@ -0,0 +1,138 @@
+ dist 4.0
+ ** Alpha version **
+
+ Copyright (c) 1988, Larry Wall
+ Copyright (c) 1990-1992, Harlan Stenn
+ Copyright (c) 1991-1997, Raphael Manfredi
+ Copyright (c) 2004-2006, Raphael Manfredi
+
+------------------------------------------------------------------------
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the Artistic License, a copy of which can be
+ found with this package.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ Artistic License for more details.
+------------------------------------------------------------------------
+
+This version of dist requires you to have at least perl 4.0 PL36.
+It has also been ported to work with perl 5.0 PL0, provided you have
+at least integrated patches 0a-0h, issued by Andy Dougherty and made
+available at the following ftp sites:
+
+ ftp.demon.co.uk:/pub/perl/db/perl5.000-p0a-p0h.tar.gz
+ ftp.funet.fi:/pub/languages/perl/ports/perl5/perl5.000-p0a-p0h.tar.gz
+
+Please read all the directions below before you proceed any further, and
+then follow them carefully.
+
+After you have unpacked your kit, you should have all the files listed
+in MANIFEST.
+
+========================================================================
+ It's not the way I wrote it, but the
+ way you play it makes it sound a lot better.
+ -- Camille Saint-Saens (French composer)
+
+The dist package consists of four parts:
+
+ 1) The Configure generator (metaconfig) and its supporting files.
+ 2) The distribution kit maker (makedist) and its supporting files.
+ 3) The patch distribution system (pat*) and its supporting files.
+ 4) The Makefile generator (jmake) and its supporting files.
+
+Each of these can be used separately from the others. Before you can
+use any of those, however, the directory containing your package (not this
+package) must be initialized by putting a .package file into it. This
+can be done by running packinit in that directory.
+
+There is a mailing list hosted in Japan and set up by Shigeya Suzuki
+<shigeya@foretune.co.jp>, for discussion about the dist package as a
+whole. It's a good place to ask questions (or answer them) and to
+send your patches. I will post official patches to the net, as well
+as to the dist-users list.
+
+To send a mail to the list, address it to <dist-users@foretune.co.jp>.
+To subscribe, send a mail to <majordomo@foretune.co.jp>. If you don't
+know how to use majordomo, the syntax of the subscribe command is:
+
+ subscribe dist-users [address]
+
+where the address part is optional. You may unsubscribe automatically
+at any time by sending:
+
+ unsubscribe dist-users
+
+If you have a problem with this version of dist, it is recommended that
+you subscribe to the list, then send a description of your problem to it.
+If you send mail to me personally, I may not be able to answer in a
+timely fashion.
+
+This mailing list has low traffic (a few articles per week, typically),
+and it is expected to remain so, with a high signal/noise ratio.
+
+Notes:
+
+ If you are running on a system with <= 14 char filenames, don't
+ distribute any files with filenames longer than 12 chars (with the
+ exception of patchlevel.h), so that there will be room for a
+ 2-digit extension indicating patch number in your bugs direcory.
+ This includes .SH files, so any shell script built by a .SH file
+ should be 9 characters or less. On systems with flexfilenames you
+ don't have to worry about it.
+
+ This package has been designed on top of dist 2.0, which has been
+ written by Larry Wall <lwall@netlabs.com>.
+========================================================================
+
+INSTALLATION
+
+1) Run Configure. This will figure out various things about your
+system. After it has completed, it will produce config.h and config.sh.
+
+You might possibly have to trim # comments from the front of Configure
+if your shell doesn't handle them, but all other comments will be taken
+care of.
+
+2) Run make.
+
+3) If make succeeded, you may wish to do "make install install.man". Be
+sure your rights are correct (if you install manual pages, you may need
+super-user privileges). By not running "make install.man", you avoid the
+installation of the manual pages.
+
+4) Read the manual entry before running.
+
+5) IMPORTANT! Communicate any problem and suggested patches to me,
+Raphael.Manfredi@pobox.com (Raphael Manfredi), so we can keep this
+distribution in sync. If you have a problem, there will be someone else
+who had it or will have it too...
+
+If possible, send me patches such that the patch program will apply
+them. Context diffs are the best, then normal diffs. Do not send ed
+scripts, I have probably changed my copy since the version you got.
+
+6) After everything is installed, you can do make clobber. This will
+clean up everything and let you re-distribute this kit, without
+carrying useless files. You should keep this distribution intact, so
+that future patches will be applyable.
+
+7) I have an automatic patch sender. Send me the following mail:
+
+ Subject: Command
+ @SH mailhelp PATH
+
+and you'll get instructions (PATH stands for YOUR e-mail address, either
+in INTERNET or in bang notation). I would recommend you to get all the
+issued patches before you start making some modifications on this
+package.
+
+8) If you wish to deinstall the package, you may run "make deinstall".
+A separate "make deinstall.man" will remove the manual pages. Be sure
+the makefiles are correctly set before running any deinstall target.
+On USG systems, some executable have a chance to remain despite the
+deinstall (text file busy...).
+
+ Raphael Manfredi <Raphael_Manfredi@grenoble.hp.com>
diff --git a/Wishlist b/Wishlist
new file mode 100644
index 0000000..81bbb8c
--- /dev/null
+++ b/Wishlist
@@ -0,0 +1,60 @@
+*** List of wishes for dist version 3.0 ***
+
+=======================================================================
+If you wish to implement one of the following, you're welcome :-). In
+that case, please let me know about it. I will probably integrate your
+changes in my version (after some sanity checks, because I can't
+maintain something I don't understand).
+
+This list has no priority order whatsoever, so you may pick up one of
+the following suggestion and start working on it. In that case, you
+may want to get all the official patches for dist 3.0 first and make
+sure nobody is already working on that topic.
+=======================================================================
+
+*** jmake
+
+Make the names used more uniform. For instance, 'Simple' appears in
+many rules, but with different meanings, thus making the Jmakefile
+harder to understand at a first glance.
+
+Allow per-system compilation rules, so that objects and source file
+do not inter-mix but are kept in separate directories.
+
+*** metaconfig
+
+Write some "generic" templates for writing new units, so that the user
+only needs to fill up some fields. For instance, there could be a
+template for d_* and i_* units. [That's done, they are under mcon/files.
+Now I only need to write the generator on top of them]
+
+Make Configure know about cross-compiling.
+
+Make Configure know about VPATH for separate object directory, with
+proper support from jmake.
+
+Implement the ?I: and ?L: lines. The ?I: fills in inclwanted for you,
+while ?L: fills in the libswanted variable. For instance, when using
+a socket() call, one may need to look at -lbsd. If d_socket.U lists
+'bsd' within its ?L: line, then the libswanted variable will be
+correctly set. [Note: there are some hooks for this already]
+
+Build a library of PD routines that may be otherwise missing on
+some older systems, eg: getopt(). Those routines will be automagically
+added to the package by relying on ?P: lines, something like:
+
+ ?P:getopt (HAS_GETOPT): getopt.c
+
+which would include getopt.c in the package (under some PD dir)
+when getopt is used and HAS_GETOPT is *not* used within the sources,
+in order to achieve transparent implementation.
+
+*** metalint
+
+Process '@' pre-processor lines, and signal mismatches, unrecognized
+commands, etc... Also warn when testing wantedness of unknown symbols
+or obsolete ones, etc...
+
+*** pat tools
+
+Clean that stuff.
diff --git a/bin/Jmakefile b/bin/Jmakefile
new file mode 100644
index 0000000..0f13799
--- /dev/null
+++ b/bin/Jmakefile
@@ -0,0 +1,42 @@
+/*
+ * Jmakefile for bin subdirectory.
+ */
+
+;# $Id$
+;#
+;# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+;#
+;# You may redistribute only under the terms of the Artistic Licence,
+;# as specified in the README file that comes with the distribution.
+;# You may reuse parts of this distribution only within the terms of
+;# that same Artistic Licence; a copy of which may be found at the root
+;# of the source tree for dist 4.0.
+;#
+;# $Log: Jmakefile,v $
+;# Revision 3.0.1.1 1994/01/24 13:42:53 ram
+;# patch16: added dependency generation stage
+;#
+;# Revision 3.0 1993/08/18 12:04:00 ram
+;# Baseline for dist 3.0 netwide release.
+;#
+
+BINPL = packinit manilist
+BIN = manicheck $(BINPL)
+
+ShellScriptTarget($(BIN))
+
+BINSH = \
+|expand f!$(BINPL)!
+ !f.SH \
+-expand \\
+
+depend:: local_depend
+local_depend::
+ ($(SED) '/^# DO NOT DELETE/q' Makefile && \
+ grep '^\$$grep' $(BINSH) | \
+ $(SED) -e "s/^.*' \([^ ]*\) >>[ ]*\([^ ]*\)/\2: \1/" \
+ ) > Makefile.new
+ cp Makefile Makefile.bak
+ cp Makefile.new Makefile
+ $(RM) Makefile.new
+
diff --git a/bin/Makefile.SH b/bin/Makefile.SH
new file mode 100755
index 0000000..89aaec1
--- /dev/null
+++ b/bin/Makefile.SH
@@ -0,0 +1,241 @@
+: Makefile.SH generated from Jmake.tmpl and Jmakefile [jmake 3.5-43]
+: $X-Id: Jmake.tmpl 47 2010-11-28 22:23:13Z rmanfredi $
+
+case $CONFIG in
+'')
+ if test -f config.sh; then TOP=.;
+ elif test -f ../config.sh; then TOP=..;
+ elif test -f ../../config.sh; then TOP=../..;
+ elif test -f ../../../config.sh; then TOP=../../..;
+ elif test -f ../../../../config.sh; then TOP=../../../..;
+ else
+ echo "Can't find config.sh."; exit 1
+ fi
+ . $TOP/config.sh
+ ;;
+esac
+case "$0" in
+*/*) cd `expr X$0 : 'X\(.*\)/'` ;;
+esac
+CURRENT=bin
+DIR=`echo $CURRENT/ | sed -e 's/\.\///g'`
+echo "Extracting ${DIR}Makefile (with variable substitutions)"
+
+INSTALL=`echo $install | sed -e 's,\./i,\$(TOP)/i,'`
+INSTALLDIR=`echo $installdir | sed -e 's,\./i,\$(TOP)/i,'`
+DATE=`date`
+
+$spitshell >Makefile <<!GROK!THIS!
+########################################################################
+# Makefile generated from Makefile.SH on $DATE
+
+SHELL = /bin/sh
+JMAKE = jmake
+TOP = ..
+CURRENT = $CURRENT
+DIR = $DIR
+INSTALL = $INSTALL
+INSTALLDIR = $INSTALLDIR
+
+########################################################################
+# Parameters set by Configure -- edit config.sh if changes are needed
+
+CTAGS = ctags
+JCPPFLAGS = $cppflags
+L = $manext
+MANSRC = $installmansrc
+MV = $mv
+RM = $rm -f
+SCRIPTDIR = $installscript
+SED = $sed
+
+########################################################################
+# Automatically generated parameters -- do not edit
+
+SCRIPTS = \$(BIN)
+
+!GROK!THIS!
+$spitshell >>Makefile <<'!NO!SUBS!'
+########################################################################
+# Jmake rules for building libraries, programs, scripts, and data files
+# $X-Id: Jmake.rules 18 2006-12-27 10:35:09Z rmanfredi $
+
+########################################################################
+# Start of Jmakefile
+
+# $X-Id: Jmakefile 48 2010-11-28 23:05:09Z rmanfredi $
+#
+# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+#
+# You may redistribute only under the terms of the Artistic Licence,
+# as specified in the README file that comes with the distribution.
+# You may reuse parts of this distribution only within the terms of
+# that same Artistic Licence; a copy of which may be found at the root
+# of the source tree for dist 4.0.
+#
+# $X-Log: Jmakefile,v $
+# Revision 3.0.1.1 1994/01/24 13:42:53 ram
+# patch16: added dependency generation stage
+#
+# Revision 3.0 1993/08/18 12:04:00 ram
+# Baseline for dist 3.0 netwide release.
+#
+
+BINPL = packinit manilist
+BIN = manicheck $(BINPL)
+
+all:: $(BIN)
+
+local_realclean::
+ $(RM) $(BIN)
+
+manicheck: manicheck.SH
+ /bin/sh manicheck.SH
+
+packinit: packinit.SH
+ /bin/sh packinit.SH
+
+manilist: manilist.SH
+ /bin/sh manilist.SH
+
+
+local_install:: $(SCRIPTS) $(LSCRIPTS)
+ @case '${MFLAGS}' in *[i]*) set +e;; esac; \
+ (set -x; test -d $(INSTALL_PREFIX)$(SCRIPTDIR) || \
+ $(INSTALLDIR) $(INSTALL_PREFIX)$(SCRIPTDIR)); \
+ for file in $(SCRIPTS) $(LSCRIPTS); do \
+ (set -x; \
+ $(INSTALL) -c -m 555 $$file $(INSTALL_PREFIX)$(SCRIPTDIR)) || \
+ exit 1; \
+ done
+
+local_deinstall::
+ @for file in $(SCRIPTS) $(LSCRIPTS); do \
+ case '${MFLAGS}' in *[i]*) set +e;; esac; \
+ (set -x; $(RM) $(INSTALL_PREFIX)$(SCRIPTDIR)/$$file); \
+ done
+
+local_install.man::
+ @case '${MFLAGS}' in *[i]*) set +e;; esac; \
+ (set -x; test -d $(INSTALL_PREFIX)$(MANSRC) || \
+ $(INSTALLDIR) $(INSTALL_PREFIX)$(MANSRC)); \
+ for file in $(SCRIPTS); do \
+ if test -f $$file.man; then \
+ (set -x; \
+ $(INSTALL) -c -m 444 $$file.man \
+ $(INSTALL_PREFIX)$(MANSRC)/$$file.$(L)) || \
+ exit 1; \
+ fi; \
+ done
+
+local_deinstall.man::
+ case '${MFLAGS}' in *[i]*) set +e;; esac; \
+ for file in $(SCRIPTS); do \
+ (set -x; $(RM) $(INSTALL_PREFIX)$(MANSRC)/$$file.$(L)); \
+ done
+
+BINSH = \
+ packinit.SH \
+ manilist.SH
+
+depend:: local_depend
+local_depend::
+ ($(SED) '/^# DO NOT DELETE/q' Makefile && \
+ grep '^\$$grep' $(BINSH) | \
+ $(SED) -e "s/^.*' \([^ ]*\) >>[ ]*\([^ ]*\)/\2: \1/" \
+ ) > Makefile.new
+ cp Makefile Makefile.bak
+ cp Makefile.new Makefile
+ $(RM) Makefile.new
+
+########################################################################
+# Common rules for all Makefiles -- do not edit
+
+all::
+
+clean: local_clean
+realclean: local_realclean
+clobber: local_clobber
+
+local_clean::
+ if test -f core; then $(RM) core; fi
+ $(RM) *~ *.o
+
+local_realclean:: local_clean
+
+local_clobber:: local_realclean
+ $(RM) Makefile config.sh
+
+install:: local_install
+install.man:: maybe_install.man
+deinstall:: local_deinstall
+deinstall.man:: maybe_deinstall.man
+
+install.man-yes: local_install.man
+install.man-no:
+deinstall.man-yes: local_deinstall.man
+deinstall.man-no:
+
+!NO!SUBS!
+case "$installmansrc" in
+'') man=no;;
+*) man=yes;;
+esac
+$spitshell >>Makefile <<!GROK!THIS!
+maybe_install.man: install.man-$man
+maybe_deinstall.man: deinstall.man-$man
+!GROK!THIS!
+$spitshell >>Makefile <<'!NO!SUBS!'
+
+Makefile.SH: Jmakefile
+ -@if test -f $(TOP)/.package; then \
+ if test -f Makefile.SH; then \
+ echo " $(RM) Makefile.SH~; $(MV) Makefile.SH Makefile.SH~"; \
+ $(RM) Makefile.SH~; $(MV) Makefile.SH Makefile.SH~; \
+ fi; \
+ echo " $(JMAKE) -DTOPDIR=$(TOP) -DCURDIR=$(CURRENT)" ; \
+ $(JMAKE) -DTOPDIR=$(TOP) -DCURDIR=$(CURRENT) ; \
+ else touch $@; fi
+
+Makefile: Makefile.SH
+ /bin/sh Makefile.SH
+
+tags::
+ $(CTAGS) -w *.[ch]
+ $(CTAGS) -xw *.[ch] > tags
+
+local_clobber::
+ $(RM) tags
+
+depend::
+
+########################################################################
+# Empty rules for directories with no sub-directories -- do not edit
+
+local_install::
+ @echo "install in $(CURRENT) done."
+
+local_deinstall::
+ @echo "deinstall in $(CURRENT) done."
+
+local_install.man::
+ @echo "install.man in $(CURRENT) done."
+
+local_deinstall.man::
+ @echo "deinstall.man in $(CURRENT) done."
+
+Makefiles::
+
+Makefiles.SH::
+
+########################################################################
+# Dependencies generated by make depend
+# DO NOT DELETE THIS LINE -- make depend relies on it
+
+# Put nothing here or make depend will gobble it up
+.FORCE_DEPEND::
+ @echo "You must run 'make depend' in $(TOP) first."; exit 1
+!NO!SUBS!
+chmod 644 Makefile
+$eunicefix Makefile
+
diff --git a/bin/manicheck.SH b/bin/manicheck.SH
new file mode 100755
index 0000000..a2ea9dd
--- /dev/null
+++ b/bin/manicheck.SH
@@ -0,0 +1,82 @@
+case $CONFIG in
+'')
+ if test -f config.sh; then TOP=.;
+ elif test -f ../config.sh; then TOP=..;
+ elif test -f ../../config.sh; then TOP=../..;
+ elif test -f ../../../config.sh; then TOP=../../..;
+ elif test -f ../../../../config.sh; then TOP=../../../..;
+ else
+ echo "Can't find config.sh."; exit 1
+ fi
+ . $TOP/config.sh
+ ;;
+esac
+case "$0" in
+*/*) cd `expr X$0 : 'X\(.*\)/'` ;;
+esac
+echo "Extracting bin/manicheck (with variable substitutions)"
+$spitshell >manicheck <<!GROK!THIS!
+$startsh
+!GROK!THIS!
+$spitshell >>manicheck <<'!NO!SUBS!'
+# $Id$
+#
+# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+#
+# You may redistribute only under the terms of the Artistic Licence,
+# as specified in the README file that comes with the distribution.
+# You may reuse parts of this distribution only within the terms of
+# that same Artistic Licence; a copy of which may be found at the root
+# of the source tree for dist 4.0.
+#
+# Original Author: Harlan Stenn <harlan@mumps.pfcs.com>
+#
+# $Log: manicheck.SH,v $
+# Revision 3.0.1.1 1993/08/19 06:41:51 ram
+# patch1: leading config.sh searching was not aborting properly
+#
+# Revision 3.0 1993/08/18 12:04:02 ram
+# Baseline for dist 3.0 netwide release.
+#
+
+find . ! -type d -print | sed -e '
+s|^./||
+/RCS\//d
+/UU\//d
+/core$/d
+/\.bak$/d
+/\.orig$/d
+' | sort > check.present
+
+manifest=''
+if test -r MANIFEST.new; then
+ manifest='MANIFEST.new'
+else
+ if test -r MANIFEST; then
+ manifest='MANIFEST'
+ else
+ echo "No MANIFEST.new or MANIFEST file--don't know what to look for."
+ fi
+fi
+
+awk '{print $1}' $manifest | sort > check.expected
+
+comm -23 check.expected check.present > check.want
+comm -13 check.expected check.present > check.extra
+
+rm -f check.expected check.present
+
+if test -s check.want; then
+ echo "Some files listed in $manifest are missing; see check.want."
+else
+ rm check.want
+fi
+
+if test -s check.extra; then
+ echo "Some files not listed in $manifest are present; see check.extra."
+else
+ rm check.extra
+fi
+!NO!SUBS!
+chmod 755 manicheck
+$eunicefix manicheck
diff --git a/bin/manicheck.man b/bin/manicheck.man
new file mode 100644
index 0000000..35087c8
--- /dev/null
+++ b/bin/manicheck.man
@@ -0,0 +1,51 @@
+''' $Id$
+'''
+''' Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+'''
+''' You may redistribute only under the terms of the Artistic Licence,
+''' as specified in the README file that comes with the distribution.
+''' You may reuse parts of this distribution only within the terms of
+''' that same Artistic Licence; a copy of which may be found at the root
+''' of the source tree for dist 4.0.
+'''
+''' $Log: manicheck.man,v $
+''' Revision 3.0 1993/08/18 12:04:02 ram
+''' Baseline for dist 3.0 netwide release.
+'''
+'''
+.TH MANICHECK 1 ram
+.SH NAME
+manicheck \- check manifest accuracy
+.SH SYNOPSIS
+.B manicheck
+.SH DESCRIPTION
+.I Manicheck
+compares the files listed in your MANIFEST.new (or MANIFEST if that file
+is not present) with the files within your distribution. It will report
+files listed in the manifest but not present or files missing from your
+manifest file.
+.SH FILES
+.I Manicheck
+produces the following temporary files:
+.TP 20
+.PD 0
+check.expected
+lists filenames from manifest
+.TP
+check.present
+lists all potential source files
+.PD
+.PP
+If MANIFEST is not 100% accurate, the following files may be created:
+.TP 20
+.PD 0
+check.extra
+files not listed in manifest
+.TP
+check.want
+files missing from manifest
+.PD
+.SH AUTHOR
+Harlan Stenn <harlan@mumps.pfcs.com>
+.SH "SEE ALSO"
+manifake(1), makedist(1), manilist(1).
diff --git a/bin/manilist.SH b/bin/manilist.SH
new file mode 100755
index 0000000..85c7b21
--- /dev/null
+++ b/bin/manilist.SH
@@ -0,0 +1,483 @@
+case $CONFIG in
+'')
+ if test -f config.sh; then TOP=.;
+ elif test -f ../config.sh; then TOP=..;
+ elif test -f ../../config.sh; then TOP=../..;
+ elif test -f ../../../config.sh; then TOP=../../..;
+ elif test -f ../../../../config.sh; then TOP=../../../..;
+ else
+ echo "Can't find config.sh."; exit 1
+ fi
+ . $TOP/config.sh
+ ;;
+esac
+case "$0" in
+*/*) cd `expr X$0 : 'X\(.*\)/'` ;;
+esac
+echo "Extracting bin/manilist (with variable substitutions)"
+$spitshell >manilist <<!GROK!THIS!
+$startperl
+ eval 'exec perl -S \$0 \${1+"\$@"}'
+ if \$running_under_some_shell;
+
+# $Id$
+#
+# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+#
+# You may redistribute only under the terms of the Artistic Licence,
+# as specified in the README file that comes with the distribution.
+# You may reuse parts of this distribution only within the terms of
+# that same Artistic Licence; a copy of which may be found at the root
+# of the source tree for dist 4.0.
+#
+# $Log: manilist.SH,v $
+# Revision 3.0.1.3 1994/10/29 15:42:42 ram
+# patch36: fixed open precedence problem for perl5
+#
+# Revision 3.0.1.2 1994/01/24 13:52:33 ram
+# patch16: added ~/.dist_profile awareness
+#
+# Revision 3.0.1.1 1993/08/19 06:41:52 ram
+# patch1: leading config.sh searching was not aborting properly
+#
+# Revision 3.0 1993/08/18 12:04:03 ram
+# Baseline for dist 3.0 netwide release.
+#
+
+\$version = '$VERSION';
+\$pl = '$PATCHLEVEL';
+!GROK!THIS!
+$spitshell >>manilist <<'!NO!SUBS!'
+
+# This script scans the MANIFEST.new file and builds some reports.
+
+# The output can be somewhat changed to produce other kind of reports.
+# The format is specified with a leading set of activation character, followed
+# by a ':', and then a set of formatting macros. The leading characters tell
+# when a report line shall be issued:
+# a: all files (shortcut for 'ix')
+# A: all files but the excluded ones
+# f: report for files only
+# d: report for directories only
+# m: report for files/directories found in the MANIFEST.new
+# n: report for files/directories not found in the MANIFEST.new
+# i: included files are listed
+# x: excluded files are listed
+# Then a set of macros introduced by %:
+# %c: the leading one character code defined as follows:
+# . if the file is up to date (i.e. not newer than patchlevel.h)
+# - if the file is present in the manifest but is missing
+# > if the file has changed since last patch.
+# + if the file is not present in the manifest but exists
+# o if the file is not listed but exists and is older than patchlevel.h
+# x if the file in manifest and exists but was excluded
+# ? if the file in manifest but was excluded and does not exist
+# %n: the name of the file (its path from the top directory)
+# %t: time stamp of last modification
+# %d: description from MANIFEST.new file, if any
+# %s: size of the file, in bytes
+
+$format = 'A:%c %n';
+
+# By default, only the source files whith the following extensions are reported
+# (but a -a option will report ALL the files, and a -i option can specify some
+# other extensions as well).
+# .sh .SH .c .h .l .y .man
+
+@include = ('.sh', '.SH', '.c', '.h', '.l', '.y', '.man');
+
+# By default, the following extensions are excluded from the list. More
+# exclusions can be added with the -x option:
+# ^core .o .bak .rej .new .old .orig ,v
+
+@exclude = ('^core', '.o', '.bak', '.rej', '.new', '.old', '.orig', ',v');
+
+# The column separator character (or string) is used to separate each formatted
+# column on the output. Formatting is requested by adding a '|' character in
+# the format string. A new separator can be specified via the -C option.
+# The maximum column size is fixed by the -L.
+
+$col_separator = ' ';
+$col_size = '';
+
+&profile; # Read ~/.dist_profile
+require 'getopts.pl';
+require 'stat.pl';
+&usage unless &Getopts('abcdhntVi:f:p:s:w:x:C:L:I:X:');
+
+&usage if $opt_h;
+if ($opt_V) {
+ print "manilist $version PL$pl\n";
+ exit 0;
+}
+
+# Go to the top of the package, and update any file name given as argument
+# by prepending the needed path. The process then performs a chdir to the
+# top.
+unless ($opt_b) {
+ chop($pwd = `pwd`) unless -f '.package';
+ until (-f '.package') {
+ die "No .package file! Run packinit.\n" unless $pwd;
+ chdir '..' || die "Can't cd ..\n";
+ $pwd =~ s|(.*)/(.*)|$1|;
+ $prefix = $2 . '/' . $prefix;
+ }
+ if ($prefix) {
+ for (@ARGV) {
+ s/^\.$/$prefix/ && next;
+ s/^/$prefix/ unless m|^[-/]|;
+ }
+ }
+}
+
+# We now are at the top level
+
+# Build up the file hierarchy filter in @filter
+foreach $entry (@ARGV) {
+ $entry =~ s|/$||; # Remove final / in directory names
+ if (-d $entry) {
+ push(@filter, "d:$entry");
+ } elsif (-f $entry) {
+ push(@filter, "f:$entry");
+ } else {
+ die "$entry: No such file or directory.\n";
+ }
+}
+
+$prefix = '.' unless $prefix;
+($top = $prefix) =~ s|/$||;
+$top = '.' if $opt_t; # Start from top, not from original dir
+@ARGV = ($top) unless @ARGV;
+
+if ($opt_n) { # "manifest" files are found by scanning the directory
+ open(MANIFEST, "find @ARGV -print|") || die "Can't run find: $!\n";
+ while (<MANIFEST>) {
+ chop;
+ s|^./||;
+ push(@manifest, $_);
+ }
+ close MANIFEST;
+} else {
+ $MANIFEST = $opt_f;
+ $MANIFEST = 'MANIFEST.new' unless $opt_f;
+ open(MANIFEST, $MANIFEST) || die "Can't open $MANIFEST: $!\n";
+ while (<MANIFEST>) {
+ chop;
+ s|^./||;
+ s|^(\S+)||;
+ local($name) = $1;
+ push(@manifest, $name);
+ m|^\s+(\d+)*\s*(.*)| && ($comment{$name} = $2);
+ }
+ close MANIFEST;
+}
+
+# If we have to compare the files in the MANIFEST with the actual files on
+# the file system, then grab them...
+if ($opt_c && !$opt_n) {
+ open(FILES, "find @ARGV -print|") || die "Can't run find: $!\n";
+ while (<FILES>) {
+ chop;
+ s|^./||;
+ push(@files, $_);
+ }
+ close FILES;
+}
+
+# If there is a patchlevel.h file, get its time stamp.
+$pl_mtime = 0;
+$pl_mtime = (stat('patchlevel.h'))[$ST_MTIME] if -f 'patchlevel.h';
+
+# Dealing with command-line options
+$format = $opt_p if $opt_p;
+$col_separator = $opt_C if $opt_C;
+$col_size = $opt_L if $opt_L;
+unless ($opt_p) { # -p may be used as a shortcut for -w and -s
+ local($which) = ($format =~ /^(\w+):/);
+ local($string) = ($format =~ /^\w+:(.*)/);
+ $which = $opt_w if $opt_w;
+ $string = $opt_s if $opt_s;
+ $format = "$which:$string";
+}
+@include = split(' ', $opt_I) if $opt_I; # First reset included with -I
+@exclude = split(' ', $opt_X) if $opt_X; # and excluded with -X
+push(@include, split(' ', $opt_i)) if $opt_i; # before applying additions
+push(@exclude, split(' ', $opt_x)) if $opt_x;
+&mode_opt; # Compute $mode_xxx variables
+&init_functions; # Compile &included and &excluded
+
+# Option -d requests dumping of inclusion and exclusion lists on stderr
+if ($opt_d) {
+ print STDERR "Included: ", join(' ', @include), "\n";
+ print STDERR "Excluded: ", join(' ', @exclude), "\n";
+}
+
+@manifest = sort @manifest;
+@files = sort @files if defined(@files);
+
+# Build up the %manifest array so that we quickly know whether a file is in the
+# manifest or not.
+foreach (@manifest) {
+ ++$manifest{$_};
+}
+
+# Now loop other the files held in @manifest and perform your job...
+foreach $mani (@manifest) {
+ if ($opt_c && !$opt_n) { # Check MANIFEST with actual files on disk
+ for (;;) {
+ $disk = $files[0]; # Next file coming up
+ last unless $disk;
+ last if $disk gt $mani; # Past the current point
+ shift(@files); # Remove the file from list
+ last if $disk eq $mani; # Reached the manifest point
+ # This means the file is before the current MANIFEST point
+ &report($disk); # File exists and not in MANIFEST
+ }
+ }
+ &report($mani);
+}
+
+&flush_report; # Flush the @Report array if formatting is needed
+
+# Print usage and exit with a non-zero status
+sub usage {
+ print STDERR <<EOH;
+Usage: manilist [-abcdhnptV] [-i ext] [-f manifest] [-p format] [-s string]
+ [-w which] [-x ext] [-C separator] [-I included] [-L colsize]
+ [-X excluded] [files]
+ -a : report for all the files, regardless of (dis)allowed extensions.
+ -b : take current directory as base top (do not look for .package).
+ -c : check files against those in manifest and report differences.
+ -d : dump include and exclude lists on stderr.
+ -f : specify an alternate MANIFEST.new file.
+ -h : print this help message.
+ -i : specify a new extension to be included in the list of scanned files.
+ -n : do not use any MANIFEST file, rather scan directories for files.
+ -p : set new printing format (default is '$format'), shortcut for -s and -w.
+ -s : set string to be printed (with escapes) for each file on report.
+ -t : start from top directory, regardless of current dir.
+ -w : give leading letter(s) for printing format (file selection on report).
+ -x : give a new extension to be excluded from the list of scanned files.
+ -C : specify column separator (replaces '|' in format string).
+ -I : override default include list (space separated).
+ -L : specify maximum column size before truncation (',' separated).
+ -V : print version number.
+ -X : override default exclude list (space separated).
+EOH
+ exit 1;
+}
+
+# Set up $mode_xxx variables, where xxx is one of the options which may be set
+# in the printing mode. For instance, $mode_i is true if and only if 'i' is
+# mentionnned in the printing mode.
+sub mode_opt {
+ local($fmt) = $format;
+ $fmt =~ s/^(\w+)://;
+ local($mode) = $1;
+ $mode .= 'ix' if $mode =~ /a/;
+ local($mode_eval) = '';
+ foreach (split(//, $mode)) {
+ $mode_eval .= "\$mode_$_ = 1;"
+ }
+ eval $mode_eval;
+ chop($@) && die "Can't set mode variables: $@.\n";
+}
+
+# Write a report about a file, either on stdout or into @Report if some
+# formatting post-processing is needed (aligned on '|' characters in the
+# report format string).
+sub report {
+ local($file) = @_;
+ return unless &report_wanted($file);
+
+ local($fmt) = $format;
+ local($postproc) = 0; # Do we need formatting post-processing ?
+ $fmt =~ s/^\w+://;
+ $fmt =~ s/\|/\02/g && ($postproc = 1); # Formatted colum separator
+
+ # If neither 'd' nor 'f' is specified, then all the files are candidate
+ # for report. Specifying 'df' is the same, but is less efficient.
+ if (($mode_d || $mode_f) && -e $file) { # File exists on disk
+ return if -f _ && !$mode_f;
+ return if -d _ && !$mode_d;
+ }
+
+ # Mode 'm' and 'n', if present, respectively ask for a report when a file
+ # is in the manifest and when a file is not in the manifest. Not specifying
+ # any of those modes is the same as specifying both of them.
+ local($in_mani) = defined $manifest{$file};
+ if ($mode_m || $mode_n) {
+ return if $in_mani && !$mode_m;
+ return if !$in_mani && !$mode_n;
+ }
+
+ # Mode 'i' and 'x' are used to control included and excluded files. By
+ # default all the files not excluded are reported. Specifying 'x' also asks
+ # for excluded files. The 'i' restricts the report to included files.
+ local($included) = $mode_i ? &included($file) : 1;
+ local($excluded) = &excluded($file);
+ if (!$included || $excluded) {
+ return if !$mode_x && $excluded;
+ return if ($mode_i && !$included) && !$excluded;
+ }
+
+ local($c_macro);
+ local($mtime) = (stat($file))[$ST_MTIME];
+ if ($in_mani) { # File in MANIFEST
+ if (-e $file) { # And file exists
+ $c_macro = '.' if $mtime <= $pl_mtime;
+ $c_macro = '>' if $mtime > $pl_mtime;
+ $c_macro = 'x' if &excluded($file);
+ } else {
+ $c_macro = '-';
+ $c_macro = '?' if &excluded($file);
+ }
+ } else { # File not in MANIFEST
+ if (-e $file) { # And file exists
+ $c_macro = $mtime < $pl_mtime ? 'o' : '+';
+ } else {
+ return if -l $file;
+ warn "$file seems to have been removed...\n";
+ }
+ }
+
+ # Perform the macro substitution
+ $fmt =~ s/%%/\0/g; # Escape %%
+ $fmt =~ s/%/\01/g; # Transform %, in case substitution add some
+ $fmt =~ s/\01c/$c_macro/g; # %c is the code
+ $fmt =~ s/\01n/$file/g; # %n is the file name
+ $fmt =~ s/\01t/&fstamp/ge; # %t is the time stamp
+ $fmt =~ s/\01s/&fsize/ge; # %s is the file size, in bytes
+ $fmt =~ s/\01d/&mdesc/ge; # %d is the manifest description
+ $fmt =~ s/\01/%/g; # All other %'s are left undisturbed
+
+ print "$fmt\n" unless $postproc;
+ push(@Report, $fmt) if $postproc;
+}
+
+# Format and flush report on stdout. Columns are aligned on what was originally
+# a '|' character in the format string, translated into a ^B by the reporting
+# routine.
+sub flush_report {
+ return unless @Report; # Early return if nothing to be done
+ local(@length); # Stores maximum length for each field
+ local(@max); # Maximum allowed column sizes
+ local($i);
+ local($report);
+ local($len);
+ local(@fields);
+ @max = split(',', $col_size);
+ foreach $report (@Report) { # First pass: compute fields lengths
+ $i = 0;
+ foreach (split(/\02/, $report)) {
+ $len = length($_);
+ $length[$i] = $length[$i] < $len ? $len : $length[$i];
+ $i++;
+ }
+ }
+ for ($i = 0; $i < @length; $i++) { # Adapt to maximum specified length
+ $length[$i] = $max[$i] if $max[$i] > 0 && $length[$i] > $max[$i];
+ }
+ foreach $report (@Report) { # Second pass: formats each line
+ @fields = split(/\02/, $report);
+ $i = 0;
+ foreach (@fields) {
+ $len = length($_);
+ if ($max[$i] > 0 && $len > $max[$i]) {
+ $_ = substr($_, 0, $max[$i]); # Truncate field
+ } else {
+ $_ .= ' ' x ($length[$i] - $len); # Pad with blanks
+ }
+ $i++;
+ }
+ print join($col_separator, @fields), "\n";
+ }
+}
+
+# The following macro subsitution functions are called with $file set
+
+# Return the modification time on file
+sub fstamp {
+ (stat($file))[$ST_MTIME];
+}
+
+# Return the file size, in bytes
+sub fsize {
+ (stat($file))[$ST_SIZE];
+}
+
+# Return the description from the MANIFEST file, if any
+sub mdesc {
+ return '' unless defined $comment{$file};
+ $comment{$file};
+}
+
+# Do we have to report informations on the specified file?
+sub report_wanted {
+ return 1 unless @filter;
+ local($file) = @_;
+ local($filter);
+ foreach (@filter) {
+ $filter = $_; # Work on a copy
+ if ($filter =~ s/^d://) {
+ return 1 if $file =~ m|^$filter(/[^/]*)*|;
+ } else {
+ $filter =~ s/^f://;
+ return 1 if $filter eq $file;
+ }
+ }
+ return 0;
+}
+
+# Build up the 'included' and 'excluded' functions which return true if a file
+# is in the include or exclude set.
+sub init_functions {
+ &build_function('included', *include, 1);
+ &build_function('excluded', *exclude, 0);
+}
+
+# Build a function which returns true if a given name is found in the array
+# list of regular expression. Each regular expression is applied on the file
+# name, anchored at the end. False is returned only if none of the expressions
+# match. The purpose of building such a function dynamically is to avoid the
+# costly pattern recompilation every time.
+sub build_function {
+ local($name) = shift(@_); # The name of the function to be built
+ local(*array) = shift(@_); # The extension array we have to check with
+ local($dflt) = shift(@_); # Default value when -a is used
+ local($fn) = &q(<<EOF); # Function being built.
+:sub $name {
+: return $dflt if \$opt_a; # All files are included, none excluded.
+: local(\$_) = \@_;
+: study;
+EOF
+ foreach (@array) {
+ $ext = $_; # Work on a copy
+ # Convert shell-style globbing into perl's RE meta-characters
+ $ext =~ s/\./\\./g; # Escape .
+ $ext =~ s/\?/./g; # ? turns into .
+ $ext =~ s/\*/.*/g; # And * turns into .*
+ $fn .= &q(<<EOL);
+: return 1 if /$ext\$/;
+EOL
+ }
+ $fn .= &q(<<EOF);
+: 0; # None of the extensions can be applied to the file
+:}
+EOF
+ eval $fn;
+ chop($@) && die "Can't compile '$name':\n$fn\n$@.\n";
+}
+
+# Remove ':' quotations in front of the lines
+sub q {
+ local($_) = @_;
+ s/^://gm;
+ $_;
+}
+
+!NO!SUBS!
+$grep -v '^;#' ../pl/tilde.pl >> manilist
+$grep -v '^;#' ../pl/profile.pl >> manilist
+chmod 755 manilist
+$eunicefix manilist
diff --git a/bin/manilist.man b/bin/manilist.man
new file mode 100644
index 0000000..59db7a5
--- /dev/null
+++ b/bin/manilist.man
@@ -0,0 +1,332 @@
+''' $Id$
+'''
+''' Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+'''
+''' You may redistribute only under the terms of the Artistic Licence,
+''' as specified in the README file that comes with the distribution.
+''' You may reuse parts of this distribution only within the terms of
+''' that same Artistic Licence; a copy of which may be found at the root
+''' of the source tree for dist 4.0.
+'''
+''' $Log: manilist.man,v $
+''' Revision 3.0.1.3 1995/05/12 11:57:31 ram
+''' patch54: updated my e-mail address
+'''
+''' Revision 3.0.1.2 1994/01/24 13:52:55 ram
+''' patch16: typo fix
+'''
+''' Revision 3.0.1.1 1993/08/24 12:11:02 ram
+''' patch3: typo fix
+'''
+''' Revision 3.0 1993/08/18 12:04:04 ram
+''' Baseline for dist 3.0 netwide release.
+'''
+'''
+.TH MANILIST 1 ram
+.SH NAME
+manilist \- report status of files in a source directory
+.SH SYNOPSIS
+.B manilist
+[
+.B \-abcdhnptV
+] [
+.B \-i
+.I extension
+] [
+.B \-f
+.I manifest
+] [
+.B \-p
+.I format
+] [
+.B \-s
+.I string
+] [
+.B \-w
+.I which
+] [
+.B \-x
+.I extension
+] [
+.B \-C
+.I separator
+] [
+.B \-I
+.I included
+] [
+.B \-L
+.I colsize
+] [
+.B \-X
+.I excluded
+] [
+.I files or directories
+]
+.SH DESCRIPTION
+.I Manilist
+scans a source directory and produces a report on the status of each file:
+whether it is up-to-date or not with respect to
+.I patchlevel.h ,
+if it is missing from MANIFEST.new, and some other useful information which
+may be dynamically configured. It can be use to maintain a MANIFEST.new file,
+produce a detailed listing and status of a group of directories, etc... The
+rich set of options concur to make \fImanilist\fR a perfect low-level tool.
+.PP
+Under its simplest invocation form at the top level directory of a package,
+with no arguments, \fImanilist\fR will scan the MANIFEST.new and produce
+a report on the status of each file listed there. Each line starts with a
+single character flag which indicates the state of the file, followed by the
+name of the file.
+.PP
+What happens in fact is more complex than that. \fIManilist\fR scans the
+MANIFEST.new file and then loops over all the files listed there. Internally,
+\fImanilist\fR maintains an inclusion and an exclusion list, both specifying
+extensions for files. For instance, the inclusion list could be ('.c', '.h')
+and the exclusion ('.o', ',v') so that C sources are included and object
+or RCS files excluded. By default, all files but those excluded are used.
+Some other selections may be applied at this stage, as will be explained later
+on. For those files which pass this selection process, a report is issued
+according to a report \fIformat\fR, which by default is "\fIA:%c %n\fR".
+The letter \fIA\fR (or anything before the initial ':' character is the
+file selection specification we've been talking about. The remaining is the
+formatting, a string which is printed as-is, modulo some escape sequences.
+It so happens that \fI%c\fR is the character flag and \fI%n\fR is the name
+of the current file.
+.PP
+Generally speaking, \fImanilist\fR should be regarded as a tool which emits
+configurable reports on a set of files, selectively picking them among a list
+or by directly scanning the directories to see what's out there...
+.PP
+By specifying a set of directories or files as arguments on the command line,
+you restrict the scanning area, limiting to reports concerning those files
+or directories. If you do not specify any, manilist restricts its report to
+the current directory and its subdirectories, unless the \fB\-t\fR option is
+given.
+.SH OPTIONS
+.I Manilist
+recognizes the following options:
+.TP 15
+.B \-a
+Make a report for \fIall\fR the files, regardless of what is specified by
+the \fIincluded\fR and \fIexcluded\fR suffix lists.
+.TP
+.B \-b
+Assume current directory is the base (root) of the package tree. When this
+option is not specified, \fImanilist\fR will look for a \fI.package\fR file
+to indicate the root directory of the package (also called the top) and
+complain if it does not find it.
+.TP
+.B \-c
+Check files against those listed in MANIFEST.new (or whatever file specified
+via the \fB\-f\fR option) and report discrepancies via the \fI%c\fR macro.
+.TP
+.B \-d
+Dump included and excluded suffix lists on stderr, extensions being space
+separated. A good way to know the default lists is to run: \fImanilist
+\-f /dev/null \-bd.
+.TP
+.B \-f\fI manifest
+Specify an alternate manifest file, the default being to use MANIFEST.new.
+.TP
+.B \-h
+Print the usage help message and exit.
+.TP
+.B \-i\fI extensions
+Add new extensions to the included suffix list. The \fIextensions\fR argument
+must list the suffixes separated by spaces, as in \fB\-i\fI '.ph .pl'\fR to add
+both \fI.ph\fR and \fI.pl\fR to the existing suffixes. Note that the argument
+needs to be quoted to protect spaces against shell interpretation.
+.TP
+.B \-n
+Do not use any manifest file. Rather scan the directories and act as with all
+the files there were already listed in a manifest.
+.TP
+.B \-p\fI format
+Set the new printing format, which has the form \fIselection\fR:\fIstring\fR,
+with \fIselection\fR being a list of single letters specifying which files
+from the manifest are to be used for reports, and \fIstring\fR being a
+message to print as report, with some macro substitutions. It is also possible
+to have column formatting by specifying a '|' inside the string to delimit
+the different columns you wish to see. See also \fB\-C\fR and \fB\-L\fR for
+more formatting parameters.
+.TP
+.B \-s\fI string
+Specify the \fIstring\fR part of the printing format (see \fB\-p\fR for a
+general description of the \fIformat\fR). Available macros are listed further
+down the manual page.
+.TP
+.B \-t
+Start from the top directory (the root directory of the distribution) regardless
+of the current directory. There must be a \fI.package\fR file to indicate
+what the top directory is.
+.TP
+.B \-w\fI selection
+Specifiy the \fIselection\fR part of the printing format. Available selections
+will be discussed later.
+.TP
+.B \-x\fI extensions
+Add new extensions to the excluded suffix list. The \fIextensions\fR argument
+must list the suffixes separated by spaces, as in \fB\-x\fI '.s .p'\fR to add
+both \fI.s\fR and \fI.p\fR to the existing list. Note that the argument
+needs to be quoted to protect spaces against shell interpretation.
+.TP
+.B \-C\fI separator
+Give the column separator, which is to be used in place of the '|' character
+in the report format string. By default, it is a single space.
+.TP
+.B \-I\fI included
+Specify a new list of suffixes to be included in the reports. This overrides
+the original default list (whereas \fB\-i\fR is used to \fIadd\fR suffixes to
+the list). Suffixes must be space separated.
+.TP
+.B \-L\fI colsize
+When using column formatting (the '|' character being used to denote columns),
+this option may be used to specify the maximum column width, separating each
+width by a single ','. Leaving a width unspecified does not impose any limit
+on its width. For instance, if the format string is \fI%n|%d|%t\fR, one could
+limit the middle column (descriptions from MANIFEST.new) to 40 characters and
+the name column (first one) to 15 characters, leaving the last one with no
+imposed limits, by using \fB\-L\fI 15,40,\fR.
+.TP
+.B \-V
+Print version number and exit.
+.TP
+.B \-X\fI excluded
+Specify a new list of suffixes to be excluded in the reports. This overrides
+the original default list (whereas \fB\-x\fR is used to \fIadd\fR suffixes to
+the list). Suffixes must be space separated.
+.SH USING FORMATS
+The flexibility of \fImanilist\fR is brought by its use of a dynamic formatting
+string for providing its reports. It is possible to specify a format via the
+\fB\-p\fR option or just parts of it: the text string via \fB\-s\fR and the
+file selection with \fB\-w\fR.
+.SS "File Selection"
+.PP
+The leading part of the formatting string tells \fImanilist\fR which files you
+wish to see in the final report. Available selectors are:
+.sp
+.PD 0
+.TP 5
+.B A
+All the files but the excluded ones (i.e. those files whose suffix is listed
+in the exclusion list). This is the default action.
+.TP
+.B a
+All the files included and/or excluded (shortcut for \fIix\fR). Note that files
+which are neither included nor excluded will not appear in the report.
+.TP
+.B d
+Report only for directories.
+.TP
+.B f
+Report only for files.
+.TP
+.B i
+Only included files are listed.
+.TP
+.B m
+Only those files or directories found in the manifest are listed.
+.TP
+.B n
+Only those files or directories \fInot\fR found in the manifest are listed.
+.TP
+.B x
+Only excluded files are listed.
+.PD
+.PP
+When you specify more than one letter, the resulting report depends on the
+nature of the selection. For \fId\fR, \fIf\fR, \fIm\fR and \fIn\fR, a logical
+union is performed. This means specifying \fIfd\fR or \fImn\fR is the same
+as not specifying anything, but it's less efficient since \fImanilist\fR is
+forced to perform the checks it would otherwise bypass. The \fIi\fR and \fIx\fR
+selectors are special: by default, all the files not excluded are reported.
+Specifying \fIx\fR also asks for excluded files. Specifying \fIi\fR restricts
+the report to the included files. Using both at the same time (\fIix\fR) will
+force a report for files which are included or excluded.
+.SS "Macro Substitution"
+.PP
+The string part of the report format can make use of the following macros:
+.sp
+.PD 0
+.TP 5
+%c
+A character coding the status of the file.
+.TP
+%d
+Description from the manifest file, if any.
+.TP
+%n
+Name of the file (its path from the top directory).
+.TP
+%s
+Size of the file, in bytes.
+.TP
+%t
+Time stamp of the last modification.
+.PD
+.SS "File Status"
+.PP
+The \fI%c\fR macro, giving a single character coding the file status, can
+expand into one of the following.
+.PD 0
+.TP 5
+\&.
+The file is up to date (not newer than \fIpatchlevel.h\fR).
+.TP
+-
+The file is present in the manifest but is missing.
+.TP
+>
+The file has been modified since last patch (newer than \fIpatchlevel.h\fR).
+.TP
++
+The file exists but is not listed in the manifest.
+.TP
+o
+The file exists but is not listed in the manifest and is older than
+\fIpatchlevel.h\fR
+.TP
+x
+The file is listed in the manifest and exists, but has been excluded. Naturally,
+this will appear in the report only if the \fIx\fR selector is given in the
+report format.
+.TP
+?
+The file is listed in the manifest, does not exist, and was excluded.
+.PD
+.SH EXAMPLES
+The command
+.in +5
+.nf
+.sp
+\fImanilist -ct -p 'ni:%n'\fR
+.sp
+.fi
+.in -5
+will list all the source files from your distribution which are not listed
+in your MANIFEST.new file. Note that this includes only "source" files, that
+is to say files whose extension is listed in the inclusion list.
+If you do not wish this restriction, replace the formatting string with
+\fIn:%n\fR (only the excluded files will not appear).
+.PP
+To build an initial MANIFEST file, use:
+.in +5
+.nf
+.sp
+\fImanilist -n -p 'Af:%n' > MANIFEST\fR
+.sp
+.fi
+.in -5
+from the top directory. You will eventually want to fill in descriptions for
+each file listed in the manifest.
+.SH FILES
+.PD 0
+.TP 20
+MANIFEST.new
+Default manifest file, listing files and giving a small description for each
+of them.
+.PD
+.SH AUTHOR
+Raphael Manfredi <Raphael.Manfredi@pobox.com>
+.SH "SEE ALSO"
+manifake(1), makedist(1), pat(1).
diff --git a/bin/packinit.SH b/bin/packinit.SH
new file mode 100755
index 0000000..578b8d8
--- /dev/null
+++ b/bin/packinit.SH
@@ -0,0 +1,462 @@
+case $CONFIG in
+'')
+ if test -f config.sh; then TOP=.;
+ elif test -f ../config.sh; then TOP=..;
+ elif test -f ../../config.sh; then TOP=../..;
+ elif test -f ../../../config.sh; then TOP=../../..;
+ elif test -f ../../../../config.sh; then TOP=../../../..;
+ else
+ echo "Can't find config.sh."; exit 1
+ fi
+ . $TOP/config.sh
+ ;;
+esac
+case "$0" in
+*/*) cd `expr X$0 : 'X\(.*\)/'` ;;
+esac
+echo "Extracting bin/packinit (with variable substitutions)"
+cat >packinit <<!GROK!THIS!
+# feed this into perl
+ eval 'exec perl -S \$0 \${1+"\$@"}'
+ if \$running_under_some_shell;
+
+# $Id$
+#
+# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+#
+# You may redistribute only under the terms of the Artistic Licence,
+# as specified in the README file that comes with the distribution.
+# You may reuse parts of this distribution only within the terms of
+# that same Artistic Licence; a copy of which may be found at the root
+# of the source tree for dist 4.0.
+#
+# $Log: packinit.SH,v $
+# Revision 3.0.1.4 1997/02/28 14:55:14 ram
+# patch61: fixed one wrong ':' comment in .package
+#
+# Revision 3.0.1.3 1994/10/29 15:43:49 ram
+# patch36: added support for user-defined C and shell file extensions
+# patch36: now asks whether a ChangeLog file is to be managed
+#
+# Revision 3.0.1.2 1994/01/24 13:54:07 ram
+# patch16: can now configure mailing list knowledge from packinit
+#
+# Revision 3.0.1.1 1993/08/19 06:41:53 ram
+# patch1: leading config.sh searching was not aborting properly
+#
+# Revision 3.0 1993/08/18 12:04:05 ram
+# Baseline for dist 3.0 netwide release.
+#
+
+\$orgname='$orgname';
+\$myhostname='$myhostname';
+\$mydomain='$mydomain';
+\$nametype='$nametype';
+!GROK!THIS!
+cat >>packinit <<'!NO!SUBS!'
+
+print <<EOM;
+
+This program designates the current directory as the top level directory
+of a package on which you want to use the programs metaconfig, makedist,
+or the patch generation programs. It will not damage the current directory
+in any way except to create a .package file.
+
+EOM
+
+$mypackver = 3.036; # Base revision number plus patchlevel
+
+if (-f '.package') {
+ &readpackage;
+ if ($packver > $mypackver) {
+ die "This .package file was produced by a newer packinit than I am.\n".
+ "Please find a packinit of version $packver or greater.\n";
+ }
+} elsif (-f '../.package' || -f '../../.package' || -f '../../../.package') {
+ die "Run in top level directory only.\n";
+}
+
+# Now set up to do reads with possible shell escape.
+sub myread {
+ ($rp,$dflt) = @_;
+ $rp .= " [$dflt]";
+ print "$rp ";
+ $ans='!';
+ while ($ans =~ /^!/) {
+ $ans = <STDIN>;
+ chop($ans);
+ if ($ans eq '!') {
+ system '/bin/sh';
+ print "\n$rp ";
+ } elsif ($ans =~ s/^!//) {
+ system '/bin/sh', '-c', $ans;
+ print "\n$rp ";
+ }
+ }
+ $ans = $dflt if $ans eq '';
+ $ans = '' if $ans eq 'none';
+ $ans;
+}
+
+$dflt = $package;
+($dflt) = (`pwd | tr "[A-Z]" "[a-z]"` =~ m|.*/(.*)|) unless $package;
+
+print <<EOM;
+Your package will be known by some name, which should be a single word.
+Generally it is the name of the chief executable program.
+
+EOM
+$package = &myread('What is the name of your package?',$dflt);
+
+if ($baserev ne '') {
+ $dflt=$baserev;
+} else {
+ print "\n";
+ $dflt='';
+ print "Checking RCS files for current version...";
+ @rcs = <RCS/*,v *,v>;
+ $rcs = shift(@rcs);
+ if (! -f $rcs) {
+ $rcs = shift(@rcs);
+ if (! -f $1) {
+ print "I don't see any RCS files there (yet).";
+ $dflt='1.1';
+ }
+ }
+ $revs=0;
+ if ($dflt eq '') {
+ $rlog = `rlog $rcs`;
+ ($dflt) = ($rlog =~ /\nhead:\s*(\d+\.\d+)/);
+ $rlog = `rlog -r$dflt.1- -r$dflt.2- -r$dflt.3- -r$dflt.4- $rcs`;
+ ($revs) = ($rlog =~ /selected revisions:\s*([\d.]+)/);
+ $dflt='1.1' if $dflt eq '';
+ }
+
+ print <<EOM;
+
+To use the patch generating portion of the system, you must have RCS. You
+must begin with a freshly checked-in trunk revision (n.n) and choose a branch
+number for patches. The trunk revision upon which the patch branch is based
+is called the base revision.
+
+EOM
+
+ if ($revs > 1) {
+ print <<EOM;
+(The current revision ($dflt) has branches--you may have to check in a new
+trunk revision, or use patbase to mark the base revisions.)
+EOM
+ ($first,$second) = split(/\./,$dflt);
+ ++$second;
+ $dflt="$first.$second";
+ }
+}
+
+print "\n";
+$foo = &myread('What is or will be the base revision number?', $dflt);
+if ($baserev ne $foo) {
+ $baserev = $foo;
+ $ftpdir = ''; # invalidate ftp directory on version change
+}
+
+print "\n";
+$dflt = ($patchbranch ne '' ? $patchbranch : 1);
+$patchbranch =
+ &myread('What branch number do you want to use for patches?', $dflt);
+
+$dflt = $cext eq '' ? 'none' : $cext;
+print <<EOM;
+
+Metaconfig will lookup for files listed in MANIFEST.new to scan for
+known symbols. If you have non-standard extensions containing some
+C symbols, you may wish to list them there, separating them with white
+spaces and using shell regular expressions, such as '.xs .p .t' to let
+metaconfig know about them. Say "none" for none.
+
+EOM
+$cext = &myread('Additional file extensions to identify C files?', $dflt);
+$cext = '' if $cext eq 'none';
+
+$dflt = $shext eq '' ? 'none' : $shext;
+print <<EOM;
+
+Likewise, metaconfig needs to know about the files containing at least
+some shell symbols. Automatic symbol substitution will be performed on
+the .SH files only, but you may want metaconfig to scan other files as
+well, provided you ensure proper variable substitutions by your own
+means. Please add extensions using shell-style regexps. Say "none" if
+no specific file extensions are used.
+
+EOM
+$shext = &myread('Additional file extensions to identify SH files?', $dflt);
+$shext = '' if $shext eq 'none';
+
+$dflt = 'none';
+print <<'EOM';
+
+If your package sources contains symbols that metaconfig will mistake for the
+names of symbols defined by its units, you can list them in an exclusions file.
+(See the documentation of "metaconfig -X".) What file would you like metaconfig
+to consult for those symbols? Say "none" if you don't need to exclude any
+symbols.
+
+EOM
+$exclusions_file = &myread('File to consult for excluded symbols?', $dflt);
+$exclusions_file = '' if $exclusions_file eq 'none';
+
+$dflt = $copyright eq ' ' ? 'n' : 'y';
+print <<'EOM';
+
+If you wish, you may use a generic copyright. This is appropriate if all
+your source file have to be distributed under the same conditions. Using
+this facility means you will not be able to change the copyright notice
+between patches (i.e. while in the same version number). All you need to
+do is write a copyright file containing the proper copyright notice, and
+then use @COPYRIGHT@ within your source code (before any RCS marker). That
+will be extended to the full copyright, preserving any leading comment.
+
+EOM
+$use_copyright = &myread('Do you wish to use a generic copyright?', $dflt);
+if ($use_copyright =~ /^y/i) {
+ print "\n";
+ $copyright = '' if $copyright eq ' '; # They changed their mind!
+ $dflt = $copyright || 'COPYRIGHT';
+ $copyright = &myread('What file do you wish to store it in?', $dflt);
+} else {
+ $copyright = ' '; # Remember they don't want it
+}
+
+if ($use_copyright =~ /^y/i) {
+ $ans = 'yes'; # Yes, use our own diff (have to expand copyright)
+} else {
+ print "\n";
+ $dflt = ($mydiff eq '' ? 'n' : 'y');
+ $ans = &myread(
+ 'Do you want to use your own diff (rather than rcsdiff -c) for patches?',
+ $dflt);
+}
+if ($ans =~ /^n/i) {
+ $mydiff='';
+} else {
+ print "\n";
+ $dflt = $mydiff || 'diff -c';
+ $mydiff = &myread('What diff command do you want to use?', $dflt);
+}
+
+$dflt = $changelog eq ' ' ? 'n' : 'y';
+print <<'EOM';
+
+I can set up things so that a ChangeLog file is maintained automatically.
+This file will contain the description which is filled in into every issued
+patches, and optionally, the list of RCS logs for each modified file. The
+ChangeLog file is sorted in reverse order of issued patches, i.e. the most
+recent changes are at the top of the file.
+
+EOM
+$use_changelog = &myread('Do you wish me to maintain a ChangeLog file?', $dflt);
+if ($use_changelog =~ /^y/i) {
+ print "\n";
+ $changelog = '' if $changelog eq ' '; # They changed their mind!
+ $dflt = $changelog || 'ChangeLog';
+ $changelog = &myread('What file do you wish to store changes in?', $dflt);
+ $dflt = $changercs ? 'y' : 'n';
+ print "\n";
+ $ans = &myread('Do you wish to include RCS logs as well?', $dflt);
+ $changercs = $ans =~ /^y/i;
+} else {
+ $changelog = ' '; # Remember they don't want it
+ $changercs = 0;
+}
+
+print <<EOM;
+
+Over the lifetime of the $package package, people will want to request
+distribution kits and patches. In particular, automatically generated
+patches will say where to get previous patches from.
+
+EOM
+$logname = &getlogname;
+$dflt = $maintname || &getfullname($logname);
+$maintname = &myread('Who should requests be sent to (full name)?', $dflt);
+
+print <<EOM;
+
+Now you need to give a one-line network mailing address for $maintname.
+It does not need to be parseable by machine, but can be of the form:
+
+ {name1,name2,name3}!myhost!myname
+
+ or
+
+ myname\@myhost.domain
+
+EOM
+$dflt = $maintloc || "$logname\@$myhostname$mydomain";
+$maintloc = &myread('What is the network mailing address?', $dflt);
+
+print "\n";
+$dflt = $ftpsite ? 'y' : 'n';
+$ans = &myread(
+ 'Will you put patches where they can be acquired by anonymous FTP?',$dflt);
+if ($ans =~ /^n/i) {
+ $ftpsite='';
+} else {
+ print "\n";
+ $dflt = $ftpsite;
+ ($dflt = $maintloc) =~ s/.*@([^\s,()]*).*/$1/ unless $dflt;
+ $ftpsite = &myread('What is the Internet sitename for that?',$dflt);
+}
+
+print <<EOM;
+
+If you have mailagent installed (posted in comp.sources.misc), you may choose
+to distribute patches via e-mail and have all the issued patches mention
+this, as well as instructions telling how to get those (missing) patches.
+
+EOM
+$dflt = $mailagent eq 'true' ? 'y' : 'n';
+$mailagent = &myread(
+ 'Do you wish to let people retrieve patches via mailagent?', $dflt);
+$mailagent = ($mailagent =~ /^y/i) ? 'true' : 'false';
+
+print "\n";
+$dflt = $list_users eq 'true' ? 'y' : 'n';
+$list_users = &myread(
+ "Do you have a mailing list set up for $package users?", $dflt);
+$list_users = ($list_users =~ /^y/i) ? 'true' : 'false';
+
+if ($list_users eq 'true') {
+ print "\n";
+ $dflt = $list_name || "$package-users";
+ $list_name = &myread('How is the mailing list named?', $dflt);
+
+ print <<EOM;
+
+The $list_name mailing list is now to be defined in terms of e-mail
+addresses where users can send messages to the whole list (that's the
+mailing list address) or send administrative requests to subscribe or
+unsubscribe among other things (that's the administrative mailing
+address). Usually, this last address will turn out to be that of a
+mailing list manager program like majordomo or listserv.
+
+EOM
+ $dflt = $list_addr || "$list_name\@$myhostname$mydomain";
+ $list_addr = &myread('What is Internet mailing list address?', $dflt);
+
+ print "\n";
+ ($list_domain) = $list_addr =~ /^[\w-]+\@(.*)/;
+ $list_domain = "$myhostname$mydomain" unless $list_domain;
+ $dflt = $list_request || "$list_name-request\@$list_domain";
+ $list_request = &myread('What is administrative mailing address?', $dflt);
+
+ %mlm = (
+ 'majordomo',
+ "subscribe $list_name \$cf_email;unsubscribe $list_name \$cf_email",
+ 'listserv',
+ "SUBSCRIBE $package \$cf_name;UNSUBSCRIBE $package",
+ 'human',
+ "subscribe $list_name \$cf_email;unsubscribe $list_name \$cf_email",
+ );
+
+ print "\n";
+ ($dflt) = $list_request =~ /^([\w-]+)\@/;
+ $dflt =~ tr/A-Z/a-z/;
+ $list_cmds = $mlm{$dflt};
+ $dflt = 'human' if $list_cmds eq '';
+ $old_list_manager = $list_manager;
+ $list_manager = &myread(
+ 'What type of mailing list manager are you using?', $dflt);
+ $list_manager =~ tr/A-Z/a-z/;
+ $list_sub = $list_unsub = '' if $old_list_manager ne $list_manager;
+
+ $list_cmds = $mlm{$list_manager};
+ $list_cmds = $mlm{'human'} if $list_cmds eq '';
+ @list_cmds = split(/;/, $list_cmds);
+
+ print <<'EOM';
+
+In the next two questions, you may use the following variables in your
+answers:
+
+ $cf_email e-mail address of the user
+ $cf_name full name of the user
+
+Those variables will be set by Configure prior sending the requests to
+the administrative mailing list address.
+
+EOM
+ $dflt = $list_sub || $list_cmds[0];
+ $list_sub = &myread('Subscribe command?', $dflt);
+ print "\n";
+ $dflt = $list_unsub || $list_cmds[1];
+ $list_unsub = &myread('Unsubscribe command?', $dflt);
+}
+
+print "\n";
+$dflt = $orgname || $ENV{'ORGANIZATION'};
+$orgname = &myread('Organization:',$dflt);
+$orgname = &tilda_expand($orgname); # Can specify filename with ~user
+
+print "\n";
+$dflt = $newsgroups || 'comp.sources.bugs';
+$newsgroups = &myread('Newsgroup(s) to post patches to:', $dflt);
+
+print "\n";
+$dflt = $recipients || 'source-archives@mirror.TMC.COM';
+$recipients = &myread('Recipient(s) to send patches to:',$dflt);
+
+if ($ftpsite) {
+ print "\n";
+ $dflt = $ftpdir || "/usr/spool/ftp/pub/$package.$baserev/patches";
+ $ftpdir = &myread('FTP directory to copy patches to:',$dflt);
+} else {
+ $ftpdir = '';
+}
+
+print "\nCreating .package...\n";
+open(PACKAGE, '>.package') || die "Can't create .package";
+chop($date = `date`);
+print PACKAGE <<EOF;
+: This file was created by running packinit on $date.
+: Do not hand edit -- run packinit again if changes are to be made.
+packver='$mypackver'
+: Basic variables
+package=$package
+baserev=$baserev
+patchbranch=$patchbranch
+copyright='$copyright'
+mydiff='$mydiff'
+maintname='$maintname'
+maintloc='$maintloc'
+ftpsite='$ftpsite'
+orgname='$orgname'
+newsgroups='$newsgroups'
+recipients='$recipients'
+ftpdir='$ftpdir'
+mailagent='$mailagent'
+changelog='$changelog'
+changercs=$changercs
+: File lookup extensions
+cext='$cext'
+shext='$shext'
+: File to consult for symbol exclusions
+exclusions_file='$exclusions_file'
+: Mailing list variables
+list_users='$list_users'
+list_name='$list_name'
+list_addr='$list_addr'
+list_request='$list_request'
+list_manager='$list_manager'
+list_sub='$list_sub'
+list_unsub='$list_unsub'
+: Derivative variables -- do not change
+revbranch=\"\$baserev.\$patchbranch\"
+EOF
+
+!NO!SUBS!
+$grep -v '^;#' ../pl/package.pl >>packinit
+$grep -v '^;#' ../pl/logname.pl >>packinit
+$grep -v '^;#' ../pl/fullname.pl >>packinit
+$grep -v '^;#' ../pl/tilde.pl >>packinit
+chmod 755 packinit
+$eunicefix packinit
diff --git a/bin/packinit.man b/bin/packinit.man
new file mode 100644
index 0000000..bc954f0
--- /dev/null
+++ b/bin/packinit.man
@@ -0,0 +1,148 @@
+''' $Id$
+'''
+''' Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+'''
+''' You may redistribute only under the terms of the Artistic Licence,
+''' as specified in the README file that comes with the distribution.
+''' You may reuse parts of this distribution only within the terms of
+''' that same Artistic Licence; a copy of which may be found at the root
+''' of the source tree for dist 4.0.
+'''
+''' $Log: packinit.man,v $
+''' Revision 3.0.1.4 1995/07/25 13:31:38 ram
+''' patch56: fixed a typo
+'''
+''' Revision 3.0.1.3 1995/05/12 11:57:38 ram
+''' patch54: updated my e-mail address
+'''
+''' Revision 3.0.1.2 1994/10/29 15:45:17 ram
+''' patch36: added new variables cext, shext, changelog and changercs
+'''
+''' Revision 3.0.1.1 1994/01/24 13:54:31 ram
+''' patch16: now documents variables set in .package by packinit
+'''
+''' Revision 3.0 1993/08/18 12:04:06 ram
+''' Baseline for dist 3.0 netwide release.
+'''
+'''
+.TH PACKINIT 1 ram
+.SH NAME
+packinit \- initialize or update your .package file
+.SH SYNOPSIS
+.B packinit
+.SH DESCRIPTION
+.B Packinit
+will create (or update) a \fI.package\fR file, so that all the
+.B dist
+tools can be smart and know some basic things about your package,
+such as its revision number, or the e-mail address of its maintainer.
+.PP
+.I Packinit
+should be run from the top level directory of your package, before
+using any other \fIdist\fR tool. Later on, you may rerun it to
+update some of its values.
+.I Packinit
+will create a single file and leave the remaining of
+your directory undisturbed.
+.SH VARIABLES
+.I Packinit
+defines the following variables in your \fI.package\fR file:
+.TP 15
+.PD 0
+baserev
+The baseline revision number.
+.TP
+cext
+The list (space separated) of file extensions identifying potential holders of
+C symbols. This is added to the default .[chyl] extension lookup.
+Shell-style patterns may be used.
+.TP
+changelog
+The name of the \fIChangeLog\fR file managed by \fIpatlog\fR.
+.TP
+changercs
+Boolean stating whether RCS logs are to be made part of \fIChangeLog\fR.
+.TP
+copyright
+Name of the file used for Copyright expansion.
+.TP
+ftpdir
+Directory where patches are located on the FTP site.
+.TP
+ftpsite
+Name of the FTP site where patches may be retrieved from.
+.TP
+list_addr
+Address of the package mailing list where users may post messages to.
+.TP
+list_manager
+Type of list manager attached to the list administrative request address.
+.TP
+list_name
+Name of the package users mailing list.
+.TP
+list_request
+Address where subscribe and unsubscribe requests for the package mailing
+list should be sent to.
+.TP
+list_sub
+Format of the subscribe requests.
+.TP
+list_unsub
+Format of the unsubscribe requests.
+.TP
+list_users
+A boolean string set to 'true' when there is a mailing list set up for
+discussion about the package.
+.TP
+mailagent
+A boolean string set to 'true' when people are allowed to retrieve
+patches via mailagent \fI@SH mailpatch\fR commands.
+.TP
+maintloc
+E-mail address of the package maintainer, preferably in Internet format.
+.TP
+maintname
+Full name of the package maintainer.
+.TP
+mydiff
+Name of the \fIdiff\fR program to be used when computing a patch.
+.TP
+newsgroups
+Newsgroup list where new patches should be posted to, empty for no
+postings.
+.TP
+orgname
+Full name of the organization where the package maitainer resides, or
+path to a file containing that name.
+.TP
+package
+Name of the package.
+.TP
+packver
+Version of the \fIpackinit\fR program that built the \fI.package\fR file.
+.TP
+patchbranch
+Name of the RCS branch used to store subsequent updates of a file after
+a baseline has been released.
+.TP
+recipients
+People who should be sent newly issued patches.
+.TP
+shext
+The list (space separated) of file extensions identifying potential holders of
+shell symbols. This is added to the default .SH extension lookup.
+Shell-style patterns may be used. Note that only .SH extensions are looked
+up by Configure for automatic shell extraction with variable substitutions,
+no matter what this variable is set to.
+.PD
+.SH FILE
+.TP 15
+\&.package
+File holding all the package-related values
+.SH AUTHORS
+Larry Wall <lwall@netlabs.com> (version 2.0)
+.br
+Raphael Manfredi <Raphael.Manfredi@pobox.com>
+.SH "SEE ALSO"
+dist(1).
diff --git a/bin/perload b/bin/perload
new file mode 100755
index 0000000..dbd2d97
--- /dev/null
+++ b/bin/perload
@@ -0,0 +1,648 @@
+: # feed this into perl
+'/bin/true' && eval 'exec perl -S $0 "$@"'
+ if $running_under_some_shell;
+'di';
+'ig00';
+
+#
+# This perl script is its own manual page [generated by wrapman]
+#
+
+# $Id: perload,v 3.0.1.1 1994/10/29 15:45:36 ram Exp ram $
+#
+# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+#
+# You may redistribute only under the terms of the Artistic Licence,
+# as specified in the README file that comes with the distribution.
+# You may reuse parts of this distribution only within the terms of
+# that same Artistic Licence; a copy of which may be found at the root
+# of the source tree for dist 4.0.
+#
+# $Log: perload,v $
+# Revision 3.0.1.1 1994/10/29 15:45:36 ram
+# patch36: added minimal support for perl5 dataloading
+#
+# Revision 3.0 1993/08/18 12:04:06 ram
+# Baseline for dist 3.0 netwide release.
+#
+
+# Replace each function definition in a loading section by two stubs and
+# reject the definition into the DATA part of the script if in a dataload
+# section or into a FILE if in an autoload section.
+
+$in_load = 0; # In a loading section
+$autoload = ''; # Name of autoloaded file
+$has_invocation_stub = 0; # True if we detect a #! stub
+$current_package = 'main'; # Current package
+$init_emitted = 0; # True when dataloading stamp was emitted
+$in_function = 0;
+
+use Getopt::Std;
+getopts("ot");
+
+while (<>) {
+ if ($. == 1 && /^(:|#).*perl/) { # Invocation stub
+ $has_invocation_stub = 1;
+ print;
+ next;
+ }
+ if ($. <= 3 && $has_invocation_stub) {
+ print;
+ next;
+ }
+ if (/^\s*$/) {
+ &flush_comment;
+ print unless $in_function;
+ print if $in_function && !$in_load;
+ if ($in_function && $in_load) {
+ push(@Data, "\n") unless $autoload;
+ $Auto{$autoload} .= "\n" if $autoload;
+ }
+ next;
+ }
+ if (/^\s*;?#/) {
+ if (/#\s*perload on/i) { # Enter a loading section
+ print unless /:$/;
+ $in_load = 1;
+ next;
+ }
+ if (/#\s*perload off/i) { # End a loading section
+ print unless /:$/;
+ $in_load = 0;
+ next;
+ }
+ if (/#\s*autoload (\S+)/i) { # Enter autoloading section
+ print unless /:$/;
+ push(@autoload, $autoload); # Directives may be nested
+ $autoload = $1;
+ $in_load += 2;
+ next;
+ }
+ if (/#\s*offload/i) { # End autoloading section
+ print unless /:$/;
+ $autoload = pop(@autoload); # Revert to previously active file
+ $in_load -= 2;
+ next;
+ }
+ &emit_init unless $init_emitted;
+ push(@Comment, $_) unless $in_function;
+ print if $in_function && !$in_load;
+ next unless $in_function;
+ push(@Data, $_) unless $autoload;
+ $Auto{$autoload} .= $_ if $autoload;
+ next;
+ }
+ &emit_init unless $init_emitted;
+ /^package (\S+)\s*;/ && ($current_package = $1);
+ unless ($in_load) {
+ &flush_comment;
+ print;
+ next;
+ }
+ # We are in a loading section
+ if (/^sub\s+([\w']+)\s*\{(.*)/) {
+ die "line $.: function $1 defined within another function.\n"
+ if $in_function;
+ # Silently ignore one-line functions
+ if (/\}/) {
+ &flush_comment;
+ print;
+ next;
+ }
+ $comment = $2;
+ $in_function = 1;
+ $function = $1;
+ ($fn_package, $fn_basename) = $function =~ /^(\w+)'(\w+)/;
+ unless ($fn_package) {
+ $fn_package = $current_package;
+ $fn_basename = $function;
+ }
+ die "line $.: duplicate routine ${fn_package}::$fn_basename\n"
+ if $Seen{"${fn_package}::$fn_basename"}++;
+ # Keep leading function comment
+ foreach (@Comment) {
+ push(@Data, $_) unless $autoload;
+ $Auto{$autoload} .= $_ if $autoload;
+ }
+ @Comment = ();
+ # Change package context for correct compilation: the name is visible
+ # within the original function package while the body of the function
+ # is compiled within the current package.
+ $declaration = "sub $fn_package" . "'load_$fn_basename {$comment\n";
+ $package_context = "\tpackage $current_package;\n";
+ if ($autoload) {
+ $Auto{$autoload} .= $declaration . $package_context;
+ } else {
+ push(@Data, $declaration, $package_context);
+ }
+ # Emit stubs
+ print "sub $fn_package", "'$fn_basename";
+ print " { &auto_$fn_package", "'$fn_basename; }\n";
+ print "sub auto_$fn_package", "'$fn_basename { ";
+ print '&main\'dataload' unless $autoload;
+ print '&main\'autoload(' . "'$autoload'" . ', @_)' if $autoload;
+ print "; }\n";
+ next;
+ }
+ unless ($in_function) {
+ &flush_comment;
+ print;
+ next;
+ }
+ # We are in a loading section and inside a function body
+ push(@Data, $_) unless $autoload;
+ $Auto{$autoload} .= $_ if $autoload;
+ $in_function = 0 if /^\}/;
+ if (/^\}/) {
+ push(@Data, "\n") unless $autoload;
+ $Auto{$autoload} .= "\n" if $autoload;
+ }
+}
+
+@auto = keys %Auto;
+if (@auto > 0) {
+ print &q(<<'EOC');
+:# Load the calling function from file and call it. This function is called
+:# only once per file to be loaded.
+:sub main'autoload {
+: local($__file__) = shift(@_);
+: local($__packname__) = (caller(1))[3];
+: $__packname__ =~ s/::/'/;
+: local($__rpackname__) = $__packname__;
+: local($__saved__) = $@;
+: $__rpackname__ =~ s/^auto_//;
+: &perload'load_from_file($__file__);
+: $__rpackname__ =~ s/'/'load_/;
+: $@ = $__saved__; # Restore value $@ had on entrance
+: &$__rpackname__(@_); # Call newly loaded function
+:}
+:
+:# Load file and compile it, substituing the second stub function with the
+:# loaded ones. Location of the file uses the @AUTO array.
+:sub perload'load_from_file {
+: package perload;
+: local($file) = @_; # File to be loaded
+: local($body) = ' ' x 1024; # Pre-extent
+: local($load) = ' ' x 256; # Loading operations
+: # Avoid side effects by protecting special variables which will be
+: # changed by the autoloading operation.
+: local($., $_, $@);
+: $body = '';
+: $load = '';
+: &init_auto unless defined(@'AUTO); # Make sure we have a suitable @AUTO
+: &locate_file unless -f "$file"; # Locate file if relative path
+: open(FILE, $file) ||
+: die "Can't load $'__rpackname__ from $file: $!\n";
+: while (<FILE>) {
+: $load .= '*auto_' . $1 . '\'' . $2 . '= *' . $1 . '\'' . "load_$2;\n"
+: if (/^sub\s+(\w+)'load_(\w+)\s*\{/);
+: $body .= $_;
+: }
+: close FILE;
+EOC
+ if ($opt_t) {
+ print &q(<<'EOC');
+: # Untaint body when running setuid
+: $body =~ /^([^\0]*)/;
+: # No need to untaint $load, as it was built using trusted variables
+: eval $1 . $load;
+EOC
+ } else {
+ print &q(<<'EOC');
+: eval $body . $load;
+EOC
+ }
+ print &q(<<'EOC');
+: chop($@) && die "$@, while parsing code of $file.\n";
+:}
+:
+:# Initialize the @AUTO array. Attempt defining it by using the AUTOLIB
+:# environment variable if set, otherwise look in auto/ first, then in the
+:# current directory.
+:sub perload'init_auto {
+: if (defined $ENV{'AUTOLIB'} && $ENV{'AUTOLIB'}) {
+: @AUTO = split(':', $ENV{'AUTOLIB'});
+: } else {
+: @AUTO = ('auto', '.');
+: }
+:}
+:
+:# Locate to-be-loaded file held in $file by looking through the @AUTO array.
+:# This variable, defined in 'load_from_file', is modified as a side effect.
+:sub perload'locate_file {
+: package perload;
+: local($fullpath);
+: foreach $dir (@'AUTO) {
+: $fullpath = $dir . '/' . $file;
+: last if -f "$fullpath";
+: $fullpath = '';
+: }
+: $file = $fullpath if $fullpath; # Update var from 'load_from_file'
+:}
+:
+EOC
+}
+
+if (@Data > 0) {
+ print &q(<<'EOC');
+:# Load the calling function from DATA segment and call it. This function is
+:# called only once per routine to be loaded.
+:sub main'dataload {
+: local($__packname__) = (caller(1))[3];
+: $__packname__ =~ s/::/'/;
+: local($__rpackname__) = $__packname__;
+: local($__at__) = $@;
+: $__rpackname__ =~ s/^auto_//;
+: &perload'load_from_data($__rpackname__);
+: local($__fun__) = "$__rpackname__";
+: $__fun__ =~ s/'/'load_/;
+: eval "*$__packname__ = *$__fun__;"; # Change symbol table entry
+: die $@ if $@; # Should not happen
+: $@ = $__at__; # Restore value $@ had on entrance
+: &$__fun__; # Call newly loaded function
+:}
+:
+:# Load function name given as argument, fatal error if not existent
+:sub perload'load_from_data {
+: package perload;
+: local($pos) = $Datapos{$_[0]}; # Offset within DATA
+: # Avoid side effects by protecting special variables which will be changed
+: # by the dataloading operation.
+: local($., $_, $@);
+: $pos = &fetch_function_code unless $pos;
+: die "Function $_[0] not found in data section.\n" unless $pos;
+: die "Cannot seek to $pos into data section.\n"
+: unless seek(main'DATA, $pos, 0);
+: local($/) = "\n}";
+: local($body) = scalar(<main'DATA>);
+: die "End of file found while loading $_[0].\n" unless $body =~ /^\}$/m;
+EOC
+ if ($opt_t) {
+ print &q(<<'EOC');
+: # Untaint body when running setuid
+: $body =~ /^([^\0]*)/;
+: # Now we may safely eval it without getting an insecure dependency
+: eval $1; # Load function into perl space
+EOC
+ } else {
+ print &q(<<'EOC');
+: eval $body; # Load function into perl space
+EOC
+ }
+ print &q(<<'EOC');
+: chop($@) && die "$@, while parsing code of $_[0].\n";
+:}
+:
+EOC
+ print &q(<<'EOC') unless $opt_o;
+:# Parse text after the END token and record defined loadable functions (i.e.
+:# those whose name starts with load_) into the %Datapos array. Such function
+:# definitions must be left adjusted. Stop as soon as the function we want
+:# has been found.
+:sub perload'fetch_function_code {
+: package perload;
+: local($pos) = tell main'DATA;
+: local($in_function) = 0;
+: local($func_name);
+: local($., $_);
+: while (<main'DATA>) {
+: if (/^sub\s+(\w+)'load_(\w+)\s*\{/) {
+: die "DATA line $.: function $1'$2 defined within $func_name.\n"
+: if $in_function;
+: $func_name = $1 . '\'' . $2;
+: $Datapos{$func_name} = $pos;
+: $in_function = 1;
+: next;
+: }
+: $in_function = 0 if /^\}/;
+: next if $in_function;
+: return $pos if $func_name eq $_[0];
+: $pos = tell main'DATA;
+: }
+: 0; # Function not found
+:}
+:
+EOC
+ print &q(<<'EOC') if $opt_o;
+:# This function is called only once, and fills in the %Datapos array with
+:# the offset of each of the dataloaded routines held in the data section.
+:sub perload'fetch_function_code {
+: package perload;
+: local($start) = 0;
+: local($., $_);
+: while (<main'DATA>) { # First move to start of offset table
+: next if /^#/;
+: last if /^$/ && ++$start > 2; # Skip two blank line after end token
+: }
+: $start = tell(main'DATA); # Offsets in table are relative to here
+: local($key, $value);
+: while (<main'DATA>) { # Load the offset table
+: last if /^$/; # Ends with a single blank line
+: ($key, $value) = split(' ');
+: $Datapos{$key} = $value + $start;
+: }
+: $Datapos{$_[0]}; # All that pain to get this offset...
+:}
+:
+EOC
+ print &q(<<'EOC');
+:#
+:# The perl compiler stops here.
+:#
+:
+:__END__
+:
+:#
+:# Beyond this point lie functions we may never compile.
+:#
+:
+EOC
+ # Option -o directs us to optimize the function location by emitting an
+ # offset table, which lists all the position within DATA for each possible
+ # dataloaded routine.
+ if ($opt_o) {
+ print &q(<<'EOC');
+:#
+:# DO NOT CHANGE A IOTA BEYOND THIS COMMENT!
+:# The following table lists offsets of functions within the data section.
+:# Should modifications be needed, change original code and rerun perload
+:# with the -o option to regenerate a proper offset table.
+:#
+:
+EOC
+ $trailing_message = &q(<<'EOC');
+:
+:#
+:# End of offset table and beginning of dataloading section.
+:#
+:
+EOC
+ $pos = 0; # Offset relative to this point (start of table)
+ foreach (@Data) {
+ $Datapos{"$1\'$2"} = $pos - $now
+ if /^sub\s+(\w+)'load_(\w+)\s*\{/; # } for vi
+ $pos += length;
+ }
+ @poskeys = keys %Datapos; # Array of routine names (fully qualified)
+
+ # Write out a formatted table, each entry stored on $entry bytes and
+ # formatted with the $format string.
+ ($entry, $format) = &get_format(*poskeys);
+
+ # The total size occupied by the table is the size of one item times
+ # the number of items plus the final trailing message at the end of
+ # the table.
+ $table_size = $entry * @poskeys + length($trailing_message);
+
+ # Output formatted table
+ foreach (sort @poskeys) {
+ printf($format, $_, $table_size + $Datapos{$_});
+ }
+ print $trailing_message;
+ }
+
+ # Output code for each dataloaded function
+ foreach (@Data) {
+ print;
+ }
+ print &q(<<'EOC');
+:#
+:# End of dataloading section.
+:#
+:
+EOC
+}
+
+if (@auto > 0) {
+ mkdir('auto',0755) unless -d 'auto';
+ foreach $file (@auto) {
+ unless (open(AUTO, ">auto/$file")) {
+ warn "Can't create auto/$file: $!\n";
+ next;
+ }
+ print AUTO &q(<<'EOC');
+:# This file was generated by perload
+:
+EOC
+ print AUTO $Auto{$file};
+ close AUTO;
+ }
+}
+
+# Compute optimum format for routine offset table, returning both the size of
+# each entry and the formating string for printf.
+sub get_format {
+ local(*names) = @_;
+ local($name_len) = 0;
+ local($max_len) = 0;
+ foreach (@names) {
+ $name_len = length;
+ $max_len = $name_len if $name_len > $max_len;
+ }
+ # The size of each entry (preceded by one tab, followed by 12 chars)
+ $name_len = $max_len + 1 + 12;
+ ($name_len, "\t%${max_len}s %10d\n");
+}
+
+sub emit_init {
+ print &q(<<'EOC');
+:#
+:# This perl program uses dynamic loading [generated by perload]
+:#
+:
+:$ENV{LC_ALL} = 'C';
+:
+EOC
+ $init_emitted = 1;
+}
+
+sub flush_comment {
+ print @Comment if @Comment > 0;
+ @Comment = ();
+}
+
+sub q {
+ local($_) = @_;
+ s/^://gm;
+ $_;
+}
+
+#
+# These next few lines are legal in both perl and nroff.
+#
+
+.00; # finish .ig
+
+'di \" finish diversion--previous line must be blank
+.nr nl 0-1 \" fake up transition to first page again
+.nr % 0 \" start at page 1
+'; __END__ \" the perl compiler stops here
+
+'''
+''' From here on it's a standard manual page.
+'''
+
+.TH PERLOAD 1 "June 20, 1992"
+.AT 3
+.SH NAME
+perload \- builds up autoloaded and dataloaded perl scripts
+.SH SYNOPSIS
+.B perload
+[ \fB\-ot\fR ]
+[ \fIfile\fR ]
+.SH DESCRIPTION
+.I Perload
+takes a perl script as argument (or from stdin if no argument is supplied)
+and prints out on stdout an equivalent script set-up to perform autoloading
+or dataloading. The translation is directed by special comments within the
+original script. Using dynamic loading can drastically improve start-up
+performances, both in time and in memory, as perl does not need to compile
+the whole script nor store its whole compiled form in memory.
+.PP
+.I Autoloading
+delays compilation of some functions until they are needed. The code for these
+functions is loaded dynamically at run-time. The atomicity of loading is a
+file, which means that putting more than one function into a file will cause
+all these functions to be loaded and compiled as soon as one among them is
+needed.
+.PP
+.I Dataloading
+is a form of autoloading where no extra file are needed. The script carries
+all the functions whose compilation is to be delayed in its data segment
+(in the \fIperl\fR sense, i.e. they are accessible via the DATA filehandle).
+The scripts parses the data segment and extracts only the code for the needed
+subroutine, which means granularity is better than with autloading.
+.PP
+It is possible for a single script to use both autoloading and dataloading at
+the same time. However, it should be noted that a script using only dataloading
+is self contained and can be moved or shared accross different platforms without
+fear. On the contrary, a script using only autoloading relies on some externally
+provided files. Sharing this script among different platforms requires sharing
+of these external files. The script itself cannot be redistributed without
+also giving the extra files holding the autoloaded functions.
+.PP
+The major drawback with dataloading is that the DATA filehandle cannot be used
+for anything else and may result in code duplication when two scripts could
+share the same pieces of code. Autoloading appears as the perfect solution in
+this case since two scripts may freely share the same functions without
+actually duplicating them on the disk (hence saving some precious disk blocks
+:-).
+.SH CRITERIA
+Functions to be dataloaded or autoloaded must meet the following layout
+criteria:
+.TP 5
+\-
+They must not be one-line functions like \fIsub sorter { $a <=> $b }\fR.
+Those functions are simply output verbatim, as they are already so
+small that it would not be worth to dynamically load them,
+.TP
+\-
+The first line must be of the form \fIsub routine_name {\fR, with an optional
+comment allowed after the '{'.
+.TP
+\-
+The function definition must end with a single '}' character left aligned.
+.TP
+\-
+Package directives outside any function must be left aligned.
+.PP
+All the above restrictions should not be source of a problem if "standard"
+writing style is used. There are also some name restrictions: the package
+name \fIperload\fR is reserved, as is the \fI@AUTO\fR array when autoloading
+is used. Packages must not start with \fIauto_\fR, as this is prepended to
+user's package names when building the stubs. Furthermore, the subroutines
+names \fImain'autoload\fR and
+\fImain'dataload\fR must not be used by the original script. Again, these
+should not cause any grief.
+.SH DIRECTIVES
+The translation performed by
+.I Perload
+is driven by some special comment directives placed directly within the code.
+Ending those directives with a ':' character will actually prevent them from
+being output into the produced script. Case is irrelevant for all the directives
+and the comment need not be left-aligned, although it must be the first
+non-space item on the line.
+.PP
+The following directives are available:
+.TP 10
+# Perload ON
+Turns on the \fIperload\fR processing. Any function definition which meets
+the criteria listed in the previous section will be replaced by two stubs and
+its actual definition will be rejected into the data segment (default) or a
+file when inside an autoloading section.
+.TP
+# Perload OFF
+Turns off any processing. The script is written as-is on the standard output.
+.TP
+# Autoload \fIpath\fR
+Requests autoloading from file \fIpath\fR, which may be an absolute path or
+a relative path. The file will be located at run-time using the @AUTO array
+if a non-absolute path is supplied or if the file does not exist as listed.
+Autoloading directives may be nested.
+.TP
+# Offload \fIpath\fR
+The argument is not required. The directive ends the previous autoloading
+directive (the inmost one). This does not turn off the \fIperload\fR processing
+though. The \fIpath\fR name is optional here (in fact, it has only a comment
+value).
+.SH OPTIONS
+Perload accepts only two options. Using \fB\-o\fR is meaningful only when
+dataloading is used. It outputs an offset table which lists the relative
+offset of the dataloaded functions within the data section. This will spare
+perl the run-time parsing needed to locate the function, and results in an good
+speed gain. However, it has one major drawback: it prevents people from
+actually modifying the source beyond the start of the table. But anything
+before can be freely edited, which is particulary useful when tailoring the
+script.
+.PP
+This option should not be used when editing of functions within the data
+section is necessary for whatever reason. When \fB\-o\fR is used, any
+change in the dataloaded function must be committed by re-running perload
+on the original script.
+.PP
+The other option \fB\-t\fR is to be used when producing a script which is
+going to run setuid. The body of the loaded function is untainted before being
+fed to eval, which slightly slows down loading (the first time the function is
+called), but avoids either an insecure dependency report or weird warnings from
+taintperl stating something is wrong (which is the behaviour with 4.0 PL35).
+.SH FILES
+.TP 10
+auto
+the subdirectory where all produced autoloaded files are written.
+.SH ENVIRONMENT
+No environment variables are used by \fIperload\fR. However, the autoloaded
+version of the script pays attention to the \fIAUTOLIB\fR variable as a colon
+separated set of directories where the to-be-loaded files are to be found
+when a non-absolute path was specified. If the \fIAUTOLIB\fR variable is not
+set, the default value 'auto:.' is used (i.e. look first in the auto/
+subdirectory, then in the current directory.
+.SH CAVEAT
+Special care is required when using an autoloading script, especially when
+executed by the super-user: it would be very easy for someone to leave a
+special version of a routine to be loaded, in the hope the super-user (or
+another suitable target) executes the autoloaded version of the script with
+some \fIad hoc\fR changes...
+.PP
+The directory holding the to-be-loaded files should therefore be protected
+against unauthorized access, and no file should have write permission on them.
+The directory itself should not be world-writable either, or someone might
+substitute his own version.
+It should also be considered wise to manually set the @AUTO variable to a
+suitable value within the script itself.
+.PP
+The \fB\-o\fR option uses \fIperl\fR's special variable \fI$/\fR with a
+multi-character value. I suspect this did not work with versions of \fIperl\fR
+prior to 4.0, so any script using this optimized form of dataloading will not
+be 100% backward compatible.
+.SH AUTHOR
+Raphael Manfredi <Raphael.Manfredi@pobox.com>
+.SH CREDITS
+Valuable input came from Wayne H. Scott <wscott@ecn.purdue.edu>. He is
+merely the author of the optimizing offset table (\fB\-o\fR option).
+.PP
+.I Perload
+is based on an article from Tom Christiansen <tchrist@convex.com>,
+.I Autoloading in Perl,
+explaining the concept of dataloading and giving a basic implementation.
+.SH "SEE ALSO"
+perl(1).
diff --git a/bin/svn-revision b/bin/svn-revision
new file mode 100755
index 0000000..ea9db77
--- /dev/null
+++ b/bin/svn-revision
@@ -0,0 +1,66 @@
+#!/bin/sh
+
+#
+# $Id: svn-revision 12303 2006-11-11 08:11:46Z cbiere $
+#
+# Copyright (c) 2006, Raphael Manfredi
+#
+# You may redistribute only under the terms of the Artistic Licence,
+# as specified in the README file that comes with the distribution.
+# You may reuse parts of this distribution only within the terms of
+# that same Artistic Licence; a copy of which may be found at the root
+# of the source tree for dist 4.0.
+#
+# Computes SVN current revision number, if possible, emitting it in
+# the form of a #define for C perusal.
+#
+# On 2016-04-01, we switched to git so until we come up with a more elaborate
+# scheme, the current version number is computed by counting the amount of
+# commits made on the "master" branch.
+#
+
+LC_ALL=C
+export LC_ALL
+
+TOP="$1"
+FILE="$2"
+
+if [ "x$FILE" = x ]; then
+ FILE="&1"
+ oldrev=''
+else
+ oldrev=`grep REVISION "$FILE" 2>/dev/null | head -n1 | cut -d' ' -f4`
+fi
+
+if test -d "$TOP/.git"; then
+ revnum=`git log --oneline master | wc -l`
+else
+ revnum="$oldrev" # keep as is
+fi
+
+if [ "x$revnum" = "x$oldrev" ]; then
+ exit 0
+fi
+
+{
+stamp=`date +"%Y-%m-%d %H:%M:%d %z"`
+cat <<EOF
+/*
+ * THIS FILE IS AUTOMATICALLY GENERATED -- DO NOT EDIT
+ *
+ * Generated by $0.
+ */
+
+EOF
+
+if [ "x$revnum" = x ]; then
+ echo '/* Subversion information not available */'
+else
+ XRev='$Revision'
+ cat <<EOF
+#define REVISION "$XRev: $revnum \$"
+EOF
+fi
+
+} > "$FILE"
+
diff --git a/dist.man b/dist.man
new file mode 100644
index 0000000..bfee179
--- /dev/null
+++ b/dist.man
@@ -0,0 +1,317 @@
+''' $Id$
+'''
+''' Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+'''
+''' You may redistribute only under the terms of the Artistic Licence,
+''' as specified in the README file that comes with the distribution.
+''' You may reuse parts of this distribution only within the terms of
+''' that same Artistic Licence; a copy of which may be found at the root
+''' of the source tree for dist 4.0.
+'''
+''' $Log: dist.man,v $
+''' Revision 3.0.1.6 1995/05/12 11:57:53 ram
+''' patch54: updated my e-mail address
+'''
+''' Revision 3.0.1.5 1994/10/29 15:46:03 ram
+''' patch36: mentions new patlog script and ChangeLog file
+'''
+''' Revision 3.0.1.4 1994/05/06 13:54:17 ram
+''' patch23: extended copyright notice to 1994
+''' patch23: new script kitpost
+'''
+''' Revision 3.0.1.3 1994/01/24 13:55:41 ram
+''' patch16: documents profile and its components
+'''
+''' Revision 3.0.1.2 1993/11/10 17:31:03 ram
+''' patch14: added mention for new confmagic.h file
+'''
+''' Revision 3.0.1.1 1993/08/24 12:12:00 ram
+''' patch3: added entries for patnotify and patsnap
+'''
+''' Revision 3.0 1993/08/18 12:04:07 ram
+''' Baseline for dist 3.0 netwide release.
+'''
+'''
+.de Ex \" Start of Example
+.sp
+.in +5
+.nf
+..
+.de Ef \" End of Example
+.sp
+.in -5
+.fi
+..
+.TH DIST 1 ram
+.SH NAME
+dist \- introduction to dist
+.SH DESCRIPTION
+The \fIdist\fR package is a set of tools meant to ease the construction and
+maintenance of portable software. There are four distinct parts in \fIdist\fR,
+and it is also meant to be used with two external products, which are
+publicly available: \fImailagent\fR and \fIpatch\fR.
+.PP
+The first component is the \fIConfigure\fR script generator, which is a
+portability tool. It is automatically build up by \fImetaconfig\fR from your
+sources and a set of units. Ideally, the end-user receiving your source code
+will simply have to read your README file, run the \fIConfigure\fR script
+(which is self-documented), and then run \fImake\fR. Your package should then
+build cleanly on every UNIX platform.
+.PP
+The second component is the \fIMakefile.SH\fR generator, which is a generic
+configured Makefile, reusing some of the information figured out by
+.I Configure.
+Although you may write your own Makefile and then use \fImakeSH\fR to transform
+it into a \fIMakefile.SH\fR, it is better to write a generic \fIJmakefile\fR
+description, which does not rely on a particular position within the source
+tree, and then use \fIjmake\fR to recursively build your Makefiles.
+.PP
+The third component is the package generator, which is used when it's time
+to build up the shell archives used to distribute your program. Although you
+may use your own archiving mechanism, the one included here knows about RCS
+files and will properly check out the lattest revisions, leaving your working
+files alone. The \fImakedist\fR program will also perform Copyright expansion,
+an useful feature when you share source files among more than one program,
+placed under distinct Copyright information.
+.PP
+The fourth and latest component is the patch generator, used to make updates
+of your sources, which can later be applied on the original distribution by
+using the \fIpatch\fR program.
+.PP
+Before using any of the \fIdist\fR programs, you should probably identify your
+package by running the \fIpackinit\fR program, which will create
+a \fI.package\fR file in the top-level directory of your package.
+.SH COMMANDS
+The \fIdist\fR package implements the following commands (those
+tagged as \fIlibrary\fR commands are to be found in the dist
+library and should not be made publicly available in everyone's path):
+.TP 15
+bindex
+builds the \fIIndex\fR file (library).
+.PD 0
+.TP
+jmake
+a Makefile.SH generator.
+.TP
+jmkmf
+bootstraps top-level Makefile.SH file.
+.TP
+kitpost
+posts distribution kits made by \fImakedist\fR.
+.TP
+kitsend
+sends distribution kits made by \fImakedist\fR.
+.TP
+makeSH
+wraps existing scripts into a .SH file.
+.TP
+makedist
+builds up distribution kits.
+.TP
+makegloss
+builds the \fIGlossary\fR file (library).
+.TP
+manicheck
+checks MANIFEST.new accuracy
+.TP
+manifake
+makes MANIFEST.new out of an existing MANIFEST.
+.TP
+manilist
+builds MANIFEST.new reports.
+.TP
+metaconfig
+a Configure script generator.
+.TP
+metalint
+a metaconfig unit consistency checker.
+.TP
+metaxref
+a metaconfig cross-reference builder.
+.TP
+packinit
+initializes a package (creates a .package file).
+.TP
+pat
+main patch generator.
+.TP
+patbase
+resets patch base to current version.
+.TP
+patcil
+checks new version in.
+.TP
+patclean
+remove working version of up-to-date files.
+.TP
+patcol
+checks file out.
+.TP
+patdiff
+builds (contextual) diffs for the patch.
+.TP
+patftp
+copies patches to public ftp directory.
+.TP
+patindex
+builds a patch index.
+.TP
+patlog
+handles ChangeLog file updates.
+.TP
+patmake
+puts diffs together into a patch.
+.TP
+patnotify
+notifies users that new patches have been released.
+.TP
+patpost
+posts patch to some newsgroup.
+.TP
+patsend
+mails patch to some people.
+.TP
+patsnap
+builds a release snapshot with files and RCS revisions.
+.PD
+.SH PROFILE
+Commands having a set of meaningful options (other
+than \fB\-h\fR or \fB\-V\fR) can also take arguments from
+the \fI~/.dist_profile\fR file, or whatever file the \fIDIST\fR
+environment variable points to. Each line of the file is in the
+format:
+.Ex
+profile-component: \fIvalue\fR
+.Ef
+whith shell-style comments (#) allowed provided they start the line.
+.PP
+Each command looks for a profile component entry matching its
+name and loads the \fIvalue\fR as if it were arguments specified
+on the command line. Those arguments precede any other argument
+specified manually, in case order is meaningful.
+.PP
+Some commands may also be configured from within the profile, by setting
+a specific \fIvariable\fR attached to the command by a profile
+entry looking like this:
+.Ex
+cmdname-\fIvariable\fR: \fIvalue\fR
+.Ef
+For instance, assuming the variable \fIc-files\fR is recognized by the
+\fImetaconfig\fR program, its default value could be overwritten by
+this profile entry:
+.Ex
+metaconfig-c-files: \fIsuitable value\fR
+.Ef
+Only the first '-' after the command name is part of the syntax, the
+other one used in the variable name is pure convention. Please refer to the
+manual page of each command for a list of valid profile variables
+which may be set.
+.SH FILES
+.PD 0
+.TP 15
+\&.MT
+Temporary directory created by \fImetaconfig\fR and friends.
+.TP
+\&.newer
+A list of files newer than \fIpatchlevel.h\fR, used by the patching tools.
+.TP
+\&.package
+Main configuration file used by most of the dist tools to make them smart.
+.TP
+ChangeLog
+The file where changes are recorded. Its name may be configured by
+running \fIpackinit\fR, but this is the default "generic" name under
+which it is referred to within the documentation.
+.TP
+Configure
+The generated configuration script.
+.TP
+Glossary
+A list of all the known portability symbols known by \fImetaconfig\fR. This
+file is located in the dist library directory.
+.TP
+I.fui
+Cross-reference file generated by \fImetaxref\fR, sorted by file, unit, item.
+.TP
+I.uif
+Cross-reference file generated by \fImetaxref\fR, sorted by unit, item, file.
+.TP
+Index
+A list of all the rules known by \fIjmake\fR. This file is located in the
+dist library directory.
+.TP
+Jmakefile
+Generic makefile description used by \fIjmake\fR.
+.TP
+MANIFEST
+List of all the files to be included in the distribution. Usually a copy (not
+a link) of MANIFEST.new.
+.TP
+MANIFEST.new
+List of all the files to be taken into account by the dist tools.
+.TP
+Makefile.SH
+The generated configured makefile (via Jmakefile) or hand-generated Makefile
+making use of known metaconfig symbols.
+.TP
+Obsolete
+A list of obsolete symbol used and their new equivalents.
+.TP
+RCS
+Directory where RCS files are stored.
+.TP
+README
+Main file explaining how to build your package.
+.TP
+U
+Private unit directory.
+.TP
+Wanted
+File used by \fImetaconfig\fR, listing all the symbols used by the sources.
+.TP
+bugs
+Directory where patches are stored.
+.TP
+check.extra
+Extra files present in MANIFEST.new, generated by \fImanicheck\fR.
+.TP
+check.want
+Missing files from MANIFEST.new, generated by \fImanicheck\fR.
+.TP
+config_h.SH
+Generated config.h template.
+.TP
+confmagic.h
+Magic symbol remapping, activated via metaconfig's \fB\-M\fR option.
+.TP
+hints
+This directory lists all the configuration hints for your package.
+.TP
+patchlevel.h
+File recording your package patch level, should not be part of MANIFEST.new,
+but may be listed in MANIFEST, at your discretion.
+.TP
+users
+File recording the users of your package, generated by mailagent's \fIpackage\fR
+command (see the MailAuthor.U unit and mailagent 3.0).
+.PD
+.SH ENVIRONMENT
+The following environment variable is paid attention to:
+.TP 15
+DIST
+Location of the dist profile, defaults to ~/.dist_profile. This variable is
+subject to ~name substitution, even if your shell does not support it.
+.SH AUTHORS
+By chronological order:
+.sp
+Larry Wall <lwall@netlabs.com> (dist 2.0 in 1988)
+.br
+Harlan Stenn <harlan@mumps.pfcs.com> (worked on dist 3.0 1990-1992)
+.br
+Raphael Manfredi <Raphael.Manfredi@pobox.com> (dist 3.0 and
+integration 1991-1995)
+.sp
+Please look at the \fICredits\fR file in the distribution source tree for a
+list of all the known contributors.
+.SH "SEE ALSO"
+jmake(1), metaconfig(1), pat(1).
diff --git a/install.SH b/install.SH
new file mode 100755
index 0000000..84f15d4
--- /dev/null
+++ b/install.SH
@@ -0,0 +1,218 @@
+case $CONFIG in
+'')
+ if test -f config.sh; then TOP=.;
+ elif test -f ../config.sh; then TOP=..;
+ elif test -f ../../config.sh; then TOP=../..;
+ elif test -f ../../../config.sh; then TOP=../../..;
+ elif test -f ../../../../config.sh; then TOP=../../../..;
+ else
+ echo "Can't find config.sh."; exit 1
+ fi
+ . $TOP/config.sh
+ ;;
+esac
+case "$0" in
+*/*) cd `expr X$0 : 'X\(.*\)/'` ;;
+esac
+echo "Extracting install (with variable substitutions)"
+$spitshell >install <<!GROK!THIS!
+$startsh
+# @(#) Installing script accepting bsd-style arguments
+
+# $Id$
+#
+# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+#
+# You may redistribute only under the terms of the Artistic Licence,
+# as specified in the README file that comes with the distribution.
+# You may reuse parts of this distribution only within the terms of
+# that same Artistic Licence; a copy of which may be found at the root
+# of the source tree for dist 4.0.
+#
+# $Log: install.SH,v $
+# Revision 3.0.1.1 1993/08/19 06:42:10 ram
+# patch1: leading config.sh searching was not aborting properly
+#
+# Revision 3.0 1993/08/18 12:04:08 ram
+# Baseline for dist 3.0 netwide release.
+#
+
+chown='$chown'
+chmod='$chmod'
+chgrp='$chgrp'
+rm='$rm'
+mv='$mv'
+test='$test'
+sed='$sed'
+!GROK!THIS!
+$spitshell >>install <<'!NO!SUBS!'
+
+mode=""
+dst=""
+src=""
+dostrip=""
+newdir=""
+uid=""
+gid=""
+
+CDPATH=""
+
+# simulates mkdir -p
+mkdir_p='
+name=$1;
+create="";
+while $test $name; do
+ if $test ! -d "$name"; then
+ create="$name $create";
+ name=`echo $name | $sed -e "s|^[^/]*$||"`;
+ name=`echo $name | $sed -e "s|\(.*\)/.*|\1|"`;
+ else
+ name="";
+ fi;
+done;
+for file in $create; do
+ mkdir $file && $test $verbose &&
+ echo "install: created directory $file" >&2;
+done
+'
+
+verbose=''
+
+while $test x$1 != x
+do
+ case $1 in
+ -c) shift
+ continue
+ ;;
+ -m) mode="$2 "
+ shift
+ shift
+ continue
+ ;;
+ -o) uid="$2 "
+ shift
+ shift
+ continue
+ ;;
+ -g) gid="$2 "
+ shift
+ shift
+ continue
+ ;;
+ -s) dostrip="strip"
+ shift
+ continue
+ ;;
+ -d) newdir="$newdir$2 "
+ shift
+ shift
+ continue
+ ;;
+ -v) verbose='true'
+ shift
+ ;;
+ *) if $test x$src = x
+ then
+ src=$1
+ else
+ dst=$1
+ fi
+ shift
+ continue
+ ;;
+ esac
+done
+
+# if -d option is used, we have to create the path given
+if $test ! x$newdir = x
+then
+ for i in $newdir
+ do
+ set x $i
+ shift
+ eval $mkdir_p
+ done
+ exit 0 # -d is the only action
+fi
+
+if $test x$src = x
+then
+ echo "install: no input file specified" >&2
+ exit 1
+fi
+
+if $test x$dst = x
+then
+ echo "install: no destination specified" >&2
+ exit 1
+fi
+
+srcbase=`basename $src`
+dstbase=`basename $dst`
+
+# If the destination is a directory, the target name is srcbase...
+if $test -d $dst; then
+ dstbase=$srcbase
+else
+ dst="`echo $dst | sed 's,^\(.*\)/.*$,\1,'`"
+ if $test ! -d $dst; then
+ dstbase=$dst
+ dst="."
+ fi
+fi
+
+# If the src has a directory, extract the dir name...
+if $test "$src" != "$srcbase" -a "$src" != "./$srcbase"; then
+ src="`echo $src | sed 's,^\(.*\)/.*$,\1,'`"
+else
+ src="."
+fi
+
+# dst is the destination directory and dstbase the base name.
+# srcbase is the base name of source and src the source dir.
+
+srcpth=`(cd $src; pwd)`/$srcbase
+destpth=`(cd $dst; pwd)`/$dstbase
+if $test x$srcpth = x$destpth; then
+ $test $verbose && \
+ echo "install: destination and source are identical"
+ exit 0
+fi
+
+# Do the install
+(
+ cd $src
+
+ if $test -f $dst/$dstbase; then
+ $rm -f $dst/$dstbase && $test $verbose &&
+ echo "install: $dst/$dstbase removed"
+ fi
+ if $test -f $dst/$dstbase; then
+ $mv $dst/$dstbase $dst/OLD$dstbase && $test $verbose &&
+ echo "install: $dst/$dstbase renamed as OLD$dstbase"
+ fi
+
+ cp $srcbase $dst/$dstbase && $test $verbose &&
+ echo "install: $srcbase installed as $dst/$dstbase"
+
+ if $test ! x$dostrip = x; then
+ strip $dst/$dstbase 2>/dev/null && $test $verbose &&
+ echo "install: stripped $dst/$dstbase"
+ fi
+
+ if $test ! x$uid = x; then
+ $chown $uid $dst/$dstbase
+ fi
+ if $test ! x$gid = x; then
+ $chgrp $gid $dst/$dstbase
+ fi
+ if $test ! x$mode = x
+ then
+ $chmod $mode $dst/$dstbase
+ fi
+)
+
+exit 0
+!NO!SUBS!
+chmod 755 install
+$eunicefix install
diff --git a/jmake/Jmakefile b/jmake/Jmakefile
new file mode 100644
index 0000000..22d336a
--- /dev/null
+++ b/jmake/Jmakefile
@@ -0,0 +1,53 @@
+/*
+ * Jmakefile for jmake
+ */
+
+;# $Id$
+;#
+;# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+;#
+;# You may redistribute only under the terms of the Artistic Licence,
+;# as specified in the README file that comes with the distribution.
+;# You may reuse parts of this distribution only within the terms of
+;# that same Artistic Licence; a copy of which may be found at the root
+;# of the source tree for dist 4.0.
+;#
+;# $Log: Jmakefile,v $
+;# Revision 3.0.1.2 1995/03/21 08:34:16 ram
+;# patch52: now installs new fixcpp script in the private libdir
+;#
+;# Revision 3.0.1.1 1994/01/24 13:42:36 ram
+;# patch16: added dependency generation stage
+;#
+;# Revision 3.0 1993/08/18 12:04:09 ram
+;# Baseline for dist 3.0 netwide release.
+;#
+
+AllTarget(Index)
+
+Index: bindex files/Jmake.rules
+ chmod +x bindex
+ ./bindex
+
+ShellScriptTarget(jmake jmkmf)
+SimpleShellScriptTarget(bindex fixcpp)
+
+MakeInstallDirectories($(PRIVLIB) $(PRIVLIB)/files)
+InstallNonExec(Index,$(PRIVLIB))
+InstallScript(bindex,$(PRIVLIB))
+InstallScript(fixcpp,$(PRIVLIB)/files)
+InstallMultipleFlags(files/Jmake*,$(PRIVLIB)/files,-m 444)
+
+BINSH = jmake.SH fixcpp.SH
+
+depend:: local_depend
+local_depend::
+ ($(SED) '/^# DO NOT DELETE/q' Makefile && \
+ grep '^\$$grep' $(BINSH) | \
+ $(SED) -e "s/^.*' \([^ ]*\) >>\([^ ]*\)/\2: \1/" \
+ ) > Makefile.new
+ cp Makefile Makefile.bak
+ cp Makefile.new Makefile
+ $(RM) Makefile.new
+
+fixcpp jmake: $(TOP)/revision.h
diff --git a/jmake/Makefile.SH b/jmake/Makefile.SH
new file mode 100755
index 0000000..76a7182
--- /dev/null
+++ b/jmake/Makefile.SH
@@ -0,0 +1,317 @@
+: Makefile.SH generated from Jmake.tmpl and Jmakefile [jmake 3.5-172]
+: $X-Id: Jmake.tmpl 156 2012-12-19 16:44:39Z rmanfredi $
+
+case $CONFIG in
+'')
+ if test -f config.sh; then TOP=.;
+ elif test -f ../config.sh; then TOP=..;
+ elif test -f ../../config.sh; then TOP=../..;
+ elif test -f ../../../config.sh; then TOP=../../..;
+ elif test -f ../../../../config.sh; then TOP=../../../..;
+ else
+ echo "Can't find config.sh."; exit 1
+ fi
+ . $TOP/config.sh
+ ;;
+esac
+case "$0" in
+*/*) cd `expr X$0 : 'X\(.*\)/'` ;;
+esac
+CURRENT=jmake
+DIR=`echo $CURRENT/ | sed -e 's/\.\///g'`
+echo "Extracting ${DIR}Makefile (with variable substitutions)"
+
+INSTALL=`echo $install | sed -e 's,\./i,\$(TOP)/i,'`
+INSTALLDIR=`echo $installdir | sed -e 's,\./i,\$(TOP)/i,'`
+DATE=`date`
+
+$spitshell >Makefile <<!GROK!THIS!
+########################################################################
+# Makefile generated from Makefile.SH on $DATE
+
+SHELL = /bin/sh
+JMAKE = jmake
+TOP = ..
+CURRENT = $CURRENT
+DIR = $DIR
+INSTALL = $INSTALL
+INSTALLDIR = $INSTALLDIR
+
+########################################################################
+# Parameters set by Configure -- edit config.sh if changes are needed
+
+CTAGS = ctags
+JCPPFLAGS = $cppflags
+L = $manext
+MANSRC = $installmansrc
+MV = $mv
+PRIVLIB = $installprivlib
+RM = $rm -f
+SCRIPTDIR = $installscript
+SED = $sed
+
+########################################################################
+# Automatically generated parameters -- do not edit
+
+SCRIPTS = jmake jmkmf
+
+!GROK!THIS!
+$spitshell >>Makefile <<'!NO!SUBS!'
+########################################################################
+# Jmake rules for building libraries, programs, scripts, and data files
+# $X-Id: Jmake.rules 106 2011-11-25 20:36:12Z rmanfredi $
+
+########################################################################
+# Start of Jmakefile
+
+# $X-Id: Jmakefile 173 2014-04-05 08:10:18Z rmanfredi $
+#
+# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+#
+# You may redistribute only under the terms of the Artistic Licence,
+# as specified in the README file that comes with the distribution.
+# You may reuse parts of this distribution only within the terms of
+# that same Artistic Licence; a copy of which may be found at the root
+# of the source tree for dist 4.0.
+#
+# $X-Log: Jmakefile,v $
+# Revision 3.0.1.2 1995/03/21 08:34:16 ram
+# patch52: now installs new fixcpp script in the private libdir
+#
+# Revision 3.0.1.1 1994/01/24 13:42:36 ram
+# patch16: added dependency generation stage
+#
+# Revision 3.0 1993/08/18 12:04:09 ram
+# Baseline for dist 3.0 netwide release.
+#
+
+all:: Index
+
+local_realclean::
+ $(RM) Index
+
+Index: bindex files/Jmake.rules
+ chmod +x bindex
+ ./bindex
+
+all:: jmake jmkmf
+
+local_realclean::
+ $(RM) jmake jmkmf
+
+jmake: jmake.SH
+ /bin/sh jmake.SH
+
+jmkmf: jmkmf.SH
+ /bin/sh jmkmf.SH
+
+
+local_install:: $(SCRIPTS) $(LSCRIPTS)
+ @case '${MFLAGS}' in *[i]*) set +e;; esac; \
+ (set -x; test -d $(INSTALL_PREFIX)$(SCRIPTDIR) || \
+ $(INSTALLDIR) $(INSTALL_PREFIX)$(SCRIPTDIR)); \
+ for file in $(SCRIPTS) $(LSCRIPTS); do \
+ (set -x; \
+ $(INSTALL) -c -m 555 $$file $(INSTALL_PREFIX)$(SCRIPTDIR)) || \
+ exit 1; \
+ done
+
+local_deinstall::
+ @for file in $(SCRIPTS) $(LSCRIPTS); do \
+ case '${MFLAGS}' in *[i]*) set +e;; esac; \
+ (set -x; $(RM) $(INSTALL_PREFIX)$(SCRIPTDIR)/$$file); \
+ done
+
+local_install.man::
+ @case '${MFLAGS}' in *[i]*) set +e;; esac; \
+ (set -x; test -d $(INSTALL_PREFIX)$(MANSRC) || \
+ $(INSTALLDIR) $(INSTALL_PREFIX)$(MANSRC)); \
+ for file in $(SCRIPTS); do \
+ if test -f $$file.man; then \
+ (set -x; \
+ $(INSTALL) -c -m 444 $$file.man \
+ $(INSTALL_PREFIX)$(MANSRC)/$$file.$(L)) || \
+ exit 1; \
+ fi; \
+ done
+
+local_deinstall.man::
+ case '${MFLAGS}' in *[i]*) set +e;; esac; \
+ for file in $(SCRIPTS); do \
+ (set -x; $(RM) $(INSTALL_PREFIX)$(MANSRC)/$$file.$(L)); \
+ done
+
+all:: bindex fixcpp
+
+local_realclean::
+ $(RM) bindex fixcpp
+
+bindex: bindex.SH
+ /bin/sh bindex.SH
+
+fixcpp: fixcpp.SH
+ /bin/sh fixcpp.SH
+
+
+local_install::
+ @case '${MFLAGS}' in *[i]*) set +e;; esac; \
+ for dir in $(PRIVLIB) $(PRIVLIB)/files; do \
+ (set -x; test -d $(INSTALL_PREFIX)$$dir || \
+ $(INSTALLDIR) $(INSTALL_PREFIX)$$dir); \
+ done
+
+local_deinstall::
+ @case '${MFLAGS}' in *[i]*) set +e;; esac; \
+ for dir in $(PRIVLIB) $(PRIVLIB)/files; do \
+ (set -x; test -d $$dir && $(RM) -r $(INSTALL_PREFIX)$$dir); \
+ done
+
+local_install:: Index
+ @case '${MFLAGS}' in *[i]*) set +e;; esac; \
+ (set -x; test -d $(INSTALL_PREFIX)$(PRIVLIB) || \
+ $(INSTALLDIR) $(INSTALL_PREFIX)$(PRIVLIB)); \
+ $(INSTALL) -c -m 444 Index $(INSTALL_PREFIX)$(PRIVLIB)
+
+local_deinstall::
+ $(RM) $(INSTALL_PREFIX)$(PRIVLIB)/Index
+
+local_install:: bindex
+ @case '${MFLAGS}' in *[i]*) set +e;; esac; \
+ (set -x; test -d $(INSTALL_PREFIX)$(PRIVLIB) || \
+ $(INSTALLDIR) $(INSTALL_PREFIX)$(PRIVLIB)); \
+ $(INSTALL) -c -m 555 bindex $(INSTALL_PREFIX)$(PRIVLIB)
+
+local_deinstall::
+ $(RM) $(INSTALL_PREFIX)$(PRIVLIB)/bindex
+
+local_install:: fixcpp
+ @case '${MFLAGS}' in *[i]*) set +e;; esac; \
+ (set -x; test -d $(INSTALL_PREFIX)$(PRIVLIB)/files || \
+ $(INSTALLDIR) $(INSTALL_PREFIX)$(PRIVLIB)/files); \
+ $(INSTALL) -c -m 555 fixcpp $(INSTALL_PREFIX)$(PRIVLIB)/files
+
+local_deinstall::
+ $(RM) $(INSTALL_PREFIX)$(PRIVLIB)/files/fixcpp
+
+local_install:: files/Jmake*
+ @case '${MFLAGS}' in *[i]*) set +e;; esac; \
+ (set -x; test -d $(INSTALL_PREFIX)$(PRIVLIB)/files || \
+ $(INSTALLDIR) $(INSTALL_PREFIX)$(PRIVLIB)/files); \
+ for i in files/Jmake*; do \
+ (set -x; $(INSTALL) -c -m 444 \
+ $$i $(INSTALL_PREFIX)$(PRIVLIB)/files) || exit 1;\
+ done
+
+local_deinstall::
+ @case '${MFLAGS}' in *[i]*) set +e;; esac; \
+ for i in files/Jmake*; do \
+ (set -x; $(RM) $(INSTALL_PREFIX)$(PRIVLIB)/files/$$i); \
+ done
+
+BINSH = jmake.SH fixcpp.SH
+
+depend:: local_depend
+local_depend::
+ ($(SED) '/^# DO NOT DELETE/q' Makefile && \
+ grep '^\$$grep' $(BINSH) | \
+ $(SED) -e "s/^.*' \([^ ]*\) >>\([^ ]*\)/\2: \1/" \
+ ) > Makefile.new
+ cp Makefile Makefile.bak
+ cp Makefile.new Makefile
+ $(RM) Makefile.new
+
+fixcpp jmake: $(TOP)/revision.h
+
+########################################################################
+# Common rules for all Makefiles -- do not edit
+
+all::
+
+clean: local_clean
+realclean: local_realclean
+clobber: local_clobber
+
+local_clean::
+ if test -f core; then $(RM) core; fi
+ $(RM) *~ *.o
+
+local_realclean:: local_clean
+
+local_clobber:: local_realclean
+ $(RM) Makefile config.sh
+
+install:: local_install
+ @exit 0
+
+install.man:: maybe_install.man
+deinstall:: local_deinstall
+deinstall.man:: maybe_deinstall.man
+
+install.man-yes: local_install.man
+install.man-no:
+deinstall.man-yes: local_deinstall.man
+deinstall.man-no:
+
+!NO!SUBS!
+case "$installmansrc" in
+'') man=no;;
+*) man=yes;;
+esac
+$spitshell >>Makefile <<!GROK!THIS!
+maybe_install.man: install.man-$man
+maybe_deinstall.man: deinstall.man-$man
+!GROK!THIS!
+$spitshell >>Makefile <<'!NO!SUBS!'
+
+Makefile.SH: Jmakefile
+ -@if test -f $(TOP)/.package; then \
+ if test -f Makefile.SH; then \
+ echo " $(RM) Makefile.SH~; $(MV) Makefile.SH Makefile.SH~"; \
+ $(RM) Makefile.SH~; $(MV) Makefile.SH Makefile.SH~; \
+ fi; \
+ echo " $(JMAKE) -DTOPDIR=$(TOP) -DCURDIR=$(CURRENT)" ; \
+ $(JMAKE) -DTOPDIR=$(TOP) -DCURDIR=$(CURRENT) ; \
+ else touch $@; fi
+
+Makefile: Makefile.SH
+ /bin/sh Makefile.SH
+
+tags::
+ $(CTAGS) -w *.[ch]
+ $(CTAGS) -xw *.[ch] > tags
+
+local_clobber::
+ $(RM) tags
+
+depend::
+
+########################################################################
+# Empty rules for directories with no sub-directories -- do not edit
+
+local_install::
+ @echo "install in $(CURRENT) done."
+
+local_deinstall::
+ @echo "deinstall in $(CURRENT) done."
+
+local_install.man::
+ @echo "install.man in $(CURRENT) done."
+
+local_deinstall.man::
+ @echo "deinstall.man in $(CURRENT) done."
+
+Makefiles::
+
+Makefiles.SH::
+
+########################################################################
+# Dependencies generated by make depend
+# DO NOT DELETE THIS LINE -- make depend relies on it
+
+# Put nothing here or make depend will gobble it up
+.FORCE_DEPEND::
+ @echo "You must run 'make depend' in $(TOP) first."; exit 1
+!NO!SUBS!
+chmod 644 Makefile
+$eunicefix Makefile
+
diff --git a/jmake/NOTES b/jmake/NOTES
new file mode 100644
index 0000000..a11618d
--- /dev/null
+++ b/jmake/NOTES
@@ -0,0 +1,189 @@
+The syntax in Jmake.rules is not elegant at all, but:
+
+ - It is easy to parse (like sendmail.cf or troff files).
+ - The rules are not supposed to change very often.
+ - It is simple enough to be mastered in five minutes. :-)
+
+Here is a small description:
+
+o To deal with various cpp implementations:
+
+Final @!\ means: end of line, next line starts at the left margin.
+Final @@\ means: end of line, next line is to be indented by one tab.
+
+The conversion occurs during Pass1.
+
+
+o Symbol definitions
+
+>SYMBOL: defines the symbol (Pass 1).
+?SYMBOL:<text>: keeps <text> iff SYMBOL is defined (Pass 2).
+%SYMBOL:<text>: keeps <text> iff SYMBOL is not defined (Pass 2).
+
+The ?SYM can be nested (logical AND), as in:
+
+ ?SYMBOL:%TOKEN:text /* Keeps text if SYMBOL and not TOKEN */
+
+To implement a logical OR, see below.
+
+
+o Commands
+
+Commands can be passed to 'jmake'. They start with a leading '|'.
+
+Available commands are:
+
+|suffix <sx>: adds <sx> to the .SUFFIXES: list in the makefile (Pass 1 & 2).
+|rule:<text>: adds <text> to the building rule section (Pass 1 & 2).
+|rule: <text>: same as before, with a leading tab.
+|skip: skips text until a line starting with '-skip' is found (Pass 2).
+|expand <pattern>: expand lines until '-expand' with <pattern> (Pass 2).
+|once <symbol>: text up to '-once' appears only the first time (Pass 1).
+
+Thus, a way to implement a logical OR could be:
+
+ /* Implements SYMBOL or not TOKEN */
+ ?SYMBOL:text /* Keeps text if SYMBOL */
+ %SYMBOL:|skip
+ %TOKEN:text /* Keeps text if not TOKEN */
+ -skip
+
+Actually, this is ugly, because the text has to appear twice.
+Fortunately, I did not use it. :-)
+
+The '|' commands cannot be nested. In particular, due to the simple
+implementation of '|skip', it is impossible to put '|skip' inside
+a skipped part. However, a '|once' section may have '|skip' sections.
+
+But actually, as you have surely already guessed, the best way to
+implement a logical OR is to use De Morgan's Law:
+
+ not (p or q) <=> not p and not q
+
+ /* Implements SYMBOL or not TOKEN (attempt #2) */
+ %SYMBOL:?TOKEN:|skip
+ text /* If SYMBOL or not TOKEN */
+ -skip
+
+Who said they don't care ? ;-)
+
+o Expansion
+
+Expansion is done with the 'expand' command. It has been provided to
+avoid some cumbersome writings in makefiles when you have to repeat some
+silly lines that only differ in file names, for instance. Let's look at
+an example first:
+
+ |expand a!foo bar! b!yes no!
+ !a::
+ echo !a, !b
+ -expand
+
+Then two rules will be printed, and the values of (a,b) for the first
+will be (foo, yes), for the second (bar, no). Substitution is controled
+by the '!' character. If the word to be substituted is part of another
+one, detach with the ^^ construct as in: !b^^c. It is possible to
+use Makefile macros in the <pattern>, and they will be expanded by
+jmake. If this is not what you want, escape the first '$' sign (this is
+a Makefile escape, i.e. you must double the '$', not precede it with a
+backslash). A // stands for the null substitution value.
+
+Here is another example which shows how the macro Expand can be used.
+It is defined in Jmake.rules as:
+
+ #define Expand(rule, pattern) @!\
+ |expand pattern @!\
+ rule @!\
+ -expand
+
+So we can write in the Jmakefile:
+
+ |skip
+ A = foo bar
+ -skip
+
+ #define Rule @!\
+ $(DIR)/!a^^.o: !a^^.o @@\
+ $(CC) -c !a^^.c @@\
+ $(MV) !a^^.o $(DIR)
+
+ Expand(Rule, a!$(A)!)
+
+which will generate in Makefile.SH:
+
+ $(DIR)/foo.o: foo.o
+ $(CC) -c foo.c
+ $(MV) foo.o $(DIR)
+
+ $(DIR)/bar.o: bar.o
+ $(CC) -c bar.c
+ $(MV) bar.o $$(DIR)
+
+The 'A' declaration has been surrounded by skip, so that it does
+not appear in the generated Makefile.SH, but it will be taken into
+account by jmake for the substitution in the pattern.
+
+The number of expansions is determined by the number of possible
+values for the _first_ parameter. If other parameters have less
+substitution values, they will get void ones.
+
+It is possible to add a regular expression at the end of '-expand'.
+This regular expression will be removed from the final set of expansion
+at the end of each line. It is also possible to do substitutions in the
+expanded item, by using the syntax (if 'f' is the expanded variable)
+!f:<p>=<q> where <p> and <q> are two regular expressions (without
+spaces). The pattern <p> will be replaced by pattern <q> (only the
+first occurrence will be replaced).
+
+Finally, you may refer in the expanded section to variables whose value
+is computed via another expansion, which makes it easy to define generic
+Jmakefiles.
+
+Example:
+
+ SRC = foo.c bar.c
+ OBJ = \
+ |expand f!$(SRC)!
+ !f:\.c=\.o \
+ -expand \\
+ INC = \
+ |expand f!$(OBJ)!
+ !f:\.o=\.h \
+ -expand \\
+
+which will generate in Makefile.SH:
+
+ SRC = foo.c bar.c
+ OBJ = \
+ foo.o \
+ bar.o
+ INC = \
+ foo.h \
+ bar.h
+
+Do not forget to protect special characters in your regular expressions such
+as backslash, point, etc...
+
+o Once
+
+The once command is tagged with a name. The first time the name appears,
+the once construct is ignored and the text up to '-once' will be copied
+in the generated Makefile.SH. However, future occurences of the same
+name will be ignored (once will behave like skip).
+
+Example:
+
+ |once this_is_a_name
+ <text>
+ -once
+
+o Initializations
+
++<line>: Puts the whole line in the initialization section (Pass 1 & 2).
+++SYMBOL <value>: Adds <value> to the SYMBOL macro (Pass 1 and 2).
+
+o User-defined variables
+
+CFLAGS: added flags to C compiler
+DPFLAGS: cpp flags to be added to mkdep for dependency
+LDFLAGS: flags/libraries to be added at linking stage
diff --git a/jmake/README b/jmake/README
new file mode 100644
index 0000000..636cc8f
--- /dev/null
+++ b/jmake/README
@@ -0,0 +1,70 @@
+This is the root directory for jmake.
+
+The jmake program is a Makefile generator. It comes from 'imake' one
+may find in the X11R4 distribution, but it produces a Makefile.SH
+instead of a Makefile. Jmake has a template which knows some metaconfig
+symbols and has built-in commands which make it more powerful than imake.
+
+The jmkmf script may be used to produce the Makefile.SH from a Jmakefile.
+Once the bootstrap is done, you can run 'make Makefile.SH' to rebuild the
+Makefile.SH in the current directory, or 'make Makefiles.SH' to build the
+Makefiles in a recursive manner.
+
+All the rules used by jmake are listed in an automatically built index.
+The jmake's cryptic syntax is documented in file NOTES. You may also
+have a look at the sample Jmakefiles that come with this package.
+Usually, you do not include them in the release, but I kept them so
+that you may have a real example and see how things are organized.
+
+If you choose to use jmake, then you will have to use metaconfig, in
+order to get a meaningful value for all the needed symbol. Thus, each
+time you change your Jmakefiles, it may be necessary to update the
+Configure script.
+
+Here is how to use jmake...
+
+First, you have to write a Jmakefile for each directory where you want
+to put a Makefile. Be sure to declare all the sub-directories with the
+SetSubdirs rule. Usually, the order of the rules is not significant,
+but you should make sure the Makefile begins with an 'all::' target,
+so that a default 'make' does not run a clean for instance.
+
+Then, if this is the first time, you have to bootstrap. Go to the main
+directory of your package and run:
+
+ jmkmf
+ make Makefiles.SH
+
+which will first produce the main makefile and then recursively build
+all the makefiles.
+
+Once you have bootstrapped once, you can edit a Jmakefile and rebuild
+the local makefile with
+
+ make Makefile
+
+or all the hierachy below with:
+
+ make Makefiles.SH
+
+If you want to extract all the makefiles, you may run
+
+ sh Makefile.SH
+ make Makefiles
+
+in the top-level directory. Finally, if you only want to test the
+generated Makefile.SH without disturbing the Makefile, run
+
+ make Makefile.SH
+
+which will stop before running the produced file through sh.
+
+
+CAUTION:
+
+On machines whose cpp eats up tabs in macro expansion, the Makefile.SH
+produced might not be indented properly inside rules.
+
+Perl 4.0 PL10 sometimes dumps core, while PL3 does not. Thus, perl 4.0
+PL10 should NOT be used with jmake, at least on a MIPS.
+
diff --git a/jmake/bindex.SH b/jmake/bindex.SH
new file mode 100755
index 0000000..323e4b7
--- /dev/null
+++ b/jmake/bindex.SH
@@ -0,0 +1,185 @@
+case $CONFIG in
+'')
+ if test -f config.sh; then TOP=.;
+ elif test -f ../config.sh; then TOP=..;
+ elif test -f ../../config.sh; then TOP=../..;
+ elif test -f ../../../config.sh; then TOP=../../..;
+ elif test -f ../../../../config.sh; then TOP=../../../..;
+ else
+ echo "Can't find config.sh."; exit 1
+ fi
+ . $TOP/config.sh
+ ;;
+esac
+case "$0" in
+*/*) cd `expr X$0 : 'X\(.*\)/'` ;;
+esac
+echo "Extracting bindex (with variable substitutions)"
+$spitshell >bindex <<!GROK!THIS!
+$startperl
+!GROK!THIS!
+$spitshell >>bindex <<'!NO!SUBS!'
+ eval 'exec perl -S $0 ${1+"$@"}'
+ if $runnning_under_some_shell;
+
+# $Id$
+#
+# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+#
+# You may redistribute only under the terms of the Artistic Licence,
+# as specified in the README file that comes with the distribution.
+# You may reuse parts of this distribution only within the terms of
+# that same Artistic Licence; a copy of which may be found at the root
+# of the source tree for dist 4.0.
+#
+# $Log: bindex.SH,v $
+# Revision 3.0.1.1 1993/08/19 06:42:12 ram
+# patch1: leading config.sh searching was not aborting properly
+#
+# Revision 3.0 1993/08/18 12:04:13 ram
+# Baseline for dist 3.0 netwide release.
+#
+
+$file = "files/Jmake.rules";
+
+open(INDEX, ">Index") || die "Cannot create Index.\n";
+open(RULES, "$file") || die "Cannot open $file.\n";
+
+print INDEX
+"[This Index is automatically generated from Jmake.rules file. Do not
+edit this file or your changes will be lost. Edit Jmake.rules instead.]
+
+This file contains a listing of all the macros that can be used in a
+Jmakefile. Only a few of these should be used in the Jmakefile (they
+are the top-level macros). However, some low-level ones may be useful,
+but it is up to you to make that decision. This explains why this file
+holds all the available macros for jmake.
+
+In the following listing, the macros are separated by a line of dashes.
+The signature of the macro is given, then a small comment of what it
+does precedes the actual definition.
+
+Lines preceded by '->' show the set of symbols defined when the macro is
+used. Initialization lines are shown as-is, i.e. have the form SYM = val
+while concatenation is shown by SYM += val (which means val is added to
+the value of SYM).
+
+Conditional lines are preceded by tests like (if SYM). This means the line
+is to be kept if and only if the symbol SYM is defined. Other internal
+requests are not formatted yet.
+
+";
+$inrule = 0; # Not inside a rule at the beginning
+$incomment = 0; # Not inside a comment
+$last_was_text = 0; # Last line was not a rule text
+while (<RULES>) {
+ $inrule || next unless /^\s\*\s(\w+)\s*:/;
+ if ($inrule) { # We are already in a rule
+ if ($incomment) {
+ if (m|^\s*\*/|) { # End of comment
+ $incomment = 0;
+ $Comment{$current} .= "\n";
+ } else {
+ s/^\s*\*\s*//; # Remove leading comment sign
+ $Comment{$current} .= " $_";
+ }
+ next; # Anyway, go to next line
+ }
+ if (/^\s*$/) { # Empty line = end of rule
+ $inrule = 0;
+ next;
+ }
+ # Here, we have to print the body of the rule, after some cleaning
+ s/(@#|@@|@!)\\$//; # Remove final continuations
+ s/^(#define.*)\\/$1/; # Remove single '\' on first rule line
+ s/\|rule:\s*$/\n/;
+ s/\|rule:\s+/ /; # Remove rule markers
+ s/\|rule://;
+ s/%(\w+):\|skip/#ifdef $1/; # Deal with ugly skip syntax
+ s/\?(\w+):\|skip/#ifndef $1/; # Deal with ugly skip syntax
+ s/\-skip/#endif/;
+ s/\?(\w+):/(if $1) /; # Simple '?' test
+ s/%(\w+):/(not $1) /; # Simple '%' test
+ s/\|suffix/.SUFFIXES:/; # Make suffix command explicit
+ s/\t/ /g; # Expand all tabs to 4 chars
+ s/\s*$/\n/; # Remove any trailing space
+ s|\^\^\^|/***/|; # Change ^^^ to the more visual /***/
+ s|\^\^|/**/|; # Restore ^^ to the more visual /**/
+ if (/^$/) { # If empty line
+ $Index{$current} .= "\n" if $last_was_text;
+ $last_was_text = 0;
+ next;
+ }
+ if (/^[>+]/) { # Special commands
+ if (s/^>\s*//) { # Wanted symbol
+ chop;
+ $Wants{$current} .= " $_";
+ } elsif (/^\+\+\s*(\S+)\s*(.*)/) { # Added symbol
+ $Added{$current} .= "\t$1 += $2\n";
+ } else {
+ s/^\+\s*(.*)//;
+ $Init{$current} .= "\t$1\n";
+ }
+ next;
+ }
+ if (s/^#define\s+//) { # Definition of the rule
+ chop;
+ $Sig{$current} = $_; # Signature of rule
+ } else {
+ $Index{$current} .= " $_"; # Rule's body
+ $last_was_text = 1;
+ }
+ } else { # We've just entered a rule
+ $current = $1;
+ next if $current =~ /patch\d/; # Skip RCS log messages
+ $inrule = 1;
+ $incomment = 1; # We're still in the leading comment
+ $Seen{$current} = 1;
+ $last_was_text = 0;
+ }
+}
+close RULES;
+
+# Now sort the rules in alphabetical order
+
+print INDEX '-' x 72, "\n";
+foreach $rule (sort(keys %Seen)) {
+ print INDEX "$Sig{$rule}:\n";
+ print INDEX $Comment{$rule};
+ $line = $Wants{$rule};
+ if (length($line)) {
+ $line = "->$line.";
+ $line = &format($line);
+ print INDEX "$line\n";
+ }
+ $line = $Init{$rule};
+ print INDEX "$line\n" if length($line);
+ $line = $Added{$rule};
+ print INDEX "$line\n" if length($line);
+ $line = $Index{$rule};
+ print INDEX $line;
+ print INDEX "\n" if (length($line));
+ print INDEX '-' x 72, "\n";
+}
+
+close INDEX;
+
+# Format $_ to fit in 80 columns (70 + size of tabs)
+# Long lines are split, and the all but the first are indented
+# by two leading spaces. The whole thing is then indented by
+# one tab.
+sub format {
+ local($tmp);
+ local($head) = '';
+ local($_) = shift(@_);
+ while (length($_) > 70) {
+ $tmp = substr($_,0,70);
+ $tmp =~ s/^(.*) .*/$1/;
+ $head .= "\t$tmp\n";
+ $_ = ' ' . substr($_,length($tmp),9999);
+ }
+ $head .= "\t$_\n";
+}
+!NO!SUBS!
+chmod 755 bindex
+$eunicefix bindex
diff --git a/jmake/files/Jmake.rules b/jmake/files/Jmake.rules
new file mode 100644
index 0000000..21b37e7
--- /dev/null
+++ b/jmake/files/Jmake.rules
@@ -0,0 +1,1901 @@
+;########################################################################
+;# Jmake rules for building libraries, programs, scripts, and data files
+;# $Id$
+
+/*
+ * MACHINE-INDEPENDENT RULES -- DO NOT MODIFY
+ */
+
+/* $Id$
+ *
+ * Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+ *
+ * You may redistribute only under the terms of the Artistic Licence,
+ * as specified in the README file that comes with the distribution.
+ * You may reuse parts of this distribution only within the terms of
+ * that same Artistic Licence; a copy of which may be found at the root
+ * of the source tree for dist 4.0.
+ *
+ * $Log: Jmake.rules,v $
+ * Revision 3.0.1.7 2004/08/22 08:28:58 ram
+ * patch71: random cleanup
+ *
+ * Revision 3.0.1.6 1997/02/28 14:56:01 ram
+ * patch61: now handles USRINC for dependencies
+ * patch61: smarter about dependencies computation
+ *
+ * Revision 3.0.1.5 1995/09/25 09:07:19 ram
+ * patch59: smarter sed command to strip /usr/include dependencies
+ *
+ * Revision 3.0.1.4 1995/07/25 13:33:59 ram
+ * patch56: install of script man pages can now cope with missing files
+ * patch56: the clobber target now removes the .config directory as well
+ *
+ * Revision 3.0.1.3 1995/03/21 08:35:28 ram
+ * patch52: suppressed extra argument to NormalProgramTarget call
+ *
+ * Revision 3.0.1.2 1995/01/11 14:49:55 ram
+ * patch45: new macros ShellScriptTargetExt and SimpleShellScriptTargetExt
+ * patch45: directory installation is now made via INSTALLDIR (Configure)
+ *
+ * Revision 3.0.1.1 1994/10/29 15:46:30 ram
+ * patch36: added RemoteDependency rule
+ *
+ * Revision 3.0 1993/08/18 12:04:14 ram
+ * Baseline for dist 3.0 netwide release.
+ *
+ */
+
+/* Please, edit only with tabstops = 4 (":set ts=4" under vi) */
+
+/*
+ * AddedByConfigure:
+ * Gives name of the files generated by Configure that can safely
+ * be removed when a "make clobber" is issued. Not that it is useless
+ * to name config.h or config.sh because these are already taken care
+ * of by jmake.
+ */
+#define AddedByConfigure(files) @!\
+local_clobber:: @@\
+ $(RM) files
+
+/*
+ * AddSuffix:
+ * Adds a sufix to the .SUFFIXES: list.
+ */
+#define AddSuffix(ext) @!\
+|suffix ext
+
+
+/*
+ * AllTarget:
+ * Generate rules to build necessary things during make all.
+ */
+#define AllTarget(depends) @!\
+all:: depends @!\
+ @!\
+local_realclean:: @@\
+ $(RM) depends
+
+/*
+ * AllTargetProgram:
+ * Generate rules to build necessary things during make all.
+ * This target is specific to executable. Use AllTarget() for
+ * other type of files.
+ */
+#define AllTargetProgram(program) @!\
+all:: program @!\
+ @!\
+local_realclean:: @@\
+ $(RM) program^^$(_EXE)
+
+/*
+ * RemoveTargetProgram:
+ * This is used in some other macros in order to remove the target
+ * before starting its building (saves disk space). There should be
+ * no '@!' at the end of the '#define' line, because this macro is
+ * used *inside* building rules.
+ */
+#define RemoveTargetProgram(program) \
+ -$(RM) program^^$(_EXE) @@\
+ if test -f program^^^$(_EXE); then \ @@\
+ $(MV) program^^^$(_EXE) program^^~^^^$(_EXE); fi
+
+
+/*
+ * NormalProgramTarget:
+ * Generate rules to compile and link the indicated program; since
+ * it does not use any default object files, it may be used for
+ * multiple programs in the same Jmakefile.
+ */
+#define NormalProgramTarget(program,sources,objects) @!\
+++OBJECTS objects @!\
+++SOURCES sources @!\
+NormalObjectRule() @!\
+AllTargetProgram(program) @!\
+ @!\
+program: objects @@\
+ RemoveTargetProgram($@) @@\
+ $(CC) -o $@$(_EXE) objects $(JLDFLAGS) $(LIBS) @!\
+
+
+/*
+ * NormalProgramLibTarget:
+ * Generate rules to compile and link the indicated program; since
+ * it does not use any default object files, it may be used for
+ * multiple programs in the same Jmakefile.
+ * The ``libs'' argument is used to depend on locally built libraries,
+ * in te same Jmakefile.
+ */
+#define NormalProgramLibTarget(program,sources,objects,libs) @!\
+++OBJECTS objects @!\
+++SOURCES sources @!\
+NormalObjectRule() @!\
+AllTargetProgram(program) @!\
+ @!\
+program: objects libs @@\
+ RemoveTargetProgram($@) @@\
+ $(CC) -o $@$(_EXE) objects $(JLDFLAGS) libs $(LIBS) @!\
+
+
+/*
+ * SimpleProgramTarget:
+ * Generate rules for compiling and linking programs that only have
+ * one C source file. It should only be used in Jmakefiles that
+ * describe a single program.
+ */
+#define SimpleProgramTarget(program) @!\
+NormalProgramTarget(program,program.c,program.o)
+
+
+/*
+ * ComplexProgramTarget:
+ * Generate rules for compiling and linking the program specified by
+ * $(OBJS) and $(SRCS), installing the program and its man page, and
+ * generating dependencies. It should only be used in Jmakefiles
+ * that describe a single program.
+ */
+#define ComplexProgramTarget(program) @!\
+++OBJECTS $(OBJS) @!\
+++SOURCES $(SRCS) @!\
+NormalObjectRule() @!\
+AllTargetProgram(program) @!\
+ @!\
+program: $(OBJS) @@\
+ RemoveTargetProgram($@) @@\
+ $(CC) -o $@$(_EXE) $(OBJS) $(JLDFLAGS) $(LIBS) @!\
+ @!\
+InstallProgram(program,$(BINDIR)) @!\
+InstallManPage(program,$(MANSRC)) @!\
+DependTarget() @!\
+LintTarget()
+
+
+/*
+ * ComplexProgramTarget_1:
+ * Generate rules for compiling and linking the program specified by
+ * $(OBJS1) and $(SRCS1), installing the program and its man page,
+ * and generating dependencies for it and any programs described by
+ * $(SRCS2) and $(SRCS3). It should be used to build the primary
+ * program in Jmakefiles that describe multiple programs.
+ */
+#define ComplexProgramTarget_1(program) @!\
+++OBJECTS $(OBJS1) @!\
+++SOURCES $(SRCS1) @!\
+NormalObjectRule() @!\
+AllTargetProgram(program) @!\
+ @!\
+program: $(OBJS1) @@\
+ RemoveTargetProgram($@) @@\
+ $(CC) -o $@$(_EXE) $(OBJS1) $(JLDFLAGS) $(LIBS) @!\
+ @!\
+InstallProgram(program,$(BINDIR)) @!\
+InstallManPage(program,$(MANSRC)) @!\
+ @!\
+DependTarget() @!\
+LintTarget()
+
+
+/*
+ * ComplexProgramTarget_2:
+ * Generate rules for compiling and linking the program specified by
+ * $(OBJS2) and $(SRCS2) and installing the program and man page.
+ * It should be used to build the second program in Jmakefiles
+ * describing more than one program.
+ */
+#define ComplexProgramTarget_2(program) @!\
+++OBJECTS $(OBJS2) @!\
+++SOURCES $(SRCS2) @!\
+NormalObjectRule() @!\
+AllTargetProgram(program) @!\
+ @!\
+program: $(OBJS2) @@\
+ RemoveTargetProgram($@) @@\
+ $(CC) -o $@$(_EXE) $(OBJS2) $(JLDFLAGS) $(LIBS) @!\
+ @!\
+InstallProgram(program,$(BINDIR)) @!\
+InstallManPage(program,$(MANSRC))
+
+
+/*
+ * ComplexProgramTarget_3:
+ * Generate rules for compiling and linking the program specified by
+ * $(OBJS3) and $(SRCS3) and installing the program and man page. It
+ * should be used to build the third program in Jmakefiles describing
+ * more than one program.
+ */
+#define ComplexProgramTarget_3(program) @!\
+++OBJECTS $(OBJS3) @!\
+++SOURCES $(SRCS3) @!\
+NormalObjectRule() @!\
+AllTargetProgram(program) @!\
+ @!\
+program: $(OBJS3) @@\
+ RemoveTargetProgram($@) @@\
+ $(CC) -o $@$(_EXE) $(OBJS3) $(JLDFLAGS) $(LIBS) @!\
+ @!\
+InstallProgram(program,$(BINDIR)) @!\
+InstallManPage(program,$(MANSRC))
+
+
+/*
+ * ComplexShellManualTarget:
+ * Builds manual pages that are to be extracted from .SH files into
+ * .$manext files.
+ */
+#define ComplexShellManualTarget(manpages) @!\
+++MANPAGE manpages @!\
+|once _ShellManualRule_ @!\
+|rule:.SH.$manext: @!\
+|rule: /bin/sh $< @!\
+|rule: @!\
+-once @!\
+AddSuffix(.SH) @!\
+AddSuffix(.$manext) @!\
+AllTarget(manpages) @!\
+ @!\
+local_install.man:: @@\
+ _MakeInstallDirIgnore($(MANSRC)) \ @@\
+ for file in manpages; do \ @@\
+ (set -x; $(INSTALL) -c -m 444 $$file \ @@\
+ $(INSTALL_PREFIX)$(MANSRC)) || exit 1; \ @@\
+ done @!\
+ @!\
+local_deinstall.man:: @@\
+ @case '${MFLAGS}' in *[i]*) set +e;; esac; \ @@\
+ for file in manpages; do \ @@\
+ (set -x; $(RM) $(INSTALL_PREFIX)$(MANSRC)/$$file); \ @@\
+ done
+
+
+/*
+ * Initialize:
+ * Puts the line symbol = value in the initialization section of
+ * Makefile.SH (the one that is subject to parameter substitutions).
+ */
+#define Initialize(symbol,value) @!\
++symbol = value
+
+
+/*
+ * InstallLibrary:
+ * Generate rules to install the indicated library.
+ */
+#define InstallLibrary(libname,dest) @!\
+local_install local_install-strip:: lib^^libname.a @@\
+ _MakeInstallDirIgnore(dest) \ @@\
+ $(INSTALL) -c -m 644 lib^^libname.a $(INSTALL_PREFIX)^^^dest @@\
+ $(RANLIB) dest/lib^^libname.a @@\
+ chmod 444 dest/lib^^libnane.a @!\
+ @!\
+local_deinstall:: @@\
+ $(RM) $(INSTALL_PREFIX)^^^dest/lib^^libname.a
+
+
+/*
+ * InstallSharedLibrary:
+ * Generate rules to install the shared library.
+ */
+#define InstallSharedLibrary(libname,rev,dest) @!\
+local_install local_install-strip:: lib^^libname.so.rev @@\
+ _MakeInstallDirIgnore(dest) \ @@\
+ $(INSTALL) -c -m 444 lib^^libname.so.rev $(INSTALL_PREFIX)^^^dest @!\
+ @!\
+local_deinstall:: @@\
+ $(RM) $(INSTALL_PREFIX)^^^dest/lib^^libname.so.rev
+
+
+/*
+ * InstallSharedLibraryData:
+ * Generate rules to install the shared library data
+ */
+#define InstallSharedLibraryData(libname,rev,dest) @!\
+local_install local_install-strip:: lib^^libname.sa.rev @@\
+ _MakeInstallDirIgnore(dest) \ @@\
+ $(INSTALL) -c -m 444 lib^^libname.sa.rev $(INSTALL_PREFIX)^^^dest @!\
+ @!\
+local_deinstall:: @@\
+ $(RM) $(INSTALL_PREFIX)^^^dest/lib^^libname.sa.rev
+
+
+/*
+ * InstallLibraryAlias:
+ * Generate rules to create a link from one library name to another
+ * for the purposes of aliasing.
+ */
+#define InstallLibraryAlias(libname,alias,dest) @!\
+local_install local_install-strip:: lib^^libname.a @@\
+ $(RM) lib^^alias.a @@\
+ -(cd dest; $(LN) lib^^libname.a lib^^alias.a) @!\
+ @!\
+local_deinstall:: @@\
+ $(RM) dest/lib^^alias.a
+
+
+/*
+ * InstallLintLibrary:
+ * Generate rules to install the indicated lint library.
+ */
+#define InstallLintLibrary(libname,dest) @!\
+install.ln:: llib-l^^libname.ln @@\
+ _MakeInstallDirIgnore(dest) \ @@\
+ $(INSTALL) -c -m 444 llib-l^^libname.ln $(INSTALL_PREFIX)^^^dest @!\
+ @!\
+deinstall.ln:: @@\
+ $(RM) $(INSTALL_PREFIX)^^^dest/llib-l^^libname.ln
+
+
+/*
+ * InstallManPageLong:
+ * Generate rules to install the indicated manual page, giving it an
+ * alternate name. This is used for installing man pages whose base
+ * name without the .man suffix would normally be longer than 8
+ * characters (the limit for using source code control systems on
+ * files systems with short file names).
+ */
+#define InstallManPageLong(file,destdir,dest) @!\
+local_install.man:: file.man @@\
+ _MakeInstallDirIgnore(destdir) \ @@\
+ $(INSTALL) -c -m 444 file.man $(INSTALL_PREFIX)^^^destdir/dest.$(L) @!\
+ @!\
+local_deinstall.man:: @@\
+ $(RM) $(INSTALL_PREFIX)^^^destdir/dest.$(L) @!\
+
+
+/*
+ * InstallManPage:
+ * Generate rules to install the indicated manual page.
+ */
+#define InstallManPage(file,dest) @!\
+InstallManPageLong(file,dest,file)
+
+
+/*
+ * InstallNonExec:
+ * Generate rules to install a data file using any special
+ * install flags.
+ */
+#define InstallNonExec(file,dest) @!\
+local_install local_install-strip:: file @@\
+ _MakeInstallDirIgnore(dest) \ @@\
+ $(INSTALL) -c -m 444 file $(INSTALL_PREFIX)^^^dest @!\
+ @!\
+local_deinstall:: @@\
+ $(RM) $(INSTALL_PREFIX)^^^dest/file
+
+
+/*
+ * InstallProgramWithFlags:
+ * Generate rules to install an executable program using given
+ * install flags.
+ * By default, program is not stripped, but the install-strip target
+ * will force stripping.
+ */
+#define InstallProgramWithFlags(program,dest,flags) @!\
+local_install:: program @@\
+ _MakeInstallDirIgnore(dest) \ @@\
+ $(INSTALL) -c -m 555 flags program^^^$(_EXE) $(INSTALL_PREFIX)^^^dest @!\
+ @!\
+local_install-strip:: program @@\
+ _MakeInstallDirIgnore(dest) \ @@\
+ $(INSTALL) -c -s -m 555 flags program^^^$(_EXE) $(INSTALL_PREFIX)^^^dest @!\
+ @!\
+local_deinstall:: @@\
+ $(RM) $(INSTALL_PREFIX)^^^dest/program^^^$(_EXE)
+
+
+/*
+ * InstallProgramNoStripWithFlags:
+ * Generate rules to install an executable program using given
+ * install flags. The program is never stripped.
+ */
+#define InstallProgramNoStripWithFlags(program,dest,flags) @!\
+local_install local_install-strip:: program @@\
+ _MakeInstallDirIgnore(dest) \ @@\
+ $(INSTALL) -c -m 555 flags program^^^$(_EXE) $(INSTALL_PREFIX)^^^dest @!\
+ @!\
+local_deinstall:: @@\
+ $(RM) $(INSTALL_PREFIX)^^^dest/program^^^$(_EXE)
+
+
+/*
+ * InstallProgram:
+ * Generate rules to install an executable program using any special
+ * install flags set in $(INSTALLFLAGS).
+ * By default, program is not stripped, but the install-strip target
+ * will force stripping.
+ */
+#define InstallProgram(program,dest) @!\
+InstallProgramWithFlags(program,dest,^^)
+
+
+/*
+ * InstallProgramNoStrip:
+ * Generate rules to install an executable program using any special
+ * install flags set in $(INSTALLFLAGS), but without stripping the
+ * executable from debugging symbols.
+ */
+#define InstallProgramNoStrip(program,dest) @!\
+InstallProgramNoStripWithFlags(program,dest,^^)
+
+
+/*
+ * InstallScriptWithFlags:
+ * Generate rules to install an executable script using given
+ * install flags.
+ */
+#define InstallScriptWithFlags(script,dest,flags) @!\
+local_install local_install-strip:: script @@\
+ _MakeInstallDirIgnore(dest) \ @@\
+ $(INSTALL) -c -m 555 flags script $(INSTALL_PREFIX)^^^dest @!\
+ @!\
+local_deinstall:: @@\
+ $(RM) $(INSTALL_PREFIX)^^^dest/script
+
+
+/*
+ * InstallScript:
+ * Generate rules to install an executable script using any special
+ * install flags set in $(INSTALLFLAGS).
+ */
+#define InstallScript(script,dest) @!\
+InstallScriptWithFlags(script,dest,^^)
+
+
+/*
+ * InstallScripts:
+ * Generate rules to install all the scripts listed in the generated
+ * $(SCRIPTS) and $(LSCRIPTS) macros.
+ */
+#define InstallScripts() @!\
+|once _InstallScripts_ @!\
+local_install local_install-strip:: $(SCRIPTS) $(LSCRIPTS) @@\
+ _MakeInstallDirIgnore($(SCRIPTDIR)) \ @@\
+ for file in $(SCRIPTS) $(LSCRIPTS); do \ @@\
+ (set -x; \ @@\
+ $(INSTALL) -c -m 555 $$file $(INSTALL_PREFIX)$(SCRIPTDIR)) || \ @@\
+ exit 1; \ @@\
+ done @!\
+ @!\
+local_deinstall:: @@\
+ @for file in $(SCRIPTS) $(LSCRIPTS); do \ @@\
+ case '${MFLAGS}' in *[i]*) set +e;; esac; \ @@\
+ (set -x; $(RM) $(INSTALL_PREFIX)$(SCRIPTDIR)/$$file); \ @@\
+ done @!\
+-once
+
+/*
+ * InstallManScripts:
+ * Generate rule to install/deinstall manual pages for scripts listed
+ * in the automatically generated $(SCRIPTS) macro.
+ */
+#define InstallManScripts() @!\
+|once _InstallManScripts_ @!\
+?NOMAN:|skip @!\
+local_install.man:: @@\
+ _MakeInstallDirIgnore($(MANSRC)) \ @@\
+ for file in $(SCRIPTS); do \ @@\
+ if test -f $$file.man; then \ @@\
+ (set -x; \ @@\
+ $(INSTALL) -c -m 444 $$file.man \ @@\
+ $(INSTALL_PREFIX)$(MANSRC)/$$file.$(L)) || \ @@\
+ exit 1; \ @@\
+ fi; \ @@\
+ done @!\
+ @!\
+local_deinstall.man:: @@\
+ case '${MFLAGS}' in *[i]*) set +e;; esac; \ @@\
+ for file in $(SCRIPTS); do \ @@\
+ (set -x; $(RM) $(INSTALL_PREFIX)$(MANSRC)/$$file.$(L)); \ @@\
+ done @!\
+ @!\
+-skip @!\
+-once
+
+
+
+/*
+ * LinkFileList:
+ * Link a list of list of files from one place to another
+ */
+#define LinkFileList(step,list,dir,sub) @!\
+step:: list @@\
+ @case '${MFLAGS}' in *[i]*) set +e;; esac; \ @@\
+ echo " cd" dir; cd dir; for i in list; do (set -x; $(LN) sub/$$i .); done
+
+
+/*
+ * InstallMultipleDestFlags:
+ * Generate rules to install multiple files at once during a particular
+ * step in the build using a specific set of install flags.
+ */
+#define InstallMultipleDestFlags(step,list,dest,flags) @!\
+step:: list @@\
+ _MakeInstallDirIgnore(dest) \ @@\
+ for i in list; do \ @@\
+ (set -x; $(INSTALL) -c flags \ @@\
+ $$i $(INSTALL_PREFIX)^^^dest) || exit 1;\ @@\
+ done
+
+/*
+ * DeinstallMultipleDest:
+ * Generate rules to deinstall multiple files at once during a particular
+ * step in the build.
+ */
+#define DeinstallMultipleDest(step,list,dest) @!\
+step:: @@\
+ @case '${MFLAGS}' in *[i]*) set +e;; esac; \ @@\
+ for i in list; do \ @@\
+ (set -x; $(RM) $(INSTALL_PREFIX)^^^dest/$$i); \ @@\
+ done
+
+/*
+ * InstallMultiple:
+ * Generate rules to install multiple files at once during the install
+ * step of the build using any install flags set in $(INSTALLFLAGS)
+ * and deinstall them.
+ */
+#define InstallMultiple(list,dest) @!\
+InstallMultipleDestFlags(local_install,list,dest,$(INSTALLFLAGS)) @!\
+DeinstallMultipleDest(local_deinstall,list,dest)
+
+
+/*
+ * InstallMultipleFlags:
+ * Generate rules to install multiple files at once during the
+ * install step of the build using the given install flags.
+ */
+#define InstallMultipleFlags(list,dest,flags) @!\
+InstallMultipleDestFlags(local_install,list,dest,flags) @!\
+DeinstallMultipleDest(local_deinstall,list,dest)
+
+
+/*
+ * InstallMultipleMan:
+ * Generate rules to install a variety of manual pages
+ * during the install.man step of the build.
+ */
+#define InstallMultipleMan(list,dest) @!\
+InstallMultipleDestFlags(local_install.man,list,dest,$(INSTALLFLAGS)) @!\
+DeinstallMultipleDest(local_deinstall.man,list,dest)
+
+
+/*
+ * DependDependency:
+ * Generate rules to build the makedepend program.
+ */
+#define DependDependency() @!\
+local_depend:: TOPDIR/mkdep @!\
+ @!\
+TOPDIR/mkdep: @!\
+?TOP: @echo "You have to run Configure first."; exit 1 @!\
+%TOP: @echo "You have to run Configure in $(TOP) first."; exit 1
+
+
+/*
+ * DependTarget:
+ * Generate rules to compute dependencies for all files listed
+ * in $(SOURCES) (automatically generated macro).
+ */
+#define DependTarget() @!\
++USRINC = $usrinc @!\
+|once _DependTarget_ @!\
+DependDependency() @!\
+ @!\
+depend:: local_depend @!\
+local_depend:: @@\
+ ($(SED) '/^# DO NOT DELETE/q' Makefile && \ @@\
+ $(MKDEP) $(SOURCES) | \ @@\
+ $(SED) -e 's:/usr/lib[^ ]*::g; s:$(USRINC)[^ ]*::g; ' \ @@\
+ -e '/: / b print' -e '$$ b print' -e 'H; d; n; : print' \ @@\
+ -e 'x; s/\\$$//; s/\\\n//g; s/ ^^ */ /g; s/ :/:/;' -e '/: *$$/d' \ @@\
+ ) > Makefile.new @@\
+ cp Makefile Makefile.bak @@\
+ cp Makefile.new Makefile @@\
+ $(RM) Makefile.new @!\
+ @!\
+-once
+
+
+/*
+ * CleanTarget:
+ * Generate rules to remove any garbage files.
+ */
+#define CleanTarget() @!\
+?SUBDIRS:clean: sub_clean local_clean @!\
+%SUBDIRS:clean: local_clean @!\
+?SUBDIRS:realclean: sub_realclean local_realclean @!\
+%SUBDIRS:realclean: local_realclean @!\
+?SUBDIRS:clobber: sub_clobber local_clobber @!\
+%SUBDIRS:clobber: local_clobber @!\
+ @!\
+local_clean:: @@\
+ if test -f core; then $(RM) core; fi @@\
+ $(RM) *~ *.o @!\
+ @!\
+local_realclean:: local_clean @!\
+?TOP: $(RM) -r UU @!\
+ @!\
+local_clobber:: local_realclean @!\
+%TOP: $(RM) Makefile config.sh @!\
+?TOP: $(RM) config.sh config.h @!\
+?TOP: $(RM) -r .config @!\
+?TOP: $(RM) Makefile @!\
+
+
+/*
+ * InstallTarget:
+ * Generate rules to recursively install files
+ */
+#define InstallTarget() @!\
+?SUBDIRS:install:: local_install sub_install @!\
+%SUBDIRS:install:: local_install @@\
+ @exit 0 @!\
+ @!\
+?SUBDIRS:install-strip:: local_install-strip sub_install-strip @!\
+%SUBDIRS:install-strip:: local_install-strip @@\
+ @exit 0 @!\
+ @!\
+?SUBDIRS:install.man:: maybe_install.man sub_install.man @!\
+%SUBDIRS:install.man:: maybe_install.man @!\
+?SUBDIRS:deinstall:: sub_deinstall local_deinstall @!\
+%SUBDIRS:deinstall:: local_deinstall @!\
+?SUBDIRS:deinstall.man:: sub_deinstall.man maybe_deinstall.man @!\
+%SUBDIRS:deinstall.man:: maybe_deinstall.man @!\
+ @!\
+?MANSRC:install.man-yes: local_install.man @!\
+install.man-no: @!\
+?MANSRC:deinstall.man-yes: local_deinstall.man @!\
+deinstall.man-no: @!\
+
+
+/*
+ * TagsTarget:
+ * Generate rules to compute tags files for C source code.
+ */
+#define TagsTarget() @!\
+tags:: @@\
+ $(CTAGS) -w *.[ch] @@\
+ $(CTAGS) -xw *.[ch] > tags @!\
+ @!\
+local_clobber:: @@\
+ $(RM) tags
+
+
+
+/*
+ * BuildMakefileSH:
+ * Generate rules to build a Makefile.SH from an Jmakefile and any
+ * special jmake flags. This is generally done automatically by the
+ * template or by any special Jmakefiles.
+ * This function will simply touch Makefile.SH if no $(TOP)/.package
+ * exists, assuming the Jmakefile is not in a production environment.
+ */
+#define BuildMakefileSH(jmakeflags) @!\
+Makefile.SH: Jmakefile @@\
+ -@if test -f $(TOP)/.package; then \ @@\
+ if test -f Makefile.SH; then \ @@\
+ echo " $(RM) Makefile.SH~; $(MV) Makefile.SH Makefile.SH~"; \ @@\
+ $(RM) Makefile.SH~; $(MV) Makefile.SH Makefile.SH~; \ @@\
+ fi; \ @@\
+ echo " $(JMAKE) -DTOPDIR=$(TOP) -DCURDIR=$(CURRENT)" jmakeflags; \ @@\
+ $(JMAKE) -DTOPDIR=$(TOP) -DCURDIR=$(CURRENT) jmakeflags; \ @@\
+ else touch $@; fi
+
+
+/*
+ * BuildMakefile:
+ * Generate rules to build a Makefile from a Makefile.SH.
+ */
+#define BuildMakefile() @!\
+Makefile: Makefile.SH @@\
+ /bin/sh Makefile.SH
+
+
+/*
+ * MakefileTarget:
+ * Generate rules to build a normal Makefile.
+ */
+#define MakefileTarget() @!\
+BuildMakefileSH(^^) @!\
+BuildMakefile()
+
+
+/*
+ * NormalObjectRule:
+ * Generate make rule to build usual object files.
+ */
+#define NormalObjectRule() @!\
+|once _ObjectRule_ @!\
+|rule:.c.o: @!\
+|rule: $(CC) -c $(JCFLAGS) $< @!\
+|rule: @!\
+-once
+
+/*
+ * NormalLibraryObjectRule:
+ * Generate make rules to build "normal" objects.
+ */
+#define NormalLibraryObjectRule() @!\
+|once _ObjectRule_ @!\
+|rule:.c.o: @!\
+|rule: $(RM) $@ @!\
+|rule: $(CC) -c $(JCFLAGS) $< @!\
+|rule: @!\
+-once
+
+/*
+ * ProfiledLibraryObjectRule:
+ * Generate make rules to build both profiled and "normal" objects.
+ */
+#define ProfiledLibraryObjectRule() @!\
+all:: @@\
+ @if [ ! -d profiled ]; then mkdir profiled; fi @!\
+ @!\
+|rule:.c.o: @!\
+|rule: $(RM) $@ profiled/$@ @!\
+|rule: $(CC) -pg -c $(JCFLAGS) $*.c @!\
+|rule: $(MV) $*.o profiled/$*.o @!\
+|rule: $(CC) -c $(JCFLAGS) $*.c @!\
+|rule: @!\
+local_clean:: @@\
+ -@if [ -d profiled ]; then echo " $(RM) profiled/?*.o"; \ @@\
+ $(RM) profiled/?*.o; fi
+
+
+/*
+ * DebuggedLibraryObjectRule:
+ * Generate make rules to build both debuggable and "normal"
+ * objects.
+ */
+#define DebuggedLibraryObjectRule() @!\
+all:: @@\
+ @if [ ! -d debugger ]; then mkdir debugger; fi @!\
+ @!\
+|rule:.c.o: @!\
+|rule: $(RM) $@ debugger/$@ @!\
+|rule: $(CC) -g -c $(JCFLAGS) $*.c @!\
+|rule: $(MV) $*.o debugger/$*.o @!\
+|rule: $(CC) -c $(JCFLAGS) $*.c @!\
+|rule: @!\
+local_clean:: @@\
+ -@if [ -d debugger ]; then echo " $(RM) debugger/?*.o"; \ @@\
+ $(RM) debugger/?*.o; fi
+
+
+/*
+ * DebuggedAndProfiledLibraryOjbectRule:
+ * Generate make rules to build debuggable, profiled, and "normal"
+ * objects.
+ */
+#define DebuggedAndProfiledLibraryObjectRule() @!\
+all:: @@\
+ @if [ ! -d profiled ]; then mkdir profiled; fi @@\
+ @if [ ! -d debugger ]; then mkdir debugger; fi @!\
+ @!\
+|rule:.c.o: @!\
+|rule: $(RM) $@ profiled/$@ debugger/$@ @!\
+|rule: $(CC) -pg -c $(JCFLAGS) $*.c @!\
+|rule: $(MV) $*.o profiled/$*.o @!\
+|rule: $(CC) -g -c $(JCFLAGS) $*.c @!\
+|rule: $(MV) $*.o debugger/$*.o @!\
+|rule: $(CC) -c $(JCFLAGS) $*.c @!\
+|rule: @!\
+local_clean:: @@\
+ -@if [ -d profiled ]; then echo " $(RM) profiled/?*.o"; \ @@\
+ $(RM) profiled/?*.o; fi @@\
+ -@if [ -d debugger ]; then echo " $(RM) debugger/?*.o"; \ @@\
+ $(RM) debugger/?*.o; fi
+
+
+/*
+ * SharedLibraryObjectRule:
+ * Generate make rules to build shared and "normal" object files.
+ */
+#define SharedLibraryObjectRule() @!\
+all:: @@\
+ @if [ ! -d shared ]; then mkdir shared; fi @!\
+ @!\
+|rule:.c.o: @!\
+|rule: $(RM) $@ shared/$@ @!\
+|rule: $(CC) -pic -c $(SHAREDCODEDEF) $(SHLIBDEF) $(JCFLAGS) $*.c @!\
+|rule: $(MV) $*.o shared/$*.o @!\
+|rule: $(CC) -c $(SHLIBDEF) $(JCFLAGS) $*.c @!\
+|rule: @!\
+local_clean:: @@\
+ -@if [ -d shared ]; then echo " $(RM) shared/?*.o"; \ @@\
+ $(RM) shared/?*.o; fi
+
+/*
+ * SharedAndDebuggedLibraryObjectRule:
+ * Generate make rules to build shared, debuggable, and "normal"
+ * object files.
+ */
+#define SharedAndDebuggedLibraryObjectRule() @!\
+all:: @@\
+ @if [ ! -d shared ]; then mkdir shared; fi @@\
+ @if [ ! -d debugger ]; then mkdir debugger; fi @!\
+ @!\
+|rule:.c.o: @!\
+|rule: $(RM) $@ shared/$@ debugger/$@ @!\
+|rule: $(CC) -pic -c $(SHAREDCODEDEF) $(SHLIBDEF) $(JCFLAGS) $*.c @!\
+|rule: $(MV) $*.o shared/$*.o @!\
+|rule: $(CC) -g -c $(SHLIBDEF) $(JCFLAGS) $*.c @!\
+|rule: $(MV) $*.o debugger/$*.o @!\
+|rule: $(CC) -c $(SHLIBDEF) $(JCFLAGS) $*.c @!\
+|rule: @!\
+local_clean:: @@\
+ -@if [ -d shared ]; then echo " $(RM) shared/?*.o"; \ @@\
+ $(RM) shared/?*.o; fi @@\
+ -@if [ -d debugger ]; then echo " $(RM) debugger/?*.o"; \ @@\
+ $(RM) debugger/?*.o; fi
+
+/*
+ * SpecialSharedAndDebuggedObjectRule:
+ * Generate rules to compile a file with special flags and to make
+ * shared and debuggable versions.
+ */
+#define SpecialSharedAndDebuggedObjectRule(objs,depends,options) @!\
+all:: @@\
+ @if [ ! -d shared ]; then mkdir shared; fi @@\
+ @if [ ! -d debugger ]; then mkdir debugger; fi @!\
+ @!\
+objs: depends @@\
+ $(RM) $@ shared/$@ debugger/$@ @@\
+ $(CC) -pic -c $(SHAREDCODEDEF) $(SHLIBDEF) $(JCFLAGS) options $*.c @@\
+ $(MV) $*.o shared/$*.o @@\
+ $(CC) -g -c $(SHLIBDEF) $(JCFLAGS) options $*.c @@\
+ $(MV) $*.o debugger/$*.o @@\
+ $(CC) -c $(SHLIBDEF) $(JCFLAGS) options $*.c
+
+/*
+ * SpecialSharedObjectRule:
+ * Generate rules to compile a file with special flags and to make
+ * shared and debuggable versions.
+ */
+#define SpecialSharedObjectRule(objs,depends,options) @!\
+all:: @@\
+ @if [ ! -d shared ]; then mkdir shared; fi @!\
+ @!\
+objs: depends @@\
+ $(RM) $@ shared/$@ @@\
+ $(CC) -pic -c $(SHAREDCODEDEF) $(SHLIBDEF) $(JCFLAGS) options $*.c @@\
+ $(MV) $*.o shared/$*.o @@\
+ $(CC) -c $(SHLIBDEF) $(JCFLAGS) options $*.c
+
+
+/*
+ * SpecialObjectRule:
+ * Generate rules to compile a file with special flags.
+ */
+#define SpecialObjectRule(objs,depends,options) @!\
+objs: depends @@\
+ $(RM) $@ @@\
+ $(CC) -c $(JCFLAGS) options $*.c
+
+
+/*
+ * SpecialProfiledObjectRule:
+ * Generate rules to compile a file with special flags and to make a
+ * profiled version.
+ */
+#define SpecialProfiledObjectRule(objs,depends,options) @!\
+all:: @@\
+ @if [ ! -d profiled ]; then mkdir profiled; fi @!\
+ @!\
+objs: depends @@\
+ $(RM) $@ profiled/$@ @@\
+ $(CC) -pg -c $(JCFLAGS) options $*.c @@\
+ $(MV) $*.o profiled/$*.o @@\
+ $(CC) -c $(JCFLAGS) options $*.c
+
+
+/*
+ * SpecialDebuggedObjectRule:
+ * Generate rules to compile a file with special flags and to make a
+ * debuggable version.
+ */
+#define SpecialDebuggedObjectRule(objs,depends,options) @!\
+all:: @@\
+ @if [ ! -d debugger ]; then mkdir debugger; fi @!\
+ @!\
+objs: depends @@\
+ $(RM) $@ debugger/$@ @@\
+ $(CC) -g -c $(JCFLAGS) options $*.c @@\
+ $(MV) $*.o debugger/$*.o @@\
+ $(CC) -c $(JCFLAGS) options $*.c
+
+
+/*
+ * SpecialDebuggedAndProfiledObjectRule:
+ * Generate rules to compile a file with special flags and to make
+ * debuggable and profiled versions.
+ */
+#define SpecialDebuggedAndProfiledObjectRule(objs,depends,options) @!\
+all:: @@\
+ @if [ ! -d profiled ]; then mkdir profiled; fi @@\
+ @if [ ! -d debugger ]; then mkdir debugger; fi @!\
+ @!\
+objs: depends @@\
+ $(RM) $@ profiled/$@ debugger/$@ @@\
+ $(CC) -pg -c $(JCFLAGS) options $*.c @@\
+ $(MV) $*.o profiled/$*.o @@\
+ $(CC) -g -c $(JCFLAGS) options $*.c @@\
+ $(MV) $*.o debugger/$*.o @@\
+ $(CC) -c $(JCFLAGS) options $*.c
+
+
+/*
+ * NormalLibraryTarget:
+ * Generate rules to create a library. The 'srclist' and 'objlist'
+ * parameters are added to SOURCES and OBJECTS macros. The 'srclist'
+ * is not otherwise used by this rule, but is necessary for make depend.
+ */
+#define NormalLibraryTarget(libname,srclist,objlist) @!\
+++OBJECTS objlist @!\
+++SOURCES srclist @!\
+NormalLibraryObjectRule() @!\
+AllTarget(lib^^libname.a) @!\
+ @!\
+lib^^libname.a: objlist @@\
+ $(RM) $@ @@\
+ $(AR) $@ objlist @@\
+ $(RANLIB) $@
+
+
+/*
+ * NormalSharedLibraryTarget:
+ * Generate rules to create a shared library; build it into a
+ * different name so that the we don't hose people by having the
+ * library gone for long periods.
+ */
+#define NormalSharedLibraryTarget(libname,rev,solist) @!\
+AllTarget(lib^^libname.so.rev) @!\
+ @!\
+lib^^libname.so.rev: solist @@\
+ $(RM) $@~ @@\
+ (cd shared; $(LD) -o ../$@~ -assert pure-text solist) @@\
+ $(RM) $@ @@\
+ $(MV) $@~ $@
+
+/*
+ * NormalSharedLibraryDataTarget:
+ * Generate rules to create shlib data file; build it into a
+ * different name so that the we don't hose people by having the
+ * library gone for long periods.
+ */
+#define NormalSharedLibraryDataTarget(libname,rev,salist) @!\
+AllTarget(lib^^libname.sa.rev) @!\
+ @!\
+lib^^libname.sa.rev: salist @@\
+ $(RM) $@ @@\
+ $(AR) $@ salist @@\
+ $(RANLIB) $@
+
+
+/*
+ * NormalLibraryTarget2:
+ * Generate rules to create a library in two steps. This is used to
+ * create libraries with large numbers of files.
+ */
+#define NormalLibraryTarget2(libname,srclist,objlist1,objlist2) @!\
+++SOURCES srclist @!\
+++OBJECTS objlist1 @!\
+++OBJECTS objlist2 @!\
+NormalLibraryObjectRule() @!\
+AllTarget(lib^^libname.a) @!\
+ @!\
+lib^^libname.a: objlist1 objlist2 @@\
+ $(RM) $@ @@\
+ $(AR) $@ objlist1 @@\
+ $(AR) $@ objlist2 @@\
+ $(RANLIB) $@
+
+
+/*
+ * ProfiledLibraryTarget:
+ * Generate rules to create a profiled library.
+ */
+#define ProfiledLibraryTarget(libname,srclist,objlist) @!\
+++SOURCES srclist @!\
+++OBJECTS objlist @!\
+AllTarget(lib^^libname^^_p.a) @!\
+ @!\
+lib^^libname^^_p.a: objlist @@\
+ $(RM) $@ @@\
+ cd profiled; $(AR) ../$@ objlist @@\
+ $(RANLIB) $@
+
+
+/*
+ * DebuggedLibraryTarget:
+ * Generate rules to create a debuggable library.
+ */
+#define DebuggedLibraryTarget(libname,srclist,objlist) @!\
+++SOURCES srclist @!\
+++OBJECTS objlist @!\
+AllTarget(lib^^libname^^_d.a) @!\
+ @!\
+lib^^libname^^_d.a: objlist @@\
+ $(RM) $@ @@\
+ cd debugger; $(AR) ../$@ objlist @@\
+ $(RANLIB) $@
+
+
+/*
+ * AliasedLibraryTarget:
+ * Generate rules to link one library to another.
+ */
+#define AliasedLibraryTarget(libname,alias) @!\
+AllTarget(lib^^alias.a) @!\
+ @!\
+lib^^alias.a: lib^^libname.a @@\
+ $(RM) $@ @@\
+ $(LN) lib^^libname.a $@
+
+
+/*
+ * PrelinkedRelocatableTarget:
+ * Generate rules to produce a relocatable object file instead of a
+ * library.
+ */
+#define PrelinkedRelocatableTarget(objname,objlist,libs) @!\
+AllTarget(objname.o) @!\
+ @!\
+objname.o: objlist @@\
+ $(RM) $@ @@\
+ $(LD) $(JLDFLAGS) -r objlist -o $@ libs
+
+
+/*
+ * NormalObjectTarget:
+ * Generate rules to produce a single object file.o from a file.c.
+ */
+#define NormalObjectTarget(file) @!\
+++SOURCES file^^.c @!\
+AllTarget(file^^.o) @!\
+NormalObjectRule()
+
+/*
+ * NormalRelocatableTarget:
+ * Generate rules to produce a relocatable object file instead of a
+ * library.
+ */
+#define NormalRelocatableTarget(objname,objlist) @!\
+AllTarget(objname.o) @!\
+ @!\
+objname.o: objlist @@\
+ $(RM) $@ @@\
+ $(LD) $(JLDFLAGS) -r objlist -o $@
+
+
+/*
+ * ProfiledRelocatableTarget:
+ * Generate rules to produce a profiled relocatable object file
+ * instead of a library.
+ */
+#define ProfiledRelocatableTarget(objname,objlist) @!\
+AllTarget(objname^^_p.o) @!\
+ @!\
+objname^^_p.o: objlist @@\
+ $(RM) $@ @@\
+ $(LD) -X -r objlist -o $@
+
+
+/*
+ * DebuggedRelocatableTarget:
+ * Generate rules to produce a debuggable relocatable object file
+ * instead of a library.
+ */
+#define DebuggedRelocatableTarget(objname,objlist) @!\
+AllTarget(objname^^_d.o) @!\
+ @!\
+objname^^_d.o: objlist @@\
+ $(RM) $@ @@\
+ $(LD) -X -r objlist -o $@
+
+/*
+ * LintLibraryTarget:
+ * Generate rules to create a lint library. Note that the lint
+ * library is always forced to be newer than the library itself.
+ */
+#define LintLibraryTarget(libname,srclist) @!\
+lintlib:: llib-l^^libname.ln @!\
+ @!\
+llib-l^^libname.ln: srclist @@\
+ $(RM) $@ @@\
+ $(LINT) $(LINTLIBFLAG)^^libname $(LINTFLAGS) srclist
+
+
+/*
+ * NormalLintTarget:
+ * Generate rules to lint a set of sources.
+ */
+#define NormalLintTarget(srclist) @!\
+lint: @@\
+ $(LINT) $(LINTFLAGS) srclist $(LINTLIBS)
+
+
+/*
+ * LintTarget:
+ * Generate rules to lint $(SOURCES) (automatically generated)
+ */
+#define LintTarget() @!\
+|once _LintTarget_ @!\
+NormalLintTarget($(SOURCES)) @!\
+-once
+
+
+/*
+ * LinkSourceFile:
+ * Snag source file from some other directory
+ */
+#define LinkSourceFile(src,dir) @!\
+src: dir/src @@\
+ $(RM) -f $@ @@\
+ $(LN) $? $@ @!\
+ @!\
+local_depend:: src @@\
+ @!\
+local_realclean:: @@\
+ $(RM) -f src @!\
+
+
+/*
+ * LinkSourceFileAlias:
+ * Snag source file from some other directory with a different local name.
+ */
+#define LinkSourceFileAlias(src,dir,alias) @!\
+alias: dir/src @@\
+ $(RM) -f $@ @@\
+ $(LN) $? $@ @!\
+ @!\
+local_depend:: alias @@\
+ @!\
+local_realclean:: @@\
+ $(RM) -f alias @!\
+
+
+/*
+ * MakeSubincludesForBuild:
+ * Make includes in sub directories.
+ */
+#define MakeSubincludesForBuild(step,dir,srclist) @!\
+step:: dir srclist @@\
+ @-(list=`echo srclist | sed -e 's/[^ ]*\///g'`; \ @@\
+ set -x; cd dir; $(RM) $$list) @@\
+ @for i in srclist; do \ @@\
+ (set -x; cd dir; $(LN) ../$$i .) || exit 1; \ @@\
+ done @!\
+ @!\
+MakeDirectories(dir,dir) @!\
+ @!\
+local_realclean:: @@\
+ @-(if [ -d dir ]; then \ @@\
+ list=`echo srclist | sed -e 's/[^ ]*\///g'`; \ @@\
+ set -x; cd dir; $(RM) $$list; fi)
+
+
+/*
+ * CommonSubdirsRule:
+ * Rule for making $(TARGET) in every subdirectory, with $(VERB) as
+ * verbose message and $(FLAGS) as additional flags.
+ */
+#define CommonSubdirsRule(dirs) @!\
+subdirs: @@\
+ @case '${MFLAGS}' in *[ik]*) set +e;; esac; \ @@\
+ for i in dirs ;\ @@\
+ do \ @@\
+ (cd $$i ; echo "$(VERB) in $(DIR)$$i..."; \ @@\
+ $(MAKE) $(MFLAGS) $(FLAGS) $(TARGET)) || exit 1; \ @@\
+ done
+
+
+/*
+ * NamedTargetSubdirsRule:
+ * Recursively make a series of steps in the specified directories.
+ */
+#define NamedTargetSubdirsRule(dirs,name,verb,flags) @!\
+name:: @@\
+ @case '${MFLAGS}' in *[ik]*) set +e;; esac; \ @@\
+ for i in dirs ;\ @@\
+ do \ @@\
+ (cd $$i ; echo verb "in $(DIR)$$i..."; \ @@\
+ $(MAKE) $(MFLAGS) flags name) || exit 1; \ @@\
+ done
+
+
+/*
+ * NamedTargetSubdirsAsRule:
+ * Recursively make a series of steps in the specified directories,
+ * where the name of the local rule is different from the recursive
+ * actions.
+ */
+#define NamedTargetSubdirsAsRule(dirs,localname,name,verb,flags) @!\
+localname:: @@\
+ @case '${MFLAGS}' in *[ik]*) set +e;; esac; \ @@\
+ for i in dirs ;\ @@\
+ do \ @@\
+ (cd $$i ; echo verb "in $(DIR)$$i..."; \ @@\
+ $(MAKE) $(MFLAGS) flags name) || exit 1; \ @@\
+ done
+
+
+/*
+ * NamedTargetSubdirs:
+ * Recursively make a series of steps.
+ */
+#define NamedTargetSubdirs(name,verb,flags) @!\
+name:: @@\
+ @$(MAKE) subdirs TARGET=name VERB=verb FLAGS=flags
+
+
+/*
+ * NamedSubTargetSubdirs:
+ * Recursively make a series of steps, like NamedTargetSubdirs.
+ * However, the supplied "name" has "sub_" prefixed to it.
+ */
+#define NamedSubTargetSubdirs(name,verb,flags) @!\
+sub_^^^name:: @@\
+ @$(MAKE) subdirs TARGET=name VERB=verb FLAGS=flags
+
+/*
+ * NamedDepthTargetSubdirs:
+ * Recursively make a series of steps. We first enter the
+ * subdirectories, then perform the local entries.
+ * The supplied "name" has "sub_" prefixed to it.
+ */
+#define NamedDepthTargetSubdirs(name,verb,flags) @!\
+sub_^^^name:: @@\
+ @$(MAKE) subdirs TARGET=name VERB=verb FLAGS=flags @@\
+ @echo "Back to $(CURRENT) for "name^^...
+
+
+/*
+ * MakeSubdirs:
+ * Generate rules to do makes in the given subdirectories.
+ */
+#define MakeSubdirs() \
+NamedTargetSubdirs(all,"Making all",^^)
+
+
+/*
+ * DependDirs:
+ * Generate rules to recursively compute dependencies as part of the
+ * make depend step.
+ */
+#define DependDirs(dirs) \
+depend:: sub_depend @!\
+NamedTargetSubdirsAsRule(dirs,sub_depend,depend,"Depending",^^)
+
+
+/*
+ * DependSubdirs:
+ * Generate rules to recursively compute dependencies as part of the
+ * make depend step.
+ */
+#define DependSubdirs() \
+DependDirs($(SUBDIRS))
+
+
+/*
+ * InstallSubdirs:
+ * Generate rules to recursively install and deinstall programs and
+ * files.
+ */
+#define InstallSubdirs() \
+NamedSubTargetSubdirs(install,"Installing",^^) @!\
+NamedSubTargetSubdirs(install-strip,"Installing (strip)",^^) @!\
+NamedDepthTargetSubdirs(deinstall,"Deinstalling",^^)
+
+
+/*
+ * InstallManSubdirs:
+ * Generate rules to recursively install and deinstall manual pages.
+ */
+#define InstallManSubdirs() \
+NamedSubTargetSubdirs(install.man,"Installing man pages",^^) @!\
+NamedDepthTargetSubdirs(deinstall.man,"Deinstalling man pages",^^)
+
+
+/*
+ * IncludesSubdirs:
+ * Generate rules to recursively put include files in build
+ */
+#define IncludesSubdirs() \
+NamedTargetSubdirs(includes,including,^^)
+
+
+/*
+ * CleanSubdirs:
+ * Generate rules to recursively clean out garbage files.
+ */
+#define CleanSubdirs() \
+NamedDepthTargetSubdirs(clean,"Cleaning",^^) @!\
+NamedDepthTargetSubdirs(realclean,"Real cleaning",^^) @!\
+NamedDepthTargetSubdirs(clobber,"Clobbering",^^)
+
+
+/*
+ * TagSubdirs:
+ * Generate rules to recursively create tags files.
+ */
+#define TagSubdirs(dirs) \
+NamedTargetSubdirsRule(dirs,tag,"Tagging",^^)
+
+/*
+ * MakeLintSubdirs:
+ * Generate rules to recursively lint directories as part of the
+ * named step.
+ */
+#define MakeLintSubdirs(dirs,target) \
+NamedTargetSubdirsRule(dirs,target,"Linting",^^)
+
+
+/*
+ * LintDirs:
+ * Generate rules to recursively lint directories as part of the
+ * make lint step.
+ */
+#define LintDirs(dirs) \
+MakeLintSubdirs(dirs,lint)
+
+
+/*
+ * LintSubdirs:
+ * Generate rules to recursively lint directories as part of the
+ * make lint step.
+ */
+#define LintSubdirs() \
+LintDirs($(SUBDIRS))
+
+
+/*
+ * MakeDirs:
+ * Creates a set of directories, even if some directories in the path
+ * do not already exist. There should be no '@!' at the end of the
+ * '#define' line, because this macro is used *inside* building rules.
+ */
+#define MakeDirs(dirs) \
+ @case '${MFLAGS}' in *[i]*) set +e;; esac; \ @@\
+ for dir in dirs; do \ @@\
+ (set -x; test -d $$dir || $(INSTALLDIR) $$dir) || \ @@\
+ exit 1; \ @@\
+ done
+
+/*
+ * _MakeInstallDirs:
+ * Creates a set of intall directories, even if some directories in the path
+ * do not already exist. There should be no '@!' at the end of the
+ * '#define' line, because this macro is used *inside* building rules.
+ */
+#define _MakeInstallDirs(dirs) \
+ @case '${MFLAGS}' in *[i]*) set +e;; esac; \ @@\
+ for dir in dirs; do \ @@\
+ _MakeInstallDir($$dir) \ @@\
+ done
+
+/*
+ * _MakeInstallDir:
+ * Internal macro to create a missing install directory.
+ */
+#define _MakeInstallDir(dir) \
+ (set -x; test -d $(INSTALL_PREFIX)^^^dir || \ @@\
+ $(INSTALLDIR) $(INSTALL_PREFIX)^^^dir);
+
+/*
+ * _MakeInstallDirIgnore:
+ * Same as _MakeInstallDir but handles "make -i" as well.
+ */
+#define _MakeInstallDirIgnore(dir) \
+ @case '${MFLAGS}' in *[i]*) set +e;; esac; \ @@\
+ _MakeInstallDir(dir)
+
+/*
+ * _RmInstallDirs:
+ * Removes a set of intall directories.
+ * There should be no '@!' at the end of the '#define' line, because this
+ * macro is used *inside* building rules.
+ */
+#define _RmInstallDirs(dirs) \
+ @case '${MFLAGS}' in *[i]*) set +e;; esac; \ @@\
+ for dir in dirs; do \ @@\
+ (set -x; test -d $$dir && $(RM) -r $(INSTALL_PREFIX)$$dir); \ @@\
+ done
+
+/*
+ * MakeDirectories:
+ * Generate rules to create a hierarchy of directories.
+ */
+#define MakeDirectories(step,dirs) @!\
+step:: @@\
+ MakeDirs(dirs)
+
+
+/*
+ * MakeInstallDirectories:
+ * Generate a rule to create a set of directories at installation
+ * time (removed by deinstall).
+ */
+#define MakeInstallDirectories(dirs) @!\
+local_install local_install-strip:: @@\
+ _MakeInstallDirs(dirs) @!\
+ @!\
+local_deinstall:: @@\
+ _RmInstallDirs(dirs)
+
+
+/*
+ * MakeLintLibSubdirs:
+ * Generate rules to recursively create lint libraries.
+ */
+#define MakeLintLibSubdirs(dirs) @!\
+MakeLintSubdirs(dirs,lintlib)
+
+
+/*
+ * MakeMakeSubdirs:
+ * Generate rules to recursively recreate target as part of the
+ * specified step in the build. This assumes Makefile.SH has
+ * already been built (which is the case for a delivery), but does
+ * not rely on the existence of a Makefile.
+ */
+#define MakeMakeSubdirs(target) @!\
+target:: @@\
+ @case '${MFLAGS}' in *[ik]*) set +e;; esac; \ @@\
+ for i in $(SUBDIRS);\ @@\
+ do \ @@\
+ echo "Making "target" in $(DIR)$$i..."; \ @@\
+ (cd $$i || exit 1; \ @@\
+ if test ! -f Makefile; then /bin/sh Makefile.SH; fi; \ @@\
+ $(MAKE) $(MFLAGS) target) || exit 1;\ @@\
+ done
+
+
+/*
+ * MakeMakefilesSH:
+ * Generate rules to recursively recreate target as part of the
+ * specified step in the build. If $(TOP) is set to an absolute
+ * path, don't prepend the ../ prefix. This makes running things
+ * outside of the source tree to be much easier.
+ */
+#define MakeMakefilesSH() @!\
+Makefiles.SH:: Makefile.SH @@\
+ @case '${MFLAGS}' in *[ik]*) set +e;; esac; \ @@\
+ for i in $(SUBDIRS);\ @@\
+ do \ @@\
+ case "$(DIR)$$i/" in \ @@\
+ ^^*^^/^^*^^/^^*^^/^^*^^/) newtop=../../../..;; \ @@\
+ ^^*^^/^^*^^/^^*^^/) newtop=../../..;; \ @@\
+ ^^*^^/^^*^^/) newtop=../..;; \ @@\
+ *^^/) newtop=..;; \ @@\
+ esac; \ @@\
+ case "$(TOP)" in \ @@\
+ /^^*) newtop="$(TOP)" ;; \ @@\
+ esac; \ @@\
+ echo "Making Makefiles.SH in $(DIR)$$i..."; \ @@\
+ (cd $$i || exit 1; \ @@\
+ if test -f Jmakefile; then \ @@\
+ $(MAKE) $(MFLAGS) -f ../Makefile \ @@\
+ Makefile TOP=$$newtop CURRENT=$(DIR)$$i && \ @@\
+ $(MAKE) $(MFLAGS) Makefiles.SH; \ @@\
+ fi; \ @@\
+ ) || exit 1; \ @@\
+ done
+
+
+/*
+ * MakefileSubdirs:
+ * Generate rules to create Makefiles.
+ */
+#define MakefileSubdirs() @!\
+MakeMakeSubdirs(Makefiles) @!\
+MakeMakefilesSH()
+
+
+/*
+ * CppScriptTarget:
+ * Generate rules to create a shell script by running the input
+ * through cpp.
+ */
+#define CppScriptTarget(dst,src,defs,deplist) @!\
+dst:: src deplist @@\
+ $(RM) $@ @@\
+ $(CPP) defs <src | \ @@\
+ sed -e '/^# *[0-9][0-9]* *.*$$/d' >$@ @@\
+ chmod a+x $@
+
+
+/*
+ * MakeScriptFromCpp:
+ * Generate rules to create a script from a file with a
+ * .cpp suffix.
+ */
+#define MakeScriptFromCpp(name,defs) @!\
+CppScriptTarget(name,name.cpp,defs,^^)
+
+
+/*
+ * ShellScriptTargetExt:
+ * Generate rules to create and install a set of scripts from
+ * ext files (.sh and .SH are the most common examples). Man pages
+ * derived from the name of the scripts are also installed unless
+ * NoManPages() is specified.
+ */
+#define ShellScriptTargetExt(scripts,ext) @!\
+++SCRIPTS scripts @!\
+SimpleShellScriptTargetExt(scripts,ext) @!\
+InstallScripts() @!\
+InstallManScripts()
+
+
+/*
+ * ShellScriptTarget:
+ * Generate rules to create and install a set of scripts from
+ * .SH files. Man pages derived from the name of the scripts are
+ * also installed unless NoManPages() is specified.
+ */
+#define ShellScriptTarget(scripts) @!\
+ShellScriptTargetExt(scripts,.SH)
+
+
+/*
+ * SimpleShellScriptTargetExt:
+ * Generate rules to create a set of scripts from ext files where
+ * ext is usually something like .sh or .SH, or whatever file
+ * extension you like..
+ */
+#define SimpleShellScriptTargetExt(scripts,ext) @!\
+AllTarget(scripts) @!\
+ @!\
+|expand s!scripts! @!\
+!s: !s^^ext @@\
+ /bin/sh !s^^ext @!\
+ @!\
+-expand
+
+
+/*
+ * SimpleShellScriptTarget:
+ * Generate rules to create a set of scripts from .SH files.
+ */
+#define SimpleShellScriptTarget(scripts) @!\
+SimpleShellScriptTargetExt(scripts,.SH)
+
+
+/*
+ * ShellScriptLongTarget:
+ * Generate rules to create a set of scripts from .SH files where
+ * the name of the generated file is different from the basename of
+ * the .SH file (when, for instance, the total length with the .SH
+ * extension would not leave enough space for RCS ,v extension).
+ */
+#define ShellScriptLongTarget(basename,scriptname) @!\
+++LSCRIPTS scriptname @!\
+AllTarget(scriptname) @!\
+ @!\
+scriptname: basename^^.SH @@\
+ /bin/sh basename^^.SH @!\
+ @!\
+InstallScripts() @!\
+?NOMAN:|skip @!\
+InstallManPageLong(basename,$(MANSRC),scriptname) @!\
+-skip
+
+
+/*
+ * ForceTarget:
+ * The force target will force reconstruction of all the other
+ * targets which include .FORCE in their own dependencies.
+ */
+#define ForceTarget() @!\
+|once _force_ @!\
+.FORCE: @!\
+ @!\
+-once
+
+
+/*
+ * RemoteTargetDependency:
+ * A local target may rely on a remote dependency (e.g. a library)
+ * made in a separate directory. This rule explicits the dependency
+ * and forces a make of that dependency in the remote directory.
+ */
+#define RemoteTargetDependency(target,directory,dependency) @!\
+RemoteDependency(directory,dependency) @!\
+target: directory/^^^dependency @!\
+
+
+/*
+ * RemoteDependency:
+ * Specify rules for making a remote dependency.
+ */
+#define RemoteDependency(directory,dependency) @!\
+ForceTarget() @!\
+|once =directory/^^^dependency= @!\
+directory/^^^dependency: .FORCE @@\
+ @echo "Checking "^^^dependency" in "^^^directory"..." @@\
+ cd ^^^directory; $(MAKE) ^^^dependency @@\
+ @echo "Continuing in $(CURRENT)..." @!\
+ @!\
+-once
+
+/*
+ * SetSubdirs:
+ * Actually forces the definition of SUBDIRS, and lets the user
+ * specify what the sub-directories are. This will be added to the
+ * customization part.
+ */
+#define SetSubdirs(subdirs) @!\
+>SUBDIRS @!\
++SUBDIRS = subdirs
+
+
+/*
+ * NoManPages:
+ * Actually forces the definition of NOMAN, which tells the jmake
+ * program to not generate rules for installing manual pages.
+ */
+#define NoManPages() @!\
+>NOMAN
+
+
+/*
+ * Expand:
+ * This powerful macro expands the `rule' given a `pattern'. It
+ * relies on a built-in command in jmake. The expansion is
+ * documented in the short notes file that comes with jmake and
+ * gives some insights on the internal syntax.
+ */
+#define Expand(rule, pattern) @!\
+|expand pattern @!\
+rule @!\
+-expand
+
+
+/*
+ * Lex and yacc stuff.
+ */
+
+/*
+ * YaccRule:
+ * This is the rule which is used to build a .c file from a .y file.
+ */
+#define YaccRule() @!\
+AddSuffix(.y) @!\
+|once _YaccRule_ @!\
+|rule:.y.c: @!\
+|rule: $(YACC) $(JYFLAGS) $< @!\
+|rule: $(MV) y.tab.c $@ @!\
+|rule: @!\
+-once
+
+/*
+ * SimpleYaccTarget:
+ * Declare a yacc base.y file to be used in the building of the
+ * specified target program. The source file must be given without
+ * its final .y extension. The name of the .c and .o will be
+ * derived from the source file basename provided.
+ */
+#define SimpleYaccTarget(program,base) @!\
+++SOURCES base.y @!\
+++OBJECTS base.o @!\
+YaccRule() @!\
+program: base.c @!\
+ @!\
+local_realclean:: @@\
+ $(RM) base.c @!\
+
+
+/*
+ * ComplexYaccTarget:
+ * Declare a yacc base.y file to be used in the building of the
+ * specified target program. The source file must be given without
+ * its final .y extension. The name of the .c and .o will be
+ * derived from the source file basename provided.
+ * The difference with SimpleYaccTarget is the identifying process
+ * where all the 'yy' are replaced by the specified prefix.
+ */
+#define ComplexYaccTarget(program,base,prefix) @!\
+++SOURCES base.y @!\
+++OBJECTS base.o @!\
+program: base.c @!\
+ @!\
+base.c: base.y @@\
+ $(YACC) $(JYFLAGS) base.y @@\
+ $(SED) -e 's/yy\(.\)/prefix\1/g' < y.tab.c > base.c @@\
+ $(SED) -e 's/yy\(.\)/prefix\1/g' < y.tab.h > base.h @@\
+ $(RM) y.tab.c y.tab.h @!\
+ @!\
+local_realclean:: @@\
+ $(RM) base.c @!\
+
+
+/*
+ * SimpleYaccInclude:
+ * Declare that program will need an include file produced by
+ * the output of yacc on base.y, which typically produces a file
+ * named y.tab.h, which will be renamed as base.h.
+ * The only problem is that the dependencies towards base.h have
+ * to be manually given in the Jmakefile.
+ */
+#define SimpleYaccInclude(base) @!\
+base.h: base.c @@\
+ @if test -f y.tab.h; then \ @@\
+ echo " $(MV) y.tab.h $@"; \ @@\
+ $(MV) y.tab.h $@; \ @@\
+ fi @!\
+ @!\
+local_realclean:: @@\
+ $(RM) base.h
+
+/*
+ * ComplexYaccInclude:
+ * Declare that program will need an include file produced by
+ * the output of yacc on base.y, which typically produces a file
+ * named y.tab.h, which will be renamed as base.h.
+ * The difference with SimpleYaccInclude is the identifying process
+ * of the y.tab.h file where all 'yy' are renamed to prefix.
+ * The only problem is that the dependencies towards base.h have
+ * to be manually given in the Jmakefile.
+ */
+#define ComplexYaccInclude(base,prefix) @!\
+base.h: base.c @@\
+ @if test -f y.tab.h; then \ @@\
+ echo " $(SED) -e 's/yy\(.\)/prefix\1/g' < y.tab.h > base.h"; \ @@\
+ $(SED) -e 's/yy\(.\)/prefix\1/g' < y.tab.h > base.h; \ @@\
+ echo " $(RM) y.tab.h"; \ @@\
+ $(RM) y.tab.h; \ @@\
+ elif test -f base.h; then \ @@\
+ echo " $(CP) base.h base.ht"; \ @@\
+ $(CP) base.h base.ht; \ @@\
+ echo " $(SED) -e 's/yy\(.\)/prefix\1/g' < base.ht > base.h"; \ @@\
+ $(SED) -e 's/yy\(.\)/prefix\1/g' < base.ht > base.h; \ @@\
+ echo " $(RM) base.ht"; \ @@\
+ $(RM) base.ht; \ @@\
+ fi @!\
+ @!\
+local_realclean:: @@\
+ $(RM) base.h
+
+
+/*
+ * NormalYaccTarget:
+ * Declare a yacc base.y file which should produce a base.c and
+ * base.h file as derived from the output of yacc, to be used by
+ * the specified program.
+ */
+#define NormalYaccTarget(program,base) @!\
+SimpleYaccTarget(program,base) @!\
+SimpleYaccInclude(base)
+
+
+/*
+ * IdentifiedYaccTarget:
+ * Declare a yacc base.y file which should produce a base.c and
+ * base.h file as derived from the output of yacc, to be used by
+ * the specified program. The specified prefix is used to remplace
+ * all the 'yy' in the generated file, for use when more than a
+ * single parser is needed in one executable.
+ */
+#define IdentifiedYaccTarget(program,base,prefix) @!\
+ComplexYaccTarget(program,base,prefix) @!\
+ComplexYaccInclude(base,prefix)
+
+
+/*
+ * SimpleLexTarget:
+ * This declares a lex base.l file which is to be ran through
+ * lex to produce a base.c file.
+ */
+#define SimpleLexTarget(program,base) @!\
+++SOURCES base.l @!\
+++OBJECTS base.o @!\
+|once _LexRule_ @!\
+|rule:.l.c: @!\
+|rule: $(LEX) $(JLFLAGS) $< @!\
+|rule: $(MV) lex.yy.c $@ @!\
+|rule: @!\
+-once @!\
+AddSuffix(.l) @!\
+program: base.c @!\
+ @!\
+local_realclean:: @@\
+ $(RM) base.c @!\
+
+
+/*
+ * IdentifiedLexTarget:
+ * This declares a lex base.l file which is to be ran through
+ * lex to produce a base.c file. The prefix is used to replace
+ * the 'yy', so that the lexical analyzer may be identified.
+ */
+#define IdentifiedLexTarget(program,base,prefix) @!\
+++SOURCES base.l @!\
+++OBJECTS base.o @!\
+program: base.c @!\
+ @!\
+base.c: base.l @@\
+ $(LEX) $(JLFLAGS) base.l @@\
+ $(SED) -e 's/yy\(.\)/prefix\1/g' < lex.yy.c > base.c @@\
+ $(RM) lex.yy.c @!\
+ @!\
+local_realclean:: @@\
+ $(RM) base.c @!\
+
+
+/*
+ * NormalLexDependTarget:
+ * Declare that program will need an include file produced by
+ * the output of lex on base.l, which typically produces a file
+ * named lex.yy.c which will be renamed as base.c. Besides, the
+ * lexical analyzer needs the file parser.h produced by running
+ * parser.y through yacc and renaming y.tab.h as parser.h.
+ */
+#define NormalLexDependTarget(program,base,parser) @!\
+base.o: parser.h @!\
+ @!\
+SimpleLexTarget(program,base)
+
+
+/*
+ * IdentifiedLexDependTarget:
+ * Declare that program will need an include file produced by
+ * the output of lex on base.l, which typically produces a file
+ * named lex.yy.c which will be renamed as base.c. Besides, the
+ * lexical analyzer needs the file parser.h produced by running
+ * parser.y through yacc and renaming y.tab.h as parser.h.
+ * The lexical analyzer is identified with the supplied prefix,
+ * which replaces the regular 'yy' prefix in the symbol names.
+ */
+#define IdentifiedLexDependTarget(program,base,parser,prefix) @!\
+base.o: parser.h @!\
+ @!\
+IdentifiedLexTarget(program,base,prefix)
+
+
+/*
+ * NormalParserTarget:
+ * Specify that program is using the lex/yacc combination to
+ * produce a parser. The lexic and parser parameters are the
+ * base name of the .l and .y file, respectively.
+ */
+#define NormalParserTarget(program,lexic,parser) @!\
+NormalLexDependTarget(program,lexic,parser) @!\
+NormalYaccTarget(program,parser)
+
+
+/*
+ * IdentifiedParserTarget:
+ * Specify that program is using the lex/yacc combination to
+ * produce a parser. The lexic and parser parameters are the
+ * base name of the .l and .y file, respectively. The parser
+ * produced is identified via its prefix, which replaces all
+ * the normally supplied 'yy' prefix, hence making it possible
+ * to have multiple parsers in a single executable.
+ */
+#define IdentifiedParserTarget(program,lexic,parser,prefix) @!\
+IdentifiedLexDependTarget(program,lexic,parser,prefix) @!\
+IdentifiedYaccTarget(program,parser,prefix)
+
+
diff --git a/jmake/files/Jmake.tmpl b/jmake/files/Jmake.tmpl
new file mode 100644
index 0000000..313f795
--- /dev/null
+++ b/jmake/files/Jmake.tmpl
@@ -0,0 +1,268 @@
+/*
+ * Generic jmake template
+ *
+ * $Id$
+ *
+ * Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+ *
+ * You may redistribute only under the terms of the Artistic Licence,
+ * as specified in the README file that comes with the distribution.
+ * You may reuse parts of this distribution only within the terms of
+ * that same Artistic Licence; a copy of which may be found at the root
+ * of the source tree for dist 4.0.
+ *
+ * $Log: Jmake.tmpl,v $
+ * Revision 3.0.1.3 1997/02/28 14:56:16 ram
+ * patch61: lex path can now be configured
+ *
+ * Revision 3.0.1.2 1995/01/11 14:50:21 ram
+ * patch45: now pre-computes INSTALL and INSTALLDIR variables
+ *
+ * Revision 3.0.1.1 1993/08/20 07:36:36 ram
+ * patch3: config.sh searching was not aborting properly
+ *
+ * Revision 3.0 1993/08/18 12:04:16 ram
+ * Baseline for dist 3.0 netwide release.
+ *
+ */
+
+: Makefile.SH generated from Jmake.tmpl and Jmakefile <TAG>
+: $Id$
+
+/*************************************************************************
+ * *
+ * DO NOT MODIFY BELOW THIS LINE *
+ * *
+ *************************************************************************/
+
+case $CONFIG in
+'')
+ if test -f config.sh; then TOP=.;
+ elif test -f ../config.sh; then TOP=..;
+ elif test -f ../../config.sh; then TOP=../..;
+ elif test -f ../../../config.sh; then TOP=../../..;
+ elif test -f ../../../../config.sh; then TOP=../../../..;
+ else
+ echo "Can't find config.sh."; exit 1
+ fi
+ . $TOP/config.sh
+ ;;
+esac
+case "$0" in
+*/#*) cd `expr X$0 : 'X\(.*\)/'` ;;
+esac
+|expand cur!CURDIR!
+CURRENT=!cur:^\./=
+-expand
+DIR=`echo $CURRENT/ | sed -e 's/\.\///g'`
+echo "Extracting ${DIR}Makefile (with variable substitutions)"
+/*
+ * Variable pre-computation.
+ */
+?INSTALL:INSTALL=`echo $install | sed -e 's,\./i,\$(TOP)/i,'`
+?INSTALLDIR:INSTALLDIR=`echo $installdir | sed -e 's,\./i,\$(TOP)/i,'`
+DATE=`date`
+/*
+ * Makefile generation.
+ */
+$spitshell >Makefile <<!GROK!THIS!
+;########################################################################
+;# Makefile generated from Makefile.SH on $DATE
+
+SHELL = /bin/sh
+JMAKE = jmake
+TOP = TOPDIR
+CURRENT = $CURRENT
+DIR = $DIR
+?INSTALL:INSTALL = $INSTALL
+?INSTALLDIR:INSTALLDIR = $INSTALLDIR
+
+;########################################################################
+;# Parameters set by Configure -- edit config.sh if changes are needed
+
+?AR:AR = ar rc /* FIXME */
+?ARCHLIB:ARCHLIB = $installarchlib
+?BINDIR:BINDIR = $installbin
+?CC:CC = $cc
+?CHMOD:CHMOD = $chmod
+?CP:CP = $cp
+?CPP:CPP = $cpp $cppminus $cppflags
+?CTAGS:CTAGS = ctags /* FIXME */
+?_EXE:_EXE = $_exe
+?INSTALLPREFIX:INSTALLPREFIX = $prefix
+?JCFLAGS:JCFLAGS = \$(CFLAGS) $optimize $pthread $ccflags $large
+?JCPPFLAGS:JCPPFLAGS = $cppflags
+?JLDFLAGS:JLDFLAGS = \$(LDFLAGS) $optimize $pthread $ldflags
+?JLFLAGS:JLFLAGS = \$(LFLAGS)
+?JYFLAGS:JYFLAGS = \$(YFLAGS) $yaccflags
+?L:L = $manext
+?LD:LD = ld
+?LEX:LEX = $lex
+?LIBS:LIBS = $libs
+?LINT:LINT = lint
+?LN:LN = $ln
+?MANSRC:MANSRC = $installmansrc
+?MAKE:$make_set_make
+?MKDEP:MKDEP = $mkdep \$(DPFLAGS) \$(JCPPFLAGS) --
+?MV:MV = $mv
+?NM:NM = $nm
+?PRIVLIB:PRIVLIB = $installprivlib
+?RANLIB:RANLIB = $ranlib
+?RM:RM = $rm -f
+?SCRIPTDIR:SCRIPTDIR = $installscript
+?SED:SED = $sed
+?YACC:YACC = $yacc
+
+/*
+ * The following will only be added if at least one initialization
+ * rule was found in the Jmakefile.
+ */
+%INIT:|skip /* Skip if no initializations are necessary */
+;########################################################################
+;# Automatically generated parameters -- do not edit
+
+INIT_SECTION
+
+-skip /* Initializations */
+%SUFFIX:|skip /* Skip if no suffixes/rules are defined */
+;########################################################################
+;# New suffixes and associated building rules -- edit with care
+
+SUFFIX_SECTION
+-skip /* Suffixes/Rules */
+!GROK!THIS!
+$spitshell >>Makefile <<'!NO!SUBS!'
+#include <Jmake.rules>
+
+%MKDEP:|skip /* Skip if no depend target */
+;########################################################################
+;# Force 'make depend' to be performed first -- do not edit
+/*
+ * The "all" target must appear first. Some "make" programs will otherwise
+ * default to the .FORCE_DEPEND target if it was listed first, despite it
+ * starting with a leading dot.
+ */
+all:: .FORCE_DEPEND
+
+.FORCE_DEPEND::
+
+-skip /* Depend target */
+;########################################################################
+;# Start of Jmakefile
+#include <Jmakefile>
+
+;########################################################################
+;# Common rules for all Makefiles -- do not edit
+/*
+ * These need to be here so that rules in Jmakefile occur first; the blank
+ * all is to make sure that an empty Jmakefile doesn't default to make clean.
+ */
+all::
+
+CleanTarget()
+InstallTarget()
+
+/*
+ * The installation of manual pages is optional. When they say "none" in
+ * Configure, then they don't want any manual page and $installmansrc will
+ * be empty.
+ *
+ * To avoid protecting all the jmake rules for an empty destination, we use
+ * this clever hack: there is an "install.man-no" and an "install.man-yes"
+ * target defined, where the first does nothing and the second triggers
+ * the local install. The same goes for deinstall.
+ *
+ * If the `MANSRC' symbol is not wanted, then there is no manual page
+ * and we can force the -no version of the targets.
+ */
+%MANSRC:|skip /* Skip if no manual targets */
+!NO!SUBS!
+case "$installmansrc" in
+'') man=no;;
+*) man=yes;;
+esac
+$spitshell >>Makefile <<!GROK!THIS!
+maybe_install.man: install.man-$man
+maybe_deinstall.man: deinstall.man-$man
+!GROK!THIS!
+$spitshell >>Makefile <<'!NO!SUBS!'
+-skip
+?MANSRC:|skip /* Skip if it has manual targets */
+maybe_install.man: install.man-no
+maybe_deinstall.man: deinstall.man-no
+-skip
+
+MakefileTarget()
+TagsTarget()
+
+/*
+ * Empty rules in case there is no depend target.
+ */
+depend::
+
+%SUBDIRS:|skip /* Skip if no sub-directories */
+;########################################################################
+;# Rules for building in sub-directories -- do not edit
+
+CommonSubdirsRule($(SUBDIRS))
+InstallSubdirs()
+InstallManSubdirs()
+CleanSubdirs()
+TagSubdirs($(SUBDIRS))
+MakefileSubdirs()
+MakeSubdirs()
+
+/*
+ * Empty rules in case they don't define anything to be installed
+ * in this directory.
+ */
+local_install::
+local_install-strip::
+local_deinstall::
+local_install.man::
+local_deinstall.man::
+
+-skip /* Sub-directories */
+?SUBDIRS:|skip /* Skip if sub-directories */
+;########################################################################
+;# Empty rules for directories with no sub-directories -- do not edit
+
+local_install::
+ @echo "install in $(CURRENT) done."
+
+local_install-strip::
+ @echo "install (strip) in $(CURRENT) done."
+
+local_deinstall::
+ @echo "deinstall in $(CURRENT) done."
+
+local_install.man::
+ @echo "install.man in $(CURRENT) done."
+
+local_deinstall.man::
+ @echo "deinstall.man in $(CURRENT) done."
+
+/*
+ * Action for 'Makefiles' would be required, if a .SUFFIXES: .SH rule
+ * were added, because in that case, a "/bin/sh Makefiles.SH" would
+ * be issued and raise an error.
+ */
+Makefiles::
+
+Makefiles.SH::
+
+-skip /* No sub-directories */
+%local_depend%:|skip /* Skip if no local depend target */
+;########################################################################
+;# Dependencies generated by make depend
+;# DO NOT DELETE THIS LINE -- make depend relies on it
+
+;# Put nothing here or make depend will gobble it up
+.FORCE_DEPEND::
+?TOP: @echo "You haven't run a 'make depend' yet!"; exit 1
+%TOP: @echo "You must run 'make depend' in $(TOP) first."; exit 1
+-skip /* Depend target */
+!NO!SUBS!
+chmod 644 Makefile
+$eunicefix Makefile
+
diff --git a/jmake/fixcpp.SH b/jmake/fixcpp.SH
new file mode 100755
index 0000000..879478a
--- /dev/null
+++ b/jmake/fixcpp.SH
@@ -0,0 +1,185 @@
+case $CONFIG in
+'')
+ if test -f config.sh; then TOP=.;
+ elif test -f ../config.sh; then TOP=..;
+ elif test -f ../../config.sh; then TOP=../..;
+ elif test -f ../../../config.sh; then TOP=../../..;
+ elif test -f ../../../../config.sh; then TOP=../../../..;
+ else
+ echo "Can't find config.sh."; exit 1
+ fi
+ . $TOP/config.sh
+ ;;
+esac
+REVISION=`grep REVISION $TOP/revision.h | head -n1 | cut -d' ' -f4`
+case "$0" in
+*/*) cd `expr X$0 : 'X\(.*\)/'` ;;
+esac
+echo "Extracting jmake/fixcpp (with variable substitutions)"
+$spitshell >fixcpp <<!GROK!THIS!
+$startperl
+ eval 'exec perl -S \$0 \${1+"\$@"}'
+ if \$runnning_under_some_shell;
+
+# $Id$
+#
+# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+#
+# You may redistribute only under the terms of the Artistic Licence,
+# as specified in the README file that comes with the distribution.
+# You may reuse parts of this distribution only within the terms of
+# that same Artistic Licence; a copy of which may be found at the root
+# of the source tree for dist 4.0.
+#
+# $Log: fixcpp.SH,v $
+# Revision 3.0.1.1 1995/03/21 08:35:37 ram
+# patch52: created
+#
+
+# Thank you HP-UX for having a cpp that strips trailing backslashes in the
+# text. As of today, you are the only reason for this program to exist.
+# People designing such things should have their hands cut off to prevent
+# them from doing further damage :-)
+#
+# This program is meant to be called from jmake. All it does is pre-process
+# the file it is given as argument, focusing on #include directives and
+# resolving them as cpp would (but without the #line stuff since we don't
+# really care about it), escaping all the trailing \ into '\ ^A'. The resulting
+# temporary file is then handed off to the real cpp for macro processing, and
+# the output is printed on stdout, after restoration of any original trailing \.
+# Again, thanks HP-UX for making this so challenging and exciting... :-)
+#
+# Note that we MUST leave alone all the trailing @!\ or @@\, since those appear
+# in macros and must go away some way or the other. Also trailing backslashes
+# on #define lines are really continuations and are left un-escaped.
+
+\$cpp = '$cpp_trad';
+\$version = '$VERSION';
+\$patchlevel = '$PATCHLEVEL';
+\$revision = '$REVISION';
+!GROK!THIS!
+$spitshell >>fixcpp <<'!NO!SUBS!'
+
+while ($ARGV[0] =~ /^-/) {
+ $_ = shift;
+ last if /--/;
+ $cpp_opt .= "$_ ";
+ next unless s/-I//;
+ push(@lookpath, $_);
+}
+
+($file) = @ARGV;
+$counter = 0; # Counter for temporary files
+
+$SIG{'INT'} = 'PLUMBER'; # Install cleaner in case of an interrupt...
+
+$result = &process($file); # Process file, result in a temporary
+&cpp($result); # Pass resulting file with escaped \ to cpp
+unlink $result;
+exit 0;
+
+# Cleanup any temporary files...
+sub PLUMBER {
+ warn "Could not cleanup all temporaries.\n" if @tmps != unlink(@tmps);
+ exit 1;
+}
+
+# Compute a suitable temporary file name
+sub mktmp {
+ $counter++;
+ local($tmp) = "/tmp/jmk.$counter.$$";
+ push(@tmps, $tmp); # Keep track of them for &PLUMBER...
+ $tmp;
+}
+
+# Process a given file, returning the name of the temporary file into which
+# the result is left over.
+# This routine is recursively called to process nested include directives.
+sub process {
+ local($file) = @_;
+ local(*FILE, *TMP);
+ open(FILE, $file) || die "Can't read $file: $!\n";
+ local($tmpfile) = &mktmp;
+ open(TMP, ">$tmpfile") || die "Can't create $tmpfile: $!\n";
+ local($here, $include);
+ local($_);
+ while (<FILE>) {
+ if (s/^#\s*include\s*//) { # Ah, we found a #include something...
+ chop;
+ if (/"(\S+)"/) {
+ ($include, $here) = ($1, 1);
+ } elsif (/<(\S+)\>/) {
+ ($include, $here) = ($1, 0);
+ } else {
+ warn "Ignoring unkown include directive $_.\n";
+ next;
+ }
+ local($incfile) = &lookup($include, $here);
+ unless (defined $incfile) {
+ warn "Can't locate include file $include.\n";
+ next;
+ }
+ $include = &process($incfile); # Recursively process this file
+ &append($include, 'TMP'); # Append result to current tmp file
+ unlink $include;
+ } else {
+ &escape;
+ print TMP;
+ }
+ }
+ close FILE;
+ close TMP;
+ $tmpfile; # Return name of file where results has been left over
+}
+
+# Perform necessary escaping work on current line.
+sub escape {
+ # Don't escape trailing backslashes in macro definition or cpp
+ # won't see them as macro continuation any longer, and also within
+ # macro definitions, all those @@ or @! continuations...
+ s/\\$/\\ \001/ unless /\@[!@]\\$/ || /^#define/;
+}
+
+# Append file to given (opened) file descriptor
+sub append {
+ local($file, $fd) = @_;
+ local(*FILE);
+ open(FILE, $file) || die "Can't re-open $file: $!\n";
+ local($_);
+ while (<FILE>) {
+ &escape;
+ print $fd $_;
+ }
+ close FILE;
+}
+
+# Lookup file, returning its located name or undef if not found.
+sub lookup {
+ local($file, $here) = @_;
+ unless ($here) {
+ foreach $dir (@lookpath) {
+ if (-r "$dir/$file") { # Use -r instead of -f for symlinks
+ $file = "$dir/$file";
+ last;
+ }
+ }
+ }
+ return undef unless -r $file;
+ $file;
+}
+
+# This is the final cpp processing. The output from cpp is filtered to un-escape
+# all the trailing backslashes.
+sub cpp {
+ local($file) = @_;
+ open(CPP, "$cpp $cpp_opt $file |") || die "Can't fork: $!\n";
+ while (<CPP>) {
+ s/\\ \001$/\\/; # Un-escape trailing \
+ print STDOUT;
+ }
+ close CPP;
+}
+
+!NO!SUBS!
+chmod 755 fixcpp
+$eunicefix fixcpp
diff --git a/jmake/jmake.SH b/jmake/jmake.SH
new file mode 100755
index 0000000..3973185
--- /dev/null
+++ b/jmake/jmake.SH
@@ -0,0 +1,547 @@
+case $CONFIG in
+'')
+ if test -f config.sh; then TOP=.;
+ elif test -f ../config.sh; then TOP=..;
+ elif test -f ../../config.sh; then TOP=../..;
+ elif test -f ../../../config.sh; then TOP=../../..;
+ elif test -f ../../../../config.sh; then TOP=../../../..;
+ else
+ echo "Can't find config.sh."; exit 1
+ fi
+ . $TOP/config.sh
+ ;;
+esac
+REVISION=`grep REVISION $TOP/revision.h | head -n1 | cut -d' ' -f4`
+case "$0" in
+*/*) cd `expr X$0 : 'X\(.*\)/'` ;;
+esac
+echo "Extracting jmake/jmake (with variable substitutions)"
+$spitshell >jmake <<!GROK!THIS!
+$startperl
+ eval 'exec perl -S \$0 \${1+"\$@"}'
+ if \$runnning_under_some_shell;
+
+# $Id$
+#
+# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+#
+# You may redistribute only under the terms of the Artistic Licence,
+# as specified in the README file that comes with the distribution.
+# You may reuse parts of this distribution only within the terms of
+# that same Artistic Licence; a copy of which may be found at the root
+# of the source tree for dist 4.0.
+#
+# $Log: jmake.SH,v $
+# Revision 3.0.1.9 2004/08/22 09:01:42 ram
+# patch71: renamed |test as |case as the construct has its syntax
+# patch71: added |subst section to allow variable substitutions
+#
+# Revision 3.0.1.8 2004/08/21 23:19:46 ram
+# patch71: added '|shell' section to emit verbatim code in Makefile.SH
+# patch71: new '|test' to conditionally generate Makefile sections
+#
+# Revision 3.0.1.7 2004/08/21 20:59:57 ram
+# patch71: replaced old "do foo()" with modern "&foo()" syntax
+# patch71: take care of junk emitted by GNU make when running commands
+# patch71: new ^^^ escape sequence, removing extra spaces afterwards
+#
+# Revision 3.0.1.6 1995/09/25 09:08:01 ram
+# patch59: will now force macro definitions to the left
+#
+# Revision 3.0.1.5 1995/07/25 13:34:47 ram
+# patch56: all error messages are now prefixed with the program name
+#
+# Revision 3.0.1.4 1995/03/21 08:45:27 ram
+# patch52: now invokes cpp through new fixcpp script
+# patch52: first pass now skips cpp comments alltogether
+#
+# Revision 3.0.1.3 1994/10/29 15:47:01 ram
+# patch36: added various escapes in strings for perl5 support
+#
+# Revision 3.0.1.2 1993/08/24 12:12:50 ram
+# patch3: privlib dir was ~name expanded in the wrong place
+#
+# Revision 3.0.1.1 1993/08/19 06:42:13 ram
+# patch1: leading config.sh searching was not aborting properly
+#
+# Revision 3.0 1993/08/18 12:04:17 ram
+# Baseline for dist 3.0 netwide release.
+#
+
+\$dir = '$privlib/files';
+\$cpp = '$cpp';
+\$version = '$VERSION';
+\$patchlevel = '$PATCHLEVEL';
+\$revision = '$REVISION';
+!GROK!THIS!
+$spitshell >>jmake <<'!NO!SUBS!'
+
+($me = $0) =~ s|.*/(.*)|$1|;
+$dir = &tilda_expand($dir); # ~name expansion
+$file = $dir . '/Jmake.tmpl';
+
+$cpp_opt = "-I. "; # For Jmakefile, which is local
+while ($ARGV[0] =~ /^-/) {
+ $_ = shift;
+ last if /--/;
+ $cpp_opt .= "$_ ";
+}
+$cpp_opt .= "-I$dir";
+
+# Pass 0 is looking at the template for "?CP:CP =" lines that are to be
+# emitted if the CP variable is needed. Later on, when we see $(CP) being
+# used, we'll be able to set the $symbol{CP} entry to 1 to have the CP
+# variable initialized by the template.
+
+open(TMPL, $file) || die "$me: can't open $file: $!\n";
+while (<TMPL>) {
+ next unless /^\?([\w_]+):\1\s+=/;
+ $wanted{$1}++;
+}
+close TMPL;
+
+# Thank you HP-UX for having a cpp that blindly strips trailing backslashes
+# in the text. Run through cpp by using the fixcpp script...
+
+open(CPP, "$dir/fixcpp $cpp_opt $file |");
+while (<CPP>) {
+ # Record defined symbols in Jmakefile. We won't catch symbols
+ # in conditional commands, but that's ok, I hope.
+ if ($in_symbol) {
+ $val = $_;
+ $in_symbol = 0 if !($val =~ s/\\\s*$//); # Last line
+ if ($val = /^\|expand/) { # Found an expand command
+ $in_symbol = 0; # Stop gathering value
+ $val .= "void::x"; # Stop any incomplete escape sequence
+ }
+ chop($val);
+ $Makesym{$current_symbol} .= $val;
+ } elsif (/^\s*(\w+)\s*=(.*)/ && !$in_symbol) {
+ # Found a makefile's macro declaration
+ $val = $2;
+ $current_symbol = $1;
+ if ($val =~ s/\\\s*$//) { # Remove final '\'
+ $in_symbol = 1; # This is a continuation line
+ }
+ $Makesym{$current_symbol} = $val;
+ push(@Order, $current_symbol); # Keep track of order
+ }
+ # Protect RCS keyword Id or Header from normal substitution
+ s/\$(Id|Header|Log)/\$X-$1/;
+ # Restore possibly escaped C comments
+ s|/#\*|/*|g;
+ s|\*#/|*/|g;
+ # Remove all ^^^ (null space character) up to next non-space character
+ s|\^\^\^\s*||g;
+ # Remove all ^^ (null space character)
+ s|\^\^||g;
+ # Restore escaped ^^ and ^^^ sequences
+ s|\^\\\^\\\^|^^^|g;
+ s|\^\\\^|^^|g;
+ next if /^#\s+\d+/; # Skip cpp commments
+
+ s/^;#/#/;
+ s/@#\s?/\n/g; # Kept for backward compatibility
+ s/@!\s?/\n/g;
+ s/@@\s?/\n\t/g;
+
+ # A '\r' is added to all lines, in order to let 'split' keep them
+ # As lines ending with '\' won't fit in the next regular
+ # expression (why ?), we have to treat that special case separately
+ s/\n$/\r\n/gm;
+ s/\\\s*$/\\\r/gm; # Remove spaces after final '\' and add '\r'
+ @macro = split(/\n/);
+ for ($i = 0; $i <= $#macro; $i++) {
+ chop($_ = $macro[$i]); # Remove final '\r'
+ s/\s+$//g; # Remove possible useless spaces
+ if (/^TOP\s*=\s*(\S+)/) { # Get the top from generated file
+ $top = $1;
+ }
+ find_wanted($_); # Look for known $(VAR) usage
+ if (s/^\s*>//) { # '>' means "symbol wanted"
+ warn "$me: the '>$_' construct is deprecated for known symbols\n"
+ if $wanted{$_} && !$warned_wanted_symbol_deprecated++;
+ $symbol{$_} = 1;
+ } elsif (s/^\s*\+//) { # '+' means "initialization section"
+ if (s/^\+(\w+)//) { # '++' means add to variable list
+ $added{$1} .= $_;
+ } else { # A single '+' means "add as is".
+ push(@init, $_);
+ }
+ } elsif (s/^\|//) { # Command for us
+ if (/suffix\s+(\S+)/) { # Add suffix
+ push(@suffix, $1) unless $seen{$1};
+ $seen{$1} = 1;
+ } elsif (s/^rule://) { # Add building rule
+ s/^\s(\s*\S+)/\t$1/; # Make sure leading tab is there
+ push(@rule, $_);
+ } elsif (/^skip/) { # Unconditional skip... funny!
+ push(@makefile, "|$_"); # Skip handled in pass 2
+ } elsif (/^expand/) {
+ push(@makefile, "|$_"); # Expand handled in pass 2
+ } elsif (/^once\s+(.*)/) { # Once handled in pass 1
+ if ($Once{$1}++) { # Symbol already seen -- skip
+ for (; $i <= $#macro; $i++) {
+ last if $macro[$i] =~/^-once/;
+ }
+ warn("$me: -once not found for $1")
+ unless $macro[$i] =~/^-once/;
+ }
+ } elsif (/^shell/) { # Escaping to shell
+ push(@makefile, "|$_"); # will be handled in pass 2
+ } elsif (/^case/) { # Conditional generation
+ push(@makefile, "|$_"); # will be handled in pass 2
+ } elsif (/^subst/) { # Section with var substitution
+ push(@makefile, "|$_"); # will be handled in pass 2
+ } else {
+ print "$me: Warning: unknown command $_\n";
+ }
+ } else {
+ next if /^-once/; # Control statement removed
+ push(@makefile, $_);
+ }
+ }
+}
+close CPP;
+
+@key = keys(%added);
+$last_was_blank = 1; # To avoid blank line at the top of the file
+$symbol{'INIT'} = 1 if ($#init >= 0 || $#key >=0); # Initializations
+$symbol{'SUFFIX'} = 1 if ($#suffix >= 0 || $#rule >=0); # Rules or suffixes
+$symbol{'TOP'} = 1 if $top eq '.'; # If imake invoked for the top
+
+$shellmode = 0; # Set to true within "shell" section
+$casemode = 0; # Counts nesting levels within "case" section
+$substmode = 0; # True when within section with variable substitution
+
+$SPIT_START = "\$spitshell >>Makefile <<'!NO!SUBS!'\n";
+$SPIT_END = "!NO!SUBS!\n";
+$GROK_START = "\$spitshell >>Makefile <<!GROK!THIS!\n";
+$GROK_END = "!GROK!THIS!\n";
+
+%target = (); # Will record seen targets (actually generated)
+
+open(MAKEFILE, ">Makefile.SH");
+# We have to use for instead of foreach to handle 'skip' easily
+line: for ($i = 0; $i <= $#makefile; $i++) {
+ $_ = $makefile[$i];
+ next if /^-skip|-expand/; # They might have made a mistake
+
+ # Strip consecutive blank lines in generated file
+
+ if (/^\s*$/) {
+ next if ($last_was_blank);
+ $last_was_blank = 1;
+ } else {
+ $last_was_blank = 0;
+ }
+
+ # In shell mode, we're transparent, untill we reach a "-shell"
+ # We don't call print_makefile() as we don't want to record
+ # those non-makefile lines in the @Generated array.
+
+ if ($shellmode) {
+ if (/^-shell/) { # Ending shell mode, back to Makefile
+ print MAKEFILE $substmode ? $GROK_START : $SPIT_START;
+ $shellmode = 0;
+ } elsif (/^\|shell/) {
+ die "$me: can't nest 'shell' sections.\n";
+ } else {
+ print MAKEFILE "$_\n";
+ }
+ next;
+ } elsif (/^\|shell/) {
+ print MAKEFILE $substmode ? $GROK_END : $SPIT_END;
+ $shellmode = 1; # Next lines emitted verbatim as shell
+ next;
+ }
+
+ # In subst mode, the section until "-subst" is emitted regularily,
+ # excepted that it will be in a grok section, so its $var will be
+ # substituted by the shell.
+
+ if ($substmode) {
+ if (/^-subst/) { # Ending subst mode, back to regular
+ print MAKEFILE $GROK_END;
+ print MAKEFILE $SPIT_START;
+ $substmode = 0;
+ next;
+ } elsif (/^\|subst/) {
+ die "$me: can't nest 'subst' sections.\n";
+ }
+ # Continue with line
+ } elsif (/^\|subst/) {
+ print MAKEFILE $SPIT_END; # End spit section in Makefile.SH
+ print MAKEFILE $GROK_START;
+ $substmode = 1; # Next lines subject to $ interpretation
+ next;
+ }
+
+ # In a "case" section, the Makefile will be conditionally generated
+ # based on the value of the supplied variable, as evaluated by the shell.
+ # We can nest "case" sections without problems.
+
+ if (/^-case/) { # Ending current case section
+ if ($casemode == 0) {
+ warn "$me: ignoring spurious '-case'\n";
+ next;
+ }
+ print MAKEFILE $substmode ? $GROK_END : $SPIT_END;
+ my $indent = "\t" x ($casemode - 1);
+ print MAKEFILE "${indent}\t;;\n";
+ print MAKEFILE "${indent}esac\n";
+ print MAKEFILE "${indent}", $substmode ? $GROK_START : $SPIT_START;
+ $casemode--;
+ next;
+ }
+
+ if (/^\|case/) {
+ my ($var, $value) = /^\|case\s+(\w+)\s+in\s+(.*)/;
+ die "$me: unparseable directive '$_'\n" if $var eq '';
+ $casemode++;
+ print MAKEFILE $substmode ? $GROK_END : $SPIT_END;
+ my $indent = "\t" x ($casemode - 1);
+ print MAKEFILE "${indent}case \"\$$var\" in\n";
+ print MAKEFILE "${indent}$value)\n";
+ print MAKEFILE "${indent}\t", $substmode ? $GROK_START : $SPIT_START;
+ next;
+ }
+
+ # Process regular line to be generated in Makefile.SH
+
+ s/<TAG>/[jmake $version-$revision]/;
+
+ # Lines starting with ?target?: (resp. %target%:) are to be processd
+ # only when target is used (resp. unused) in the generated makefile.
+
+ # Apply in sequence
+ while (/^\s*\?|\s*%/) {
+ if (s/^\s*\?([\w-.]+)\?://) { # Wanted target ?
+ next line unless $target{$1};
+ } elsif (s/^\s*%([\w-.]+)%://) { # Unwanted target ?
+ next line if $target{$1};
+ } else {
+ last;
+ }
+ }
+
+ # Lines starting with ?SYMBOL: (resp. %SYMBOL:) are to be processed
+ # only if SYMBOL is defined (resp. undefined).
+
+ # Apply in sequence
+ while (/^\s*\?|\s*%/) {
+ if (s/^\s*\?(\w+)://) { # Wanted symbol ?
+ next line unless $symbol{$1};
+ } elsif (s/^\s*%(\w+)://) { # Unwanted symbol ?
+ next line if $symbol{$1};
+ } else {
+ print "$me: Warning: missing ':' in $_\n";
+ last;
+ }
+ }
+
+ # We wish to make sure there is a leading tab if the line starts with
+ # a space to prevent problems later on. However, variable definitions
+ # might want to be aligned on the '=' (imake style). Not all make
+ # may be able to cope with those though, so they are left justified
+ # again.
+
+ s/^\s/\t/ unless /^\s+\w+\s+=/; # Make sure leading tab is there
+ s/^\s+(\w+\s+=)/$1/; # Left justify variable definition
+ s/^;#/#/; # Comments in Jmakefile
+
+ if (s/^\|//) { # Command for us
+ if (/^skip/) { # Skip until -skip
+ for (; $i <= $#makefile; $i++) {
+ last if $makefile[$i] =~ /^-skip/;
+ }
+ } elsif (s/^expand//) {
+ &init_expand($_); # Initializes data structures
+ $i++; # Skip expand line
+ undef @Expand; # Storage for expanded lines
+ $pattern = ''; # Assume no pattern
+ for (; $i <= $#makefile; $i++) {
+ $_ = $makefile[$i];
+ if (s/^-expand//) { # Reached end of expansion
+ if (s/^\s*(.*)/$1/) { # Expand followed by a pattern
+ $pattern = $_; # Get pattern to be removed
+ }
+ last;
+ }
+ s/^\s/\t/; # Make sure leading tab is there
+ push(@Expand, $_); # Line to be expanded
+ }
+ &expand($pattern); # Expand all lines in buffer
+ } else {
+ die "$me: unknown command $_\n";
+ }
+ } elsif (/^INIT/) { # Initialization section
+ # All the initializations are put in the variable substitution
+ # section of the Makefile.SH. Therefore, we have to protect all
+ # the '$' signs that are not followed by an alphanumeric character.
+ foreach (@init) {
+ # Dumps core sometimes with perl 4.0 PL10
+ # &protect_dollars(*_);
+ $_ = &protect_dollars($_);
+ &print_makefile($_);
+ }
+ foreach (@key) { # @key set earlier to keys(%added)
+ $_ .= " = " . $added{$_};
+ # Dumps core sometimes with perl 4.0 PL10
+ # &protect_dollars(*_);
+ $_ = &protect_dollars($_);
+ &print_makefile($_);
+ }
+ } elsif (/^SUFFIX/) { # Suffixes/Rules section
+ # Rules and suffixes are put in the variable substitution
+ # section of the Makefile.SH. Therefore, we have to protect all
+ # the '$' signs that are not followed by an alphanumeric character.
+ if ($#suffix >= 0) {
+ print MAKEFILE ".SUFFIXES:";
+ foreach (@suffix) {
+ # Dumps core sometimes with perl 4.0 PL10
+ # &protect_dollars(*_);
+ $_ = &protect_dollars($_);
+ print MAKEFILE " $_";
+ }
+ print MAKEFILE "\n\n";
+ }
+ foreach (@rule) {
+ # Dumps core sometimes with perl 4.0 PL10
+ # &protect_dollars(*_);
+ $_ = &protect_dollars($_);
+ print MAKEFILE "$_\n";
+ }
+ } else {
+ # Keep track of the targets we generate for ?target? and %target% type
+ # of tests in the templates, which can generate specific code when
+ # a target is indeed present.
+ $target{$1}++ if /^([\w.-]+):/;
+
+ &print_makefile($_);
+ }
+}
+close MAKEFILE;
+
+sub protect_dollars {
+ # Dumps core sometimes with perl 4.0 PL10
+ # local(*_) = shift(@_);
+ s/\\\$/\\=/g; # Protect already escaped '$'
+ s/(\$\W)/\\$1/g; # Escape unprotected '$'
+ s/\\=/\\\$/g; # Restore escaped '$'
+ $_; # Because perl dumps core... :-(
+}
+
+# Initializes data structures for expansion. If we detect Makefile
+# macro in the 'expand' line (the argument), then we write a small
+# makefile that will do the substitution for us -- I'm lazy today :-)
+sub init_expand {
+ local($_) = shift(@_);
+ undef %Vars; # Reset array of variables
+ $Vars_len = 0; # Number of "symbols" in first expanded
+ if (/\$\(\w+\)/) { # If at least one macro
+ local($make) = "/tmp/mkjm$$";
+ open(MAKE, ">$make") || die "$me: can't create $make: $!\n";
+ &gen_variables(); # Generates already computed variables
+ foreach $var (@Order) { # Print each in order we found them
+ print MAKE "$var = $Makesym{$var}\n" if !$Gvars{$var};
+ }
+ # We prepend OUTPUT: in front of the line that interests us, because
+ # some makes can print extra information, especially GNU make with
+ # its entering/leaving blurb when invoked from another makefile.
+ print MAKE "all:\n\t\@echo 'OUTPUT: $_'\n";
+ close MAKE;
+ chop($_ = `make -f $make all | grep ^OUTPUT:`);
+ unlink($make);
+ }
+ s/^OUTPUT: //;
+ while (s/^\s*(\w+)!([^!]*)!//) {
+ $Vars{$1} = $2;
+ # Record only length for _first_ expanded symbol
+ $Vars_len = split(/\s\s*/, $2) unless $Vars_len;
+ }
+}
+
+# Expand lines in the @Expand array. The argument is a pattern which is to
+# be removed from the last chunk of expanded lines.
+# For each symbol s, !s is replaced by the next item, and !s:p=q does the
+# same after having replaced the pattern 'p' by pattern 'q' in the item.
+# Spaces are NOT allowed in 'p' or 'q'. Substitution is done once (no /g).
+sub expand {
+ local($pattern) = shift; # To-be-removed pattern for last chunk
+ local($_);
+ local($sub);
+ local($i);
+ local(@expands);
+ for ($i = 0; $i < $Vars_len; $i++) {
+ foreach $line (@Expand) {
+ $_ = $line; # Don't modify elements in array
+ foreach $sym (keys %Vars) {
+ @expands = split(/\s\s*/, $Vars{$sym});
+ $sub = $expands[$i];
+ $sub =~ s/\/\///g; # // is a void value
+ while (s/!${sym}:([^\s]*)=([^\s]*)/,x##x,/) {
+ # Replacing item is altered by some pattern
+ local($p) = $1;
+ local($q) = $2;
+ local($subq) = $sub;
+ eval "\$subq =~ s=${p}=${q}=";
+ s/,x##x,/${subq}/;
+ }
+ s/!${sym}/${sub}/g;
+ }
+ # Protect substitution in an 'eval' in case of error
+ eval "s/${pattern}\$//" if $pattern && $i == ($Vars_len - 1);
+ &print_makefile($_);
+ }
+ }
+}
+
+# Prints its argument in MAKEFILE and records it also in Generated
+sub print_makefile {
+ local($_) = shift(@_); # Line to be printed
+ print MAKEFILE "$_\n";
+ push(@Generated, "$_\n");
+}
+
+# Generates in MAKE file all the generated variable we have so far for
+# final Makefile. This is mainly intended to allow expansion of variables
+# which are already defined with an expand.
+sub gen_variables {
+ undef %Gvars; # Reset already generated variables
+ local ($in_symbol) = 0; # True when in variable (Makefile's macro)
+ foreach (@Generated) {
+ if ($in_symbol) {
+ if (/^\s*(\w+)\s*=(.*)/) { # Missed the end of previous macro
+ $in_symbol = 0;
+ $Gvars{$1} = 1; # Definition of variable seen
+ $in_symbol = 1 if (/\\\s*$/); # There is a final '\'
+ print MAKE "void::\n"; # Cut incomplete esc sequence
+ } else {
+ $in_symbol = 0 if !(/\\\s*$/); # Last line
+ }
+ print MAKE;
+ } elsif (/^\s*(\w+)\s*=(.*)/ && !$in_symbol) {
+ # Found a makefile's macro declaration
+ $Gvars{$1} = 1; # Definition of variable seen
+ $in_symbol = 1 if (/\\\s*$/); # There is a final '\'
+ print MAKE;
+ }
+ }
+ print MAKE "void::\n"; # Cut incomplete escape sequence
+}
+
+# Parse line to extract all $(VAR) usage and trigger the symbol if VAR
+# is among the wanted set, as if they had manually said ">VAR" like in
+# the old days.
+sub find_wanted {
+ my ($l) = @_;
+ while ($l =~ s/\$\(([\w_]+)\)//) {
+ $symbol{$1}++ if $wanted{$1};
+ }
+}
+
+!NO!SUBS!
+$grep -v '^;#' ../pl/tilde.pl >>jmake
+chmod 755 jmake
+$eunicefix jmake
diff --git a/jmake/jmake.man b/jmake/jmake.man
new file mode 100644
index 0000000..66b306d
--- /dev/null
+++ b/jmake/jmake.man
@@ -0,0 +1,518 @@
+''' $Id$
+'''
+''' Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+'''
+''' You may redistribute only under the terms of the Artistic Licence,
+''' as specified in the README file that comes with the distribution.
+''' You may reuse parts of this distribution only within the terms of
+''' that same Artistic Licence; a copy of which may be found at the root
+''' of the source tree for dist 4.0.
+'''
+''' $Log: jmake.man,v $
+''' Revision 3.0.1.3 2004/08/22 09:01:55 ram
+''' patch71: renamed |test as |case as the construct has its syntax
+''' patch71: added |subst section to allow variable substitutions
+'''
+''' Revision 3.0.1.2 2004/08/21 23:19:52 ram
+''' patch71: added '|shell' section to emit verbatim code in Makefile.SH
+''' patch71: new '|test' to conditionally generate Makefile sections
+'''
+''' Revision 3.0.1.1 1995/05/12 11:57:58 ram
+''' patch54: updated my e-mail address
+'''
+''' Revision 3.0 1993/08/18 12:04:18 ram
+''' Baseline for dist 3.0 netwide release.
+'''
+.TH JMAKE 1 ram
+.SH NAME
+jmake \- a generic makefile builder
+.SH SYNOPSIS
+.B jmake
+[
+.I cpp options
+]
+.SH DESCRIPTION
+.I Jmake
+builds a makefile out of a rather high level description held in a
+.I Jmakefile
+file. The generated file is a
+.I Makefile.SH
+rather than a simple makefile, which means it is ready to be used in
+conjonction with
+.I metaconfig.
+In particular, parameters such as "where to install executables" will
+be automatically determined by
+.I Configure
+and only the needed parameters will be taken into account.
+.PP
+To use
+.I jmake
+you have to write a
+.I Jmakefile
+first, which describes the way things are to be built. Your
+.I Jmakefile
+will be included inside a generic template through the C pre-processor.
+This means you may use the usual C /**/ comments, but not the shell # comments.
+The C comments will not appear in the generated
+.I Makefile.SH
+but lines starting with ;# will finally appear as shell comments. If you
+have to write the string /* in the generated
+.I Makefile.SH
+then you have to escape it (otherwise
+.I jmake
+will think of it as the start of a C comment). Simply put a # in front
+of the *, as in /#*.
+.PP
+You have a set of macros at your disposal, and all these macros are
+listed in the Index file, along with the piece of code they will
+expand to. Usually, a
+.I Jmakefile
+is fairly small and thus easier to maintain than a huge
+.I Makefile.
+Some internal powerful commands allow you to write
+portable makefiles easily, without having to spend many efforts, because
+someone else already did the job for you :-).
+.PP
+When you want to generate your makefile, you usually do not run
+.I jmake
+but use the
+.I jmkmf
+script which is a wrapper and will invoke
+.I jmake
+with the correct options.
+.PP
+All the knowledge of
+.I jmake
+is held in two files: the template
+.I Jmake.tmpl
+and the macro definition file
+.I Jmake.rules.
+The first file includes the second, along with the
+.I Jmakefile.
+It is sometimes necessary to know how things works to be able to correctly
+use all the features provided. For instance, you may have to write your
+own rules for a specific project. Although you cannot overwrite the
+predefined rules, you can extent the
+.I Jmake.rules
+file or simply add your macros in your
+.I Jmakefile.
+You may also use
+.I #include
+statements when you want to share these macros and do not want to duplicate
+the code.
+.PP
+The syntax in Jmake.rules is not elegant at all, but:
+.sp
+.PD 0
+.IP -
+It is easy to parse (like sendmail.cf or troff files).
+.IP -
+The rules are not supposed to change very often.
+.IP -
+It is simple enough to be mastered in five minutes. :-)
+.sp
+Here is a small description:
+.sp
+.IP 1)
+To deal with various \fIcpp\fR implementations:
+.sp
+.RS
+.IP \(bu
+Final @!\\ means: end of line, next line starts at the left margin.
+.IP \(bu
+Final @@\\ means: end of line, next line is to be indented by one tab.
+.sp
+.PP
+There should always be one of @!\\ or @@\\ at the end of each line.
+The only exception is for macros that are to be used as part of a
+rule body (e.g. \fIRemoveTargetProgram\fR). In that case, the first
+line (which holds the \fI#define\fR) should end with a single backslash.
+.RE
+.sp
+.IP 2)
+Symbol definitions:
+.sp
+.RS
+.IP \(bu
+>SYMBOL: defines the symbol.
+.IP \(bu
+?SYMBOL:<text>: keeps <text> iff SYMBOL is defined.
+.IP \(bu
+%SYMBOL:<text>: keeps <text> iff SYMBOL is not defined.
+.sp
+.PP
+The ?SYM can be nested (logical AND), as in:
+.sp
+.in +5
+?SYMBOL:%TOKEN:text
+.in -5
+.sp
+which will keep text if SYMBOL is defined and TOKEN undefined.
+To implement a logical OR, see below.
+.RE
+.sp
+.IP 3)
+Makefile target tests:
+.sp
+.RS
+.IP \(bu
+?\fItarget\fR?:<text>: keeps <test> iff \fItarget\fR is defined.
+.IP \(bu
+%\fItarget\fR%:<text>: keeps <test> iff \fItarget\fR is not defined.
+.sp
+A makefile \fItarget\fR is defined as a standalone target, for instance
+the
+.B depend.local
+target, which would be defined as:
+.sp
+.in +5
+.nf
+depend.local:
+.sp
+.in -5
+.fi
+Also note that it is only valid for targets defined
+.I so far
+in the generated makefile. It is not a predicate that can be used
+to test for targets that will eventually be defined later on in the
+generation.
+.RE
+.sp
+.IP 4)
+Commands:
+.sp
+.RS
+Commands can be passed to \fIjmake\fR. They start with a leading '|'.
+Available commands are:
+.sp
+.IP \(bu
+|suffix <sx>: adds <sx> to the .SUFFIXES: list in the makefile.
+.sp
+.IP \(bu
+|rule:<text>: adds <text> to the building rule section.
+.sp
+.IP \(bu
+|rule: <text>: same as before, with a leading tab.
+.sp
+.IP \(bu
+|skip: skips text until a line starting with '-skip' is found.
+.sp
+.IP \(bu
+|subst: begins section where lines will be subject to variable substitution,
+until '-subst' is found. This means that when the Makefile.SH is run, all
+instances of $var within the \fIsubst\fR section will be substituted by the
+shell.
+.sp
+.IP \(bu
+|shell: emits section until matching '-shell' as-is in the generated
+Makefile.SH. This can be useful to prepare \fI|case\fR sections. It is
+not allowed to nest \fIshell\fR sections.
+.sp
+.IP \(bu
+|case: this command must be followed by a shell variable name (without
+its leading '$' sign) and a case-style pattern, for instance the string
+"var in f*". It will generate the corresponding "case" test in the
+Makefile.SH on the "$var" value and only if this test is true will the
+section until the matching '-case' be generated in the Makefile when
+Makefile.SH is run. It is possible to nest \fIcase\fR sections freely.
+.sp
+.IP \(bu
+|expand <pattern>: expand lines until '-expand' with <pattern>. A
+complete example is shown below.
+.sp
+.IP \(bu
+|once <symbol>: text up to '-once' appears only the first time.
+.sp
+.PP
+The '|' commands cannot be nested, unless otherwise noted.
+In particular, due to the simple
+implementation of \fI|skip\fR, it is impossible to put \fI|skip\fR inside
+a skipped part. However, a \fI|once\fR section may have \fI|skip\fR sections.
+It is allowed to nest \fI|case\fR sections at will.
+.sp
+.PP
+Here is a way to implement a logical OR:
+.sp
+.in +5
+.nf
+/* Implements SYMBOL or not TOKEN */
+?SYMBOL:text /* Keeps text if SYMBOL */
+%SYMBOL:|skip
+ %TOKEN:text /* Keeps text if not TOKEN */
+-skip
+.fi
+.in -5
+.sp
+Actually, this is ugly, because the text has to appear twice.
+Fortunately, I did not use that construct. :-)
+.sp
+Indeed, as you have surely already guessed, the best way to
+implement a logical OR is to use De Morgan's Law:
+.sp
+.in +5
+.nf
+not (p or q) <=> not p and not q
+
+/* Implements SYMBOL or not TOKEN (attempt #2) */
+%SYMBOL:?TOKEN:|skip
+text /* If SYMBOL or not TOKEN */
+-skip
+.sp
+.in -5
+.fi
+Who said they didn't care about logic? ;-)
+.sp
+.PP
+Expansion is done with the \fIexpand\fR command. It has been provided to
+avoid some cumbersome writings in makefiles when you have to repeat some
+silly lines that only differ in file names, for instance. Let's look at
+an example first:
+.sp
+.in +5
+.nf
+|expand a!foo bar! b!yes no!
+!a::
+ echo !a, !b
+-expand
+.fi
+.in -5
+.sp
+.PP
+Then two rules will be printed, and the values of (a,b) for the first
+will be (foo, yes), for the second (bar, no). Substitution is controled
+by the '!' character. If the word to be substituted is part of another
+one, detach with the ^^ construct as in: !b^^c. It is possible to
+use Makefile macros in the <pattern>, and they will be expanded by
+jmake. If this is not what you want, escape the first '$' sign (this is
+a Makefile escape, i.e. you must double the '$', not precede it with a
+backslash). A // stands for the null substitution value.
+.PP
+The ^^^ construct behaves like ^^, i.e. it is stripped out, but it also
+removes any following white space after the ^^^. If you prepend something
+to a macro argument, and that macro argument was written with spaces before
+it, then this will let you concatenate something right before that argument's
+final value.
+.sp
+.PP
+Here is another example which shows how the macro Expand can be used.
+It is defined in \fIJmake.rules\fR as:
+.sp
+.in +5
+.nf
+#define Expand(rule, pattern) @!\\
+|expand pattern @!\\
+rule @!\\
+-expand
+.sp
+.in -5
+.fi
+So we can write in the \fIJmakefile\fR:
+.sp
+.in +5
+.nf
+|skip
+A = foo bar
+-skip
+
+#define Rule @!\\
+$(DIR)/!a^^.o: !a^^.o @@\\
+ $(CC) -c !a^^.c @@\\
+ $(MV) !a^^.o $(DIR)
+
+Expand(Rule, a!$(A)!)
+.sp
+.in -5
+.fi
+which will generate in \fIMakefile.SH\fR:
+.sp
+.in +5
+.nf
+$(DIR)/foo.o: foo.o
+ $(CC) -c foo.c
+ $(MV) foo.o $(DIR)
+
+$(DIR)/bar.o: bar.o
+ $(CC) -c bar.c
+ $(MV) bar.o $$(DIR)
+.sp
+.in -5
+.fi
+.sp
+.PP
+The 'A' declaration has been surrounded by \fIskip\fR, so that it does
+not appear in the generated Makefile.SH, but it will be taken into
+account by \fIjmake\fR for the substitution in the pattern.
+.sp
+.PP
+The number of expansions is determined by the number of possible
+values for the \fBfirst\fR parameter. If other parameters have less
+substitution values, they will get void ones.
+.sp
+.PP
+It is possible to add a regular expression at the end of '-expand'. This
+regular expression will be removed from the final set of expansion at the
+end of each line. It is also possible to do substitutions in the expanded
+item, by using the syntax (if 'f' is the expanded variable)
+!f:\fI<p>\fR=\fI<q>\fR
+where \fI<p>\fR and \fI<q>\fR are two regular expressions (without spaces).
+The pattern \fI<p>\fR will be replaced by the pattern \fI<q>\fR (only the first
+occurrence will be replaced).
+.sp
+.PP
+Finally, you may refer in the expanded section to variables whose value is
+computed via another expansion, which makes it easy to define generic
+\fIJmakefiles\fR.
+.sp
+Example:
+.sp
+.in +5
+.nf
+SRC = foo.c bar.c
+OBJ = \\
+|expand f!$(SRC)!
+ !f:\\.c=\\.o \\
+-expand \\\\
+INC = \\
+|expand f!$(OBJ)!
+ !f:\\.o=\\.h \\
+-expand \\\\
+.fi
+.in -5
+.sp
+which will generate in \fIMakefile.SH\fR:
+.sp
+.in +5
+.nf
+SRC = foo.c bar.c
+OBJ = \\
+ foo.o \\
+ bar.o
+INC = \\
+ foo.h \\
+ bar.h
+.in -5
+.fi
+.sp
+Do not forget to protect special characters in your regular expressions such
+as backslash, point, etc...
+.sp
+.PP
+The \fIonce\fR command is tagged with a name. The first time the name
+appears, the once construct is ignored and the text up to '-once' will
+be copied in the generated Makefile.SH. However, future occurences of
+the same name will be ignored (\fIonce\fR will behave like \fIskip\fR).
+.sp
+Example:
+.sp
+.in +5
+.nf
+|once this_is_a_name
+<text>
+-once
+.sp
+.in -5
+.fi
+.sp
+.PP
+The \fIshell\fR command can be used to generate a shell fragment
+in the Makefile.SH. For instance, the following section in the Jmakefile:
+.sp
+.in +5
+.nf
+|shell
+case "$d_usegtk1" in
+define) glib=1; gtk=1;;
+esac
+-shell
+.sp
+.in -5
+.fi
+will cause the generation of the enclosed fragment in the Makefile.SH to
+compute the values of the \fIglib\fR and \fIgtk\fR variables based on the
+configuration variable \fId_usegtk1\fR set by running Configure.
+.sp
+.PP
+In turn, this can be used in subsequent \fIcase\fR sections to activate
+parts of the Makefile only when building for GTK1 using glib-1.x:
+.sp
+.in +5
+.nf
+|case glib in 1
+display:
+ echo "Building for glib-1.x"
+-case
+.sp
+.in -5
+.fi
+This section will generate something like this in the Makefile.SH:
+.sp
+.in +5
+.nf
+!NO!SUBS!
+case "$glib" in
+1)
+ $spitshell >>Makefile <<'!NO!SUBS!'
+display:
+ echo "Building for glib-1.x"
+!NO!SUBS!
+ ;;
+esac
+$spitshell >>Makefile <<'!NO!SUBS!'
+.sp
+.in -5
+.fi
+And when running Makefile.SH, the "display" rule above will only appear
+when building for glib-1.x. The form of the final \fIMakefile\fR can
+therefore depend on the configuration options chosen when \fIConfigure\fR
+was run.
+.RE
+.sp
+.IP 5)
+Initializations:
+.sp
+.RS
+.IP \(bu
++<line>: Puts the whole line in the initialization section.
+.IP \(bu
+++SYMBOL <value>: Adds <value> to the SYMBOL macro.
+.RE
+.sp
+.IP 6)
+User-defined variables:
+.sp
+The user may define CFLAGS, LDFLAGS or DPFLAGS as additional flags to be used
+in C compilation, linking phase or depend target. It is thus possible to add
+some extra flags such as -I or libraries for Makefiles in specific
+sub-directories.
+.sp
+.PD
+.SH AUTHOR
+Raphael Manfredi <Raphael_Manfredi@pobox.com>
+.SH FILES
+.PD 0
+.TP 20
+Jmakefile
+High level description of Makefile.SH
+.TP
+Jmake.rules
+File holding the macro definitions
+.TP
+Jmake.tmpl
+Template used to mould Makefile.SH
+.PD
+.SH BUGS
+On systems whose
+.I cpp
+reduces multiple tabs and spaces to a single space,
+.I jmake
+attempts to put back any necessary tabs (which
+.I make
+expects in front of rules) but does not properly formats the
+body of the rule itself.
+.PP
+There is a bootstraping problem when creating the first Makefile.SH, because
+you cannot run it through a shell until there is a decent Configure
+script, but you can't run \fImetaconfig\fR before there is a Makefile.SH
+or some needed symbols will not be defined.
+.SH "SEE ALSO"
+jmkmf(1), metaconfig(1).
diff --git a/jmake/jmkmf.SH b/jmake/jmkmf.SH
new file mode 100755
index 0000000..64edf18
--- /dev/null
+++ b/jmake/jmkmf.SH
@@ -0,0 +1,106 @@
+case $CONFIG in
+'')
+ if test -f config.sh; then TOP=.;
+ elif test -f ../config.sh; then TOP=..;
+ elif test -f ../../config.sh; then TOP=../..;
+ elif test -f ../../../config.sh; then TOP=../../..;
+ elif test -f ../../../../config.sh; then TOP=../../../..;
+ else
+ echo "Can't find config.sh."; exit 1
+ fi
+ . $TOP/config.sh
+ ;;
+esac
+case "$0" in
+*/*) cd `expr X$0 : 'X\(.*\)/'` ;;
+esac
+echo "Extracting jmake/jmkmf (with variable substitutions)"
+$spitshell >jmkmf <<!GROK!THIS!
+$startsh
+!GROK!THIS!
+$spitshell >>jmkmf <<'!NO!SUBS!'
+# @(#) Generates a Makefile from a Jmakefile
+
+# $Id$
+#
+# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+#
+# You may redistribute only under the terms of the Artistic Licence,
+# as specified in the README file that comes with the distribution.
+# You may reuse parts of this distribution only within the terms of
+# that same Artistic Licence; a copy of which may be found at the root
+# of the source tree for dist 4.0.
+#
+# $Log: jmkmf.SH,v $
+# Revision 3.0.1.2 2004/08/21 23:18:13 ram
+# patch71: automatically figures the top dir and the current dir
+# patch71: don't run Makefile.SH if the jmake call failed
+#
+# Revision 3.0.1.1 1993/08/19 06:42:14 ram
+# patch1: leading config.sh searching was not aborting properly
+#
+# Revision 3.0 1993/08/18 12:04:19 ram
+# Baseline for dist 3.0 netwide release.
+#
+
+usage="usage: $0 [top_of_sources_pathname [current_directory]]"
+
+curdir=
+
+case $# in
+ 0)
+ if test -f .package; then topdir=.;
+ elif test -f ../.package; then topdir=..;
+ elif test -f ../../.package; then topdir=../..;
+ elif test -f ../../../.package; then topdir=../../..;
+ elif test -f ../../../../.package; then topdir=../../../..;
+ else
+ echo "$0: WARNING: can't determine top package directory" >&2
+ fi
+ ;;
+ 1) topdir=$1 ;;
+ 2) topdir=$1 curdir=$2 ;;
+ *) echo "$usage" 1>&2; exit 1 ;;
+esac
+
+case "$topdir" in
+ -*) echo "$usage" 1>&2; exit 1 ;;
+esac
+
+case "$curdir" in
+'')
+ here=`pwd`
+ top=`cd $topdir; pwd`
+ curdir=`perl -e \
+ 'print substr($ARGV[0], length($ARGV[1])+1), "\n";' $here $top`
+ case "$curdir" in
+ '') curdir=.;;
+ esac
+ ;;
+esac
+
+if test -f Jmakefile; then
+ : ok
+else
+ echo "$0: no Jmakefile found in current directory" >&2
+ exit 1
+fi
+
+if test -f Makefile.SH; then
+ echo mv Makefile.SH Makefile.SH~
+ mv Makefile.SH Makefile.SH~
+fi
+
+args="-DTOPDIR=$topdir -DCURDIR=$curdir"
+
+echo jmake $args
+if jmake $args; then
+ echo sh Makefile.SH
+ sh Makefile.SH
+else
+ echo "jmake failed, aborting" >&2
+ exit 1
+fi
+!NO!SUBS!
+chmod 755 jmkmf
+$eunicefix jmkmf
diff --git a/jmake/jmkmf.man b/jmake/jmkmf.man
new file mode 100644
index 0000000..dde89a1
--- /dev/null
+++ b/jmake/jmkmf.man
@@ -0,0 +1,80 @@
+''' $Id$
+'''
+''' Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+'''
+''' You may redistribute only under the terms of the Artistic Licence,
+''' as specified in the README file that comes with the distribution.
+''' You may reuse parts of this distribution only within the terms of
+''' that same Artistic Licence; a copy of which may be found at the root
+''' of the source tree for dist 4.0.
+'''
+''' $Log: jmkmf.man,v $
+''' Revision 3.0.1.1 1995/05/12 11:58:03 ram
+''' patch54: updated my e-mail address
+'''
+''' Revision 3.0 1993/08/18 12:04:20 ram
+''' Baseline for dist 3.0 netwide release.
+'''
+.TH JMKMF 1 ram
+.SH NAME
+jmkmf \- runs jmake with the correct options
+.SH SYNOPSIS
+.B jmkmf
+[
+.I top-level dir
+[
+.I current dir
+]
+]
+.SH DESCRIPTION
+.I Jmkmf
+is a wrapper which calls
+.I jmake
+with the correct options, defining the symbols
+.SM TOPDIR
+(location of the top-level directory) and
+.SM CURDIR
+(current directory). The generated
+.I Makefile.SH
+is then ran through
+.I /bin/sh
+to produce a
+.I Makefile.
+.PP
+.I Jmkmf
+is useful when you generate a makefile for the first time.
+.PP
+When ran without arguments,
+.I jmkmf
+will scan the directories upwards, looking for a .package file marking
+the top of your sources. It will then derive the top-level directory
+and the name of the current directory by itself.
+.PP
+Once you have a
+.I Makefile.SH
+generated by
+.I jmake,
+and have run Configure already, you can use
+.I make Makefile.SH
+to build the Makefile.SH again and
+.I make Makefile
+to run the Makefile.SH through
+.I /bin/sh.
+To use the recursive commands, you have to append an 's' at the
+end of the name as in
+.I make Makefiles.SH
+and
+.I make Makefiles.
+.SH AUTHOR
+Raphael Manfredi <Raphael.Manfredi@pobox.com>
+.SH FILES
+.PD 0
+.TP 20
+Jmakefile
+High level description of makefile
+.TP
+.package
+The file marking the top of your package tree
+.PD
+.SH "SEE ALSO"
+jmake(1), packinit(1).
diff --git a/kit/Jmakefile b/kit/Jmakefile
new file mode 100644
index 0000000..c43db69
--- /dev/null
+++ b/kit/Jmakefile
@@ -0,0 +1,46 @@
+/*
+ * Jmakefile for kit maker
+ */
+
+;# $Id$
+;#
+;# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+;#
+;# You may redistribute only under the terms of the Artistic Licence,
+;# as specified in the README file that comes with the distribution.
+;# You may reuse parts of this distribution only within the terms of
+;# that same Artistic Licence; a copy of which may be found at the root
+;# of the source tree for dist 4.0.
+;#
+;# $Log: Jmakefile,v $
+;# Revision 3.0.1.2 1994/04/22 09:35:35 ram
+;# patch23: new kitpost script
+;#
+;# Revision 3.0.1.1 1994/01/24 13:42:21 ram
+;# patch16: added dependency generation stage
+;#
+;# Revision 3.0 1993/08/18 12:04:21 ram
+;# Baseline for dist 3.0 netwide release.
+;#
+
+SCRIPT = makedist manifake kitsend kitpost
+
+ShellScriptTarget($(SCRIPT))
+InstallScript(makeSH,$(SCRIPTDIR))
+InstallManPage(makeSH,$(MANSRC))
+
+SCRIPTSH = \
+|expand f!$(SCRIPT)!
+ !f.SH \
+-expand \\
+
+depend:: local_depend
+local_depend::
+ ($(SED) '/^# DO NOT DELETE/q' Makefile && \
+ grep '^\$$grep' $(SCRIPTSH) | \
+ $(SED) -e "s/^.*' \([^ ]*\) >>[ ]*\([^ ]*\)/\2: \1/" \
+ ) > Makefile.new
+ cp Makefile Makefile.bak
+ cp Makefile.new Makefile
+ $(RM) Makefile.new
+
diff --git a/kit/Makefile.SH b/kit/Makefile.SH
new file mode 100755
index 0000000..6badd31
--- /dev/null
+++ b/kit/Makefile.SH
@@ -0,0 +1,266 @@
+: Makefile.SH generated from Jmake.tmpl and Jmakefile [jmake 3.5-43]
+: $X-Id: Jmake.tmpl 47 2010-11-28 22:23:13Z rmanfredi $
+
+case $CONFIG in
+'')
+ if test -f config.sh; then TOP=.;
+ elif test -f ../config.sh; then TOP=..;
+ elif test -f ../../config.sh; then TOP=../..;
+ elif test -f ../../../config.sh; then TOP=../../..;
+ elif test -f ../../../../config.sh; then TOP=../../../..;
+ else
+ echo "Can't find config.sh."; exit 1
+ fi
+ . $TOP/config.sh
+ ;;
+esac
+case "$0" in
+*/*) cd `expr X$0 : 'X\(.*\)/'` ;;
+esac
+CURRENT=kit
+DIR=`echo $CURRENT/ | sed -e 's/\.\///g'`
+echo "Extracting ${DIR}Makefile (with variable substitutions)"
+
+INSTALL=`echo $install | sed -e 's,\./i,\$(TOP)/i,'`
+INSTALLDIR=`echo $installdir | sed -e 's,\./i,\$(TOP)/i,'`
+DATE=`date`
+
+$spitshell >Makefile <<!GROK!THIS!
+########################################################################
+# Makefile generated from Makefile.SH on $DATE
+
+SHELL = /bin/sh
+JMAKE = jmake
+TOP = ..
+CURRENT = $CURRENT
+DIR = $DIR
+INSTALL = $INSTALL
+INSTALLDIR = $INSTALLDIR
+
+########################################################################
+# Parameters set by Configure -- edit config.sh if changes are needed
+
+CTAGS = ctags
+JCPPFLAGS = $cppflags
+L = $manext
+MANSRC = $installmansrc
+MV = $mv
+RM = $rm -f
+SCRIPTDIR = $installscript
+SED = $sed
+
+########################################################################
+# Automatically generated parameters -- do not edit
+
+SCRIPTS = \$(SCRIPT)
+
+!GROK!THIS!
+$spitshell >>Makefile <<'!NO!SUBS!'
+########################################################################
+# Jmake rules for building libraries, programs, scripts, and data files
+# $X-Id: Jmake.rules 18 2006-12-27 10:35:09Z rmanfredi $
+
+########################################################################
+# Start of Jmakefile
+
+# $X-Id: Jmakefile 48 2010-11-28 23:05:09Z rmanfredi $
+#
+# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+#
+# You may redistribute only under the terms of the Artistic Licence,
+# as specified in the README file that comes with the distribution.
+# You may reuse parts of this distribution only within the terms of
+# that same Artistic Licence; a copy of which may be found at the root
+# of the source tree for dist 4.0.
+#
+# $X-Log: Jmakefile,v $
+# Revision 3.0.1.2 1994/04/22 09:35:35 ram
+# patch23: new kitpost script
+#
+# Revision 3.0.1.1 1994/01/24 13:42:21 ram
+# patch16: added dependency generation stage
+#
+# Revision 3.0 1993/08/18 12:04:21 ram
+# Baseline for dist 3.0 netwide release.
+#
+
+SCRIPT = makedist manifake kitsend kitpost
+
+all:: $(SCRIPT)
+
+local_realclean::
+ $(RM) $(SCRIPT)
+
+makedist: makedist.SH
+ /bin/sh makedist.SH
+
+manifake: manifake.SH
+ /bin/sh manifake.SH
+
+kitsend: kitsend.SH
+ /bin/sh kitsend.SH
+
+kitpost: kitpost.SH
+ /bin/sh kitpost.SH
+
+
+local_install:: $(SCRIPTS) $(LSCRIPTS)
+ @case '${MFLAGS}' in *[i]*) set +e;; esac; \
+ (set -x; test -d $(INSTALL_PREFIX)$(SCRIPTDIR) || \
+ $(INSTALLDIR) $(INSTALL_PREFIX)$(SCRIPTDIR)); \
+ for file in $(SCRIPTS) $(LSCRIPTS); do \
+ (set -x; \
+ $(INSTALL) -c -m 555 $$file $(INSTALL_PREFIX)$(SCRIPTDIR)) || \
+ exit 1; \
+ done
+
+local_deinstall::
+ @for file in $(SCRIPTS) $(LSCRIPTS); do \
+ case '${MFLAGS}' in *[i]*) set +e;; esac; \
+ (set -x; $(RM) $(INSTALL_PREFIX)$(SCRIPTDIR)/$$file); \
+ done
+
+local_install.man::
+ @case '${MFLAGS}' in *[i]*) set +e;; esac; \
+ (set -x; test -d $(INSTALL_PREFIX)$(MANSRC) || \
+ $(INSTALLDIR) $(INSTALL_PREFIX)$(MANSRC)); \
+ for file in $(SCRIPTS); do \
+ if test -f $$file.man; then \
+ (set -x; \
+ $(INSTALL) -c -m 444 $$file.man \
+ $(INSTALL_PREFIX)$(MANSRC)/$$file.$(L)) || \
+ exit 1; \
+ fi; \
+ done
+
+local_deinstall.man::
+ case '${MFLAGS}' in *[i]*) set +e;; esac; \
+ for file in $(SCRIPTS); do \
+ (set -x; $(RM) $(INSTALL_PREFIX)$(MANSRC)/$$file.$(L)); \
+ done
+
+local_install:: makeSH
+ @case '${MFLAGS}' in *[i]*) set +e;; esac; \
+ (set -x; test -d $(INSTALL_PREFIX)$(SCRIPTDIR) || \
+ $(INSTALLDIR) $(INSTALL_PREFIX)$(SCRIPTDIR)); \
+ $(INSTALL) -c -m 555 makeSH $(INSTALL_PREFIX)$(SCRIPTDIR)
+
+local_deinstall::
+ $(RM) $(INSTALL_PREFIX)$(SCRIPTDIR)/makeSH
+
+local_install.man:: makeSH.man
+ @case '${MFLAGS}' in *[i]*) set +e;; esac; \
+ (set -x; test -d $(INSTALL_PREFIX)$(MANSRC) || \
+ $(INSTALLDIR) $(INSTALL_PREFIX)$(MANSRC)); \
+ $(INSTALL) -c -m 444 makeSH.man $(INSTALL_PREFIX)$(MANSRC)/makeSH.$(L)
+
+local_deinstall.man::
+ $(RM) $(INSTALL_PREFIX)$(MANSRC)/makeSH.$(L)
+
+SCRIPTSH = \
+ makedist.SH \
+ manifake.SH \
+ kitsend.SH \
+ kitpost.SH
+
+depend:: local_depend
+local_depend::
+ ($(SED) '/^# DO NOT DELETE/q' Makefile && \
+ grep '^\$$grep' $(SCRIPTSH) | \
+ $(SED) -e "s/^.*' \([^ ]*\) >>[ ]*\([^ ]*\)/\2: \1/" \
+ ) > Makefile.new
+ cp Makefile Makefile.bak
+ cp Makefile.new Makefile
+ $(RM) Makefile.new
+
+########################################################################
+# Common rules for all Makefiles -- do not edit
+
+all::
+
+clean: local_clean
+realclean: local_realclean
+clobber: local_clobber
+
+local_clean::
+ if test -f core; then $(RM) core; fi
+ $(RM) *~ *.o
+
+local_realclean:: local_clean
+
+local_clobber:: local_realclean
+ $(RM) Makefile config.sh
+
+install:: local_install
+install.man:: maybe_install.man
+deinstall:: local_deinstall
+deinstall.man:: maybe_deinstall.man
+
+install.man-yes: local_install.man
+install.man-no:
+deinstall.man-yes: local_deinstall.man
+deinstall.man-no:
+
+!NO!SUBS!
+case "$installmansrc" in
+'') man=no;;
+*) man=yes;;
+esac
+$spitshell >>Makefile <<!GROK!THIS!
+maybe_install.man: install.man-$man
+maybe_deinstall.man: deinstall.man-$man
+!GROK!THIS!
+$spitshell >>Makefile <<'!NO!SUBS!'
+
+Makefile.SH: Jmakefile
+ -@if test -f $(TOP)/.package; then \
+ if test -f Makefile.SH; then \
+ echo " $(RM) Makefile.SH~; $(MV) Makefile.SH Makefile.SH~"; \
+ $(RM) Makefile.SH~; $(MV) Makefile.SH Makefile.SH~; \
+ fi; \
+ echo " $(JMAKE) -DTOPDIR=$(TOP) -DCURDIR=$(CURRENT)" ; \
+ $(JMAKE) -DTOPDIR=$(TOP) -DCURDIR=$(CURRENT) ; \
+ else touch $@; fi
+
+Makefile: Makefile.SH
+ /bin/sh Makefile.SH
+
+tags::
+ $(CTAGS) -w *.[ch]
+ $(CTAGS) -xw *.[ch] > tags
+
+local_clobber::
+ $(RM) tags
+
+depend::
+
+########################################################################
+# Empty rules for directories with no sub-directories -- do not edit
+
+local_install::
+ @echo "install in $(CURRENT) done."
+
+local_deinstall::
+ @echo "deinstall in $(CURRENT) done."
+
+local_install.man::
+ @echo "install.man in $(CURRENT) done."
+
+local_deinstall.man::
+ @echo "deinstall.man in $(CURRENT) done."
+
+Makefiles::
+
+Makefiles.SH::
+
+########################################################################
+# Dependencies generated by make depend
+# DO NOT DELETE THIS LINE -- make depend relies on it
+
+# Put nothing here or make depend will gobble it up
+.FORCE_DEPEND::
+ @echo "You must run 'make depend' in $(TOP) first."; exit 1
+!NO!SUBS!
+chmod 644 Makefile
+$eunicefix Makefile
+
diff --git a/kit/README b/kit/README
new file mode 100644
index 0000000..a521da2
--- /dev/null
+++ b/kit/README
@@ -0,0 +1,35 @@
+This directory contains a rudimentary kit maker.
+
+N.B.: This must not be confused with the kit package, which is a set of shell
+scripts for sending arbitrary files and directories by mail and unpacking them.
+One could call kit a binary tarmailer. The kit package has been released
+separately from dist (posted on comp.sources.unix in 1991).
+
+Larry Wall said:
+
+ Depending on where you are going to send your kits you might prefer
+ to use Rich $alz's kit maker instead--it makes more robust kits
+ but assumes more about the target system.
+
+I say:
+
+ If you are using RCS 4.3, be sure to use makedist instead of your
+ own shell archiver, unless you do not use $Id, $Header or $Locker
+ markers. Moreover, makedist will take the latest checked in
+ revision intead of the working file, so that you archive a coherent
+ package even if you made some mods since the last patch.
+
+You run makedist in the top level directory of your package and it uses
+the MANIFEST.new file to generate shar scripts of about 50000 bytes each.
+
+Just make sure MANIFEST.new contains everything you want, including any
+Configure, config.h.SH, or patchlevel.h files. A prototype patchlevel.h
+may be found in ../gen/patchlevel.h. See the manpage for more details.
+
+If you do not wish to build up shell archives but an up-to-date copy of
+your source tree, run someting like:
+
+ makedist -c dir
+
+to build an up-to-date source tree in dir, which you can then archive using
+your own shell archiver.
diff --git a/kit/kitpost.SH b/kit/kitpost.SH
new file mode 100755
index 0000000..4a0414f
--- /dev/null
+++ b/kit/kitpost.SH
@@ -0,0 +1,237 @@
+case $CONFIG in
+'')
+ if test -f config.sh; then TOP=.;
+ elif test -f ../config.sh; then TOP=..;
+ elif test -f ../../config.sh; then TOP=../..;
+ elif test -f ../../../config.sh; then TOP=../../..;
+ elif test -f ../../../../config.sh; then TOP=../../../..;
+ else
+ echo "Can't find config.sh."; exit 1
+ fi
+ . $TOP/config.sh
+ ;;
+esac
+case "$0" in
+*/*) cd `expr X$0 : 'X\(.*\)/'` ;;
+esac
+echo "Extracting kit/kitpost (with variable substitutions)"
+cat >kitpost <<!GROK!THIS!
+$startperl
+ eval 'exec perl -S \$0 \${1+"\$@"}'
+ if \$running_under_some_shell;
+
+# $Id$
+#
+# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+#
+# You may redistribute only under the terms of the Artistic Licence,
+# as specified in the README file that comes with the distribution.
+# You may reuse parts of this distribution only within the terms of
+# that same Artistic Licence; a copy of which may be found at the root
+# of the source tree for dist 4.0.
+#
+# $Log: kitpost.SH,v $
+# Revision 3.0.1.2 1994/10/29 15:48:26 ram
+# patch36: don't use rootid as a variable, it is known by metaconfig
+#
+# Revision 3.0.1.1 1994/05/06 13:54:53 ram
+# patch23: created
+#
+
+\$inews='${inews-/usr/lib/news/inews}';
+\$mailer='$mailer';
+\$orgname='$orgname';
+\$version = '$VERSION';
+\$patchlevel = '$PATCHLEVEL';
+!GROK!THIS!
+
+cat >>kitpost <<'!NO!SUBS!'
+
+$progname = &profile; # Read ~/.dist_profile
+require 'getopts.pl';
+&usage unless $#ARGV >= 0;
+&usage unless &Getopts("hrVm:D:H:");
+
+if ($opt_V) {
+ print STDERR "$progname $version PL$patchlevel\n";
+ exit 0;
+} elsif ($opt_h) {
+ &usage;
+}
+
+$RCSEXT = ',v' unless $RCSEXT;
+if ($inews eq 'inews') {
+ $inews = '/usr/lib/news/inews' if -f '/usr/lib/news/inews';
+}
+
+chdir '..' if -d '../bugs';
+
+&readpackage;
+
+$orgname = &tilda_expand($orgname);
+chop($orgname = `cat $orgname`) if $orgname =~ m|^/|;
+
+if ($opt_r) {
+ $repost = ' (REPOST)';
+}
+
+while ($_ = shift) {
+ if (/^(kit)?[1-9][\d\-]*$/) {
+ s/^kit//;
+ push(@argv,$_);
+ } else {
+ push(@ngroups,$_);
+ }
+}
+$ngroups = join(',',@ngroups) unless $#ngroups < 0;
+$dest = $opt_m;
+&usage unless $ngroups || $dest;
+
+@ARGV = @argv;
+
+if (-f "$package.kit10") {
+ @filelist = <$package.kit[0-9][0-9]>;
+}
+else {
+ @filelist = <$package.kit[0-9]>;
+}
+pop(@filelist) =~ /(\d+)$/ && ($maxnum = $1 + 0);
+
+if ($#ARGV < 0) {
+ $argv = "1-$maxnum";
+ @ARGV = $argv;
+}
+
+$argv = &rangeargs(@ARGV);
+@ARGV = split(' ', $argv);
+
+$argv =~ s/ $//;
+
+if ($#ARGV < 0) {
+ print STDERR "$progname: no kits specified.\n";
+ &usage;
+} else {
+ local($s) = $#ARGV ? 's' : '';
+ print "$progname: posting $package $baserev kit$s $argv to $ngroups...\n"
+ if $ngroups;
+ print "$progname: mailing $package $baserev kit$s $argv to $dest...\n"
+ if $dest;
+}
+
+$desc = "$opt_D, " if $opt_D;
+
+fork && exit;
+
+# Compute a suitable root message ID that all parts will reference, so that
+# threaded news readers will correctly process them.
+# Unfortunately, this works only when all kits are sent.
+($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) =
+ localtime(time);
+$mon++;
+$rootmid = "$year$mon$mday$hour$min$sec.AA$$";
+$first = $maxnum >= 10 ? "01" : "1";
+$rootmsgid = "<$rootmid.P$first.$maintloc>";
+
+until ($#ARGV < 0) {
+ $kitnum = shift;
+ $kitnum = "0$kitnum" if $kitnum < 10 && $maxnum >= 10;
+ open(FILE, "$package.kit$kitnum") ||
+ die "$progname: can't open $package.kit$kitnum: $!\n";
+ if ($ngroups) {
+ open(INEWS,"|$inews -h") || die "$progname: can't fork $inews: $!\n";
+ }
+ if ($dest) {
+ $opt = '-odq' if $mailer =~ /sendmail/;
+ $dest =~ s/,/ /g;
+ ($to = $dest) =~ s/\s+/, /g;
+ open(MAILER,"|$mailer $opt $dest") ||
+ die "$progname: can't fork $mailer: $!\n";
+ }
+
+ $msg_id = "<$rootmid.P$kitnum.$maintloc>";
+ $msg_id = $rootmsgid if $kitnum == 1;
+ $msg_id .= "\nReferences: $rootmsgid" if $kitnum != 1;
+
+ print INEWS "Newsgroups: $ngroups\n";
+ print MAILER "To: $to\n";
+$head = <<EOH;
+Subject: $package $baserev - ${desc}part$kitnum/$maxnum$repost
+Message-ID: $msg_id
+Organization: $orgname
+
+Submitted-by: $maintname <$maintloc>
+Archive-name: $package-$baserev/part$kitnum
+Environment: UNIX
+
+EOH
+ print INEWS $head;
+ print MAILER $head;
+
+ if ($kitnum == 1 && $opt_H) {
+ open(HEAD, $opt_H) || warn "$progname: can't open $opt_H: $!\n";
+ while (<HEAD>) {
+ print INEWS;
+ print MAILER;
+ }
+ close HEAD;
+ }
+
+ while (<FILE>) {
+ print INEWS;
+ print MAILER;
+ }
+ close FILE;
+ close INEWS;
+ die "$progname: could not post part$kitnum.\n" if $ngroups && $?;
+ close MAILER;
+ die "$progname: could not send part$kitnum.\n" if $dest && $?;
+}
+
+sub usage {
+ print STDERR <<EOM;
+Usage: $progname [-hrV] [-H file] [-D desc] [-m dest1,dest2] [kits] [newsgroups]
+ -h : print this message and exit
+ -m : set-up recipients for (additional) mailing
+ -r : signals a repost
+ -D : specify description string for subject line
+ -H : specify file to be used as header for first part
+ -V : print version number and exit
+EOM
+ exit 1;
+}
+
+sub rangeargs {
+ local($result) = '';
+ local($min,$max,$_);
+ while ($#_ >= 0) {
+ $_ = shift(@_);
+ while (/^\s*\d/) {
+ s/^\s*(\d+)//;
+ $min = $1;
+ if (s/^,//) {
+ $max = $min;
+ }
+ elsif (s/^-(\d*)//) {
+ $max = $1;
+ if ($max == 0 && $maxnum) {
+ $max = $maxnum;
+ }
+ s/^[^,],?//;
+ }
+ else {
+ $max = $min;
+ }
+ for ($i = $min; $i <= $max; ++$i) {
+ $result .= $i . ' ';
+ }
+ }
+ }
+ $result;
+}
+
+!NO!SUBS!
+$grep -v '^;#' ../pl/package.pl >>kitpost
+$grep -v '^;#' ../pl/tilde.pl >>kitpost
+$grep -v '^;#' ../pl/profile.pl >>kitpost
+chmod +x kitpost
+$eunicefix kitpost
diff --git a/kit/kitpost.man b/kit/kitpost.man
new file mode 100644
index 0000000..ec44edd
--- /dev/null
+++ b/kit/kitpost.man
@@ -0,0 +1,89 @@
+''' $Id$
+'''
+''' Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+'''
+''' You may redistribute only under the terms of the Artistic Licence,
+''' as specified in the README file that comes with the distribution.
+''' You may reuse parts of this distribution only within the terms of
+''' that same Artistic Licence; a copy of which may be found at the root
+''' of the source tree for dist 4.0.
+'''
+''' $Log: kitpost.man,v $
+''' Revision 3.0.1.2 1995/05/12 11:58:09 ram
+''' patch54: updated my e-mail address
+'''
+''' Revision 3.0.1.1 1994/05/06 13:55:01 ram
+''' patch23: created
+'''
+.TH KITSEND 1 ram
+.SH NAME
+kitpost \- posts distribution kits
+.SH SYNOPSIS
+.B kitpost
+[
+.B \-hrV
+] [
+.B -H
+.I file
+] [
+.B -D
+.I desc
+] [
+.B -m
+.I dest1,dest2
+] [
+.I kits
+] [
+.I newsgroups
+]
+.SH DESCRIPTION
+.I Kitpost
+posts distribution kits made by \fImakedist\fR to some (source) newsgroups
+specified on the command line. If you do not specify any kit list, then all the
+kits are sent. Otherwise, only the specified kits will be (re)sent.
+.PP
+A kit list may include ranges, \fI1-10\fR specifying kits 1 through 10,
+and \fI5-\fR meaning kits 5 up to the last one. You may also specify kit
+numbers by separating them with commas or spaces, and even mix with ranges,
+such as: \fI1 3 5-7 9\fR.
+.PP
+.I Kitpost
+ensures correct \fIReferences:\fR lines are inserted in your postings so that
+all parts but the first point to the root article. Threaded newsreaders and
+end-users traditionally appreciate that.
+.SH OPTIONS
+The following options are recognized by \fIkitpost\fR:
+.TP 10
+.B \-h
+Print help message and exit.
+.TP
+\fB\-m\fI dest1,destn\fR
+Sends kits by e-mail to the specified recipients. This option may be used in
+conjunction with newsgroup posting. It is mainly intended for sites where
+direct posting to a moderated newsgroup is not allowed by \fIinews\fR. You may
+thus send your kits to the newsgroup moderator in a form that will ease the
+whole posting process.
+.TP
+.B \-r
+Signals a repost.
+.TP
+\fB\-D\fI description\fR
+Specify a description string that will be added to the subject line. Usually
+a brief sentence (less than, say, 40 characters).
+.TP
+\fB\-H\fI file\fR
+Specify a file to be used as header introduction in the first part of your
+posting. Usually the root README file.
+.TP
+.B \-V
+Print version number and exit.
+.SH BUGS
+Article cross-referencing is properly set-up only when the whole package is
+(re)posted in one batch.
+.PP
+It is not currently possible to set-up the article headers manually or
+better, interactively.
+.SH AUTHOR
+Raphael Manfredi <Raphael.Manfredi@pobox.com>
+.SH "SEE ALSO"
+makedist(1), kitsend(1).
diff --git a/kit/kitsend.SH b/kit/kitsend.SH
new file mode 100755
index 0000000..7293b34
--- /dev/null
+++ b/kit/kitsend.SH
@@ -0,0 +1,192 @@
+case $CONFIG in
+'')
+ if test -f config.sh; then TOP=.;
+ elif test -f ../config.sh; then TOP=..;
+ elif test -f ../../config.sh; then TOP=../..;
+ elif test -f ../../../config.sh; then TOP=../../..;
+ elif test -f ../../../../config.sh; then TOP=../../../..;
+ else
+ echo "Can't find config.sh."; exit 1
+ fi
+ . $TOP/config.sh
+ ;;
+esac
+case "$0" in
+*/*) cd `expr X$0 : 'X\(.*\)/'` ;;
+esac
+echo "Extracting kit/kitsend (with variable substitutions)"
+cat >kitsend <<!GROK!THIS!
+$startperl
+ eval 'exec perl -S \$0 \${1+"\$@"}'
+ if \$running_under_some_shell;
+
+# $Id$
+#
+# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+#
+# You may redistribute only under the terms of the Artistic Licence,
+# as specified in the README file that comes with the distribution.
+# You may reuse parts of this distribution only within the terms of
+# that same Artistic Licence; a copy of which may be found at the root
+# of the source tree for dist 4.0.
+#
+# Original Author: Harlan Stenn <harlan@mumps.pfcs.com>
+#
+# $Log: kitsend.SH,v $
+# Revision 3.0.1.2 1994/05/06 13:59:57 ram
+# patch23: random code cleanup to follow pat tools style
+# patch23: made configurable from dist profile
+# patch23: now understands -V and -h options
+# patch23: mails now flagged with a bulk precedence
+# patch23: added X-Mailer header and now calls mailer via open()
+#
+# Revision 3.0.1.1 1993/08/19 06:42:15 ram
+# patch1: leading config.sh searching was not aborting properly
+#
+# Revision 3.0 1993/08/18 12:04:25 ram
+# Baseline for dist 3.0 netwide release.
+#
+
+\$orgname='$orgname';
+\$mailer='$mailer';
+\$version = '$VERSION';
+\$patchlevel = '$PATCHLEVEL';
+!GROK!THIS!
+cat >>kitsend <<'!NO!SUBS!'
+
+$progname = &profile; # Read ~/.dist_profile
+require 'getopts.pl';
+&usage unless &Getopts('hV');
+
+if ($opt_V) {
+ print STDERR "$progname $version PL$patchlevel\n";
+ exit 0;
+} elsif ($opt_h) {
+ &usage;
+}
+
+$orgname = &tilda_expand($orgname);
+chop($orgname = `cat $orgname`) if $orgname =~ m|^/|;
+
+&readpackage;
+
+while ($_ = shift) {
+ if (/^(kit)?[1-9][\d,-]*$/) {
+ s/^kit//;
+ push(@argv, $_);
+ }
+ else {
+ push(@dest, $_);
+ }
+}
+$dest = join(' ',@dest);
+&usage unless $dest;
+
+@ARGV = @argv;
+
+if (-f "$package.kit10") {
+ @filelist = <$package.kit[0-9][0-9]>;
+}
+else {
+ @filelist = <$package.kit[0-9]>;
+}
+pop(@filelist) =~ /(\d+)$/ && ($maxnum = $1 + 0);
+
+if ($#ARGV < 0) {
+ $argv = "1-$maxnum";
+ @ARGV = $argv;
+}
+$argv = &rangeargs(@ARGV);
+@ARGV = split(' ', $argv);
+
+$argv =~ s/ $//;
+
+if ($#ARGV < 0) {
+ die "$progname: no kits specified.\n";
+} elsif ($#ARGV) {
+ print "$progname: sending $package $baserev kits $argv to $dest...\n";
+} else {
+ print "$progname: sending $package $baserev kit $argv to $dest...\n";
+}
+
+fork && exit;
+
+$opt = '-odq' if $mailer =~ /sendmail/;
+
+until ($#ARGV < 0) {
+ $kitnum = shift;
+
+ # Provision for broken mailers...
+ @dest = split(' ', $dest);
+ while (@smalldest = splice(@dest, 0, 50)) {
+ $to = join(', ', @smalldest); # Sensible To: for sendmail
+ $smalldest = join(' ', @smalldest);
+
+ open(MAILER, "|$mailer $opt $smalldest") ||
+ die "$progname: can't fork $mailer: $!\n";
+ print MAILER
+"To: $to
+Subject: $package $baserev kit #$kitnum
+Precedence: bulk
+X-Mailer: dist [version $version PL$patchlevel]
+Organization: $orgname
+
+[There are $maxnum kits for $package version $baserev.]
+
+";
+ $kitnum = "0$kitnum" if $kitnum < 10 && $maxnum >= 10;
+ open(FILE,"$package.kit$kitnum") ||
+ die "$progname: can't open $package.kit$kitnum: $!\n";
+ while (<FILE>) {
+ print MAILER;
+ }
+ close FILE;
+ close MAILER;
+ warn "$progname: ERROR mailing of $package.kit$kitnum to $dest\n" if $?;
+ }
+}
+
+sub usage {
+ print STDERR <<EOM;
+Usage: $progname [-hV] [kits] dest
+ -h : print this message and exit
+ -V : print version number and exit
+EOM
+ exit 1;
+}
+
+sub rangeargs {
+ local($result) = '';
+ local($min,$max,$_);
+ while ($#_ >= 0) {
+ $_ = shift(@_);
+ while (/^\s*\d/) {
+ s/^\s*(\d+)//;
+ $min = $1;
+ if (s/^,//) {
+ $max = $min;
+ }
+ elsif (s/^-(\d*)//) {
+ $max = $1;
+ if ($max == 0 && $maxnum) {
+ $max = $maxnum;
+ }
+ s/^[^,],?//;
+ }
+ else {
+ $max = $min;
+ }
+ for ($i = $min; $i <= $max; ++$i) {
+ $result .= $i . ' ';
+ }
+ }
+ }
+ $result;
+}
+
+!NO!SUBS!
+$grep -v '^;#' ../pl/package.pl >>kitsend
+$grep -v '^;#' ../pl/tilde.pl >>kitsend
+$grep -v '^;#' ../pl/profile.pl >>kitsend
+chmod +x kitsend
+$eunicefix kitsend
diff --git a/kit/kitsend.man b/kit/kitsend.man
new file mode 100644
index 0000000..ebe5459
--- /dev/null
+++ b/kit/kitsend.man
@@ -0,0 +1,42 @@
+''' $Id$
+'''
+''' Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+'''
+''' You may redistribute only under the terms of the Artistic Licence,
+''' as specified in the README file that comes with the distribution.
+''' You may reuse parts of this distribution only within the terms of
+''' that same Artistic Licence; a copy of which may be found at the root
+''' of the source tree for dist 4.0.
+'''
+''' $Log: kitsend.man,v $
+''' Revision 3.0.1.1 1994/05/06 14:00:11 ram
+''' patch23: documented new -V and -h options
+'''
+''' Revision 3.0 1993/08/18 12:04:26 ram
+''' Baseline for dist 3.0 netwide release.
+'''
+.TH KITSEND 1 ram
+.SH NAME
+kitsend \- sends distribution kits
+.SH SYNOPSIS
+.B kitsend
+[
+.B \-hV
+] [ \fIkits\fR ] \fIrecipients\fR
+.SH DESCRIPTION
+.I Kitsend
+sends distribution kits made by \fImakedist\fR to some recipients specified
+on the command line. If you do not specify any kit list, then all the
+kits are sent. Otherwise, only the specified kits will be (re)sent.
+.PP
+A kit list may include ranges, \fI1-10\fR specifying kits 1 through 10,
+and \fI5-\fR meaning kits 5 up to the last one. You may also specify kit
+numbers by separating them with commas or spaces, and even mix with ranges,
+such as: \fI1 3 5-7 9\fR.
+.PP
+The \fB\-h\fR switch will print out the usage and \fB-V\fR will print
+the version number.
+.SH AUTHOR
+Harlan Stenn <harlan@mumps.pfcs.com>
+.SH "SEE ALSO"
+makedist(1), kitpost(1).
diff --git a/kit/makeSH b/kit/makeSH
new file mode 100644
index 0000000..54e7b3e
--- /dev/null
+++ b/kit/makeSH
@@ -0,0 +1,76 @@
+#!/bin/sh
+
+# $Id: makeSH,v 3.0.1.1 1993/08/19 06:42:16 ram Exp ram $
+#
+# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+#
+# You may redistribute only under the terms of the Artistic Licence,
+# as specified in the README file that comes with the distribution.
+# You may reuse parts of this distribution only within the terms of
+# that same Artistic Licence; a copy of which may be found at the root
+# of the source tree for dist 4.0.
+#
+# Original Author: Larry Wall <lwall@netlabs.com>
+#
+# $Log: makeSH,v $
+# Revision 3.0.1.1 1993/08/19 06:42:16 ram
+# patch1: leading config.sh searching was not aborting properly
+#
+# Revision 3.0 1993/08/18 12:04:26 ram
+# Baseline for dist 3.0 netwide release.
+#
+
+for file do
+ if test -f $file.SH; then
+ mv $file.SH $file.SH.old
+ echo "makeSH: renaming $file.SH as $file.SH.old."
+ fi
+ base=`basename $file`
+
+ cat >$file.SH <<BLURFL
+case \$CONFIG in
+'')
+ if test -f config.sh; then TOP=.;
+ elif test -f ../config.sh; then TOP=..;
+ elif test -f ../../config.sh; then TOP=../..;
+ elif test -f ../../../config.sh; then TOP=../../..;
+ elif test -f ../../../../config.sh; then TOP=../../../..;
+ else
+ echo "Can't find config.sh."; exit 1
+ fi
+ . \$TOP/config.sh
+ ;;
+esac
+: This forces SH files to create target in same directory as SH file.
+: This is so that make depend always knows where to find SH derivatives.
+case "\$0" in
+*/*) cd \`expr X\$0 : 'X\(.*\)/'\` ;;
+esac
+echo "Extracting $file (with variable substitutions)"
+: This section of the file will have variable substitutions done on it.
+: Move anything that needs config subs from !NO!SUBS! section to !GROK!THIS!.
+: Protect any dollar signs and backticks that you do not want interpreted
+: by putting a backslash in front. You may delete these comments.
+\$spitshell >$base <<!GROK!THIS!
+BLURFL
+
+ case `sed q $file` in
+ */bin/sh) echo '$startsh' >>$file.SH ;;
+ esac
+
+ cat >>$file.SH <<BLURFL
+!GROK!THIS!
+
+: In the following dollars and backticks do not need the extra backslash.
+\$spitshell >>$base <<'!NO!SUBS!'
+BLURFL
+
+ sed -e '1{' -e '/#!.*\/bin\/sh$/d' -e '}' $file >>$file.SH
+
+ cat >>$file.SH <<BLURFL
+!NO!SUBS!
+chmod 755 $base
+\$eunicefix $base
+BLURFL
+ chmod 755 $file.SH
+done
diff --git a/kit/makeSH.man b/kit/makeSH.man
new file mode 100644
index 0000000..30f462a
--- /dev/null
+++ b/kit/makeSH.man
@@ -0,0 +1,46 @@
+''' $Id$
+'''
+''' Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+'''
+''' You may redistribute only under the terms of the Artistic Licence,
+''' as specified in the README file that comes with the distribution.
+''' You may reuse parts of this distribution only within the terms of
+''' that same Artistic Licence; a copy of which may be found at the root
+''' of the source tree for dist 4.0.
+'''
+''' $Log: makeSH.man,v $
+''' Revision 3.0 1993/08/18 12:04:27 ram
+''' Baseline for dist 3.0 netwide release.
+'''
+'''
+.TH MAKESH 1 LOCAL
+.SH NAME
+makeSH \- a .SH script maker
+.SH SYNOPSIS
+.B makeSH
+.I files
+.SH DESCRIPTION
+.I MakeSH
+examines one or more scripts and produces a .SH file that, when run under sh,
+will produce the original script.
+The .SH script so produced has two sections containing code destined for
+the output.
+The first section has variable substitutions performed on it (taking values
+from config.sh), while the second section does not.
+MakeSH does not know which variables you want to have substituted, so it puts
+the whole script into the second section.
+It's up to you to insert any variable substitutions in the first section
+for any values you want from config.sh.
+.PP
+You should run
+.I makeSH
+from within your top-level directory and use the relative path to the file
+as an argument, so that the "Extracting ..." line printed while running
+the produced .SH file later on will give that same path.
+.SH AUTHOR
+Larry Wall <lwall@netlabs.com>
+.SH SEE ALSO
+pat(1), metaconfig(1), makedist(1).
+.SH BUGS
+It could assume that variables from metaconfig's Glossary need to be
+initialized in the first section, but I'm too lazy to make it do that.
diff --git a/kit/makedist.SH b/kit/makedist.SH
new file mode 100755
index 0000000..f40d5c5
--- /dev/null
+++ b/kit/makedist.SH
@@ -0,0 +1,460 @@
+case $CONFIG in
+'')
+ if test -f config.sh; then TOP=.;
+ elif test -f ../config.sh; then TOP=..;
+ elif test -f ../../config.sh; then TOP=../..;
+ elif test -f ../../../config.sh; then TOP=../../..;
+ elif test -f ../../../../config.sh; then TOP=../../../..;
+ else
+ echo "Can't find config.sh."; exit 1
+ fi
+ . $TOP/config.sh
+ ;;
+esac
+echo "Extracting kit/makedist (with variable substitutions)"
+cat >makedist <<!GROK!THIS!
+$startperl
+ eval 'exec perl -S \$0 \${1+"\$@"}'
+ if \$running_under_some_shell;
+
+# $Id$
+#
+# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+#
+# You may redistribute only under the terms of the Artistic Licence,
+# as specified in the README file that comes with the distribution.
+# You may reuse parts of this distribution only within the terms of
+# that same Artistic Licence; a copy of which may be found at the root
+# of the source tree for dist 4.0.
+#
+# $Log: makedist.SH,v $
+# Revision 3.0.1.2 1994/01/24 13:58:20 ram
+# patch16: modified call to manifake to trap exceptions manually
+# patch16: removed final sed post-processing to allow 'make depend' target
+# patch16: added ~/.dist_profile awareness
+#
+# Revision 3.0.1.1 1993/08/19 06:42:17 ram
+# patch1: leading config.sh searching was not aborting properly
+#
+# Revision 3.0 1993/08/18 12:04:28 ram
+# Baseline for dist 3.0 netwide release.
+#
+
+\$version = '$VERSION';
+\$patchlevel = '$PATCHLEVEL';
+!GROK!THIS!
+$spitshell >>makedist <<'!NO!SUBS!'
+
+&profile; # Read ~/.dist_profile
+require 'getopts.pl';
+&usage unless &Getopts('c:f:dhvqs:V');
+
+$ENV{'DIST'} = '/dev/null'; # Disable ~/.dist_profile
+
+if ($opt_V) {
+ print STDERR "makedist $version PL$patchlevel\n";
+ exit 0;
+} elsif ($opt_h) {
+ &usage;
+}
+
+$MAXKITSIZE = 50000 unless $MAXKITSIZE = $opt_s;
+$KITOVERHEAD = 1800;
+$FILEOVERHEAD = 90;
+$CHOPSIZE = $MAXKITSIZE - $KITOVERHEAD - $FILEOVERHEAD;
+
+$NEWMANI = 'MANIFEST.new' unless $NEWMANI = $opt_f;
+$MANI = 'MANIFEST' unless $opt_f;
+$PACKLIST = 'PACKLIST';
+$PACKNOTES = 'PACKNOTES';
+
+$tmpdir = "/tmp/MKst$$"; # Where to copy distribution
+$tmpdir = '.' if $opt_q; # Quick mode: no need to copy distribution
+
+&set_sig('aborted'); # Make sure we clean up in case of emergency
+
+&readpackage;
+&get_patchlevel;
+
+eval '&manifake'; # Want to trap possible die and redirect to fatal
+if ($@ ne '') {
+ chop($@);
+ &fatal($@);
+}
+
+if ($opt_c) { # Copy distribution only, no shell archive
+ &distcopy;
+ exit 0;
+}
+
+&distfake;
+&copyright'init($copyright) if -f $copyright;
+
+unlink <$package.kit? $package.kit??>;
+chop($curdir = `pwd`);
+chdir $tmpdir || die "Can't chdir to $tmpdir.\n";
+
+&maniread;
+&kitlists;
+&manimake;
+&kitbuild;
+&cleanup;
+exit 0;
+
+# Physically build the kits
+sub kitbuild {
+ $numkits = $#list;
+ if ($numkits > 9) {
+ $sp = '%02d';
+ } else {
+ $sp = '%d';
+ }
+
+ for ($kitnum = 1; $kitnum <= $numkits; $kitnum++) {
+ $list = $list[$kitnum];
+ $kit = sprintf("$package.kit" . $sp,$kitnum);
+ print "*** Making $kit ***\n";
+ open(KIT,">$curdir/$kit") || do fatal("Can't create $curdir/$kit: $!");
+
+ &kitleader;
+
+ @files = split(' ',$list);
+ reset 'X';
+ for $file (@files) {
+ $_ = $file;
+ while (s|^(.*)/.*$|$1|) {
+ push(@Xdirs,$_) unless $Xseen{$_}++;
+ }
+ }
+ print KIT "mkdir ",join(' ', sort @Xdirs)," 2>/dev/null\n";
+
+ foreach $file (@files) {
+ print "\t",$file,"\n" if $opt_v;
+ print KIT "echo Extracting $file\n";
+ print KIT "sed >$file <<'!STUFFY!FUNK!' -e 's/X//'\n";
+ open(FILE, $file);
+ &copyright'reset; # Reset copyright for new file
+ while (<FILE>) {
+ # Use Lock[e]r as a pattern in case it is applied on ourselves
+ s|Lock[e]r:.*\$|\$|; # Remove locker mark
+ print KIT &copyright'filter($_, 'X');
+ }
+ close FILE;
+ print KIT "!STUFFY!FUNK!\n";
+ -x "$file" && (print KIT "chmod +x $file\n");
+ }
+ &kittrailer;
+ chmod 0755, $kit;
+ }
+}
+
+sub kitlists {
+ for $filename (keys %comment) {
+ next if $filename =~ m|/$|; # Skip directories
+ next if -d $filename; # Better safe than sorry
+ ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,
+ $blksize,$blocks) = stat($filename);
+
+ # Make sure file is not larger than the CHOPSIZE limit. If it is,
+ # a split is attempted.
+ if ($size > $CHOPSIZE) {
+ print "Splitting $filename...\n" if $opt_v;
+ $file_comment = $comment{$filename};
+ open(FILE, $filename) || die "Can't open $filename: $!\n";
+ $piece = 'AA';
+ ($dir, $name) = ('.', $filename)
+ unless ($dir, $name) = ($filename =~ m|(.*)/(.*)|);
+ $chopped = $dir . '/' . substr($name, 0, 11);
+ $chopped =~ s|^\./||;
+ &fatal("There is already a split file named $chopped")
+ if defined $Chopped{$chopped};
+ $Chopped{$chopped} = $filename; # Association split <-> real file
+ $size = 0;
+ open(CURPIECE, ">$chopped:$piece") ||
+ &fatal("Can't create $chopped:$piece: $!");
+ while (<FILE>) {
+ if ($size + length($_) > $CHOPSIZE) {
+ close CURPIECE;
+ $size{"$chopped:$piece"} = $size;
+ $comment{"$chopped:$piece"} = "$file_comment (part $piece)";
+ push(@files, "$chopped:$piece");
+ print "\t$chopped:$piece ($size bytes)\n" if $opt_v;
+ $size = 0;
+ $piece++; # AA -> AB, etc...
+ open(CURPIECE, ">$chopped:$piece") ||
+ &fatal("Can't create $chopped:$piece: $!");
+ }
+ print CURPIECE $_;
+ $size += length($_);
+ }
+ close FILE;
+ close CURPIECE;
+ $size{"$chopped:$piece"} = $size;
+ $comment{"$chopped:$piece"} = "$file_comment (part $piece)";
+ push(@files, "$chopped:$piece");
+ print "\t$chopped:$piece ($size bytes)\n" if $opt_v;
+ delete $comment{$filename}; # File split, not in PACKLIST
+ } else {
+ $size += 1000000 if $filename =~ /README/;
+ $size{$filename} = $size;
+ push(@files, "$filename");
+ }
+ }
+
+ # Build a file PACKNOTES to reconstruct split files
+ if (defined %Chopped) {
+ open(PACKNOTES, ">$PACKNOTES") || &fatal("Can't create PACKNOTES: $!");
+ foreach (keys %Chopped) {
+ print PACKNOTES <<EOC;
+echo 'Building $Chopped{$_}...'
+cat $_:[A-Z][A-Z] > $Chopped{$_}
+rm -f $_:[A-Z][A-Z]
+EOC
+ }
+ close PACKNOTES;
+ push(@files, $PACKNOTES);
+ $comment{$PACKNOTES} = 'Script to reconstruct split files';
+ ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,
+ $blksize,$blocks) = stat($PACKNOTES);
+ $size{$PACKNOTES} = $size;
+ }
+
+ # Currently, file PACKLIST does not exist, so its size is unknown and
+ # it cannot be correctly put in one archive. Therefore, we take the
+ # size of MANIFEST.new, which will give us a good estimation.
+ push(@files, 'PACKLIST');
+
+ ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,
+ $blksize,$blocks) = stat($NEWMANI);
+ $size{$PACKLIST} = $size;
+
+ sub revnum { $size{$a} < $size{$b} ? 1 : $size{$a} > $size{$b} ? -1 : 0; }
+ @files = sort revnum @files;
+
+ for (@files) {
+ $size = $size{$_};
+ $size -= 1000000 if /README/;
+ $i=1;
+ while (($newtot = int($tot[$i] + $size + $size/40 + $FILEOVERHEAD)) >
+ $MAXKITSIZE-$KITOVERHEAD && $tot[$i]) {
+ $i++;
+ }
+ $tot[$i] = $newtot;
+ print "Adding $_ to kit $i giving $newtot bytes\n" if $opt_d;
+ $kit{$_} = $i;
+ $list[$i] .= " $_";
+ }
+}
+
+# Read manifest file and initialize the %comment array.
+sub maniread {
+ do fatal("You don't have a $NEWMANI file. Run manifake")
+ unless -f "$NEWMANI";
+ open(NEWMANI,$NEWMANI) || do fatal("Can't read $NEWMANI: $!");
+ while (<NEWMANI>) {
+ ($key,$val) = split(' ',$_,1) unless ($key,$val) = /^(\S+)\s+(.*)/;
+ $comment{$key} = $val;
+ }
+ close NEWMANI;
+}
+
+# MANIFEST and MANIFEST.new must say the same thing. Create the
+# PACKLIST file (thus avoiding kit numbers in MANIFEST, which causes big
+# patches when only re-ordering occurred). Note that PACKLIST should
+# not appear in MANIFEST.new (the user may remove it).
+sub manimake {
+ # Add built packlist
+ $comment{$PACKLIST} = 'Which files came with which kits';
+
+ open(PACKLIST, ">$PACKLIST") || do fatal("Can't create $PACKLIST: $!");
+ print PACKLIST
+"After all the $package kits are run you should have the following files:
+
+Filename Kit Description
+-------- --- -----------
+";
+ for (sort keys(%comment)) {
+ printf PACKLIST "%-27s %2s %.47s\n", $_, $kit{$_}, $comment{$_};
+ }
+ close PACKLIST;
+}
+
+sub kitleader {
+ local($plevel);
+ $plevel = " at patchlevel $patch_level" if $patch_level ne '';
+ print KIT <<EOH;
+#! /bin/sh
+#
+# This is $package version $baserev$plevel.
+# Make a new directory for the $package sources, cd to it, and run kits 1 up
+# to $numkits through sh. When all $numkits kits have been run, read README.
+#
+echo " "
+cat <<EOM
+This is $package $baserev$plevel, kit $kitnum (of $numkits):
+If this shell archive is complete, the line "End of kit $kitnum (of $numkits)"
+will echo at the end.
+EOM
+export PATH || (echo "Please use sh to unpack this archive." ; kill \$\$)
+EOH
+}
+
+sub kittrailer {
+ $rangelist = '';
+ for ($i = 1; $i <= $numkits; $i++) {
+ $rangelist .= ' ' . $i;
+ }
+ print KIT <<EOM;
+echo \"End of kit $kitnum (of $numkits)\"
+echo \" \"
+cat /dev/null >kit${kitnum}isdone
+run=''
+config=''
+for iskit in$rangelist; do
+ if test -f kit\${iskit}isdone; then
+ run=\"\$run \$iskit\"
+ else
+ todo=\"\$todo \$iskit\"
+ fi
+done
+case \$todo in
+ '')
+ echo \"You have run all your kits.\"
+EOM
+ if (defined %Chopped) { # Some splitting occurred
+ print KIT <<EOM;
+ if test -f $PACKNOTES; then
+ sh $PACKNOTES
+ else
+ echo \"You have to rebuild split files by hand (see $PACKLIST).\"
+ fi
+EOM
+ }
+ if (-f "README" && -f "Configure") {
+ print KIT
+" echo \"Please read README and then type Configure.\"
+ chmod 755 Configure\n";
+ } elsif (-f "README") {
+ print KIT
+" echo \"Please read README first.\"\n";
+ } elsif (-f "Configure") {
+ print KIT
+" echo \"Please run Configure first.\"
+ chmod 755 Configure\n";
+ }
+ print KIT <<EOM;
+ rm -f kit*isdone
+ ;;
+ *) echo \"You have run\$run.\"
+ echo \"You still need to run\$todo.\"
+ ;;
+esac
+: Someone might mail this, so exit before signature...
+exit 0
+EOM
+}
+
+sub get_patchlevel {
+ $patch_level = '';
+ if (-f 'patchlevel.h') {
+ open(PL, 'patchlevel.h');
+ while (<PL>) {
+ /^#define\s+PATCHLEVEL\s+(\w+)/ && ($patch_level = $1);
+ }
+ close PL;
+ }
+}
+
+sub distfake {
+ return if $opt_q;
+ local($sw);
+ $sw = 's' unless $opt_v;
+ mkdir($tmpdir, 0700) || die "Can't create directory $tmpdir.\n";
+ print "Building a copy of distribution in $tmpdir...\n" if $opt_v;
+ system 'perl', '-S', 'patcol', "-a$sw", '-f', $NEWMANI, '-d', $tmpdir;
+ system 'cp', $NEWMANI, "$tmpdir/$NEWMANI"
+ unless -f "$tmpdir/$NEWMANI" && !$opt_f;
+}
+
+sub distcopy {
+ local($sw); # Switch to force patcol to copy checked out files
+ &makedir($opt_c);
+ print "Building a copy of distribution in $opt_c...\n" if $opt_v;
+ $sw = 'c' if $opt_q;
+ $sw .= 's' unless $opt_v;
+ system 'perl', '-S', 'patcol', "-aRC$sw", '-f', $NEWMANI, '-d', $opt_c;
+}
+
+sub distrm {
+ return if $opt_q;
+ print "Removing distribution in $tmpdir...\n" if $opt_v;
+ chdir "/"; # Do not stay in removed directory...
+ system '/bin/rm', '-rf', "$tmpdir";
+}
+
+sub splitrm {
+ foreach $base (keys %Chopped) {
+ print "Removing split files for $base:\n" if $opt_v;
+ $piece = 'AA';
+ while (-f "$base:$piece") {
+ print "\t$base:$piece\n" if $opt_v;
+ unlink "$base:$piece";
+ $piece++; # AA -> AB, etc...
+ }
+ }
+}
+
+sub cleanup {
+ &distrm if -d $tmpdir;
+ if ($opt_q) {
+ &splitrm; # Remove in-place split files
+ unlink $PACKLIST, $PACKNOTES;
+ }
+}
+
+sub fatal {
+ local($reason) = shift(@_);
+ &cleanup;
+ die "$reason\n";
+}
+
+sub set_sig {
+ local($handler) = @_;
+ $SIG{'HUP'} = $handler;
+ $SIG{'INT'} = $handler;
+ $SIG{'QUIT'} = $handler;
+ $SIG{'TERM'} = $handler;
+}
+
+sub aborted {
+ &set_sig('IGNORE');
+ $opt_v = 1; # Force verbose message in distrm
+ &cleanup;
+ print "Aborted.\n";
+ exit 1;
+}
+
+sub usage {
+ print STDERR <<EOM;
+Usage: makedist [-dhqvV] [-c dir] [-s size] [-f manifest]
+ -c : copy files in dir, do not build any shell archive.
+ -d : debug mode.
+ -f : use this file as manifest.
+ -h : print this help message and exits.
+ -q : quick mode: use checked-out files.
+ -s : set maximum pack size.
+ -v : verbose mode.
+ -V : print version number and exits.
+EOM
+ exit 1;
+}
+
+!NO!SUBS!
+$grep -v '^;#' ../pl/package.pl >>makedist
+$grep -v '^;#' ../pl/manifake.pl >>makedist
+$grep -v '^;#' ../pl/copyright.pl >>makedist
+$grep -v '^;#' ../pl/makedir.pl >>makedist
+$grep -v '^;#' ../pl/tilde.pl >>makedist
+$grep -v '^;#' ../pl/profile.pl >>makedist
+chmod +x makedist
+$eunicefix makedist
diff --git a/kit/makedist.man b/kit/makedist.man
new file mode 100644
index 0000000..5c6b09d
--- /dev/null
+++ b/kit/makedist.man
@@ -0,0 +1,147 @@
+.rn '' }`
+''' $Id$
+'''
+''' Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+'''
+''' You may redistribute only under the terms of the Artistic Licence,
+''' as specified in the README file that comes with the distribution.
+''' You may reuse parts of this distribution only within the terms of
+''' that same Artistic Licence; a copy of which may be found at the root
+''' of the source tree for dist 4.0.
+'''
+''' $Log: makedist.man,v $
+''' Revision 3.0.1.2 1995/05/12 11:58:16 ram
+''' patch54: updated my e-mail address
+'''
+''' Revision 3.0.1.1 1994/05/06 14:00:50 ram
+''' patch23: now mentions kitpost and kitsend
+'''
+''' Revision 3.0 1993/08/18 12:04:31 ram
+''' Baseline for dist 3.0 netwide release.
+'''
+'''
+.de Sh
+.br
+.ne 5
+.PP
+\fB\\$1\fR
+.PP
+..
+.de Sp
+.if t .sp .5v
+.if n .sp
+..
+'''
+''' Set up \*(-- to give an unbreakable dash;
+''' string Tr holds user defined translation string.
+''' Bell System Logo is used as a dummy character.
+'''
+.ie n \{\
+.tr \(*W-\*(Tr
+.ds -- \(*W-
+.if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+.if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
+.ds L" ""
+.ds R" ""
+.ds L' '
+.ds R' '
+'br\}
+.el\{\
+.ds -- \(em\|
+.tr \*(Tr
+.ds L" ``
+.ds R" ''
+.ds L' `
+.ds R' '
+'br\}
+.TH MAKEDIST 1 LOCAL
+.SH NAME
+makedist \- a distribution kit maker
+.SH SYNOPSIS
+.B makedist
+[ \fB\-dhqvV\fR ] [ \fB\-c\fI dir\fR ]
+[ \fB\-s\fI size\fR ] [\fB\-f \fImanifest\fR ]
+.SH DESCRIPTION
+.I Makedist
+is a rather simpleminded shar program that knows how to pack files
+into multiple kits of approximately 50000 bytes each.
+The shar scripts produced assume very little about the target machine;
+there is correspondingly little error checking done compared to other
+shar programs. Alternatively, with the \fB\-c\fR option, you can
+create a directory containing the whole source tree, and then pack it
+up using your own shell archiver.
+.PP
+If you are using the copyright expansion feature (as determined by
+\fIpackinit\fR), then you have to pack your distribution using this
+program to ensure the copyright is correctly set.
+.PP
+In order to run \fImakedist\fR you have to do two things:
+.IP 1) 4
+Create a .package file in the package's top-level directory by running
+\fIpackinit\fR.
+This program will ask you about your package and remember what you tell
+it so that all the \fIdist\fR programs can be smart.
+.IP 2) 4
+Create a MANIFEST.new file in your top-level directory that lists all the
+files in your package.
+The filename should be the first field on each line.
+After some whitespace you can add a comment describing your file (briefly).
+.PP
+After running \fImakedist\fR,
+you will have a set of kits in your top-level directory.
+If your package name is "foo", they will be named foo.kit1, foo.kit2, etc.
+The file created PACKLIST file is automatically added to the distribution and
+tells which files come with which kits.
+If you used the \fB\-c\fR option, you will end-up with a single directory
+instead, containing the whole distribution, ready to be sent to the end-user.
+.PP
+If a file is too large to be packed as-is in one archive, it will be
+automatically split in smaller parts. Only the first 11 characters of the file
+will be kept though, and \fImakedist\fR will abort if two distinct files are
+to be split and have the same 11 first characters in their names. The split
+files will automatically be reconstructed at the end of the archive extraction
+by runnning a script generated in PACKNOTES.
+.PP
+You may then mail your kits via \fIkitsend\fR or post them with \fIkitpost\fR.
+.SH OPTIONS
+The following options are handled by \fImakedist\fR:
+.TP 10
+.B \-c \fIdir\fR
+Tell \fImakedist\fR that the distribution should be copied (mirrored) in
+the specified directory, instead of producing shell archives. Compatible with
+the \fB\-q\fR option.
+.TP
+.B \-d
+Turn on debug mode. Probably not useful.
+.TP
+\fB-f\fI file\fR
+Use \fIfile\fR as manifest. By default, MANIFEST.new is used.
+.TP
+.B \-h
+Print help message and exit.
+.TP
+.B \-q
+Quick production of the kits: the checked-out version of the files is used,
+instead of using the RCS file to actually get the latest checked-in version.
+This will save some considerable time, but you have to be sure the checked-out
+version is up-to-date or you might end up with an inconsistent package.
+.TP
+\fB\-s\fI size\fR
+Set maximum kit size to \fIsize\fR bytes.
+.TP
+.B \-v
+Verbose mode: trace kit building process or tree mirroring.
+.TP
+.B \-V
+Print version number and exit.
+.SH AUTHORS
+Larry Wall <lwall@netlabs.com> (version 2.0)
+.br
+Raphael Manfredi <Raphael.Manfredi@pobox.com>
+.SH FILES
+Creates ./$package.kit* unless \fB\-c\fR option is used.
+.br
+PACKLIST and PACKNOTES are also temporarily created.
+.SH "SEE ALSO"
+kitsend(1), kitpost(1), metaconfig(1), patcol(1)
+.rn }` ''
diff --git a/kit/manifake.SH b/kit/manifake.SH
new file mode 100755
index 0000000..cd31004
--- /dev/null
+++ b/kit/manifake.SH
@@ -0,0 +1,51 @@
+case $CONFIG in
+'')
+ if test -f config.sh; then TOP=.;
+ elif test -f ../config.sh; then TOP=..;
+ elif test -f ../../config.sh; then TOP=../..;
+ elif test -f ../../../config.sh; then TOP=../../..;
+ elif test -f ../../../../config.sh; then TOP=../../../..;
+ else
+ echo "Can't find config.sh."; exit 1
+ fi
+ . $TOP/config.sh
+ ;;
+esac
+case "$0" in
+*/*) cd `expr X$0 : 'X\(.*\)/'` ;;
+esac
+echo "Extracting kit/manifake (with variable substitutions)"
+$spitshell >manifake <<!GROK!THIS!
+$startperl
+ eval 'exec perl -S \$0 \${1+"\$@"}'
+ if \$running_under_some_shell;
+
+# $Id$
+#
+# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+#
+# You may redistribute only under the terms of the Artistic Licence,
+# as specified in the README file that comes with the distribution.
+# You may reuse parts of this distribution only within the terms of
+# that same Artistic Licence; a copy of which may be found at the root
+# of the source tree for dist 4.0.
+#
+# $Log: manifake.SH,v $
+# Revision 3.0.1.1 1993/08/19 06:42:18 ram
+# patch1: leading config.sh searching was not aborting properly
+#
+# Revision 3.0 1993/08/18 12:04:32 ram
+# Baseline for dist 3.0 netwide release.
+#
+
+!GROK!THIS!
+$spitshell >>manifake <<'!NO!SUBS!'
+$NEWMANI = 'MANIFEST.new';
+$MANI = 'MANIFEST';
+
+&manifake;
+
+!NO!SUBS!
+chmod 755 manifake
+$grep -v '^;#' ../pl/manifake.pl >> manifake
+$eunicefix manifake
diff --git a/kit/manifake.man b/kit/manifake.man
new file mode 100644
index 0000000..8c76ba7
--- /dev/null
+++ b/kit/manifake.man
@@ -0,0 +1,46 @@
+''' $Id$
+'''
+''' Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+'''
+''' You may redistribute only under the terms of the Artistic Licence,
+''' as specified in the README file that comes with the distribution.
+''' You may reuse parts of this distribution only within the terms of
+''' that same Artistic Licence; a copy of which may be found at the root
+''' of the source tree for dist 4.0.
+'''
+''' $Log: manifake.man,v $
+''' Revision 3.0.1.1 1995/05/12 11:58:21 ram
+''' patch54: updated my e-mail address
+'''
+''' Revision 3.0 1993/08/18 12:04:33 ram
+''' Baseline for dist 3.0 netwide release.
+'''
+.TH MANIFAKE 1 ram
+.SH NAME
+manifake \- creates a MANIFEST.new out of a MANIFEST file
+.SH SYNOPSIS
+.B manifake
+.SH DESCRIPTION
+.I Manifake
+is a real simpleminded program that takes a MANIFEST file, such as one
+produced by a shar program, and creates a MANIFEST.new file ready to be
+used by all the dist programs. What it does is that all archive numbers
+are removed and the optional leading comments up to a dashed-line are
+thrown away.
+.PP
+.I Manifake
+will typically be used when converting an existing package
+to use \fImetaconfig\fR or any other dist utility.
+.SH AUTHOR
+Raphael Manfredi <Raphael.Manfredi@pobox.com>
+.SH FILES
+.PD 0
+.TP 20
+MANIFEST
+Original manifest produced by some shar program
+.TP
+MANIFEST.new
+Faked manifest file, suitable for use by any dist programs.
+.PD
+.SH "SEE ALSO"
+makedist(1), metaconfig(1), pat(1).
diff --git a/lib/C/Jmakefile b/lib/C/Jmakefile
new file mode 100644
index 0000000..5241541
--- /dev/null
+++ b/lib/C/Jmakefile
@@ -0,0 +1,20 @@
+/*
+ * Jmakefile for C subdirectory.
+ */
+
+;# $Id$
+;#
+;# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+;#
+;# You may redistribute only under the terms of the Artistic Licence,
+;# as specified in the README file that comes with the distribution.
+;# You may reuse parts of this distribution only within the terms of
+;# that same Artistic Licence; a copy of which may be found at the root
+;# of the source tree for dist 4.0.
+;#
+;# $Log: Jmakefile,v $
+;# Revision 3.0.1.1 1994/01/24 13:43:38 ram
+;# patch16: created
+;#
+
+SetSubdirs(fake)
diff --git a/lib/C/Makefile.SH b/lib/C/Makefile.SH
new file mode 100755
index 0000000..f72cdfc
--- /dev/null
+++ b/lib/C/Makefile.SH
@@ -0,0 +1,211 @@
+: Makefile.SH generated from Jmake.tmpl and Jmakefile [jmake 3.5 PL0]
+: $X-Id: Jmake.tmpl 8 2006-08-25 22:27:18Z rmanfredi $
+
+case $CONFIG in
+'')
+ if test -f config.sh; then TOP=.;
+ elif test -f ../config.sh; then TOP=..;
+ elif test -f ../../config.sh; then TOP=../..;
+ elif test -f ../../../config.sh; then TOP=../../..;
+ elif test -f ../../../../config.sh; then TOP=../../../..;
+ else
+ echo "Can't find config.sh."; exit 1
+ fi
+ . $TOP/config.sh
+ ;;
+esac
+case "$0" in
+*/*) cd `expr X$0 : 'X\(.*\)/'` ;;
+esac
+CURRENT=lib/C
+DIR=`echo $CURRENT/ | sed -e 's/\.\///g'`
+echo "Extracting ${DIR}Makefile (with variable substitutions)"
+
+DATE=`date`
+
+$spitshell >Makefile <<!GROK!THIS!
+########################################################################
+# Makefile generated from Makefile.SH on $DATE
+
+SHELL = /bin/sh
+JMAKE = jmake
+TOP = ../..
+CURRENT = $CURRENT
+DIR = $DIR
+
+########################################################################
+# Parameters set by Configure -- edit config.sh if changes are needed
+
+CTAGS = ctags
+JCPPFLAGS = $cppflags
+MV = $mv
+RM = $rm -f
+
+########################################################################
+# Automatically generated parameters -- do not edit
+
+SUBDIRS = fake
+
+!GROK!THIS!
+$spitshell >>Makefile <<'!NO!SUBS!'
+########################################################################
+# Jmake rules for building libraries, programs, scripts, and data files
+# $X-Id: Jmake.rules 8 2006-08-25 22:27:18Z rmanfredi $
+
+########################################################################
+# Start of Jmakefile
+
+# $X-Id: Jmakefile 3 2006-08-25 21:39:07Z rmanfredi $
+#
+# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+#
+# You may redistribute only under the terms of the Artistic Licence,
+# as specified in the README file that comes with the distribution.
+# You may reuse parts of this distribution only within the terms of
+# that same Artistic Licence; a copy of which may be found at the root
+# of the source tree for dist 4.0.
+#
+# $X-Log: Jmakefile,v $
+# Revision 3.0.1.1 1994/01/24 13:43:38 ram
+# patch16: created
+#
+
+########################################################################
+# Common rules for all Makefiles -- do not edit
+
+all::
+
+clean: sub_clean local_clean
+realclean: sub_realclean local_realclean
+clobber: sub_clobber local_clobber
+
+local_clean::
+ if test -f core; then $(RM) core; fi
+ $(RM) *~ *.o
+
+local_realclean:: local_clean
+
+local_clobber:: local_realclean
+ $(RM) Makefile config.sh
+
+install:: local_install sub_install
+install.man:: maybe_install.man sub_install.man
+deinstall:: sub_deinstall local_deinstall
+deinstall.man:: sub_deinstall.man maybe_deinstall.man
+
+install.man-no:
+deinstall.man-no:
+
+maybe_install.man: install.man-no
+maybe_deinstall.man: deinstall.man-no
+
+Makefile.SH: Jmakefile
+ -@if test -f $(TOP)/.package; then \
+ if test -f Makefile.SH; then \
+ echo " $(RM) Makefile.SH~; $(MV) Makefile.SH Makefile.SH~"; \
+ $(RM) Makefile.SH~; $(MV) Makefile.SH Makefile.SH~; \
+ fi; \
+ echo " $(JMAKE) -DTOPDIR=$(TOP) -DCURDIR=$(CURRENT)" ; \
+ $(JMAKE) -DTOPDIR=$(TOP) -DCURDIR=$(CURRENT) ; \
+ else touch $@; fi
+
+Makefile: Makefile.SH
+ /bin/sh Makefile.SH
+
+tags::
+ $(CTAGS) -w *.[ch]
+ $(CTAGS) -xw *.[ch] > tags
+
+local_clobber::
+ $(RM) tags
+
+########################################################################
+# Rules for building in sub-directories -- do not edit
+
+subdirs:
+ @case '${MFLAGS}' in *[ik]*) set +e;; esac; \
+ for i in $(SUBDIRS) ;\
+ do \
+ (cd $$i ; echo $(VERB) "in $(DIR)$$i..."; \
+ $(MAKE) $(MFLAGS) $(FLAGS) $(TARGET)) || exit 1; \
+ done
+
+sub_install::
+ @$(MAKE) subdirs TARGET=install VERB="Installing" FLAGS=
+
+sub_deinstall::
+ @$(MAKE) subdirs TARGET=deinstall VERB="Deinstalling" FLAGS=
+ @echo "Back to $(CURRENT) for "deinstall...
+
+sub_install.man::
+ @$(MAKE) subdirs TARGET=install.man VERB="Installing man pages" FLAGS=
+
+sub_deinstall.man::
+ @$(MAKE) subdirs TARGET=deinstall.man VERB="Deinstalling man pages" FLAGS=
+ @echo "Back to $(CURRENT) for "deinstall.man...
+
+sub_clean::
+ @$(MAKE) subdirs TARGET=clean VERB="Cleaning" FLAGS=
+ @echo "Back to $(CURRENT) for "clean...
+
+sub_realclean::
+ @$(MAKE) subdirs TARGET=realclean VERB="Real cleaning" FLAGS=
+ @echo "Back to $(CURRENT) for "realclean...
+
+sub_clobber::
+ @$(MAKE) subdirs TARGET=clobber VERB="Clobbering" FLAGS=
+ @echo "Back to $(CURRENT) for "clobber...
+
+tag::
+ @case '${MFLAGS}' in *[ik]*) set +e;; esac; \
+ for i in $(SUBDIRS) ;\
+ do \
+ (cd $$i ; echo "Tagging" "in $(DIR)$$i..."; \
+ $(MAKE) $(MFLAGS) tag) || exit 1; \
+ done
+
+Makefiles::
+ @case '${MFLAGS}' in *[ik]*) set +e;; esac; \
+ for i in $(SUBDIRS);\
+ do \
+ echo "Making "Makefiles" in $(DIR)$$i..."; \
+ (cd $$i || exit 1; \
+ if test ! -f Makefile; then /bin/sh Makefile.SH; fi; \
+ $(MAKE) $(MFLAGS) Makefiles) || exit 1;\
+ done
+
+Makefiles.SH:: Makefile.SH
+ @case '${MFLAGS}' in *[ik]*) set +e;; esac; \
+ for i in $(SUBDIRS);\
+ do \
+ case "$(DIR)$$i/" in \
+ */*/*/*/) newtop=../../../..;; \
+ */*/*/) newtop=../../..;; \
+ */*/) newtop=../..;; \
+ */) newtop=..;; \
+ esac; \
+ case "$(TOP)" in \
+ /*) newtop="$(TOP)" ;; \
+ esac; \
+ echo "Making Makefiles.SH in $(DIR)$$i..."; \
+ (cd $$i || exit 1; \
+ if test -f Jmakefile; then \
+ $(MAKE) $(MFLAGS) -f ../Makefile \
+ Makefile TOP=$$newtop CURRENT=$(DIR)$$i && \
+ $(MAKE) $(MFLAGS) Makefiles.SH; \
+ fi; \
+ ) || exit 1; \
+ done
+
+all::
+ @$(MAKE) subdirs TARGET=all VERB="Making all" FLAGS=
+
+local_install::
+local_deinstall::
+local_install.man::
+local_deinstall.man::
+
+!NO!SUBS!
+chmod 644 Makefile
+$eunicefix Makefile
+
diff --git a/lib/C/fake/Jmakefile b/lib/C/fake/Jmakefile
new file mode 100644
index 0000000..3db766b
--- /dev/null
+++ b/lib/C/fake/Jmakefile
@@ -0,0 +1,27 @@
+/*
+ * Jmakefile for C/fake subdirectory.
+ */
+
+;# $Id$
+;#
+;# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+;#
+;# You may redistribute only under the terms of the Artistic Licence,
+;# as specified in the README file that comes with the distribution.
+;# You may reuse parts of this distribution only within the terms of
+;# that same Artistic Licence; a copy of which may be found at the root
+;# of the source tree for dist 4.0.
+;#
+;# $Log: Jmakefile,v $
+;# Revision 3.0.1.1 1994/01/24 13:43:44 ram
+;# patch16: created
+;#
+
+FILES = dup2.C getopt.C rename.C scandir.C setsid.C
+
+INSTALLFLAGS = -m 444
+
+all:: /* So that default make does not default to install */
+
+MakeDirectories(install,$(PRIVLIB)/lib/C/fake)
+InstallMultiple($(FILES),$(PRIVLIB)/lib/C/fake)
diff --git a/lib/C/fake/Makefile.SH b/lib/C/fake/Makefile.SH
new file mode 100755
index 0000000..ad637ae
--- /dev/null
+++ b/lib/C/fake/Makefile.SH
@@ -0,0 +1,172 @@
+: Makefile.SH generated from Jmake.tmpl and Jmakefile [jmake 3.5 PL0]
+: $X-Id: Jmake.tmpl 8 2006-08-25 22:27:18Z rmanfredi $
+
+case $CONFIG in
+'')
+ if test -f config.sh; then TOP=.;
+ elif test -f ../config.sh; then TOP=..;
+ elif test -f ../../config.sh; then TOP=../..;
+ elif test -f ../../../config.sh; then TOP=../../..;
+ elif test -f ../../../../config.sh; then TOP=../../../..;
+ else
+ echo "Can't find config.sh."; exit 1
+ fi
+ . $TOP/config.sh
+ ;;
+esac
+case "$0" in
+*/*) cd `expr X$0 : 'X\(.*\)/'` ;;
+esac
+CURRENT=lib/C/fake
+DIR=`echo $CURRENT/ | sed -e 's/\.\///g'`
+echo "Extracting ${DIR}Makefile (with variable substitutions)"
+
+INSTALL=`echo $install | sed -e 's,\./i,\$(TOP)/i,'`
+INSTALLDIR=`echo $installdir | sed -e 's,\./i,\$(TOP)/i,'`
+DATE=`date`
+
+$spitshell >Makefile <<!GROK!THIS!
+########################################################################
+# Makefile generated from Makefile.SH on $DATE
+
+SHELL = /bin/sh
+JMAKE = jmake
+TOP = ../../..
+CURRENT = $CURRENT
+DIR = $DIR
+INSTALL = $INSTALL
+INSTALLDIR = $INSTALLDIR
+
+########################################################################
+# Parameters set by Configure -- edit config.sh if changes are needed
+
+CTAGS = ctags
+JCPPFLAGS = $cppflags
+MV = $mv
+PRIVLIB = $installprivlib
+RM = $rm -f
+
+!GROK!THIS!
+$spitshell >>Makefile <<'!NO!SUBS!'
+########################################################################
+# Jmake rules for building libraries, programs, scripts, and data files
+# $X-Id: Jmake.rules 8 2006-08-25 22:27:18Z rmanfredi $
+
+########################################################################
+# Start of Jmakefile
+
+# $X-Id: Jmakefile 9 2006-08-25 22:31:50Z rmanfredi $
+#
+# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+#
+# You may redistribute only under the terms of the Artistic Licence,
+# as specified in the README file that comes with the distribution.
+# You may reuse parts of this distribution only within the terms of
+# that same Artistic Licence; a copy of which may be found at the root
+# of the source tree for dist 4.0.
+#
+# $X-Log: Jmakefile,v $
+# Revision 3.0.1.1 1994/01/24 13:43:44 ram
+# patch16: created
+#
+
+FILES = dup2.C getopt.C rename.C scandir.C setsid.C
+
+INSTALLFLAGS = -m 444
+
+all::
+
+install::
+ @case '${MFLAGS}' in *[i]*) set +e;; esac; \
+ for dir in $(PRIVLIB)/lib/C/fake; do \
+ (set -x; test -d $$dir || $(INSTALLDIR) $$dir) || \
+ exit 1; \
+ done
+
+local_install:: $(FILES)
+ @case '${MFLAGS}' in *[i]*) set +e;; esac; \
+ (set -x; test -d $(INSTALL_PREFIX)$(PRIVLIB)/lib/C/fake || \
+ $(INSTALLDIR) $(INSTALL_PREFIX)$(PRIVLIB)/lib/C/fake); \
+ for i in $(FILES); do \
+ (set -x; $(INSTALL) -c $(INSTALLFLAGS) \
+ $$i $(INSTALL_PREFIX)$(PRIVLIB)/lib/C/fake) || exit 1;\
+ done
+
+local_deinstall::
+ @case '${MFLAGS}' in *[i]*) set +e;; esac; \
+ for i in $(FILES); do \
+ (set -x; $(RM) $(INSTALL_PREFIX)$(PRIVLIB)/lib/C/fake/$$i); \
+ done
+
+########################################################################
+# Common rules for all Makefiles -- do not edit
+
+all::
+
+clean: local_clean
+realclean: local_realclean
+clobber: local_clobber
+
+local_clean::
+ if test -f core; then $(RM) core; fi
+ $(RM) *~ *.o
+
+local_realclean:: local_clean
+
+local_clobber:: local_realclean
+ $(RM) Makefile config.sh
+
+install:: local_install
+install.man:: maybe_install.man
+deinstall:: local_deinstall
+deinstall.man:: maybe_deinstall.man
+
+install.man-no:
+deinstall.man-no:
+
+maybe_install.man: install.man-no
+maybe_deinstall.man: deinstall.man-no
+
+Makefile.SH: Jmakefile
+ -@if test -f $(TOP)/.package; then \
+ if test -f Makefile.SH; then \
+ echo " $(RM) Makefile.SH~; $(MV) Makefile.SH Makefile.SH~"; \
+ $(RM) Makefile.SH~; $(MV) Makefile.SH Makefile.SH~; \
+ fi; \
+ echo " $(JMAKE) -DTOPDIR=$(TOP) -DCURDIR=$(CURRENT)" ; \
+ $(JMAKE) -DTOPDIR=$(TOP) -DCURDIR=$(CURRENT) ; \
+ else touch $@; fi
+
+Makefile: Makefile.SH
+ /bin/sh Makefile.SH
+
+tags::
+ $(CTAGS) -w *.[ch]
+ $(CTAGS) -xw *.[ch] > tags
+
+local_clobber::
+ $(RM) tags
+
+########################################################################
+# Empty rules for directories with no sub-directories -- do not edit
+
+local_install::
+ @echo "install in $(CURRENT) done."
+
+local_deinstall::
+ @echo "deinstall in $(CURRENT) done."
+
+local_install.man::
+ @echo "install.man in $(CURRENT) done."
+
+local_deinstall.man::
+ @echo "deinstall.man in $(CURRENT) done."
+
+Makefiles::
+
+Makefiles.SH::
+
+!NO!SUBS!
+chmod 644 Makefile
+$eunicefix Makefile
+
diff --git a/lib/C/fake/dup2.C b/lib/C/fake/dup2.C
new file mode 100644
index 0000000..97432b9
--- /dev/null
+++ b/lib/C/fake/dup2.C
@@ -0,0 +1,78 @@
+/*
+ * dup2.C -- A dup2 emulation.
+ */
+
+/*
+ * $Id: dup2.C,v 3.0.1.1 1994/01/24 13:58:37 ram Exp ram $
+ *
+ * Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+ *
+ * You may redistribute only under the terms of the Artistic Licence,
+ * as specified in the README file that comes with the distribution.
+ * You may reuse parts of this distribution only within the terms of
+ * that same Artistic Licence; a copy of which may be found at the root
+ * of the source tree for dist 4.0.
+ *
+ * Original Author: Larry Wall <lwall@netlabs.com>
+ *
+ * $Log: dup2.C,v $
+ * Revision 3.0.1.1 1994/01/24 13:58:37 ram
+ * patch16: created
+ *
+ */
+
+#include "config.h"
+
+#ifdef I_FCNTL
+#include <fcntl.h>
+#endif
+
+#include "confmagic.h" /* Remove if not metaconfig -M */
+
+#ifndef HAS_DUP2
+/*
+ * dup2
+ *
+ * This routine duplicates file descriptor 'old' into 'new'. After the
+ * operation, both 'new' and 'old' refer to the same file 'old' was referring
+ * to in the first place.
+ *
+ * Returns 0 if OK, -1 on failure with errno being set to indicate the error.
+ *
+ */
+V_FUNC(int dup2, (old, new),
+ int old /* Opened file descriptor */ NXT_ARG
+ int new /* File descriptor we'd like to get */)
+{
+#ifdef HAS_FCNTL
+#ifdef F_DUPFD
+#define USE_FNCTL
+#endif
+#endif
+
+#ifdef USE_FCNTL
+ if (old == new)
+ return 0;
+
+ close(new);
+ return fcntl(old, F_DUPFD, new);
+#else
+ int fd_used[256]; /* Fixed stack used to record dup'ed files */
+ int fd_top = 0; /* Top in the fixed stack */
+ int fd; /* Currently dup'ed file descriptor */
+
+ if (old == new)
+ return 0;
+
+ close(new); /* Ensure one free slot */
+ while ((fd = dup(old)) != new) /* Until dup'ed file matches */
+ fd_used[fd_top++] = fd; /* Remember we have to close it later */
+
+ while (fd_top > 0) /* Close all useless dup'ed slots */
+ close(fd_used[--fd_top]);
+
+ return 0;
+#endif
+}
+#endif
+
diff --git a/lib/C/fake/getopt.C b/lib/C/fake/getopt.C
new file mode 100644
index 0000000..41019e1
--- /dev/null
+++ b/lib/C/fake/getopt.C
@@ -0,0 +1,133 @@
+/*
+ * getopt.C -- A getopt implementation.
+ */
+
+/*
+ * $Id: getopt.C,v 3.0.1.1 1994/01/24 13:58:40 ram Exp ram $
+ *
+ * Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+ *
+ * You may redistribute only under the terms of the Artistic Licence,
+ * as specified in the README file that comes with the distribution.
+ * You may reuse parts of this distribution only within the terms of
+ * that same Artistic Licence; a copy of which may be found at the root
+ * of the source tree for dist 4.0.
+ *
+ * Original Author: unknown, got this off net.sources
+ *
+ * $Log: getopt.C,v $
+ * Revision 3.0.1.1 1994/01/24 13:58:40 ram
+ * patch16: created
+ *
+ */
+
+#include "config.h"
+#include <stdio.h>
+
+#ifdef I_STRING
+#include <string.h>
+#else
+#include <strings.h>
+#endif
+
+#include "confmagic.h" /* Remove if not metaconfig -M */
+
+#ifndef HAS_GETOPT
+
+/*
+ * Get option letter from argument vector
+ */
+
+int opterr = 1, /* Useless, never set or used */
+ optind = 1, /* Index into parent argv vector */
+ optopt; /* Character checked for validity */
+char *optarg; /* Argument associated with option */
+
+#define BADCH (int) '?'
+#define EMSG ""
+
+#define tell(s) \
+do { \
+ fputs(*nargv, stderr); \
+ fputs(s, stderr); \
+ fputc(optopt, stderr); \
+ fputc('\n', stderr); \
+ return BADCH; \
+} while (0)
+
+/*
+ * getopt
+ *
+ * Parses command line flags and arguments. Given the original arguments
+ * via the (nargc, nargv) tuple, and a list of flags via 'ostr', it returns
+ * the next flag recognized, and sets the externally visible 'optarg'
+ * variable to point to the start of the flags's parameter, if any expected.
+ *
+ * When facing an invalid flag, getopt() returns '?'.
+ *
+ * The 'ostr' string is a list of allowed flag characters, optionally by ':'
+ * when the flag expects a parameter, which can immediately follow the
+ * flag or come as the next word.
+ *
+ * In any case, the 'optopt' variable is set upon return to the flag being
+ * looked at, whether it was a valid flag or not.
+ */
+V_FUNC(int getopt, (nargc, nargv, ostr)
+ int nargc /* Argument count */ NXT_ARG
+ char **nargv /* Argument vector */ NXT_ARG
+ char *ostr /* String specifying options */)
+{
+ static char *place = EMSG; /* Option letter processing */
+ register1 char *oli; /* Option letter list index */
+
+ /*
+ * Update scanning pointer.
+ */
+
+ if (!*place) {
+ if(
+ optind >= nargc ||
+ *(place = nargv[optind]) != '-' ||
+ !*++place
+ )
+ return EOF;
+ if (*place == '-') { /* Found "--", end option processing */
+ ++optind;
+ return EOF;
+ }
+ }
+
+ /*
+ * Is option letter OK?
+ */
+
+ if (
+ (optopt = (int)*place++) == (int)':' ||
+ !(oli = index(ostr,optopt))
+ ) {
+ if (!*place) ++optind;
+ tell(": illegal option -- ");
+ }
+
+ /*
+ * Found a valid option, process it.
+ */
+
+ if (*++oli != ':') { /* Don't need argument */
+ optarg = NULL;
+ if (!*place) ++optind;
+ } else { /* Need an argument */
+ if (*place) optarg = place; /* No white space */
+ else if (nargc <= ++optind) { /* No argument */
+ place = EMSG;
+ tell(": option requires an argument -- ");
+ } else
+ optarg = nargv[optind]; /* White space */
+ place = EMSG;
+ ++optind;
+ }
+
+ return optopt; /* Dump back option letter */
+}
+#endif
+
diff --git a/lib/C/fake/rename.C b/lib/C/fake/rename.C
new file mode 100644
index 0000000..f50ea83
--- /dev/null
+++ b/lib/C/fake/rename.C
@@ -0,0 +1,45 @@
+/*
+ * rename.C -- A rename emulation, for renaming files only.
+ */
+
+/*
+ * $Id: rename.C,v 3.0.1.1 1994/01/24 13:58:42 ram Exp ram $
+ *
+ * Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+ *
+ * You may redistribute only under the terms of the Artistic Licence,
+ * as specified in the README file that comes with the distribution.
+ * You may reuse parts of this distribution only within the terms of
+ * that same Artistic Licence; a copy of which may be found at the root
+ * of the source tree for dist 4.0.
+ *
+ * $Log: rename.C,v $
+ * Revision 3.0.1.1 1994/01/24 13:58:42 ram
+ * patch16: created
+ *
+ */
+
+#include "config.h"
+#include "confmagic.h" /* Remove if not metaconfig -M */
+
+#ifndef HAS_RENAME
+/*
+ * rename
+ *
+ * Renames a file within a file system. This cannot be used to rename
+ * directories, unfortunately.
+ */
+V_FUNC(int rename, (from, to),
+ char *from /* Original name */ NXT_ARG
+ char *to /* Target name */)
+{
+ (void) unlink(to);
+ if (-1 == link(from, to))
+ return -1;
+ if (-1 == unlink(from))
+ return -1;
+
+ return 0;
+}
+#endif
+
diff --git a/lib/C/fake/scandir.C b/lib/C/fake/scandir.C
new file mode 100644
index 0000000..9d1cdd8
--- /dev/null
+++ b/lib/C/fake/scandir.C
@@ -0,0 +1,131 @@
+/*
+ * scandir.C -- A scandir implementation.
+ */
+
+/*
+ * $Id: scandir.C,v 3.0.1.1 1994/01/24 13:58:45 ram Exp ram $
+ *
+ * Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+ *
+ * You may redistribute only under the terms of the Artistic Licence,
+ * as specified in the README file that comes with the distribution.
+ * You may reuse parts of this distribution only within the terms of
+ * that same Artistic Licence; a copy of which may be found at the root
+ * of the source tree for dist 4.0.
+ *
+ * $Log: scandir.C,v $
+ * Revision 3.0.1.1 1994/01/24 13:58:45 ram
+ * patch16: created
+ *
+ */
+
+#include "config.h"
+
+#ifdef I_STRING
+#include <string.h>
+#else
+#include <strings.h>
+#endif
+
+#ifdef I_DIRENT
+#include <dirent.h>
+#else
+#ifdef I_SYS_NDIR
+#include <sys/ndir.h>
+#else
+#ifdef I_SYS_DIR
+#include <sys/dir.h>
+#endif
+#endif
+#endif
+
+#include "confmagic.h" /* Remove if not metaconfig -M */
+
+#ifndef HAS_SCANDIR
+
+extern Malloc_t malloc();
+extern Malloc_t realloc();
+
+extern DIR *opendir();
+extern Direntry_t *readdir();
+
+#define DIR_NULL ((DIR *) 0)
+#define ENTRY_NULL ((Direntry_t *) 0)
+
+static int alphasort _((Direntry_t **, Direntry_t **));
+
+/*
+ * scandir
+ *
+ * This routine reads the directory `dirnam' and builds an array of
+ * pointers to directory entries using malloc(). The second parameter
+ * is the address of a pointer to an array of structure pointers. The
+ * third parameter is a pointer to a routine which is called with a
+ * pointer to a directory entry and should return a non zero value
+ * if the directory entry should be included in the arrary. If this
+ * pointer is NULL, then all the directory entries will be included.
+ * The last argument is a pointer to a routine which is passed to
+ * qsort() to sort the completed array. If this pointer is NULL, the
+ * array is not sorted.
+ * scandir() returns the number of entries in the array and a pointer
+ * to the array through the parameter namlist.
+ * alphasort() is a routine which sorts the array alphabetically.
+ */
+V_FUNC(int scandir, (dirnam, namelist, sel, comp),
+ char *dirnam /* Direcotry name */ NXT_ARG
+ Direntry_t ***namelist /* Pointer to an array of struct ptrs */ NXT_ARG
+ int (*sel)() /* Routine to select entries */ NXT_ARG
+ int (*comp)() /* Routine passed to qsort */)
+{
+ DIR *dirp; /* Returned by opendir() */
+ Direntry_t *dp; /* Read entry */
+ Direntry_t *dp_save; /* Place where entry is stored */
+ Direntry_t **tmplist; /* Where the array list is stored */
+ int nent = 0; /* Number of entries */
+
+ dirp = opendir(dirnam);
+ if (dirp == DIR_NULL)
+ return -1; /* Directory cannot be opened for reading */
+
+ for (dp = readdir(dirp); dp != ENTRY_NULL; dp = readdir(dirp)) {
+ if (sel == ((int (*)()) 0) || (*sel)(dp)) {
+ /* If entry has to be included */
+ nent++; /* One more entry */
+
+ if (nent == 1) { /* Create array for first entry */
+ tmplist = (Direntry_t **)
+ malloc(sizeof(Direntry_t *));
+ if (tmplist == (Direntry_t **) 0)
+ return -1; /* Cannot create array */
+ } else { /* Reallocate for a new entry */
+ tmplist = (Direntry_t **)
+ realloc(tmplist, nent*sizeof(Direntry_t *));
+ if (tmplist == (Direntry_t **) 0)
+ return -1; /* Cannot reallocate array */
+ }
+
+ dp_save = (Direntry_t *) malloc(sizeof(Direntry_t));
+ if (dp_save == ENTRY_NULL)
+ return -1; /* No space to save entry */
+ bcopy((char *) dp, (char *) dp_save, sizeof(Direntry_t));
+ *(tmplist+(nent-1)) = dp_save;
+ }
+ }
+
+ if (comp != ((int (*)()) 0) && nent) /* Need sorting ? */
+ qsort(tmplist, nent, sizeof(Direntry_t *), comp);
+
+ *namelist = tmplist; /* Passes the address of the arrray */
+ closedir(dirp); /* Close directory */
+
+ return nent; /* Number of items */
+}
+
+P_FUNC(int alphasort, (d1, d2),
+ Direntry_t **d1 NXT_ARG Direntry_t **d2)
+{
+ return strcmp((*d1)->d_name, (*d2)->d_name);
+}
+
+#endif
+
diff --git a/lib/C/fake/setsid.C b/lib/C/fake/setsid.C
new file mode 100644
index 0000000..6811dec
--- /dev/null
+++ b/lib/C/fake/setsid.C
@@ -0,0 +1,64 @@
+/*
+ * setsid.C -- A setsid replacement.
+ */
+
+/*
+ * $Id: setsid.C,v 3.0.1.1 1994/01/24 13:58:47 ram Exp ram $
+ *
+ * Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+ *
+ * You may redistribute only under the terms of the Artistic Licence,
+ * as specified in the README file that comes with the distribution.
+ * You may reuse parts of this distribution only within the terms of
+ * that same Artistic Licence; a copy of which may be found at the root
+ * of the source tree for dist 4.0.
+ *
+ * $Log: setsid.C,v $
+ * Revision 3.0.1.1 1994/01/24 13:58:47 ram
+ * patch16: created
+ *
+ */
+
+#include "config.h"
+#include "confmagic.h" /* Remove if not metaconfig -M */
+
+#ifndef HAS_SETSID
+/*
+ * setsid
+ *
+ * Set the process group ID and create a new session for the process.
+ *
+ * This is a pale imitation of the setsid() system call, since a session
+ * and a process group are two distinct things for the kernel. However,
+ * when setsid() is not available, the effects should be comparable.
+ */
+V_FUNC_VOID(int setsid)
+{
+ int error = 0;
+
+#ifdef HAS_SETPGID
+ /*
+ * setpgid() supersedes setpgrp() in OSF/1.
+ */
+ error = setpgid(0 ,getpid());
+#else
+#ifdef HAS_SETPGRP
+ /*
+ * Good old way to get a process group leader.
+ */
+#ifdef USE_BSDPGRP
+ error = setpgrp(0 ,getpid()); /* bsd way */
+#else
+ error = setpgrp(); /* usg way */
+#endif
+#endif
+#endif
+
+ /*
+ * When none of the above is defined, do nothing.
+ */
+
+ return error;
+}
+#endif
+
diff --git a/lib/Jmakefile b/lib/Jmakefile
new file mode 100644
index 0000000..ce4aba9
--- /dev/null
+++ b/lib/Jmakefile
@@ -0,0 +1,53 @@
+/*
+ * Jmakefile for lib subdirectory.
+ */
+
+;# $Id$
+;#
+;# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+;#
+;# You may redistribute only under the terms of the Artistic Licence,
+;# as specified in the README file that comes with the distribution.
+;# You may reuse parts of this distribution only within the terms of
+;# that same Artistic Licence; a copy of which may be found at the root
+;# of the source tree for dist 4.0.
+;#
+;# $Log: Jmakefile,v $
+;# Revision 3.0.1.1 1994/01/24 13:43:31 ram
+;# patch16: added new directory for C code sources
+;#
+;# Revision 3.0 1993/08/18 12:04:34 ram
+;# Baseline for dist 3.0 netwide release.
+;#
+
+FILES = errnolist.a errnolist.mk
+FILES_SH = errnolist makedepend makedir
+
+INSTALLFLAGS = -m 444
+
+all:: /* So that default make does not default to install */
+
+MakeDirectories(install,$(PRIVLIB)/lib)
+InstallMultiple($(FILES),$(PRIVLIB)/lib)
+
+/*
+ * InstallSingleExt:
+ * This rule installs a single file whose basename is 'file' and
+ * extension is 'old' into 'file^^new'. This allows changing the
+ * dot extension of a file, for instance file.sh can be installed as
+ * file.SH.
+ */
+#define InstallSingleExt(step,file,dest,flags,old,new) @!\
+step:: file^^old @@\
+ @case '${MFLAGS}' in *[i]*) set +e;; esac; \ @@\
+ (set -x; $(INSTALL) -c flags file^^old dest/file^^new) @@\
+ @!\
+de^^step:: @@\
+ @case '${MFLAGS}' in *[i]*) set +e;; esac; \ @@\
+ (set -x; $(RM) dest/file^^new)
+
+#define install_rule \
+ InstallSingleExt(install,!f,$(PRIVLIB)/lib,-m 444,.sh,.SH)
+
+Expand(install_rule,f!$(FILES_SH)!)
+SetSubdirs(C)
diff --git a/lib/Makefile.SH b/lib/Makefile.SH
new file mode 100755
index 0000000..aef1682
--- /dev/null
+++ b/lib/Makefile.SH
@@ -0,0 +1,275 @@
+: Makefile.SH generated from Jmake.tmpl and Jmakefile [jmake 3.5-43]
+: $X-Id: Jmake.tmpl 47 2010-11-28 22:23:13Z rmanfredi $
+
+case $CONFIG in
+'')
+ if test -f config.sh; then TOP=.;
+ elif test -f ../config.sh; then TOP=..;
+ elif test -f ../../config.sh; then TOP=../..;
+ elif test -f ../../../config.sh; then TOP=../../..;
+ elif test -f ../../../../config.sh; then TOP=../../../..;
+ else
+ echo "Can't find config.sh."; exit 1
+ fi
+ . $TOP/config.sh
+ ;;
+esac
+case "$0" in
+*/*) cd `expr X$0 : 'X\(.*\)/'` ;;
+esac
+CURRENT=lib
+DIR=`echo $CURRENT/ | sed -e 's/\.\///g'`
+echo "Extracting ${DIR}Makefile (with variable substitutions)"
+
+INSTALL=`echo $install | sed -e 's,\./i,\$(TOP)/i,'`
+INSTALLDIR=`echo $installdir | sed -e 's,\./i,\$(TOP)/i,'`
+DATE=`date`
+
+$spitshell >Makefile <<!GROK!THIS!
+########################################################################
+# Makefile generated from Makefile.SH on $DATE
+
+SHELL = /bin/sh
+JMAKE = jmake
+TOP = ..
+CURRENT = $CURRENT
+DIR = $DIR
+INSTALL = $INSTALL
+INSTALLDIR = $INSTALLDIR
+
+########################################################################
+# Parameters set by Configure -- edit config.sh if changes are needed
+
+CTAGS = ctags
+JCPPFLAGS = $cppflags
+MV = $mv
+PRIVLIB = $installprivlib
+RM = $rm -f
+
+########################################################################
+# Automatically generated parameters -- do not edit
+
+SUBDIRS = C
+
+!GROK!THIS!
+$spitshell >>Makefile <<'!NO!SUBS!'
+########################################################################
+# Jmake rules for building libraries, programs, scripts, and data files
+# $X-Id: Jmake.rules 18 2006-12-27 10:35:09Z rmanfredi $
+
+########################################################################
+# Start of Jmakefile
+
+# $X-Id: Jmakefile 5 2006-08-25 22:09:39Z rmanfredi $
+#
+# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+#
+# You may redistribute only under the terms of the Artistic Licence,
+# as specified in the README file that comes with the distribution.
+# You may reuse parts of this distribution only within the terms of
+# that same Artistic Licence; a copy of which may be found at the root
+# of the source tree for dist 4.0.
+#
+# $X-Log: Jmakefile,v $
+# Revision 3.0.1.1 1994/01/24 13:43:31 ram
+# patch16: added new directory for C code sources
+#
+# Revision 3.0 1993/08/18 12:04:34 ram
+# Baseline for dist 3.0 netwide release.
+#
+
+FILES = errnolist.a errnolist.mk
+FILES_SH = errnolist makedepend makedir
+
+INSTALLFLAGS = -m 444
+
+all::
+
+install::
+ @case '${MFLAGS}' in *[i]*) set +e;; esac; \
+ for dir in $(PRIVLIB)/lib; do \
+ (set -x; test -d $$dir || $(INSTALLDIR) $$dir) || \
+ exit 1; \
+ done
+
+local_install:: $(FILES)
+ @case '${MFLAGS}' in *[i]*) set +e;; esac; \
+ (set -x; test -d $(INSTALL_PREFIX)$(PRIVLIB)/lib || \
+ $(INSTALLDIR) $(INSTALL_PREFIX)$(PRIVLIB)/lib); \
+ for i in $(FILES); do \
+ (set -x; $(INSTALL) -c $(INSTALLFLAGS) \
+ $$i $(INSTALL_PREFIX)$(PRIVLIB)/lib) || exit 1;\
+ done
+
+local_deinstall::
+ @case '${MFLAGS}' in *[i]*) set +e;; esac; \
+ for i in $(FILES); do \
+ (set -x; $(RM) $(INSTALL_PREFIX)$(PRIVLIB)/lib/$$i); \
+ done
+
+
+install:: errnolist.sh
+ @case '${MFLAGS}' in *[i]*) set +e;; esac; \
+ (set -x; $(INSTALL) -c -m 444 errnolist.sh $(PRIVLIB)/lib/errnolist.SH)
+
+deinstall::
+ @case '${MFLAGS}' in *[i]*) set +e;; esac; \
+ (set -x; $(RM) $(PRIVLIB)/lib/errnolist.SH)
+
+install:: makedepend.sh
+ @case '${MFLAGS}' in *[i]*) set +e;; esac; \
+ (set -x; $(INSTALL) -c -m 444 makedepend.sh $(PRIVLIB)/lib/makedepend.SH)
+
+deinstall::
+ @case '${MFLAGS}' in *[i]*) set +e;; esac; \
+ (set -x; $(RM) $(PRIVLIB)/lib/makedepend.SH)
+
+install:: makedir.sh
+ @case '${MFLAGS}' in *[i]*) set +e;; esac; \
+ (set -x; $(INSTALL) -c -m 444 makedir.sh $(PRIVLIB)/lib/makedir.SH)
+
+deinstall::
+ @case '${MFLAGS}' in *[i]*) set +e;; esac; \
+ (set -x; $(RM) $(PRIVLIB)/lib/makedir.SH)
+
+########################################################################
+# Common rules for all Makefiles -- do not edit
+
+all::
+
+clean: sub_clean local_clean
+realclean: sub_realclean local_realclean
+clobber: sub_clobber local_clobber
+
+local_clean::
+ if test -f core; then $(RM) core; fi
+ $(RM) *~ *.o
+
+local_realclean:: local_clean
+
+local_clobber:: local_realclean
+ $(RM) Makefile config.sh
+
+install:: local_install sub_install
+install.man:: maybe_install.man sub_install.man
+deinstall:: sub_deinstall local_deinstall
+deinstall.man:: sub_deinstall.man maybe_deinstall.man
+
+install.man-no:
+deinstall.man-no:
+
+maybe_install.man: install.man-no
+maybe_deinstall.man: deinstall.man-no
+
+Makefile.SH: Jmakefile
+ -@if test -f $(TOP)/.package; then \
+ if test -f Makefile.SH; then \
+ echo " $(RM) Makefile.SH~; $(MV) Makefile.SH Makefile.SH~"; \
+ $(RM) Makefile.SH~; $(MV) Makefile.SH Makefile.SH~; \
+ fi; \
+ echo " $(JMAKE) -DTOPDIR=$(TOP) -DCURDIR=$(CURRENT)" ; \
+ $(JMAKE) -DTOPDIR=$(TOP) -DCURDIR=$(CURRENT) ; \
+ else touch $@; fi
+
+Makefile: Makefile.SH
+ /bin/sh Makefile.SH
+
+tags::
+ $(CTAGS) -w *.[ch]
+ $(CTAGS) -xw *.[ch] > tags
+
+local_clobber::
+ $(RM) tags
+
+depend::
+
+########################################################################
+# Rules for building in sub-directories -- do not edit
+
+subdirs:
+ @case '${MFLAGS}' in *[ik]*) set +e;; esac; \
+ for i in $(SUBDIRS) ;\
+ do \
+ (cd $$i ; echo $(VERB) "in $(DIR)$$i..."; \
+ $(MAKE) $(MFLAGS) $(FLAGS) $(TARGET)) || exit 1; \
+ done
+
+sub_install::
+ @$(MAKE) subdirs TARGET=install VERB="Installing" FLAGS=
+
+sub_deinstall::
+ @$(MAKE) subdirs TARGET=deinstall VERB="Deinstalling" FLAGS=
+ @echo "Back to $(CURRENT) for "deinstall...
+
+sub_install.man::
+ @$(MAKE) subdirs TARGET=install.man VERB="Installing man pages" FLAGS=
+
+sub_deinstall.man::
+ @$(MAKE) subdirs TARGET=deinstall.man VERB="Deinstalling man pages" FLAGS=
+ @echo "Back to $(CURRENT) for "deinstall.man...
+
+sub_clean::
+ @$(MAKE) subdirs TARGET=clean VERB="Cleaning" FLAGS=
+ @echo "Back to $(CURRENT) for "clean...
+
+sub_realclean::
+ @$(MAKE) subdirs TARGET=realclean VERB="Real cleaning" FLAGS=
+ @echo "Back to $(CURRENT) for "realclean...
+
+sub_clobber::
+ @$(MAKE) subdirs TARGET=clobber VERB="Clobbering" FLAGS=
+ @echo "Back to $(CURRENT) for "clobber...
+
+tag::
+ @case '${MFLAGS}' in *[ik]*) set +e;; esac; \
+ for i in $(SUBDIRS) ;\
+ do \
+ (cd $$i ; echo "Tagging" "in $(DIR)$$i..."; \
+ $(MAKE) $(MFLAGS) tag) || exit 1; \
+ done
+
+Makefiles::
+ @case '${MFLAGS}' in *[ik]*) set +e;; esac; \
+ for i in $(SUBDIRS);\
+ do \
+ echo "Making "Makefiles" in $(DIR)$$i..."; \
+ (cd $$i || exit 1; \
+ if test ! -f Makefile; then /bin/sh Makefile.SH; fi; \
+ $(MAKE) $(MFLAGS) Makefiles) || exit 1;\
+ done
+
+Makefiles.SH:: Makefile.SH
+ @case '${MFLAGS}' in *[ik]*) set +e;; esac; \
+ for i in $(SUBDIRS);\
+ do \
+ case "$(DIR)$$i/" in \
+ */*/*/*/) newtop=../../../..;; \
+ */*/*/) newtop=../../..;; \
+ */*/) newtop=../..;; \
+ */) newtop=..;; \
+ esac; \
+ case "$(TOP)" in \
+ /*) newtop="$(TOP)" ;; \
+ esac; \
+ echo "Making Makefiles.SH in $(DIR)$$i..."; \
+ (cd $$i || exit 1; \
+ if test -f Jmakefile; then \
+ $(MAKE) $(MFLAGS) -f ../Makefile \
+ Makefile TOP=$$newtop CURRENT=$(DIR)$$i && \
+ $(MAKE) $(MFLAGS) Makefiles.SH; \
+ fi; \
+ ) || exit 1; \
+ done
+
+all::
+ @$(MAKE) subdirs TARGET=all VERB="Making all" FLAGS=
+
+local_install::
+local_deinstall::
+local_install.man::
+local_deinstall.man::
+
+!NO!SUBS!
+chmod 644 Makefile
+$eunicefix Makefile
+
diff --git a/lib/errnolist.a b/lib/errnolist.a
new file mode 100644
index 0000000..7844b97
--- /dev/null
+++ b/lib/errnolist.a
@@ -0,0 +1,52 @@
+# $Id: errnolist.a,v 3.0 1993/08/18 12:04:35 ram Exp ram $
+#
+# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+#
+# You may redistribute only under the terms of the Artistic Licence,
+# as specified in the README file that comes with the distribution.
+# You may reuse parts of this distribution only within the terms of
+# that same Artistic Licence; a copy of which may be found at the root
+# of the source tree for dist 4.0.
+#
+# Original Author: Harlan Stenn <harlan@mumps.pfcs.com>
+#
+# $Log: errnolist.a,v $
+# Revision 3.0 1993/08/18 12:04:35 ram
+# Baseline for dist 3.0 netwide release.
+#
+#
+# This is a simple-minded awk script to generate an initialization for
+# sys_errnolist on systems that don't have it.
+# This file now depends only on sys/errno.h error numbers under maxerr being
+# in order. It will complain and die if not. NOTE: It will still produce
+# a compilable output file, even with errors, so you must check the output.
+
+
+BEGIN {
+ format = "\t\"%s\",\n"
+ printf("/*\n** This is a generated file. Do NOT edit it unless you really have to...\n*/\n\n")
+ printf("char *sys_errnolist[] = {\n")
+ maxerr = 89
+ }
+
+$1=="#define" {
+ if(count > maxerr || substr($2,1,1) != "E")
+ next # we're not interested
+ if($3 < count) { # this is bad
+ printf("Fatal error: %s out of order at %s\n",\
+ FILENAME, $2)>"/dev/tty"
+ exit 1
+ }
+ # fill in the blanks
+ while($3 > count) {
+ dummy=sprintf("EDUMMY%d",count)
+ printf(format,dummy)
+ count++
+ }
+ printf(format,$2)
+ count++
+ }
+
+END {
+ printf("\t0\n};\n")
+ }
diff --git a/lib/errnolist.mk b/lib/errnolist.mk
new file mode 100644
index 0000000..e79a21b
--- /dev/null
+++ b/lib/errnolist.mk
@@ -0,0 +1,42 @@
+# $Id: errnolist.mk,v 3.0.1.1 1994/01/24 13:59:32 ram Exp ram $
+#
+# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+#
+# You may redistribute only under the terms of the Artistic Licence,
+# as specified in the README file that comes with the distribution.
+# You may reuse parts of this distribution only within the terms of
+# that same Artistic Licence; a copy of which may be found at the root
+# of the source tree for dist 4.0.
+#
+# Original Author: Harlan Stenn <harlan@mumps.pfcs.com>
+#
+# $Log: errnolist.mk,v $
+# Revision 3.0.1.1 1994/01/24 13:59:32 ram
+# patch16: now uses modern shell metaconfig symbols
+#
+# Revision 3.0 1993/08/18 12:04:36 ram
+# Baseline for dist 3.0 netwide release.
+#
+#
+# Make rules for the errnolist stuff
+
+case "$errnolist" in
+'') ;;
+*)
+ $spitshell >>Makefile <<!GROK!THIS!
+$errnolist_c: $errnolist_SH $errnolist_a
+ sh ./$errnolist_SH
+
+!GROK!THIS!
+ ;;
+esac
+
+$spitshell >>Makefile <<!GROK!THIS!
+ERRNOLIST_OBJ=$errnolist_o
+!GROK!THIS!
+
+$spitshell >>Makefile <<'!NO!SUBS!'
+
+foo: foo.o $(ERRNOLIST_OBJ)
+ $(CC) -o $@ foo.o $(ERRNOLIST_OBJ)
+!NO!SUBS!
diff --git a/lib/errnolist.sh b/lib/errnolist.sh
new file mode 100644
index 0000000..6101db7
--- /dev/null
+++ b/lib/errnolist.sh
@@ -0,0 +1,44 @@
+# $Id: errnolist.sh,v 3.0.1.1 1994/01/24 14:00:00 ram Exp ram $
+#
+# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+#
+# You may redistribute only under the terms of the Artistic Licence,
+# as specified in the README file that comes with the distribution.
+# You may reuse parts of this distribution only within the terms of
+# that same Artistic Licence; a copy of which may be found at the root
+# of the source tree for dist 4.0.
+#
+# Original Author: Harlan Stenn <harlan@mumps.pfcs.com>
+#
+# $Log: errnolist.sh,v $
+# Revision 3.0.1.1 1994/01/24 14:00:00 ram
+# patch16: changed top ln-style config.sh lookup into test-style one
+#
+# Revision 3.0 1993/08/18 12:04:36 ram
+# Baseline for dist 3.0 netwide release.
+#
+
+case $CONFIG in
+'')
+ if test -f config.sh; then TOP=.;
+ elif test -f ../config.sh; then TOP=..;
+ elif test -f ../../config.sh; then TOP=../..;
+ elif test -f ../../../config.sh; then TOP=../../..;
+ elif test -f ../../../../config.sh; then TOP=../../../..;
+ else
+ echo "Can't find config.sh."; exit 1
+ fi
+ . $TOP/config.sh
+ ;;
+esac
+case "$0" in
+*/*) cd `expr X$0 : 'X\(.*\)/'` ;;
+esac
+case "$errnolistc" in
+'') ;;
+*)
+ echo "Making $errnolistc ..."
+ awk -f errnolist.a < /usr/include/sys/errno.h > $errnolistc
+ echo "It would be a good idea to make sure that $errnolistc is correct."
+esac
+
diff --git a/lib/makedepend.sh b/lib/makedepend.sh
new file mode 100644
index 0000000..6ee561e
--- /dev/null
+++ b/lib/makedepend.sh
@@ -0,0 +1,169 @@
+case $CONFIG in
+'')
+ if test -f config.sh; then TOP=.;
+ elif test -f ../config.sh; then TOP=..;
+ elif test -f ../../config.sh; then TOP=../..;
+ elif test -f ../../../config.sh; then TOP=../../..;
+ elif test -f ../../../../config.sh; then TOP=../../../..;
+ else
+ echo "Can't find config.sh."; exit 1
+ fi
+ . $TOP/config.sh
+ ;;
+esac
+case "$0" in
+*/*) cd `expr X$0 : 'X\(.*\)/'` ;;
+esac
+echo "Extracting makedepend (with variable substitutions)"
+$spitshell >makedepend <<!GROK!THIS!
+$startsh
+# $Id: makedepend.sh,v 3.0.1.1 1994/01/24 14:00:05 ram Exp ram $
+#
+# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+#
+# You may redistribute only under the terms of the Artistic Licence,
+# as specified in the README file that comes with the distribution.
+# You may reuse parts of this distribution only within the terms of
+# that same Artistic Licence; a copy of which may be found at the root
+# of the source tree for dist 4.0.
+#
+# Original Author: Larry Wall <lwall@netlabs.com>
+#
+# $Log: makedepend.sh,v $
+# Revision 3.0.1.1 1994/01/24 14:00:05 ram
+# patch16: changed top ln-style config.sh lookup into test-style one
+#
+# Revision 3.0 1993/08/18 12:04:37 ram
+# Baseline for dist 3.0 netwide release.
+#
+
+export PATH || (echo "OOPS, this isn't sh. Desperation time. I will feed myself to sh."; sh \$0; kill \$\$)
+
+cat='$cat'
+cppflags='$cppflags'
+cp='$cp'
+cpp='$cppstdin'
+echo='$echo'
+egrep='$egrep'
+expr='$expr'
+mv='$mv'
+rm='$rm'
+sed='$sed'
+sort='$sort'
+test='$test'
+tr='$tr'
+uniq='$uniq'
+!GROK!THIS!
+
+$spitshell >>makedepend <<'!NO!SUBS!'
+
+$cat /dev/null >.deptmp
+$rm -f *.c.c c/*.c.c
+if test -f Makefile; then
+ mf=Makefile
+else
+ mf=makefile
+fi
+if test -f $mf; then
+ defrule=`<$mf sed -n \
+ -e '/^\.c\.o:.*;/{' \
+ -e 's/\$\*\.c//' \
+ -e 's/^[^;]*;[ ]*//p' \
+ -e q \
+ -e '}' \
+ -e '/^\.c\.o: *$/{' \
+ -e N \
+ -e 's/\$\*\.c//' \
+ -e 's/^.*\n[ ]*//p' \
+ -e q \
+ -e '}'`
+fi
+case "$defrule" in
+'') defrule='$(CC) -c $(CFLAGS)' ;;
+esac
+
+make clist || ($echo "Searching for .c files..."; \
+ $echo *.c | $tr ' ' '\012' | $egrep -v '\*' >.clist)
+gotnone=true
+for file in `$cat .clist`; do
+# for file in `cat /dev/null`; do
+ case "$file" in
+ *.c) filebase=`basename $file .c` ;;
+ *.y) filebase=`basename $file .c` ;;
+ '') continue ;;
+ esac
+ gotnone=false
+ $echo "Finding dependencies for $filebase.o."
+ $sed -n <$file >$file.c \
+ -e "/^${filebase}_init(/q" \
+ -e '/^#/{' \
+ -e 's|/\*.*$||' \
+ -e 's|\\$||' \
+ -e p \
+ -e '}'
+ $cpp -I/usr/local/include -I. $cppflags $file.c | \
+ $sed \
+ -e '/^# *[0-9]/!d' \
+ -e 's/^.*"\(.*\)".*$/'$filebase'.o: \1/' \
+ -e 's|: \./|: |' \
+ -e 's|\.c\.c|.c|' | \
+ $uniq | $sort | $uniq >> .deptmp
+done
+
+$sed <Makefile >Makefile.new -e '1,/^# AUTOMATICALLY/!d'
+
+make shlist || ($echo "Searching for .SH files..."; \
+ $echo *.SH | $tr ' ' '\012' | $egrep -v '\*' >.shlist)
+if $gotnone || $test -s .deptmp; then
+ for file in `cat .shlist`; do
+ $echo `$expr X$file : 'X\(.*\).SH`: $file config.sh \; \
+ /bin/sh $file >> .deptmp
+ done
+ $echo "Updating Makefile..."
+ $echo "# If this runs make out of memory, delete /usr/include lines." \
+ >> Makefile.new
+ $sed 's|^\(.*\.o:\) *\(.*/.*\.c\) *$|\1 \2; '"$defrule \2|" .deptmp \
+ >>Makefile.new
+else
+ make hlist || ($echo "Searching for .h files..."; \
+ $echo *.h | $tr ' ' '\012' | $egrep -v '\*' >.hlist)
+ $echo "You don't seem to have a proper C preprocessor. Using grep instead."
+ $egrep '^#include ' `cat .clist` `cat .hlist` >.deptmp
+ $echo "Updating Makefile..."
+ <.clist $sed -n \
+ -e '/\//{' \
+ -e 's|^\(.*\)/\(.*\)\.c|\2.o: \1/\2.c; '"$defrule \1/\2.c|p" \
+ -e d \
+ -e '}' \
+ -e 's|^\(.*\)\.c|\1.o: \1.c|p' >> Makefile.new
+ <.hlist $sed -n 's|\(.*/\)\(.*\)|s= \2= \1\2=|p' >.hsed
+ <.deptmp $sed -n 's|c:#include "\(.*\)".*$|o: \1|p' | \
+ $sed 's|^[^;]*/||' | \
+ $sed -f .hsed >> Makefile.new
+ <.deptmp $sed -n 's|c:#include <\(.*\)>.*$|o: /usr/include/\1|p' \
+ >> Makefile.new
+ <.deptmp $sed -n 's|h:#include "\(.*\)".*$|h: \1|p' | \
+ $sed -f .hsed >> Makefile.new
+ <.deptmp $sed -n 's|h:#include <\(.*\)>.*$|h: /usr/include/\1|p' \
+ >> Makefile.new
+ for file in `$cat .shlist`; do
+ $echo `$expr X$file : 'X\(.*\).SH`: $file config.sh \; \
+ /bin/sh $file >> Makefile.new
+ done
+fi
+$rm -f Makefile.old
+$cp Makefile Makefile.old
+$cp Makefile.new Makefile
+$rm Makefile.new
+$echo "# WARNING: Put nothing here or make depend will gobble it up!" >> Makefile
+$rm -f .deptmp `sed 's/\.c/.c.c/' .clist` .shlist .clist .hlist .hsed
+
+!NO!SUBS!
+$eunicefix makedepend
+chmod +x makedepend
+case `pwd` in
+*SH)
+ $rm -f ../makedepend
+ ln makedepend ../makedepend
+ ;;
+esac
diff --git a/lib/makedir.sh b/lib/makedir.sh
new file mode 100644
index 0000000..2805714
--- /dev/null
+++ b/lib/makedir.sh
@@ -0,0 +1,86 @@
+case $CONFIG in
+'')
+ if test -f config.sh; then TOP=.;
+ elif test -f ../config.sh; then TOP=..;
+ elif test -f ../../config.sh; then TOP=../..;
+ elif test -f ../../../config.sh; then TOP=../../..;
+ elif test -f ../../../../config.sh; then TOP=../../../..;
+ else
+ echo "Can't find config.sh."; exit 1
+ fi
+ . $TOP/config.sh
+ ;;
+esac
+case "$0" in
+*/*) cd `expr X$0 : 'X\(.*\)/'` ;;
+esac
+echo "Extracting makedir (with variable substitutions)"
+$spitshell >makedir <<!GROK!THIS!
+$startsh
+# $Id: makedir.sh,v 3.0.1.1 1994/01/24 14:00:08 ram Exp ram $
+#
+# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+#
+# You may redistribute only under the terms of the Artistic Licence,
+# as specified in the README file that comes with the distribution.
+# You may reuse parts of this distribution only within the terms of
+# that same Artistic Licence; a copy of which may be found at the root
+# of the source tree for dist 4.0.
+#
+# Original Author: Larry Wall <lwall@netlabs.com>
+#
+# $Log: makedir.sh,v $
+# Revision 3.0.1.1 1994/01/24 14:00:08 ram
+# patch16: changed top ln-style config.sh lookup into test-style one
+#
+# Revision 3.0 1993/08/18 12:04:38 ram
+# Baseline for dist 3.0 netwide release.
+#
+
+export PATH || (echo "OOPS, this isn't sh. Desperation time. I will feed myself to sh."; sh \$0; kill \$\$)
+
+case \$# in
+ 0)
+ $echo "makedir pathname filenameflag"
+ exit 1
+ ;;
+esac
+
+: guarantee one slash before 1st component
+case \$1 in
+ /*) ;;
+ *) set ./\$1 \$2 ;;
+esac
+
+: strip last component if it is to be a filename
+case X\$2 in
+ X1) set \`$echo \$1 | $sed 's:\(.*\)/[^/]*\$:\1:'\` ;;
+ *) set \$1 ;;
+esac
+
+: return reasonable status if nothing to be created
+if $test -d "\$1" ; then
+ exit 0
+fi
+
+list=''
+while true ; do
+ case \$1 in
+ */*)
+ list="\$1 \$list"
+ set \`echo \$1 | $sed 's:\(.*\)/:\1 :'\`
+ ;;
+ *)
+ break
+ ;;
+ esac
+done
+
+set \$list
+
+for dir do
+ $mkdir \$dir >/dev/null 2>&1
+done
+!GROK!THIS!
+$eunicefix makedir
+chmod +x makedir
diff --git a/mcon/INTRO b/mcon/INTRO
new file mode 100644
index 0000000..51f4417
--- /dev/null
+++ b/mcon/INTRO
@@ -0,0 +1,109 @@
+This is a quick introduction to metaconfig.
+
+Metaconfig is a combination of a methodology and a program that will
+help you write portable programs. It is well known that all UN*X
+systems are not the same. Instead of writing lots of #ifdef/#endif for
+each machine the program is ported on, it seems better to directly rely
+on the actual possibilities of the system, without having to consider
+whether it comes from HP or SUN. The idea is to write the program using
+some symbols, known by a "unit", for all the hardware- or kernel-
+specific parts of code. A metaconfig unit will automatically define the
+symbol or not, depending on the system. Source files are scanned by
+metaconfig and the necessary units are loaded and put into a shell
+script called Configure. Running the Configure script will
+automatically determine a suitable value for each symbol.
+
+How does a Configure script work ? It studies the environment it runs on
+by extracting names in the C library, by compiling some small sample C
+programs, and by asking questions when in doubt, always providing a
+computed default answer.
+
+Here is a small example.
+
+It is said in the glossary of the symbols that RENAME is defined if the
+rename routine is available to rename files. Without metaconfig, we
+could write (for each occurrence of a "rename" in the code):
+
+#if defined(HP-UX-7.0) || defined(SUN) || defined(BSD)
+ rename(old, new);
+#else
+ unlink(new);
+ link(old, new);
+ unlink(old);
+#endif
+
+With the help of metaconfig, we shall write (once !):
+
+#ifndef HAS_RENAME
+int rename(old, new)
+char *old, *new;
+{
+ (void) unlink(new);
+ if (-1 != link(old, new))
+ return unlink(old);
+ else
+ return -1;
+}
+#endif
+
+ ....
+
+ rename(old, new);
+
+
+And that's all. The Configure script will check whether `rename' is
+available on the target machine and accordingly define the RENAME
+symbol. It is even more powerful that it may appear on a first glance,
+because "rename" was not there on old SUNOS3 systems or HP-UX older than
+6.5 (for series 800) and 7.0 (for series 300). You cannot rely on the
+fact that the target machine has the latest OS release !
+
+Another problem is to determine whether a C program should include
+<time.h>, <sys/time.h> or <sys/time.h> with KERNEL defined. With
+metaconfig, you simply write:
+
+#ifdef I_TIME
+# include <time.h>
+#endif
+#ifdef I_SYS_TIME
+# include <sys/time.h>
+#endif
+#ifdef I_SYS_TIME_KERNEL
+# define KERNEL
+# include <sys/time.h>
+# undef KERNEL
+#endif
+
+and the Configure script will generate a small C program, compile it,
+and correctly define one of the three symbols I_TIME, I_SYS_TIME and
+I_SYS_TIME_KERNEL.
+
+Another kind of precious information can be collected by a Configure
+script. For instance, the symbol USE_STRUCT_COPY will be defined if the
+C compiler can copy structures. It is up to the programmer to use this
+information, of course. The symbol VOIDSIG will be defined if the
+system declares "void (*signal())()" instead of "int (*signal())()".
+Thus you can say:
+
+#ifdef VOIDSIG
+extern void (*signal())();
+#else
+extern int (*signal())();
+#endif
+
+and no suspicious warning will be emitted by the C compiler.
+
+Finally, Configure can help you in shell scripts or in makefile. By
+using a file called Makefile.SH, which will be run through a shell to
+produce a Makefile, you can use the variable substitution feature. The
+variable $ranlib will be set to 'ranlib' or to ': ' (null statement) in
+a makefile, which is useful for random libraries generation. Likewise,
+the variable $bin will hold the full path for installing binaries (a
+question will be issued by Configure).
+
+Needless to say, an initial amount of time must be spent before being
+able to use metaconfig. The proper symbols must be known, and the
+program must be prepared to deal with all the possible configurations.
+But likewise, it will adapt itself to a greater number of systems
+without any further source code modification.
+
diff --git a/mcon/Jmakefile b/mcon/Jmakefile
new file mode 100644
index 0000000..1a18b39
--- /dev/null
+++ b/mcon/Jmakefile
@@ -0,0 +1,90 @@
+/*
+ * Jmakefile for metaconfig
+ */
+
+;# $Id$
+;#
+;# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+;#
+;# You may redistribute only under the terms of the Artistic Licence,
+;# as specified in the README file that comes with the distribution.
+;# You may reuse parts of this distribution only within the terms of
+;# that same Artistic Licence; a copy of which may be found at the root
+;# of the source tree for dist 4.0.
+;#
+;# $Log: Jmakefile,v $
+;# Revision 3.0.1.4 1995/07/25 13:23:09 ram
+;# patch56: installs the GNU configure-like front-end to Configure
+;#
+;# Revision 3.0.1.3 1994/01/24 13:42:29 ram
+;# patch16: added dependency generation stage
+;#
+;# Revision 3.0.1.2 1993/11/02 10:40:01 ram
+;# patch14: now invokes perload explicitly via perl executable
+;#
+;# Revision 3.0.1.1 1993/08/25 08:46:44 ram
+;# patch6: split unit installation to avoid shell command line overflow
+;#
+;# Revision 3.0 1993/08/18 12:04:40 ram
+;# Baseline for dist 3.0 netwide release.
+;#
+
+SetSubdirs(man)
+AllTarget(Glossary)
+
+.FORCE:
+
+Glossary: .FORCE
+ chmod +x makegloss
+ ./makegloss
+
+SimpleShellScriptTarget(makegloss)
+
+MakeInstallDirectories($(PRIVLIB) $(PRIVLIB)/U)
+InstallNonExec(Glossary,$(PRIVLIB))
+InstallScript(makegloss,$(PRIVLIB))
+InstallScript(configure,$(PRIVLIB))
+
+/* Split install list to avoid make overflow */
+InstallMultipleFlags(U/[a-d]*.U,$(PRIVLIB)/U,-m 444)
+InstallMultipleFlags(U/[A-Ze-z]*.U,$(PRIVLIB)/U,-m 444)
+
+/*
+ * Build up dataloading versions of metalint, metaconfig and metaxref.
+ */
+
+#define SimpleDataloadTarget(file,datafile) @!\
+++BIN datafile @!\
+AllTarget(datafile file) @!\
+SimpleShellScriptTarget(file) @!\
+datafile: file @@\
+ perl $(TOP)/bin/perload -o file > $@ @@\
+ chmod +rx $@ @!\
+ @!\
+InstallScript(datafile,$(SCRIPTDIR))
+
+SimpleDataloadTarget(mconfig,metaconfig)
+SimpleDataloadTarget(mlint,metalint)
+SimpleDataloadTarget(mxref,metaxref)
+
+BINFILES = \
+|expand f!$(BIN)!
+ !f:^meta=m \
+-expand \\
+
+BINSH = \
+|expand f!$(BINFILES)!
+ !f.SH \
+-expand \\
+
+depend:: local_depend
+local_depend::
+ ($(SED) '/^# DO NOT DELETE/q' Makefile && \
+ grep '^\$$grep' $(BINSH) | \
+ $(SED) -e "s/^.*' \([^ ]*\) >>\([^ ]*\)/\2: \1/" \
+ ) > Makefile.new
+ cp Makefile Makefile.bak
+ cp Makefile.new Makefile
+ $(RM) Makefile.new
+
+mconfig mlint mxref: $(TOP)/revision.h
diff --git a/mcon/Makefile.SH b/mcon/Makefile.SH
new file mode 100755
index 0000000..64b62d5
--- /dev/null
+++ b/mcon/Makefile.SH
@@ -0,0 +1,432 @@
+: Makefile.SH generated from Jmake.tmpl and Jmakefile [jmake 3.5-174]
+: $X-Id: Jmake.tmpl 156 2012-12-19 16:44:39Z rmanfredi $
+
+case $CONFIG in
+'')
+ if test -f config.sh; then TOP=.;
+ elif test -f ../config.sh; then TOP=..;
+ elif test -f ../../config.sh; then TOP=../..;
+ elif test -f ../../../config.sh; then TOP=../../..;
+ elif test -f ../../../../config.sh; then TOP=../../../..;
+ else
+ echo "Can't find config.sh."; exit 1
+ fi
+ . $TOP/config.sh
+ ;;
+esac
+case "$0" in
+*/*) cd `expr X$0 : 'X\(.*\)/'` ;;
+esac
+CURRENT=mcon
+DIR=`echo $CURRENT/ | sed -e 's/\.\///g'`
+echo "Extracting ${DIR}Makefile (with variable substitutions)"
+
+INSTALL=`echo $install | sed -e 's,\./i,\$(TOP)/i,'`
+INSTALLDIR=`echo $installdir | sed -e 's,\./i,\$(TOP)/i,'`
+DATE=`date`
+
+$spitshell >Makefile <<!GROK!THIS!
+########################################################################
+# Makefile generated from Makefile.SH on $DATE
+
+SHELL = /bin/sh
+JMAKE = jmake
+TOP = ..
+CURRENT = $CURRENT
+DIR = $DIR
+INSTALL = $INSTALL
+INSTALLDIR = $INSTALLDIR
+
+########################################################################
+# Parameters set by Configure -- edit config.sh if changes are needed
+
+CTAGS = ctags
+JCPPFLAGS = $cppflags
+MV = $mv
+PRIVLIB = $installprivlib
+RM = $rm -f
+SCRIPTDIR = $installscript
+SED = $sed
+
+########################################################################
+# Automatically generated parameters -- do not edit
+
+SUBDIRS = man
+BIN = metaconfig metalint metaxref
+
+!GROK!THIS!
+$spitshell >>Makefile <<'!NO!SUBS!'
+########################################################################
+# Jmake rules for building libraries, programs, scripts, and data files
+# $X-Id: Jmake.rules 174 2014-04-05 08:19:48Z rmanfredi $
+
+########################################################################
+# Start of Jmakefile
+
+# $X-Id: Jmakefile 177 2014-04-08 10:42:18Z rmanfredi $
+#
+# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+#
+# You may redistribute only under the terms of the Artistic Licence,
+# as specified in the README file that comes with the distribution.
+# You may reuse parts of this distribution only within the terms of
+# that same Artistic Licence; a copy of which may be found at the root
+# of the source tree for dist 4.0.
+#
+# $X-Log: Jmakefile,v $
+# Revision 3.0.1.4 1995/07/25 13:23:09 ram
+# patch56: installs the GNU configure-like front-end to Configure
+#
+# Revision 3.0.1.3 1994/01/24 13:42:29 ram
+# patch16: added dependency generation stage
+#
+# Revision 3.0.1.2 1993/11/02 10:40:01 ram
+# patch14: now invokes perload explicitly via perl executable
+#
+# Revision 3.0.1.1 1993/08/25 08:46:44 ram
+# patch6: split unit installation to avoid shell command line overflow
+#
+# Revision 3.0 1993/08/18 12:04:40 ram
+# Baseline for dist 3.0 netwide release.
+#
+
+all:: Glossary
+
+local_realclean::
+ $(RM) Glossary
+
+.FORCE:
+
+Glossary: .FORCE
+ chmod +x makegloss
+ ./makegloss
+
+all:: makegloss
+
+local_realclean::
+ $(RM) makegloss
+
+makegloss: makegloss.SH
+ /bin/sh makegloss.SH
+
+
+local_install::
+ @case '${MFLAGS}' in *[i]*) set +e;; esac; \
+ for dir in $(PRIVLIB) $(PRIVLIB)/U; do \
+ (set -x; test -d $(INSTALL_PREFIX)$$dir || \
+ $(INSTALLDIR) $(INSTALL_PREFIX)$$dir); \
+ done
+
+local_deinstall::
+ @case '${MFLAGS}' in *[i]*) set +e;; esac; \
+ for dir in $(PRIVLIB) $(PRIVLIB)/U; do \
+ (set -x; test -d $$dir && $(RM) -r $(INSTALL_PREFIX)$$dir); \
+ done
+
+local_install:: Glossary
+ @case '${MFLAGS}' in *[i]*) set +e;; esac; \
+ (set -x; test -d $(INSTALL_PREFIX)$(PRIVLIB) || \
+ $(INSTALLDIR) $(INSTALL_PREFIX)$(PRIVLIB)); \
+ $(INSTALL) -c -m 444 Glossary $(INSTALL_PREFIX)$(PRIVLIB)
+
+local_deinstall::
+ $(RM) $(INSTALL_PREFIX)$(PRIVLIB)/Glossary
+
+local_install:: makegloss
+ @case '${MFLAGS}' in *[i]*) set +e;; esac; \
+ (set -x; test -d $(INSTALL_PREFIX)$(PRIVLIB) || \
+ $(INSTALLDIR) $(INSTALL_PREFIX)$(PRIVLIB)); \
+ $(INSTALL) -c -m 555 makegloss $(INSTALL_PREFIX)$(PRIVLIB)
+
+local_deinstall::
+ $(RM) $(INSTALL_PREFIX)$(PRIVLIB)/makegloss
+
+local_install:: configure
+ @case '${MFLAGS}' in *[i]*) set +e;; esac; \
+ (set -x; test -d $(INSTALL_PREFIX)$(PRIVLIB) || \
+ $(INSTALLDIR) $(INSTALL_PREFIX)$(PRIVLIB)); \
+ $(INSTALL) -c -m 555 configure $(INSTALL_PREFIX)$(PRIVLIB)
+
+local_deinstall::
+ $(RM) $(INSTALL_PREFIX)$(PRIVLIB)/configure
+
+local_install:: U/[a-d]*.U
+ @case '${MFLAGS}' in *[i]*) set +e;; esac; \
+ (set -x; test -d $(INSTALL_PREFIX)$(PRIVLIB)/U || \
+ $(INSTALLDIR) $(INSTALL_PREFIX)$(PRIVLIB)/U); \
+ for i in U/[a-d]*.U; do \
+ (set -x; $(INSTALL) -c -m 444 \
+ $$i $(INSTALL_PREFIX)$(PRIVLIB)/U) || exit 1;\
+ done
+
+local_deinstall::
+ @case '${MFLAGS}' in *[i]*) set +e;; esac; \
+ for i in U/[a-d]*.U; do \
+ (set -x; $(RM) $(INSTALL_PREFIX)$(PRIVLIB)/U/$$i); \
+ done
+
+local_install:: U/[A-Ze-z]*.U
+ @case '${MFLAGS}' in *[i]*) set +e;; esac; \
+ (set -x; test -d $(INSTALL_PREFIX)$(PRIVLIB)/U || \
+ $(INSTALLDIR) $(INSTALL_PREFIX)$(PRIVLIB)/U); \
+ for i in U/[A-Ze-z]*.U; do \
+ (set -x; $(INSTALL) -c -m 444 \
+ $$i $(INSTALL_PREFIX)$(PRIVLIB)/U) || exit 1;\
+ done
+
+local_deinstall::
+ @case '${MFLAGS}' in *[i]*) set +e;; esac; \
+ for i in U/[A-Ze-z]*.U; do \
+ (set -x; $(RM) $(INSTALL_PREFIX)$(PRIVLIB)/U/$$i); \
+ done
+
+all:: metaconfig mconfig
+
+local_realclean::
+ $(RM) metaconfig mconfig
+
+all:: mconfig
+
+local_realclean::
+ $(RM) mconfig
+
+mconfig: mconfig.SH
+ /bin/sh mconfig.SH
+
+metaconfig: mconfig
+ perl $(TOP)/bin/perload -o mconfig > $@
+ chmod +rx $@
+
+local_install:: metaconfig
+ @case '${MFLAGS}' in *[i]*) set +e;; esac; \
+ (set -x; test -d $(INSTALL_PREFIX)$(SCRIPTDIR) || \
+ $(INSTALLDIR) $(INSTALL_PREFIX)$(SCRIPTDIR)); \
+ $(INSTALL) -c -m 555 metaconfig $(INSTALL_PREFIX)$(SCRIPTDIR)
+
+local_deinstall::
+ $(RM) $(INSTALL_PREFIX)$(SCRIPTDIR)/metaconfig
+
+all:: metalint mlint
+
+local_realclean::
+ $(RM) metalint mlint
+
+all:: mlint
+
+local_realclean::
+ $(RM) mlint
+
+mlint: mlint.SH
+ /bin/sh mlint.SH
+
+metalint: mlint
+ perl $(TOP)/bin/perload -o mlint > $@
+ chmod +rx $@
+
+local_install:: metalint
+ @case '${MFLAGS}' in *[i]*) set +e;; esac; \
+ (set -x; test -d $(INSTALL_PREFIX)$(SCRIPTDIR) || \
+ $(INSTALLDIR) $(INSTALL_PREFIX)$(SCRIPTDIR)); \
+ $(INSTALL) -c -m 555 metalint $(INSTALL_PREFIX)$(SCRIPTDIR)
+
+local_deinstall::
+ $(RM) $(INSTALL_PREFIX)$(SCRIPTDIR)/metalint
+
+all:: metaxref mxref
+
+local_realclean::
+ $(RM) metaxref mxref
+
+all:: mxref
+
+local_realclean::
+ $(RM) mxref
+
+mxref: mxref.SH
+ /bin/sh mxref.SH
+
+metaxref: mxref
+ perl $(TOP)/bin/perload -o mxref > $@
+ chmod +rx $@
+
+local_install:: metaxref
+ @case '${MFLAGS}' in *[i]*) set +e;; esac; \
+ (set -x; test -d $(INSTALL_PREFIX)$(SCRIPTDIR) || \
+ $(INSTALLDIR) $(INSTALL_PREFIX)$(SCRIPTDIR)); \
+ $(INSTALL) -c -m 555 metaxref $(INSTALL_PREFIX)$(SCRIPTDIR)
+
+local_deinstall::
+ $(RM) $(INSTALL_PREFIX)$(SCRIPTDIR)/metaxref
+
+BINFILES = \
+ mconfig \
+ mlint \
+ mxref
+
+BINSH = \
+ mconfig.SH \
+ mlint.SH \
+ mxref.SH
+
+depend:: local_depend
+local_depend::
+ ($(SED) '/^# DO NOT DELETE/q' Makefile && \
+ grep '^\$$grep' $(BINSH) | \
+ $(SED) -e "s/^.*' \([^ ]*\) >>\([^ ]*\)/\2: \1/" \
+ ) > Makefile.new
+ cp Makefile Makefile.bak
+ cp Makefile.new Makefile
+ $(RM) Makefile.new
+
+mconfig mlint mxref: $(TOP)/revision.h
+
+########################################################################
+# Common rules for all Makefiles -- do not edit
+
+all::
+
+clean: sub_clean local_clean
+realclean: sub_realclean local_realclean
+clobber: sub_clobber local_clobber
+
+local_clean::
+ if test -f core; then $(RM) core; fi
+ $(RM) *~ *.o
+
+local_realclean:: local_clean
+
+local_clobber:: local_realclean
+ $(RM) Makefile config.sh
+
+install:: local_install sub_install
+ @exit 0
+
+install.man:: maybe_install.man sub_install.man
+deinstall:: sub_deinstall local_deinstall
+deinstall.man:: sub_deinstall.man maybe_deinstall.man
+
+install.man-no:
+deinstall.man-no:
+
+maybe_install.man: install.man-no
+maybe_deinstall.man: deinstall.man-no
+
+Makefile.SH: Jmakefile
+ -@if test -f $(TOP)/.package; then \
+ if test -f Makefile.SH; then \
+ echo " $(RM) Makefile.SH~; $(MV) Makefile.SH Makefile.SH~"; \
+ $(RM) Makefile.SH~; $(MV) Makefile.SH Makefile.SH~; \
+ fi; \
+ echo " $(JMAKE) -DTOPDIR=$(TOP) -DCURDIR=$(CURRENT)" ; \
+ $(JMAKE) -DTOPDIR=$(TOP) -DCURDIR=$(CURRENT) ; \
+ else touch $@; fi
+
+Makefile: Makefile.SH
+ /bin/sh Makefile.SH
+
+tags::
+ $(CTAGS) -w *.[ch]
+ $(CTAGS) -xw *.[ch] > tags
+
+local_clobber::
+ $(RM) tags
+
+depend::
+
+########################################################################
+# Rules for building in sub-directories -- do not edit
+
+subdirs:
+ @case '${MFLAGS}' in *[ik]*) set +e;; esac; \
+ for i in $(SUBDIRS) ;\
+ do \
+ (cd $$i ; echo $(VERB) "in $(DIR)$$i..."; \
+ $(MAKE) $(MFLAGS) $(FLAGS) $(TARGET)) || exit 1; \
+ done
+
+sub_install::
+ @$(MAKE) subdirs TARGET=install VERB="Installing" FLAGS=
+
+sub_deinstall::
+ @$(MAKE) subdirs TARGET=deinstall VERB="Deinstalling" FLAGS=
+ @echo "Back to $(CURRENT) for "deinstall...
+
+sub_install.man::
+ @$(MAKE) subdirs TARGET=install.man VERB="Installing man pages" FLAGS=
+
+sub_deinstall.man::
+ @$(MAKE) subdirs TARGET=deinstall.man VERB="Deinstalling man pages" FLAGS=
+ @echo "Back to $(CURRENT) for "deinstall.man...
+
+sub_clean::
+ @$(MAKE) subdirs TARGET=clean VERB="Cleaning" FLAGS=
+ @echo "Back to $(CURRENT) for "clean...
+
+sub_realclean::
+ @$(MAKE) subdirs TARGET=realclean VERB="Real cleaning" FLAGS=
+ @echo "Back to $(CURRENT) for "realclean...
+
+sub_clobber::
+ @$(MAKE) subdirs TARGET=clobber VERB="Clobbering" FLAGS=
+ @echo "Back to $(CURRENT) for "clobber...
+
+tag::
+ @case '${MFLAGS}' in *[ik]*) set +e;; esac; \
+ for i in $(SUBDIRS) ;\
+ do \
+ (cd $$i ; echo "Tagging" "in $(DIR)$$i..."; \
+ $(MAKE) $(MFLAGS) tag) || exit 1; \
+ done
+
+Makefiles::
+ @case '${MFLAGS}' in *[ik]*) set +e;; esac; \
+ for i in $(SUBDIRS);\
+ do \
+ echo "Making "Makefiles" in $(DIR)$$i..."; \
+ (cd $$i || exit 1; \
+ if test ! -f Makefile; then /bin/sh Makefile.SH; fi; \
+ $(MAKE) $(MFLAGS) Makefiles) || exit 1;\
+ done
+
+Makefiles.SH:: Makefile.SH
+ @case '${MFLAGS}' in *[ik]*) set +e;; esac; \
+ for i in $(SUBDIRS);\
+ do \
+ case "$(DIR)$$i/" in \
+ */*/*/*/) newtop=../../../..;; \
+ */*/*/) newtop=../../..;; \
+ */*/) newtop=../..;; \
+ */) newtop=..;; \
+ esac; \
+ case "$(TOP)" in \
+ /*) newtop="$(TOP)" ;; \
+ esac; \
+ echo "Making Makefiles.SH in $(DIR)$$i..."; \
+ (cd $$i || exit 1; \
+ if test -f Jmakefile; then \
+ $(MAKE) $(MFLAGS) -f ../Makefile \
+ Makefile TOP=$$newtop CURRENT=$(DIR)$$i && \
+ $(MAKE) $(MFLAGS) Makefiles.SH; \
+ fi; \
+ ) || exit 1; \
+ done
+
+all::
+ @$(MAKE) subdirs TARGET=all VERB="Making all" FLAGS=
+
+local_install::
+local_deinstall::
+local_install.man::
+local_deinstall.man::
+
+########################################################################
+# Dependencies generated by make depend
+# DO NOT DELETE THIS LINE -- make depend relies on it
+
+# Put nothing here or make depend will gobble it up
+.FORCE_DEPEND::
+ @echo "You must run 'make depend' in $(TOP) first."; exit 1
+!NO!SUBS!
+chmod 644 Makefile
+$eunicefix Makefile
+
diff --git a/mcon/NOTES b/mcon/NOTES
new file mode 100644
index 0000000..542910f
--- /dev/null
+++ b/mcon/NOTES
@@ -0,0 +1,174 @@
+This file shortly documents the built-in interpreter and other new
+features from metaconfig.
+
+The notion of "conditional unit" has been added. In the ?MAKE: line,
+each unit whose name begins with a "+" will not be loaded in the
+Configure script unless its exact value is a mandatory. The default
+value specified in ?DEF: will be used instead. If no ?DEF: line is
+found, then the symbol is initialized with a null default value.
+
+In the config.h.SH file, only the necessary symbols are loaded. Note
+that the format in ?H: line has changed. It is no longer necessary to
+write ?H:?%1: to get a line included in config.h. First of all, the %1
+symbol is not defined any more. Secondly, the unit's name is now %< and
+it does not matter whether the name appears first in the ?MAKE: line or
+not. Lastly, metaconfig can guess for itself whether to include a
+symbol or not.
+
+Sometimes, it is necessary to force a given value, because metaconfig is
+not smart enough to guess 100% of the time. See voidflags.U for an
+example (look at the ?C: and ?H: lines and read the comments).
+
+The Myread.U unit changed. It is now able to do variable substitutions,
+and it sets the prompt correctly if there is no supplied default. Thus,
+instead of the old:
+
+ dflt=y
+ rp="Question? [$dflt]"
+ $echo $n "$rp $c"
+ . myread
+
+you must now write:
+
+ dflt=y
+ rp='Question?'
+ . myread
+
+and 'myread' will take care of echoing the question with the default
+put in square brakets.
+
+Likewise, question asking for filenames or pathnames may now use the Getfile.U
+unit to take care of all the burden. The presetting is the same as for myread
+and the answer is finally held in $ans. But the variable $fn must be set to
+indicate the type of file and enable/disable some of the sanity checks. See
+leading comments in Getfile.U. Here is a simple example to locate the active
+file:
+
+ dflt='~news/lib'
+ fn='l~:active'
+ rp='Where is the active file?'
+ . getfile
+ active="$ans"
+
+The user may answer the question by using ~substitution and giving only the
+directory where the active file is located (in which case getfile will try
+to locate a file named 'active' in that directory). A full path may also be
+given of course, if the basename of the file is not 'active'.
+
+The units are now filtered by a built-in interpreter before getting
+loaded in Configure. That way, a Configure script can be more or less
+tuned. See d_gethname.U for a complex example.
+
+All the interpreter commands start with a leading '@'. Possible
+commands include:
+
+o if/elsif/else/end is the traditional conditional construct.
+o define <symbol> tells metaconfig the <symbol> is to be defined.
+
+Expressions in conditional constructs can include the &&, || and !
+operator with same meaning as in the shell. Backslash at the end of a
+line stands for the continuation character. All the symbols in the
+expression stands for themselves, and their value is true if they are
+defined/wanted and false otherwise.
+
+It is possible to include shell and perl test. All the text enclosed in
+single brackets as {<text>} is expanded in a shell as
+
+ if <text> >/dev/null 2>&1; then exit 0; else exit 1; fi
+
+whereas text in double brackets as {{<text>}} is expanded in perl as
+
+ if (<text> {exit 0;} else {exit 1;}
+
+and the exit status is used in the standard way to get a boolean value
+(i.e 0 is true and everything else is false). See Oldconfig.U for an
+example.
+
+Metaconfig's interpreter has standard C operator priority, but you may
+force the evaluation order with parenthesis. A simple error recovery
+attempt is made, so that you should get meaningful error messages.
+
+The simple test ?sym: means "keep the remaining of the line iff the
+symbol is defined" and %sym: is the same for non-definedness.
+
+Some special symbols may be put in a unit and will get expanded,
+provided the ?MAKE: command line is 'wipe' and not 'add'. Here are the
+available symbols:
+
+ <PACKAGENAME> is the name $package as found in .package
+ <MAINTLOC> is the $maintloc variable as found in .pakcage
+ <VERSION> is metaconfig's version number
+ <PATCHLEVEL> is metaconfig's patchlevel
+ <DATE> is the current frozen date as given by `date`
+
+A 'wipe'ed unit is passed through the interpreter too.
+
+It is also possible to declare a symbol obsolete. A warning message
+will be issued if the symbol is used and the Glossary mentions it.
+the "Obsolete" clause. The syntax is:
+
+ ?C:symbol (obsolete list):
+ ?S:symbol (obsolete list):
+
+If metaconfig is used with the -o option, it will generate code to remap
+those old symbols to the new ones, so the old code does not have to be changed
+right away. If you do not use -o, the Obsolete file will still be generated
+to warn you about obsolete symbols but no maping will be done.
+
+The new ?W: line can be use to tie up the destiny of some symbols. The syntax
+is:
+
+ ?W:shell symbols list:C symbol list
+
+and the symbols in the shell list will be defined if one of the C symbols is.
+For instance, unit d_const.U uses the following:
+
+ ?W:%<:const
+
+so that any 'const' usage in the C code will have %< (the unit name) handled
+as a wanted symbol. In particular, this has the interesting side effect of
+loading the unit into Configure when the 'const' keyword is used.
+
+This shell symbol list part may be left empty. For example unit i_time.U uses:
+
+ ?W::timezone
+
+for its side effect: the symbol 'timezone' may now be part of the interpreter
+tests to conditionally load some code into Configure when struct timezone is
+used.
+
+C symbol aliasing can be used to let metaconfig know that the symbol comment
+is to be loaded in config_h.SH even when the main symbol is not used in C.
+For instance, d_const.U writes:
+
+ ?C:HASCONST ~ %<:
+
+so that the HASCONST hype is loaded iff the unit (%<) is wanted. This is why
+the ?H: lines are also explicitly tied to the wanted-ness of the d_const
+symbol, by writing:
+
+ ?H:?%<:#$d_const HASCONST /**/
+ ?H:?%<:#ifndef HASCONST
+ ?H:?%<:#define const
+ ?H:?%<:#endif
+ ?H:.
+
+because we want all those lines to appear in config_h.SH as soon as the d_const
+unit is loaded into Configure.
+
+Because of the new -s (silent) option of Configure, the important messages which
+are to appear even in silent mode must be written on file descriptor #4. Others
+will simply not be echoed under -s. Note that all the questions and default
+answers are written on #4. You should write:
+
+ echo " "
+ echo "Checking to see if......" >&4
+ .....
+ echo "Yes, it does"
+
+which will have the traditional behaviour unless -s is used, in which case only
+the line
+
+ Checking to see if.....
+
+will echo on the terminal.
diff --git a/mcon/README b/mcon/README
new file mode 100644
index 0000000..0a6b26e
--- /dev/null
+++ b/mcon/README
@@ -0,0 +1,24 @@
+This is the root directory for metaconfig.
+
+If you are new to metaconfig, you may wish to have a look at the INTRO
+file, which gives a quick introduction.
+
+The metaconfig you have here is a modified version of Larry Wall's 2.0
+release. The units themselves have been ripped off from some Configure
+scripts (perl 4.0, elm 2.3). They all carry a copyright from me, which
+is not true, but it was automatically produced and I had no time yet to
+set the proper copyrights for each unit.
+
+Although metaconfig, as being part of dist, is covered by the Artistic
+License, a Configure script is not copyrighted and belongs to the
+public domain. Units can be copyrighted, and credits for each unit may
+appear in the generated Configure script, at the author's request.
+
+The manual page for metaconfig is not up-to-date. The built-in
+interpreter and the changes are documented in NOTES.
+
+The units that come from dist 2.0 need to be changed. A script should be
+provided in the final release to do an automatic conversion, which will
+be fine 90% of the time. If you want to see how new features can be used,
+I would recommend you to have a look at Oldconfig.U, d_gethname.U and
+voidflags.U.
diff --git a/mcon/U/AAAAA.U b/mcon/U/AAAAA.U
new file mode 100644
index 0000000..9869673
--- /dev/null
+++ b/mcon/U/AAAAA.U
@@ -0,0 +1,46 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: AAAAA.U,v $
+?RCS: Revision 3.0.1.4 1994/06/20 06:50:26 ram
+?RCS: patch30: changes from Jarkko Hietaniemi are tagged with JHI
+?RCS:
+?RCS: Revision 3.0.1.3 1994/05/06 14:01:39 ram
+?RCS: patch23: initials for Wayne Davison are now WED
+?RCS: patch23: added initials for new unit contributor Andy Dougherty
+?RCS:
+?RCS: Revision 3.0.1.2 1994/01/24 14:01:09 ram
+?RCS: patch16: make metalint shut up on special unit definition for All target
+?RCS:
+?RCS: Revision 3.0.1.1 1993/09/13 15:43:57 ram
+?RCS: patch10: documents initials used for Wayne Davison's contributions
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:04:44 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: The purpose of this file is to supply the head of the Makefile created
+?X: by metaconfig. For this reason it must be first in alphabetical order.
+?X: The leading '+' in front of the unit name is a hint for metalint, since
+?X: the use of that special unit name as a "made" unit is legitimate here.
+?X:
+?MAKE:+All: Finish
+?X:
+?X: Throughout the units, the following initials are used to identify comments:
+?X:
+?X: HMS: Harlan Stenn
+?X: RAM: Raphael Manfredi
+?X: WED: Wayne Davison (was WAD by mistake--RAM)
+?X: ADO: Andy Dougherty
+?X: JHI: Jarkko Hietaniemi
+?X:
+?X: Agreed, this is a weird place to document it, but I couldn't find a better
+?X: place to do so. I've bet on the curiosity of users, who would probably
+?X: want to know what's in this strangely-named file--RAM.
diff --git a/mcon/U/Alpha_mieee.U b/mcon/U/Alpha_mieee.U
new file mode 100644
index 0000000..2f0f5a0
--- /dev/null
+++ b/mcon/U/Alpha_mieee.U
@@ -0,0 +1,41 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 2006, Christian Biere
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:Alpha_mieee: Trylink cat ccflags gccversion
+?MAKE: -pick add $@ %<
+?T:flag result saved_ccflags
+?LINT:change ccflags
+: check whether -mieee should be used
+flag='-mieee'
+case "$gccversion" in
+'');;
+*)
+ $cat >try.c <<EOC
+int main(void)
+{
+#if !(defined(__GNUC__) && (defined(_alpha) || defined(__alpha__)))
+ switch (sizeof(int[-23])) { case 1: case 1: }
+#endif
+ return 0;
+}
+EOC
+ saved_ccflags=$ccflags
+ ccflags="$flag $ccflags"
+ cyn="whether '$flag' should be used" >&4
+ result=''
+ set result
+ eval $trylink
+ case "$result" in
+ "$define") ;;
+ *) ccflags=$saved_ccflags;;
+ esac
+ ;;
+esac
+
diff --git a/mcon/U/Assert.U b/mcon/U/Assert.U
new file mode 100644
index 0000000..76de54d
--- /dev/null
+++ b/mcon/U/Assert.U
@@ -0,0 +1,26 @@
+?RCS:
+?RCS: Copyright (c) 2012 Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:Assert: cat
+?MAKE: -pick add $@ %<
+?F:./static_assert.h
+: static assertion checking include file
+?X:
+?X: C programs can include this file to perform STATIC_ASSERT() checks
+?X: which are done at compile-time and cause the compilation to fail when
+?X: the expression is false.
+?X:
+?X: It is sufficient to compile with: $cc -c $ccflags try.c
+?X: There is no need to link the file to spot the assertion failure.
+?X:
+$cat >static_assert.h <<'EOC'
+#define STATIC_ASSERT(expr) \
+ do { switch (0) { case ((expr) ? 1 : 0): case 0: break; } } while(0)
+EOC
+
diff --git a/mcon/U/Begin.U b/mcon/U/Begin.U
new file mode 100644
index 0000000..d987c46
--- /dev/null
+++ b/mcon/U/Begin.U
@@ -0,0 +1,39 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: Begin.U,v $
+?RCS: Revision 3.0.1.3 1997/02/28 14:56:35 ram
+?RCS: patch61: added Extractall dependency
+?RCS:
+?RCS: Revision 3.0.1.2 1995/01/30 14:25:08 ram
+?RCS: patch49: avoid an empty rmlist: systems might choke on it (WED)
+?RCS:
+?RCS: Revision 3.0.1.1 1994/10/31 09:32:20 ram
+?RCS: patch44: created
+?RCS:
+?X:
+?X: This file comes after option processing had been done and after all
+?X: the default values have been set up. It marks the beginning of questions.
+?X: It is important that Options be listed *after* Myinit to ensure that the
+?X: default initializations performed by Init and Myinit will not clobber
+?X: any setting done on the command line via -D or -U.
+?X:
+?MAKE:Begin: Myinit Options package Extractall
+?MAKE: -pick add $@ %<
+: Eunice requires " " instead of "", can you believe it
+echo " "
+: Here we go...
+echo "Beginning of configuration questions for $package."
+
+?X: Make sure the rm below is given a non-empty list for some systems.
+?X: This is run only when within the UU directory, hence we can safely
+?X: attempt to rm a non-existent 'X' file...
+trap 'echo " "; test -d ../UU && rm -rf X $rmlist; exit 1' 1 2 3 15
+
diff --git a/mcon/U/Checkcc.U b/mcon/U/Checkcc.U
new file mode 100644
index 0000000..3cae05c
--- /dev/null
+++ b/mcon/U/Checkcc.U
@@ -0,0 +1,135 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Copyright (c) 2000, Jarkko Hietaniemi
+?RCS:
+?X:
+?X: This unit produces a bit of shell code that must be dotted in order
+?X: to make quick check on whether the current C compiler is working.
+?X:
+?MAKE:Checkcc ccname ccversion: Myread Warn startsh cat contains test
+?MAKE: -pick add $@ %<
+?S:ccname:
+?S: This can set either by hints files or by Configure. If using
+?S: gcc, this is gcc, and if not, usually equal to cc, unimpressive, no?
+?S: Some platforms, however, make good use of this by storing the
+?S: flavor of the C compiler being used here. For example if using
+?S: the Sun WorkShop suite, ccname will be 'workshop'.
+?S:.
+?S:ccversion:
+?S: This can set either by hints files or by Configure. If using
+?S: a (non-gcc) vendor cc, this variable may contain a version for
+?S: the compiler.
+?S:.
+?F:./checkcc ./trygcc !checktmp
+?V:despair
+?T:trygcc
+?LINT:extern cc rm ccflags ldflags
+?LINT:change cc ccflags
+?LINT:usefile checktmp
+?INIT:ccname=''
+?INIT:ccversion=''
+: generate the trygcc script for later perusal
+cat <<EOS >trygcc
+$startsh
+EOS
+cat <<'EOSC' >>trygcc
+case "$cc" in
+'') ;;
+*) $rm -f try try.*
+ $cat >try.c <<EOM
+int main(int argc, char *argv[]) {
+ (void) argc;
+ (void) argv;
+ return 0;
+}
+EOM
+ if $cc -o try $ccflags $ldflags try.c; then
+ :
+ else
+ echo "Uh-oh, the C compiler '$cc' doesn't seem to be working." >&4
+ despair=yes
+ trygcc=yes
+ case "$cc" in
+ *gcc*) trygcc=no ;;
+ esac
+ case "`$cc -v -c try.c 2>&1`" in
+ *gcc*) trygcc=no ;;
+ esac
+ if $test X"$trygcc" = Xyes; then
+ if gcc -o try -c try.c; then
+ echo " "
+ echo "You seem to have a working gcc, though." >&4
+ rp="Would you like to use it?"
+ dflt=y
+ if $test -f myread; then
+ . ./myread
+ else
+ if $test -f UU/myread; then
+ . ./UU/myread
+ else
+ echo "Cannot find myread, sorry. Aborting." >&2
+ exit 1
+ fi
+ fi
+ case "$ans" in
+ [yY]*) cc=gcc; ccname=gcc; ccflags=''; despair=no;
+?X: Look whether we have 'call-back units' generated by hints that would
+?X: seemingly affect the compiling environment.
+ $cat *.cbu >checktmp 2>/dev/null
+ if $contains ccflags checktmp >/dev/null; then
+ ./warn 4>&4 <<EOM
+Any previous setting of the C compiler flags has been lost.
+It may be necessary to pass -Dcc=gcc to Configure right away.
+EOM
+ fi;;
+ esac
+ fi
+ fi
+ fi
+ $rm -f try try.*
+ ;;
+esac
+EOSC
+
+: generate the checkcc script for later perusal
+cat <<EOS >checkcc
+$startsh
+EOS
+cat <<'EOSC' >>checkcc
+case "$cc" in
+'') ;;
+*) $rm -f try try.*
+ $cat >try.c <<EOM
+int main(int argc, char *argv[]) {
+ (void) argc;
+ (void) argv;
+ return 0;
+}
+EOM
+ if $cc -o try $ccflags $ldflags try.c; then
+ :
+ else
+ if $test X"$despair" = Xyes; then
+ echo "Uh-oh, the C compiler '$cc' doesn't seem to be working." >&4
+ fi
+ $cat >&4 <<EOM
+You need to find a working C compiler.
+Either (purchase and) install the C compiler supplied by your OS vendor,
+or for a free C compiler try http://gcc.gnu.org/
+I cannot continue any further, aborting.
+EOM
+ exit 1
+ fi
+ $rm -f try try.*
+ ;;
+esac
+EOSC
+
diff --git a/mcon/U/Chk_MANI.U b/mcon/U/Chk_MANI.U
new file mode 100644
index 0000000..e991a1a
--- /dev/null
+++ b/mcon/U/Chk_MANI.U
@@ -0,0 +1,88 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: Chk_MANI.U,v $
+?RCS: Revision 3.0.1.2 1997/02/28 14:57:25 ram
+?RCS: patch61: added support for src.U
+?RCS:
+?RCS: Revision 3.0.1.1 1994/10/31 09:33:14 ram
+?RCS: patch44: now lists Begin instead of Myinit in its dependencies
+?RCS: patch44: leading comment now explains how this unit is included
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:04:45 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: This unit checks the package by making sure every file listed in MANIFEST
+?X: is present. It is systematically "included" via the Finish unit (which
+?X: is always present in every Configure script), although it may result in
+?X: an empty inclusion when no MANIFEST is present.
+?X:
+?MAKE:Chk_MANI: Begin c n rsrc
+?MAKE: -pick wipe $@ %<
+?T:filelist ans tmppwd
+?X: This check happens at metaconfig-time, so it's ok to hard-code the path.
+@if {test -f ../MANIFEST}
+: Now test for existence of everything in MANIFEST
+echo " "
+if test -f "$rsrc/MANIFEST"; then
+ echo "First let's make sure your kit is complete. Checking..." >&4
+?X:
+?X: Files spelled uppercased and beginning with PACK are produced by the
+?X: shell archive builder and may be removed by the user. Usually, they are
+?X: not listed in the MANIFEST file, but you never know...
+?X:
+?X: "split -l" is the new way of running a split, but we also try the older way
+?X:
+ awk '$1 !~ /PACK[A-Z]+/ {print $1}' "$rsrc/MANIFEST" | \
+ (split -l 50 2>/dev/null || split -50)
+ rm -f missing
+ tmppwd=`pwd`
+ for filelist in x??; do
+ (cd "$rsrc"; ls `cat "$tmppwd/$filelist"` \
+ >/dev/null 2>>"$tmppwd/missing")
+ done
+ if test -s missing; then
+ cat missing >&4
+ cat >&4 <<'EOM'
+
+THIS PACKAGE SEEMS TO BE INCOMPLETE.
+
+You have the option of continuing the configuration process, despite the
+distinct possibility that your kit is damaged, by typing 'y'es. If you
+do, don't blame me if something goes wrong. I advise you to type 'n'o
+and contact the author (<MAINTLOC>).
+
+EOM
+?X: Can't use $echo at this early stage
+ echo $n "Continue? [n] $c" >&4
+ read ans
+ case "$ans" in
+ y*)
+ echo "Continuing..." >&4
+ rm -f missing
+ ;;
+ *)
+?X:
+?X: Use kill and not exit, so that the trap gets executed to clean up
+?X:
+ echo "ABORTING..." >&4
+ kill $$
+ ;;
+ esac
+ else
+ echo "Looks good..."
+ fi
+else
+ echo "There is no MANIFEST file. I hope your kit is complete !"
+fi
+rm -f missing x??
+
+@end
diff --git a/mcon/U/Chk_whoami.U b/mcon/U/Chk_whoami.U
new file mode 100644
index 0000000..b002989
--- /dev/null
+++ b/mcon/U/Chk_whoami.U
@@ -0,0 +1,25 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: Chk_whoami.U,v $
+?RCS: Revision 3.0 1993/08/18 12:04:46 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: This unit makes sure we don't try to include whoami.h if uname() exists.
+?X:
+?MAKE:Chk_whoami: d_uname i_whoami
+?MAKE: -pick add $@ %<
+?LINT:change i_whoami
+: weed out incompatibilities
+case "$d_uname" in
+ "$define") i_whoami="$undef" ;;
+esac
+
diff --git a/mcon/U/Compile.U b/mcon/U/Compile.U
new file mode 100644
index 0000000..417f9ec
--- /dev/null
+++ b/mcon/U/Compile.U
@@ -0,0 +1,63 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Copyright (c) 1998 Andy Dougherty
+?RCS:
+?RCS: You may distribute under the terms of either the GNU General Public
+?RCS: License or the Artistic License, as specified in the README file.
+?RCS:
+?RCS:
+?X:
+?X: This unit is just a quick shorthand for the compile command
+?X: to be used in all the other metaconfig units.
+?X:
+?MAKE:Compile: +cc +optimize +ccflags +ldflags +libs
+?MAKE: -pick add $@ %<
+?LINT:define compile compile_ok
+?V:compile compile_ok mc_file
+?S:compile:
+?S: This shell variable is used internally by Configure to provide
+?S: a convenient shorthand for the typical compile command, namely
+?S: $cc $optimize $ccflags $ldflags -o $1 $1.c $libs > /dev/null 2>&1
+?S: Note that the output filename does _not_ include the _exe
+?S: extension. Instead we assume that the linker will be
+?S: "helpful" and automatically appending the correct suffix.
+?S: OS/2 users will apparently need to supply the -Zexe flag to
+?S: get this behavior.
+?S:
+?S: To use this variable, say something like:
+?S: echo 'int main() { exit(0); }' > try.c
+?S: set try
+?S: if eval $compile; then
+?S: echo "success" # and do whatever . . .
+?S: else
+?S: echo "failure" # and do whatever . . .
+?S: fi
+?S: To add extra flags cc flags (e.g. -DWHATEVER) just put them
+?S: in $*, e.g.
+?S: set try -DTRY_THIS_FLAG
+?S:.
+?S:compile_ok:
+?S: This shell variable is used internally by Configure to provide
+?S: a convenient shorthand for the typical compile command that you
+?S: expect to work ok. It is the same as $compile, except we
+?S: deliberately let the user see any error messages.
+?S:.
+: define a shorthand compile call
+compile='
+mc_file=$1;
+shift;
+$cc -o ${mc_file} $optimize $ccflags $ldflags $* ${mc_file}.c $libs > /dev/null 2>&1;'
+: define a shorthand compile call for compilations that should be ok.
+compile_ok='
+mc_file=$1;
+shift;
+$cc -o ${mc_file} $optimize $ccflags $ldflags $* ${mc_file}.c $libs;'
+
diff --git a/mcon/U/Config_h.U b/mcon/U/Config_h.U
new file mode 100644
index 0000000..8b8c657
--- /dev/null
+++ b/mcon/U/Config_h.U
@@ -0,0 +1,114 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: Config_h.U,v $
+?RCS: Revision 3.0.1.5 1997/02/28 14:57:43 ram
+?RCS: patch61: added support for src.U
+?RCS:
+?RCS: Revision 3.0.1.4 1995/09/25 09:10:49 ram
+?RCS: patch59: commented the purpose of the #un-def directive
+?RCS:
+?RCS: Revision 3.0.1.3 1995/01/30 14:25:39 ram
+?RCS: patch49: typo fixes in leading config.h comment (WED)
+?RCS:
+?RCS: Revision 3.0.1.2 1993/08/24 12:13:20 ram
+?RCS: patch3: added TOP as a local shell temporary variable
+?RCS:
+?RCS: Revision 3.0.1.1 1993/08/19 06:42:20 ram
+?RCS: patch1: leading config.sh searching was not aborting properly
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:04:47 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: This file ends up producing the config_h.SH script, which is run to produce
+?X: the config.h file. The file ./.Config_h below contains all the ?H: lines
+?X: extracted out of all the units. Metaconfig itself adds the !GROK!THIS!.
+?X: Note that this code isn't included into Configure, but must be shipped with.
+?X:
+?X: For those who wish to know why the file is config_h.SH instead of the more
+?X: natural config.h.SH, well... it is to support systems like MS-DOG. Only one
+?X: 'dot' is allowed within the file name, as it is part of the "extension" of
+?X: the file. MS-DOG will not let you have two 'dots' because that would mean
+?X: two "extensions".
+?X:
+?MAKE:Config_h: Id End Config_sh Obsol_h myuname cf_time cf_by package src
+?MAKE: -pick c_h_weed $@ %<
+?MAKE: -pick c_h_weed $@ ./Config_h
+?MAKE: -pick c_h_weed $@ ./Obsol_h
+?T:CONFIG TOP
+?LINT:unclosed !GROK!THIS!
+?LINT:extern CONFIG_H CONFIG_SH
+?LINT:change CONFIG_H CONFIG_SH
+?LINT:nocomment
+case "$CONFIG_SH" in
+'') CONFIG_SH=config.sh;;
+esac
+case "$CONFIG_H" in
+'') CONFIG_H=config.h;;
+esac
+case $CONFIG in
+'')
+ if test -f $CONFIG_SH; then TOP=.;
+ elif test -f ../$CONFIG_SH; then TOP=..;
+ elif test -f ../../$CONFIG_SH; then TOP=../..;
+ elif test -f ../../../$CONFIG_SH; then TOP=../../..;
+ elif test -f ../../../../$CONFIG_SH; then TOP=../../../..;
+ else
+ echo "Can't find $CONFIG_SH."; exit 1
+ fi
+ . $TOP/$CONFIG_SH
+ ;;
+esac
+?X: Make sure we are in the directory where the .SH file is located.
+case "$0" in
+*/*) cd `expr X$0 : 'X\(.*\)/'` ;;
+esac
+echo "Extracting $CONFIG_H (with variable substitutions)"
+?X:
+?X: Since we unconditionally translate leading #undef into /*#define, we're
+?X: stuck when we really want to have a #undef in config.h. That's why there
+?X: is provision here for #un-def, which is translated back into #undef after
+?X: all original #undef have been processed.
+?X:
+?X: Previously, we changed all
+?X: #undef FOO /**/
+?X: into
+?X: /*#define FOO /**/
+?X: The xlc compiler (available on IBM's AIX) complains that this is
+?X: an illegal attempt to write a nested comment, and warns against it.
+?X: There's apparently no way to shut the compiler up, either.
+?X: This sed command from Hallvard B Furuseth <h.b.furuseth@usit.uio.no>
+?X: changes it to
+?X: /*#define FOO / **/
+sed <<!GROK!THIS! >$CONFIG_H -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un-def!#undef!'
+/*
+ * This file was produced by running the config_h.SH script, which
+ * gets its values from $CONFIG_SH, which is generally produced by
+ * running Configure.
+ *
+ * Feel free to modify any of this as the need arises. Note, however,
+ * that running config_h.SH again will wipe out any changes you've made.
+ * For a more permanent change edit $CONFIG_SH and rerun config_h.SH.
+ *
+ * \$Id$
+ */
+
+/*
+ * Package name : $package
+ * Source directory : $src
+ * Configuration time: $cf_time
+ * Configured by : $cf_by
+ * Target system : $myuname
+ */
+
+#ifndef _config_h_
+#define _config_h_
+
diff --git a/mcon/U/Config_sh.U b/mcon/U/Config_sh.U
new file mode 100644
index 0000000..bb47b7b
--- /dev/null
+++ b/mcon/U/Config_sh.U
@@ -0,0 +1,110 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: Config_sh.U,v $
+?RCS: Revision 3.0.1.3 1997/02/28 14:57:53 ram
+?RCS: patch61: added support for src.U
+?RCS:
+?RCS: Revision 3.0.1.2 1995/01/11 14:53:31 ram
+?RCS: patch45: moved path stripping from d_portable.U to end of Configure
+?RCS:
+?RCS: Revision 3.0.1.1 1994/10/29 15:50:37 ram
+?RCS: patch36: added ?F: line for metalint file checking
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:04:48 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: This unit ends up producing the config.sh script, which contains all the
+?X: definitions figured out by Configure. The add.Config_sh command knows
+?X: which variables need to be remembered. It also adds the EOT (ends the
+?X: here document redirection with variable substitution).
+?X:
+?MAKE:Config_sh: cf_time cf_by test spitshell startsh myuname Myread \
+ End Obsol_sh Loc +d_portable package src cat sed
+?MAKE: -pick add.Config_sh $@ %<
+?MAKE: -pick add $@ ./Obsol_sh
+?MAKE: -pick close.Config_sh $@ %<
+?F:!config.over !config.arch
+?T:file sfile xsed
+?LINT:unclosed EOT
+: back to where it started
+if test -d ../UU; then
+ cd ..
+fi
+
+: configuration may be unconditionally patched via a 'config.arch' file
+if $test -f config.arch; then
+ echo "I see a config.arch file, loading it." >&4
+ . ./config.arch
+fi
+
+: configuration may be patched via a 'config.over' file
+if $test -f config.over; then
+ echo " "
+ dflt=y
+ rp='I see a config.over file. Do you wish to load it?'
+ . UU/myread
+ case "$ans" in
+ n*) echo "OK, I'll ignore it.";;
+ *) . ./config.over
+ echo "Configuration override changes have been loaded."
+ ;;
+ esac
+fi
+
+@if d_portable
+: in case they want portability, strip down executable paths
+?X:
+?X: Strip down paths in located executables. For each file, e.g. vi, there
+?X: is a $vi variable whose value is for instance '/usr/bin/vi'. By resetting
+?X: $vi to 'vi', we rely on the PATH variable to locate the executable...
+?X: In order to allow vi='/usr/bin/nvi' which will strip down to vi='nvi',
+?X: we can't just say 'eval $file="\$file"', we have to recourse to sed.
+?X: We don't use basename since it is less portable than sed.
+?X:
+case "$d_portable" in
+"$define")
+ echo " "
+ echo "Stripping down executable paths..." >&4
+ xsed=$sed
+ for file in $loclist $trylist; do
+ eval sfile="\$$file"
+ sfile=`echo $sfile | $xsed -e 's,.*/\(.*\),\1,'`
+ eval $file="$sfile"
+ done
+ ;;
+esac
+
+@end
+: create config.sh file
+echo " "
+echo "Creating config.sh..." >&4
+$spitshell <<EOT >config.sh
+$startsh
+#
+# This file was produced by running the Configure script. It holds all the
+# definitions figured out by Configure. Should you modify one of these values,
+# do not forget to propagate your changes by running "Configure -der". You may
+# instead choose to run each of the .SH files by yourself, or "Configure -S".
+#
+
+# Package name : $package
+# Source directory : $src
+# Configuration time: $cf_time
+# Configured by : $cf_by
+# Target system : $myuname
+
+EOT
+?X: Command line options are saved by the Options.U unit in the
+?X: temporary file UU/cmdline.opt
+$test -f UU/cmdline.opt && $cat UU/cmdline.opt >> config.sh
+$spitshell <<EOT >>config.sh
+
diff --git a/mcon/U/Configdir.U b/mcon/U/Configdir.U
new file mode 100644
index 0000000..7d81fbc
--- /dev/null
+++ b/mcon/U/Configdir.U
@@ -0,0 +1,28 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: Configdir.U,v $
+?RCS: Revision 3.0.1.1 1997/02/28 14:58:36 ram
+?RCS: patch61: have README explicitly mention the package name
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:04:49 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:Configdir: package
+?MAKE: -pick add $@ %<
+: create .config dir to save info across Configure sessions
+test -d ../.config || mkdir ../.config
+cat >../.config/README <<EOF
+This directory created by Configure to save information that should
+persist across sessions for $package.
+
+You may safely delete it if you wish.
+EOF
+
diff --git a/mcon/U/Cppsym.U b/mcon/U/Cppsym.U
new file mode 100644
index 0000000..8588b7e
--- /dev/null
+++ b/mcon/U/Cppsym.U
@@ -0,0 +1,286 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: Cppsym.U,v $
+?RCS: Revision 3.0.1.5 1995/05/12 11:59:11 ram
+?RCS: patch54: split awk command onto two lines for older awks (ADO)
+?RCS:
+?RCS: Revision 3.0.1.4 1995/01/11 14:55:57 ram
+?RCS: patch45: new cc vs. cpp symbol checking suggested by JHI
+?RCS: patch45: added more cpp symbols (JHI)
+?RCS:
+?RCS: Revision 3.0.1.3 1994/10/29 15:51:32 ram
+?RCS: patch36: added ?F: line for metalint file checking
+?RCS: patch36: new symbols ardent and titan (ADO)
+?RCS:
+?RCS: Revision 3.0.1.2 1994/06/20 06:53:32 ram
+?RCS: patch30: extended cpp symbol lookup list (JHI)
+?RCS: patch30: renamed attrlist symbol into al for brevity
+?RCS:
+?RCS: Revision 3.0.1.1 1993/12/15 08:14:14 ram
+?RCS: patch15: added new cpp symbols __bsdi__ and BSD_NET2
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:04:50 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: This unit produces a shell script called Cppsym, which can be used to
+?X: determine whether any in a list of symbols is defined by the C compilation
+?X: chain (C preprocessor symbols plus C compiler native ones).
+?X: It can determine the status of any symbol, though the symbols in $al
+?X: are more easily determined. If you want to add to $al you can do
+?X: it in Myinit.U.
+?X:
+?MAKE:Cppsym ccsymbols cppsymbols cppccsymbols: run \
+ eunicefix Guess awk cat tr sed sort rm startsh osname \
+ +cc gccversion test comm uniq echo Options trnl \
+ optimize ccflags ldflags libs
+?MAKE: -pick add $@ %<
+?S:ccsymbols:
+?S: The variable contains the symbols defined by the C compiler alone.
+?S: The symbols defined by cpp or by cc when it calls cpp are not in
+?S: this list, see cppsymbols and cppccsymbols.
+?S: The list is a space-separated list of symbol=value tokens.
+?S:.
+?S:cppsymbols:
+?S: The variable contains the symbols defined by the C preprocessor
+?S: alone. The symbols defined by cc or by cc when it calls cpp are
+?S: not in this list, see ccsymbols and cppccsymbols.
+?S: The list is a space-separated list of symbol=value tokens.
+?S:.
+?S:cppccsymbols:
+?S: The variable contains the symbols defined by the C compiler
+?S: when it calls cpp. The symbols defined by the cc alone or cpp
+?S: alone are not in this list, see ccsymbols and cppsymbols.
+?S: The list is a space-separated list of symbol=value tokens.
+?S:.
+?T:also symbols i postprocess_cc_v flags
+?F:./Cppsym
+?F:!Cppsym.true !Cppsym.know !ccsym.com !ccsym.cpp !ccsym.own
+: determine known pre-processor and compiler symbols
+echo " "
+$echo "Guessing which symbols your C compiler and preprocessor define..." >&4
+?X:
+?X: The symbol list is in alpha order for ease of maintenance...
+?X:
+?X: Lots of new symbols (mostly rummaged from gcc), courtesy of
+?X: Jarkko Hietaniemi <jhi@snakemail.hut.fi> -- RAM, 06/06/94
+?X:
+?X: If your symbol is mixed case, just add it as-is.
+?X: All symbols will be transformed to both all-lower and all-upper.
+?X: Also drop any leading/trailing underscores, the scan will try all those.
+?X:
+$cat <<'EOSH' > Cppsym.know
+a29k ABI64 aegis AES_SOURCE AIX AIX32 AIX370
+AIX41 AIX42 AIX43 AIX_SOURCE aixpc ALL_SOURCE
+alliant alpha am29000 AM29000 AMD64 amiga AMIGAOS AMIX
+ansi ANSI_C_SOURCE apollo ardent ARM32 atarist att386 att3b
+BeOS BIG_ENDIAN BIT_MSF bsd BSD bsd43 bsd4_2 bsd4_3 BSD4_3 bsd4_4
+BSD_4_3 BSD_4_4 BSD_NET2 BSD_TIME BSD_TYPES BSDCOMPAT bsdi
+bull c cadmus clipper CMU COFF COMPILER_VERSION
+concurrent convex cpu cray CRAY CRAYMPP ctix CX_UX
+CYGWIN DGUX DGUX_SOURCE DJGPP dmert DOLPHIN DPX2 DSO
+Dynix DynixPTX ELF encore EPI EXTENSIONS FAVOR_BSD
+FILE_OFFSET_BITS FreeBSD GCC_NEW_VARARGS gcos gcx gimpel
+GLIBC GLIBC_MINOR
+GNU_SOURCE GNUC GNUC_MINOR GNU_LIBRARY GO32 gould GOULD_PN
+H3050R H3050RX hbullx20 hcx host_mips
+hp200 hp300 hp700 HP700 hp800 hp9000
+hp9000s200 hp9000s300 hp9000s400 hp9000s500
+hp9000s700 hp9000s800 hp9k8 hp_osf hppa hpux HPUX_SOURCE
+i186 i286 i386 i486 i586 i686 i8086 i80960 i860 I960
+IA64 iAPX286 ibm ibm032 ibmesa IBMR2 ibmrt ILP32 ILP64
+INLINE_INTRINSICS INTRINSICS INT64 interdata is68k ksr1
+LANGUAGE_C LARGE_FILE_API LARGEFILE64_SOURCE
+LARGEFILE_SOURCE LFS64_LARGEFILE LFS_LARGEFILE
+Linux LITTLE_ENDIAN LONG64 LONG_DOUBLE LONG_LONG
+LONGDOUBLE LONGLONG LP64 luna luna88k Lynx
+M68000 m68k m88100 m88k M88KBCS_TARGET M_COFF
+M_I186 M_I286 M_I386 M_I8086 M_I86 M_I86SM M_SYS3
+M_SYS5 M_SYSIII M_SYSV M_UNIX M_XENIX MACH machine MachTen
+MATH_HAS_NO_SIDE_EFFECTS
+mc300 mc500 mc68000 mc68010 mc68020 mc68030 mc68040
+mc68060 mc68k mc68k32 mc700 mc88000 mc88100 merlin
+mert MiNT mips MIPS_FPSET MIPS_ISA MIPS_SIM MIPS_SZINT
+MIPS_SZLONG MIPS_SZPTR MIPSEB MIPSEL MODERN_C motorola
+mpeix MSDOS MTXINU MULTIMAX mvs MVS n16 ncl_el ncl_mr
+NetBSD news1500 news1700 news1800 news1900 news3700
+news700 news800 news900 NeXT NLS nonstopux ns16000 ns32000
+ns32016 ns32332 ns32k nsc32000
+OCS88 OEMVS OpenBSD os OS2 OS390 osf OSF1 OSF_SOURCE
+pa_risc PA_RISC1_1 PA_RISC2_0 PARAGON parisc
+pc532 pdp11 PGC PIC plexus PORTAR posix
+POSIX1B_SOURCE POSIX2_SOURCE POSIX4_SOURCE
+POSIX_C_SOURCE POSIX_SOURCE POWER
+PROTOTYPES PWB pyr QNX R3000 REENTRANT RES Rhapsody RISC6000
+riscix riscos RT S390 SA110 scs SCO sequent sgi SGI_SOURCE SH3 sinix
+SIZE_INT SIZE_LONG SIZE_PTR SOCKET_SOURCE SOCKETS_SOURCE
+sony sony_news sonyrisc sparc sparclite spectrum
+stardent stdc STDC_EXT stratos sun sun3 sun386
+Sun386i svr3 svr4 SVR4_2 SVR4_SOURCE svr5
+SX system SYSTYPE_BSD SYSTYPE_BSD43 SYSTYPE_BSD44
+SYSTYPE_SVR4 SYSTYPE_SVR5 SYSTYPE_SYSV SYSV SYSV3 SYSV4 SYSV5
+sysV68 sysV88 Tek4132 Tek4300 titan
+TM3200 TM5400 TM5600
+tower tower32 tower32_200 tower32_600 tower32_700
+tower32_800 tower32_850 tss
+u370 u3b u3b2 u3b20 u3b200 u3b20d u3b5
+ultrix UMAXV UnicomPBB UnicomPBD UNICOS UNICOSMK
+unix UNIX95 UNIX99 unixpc unos
+USE_BSD USE_FILE_OFFSET64 USE_GNU USE_ISOC9X USE_LARGEFILE USE_LARGEFILE64
+USE_MISC USE_POSIX USE_POSIX199309 USE_POSIX199506 USE_POSIX2
+USE_REENTRANT USE_SVID USE_UNIX98 USE_XOPEN USE_XOPEN_EXTENDED
+USGr4 USGr4_2
+Utek UTek UTS UWIN uxpm uxps vax venix VMESA vms xenix Xenix286
+XOPEN_SOURCE XOPEN_SOURCE_EXTENDED XPG2 XPG2_EXTENDED
+XPG3 XPG3_EXTENDED XPG4 XPG4_EXTENDED
+z8000
+EOSH
+?X: Maybe put other stuff here too.
+cat <<EOSH >>Cppsym.know
+$osname
+EOSH
+./tr '[a-z]' '[A-Z]' < Cppsym.know > Cppsym.a
+./tr '[A-Z]' '[a-z]' < Cppsym.know > Cppsym.b
+$cat Cppsym.know > Cppsym.c
+$cat Cppsym.a Cppsym.b Cppsym.c | $tr ' ' $trnl | $sort | $uniq > Cppsym.know
+$rm -f Cppsym.a Cppsym.b Cppsym.c
+cat <<EOSH > Cppsym
+$startsh
+if $test \$# -gt 0; then
+ echo \$* | $tr " " "$trnl" | ./Cppsym.try > Cppsym.got
+ if $test -s Cppsym.got; then
+ $rm -f Cppsym.got
+ exit 0
+ fi
+ $rm -f Cppsym.got
+ exit 1
+else
+ $tr " " "$trnl" | ./Cppsym.try
+ exit 0
+fi
+EOSH
+chmod +x Cppsym
+$eunicefix Cppsym
+?X: The below awk script will die a horrible death if
+?X: some of the tested symbols are not long ints.
+?X: Also, we do not make difference between just defined and defined zero.
+cat <<EOSH > Cppsym.try
+$startsh
+cat <<'EOCP' > try.c
+#include <stdio.h>
+int main() {
+EOCP
+?X: The length($1) command guards against possible empty entries.
+?X: The awk snippet is know to give heartburn to UNICOS/mk awk.
+$awk \\
+EOSH
+cat <<'EOSH' >> Cppsym.try
+'length($1) > 0 {
+ printf "#ifdef %s\n#if %s+0\nprintf(\"%s=%%ld\\n\", (long)%s);\n#else\nprintf(\"%s\\n\");\n#endif\n#endif\n", $1, $1, $1, $1, $1
+ printf "#ifdef _%s\n#if _%s+0\nprintf(\"_%s=%%ld\\n\", (long)_%s);\n#else\nprintf(\"_%s\\n\");\n#endif\n#endif\n", $1, $1, $1, $1, $1
+ printf "#ifdef __%s\n#if __%s+0\nprintf(\"__%s=%%ld\\n\", (long)__%s);\n#else\nprintf(\"__%s\\n\");\n#endif\n#endif\n", $1, $1, $1, $1, $1
+ printf "#ifdef __%s__\n#if __%s__+0\nprintf(\"__%s__=%%ld\\n\", (long)__%s__);\n#else\nprintf(\"__%s__\\n\");\n#endif\n#endif\n", $1, $1, $1, $1, $1
+}' >> try.c
+echo 'return 0;}' >> try.c
+EOSH
+cat <<EOSH >> Cppsym.try
+flags="$ccflags"
+case "$osname-$gccversion" in
+irix-) flags="\$flags -woff 1178" ;;
+os2-*) flags="\$flags -Zlinker /PM:VIO" ;;
+esac
+$cc -o try $optimize \$flags $ldflags try.c $libs && $run ./try
+EOSH
+chmod +x Cppsym.try
+$eunicefix Cppsym.try
+./Cppsym < Cppsym.know > Cppsym.true
+: now check the C compiler for additional symbols
+?X: suggested by Jarkko Hietaniemi <jhi@snakemail.hut.fi>, thanks!
+postprocess_cc_v=''
+case "$osname" in
+aix) postprocess_cc_v="|$tr , ' '" ;;
+esac
+$cat >ccsym <<EOS
+$startsh
+$cat >tmp.c <<EOF
+extern int foo;
+EOF
+for i in \`$cc -v -c tmp.c 2>&1 $postprocess_cc_v\`
+do
+ case "\$i" in
+ -D*) echo "\$i" | $sed 's/^-D//';;
+ -A*) $test "$gccversion" && echo "\$i" | $sed 's/^-A//' | $sed 's/\(.*\)(\(.*\))/\1=\2/';;
+ esac
+done
+$rm -f try.c
+EOS
+postprocess_cc_v=''
+chmod +x ccsym
+$eunicefix ccsym
+./ccsym > ccsym1.raw
+?X: AIX complains if $uniq is passed an empty file. ($sort apparently
+?X: doesn't care.) --AD 14 July 1998
+if $test -s ccsym1.raw; then
+ $sort ccsym1.raw | $uniq >ccsym.raw
+else
+ mv ccsym1.raw ccsym.raw
+fi
+
+?X: canonicalize symbols for easier sort/uniq/comm usage: append =1 if no = sign
+?X: the awk script must be on two lines for older awk programs, sigh! -- ADO
+$awk '/\=/ { print $0; next }
+ { print $0"=1" }' ccsym.raw >ccsym.list
+$awk '/\=/ { print $0; next }
+ { print $0"=1" }' Cppsym.true >ccsym.true
+$comm -13 ccsym.true ccsym.list >ccsym.own
+$comm -12 ccsym.true ccsym.list >ccsym.com
+$comm -23 ccsym.true ccsym.list >ccsym.cpp
+also=''
+if $test -z ccsym.raw; then
+ echo "Your C compiler doesn't seem to define any symbols!" >&4
+ echo " "
+ echo "However, your C preprocessor defines the following symbols:"
+ $cat Cppsym.true
+ ccsymbols=''
+ cppsymbols=`$cat Cppsym.true`
+ cppsymbols=`echo $cppsymbols`
+ cppccsymbols="$cppsymbols"
+else
+ if $test -s ccsym.com; then
+ echo "Your C compiler and pre-processor define these symbols:"
+ $sed -e 's/\(..*\)=.*/\1/' ccsym.com
+ also='also '
+ symbols='ones'
+ cppccsymbols=`$cat ccsym.com`
+ cppccsymbols=`echo $cppccsymbols`
+ $test "$silent" || sleep 1
+ fi
+ if $test -s ccsym.cpp; then
+ $test "$also" && echo " "
+ echo "Your C pre-processor ${also}defines the following symbols:"
+ $sed -e 's/\(..*\)=.*/\1/' ccsym.cpp
+ also='further '
+ cppsymbols=`$cat ccsym.cpp`
+ cppsymbols=`echo $cppsymbols`
+ $test "$silent" || sleep 1
+ fi
+ if $test -s ccsym.own; then
+ $test "$also" && echo " "
+ echo "Your C compiler ${also}defines the following cpp symbols:"
+ $sed -e 's/\(..*\)=1/\1/' ccsym.own
+ $sed -e 's/\(..*\)=.*/\1/' ccsym.own | $uniq >>Cppsym.true
+ ccsymbols=`$cat ccsym.own`
+ ccsymbols=`echo $ccsymbols`
+ $test "$silent" || sleep 1
+ fi
+fi
+$rm -f Cppsym.know Cppsym.true
+
diff --git a/mcon/U/Cross.U b/mcon/U/Cross.U
new file mode 100644
index 0000000..7f1df8a
--- /dev/null
+++ b/mcon/U/Cross.U
@@ -0,0 +1,350 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Copyright (c) 2001 Jarkko Hietaniemi
+?RCS:
+?MAKE:run to from targetarch usecrosscompile: src awk cat grep test rm \
+ echo sed mkdir cp touch chmod
+?MAKE: -pick add $@ %<
+?Y:TOP
+?S:usecrosscompile:
+?S: This variable conditionally defines the USE_CROSS_COMPILE symbol,
+?S: and indicates that our package has been cross-compiled.
+?S:.
+?S:run:
+?S: This variable contains the command used by Configure
+?S: to copy and execute a cross-compiled executable in the
+?S: target host. Useful and available only during the build.
+?S: Empty string '' if not cross-compiling.
+?S:.
+?S:from:
+?S: This variable contains the command used by Configure
+?S: to copy files from the target host. Useful and available
+?S: only during the build.
+?S: The string ':' if not cross-compiling.
+?S:.
+?S:to:
+?S: This variable contains the command used by Configure
+?S: to copy to from the target host. Useful and available
+?S: only during the build.
+?S: The string ':' if not cross-compiling.
+?S:.
+?S:targetarch:
+?S: If cross-compiling, this variable contains the target architecture.
+?S: If not, this will be empty.
+?S:.
+?C:USE_CROSS_COMPILE:
+?C: This symbol, if defined, indicates that the package is being
+?C: cross-compiled.
+?C:.
+?C:CROSS_TARGET_ARCH:
+?C: This symbol, if defined, indicates the target architecture
+?C: the package has been cross-compiled to.
+?C: Undefined if not a cross-compile.
+?C:.
+?H:?usecrosscompile:#ifndef USE_CROSS_COMPILE
+?H:?usecrosscompile:#$usecrosscompile USE_CROSS_COMPILE /**/
+?H:?usecrosscompile:#define CROSS_TARGET_ARCH "$targetarch" /**/
+?H:?usecrosscompile:#endif
+?H:.
+?T:croak pwd exe f q i j cwd
+?LINT:extern usecrosscompile
+?LINT:extern cc
+?LINT:extern usrinc
+?LINT:change usrinc
+?LINT:change ar
+?LINT:change nm
+?LINT:change ranlib
+?LINT:extern targethost
+?LINT:extern targetdir
+?LINT:change targetdir
+?LINT:extern targetuser
+?LINT:change targetuser
+?LINT:extern targetrun
+?LINT:extern targetfrom
+?LINT:extern targetto
+?LINT:extern targetmkdir
+?LINT:change targetrun
+?LINT:change targetfrom
+?LINT:change targetto
+?LINT:change targetmkdir
+?LINT:extern incpth
+?LINT:extern libpth
+?LINT:change incpth
+?LINT:change libpth
+?LINT:extern locincpth
+?LINT:extern loclibpth
+?LINT:change locincpth
+?LINT:change loclibpth
+?LINT:extern TMPDIR
+: setup for possible cross-compilation
+run=''
+to=:
+from=:
+usecrosscompile='undef'
+targetarch=''
+case "$usecrosscompile" in
+$define|true|[yY]*)
+@if { test -d ../Cross }
+?X:
+?X: Cross-compilation is enabled when there is a 'Cross' directory found
+?X: at the root of the package. This directory must contain the following
+?X: entries for defining the cross-compilation process:
+?X:
+?X: FIXME FIXME
+?X: WE MUST DISTINGUISH BETWEEN LOCAL cross-compiling AND REMOTE ONE
+?X: ACTUALLY, REMOTE COMPILATION SHOULD BE CONFIGURED INTERACTIVELY
+?X: IT WILL COPY ALL THE FILES FROM THE MANIFEST DOWN TO THE REMOTE DIR...
+?X: (and copy things like 'mkdep', etc...)
+?X:
+ $echo "Cross-compiling..."
+ croak=''
+ case "$cc" in
+ *-*-gcc)
+?X: A cross-compiling gcc, probably.
+ targetarch=`$echo $cc|$sed 's/-gcc$//'`
+ ar=$targetarch-ar
+?X: leave out ld, choosing it is more complex
+ nm=$targetarch-nm
+ ranlib=$targetarch-ranlib
+ $echo 'extern int foo;' > try.c
+ set X `$cc -v -E try.c 2>&1 | \
+ $awk '/^#include </,/^End of search /'|$grep '/include'`
+ shift
+ if $test $# -gt 0; then
+ incpth="$incpth $*"
+ incpth="`$echo $incpth|$sed 's/^ //'`"
+ echo "Guessing incpth '$incpth'." >&4
+ for i in $*; do
+ j="`$echo $i|$sed 's,/include$,/lib,'`"
+ if $test -d $j; then
+ libpth="$libpth $j"
+ fi
+ done
+ libpth="`$echo $libpth|$sed 's/^ //'`"
+ echo "Guessing libpth '$libpth'." >&4
+ fi
+ $rm -f try.c
+ ;;
+ esac
+ case "$targetarch" in
+ '') echo "Targetarch not defined." >&4; croak=y ;;
+ *) echo "Using targetarch $targetarch." >&4 ;;
+ esac
+ case "$incpth" in
+ '') echo "Incpth not defined." >&4; croak=y ;;
+ *) echo "Using incpth '$incpth'." >&4 ;;
+ esac
+ case "$libpth" in
+ '') echo "Libpth not defined." >&4; croak=y ;;
+ *) echo "Using libpth '$libpth'." >&4 ;;
+ esac
+ case "$usrinc" in
+ '')
+ for i in $incpth; do
+ if $test -f $i/errno.h -a -f $i/stdio.h -a -f $i/time.h; then
+ usrinc=$i
+ echo "Guessing usrinc $usrinc." >&4
+ break
+ fi
+ done
+ case "$usrinc" in
+ '') echo "Usrinc not defined." >&4; croak=y ;;
+ esac
+ ;;
+ *) echo "Using usrinc $usrinc." >&4 ;;
+ esac
+ case "$targethost" in
+ '') echo "Targethost not defined." >&4; croak=y ;;
+ *) echo "Using targethost $targethost." >&4
+ esac
+ locincpth=' '
+ loclibpth=' '
+ case "$croak" in
+ y) echo "Cannot continue, aborting." >&4; exit 1 ;;
+ esac
+ case "$src" in
+ /*) run=$src/Cross/run
+ targetmkdir=$src/Cross/mkdir
+ to=$src/Cross/to
+ from=$src/Cross/from
+ ;;
+ *) pwd=`$test -f ../Configure & cd ..; pwd`
+ run=$pwd/Cross/run
+ targetmkdir=$pwd/Cross/mkdir
+ to=$pwd/Cross/to
+ from=$pwd/Cross/from
+ ;;
+ esac
+ case "$targetrun" in
+ '') targetrun=ssh ;;
+ esac
+ case "$targetto" in
+ '') targetto=scp ;;
+ esac
+ case "$targetfrom" in
+ '') targetfrom=scp ;;
+ esac
+ run=$run-$targetrun
+ to=$to-$targetto
+ from=$from-$targetfrom
+ case "$targetdir" in
+ '')
+ targetdir="${TMPDIR:-/tmp}"
+ echo "Guessing targetdir $targetdir." >&4
+ ;;
+ esac
+ case "$targetuser" in
+ '')
+ targetuser=root
+ echo "Guessing targetuser $targetuser." >&4
+ ;;
+ esac
+ case "$targetfrom" in
+ scp) q=-q ;;
+ *) q='' ;;
+ esac
+ case "$targetrun" in
+ ssh|rsh)
+ $cat >$run <<EOF
+#!/bin/sh
+case "\$1" in
+-cwd)
+ shift
+ cwd=\$1
+ shift
+ ;;
+esac
+case "\$cwd" in
+'') cwd=$targetdir ;;
+esac
+exe=\$1
+shift
+if $test ! -f \$exe.xok; then
+ $to \$exe
+ $touch \$exe.xok
+fi
+$targetrun -l $targetuser $targethost "cd \$cwd && ./\$exe \$@"
+EOF
+ ;;
+ *) echo "Unknown targetrun '$targetrun'" >&4
+ exit 1
+ ;;
+ esac
+ case "$targetmkdir" in
+ */Cross/mkdir)
+ $cat >$targetmkdir <<EOF
+#!/bin/sh
+$targetrun -l $targetuser $targethost "mkdir -p \$@"
+EOF
+ $chmod a+rx $targetmkdir
+ ;;
+ *) echo "Unknown targetmkdir '$targetmkdir'" >&4
+ exit 1
+ ;;
+ esac
+ case "$targetto" in
+ scp|rcp)
+ $cat >$to <<EOF
+#!/bin/sh
+for f in \$@
+do
+ case "\$f" in
+ /*)
+ $targetmkdir \`dirname \$f\`
+ $targetto $q \$f $targetuser@$targethost:\$f || exit 1
+ ;;
+ *)
+ $targetmkdir $targetdir/\`dirname \$f\`
+ $targetto $q \$f $targetuser@$targethost:$targetdir/\$f || exit 1
+ ;;
+ esac
+done
+exit 0
+EOF
+ ;;
+ cp) $cat >$to <<EOF
+#!/bin/sh
+for f in \$@
+do
+ case "\$f" in
+ /*)
+ $mkdir -p $targetdir/\`dirname \$f\`
+ $cp \$f $targetdir/\$f || exit 1
+ ;;
+ *)
+ $targetmkdir $targetdir/\`dirname \$f\`
+ $cp \$f $targetdir/\$f || exit 1
+ ;;
+ esac
+done
+exit 0
+EOF
+ ;;
+ *) echo "Unknown targetto '$targetto'" >&4
+ exit 1
+ ;;
+ esac
+ case "$targetfrom" in
+ scp|rcp)
+ $cat >$from <<EOF
+#!/bin/sh
+for f in \$@
+do
+ $rm -f \$f
+ $targetfrom $q $targetuser@$targethost:$targetdir/\$f . || exit 1
+done
+exit 0
+EOF
+ ;;
+ cp) $cat >$from <<EOF
+#!/bin/sh
+for f in \$@
+do
+ $rm -f \$f
+ cp $targetdir/\$f . || exit 1
+done
+exit 0
+EOF
+ ;;
+ *) echo "Unknown targetfrom '$targetfrom'" >&4
+ exit 1
+ ;;
+ esac
+ if $test ! -f $run; then
+ echo "Target 'run' script '$run' not found." >&4
+ else
+ $chmod a+rx $run
+ fi
+ if $test ! -f $to; then
+ echo "Target 'to' script '$to' not found." >&4
+ else
+ $chmod a+rx $to
+ fi
+ if $test ! -f $from; then
+ echo "Target 'from' script '$from' not found." >&4
+ else
+ $chmod a+rx $from
+ fi
+ if $test ! -f $run -o ! -f $to -o ! -f $from; then
+ exit 1
+ fi
+ $cat >&4 <<EOF
+Using '$run' for remote execution,
+and '$from' and '$to'
+for remote file transfer.
+EOF
+@else
+ echo "Cross-compilation is not supported for this package." >&4
+ exit 1
+@end
+ ;;
+esac
+
diff --git a/mcon/U/Csym.U b/mcon/U/Csym.U
new file mode 100644
index 0000000..45ff465
--- /dev/null
+++ b/mcon/U/Csym.U
@@ -0,0 +1,111 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: Csym.U,v $
+?RCS: Revision 3.0.1.4 1995/07/25 13:36:29 ram
+?RCS: patch56: re-arranged compile line to include ldflags before objects
+?RCS: patch56: added quotes for OS/2 support
+?RCS:
+?RCS: Revision 3.0.1.3 1995/05/12 12:00:33 ram
+?RCS: patch54: fixed C test program to bypass gcc builtin type checks (ADO)
+?RCS:
+?RCS: Revision 3.0.1.2 1994/10/31 09:34:13 ram
+?RCS: patch44: added Options to the MAKE line since it's no longer in Init.U
+?RCS:
+?RCS: Revision 3.0.1.1 1993/08/25 14:00:05 ram
+?RCS: patch6: added ldflags as a conditional dependency and to compile line
+?RCS: patch6: a final double quote was missing in csym variable after eval
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:04:50 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:Csym: Options contains cat libc libs runnm +cc +ccflags +ldflags rm
+?MAKE: -pick add $@ %<
+?LINT:define csym
+?LINT:use libc
+?S:csym:
+?S: This shell variable is used internally by Configure to check
+?S: wether a given C symbol is defined or not. A typical use is:
+?S: set symbol result [-fva] [previous]
+?S: eval $csym
+?S: That will set result to 'true' if the function [-f], variable [-v]
+?S: or array [-a] is defined, 'false' otherwise. If a previous value is
+?S: given and the -r flag was provided on the command line, that value
+?S: is reused without questioning.
+?S:.
+?V:csym
+?T:tval tx tlook tf tdc tc file
+: is a C symbol defined?
+csym='tlook=$1;
+case "$3" in
+-v) tf=libc.tmp; tc=""; tdc="";;
+-a) tf=libc.tmp; tc="[0]"; tdc="[]";;
+*) tlook="^$1\$"; tf=libc.list; tc=""; tdc="()";;
+esac;
+file=csym.log;
+tx=yes;
+case "$reuseval-$4" in
+true-) ;;
+true-*) tx=no; eval "tval=\$$4"; case "$tval" in "") tx=yes;; esac;;
+esac;
+case "$tx" in
+yes)
+ case "$runnm" in
+ true)
+ if $contains $tlook $tf >/dev/null 2>&1;
+ then tval=true;
+ else tval=false;
+ fi;;
+ *)
+?X:
+?X: We use 'char' instead of 'int' to try to circumvent overzealous
+?X: optimizing compilers using built-in prototypes for commonly used
+?X: routines to complain when seeing a different external declaration. For
+?X: instance, gcc 2.6.3 fails if we use 'int' and we attempt a test against
+?X: memcpy() on machines where sizeof(int) == sizeof(char *) (the usual return
+?X: type), the compiler assuming it's a built-in declaration given that the
+?X: returned size matches. At least with 'char' we are safe! -- RAM, for ADO
+?X:
+?X: Let's thank GNU cc for making our lives so easy! :-)
+?X: (An alternative for the future would be to use our knowledge about gcc
+?X: to force a -fno-builtin option in the compile test, in case the 'char'
+?X: trick is obsoleted by future gcc releases). -- RAM
+?X:
+?X: Lastly, gcc 3.4 optimizes &missing == 0 away, so we use + 2 instead now.
+?X: The GNU folks like to do weird things, don't they? -- RAM, 2004-06-05
+?X
+?X: The above was invalid because main returns an int not a pointer.
+?X: Using != or == does not work because GCC complains the pointer will
+?X: never be NULL if the function exists. It is a warning meant to prevent
+?X: using an address of a function by accident instead of calling it.
+?X: However, &missing > 0 is indeed silently optimized away.
+?X
+?X: FIXME: There must be a test whether non-existing functions are found!
+?X:
+?X:. -- cbiere, 2011-01-18
+?X:
+ echo "--- $1$tdc ---" >> "$file";
+ echo "extern char $1$tdc; int main(void) { return (unsigned long) &$1$tc > 2; }" > t.c;
+ $cat t.c >> "$file";
+ if $cc $ccflags $ldflags -o t t.c $libs >>"$file" 2>&1;
+ then tval=true;
+ else tval=false;
+ fi;
+ $rm -f t t.c;;
+ esac;;
+*)
+ case "$tval" in
+ $define) tval=true;;
+ *) tval=false;;
+ esac;;
+esac;
+echo "==> HAS $1$tdc is $tval ($4)" >>"$file";
+eval "$2=$tval"'
+
diff --git a/mcon/U/End.U b/mcon/U/End.U
new file mode 100644
index 0000000..c309578
--- /dev/null
+++ b/mcon/U/End.U
@@ -0,0 +1,27 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: End.U,v $
+?RCS: Revision 3.0 1993/08/18 12:04:51 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: This unit serves as the goal which forces make to choose all the units that
+?X: ask questions. The $W on the ?MAKE: line is the list of all symbols wanted.
+?X: To force any unit to be included, copy this unit to your private U directory
+?X: and add the name of the unit desired to the ?MAKE: dependency line.
+?X:
+?MAKE:End: $W
+?MAKE: -pick add $@ %<
+?LINT:use $W
+: end of configuration questions
+echo " "
+echo "End of configuration questions."
+
diff --git a/mcon/U/Extract.U b/mcon/U/Extract.U
new file mode 100644
index 0000000..2fa6c55
--- /dev/null
+++ b/mcon/U/Extract.U
@@ -0,0 +1,106 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: Extract.U,v $
+?RCS: Revision 3.0.1.2 1997/02/28 14:58:52 ram
+?RCS: patch61: added support for src.U
+?RCS:
+?RCS: Revision 3.0.1.1 1994/10/29 15:51:46 ram
+?RCS: patch36: added ?F: line for metalint file checking
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:04:52 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: This unit produces a shell script which can be doted in order to extract
+?X: .SH files with variable substitutions.
+?X:
+?X: When running Configure from a remote directory ($src is not '.'),
+?X: then the files will be created in that directory, so beware!
+?X:
+?MAKE:Extract: Mkdirp src
+?MAKE: -pick add $@ %<
+?F:./extract
+?T:CONFIG SRC TOP dir file
+: script used to extract .SH files with variable substitutions
+cat >extract <<EOS
+CONFIG=true
+SRC="$src"
+TOP=`cd ..; pwd 2>/dev/null`
+EOS
+cat >>extract <<'EOS'
+echo "Doing variable substitutions on .SH files..."
+if test -f "$SRC/MANIFEST"; then
+ set x `awk '{print $1}' <$SRC/MANIFEST | grep '\.SH'`
+else
+ echo "(Looking for .SH files under the source directory.)"
+ set x `(cd "$SRC"; find . -name "*.SH" -print)`
+fi
+shift
+case $# in
+0) set x `(cd "$SRC"; echo *.SH)`; shift;;
+esac
+if test ! -f "$SRC/$1"; then
+ shift
+fi
+for file in $*; do
+ case "$SRC" in
+ ".")
+ case "$file" in
+ */*)
+ dir=`expr X$file : 'X\(.*\)/'`
+ file=`expr X$file : 'X.*/\(.*\)'`
+ (cd $dir && . ./$file)
+ ;;
+ *)
+ . ./$file
+ ;;
+ esac
+ ;;
+ *)
+?X:
+?X: When running Configure remotely ($src is not '.'), we cannot source
+?X: the files directly, since that would wrongly cause the extraction
+?X: where the source lie instead of withing the current directory. Therefore,
+?X: we need to 'sh <file' then, which is okay since they will source the
+?X: existing config.sh file. It's not possible to use:
+?X: ../src/Configure -S -O -Dsomething
+?X: unfortunately since no new config.sh with the -Dsomething override
+?X: will be created before running the .SH files. A minor buglet.
+?X:
+?X: Note that we must create the directory hierarchy ourselves if it does
+?X: not exist already, and that is done through a shell emulation of the
+?X: 'mkdir -p' command. We don't want to use the $installdir metaconfig
+?X: symbol here since that would require too much to be configured for
+?X: this simple extraction task that may happen quickly with 'Configure -S'.
+?X: -- RAM, 18/03/96
+?X:
+ case "$file" in
+ */*)
+ dir=`expr X$file : 'X\(.*\)/'`
+ file=`expr X$file : 'X.*/\(.*\)'`
+ ./mkdirp $dir
+ sh <"$SRC/$dir/$file"
+ ;;
+ *)
+ sh <"$SRC/$file"
+ ;;
+ esac
+ ;;
+ esac
+done
+if test -f "$SRC/config_h.SH"; then
+ if test ! -f config.h; then
+?X: oops, they left it out of MANIFEST, probably, so do it anyway.
+ sh <"$SRC/config_h.SH"
+ fi
+fi
+EOS
+
diff --git a/mcon/U/Extractall.U b/mcon/U/Extractall.U
new file mode 100644
index 0000000..57b49e9
--- /dev/null
+++ b/mcon/U/Extractall.U
@@ -0,0 +1,51 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: Extractall.U,v $
+?RCS: Revision 3.0.1.1 1997/02/28 15:00:43 ram
+?RCS: patch61: created
+?RCS:
+?X:
+?X: If extraction has been requested, load the configuration file, perform
+?X: the extraction and exit.
+?X:
+?X: This unit was originally a part of Options.U. It had to be removed from
+?X: it to prevent a dependency cycle: Extract -> src -> Options -> Extract
+?X: The Begin.U unit now requires us before beginning to do anything
+?X: interesting, to ensure proper semantics. -- RAM, 15/03/96
+?X:
+?MAKE:Extractall: Extract Options
+?MAKE: -pick wipe $@ %<
+: extract files and exit if asked to do so
+case "$extractsh" in
+true)
+?X: Undo the forced silent=true when -S was supplied, by probing realsilent
+?X: which was set iff -s was also given. See Options.U for details.
+ case "$realsilent" in
+ true) ;;
+ *) exec 1>&4;;
+ esac
+ case "$config_sh" in
+ '') config_sh='config.sh';;
+ esac
+ echo " "
+ echo "Fetching answers from $config_sh..."
+ cd ..
+ . $config_sh
+ test "$override" && . ./optdef.sh
+ echo " "
+?X: extract has to be run from the top directory, not within UU.
+ . UU/extract
+ rm -rf UU
+ echo "Extraction done."
+ exit 0
+ ;;
+esac
+
diff --git a/mcon/U/Filexp.U b/mcon/U/Filexp.U
new file mode 100644
index 0000000..31e57a5
--- /dev/null
+++ b/mcon/U/Filexp.U
@@ -0,0 +1,73 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: Filexp.U,v $
+?RCS: Revision 3.0.1.2 1994/10/29 15:52:53 ram
+?RCS: patch36: added ?F: line for metalint file checking
+?RCS: patch36: added HOME to the ?T: line since metalint now checks ${HOME}
+?RCS:
+?RCS: Revision 3.0.1.1 1994/05/06 14:03:00 ram
+?RCS: patch23: made sure error status from csh is propagated (WED)
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:04:53 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: This unit produces a shell script which will expand filenames beginning
+?X: with tildes. The script is deleted at the end of Configure.
+?X:
+?MAKE:Filexp: startsh sed test expr eunicefix
+?MAKE: -pick add $@ %<
+?F:./filexp
+?T:HOME LOGDIR dir me name failed
+: set up shell script to do ~ expansion
+cat >filexp <<EOSS
+$startsh
+: expand filename
+?X:
+?X: The case entries below escape the ~ as some shells have shown expansion
+?X: of the ~ during here-doc processing.
+?X:
+case "\$1" in
+ \~/*|\~)
+ echo \$1 | $sed "s|~|\${HOME-\$LOGDIR}|"
+ ;;
+ \~*)
+ if $test -f /bin/csh; then
+ /bin/csh -f -c "glob \$1"
+ failed=\$?
+ echo ""
+ exit \$failed
+ else
+ name=\`$expr x\$1 : '..\([^/]*\)'\`
+ dir=\`$sed -n -e "/^\${name}:/{s/^[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\).*"'\$'"/\1/" -e p -e q -e '}' </etc/passwd\`
+ if $test ! -d "\$dir"; then
+ me=\`basename \$0\`
+ echo "\$me: can't locate home directory for: \$name" >&2
+ exit 1
+ fi
+ case "\$1" in
+ */*)
+ echo \$dir/\`$expr x\$1 : '..[^/]*/\(.*\)'\`
+ ;;
+ *)
+ echo \$dir
+ ;;
+ esac
+ fi
+ ;;
+*)
+ echo \$1
+ ;;
+esac
+EOSS
+chmod +x filexp
+$eunicefix filexp
+
diff --git a/mcon/U/Findhdr.U b/mcon/U/Findhdr.U
new file mode 100644
index 0000000..1985669
--- /dev/null
+++ b/mcon/U/Findhdr.U
@@ -0,0 +1,73 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Thomas Neumann <tom@smart.bo.open.de>
+?RCS:
+?RCS: $Log: Findhdr.U,v $
+?RCS: Revision 3.0.1.2 1994/10/29 15:53:08 ram
+?RCS: patch36: added ?F: line for metalint file checking
+?RCS:
+?RCS: Revision 3.0.1.1 1994/05/06 14:03:56 ram
+?RCS: patch23: cppminus must be after other cppflags, not before
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:04:54 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: This unit produces a findhdr script which is used to locate the header
+?X: files in $usrinc or other stranger places using cpp capabilities. The
+?X: script is given an include file base name, like 'stdio.h' or 'sys/file.h'
+?X: and it returns the full path of the include file and a zero status or an
+?X: empty string with an error status if the file could not be located.
+?X:
+?MAKE:Findhdr: grep tr rm +usrinc awk cat startsh \
+ cppstdin cppminus +cppflags eunicefix fieldn cppfilter
+?MAKE: -pick add $@ %<
+?F:./findhdr
+?T:cline wanted name awkprg status usrincdir
+?X: To locate a header file, we cannot simply check for $usrinc/file.h, since
+?X: some machine have the headers in weird places and our only hope is that
+?X: the C pre-processor will know how to find those headers. Thank you NexT!
+: locate header file
+$cat >findhdr <<EOF
+$startsh
+wanted=\$1
+name=''
+for usrincdir in $usrinc; do
+ if test -f \$usrincdir/\$wanted; then
+ echo "\$usrincdir/\$wanted"
+ exit 0
+ fi
+done
+awkprg='{ print \$$fieldn }'
+echo "#include <\$wanted>" > foo\$\$.c
+$cppstdin $cppminus $cppflags < foo\$\$.c 2>/dev/null | \
+$cppfilter $grep "^[ ]*#.*\$wanted" | \
+while read cline; do
+ name=\`echo \$cline | $awk "\$awkprg" | $tr -d '"'\`
+ case "\$name" in
+ *[/\\\\]\$wanted) echo "\$name"; exit 1;;
+ *[\\\\/]\$wanted) echo "\$name"; exit 1;;
+ *) exit 2;;
+ esac
+done
+?X: status = 0: grep returned 0 lines, case statement not executed
+?X: status = 1: headerfile found
+?X: status = 2: while loop executed, no headerfile found
+status=\$?
+$rm -f foo\$\$.c
+if test \$status -eq 1; then
+ exit 0
+fi
+exit 1
+EOF
+chmod +x findhdr
+$eunicefix findhdr
+
diff --git a/mcon/U/Finish.U b/mcon/U/Finish.U
new file mode 100644
index 0000000..cf5a364
--- /dev/null
+++ b/mcon/U/Finish.U
@@ -0,0 +1,141 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: Finish.U,v $
+?RCS: Revision 3.0.1.6 1995/02/15 14:09:30 ram
+?RCS: patch51: now clearer about how to edit config.sh at the prompt (WED)
+?RCS:
+?RCS: Revision 3.0.1.5 1994/10/29 15:53:14 ram
+?RCS: patch36: added ?F: line for metalint file checking
+?RCS:
+?RCS: Revision 3.0.1.4 1994/05/06 14:19:37 ram
+?RCS: patch23: added blank lines around 'End of Configure'
+?RCS:
+?RCS: Revision 3.0.1.3 1993/10/16 13:46:09 ram
+?RCS: patch12: replaced Config_h by Magic_h in the dependency line
+?RCS:
+?RCS: Revision 3.0.1.2 1993/09/13 15:45:26 ram
+?RCS: patch10: fixed shell evaluation w/o shell escape while in silent mode
+?RCS:
+?RCS: Revision 3.0.1.1 1993/08/30 08:55:59 ram
+?RCS: patch8: prevents myread from blocking on empty answers, exceptionally
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:04:55 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: This unit is the very last one in the Configure script. It runs all the
+?X: SH files, which among other things produce config.h and (usually) Makefile.
+?X: It offers to do a make depend if the Makefile contains that target.
+?X:
+?MAKE:Finish: Chk_MANI Extract Myread Oldsym Magic_h cat rm contains \
+ test package make
+?MAKE: -pick add $@ %<
+?F:!config.sh
+?T:pwd
+: Finish up by extracting the .SH files
+case "$alldone" in
+exit)
+?X: They supplied the -E switch
+ echo "Stopping at your request, leaving temporary files around."
+ exit 0
+ ;;
+cont)
+ ;;
+'')
+ dflt=''
+ nostick=true
+ $cat <<EOM
+
+If you'd like to make any changes to the config.sh file before I begin
+to configure things, do it as a shell escape now (e.g. !vi config.sh).
+
+EOM
+ rp="Press return or use a shell escape to edit config.sh:"
+ . UU/myread
+ nostick=''
+ case "$ans" in
+ '') ;;
+ *) : in case they cannot read
+ sh 1>&4 -c "$ans";;
+ esac
+ ;;
+esac
+
+: if this fails, just run all the .SH files by hand
+. ./config.sh
+
+?X:
+?X: Turn silent mode off from now on (we want a verbose file extraction).
+?X: This means we have to explicitly test for '$silent' from now on to
+?X: strip off any verbose messages.
+?X:
+echo " "
+exec 1>&4
+pwd=`pwd`
+. ./UU/extract
+cd "$pwd"
+
+if $contains '^depend:' [Mm]akefile >/dev/null 2>&1; then
+ dflt=y
+ case "$silent" in
+ true) ;;
+ *)
+ $cat <<EOM
+
+Now you need to generate make dependencies by running "$make depend".
+You might prefer to run it in background: "$make depend > makedepend.out &"
+It can take a while, so you might not want to run it right now.
+
+EOM
+ ;;
+ esac
+ rp="Run $make depend now?"
+ . UU/myread
+ case "$ans" in
+ y*)
+ $make depend && echo "Now you must run '$make'."
+ ;;
+ *)
+ echo "You must run '$make depend' then '$make'."
+ ;;
+ esac
+elif test -f [Mm]akefile; then
+ echo " "
+ echo "Now you must run a $make."
+else
+ echo "Configure done."
+fi
+
+if $test -f Policy.sh; then
+ $cat <<EOM
+
+If you compile $package on a different machine or from a different object
+directory, copy the Policy.sh file from this object directory to the
+new one before you run Configure -- this will help you with most of
+the policy defaults.
+
+EOM
+fi
+if $test -f UU/config.msg; then
+ echo "Hmm. I also noted the following information while running:"
+ echo " "
+ $cat UU/config.msg >&4
+fi
+?X:
+?X: kit*isdone files are left over by shell archives built using the makedist
+?X: script which comes from dist, while ark*isdone files are left over by
+?X: the cshar archive maker.
+?X:
+$rm -f kit*isdone ark*isdone
+$rm -rf UU
+
+: End of Configure
+
diff --git a/mcon/U/GCC_pipe.U b/mcon/U/GCC_pipe.U
new file mode 100644
index 0000000..130d78c
--- /dev/null
+++ b/mcon/U/GCC_pipe.U
@@ -0,0 +1,65 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 2006, Christian Biere
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:GCC_pipe: Trylink cat +cc ccflags gccversion optimize
+?MAKE: -pick add $@ %<
+?T:flag result saved_ccflags
+?LINT:change ccflags
+: check whether -pipe should be used
+flag='-pipe'
+case "$gccversion" in
+'');;
+*)
+ case "$ccflags $optimize" in
+ *-save-temps*);;
+ *-pipe*);;
+ *)
+ $cat >try.c <<'EOC'
+int main(void)
+{
+ return 0;
+}
+EOC
+ saved_ccflags=$ccflags
+ ccflags="$flag $ccflags"
+
+ result=''
+ cyn="whether '$flag' is accepted by $cc" >&4
+ set result
+ eval $trylink
+
+ case "$result" in
+ "$define")
+ $cat >try.c <<EOC
+main("This is not C")
+{
+ (. ||
+ switch (**1) { case 1: case 1: }
+}
+EOC
+?X: trylink could "Whoa there" if we do not reset this variable
+ result=''
+ set result
+ eval $trylink
+
+ case "$result" in
+ "$define")
+ echo "However with $flag the compiler seems to see no code." >&4
+ ccflags=$saved_ccflags
+ ;;
+ esac
+ ;;
+ *) ccflags=$saved_ccflags;;
+ esac
+ ;;
+ esac
+ ;;
+esac
+
diff --git a/mcon/U/Getfile.U b/mcon/U/Getfile.U
new file mode 100644
index 0000000..f5cf49b
--- /dev/null
+++ b/mcon/U/Getfile.U
@@ -0,0 +1,340 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: Getfile.U,v $
+?RCS: Revision 3.0.1.7 1997/02/28 15:01:06 ram
+?RCS: patch61: getfile script now begins with "startsh"
+?RCS:
+?RCS: Revision 3.0.1.6 1995/02/15 14:11:00 ram
+?RCS: patch51: was not working if ~'s allowed with d_portable on (WED)
+?RCS:
+?RCS: Revision 3.0.1.5 1995/01/11 15:11:25 ram
+?RCS: patch45: added support for escaping answers to skip various checks
+?RCS: patch45: modified message issued after file expansion
+?RCS:
+?RCS: Revision 3.0.1.4 1994/10/29 15:53:19 ram
+?RCS: patch36: added ?F: line for metalint file checking
+?RCS:
+?RCS: Revision 3.0.1.3 1994/05/06 14:23:36 ram
+?RCS: patch23: getfile could be confused by file name in "locate" requests
+?RCS: patch23: new 'p' directive to assume file is in people's path (WED)
+?RCS:
+?RCS: Revision 3.0.1.2 1994/01/24 14:01:31 ram
+?RCS: patch16: added metalint hint on changed 'ans' variable
+?RCS:
+?RCS: Revision 3.0.1.1 1993/09/13 15:46:27 ram
+?RCS: patch10: minor format problems and misspellings fixed
+?RCS: patch10: now performs from package dir and not from UU subdir
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:04:56 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: This unit produces a bit of shell code that must be dotted in in order
+?X: to get a file name and make some sanity checks. Optionally, a ~name
+?X: expansion is performed.
+?X:
+?X: To use this unit, $rp and $dflt must hold the question and the
+?X: default answer, which will be passed as-is to the myread script.
+?X: The $fn variable must hold the file type (f or d, for file/directory).
+?X: If $gfpth is set to a list of space-separated list of directories,
+?X: those are prefixes for the filename. Unless $gfpthkeep is set to 'y',
+?X: gfpth is cleared on return from Getfile.
+?X:
+?X: If is is followed by a ~, then ~name substitution will occur. Upon return,
+?X: $ans is set with the filename value. If a / is specified, then only a full
+?X: path name is accepted (but ~ substitution occurs before, if needed). The
+?X: expanded path name is returned in that case.
+?X:
+?X: If a + is specified, the existence checks are skipped. This usually means
+?X: the file/directory is under the full control of the program.
+?X:
+?X: If the 'n' (none) type is used, then the user may answer none.
+?X: The 'e' (expand) switch may be used to bypass d_portable, expanding ~name.
+?X:
+?X: If the 'l' (locate) type is used, then it must end with a ':' and then a
+?X: file name. If the answer is a directory, the file name will be appended
+?X: before testing for file existence. This is useful in locate-style
+?X: questions like "where is the active file?". In that case, one should
+?X: use:
+?X:
+?X: dflt='~news/lib'
+?X: fn='l~:active'
+?X: rp='Where is the active file?'
+?X: . ./getfile
+?X: active="$ans"
+?X:
+?X: If the 'p' (path) letter is specified along with 'l', then an answer
+?X: without a leading / will be expected to be found in everyone's path.
+?X:
+?X: It is also possible to include a comma-separated list of items within
+?X: parentheses to specify which items should be accepted as-is with no
+?X: further checks. This is useful when for instance a full path is expected
+?X: but the user may escape out via "magical" answers.
+?X:
+?X: If the answer to the question is 'none', then the existence checks are
+?X: skipped and the empty string is returned.
+?X:
+?MAKE:Getfile: d_portable contains startsh Myread Filexp tr trnl
+?MAKE: -pick add $@ %<
+?V:ansexp:fn gfpth gfpthkeep
+?F:./getfile
+?T:tilde type what orig_rp orig_dflt fullpath already redo skip none_ok \
+ value exp_file nopath_ok loc_file fp pf dir direxp
+?LINT:change ans
+?LINT:change gfpth
+: now set up to get a file name
+cat <<EOS >getfile
+$startsh
+EOS
+cat <<'EOSC' >>getfile
+tilde=''
+fullpath=''
+already=''
+skip=''
+none_ok=''
+exp_file=''
+nopath_ok=''
+orig_rp="$rp"
+orig_dflt="$dflt"
+case "$gfpth" in
+'') gfpth='.' ;;
+esac
+
+?X: Begin by stripping out any (...) grouping.
+case "$fn" in
+*\(*)
+ : getfile will accept an answer from the comma-separated list
+ : enclosed in parentheses even if it does not meet other criteria.
+ expr "$fn" : '.*(\(.*\)).*' | $tr ',' $trnl >getfile.ok
+ fn=`echo $fn | sed 's/(.*)//'`
+ ;;
+esac
+
+?X: Catch up 'locate' requests early, so that we may strip the file name
+?X: before looking at the one-letter commands, in case the file name contains
+?X: one of them. Reported by Wayne Davison <davison@borland.com>.
+case "$fn" in
+*:*)
+ loc_file=`expr $fn : '.*:\(.*\)'`
+ fn=`expr $fn : '\(.*\):.*'`
+ ;;
+esac
+
+case "$fn" in
+*~*) tilde=true;;
+esac
+case "$fn" in
+*/*) fullpath=true;;
+esac
+case "$fn" in
+*+*) skip=true;;
+esac
+case "$fn" in
+*n*) none_ok=true;;
+esac
+case "$fn" in
+*e*) exp_file=true;;
+esac
+case "$fn" in
+*p*) nopath_ok=true;;
+esac
+
+case "$fn" in
+*f*) type='File';;
+*d*) type='Directory';;
+*l*) type='Locate';;
+esac
+
+what="$type"
+case "$what" in
+Locate) what='File';;
+esac
+
+case "$exp_file" in
+'')
+ case "$d_portable" in
+ "$define") ;;
+ *) exp_file=true;;
+ esac
+ ;;
+esac
+
+cd ..
+while test "$type"; do
+ redo=''
+ rp="$orig_rp"
+ dflt="$orig_dflt"
+ case "$tilde" in
+ true) rp="$rp (~name ok)";;
+ esac
+ . UU/myread
+?X: check for allowed escape sequence which may be accepted verbatim.
+ if test -f UU/getfile.ok && \
+ $contains "^$ans\$" UU/getfile.ok >/dev/null 2>&1
+ then
+ value="$ans"
+ ansexp="$ans"
+ break
+ fi
+ case "$ans" in
+ none)
+ value=''
+ ansexp=''
+ case "$none_ok" in
+ true) type='';;
+ esac
+ ;;
+ *)
+ case "$tilde" in
+ '') value="$ans"
+ ansexp="$ans";;
+ *)
+ value=`UU/filexp $ans`
+ case $? in
+ 0)
+ if test "$ans" != "$value"; then
+ echo "(That expands to $value on this system.)"
+ fi
+ ;;
+ *) value="$ans";;
+ esac
+ ansexp="$value"
+ case "$exp_file" in
+ '') value="$ans";;
+ esac
+ ;;
+ esac
+ case "$fullpath" in
+ true)
+?X: Perform all the checks on ansexp and not value since when d_portable
+?X: is defined, the original un-expanded answer which is stored in value
+?X: would lead to "non-existent" error messages whilst ansexp has been
+?X: properly expanded. -- Fixed by Jan.Djarv@sa.erisoft.se (Jan Djarv)
+?X: Always expand ~user if '/' was requested
+ case "$ansexp" in
+ /*) value="$ansexp" ;;
+?X: Allow for c:/some/path and c:\some\path
+ [a-zA-Z]:/*) value="$ansexp" ;;
+ [a-zA-Z]:\\*) value="$ansexp" ;;
+ *)
+ redo=true
+ case "$already" in
+ true)
+ echo "I shall only accept a full path name, as in /bin/ls." >&4
+ echo "Use a ! shell escape if you wish to check pathnames." >&4
+ ;;
+ *)
+ echo "Please give a full path name, starting with slash." >&4
+ case "$tilde" in
+ true)
+ echo "Note that using ~name is ok provided it expands well." >&4
+ already=true
+ ;;
+ esac
+ esac
+ ;;
+ esac
+ ;;
+ esac
+ case "$redo" in
+ '')
+ case "$type" in
+ File)
+ for fp in $gfpth; do
+ if test "X$fp" = X.; then
+ pf="$ansexp"
+ else
+ pf="$fp/$ansexp"
+ fi
+ if test -f "$pf"; then
+ type=''
+ elif test -r "$pf" || (test -h "$pf") >/dev/null 2>&1
+ then
+ echo "($value is not a plain file, but that's ok.)"
+ type=''
+ fi
+ if test X"$type" = X; then
+ value="$pf"
+ break
+ fi
+ done
+ ;;
+ Directory)
+ for fp in $gfpth; do
+ if test "X$fp" = X.; then
+ dir="$ans"
+ direxp="$ansexp"
+ else
+ dir="$fp/$ansexp"
+ direxp="$fp/$ansexp"
+ fi
+ if test -d "$direxp"; then
+ type=''
+ value="$dir"
+ break
+ fi
+ done
+ ;;
+ Locate)
+ if test -d "$ansexp"; then
+ echo "(Looking for $loc_file in directory $value.)"
+ value="$value/$loc_file"
+ ansexp="$ansexp/$loc_file"
+ fi
+ if test -f "$ansexp"; then
+ type=''
+ fi
+ case "$nopath_ok" in
+ true) case "$value" in
+ */*) ;;
+ *) echo "Assuming $value will be in people's path."
+ type=''
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+ esac
+
+ case "$skip" in
+ true) type='';
+ esac
+
+ case "$type" in
+ '') ;;
+ *)
+ if test "$fastread" = yes; then
+ dflt=y
+ else
+ dflt=n
+ fi
+ rp="$what $value doesn't exist. Use that name anyway?"
+ . UU/myread
+ dflt=''
+ case "$ans" in
+ y*) type='';;
+ *) echo " ";;
+ esac
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+ esac
+done
+cd UU
+ans="$value"
+rp="$orig_rp"
+dflt="$orig_dflt"
+rm -f getfile.ok
+test "X$gfpthkeep" != Xy && gfpth=""
+EOSC
+
diff --git a/mcon/U/Guess.U b/mcon/U/Guess.U
new file mode 100644
index 0000000..bee82a1
--- /dev/null
+++ b/mcon/U/Guess.U
@@ -0,0 +1,248 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: Guess.U,v $
+?RCS: Revision 3.0.1.5 1995/07/25 13:37:14 ram
+?RCS: patch56: now knows about OS/2 platforms
+?RCS:
+?RCS: Revision 3.0.1.4 1994/10/29 15:53:55 ram
+?RCS: patch36: added ?F: line for metalint file checking
+?RCS: patch36: call ./xenix explicitly instead of relying on PATH
+?RCS:
+?RCS: Revision 3.0.1.3 1993/12/15 08:14:35 ram
+?RCS: patch15: variable d_bsd was not always set properly
+?RCS:
+?RCS: Revision 3.0.1.2 1993/08/30 08:57:14 ram
+?RCS: patch8: fixed comment which wrongly attributed the usrinc symbol
+?RCS: patch8: no more ugly messages when no /usr/include/ctype.h
+?RCS:
+?RCS: Revision 3.0.1.1 1993/08/27 14:37:37 ram
+?RCS: patch7: added support for OSF/1 machines
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:04:57 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: This unit hazards some guesses as to what the general nature of the system
+?X: is. The information it collects here is used primarily to establish default
+?X: answers to other questions.
+?X:
+?MAKE:Guess d_eunice d_xenix d_bsd d_linux d_dos d_os2 d_windows: cat test \
+ echo n c contains rm tr Loc eunicefix
+?MAKE: -pick add $@ %<
+?S:d_eunice:
+?S: This variable conditionally defines the symbols EUNICE_SYSTEM, which
+?S: alerts the C program that it must deal with ideosyncracies of VMS.
+?S:.
+?S:d_xenix:
+?S: This variable conditionally defines the symbol XENIX_SYSTEM, which alerts
+?S: the C program that it runs under Xenix.
+?S:.
+?S:d_dos:
+?S: This symbol conditionally defines the symbol DOS_SYSTEM when running on
+?S: DOS with DJGPP or Cygwin.
+?S:.
+?S:d_os2:
+?S: This symbol conditionally defines the symbol OS2_SYSTEM when running on
+?S: an OS/2 system.
+?S:.
+?S:d_bsd:
+?S: This symbol conditionally defines the symbol BSD_SYSTEM when running on a
+?S: BSD system.
+?S:.
+?S:d_linux:
+?S: This symbol conditionally defines the symbol LINUX_SYSTEM when running
+?S: on a Linux system.
+?S:.
+?S:d_windows:
+?S: This symbol conditionally defines the symbol WINDOWS_SYSTEM when running
+?S: on a Windows system.
+?S:.
+?C:EUNICE_SYSTEM (EUNICE):
+?C: This symbol, if defined, indicates that the program is being compiled
+?C: under the EUNICE package under VMS. The program will need to handle
+?C: things like files that don't go away the first time you unlink them,
+?C: due to version numbering. It will also need to compensate for lack
+?C: of a respectable link() command.
+?C:.
+?C:VMS_SYSTEM (VMS):
+?C: This symbol, if defined, indicates that the program is running under
+?C: VMS. It is currently only set in conjunction with the EUNICE symbol.
+?C:.
+?C:XENIX_SYSTEM (XENIX):
+?C: This symbol, if defined, indicates that the program is running under
+?C: Xenix (at least 3.0 ?).
+?C:.
+?C:DOS_SYSTEM:
+?C: This symbol, if defined, indicates that the program is running under
+?C: DOS with DJGPP.
+?C:.
+?C:OS2_SYSTEM:
+?C: This symbol, if defined, indicates that the program is running under
+?C: an OS/2 system.
+?C:.
+?C:BSD_SYSTEM:
+?C: This symbol, if defined, indicates that the program is running under
+?C: a BSD system.
+?C:.
+?C:LINUX_SYSTEM:
+?C: This symbol, if defined, indicates that the program is running under
+?C: a Linux system.
+?C:.
+?C:WINDOWS_SYSTEM:
+?C: This symbol, if defined, indicates that the program is running under
+?C: a Windows system.
+?C:.
+?H:#$d_eunice EUNICE_SYSTEM /**/
+?H:#$d_eunice VMS_SYSTEM /**/
+?H:#$d_xenix XENIX_SYSTEM /**/
+?H:#$d_dos DOS_SYSTEM /**/
+?H:#$d_os2 OS2_SYSTEM /**/
+?H:#$d_bsd BSD_SYSTEM /**/
+?H:#$d_linux LINUX_SYSTEM /**/
+?H:#$d_windows WINDOWS_SYSTEM /**/
+?H:.
+?F:./bsd ./usg ./v7 ./osf1 ./eunice ./xenix ./venix ./dos ./os2 ./gnu
+?F:./windows ./linux
+?T:xxx DJGPP MACHTYPE
+: make some quick guesses about what we are up against
+echo " "
+$echo $n "Hmm... $c"
+echo exit 1 >bsd
+echo exit 1 >usg
+echo exit 1 >v7
+echo exit 1 >osf1
+echo exit 1 >eunice
+echo exit 1 >xenix
+echo exit 1 >venix
+echo exit 1 >os2
+echo exit 1 >gnu
+echo exit 1 >linux
+echo exit 1 >dos
+echo exit 1 >windows
+d_bsd="$undef"
+d_linux="$undef"
+d_dos="$undef"
+d_os2="$undef"
+d_windows="$undef"
+?X:
+?X: Do not use 'usrinc', or we get a circular dependency. because
+?X: usrinc is defined in usrinc.U, which relies on us...
+?X:
+$cat /usr/include/signal.h /usr/include/sys/signal.h >foo 2>/dev/null
+if test -f /osf_boot || $contains 'OSF/1' /usr/include/ctype.h >/dev/null 2>&1
+then
+ echo "Looks kind of like an OSF/1 system, but we'll see..."
+ echo exit 0 >osf1
+elif test `echo abc | $tr a-z A-Z` = Abc ; then
+ xxx=`./loc addbib blurfl $pth`
+ if $test -f $xxx; then
+ echo "Looks kind of like a USG system with BSD features, but we'll see..."
+ echo exit 0 >bsd
+ echo exit 0 >usg
+ else
+ if $contains SIGTSTP foo >/dev/null 2>&1 ; then
+ echo "Looks kind of like an extended USG system, but we'll see..."
+ else
+ echo "Looks kind of like a USG system, but we'll see..."
+ fi
+ echo exit 0 >usg
+ fi
+elif $contains SIGTSTP foo >/dev/null 2>&1 ; then
+ echo "Looks kind of like a BSD system, but we'll see..."
+ d_bsd="$define"
+ echo exit 0 >bsd
+elif
+ $rm --version 2>/dev/null >foo;
+ $contains "Free Software Foundation" foo >/dev/null
+then
+ xxx=`uname`
+ echo exit 0 >gnu
+ echo "Looks kind of like a GNU/$xxx system, but we'll see..."
+ if $test X$xxx = XLinux; then
+ d_linux="$define"
+ echo exit 0 >linux
+ fi
+else
+ echo "Looks kind of like a Version 7 system, but we'll see..."
+ echo exit 0 >v7
+fi
+case "$eunicefix" in
+*unixtovms*)
+ $cat <<'EOI'
+There is, however, a strange, musty smell in the air that reminds me of
+something...hmm...yes...I've got it...there's a VMS nearby, or I'm a Blit.
+EOI
+ echo exit 0 >eunice
+ d_eunice="$define"
+: it so happens the Eunice I know will not run shell scripts in Unix format
+ ;;
+*)
+ echo " "
+ echo "Congratulations. You aren't running Eunice."
+ d_eunice="$undef"
+ ;;
+esac
+if test -d c:/.; then
+ case "X${MACHTYPE:-nonesuchmach}" in
+ *cygwin) echo " "; echo "Hah!... you're running under Cygwin!";;
+ *msys) echo " "; echo "Hah!... you're running under MinGW!";;
+ esac
+ case "X${MACHTYPE:-nonesuchmach}" in
+ *cygwin|*msys)
+ echo exit 0 >windows
+ d_windows="$define"
+ ;;
+ esac
+fi
+case "$p_" in
+:) ;;
+*)
+ $cat <<'EOI'
+I have the feeling something is not exactly right, however...don't tell me...
+EOI
+ if test -n "$DJGPP"; then
+ echo exit 0 >dos
+ d_dos="$define"
+ else
+ $cat <<'EOI'
+lemme think...does HAL ring a bell?...no, of course, you're only running OS/2!
+EOI
+ echo exit 0 >os2
+ d_os2="$define"
+ fi
+ ;;
+esac
+if test -f /xenix; then
+ echo "Actually, this looks more like a XENIX system..."
+ echo exit 0 >xenix
+ d_xenix="$define"
+else
+ echo " "
+ echo "It's not Xenix..."
+ d_xenix="$undef"
+fi
+chmod +x xenix
+$eunicefix xenix
+if test -f /venix; then
+ echo "Actually, this looks more like a VENIX system..."
+ echo exit 0 >venix
+else
+ echo " "
+ if ./xenix; then
+ : null
+ else
+ echo "Nor is it Venix..."
+ fi
+fi
+chmod +x bsd usg v7 osf1 eunice xenix venix dos os2 gnu linux windows
+$eunicefix bsd usg v7 osf1 eunice xenix venix dos os2 gnu linux windows
+$rm -f foo
+
diff --git a/mcon/U/Head.U b/mcon/U/Head.U
new file mode 100644
index 0000000..933e489
--- /dev/null
+++ b/mcon/U/Head.U
@@ -0,0 +1,282 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: Head.U,v $
+?RCS: Revision 3.0.1.9 1997/02/28 15:02:09 ram
+?RCS: patch61: make sure we unset CDPATH for shells that support this
+?RCS: patch61: improved Korn shell detection and handling
+?RCS:
+?RCS: Revision 3.0.1.8 1995/07/25 13:40:02 ram
+?RCS: patch56: added SVR4-ish /opt directories to path list (ADO)
+?RCS: patch56: OS/2 platforms are using another path separator
+?RCS:
+?RCS: Revision 3.0.1.7 1995/03/21 08:46:15 ram
+?RCS: patch52: definition of paths wrongly added spurious ':' chars
+?RCS:
+?RCS: Revision 3.0.1.6 1994/10/29 15:54:19 ram
+?RCS: patch36: make sure ENV is unset before calling /bin/ksh
+?RCS:
+?RCS: Revision 3.0.1.5 1994/08/29 16:03:44 ram
+?RCS: patch32: now sets PATH only using existing directories
+?RCS:
+?RCS: Revision 3.0.1.4 1994/06/20 06:54:28 ram
+?RCS: patch30: now computes its invocation name into 'me'
+?RCS: patch30: symbol me is made visible to all units read-only
+?RCS:
+?RCS: Revision 3.0.1.3 1993/12/15 08:15:07 ram
+?RCS: patch15: added /sbin:/usr/sbin:/usr/libexec in PATH for BSD/386
+?RCS:
+?RCS: Revision 3.0.1.2 1993/11/10 17:32:35 ram
+?RCS: patch14: ensure PATH is reset to '.' before testing for alias
+?RCS:
+?RCS: Revision 3.0.1.1 1993/08/27 14:38:07 ram
+?RCS: patch7: not all 'test' programs support the -x option
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:04:58 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: This is the very first unit in the Configure script. It is mostly just
+?X: things to keep people from getting into a tizzy right off the bat.
+?X:
+?MAKE:Head:
+?MAKE: -pick wipe $@ %<
+?V:PATH p_ _exe me newsh
+?T:argv Id p paths OS2_SHELL DJGPP
+?T:inksh needksh avoidksh newsh changesh reason
+?F:!*
+?LINT:extern ENV CDPATH SHELL MACHTYPE
+?LINT:change ENV CDPATH
+?LINT:nocomment
+#! /bin/sh
+#
+# If these # comments don't work, trim them. Don't worry about any other
+# shell scripts, Configure will trim # comments from them for you.
+#
+# (If you are trying to port this package to a machine without sh,
+# I would suggest you have a look at the prototypical config_h.SH file
+# and edit it to reflect your system. Some packages may include samples
+# of config.h for certain machines, so you might look for one of those.)
+#
+?X:
+?X: NOTE THAT A CONFIGURE SCRIPT IS IN THE PUBLIC DOMAIN (whether or not
+?X: the software which uses it is in the public domain).
+?X:
+# Yes, you may rip this off to use in other distribution packages. This
+# script belongs to the public domain and cannot be copyrighted.
+#
+?X:
+?X: WE ASK YOU NOT TO REMOVE OR ALTER THE FOLLOWING PARAGRAPH, PLEASE:
+?X:
+# Note: this Configure script was generated automatically. Rather than
+# working with this copy of Configure, you may wish to get metaconfig.
+# The dist package (which contains metaconfig) is available via SVN:
+# svn co https://svn.code.sf.net/p/dist/code/trunk/dist
+?X:
+?X: NOTA BENE:
+?X: If you develop you own version of metaconfig based on this work,
+?X: you have to add some comments telling that the script was generated
+?X: by your version, not mine: It credits your work.
+?X:
+
+# $Id$
+#
+# Generated on <DATE> [metaconfig <VERSION>-<REVISION>]
+
+cat >c1$$ <<EOF
+ARGGGHHHH!!!!!
+
+SCO csh still thinks true is false. Write to SCO today and tell them that next
+year Configure ought to "rm /bin/csh" unless they fix their blasted shell. :-)
+
+(Actually, Configure ought to just patch csh in place. Hmm. Hmmmmm. All
+we'd have to do is go in and swap the && and || tokens, wherever they are.)
+
+[End of diatribe. We now return you to your regularly scheduled programming...]
+EOF
+cat >c2$$ <<EOF
+
+OOPS! You naughty creature! You didn't run Configure with sh!
+I will attempt to remedy the situation by running sh for you...
+EOF
+
+true || cat c1$$ c2$$
+true || exec sh $0 $argv:q
+
+(exit $?0) || cat c2$$
+(exit $?0) || exec sh $0 $argv:q
+rm -f c1$$ c2$$
+
+: compute my invocation name
+me=$0
+case "$0" in
+*/*)
+ me=`echo $0 | sed -e 's!.*/\(.*\)!\1!' 2>/dev/null`
+ test "$me" || me=$0
+ ;;
+esac
+
+?X:
+?X: To be able to run under OS/2, we must detect that early enough to use
+?X: the proper path separator, stored in $p_. It is : on UNIX and ; on
+?X: DOSish systems such as OS/2.
+?X:
+: Proper separator for the PATH environment variable
+p_=:
+: On OS/2 this directory should exist if this is not floppy only system ":-]"
+if test -d c:/. ; then
+ if test -n "$OS2_SHELL"; then
+ p_=\;
+ PATH=`cmd /c "echo %PATH%" | tr '\\\\' / `
+?X: That's a bug in ksh5.22
+ OS2_SHELL=`cmd /c "echo %OS2_SHELL%" | tr '\\\\' / | tr '[A-Z]' '[a-z]'`
+ elif test -n "$DJGPP"; then
+ case "X${MACHTYPE:-nonesuchmach}" in
+ *cygwin|*msys) ;;
+ *) p_=\; ;;
+ esac
+ fi
+fi
+
+?X:
+?X: There are two schools of thoughts here. Some people correctly argue that
+?X: the user has a better chance than we do of setting a reasonable PATH and
+?X: others argue that Configure is the best place there is to set up a suitable
+?X: PATH. Well, here we try to compromise by keeping the user's PATH and
+?X: appending some directories which are known to work on some machine or the
+?X: other. The rationale behind this being that a novice user might not have a
+?X: proper environment variable set, and some directories like /etc (where
+?X: chown is located on some BSD systems) may be missing--RAM.
+?X:
+?X: SVR4 adds an /opt directory for optional packages. Some sites use
+?X: various permutations on /opt as opposed to /usr or /usr/local.-- ADO
+?X:
+?X: We only add directories that are not already in the PATH of the
+?X: user and the directories must exist also.
+?X:
+: Proper PATH setting
+paths='/bin /usr/bin /usr/local/bin /usr/ucb /usr/local /usr/lbin'
+paths="$paths /opt/bin /opt/local/bin /opt/local /opt/lbin"
+paths="$paths /usr/5bin /etc /usr/gnu/bin /usr/new /usr/new/bin /usr/nbin"
+paths="$paths /opt/gnu/bin /opt/new /opt/new/bin /opt/nbin"
+paths="$paths /sys5.3/bin /sys5.3/usr/bin /bsd4.3/bin /bsd4.3/usr/ucb"
+paths="$paths /bsd4.3/usr/bin /usr/bsd /bsd43/bin /usr/ccs/bin"
+paths="$paths /etc /usr/lib /usr/ucblib /lib /usr/ccs/lib"
+paths="$paths /sbin /usr/sbin /usr/libexec"
+paths="$paths /system/gnu_library/bin"
+
+for p in $paths
+do
+ case "$p_$PATH$p_" in
+ *$p_$p$p_*) ;;
+ *) test -d $p && PATH=$PATH$p_$p ;;
+ esac
+done
+
+PATH=.$p_$PATH
+export PATH
+
+: shall we be using ksh?
+inksh=''
+needksh=''
+avoidksh=''
+newsh=/bin/ksh
+changesh=''
+?X: Use (alias -x) and not (alias) since zsh and bash recognize the alias
+?X: builtin but not the -x option which is typically ksh...
+?X: We need to set up PATH before calling the "alias" built-in since some
+?X: systems like HP-UX have a binary called /bin/alias.
+if (PATH=.; alias -x) >/dev/null 2>&1; then
+ inksh=true
+fi
+?X: On HP-UX, large Configure scripts may exercise a bug in /bin/sh, use ksh
+if test -f /hp-ux -a -f /bin/ksh; then
+ needksh='to avoid sh bug in "here document" expansion'
+fi
+?X: On AIX4, /bin/sh is really ksh and it causes problems, use sh
+if test -d /usr/lpp -a -f /usr/bin/bsh -a -f /usr/bin/uname; then
+ if test X`/usr/bin/uname -v` = X4; then
+ avoidksh="to avoid AIX 4's /bin/sh"
+ newsh=/usr/bin/bsh
+ fi
+fi
+?X: On Digital UNIX, /bin/sh may start up buggy /bin/ksh, use sh
+if test -f /osf_boot -a -f /usr/sbin/setld; then
+ if test X`/usr/bin/uname -s` = XOSF1; then
+ avoidksh="to avoid Digital UNIX' ksh"
+ newsh=/bin/sh
+?X: if BIN_SH is set to 'xpg4', sh will start up ksh
+ unset BIN_SH
+ fi
+fi
+?X: If we are not in ksh and need it, then feed us back to it
+case "$inksh/$needksh" in
+/[a-z]*)
+?X: Clear ENV to avoid any ~/.kshrc that could alias cd or whatever...
+?X: Don't use "unset ENV", that is not portable enough
+ ENV=''
+ changesh=true
+ reason="$needksh"
+ ;;
+esac
+?X: If we are in ksh and must avoid it, then feed us back to a new shell
+case "$inksh/$avoidksh" in
+true/[a-z]*)
+ changesh=true
+ reason="$avoidksh"
+ ;;
+esac
+?X: Warn them if they use ksh on other systems, which are those where
+?X: we don't need ksh nor want to avoid it explicitly, yet are using it.
+case "$inksh/$needksh-$avoidksh-" in
+true/--)
+ cat <<EOM
+(I see you are using the Korn shell. Some ksh's blow up on $me,
+mainly on older exotic systems. If yours does, try the Bourne shell instead.)
+EOM
+ ;;
+esac
+case "$changesh" in
+true)
+ export newsh
+ echo "(Feeding myself to $newsh $reason.)"
+?X: Make sure they didn't say sh <Configure by checking whether $0 ends
+?X: with Configure or not. If they did say sh <../../Configure, then too
+?X: bad for them anyway, since we lost that path indication...
+?X: Otherwise, execing $0 ensures we keep the full remote source dir
+?X: indication for src.U.
+ case "$0" in
+ Configure|*/Configure) exec $newsh $0 "$@";;
+ *) exec $newsh Configure "$@";;
+ esac
+ ;;
+esac
+
+?X: Unset CDPATH to avoid surprises when using cd under some shells
+?X: Can't unset it because that's not portable to very old shells.
+?X: Can't set it to '' because then bash 2.02 won't do "cd UU" --AD 6/98.
+?X: Don't want to set it to '.' because then ksh prints out the
+?X: name of the directory every time you cd to it. --AD 6/98
+?X: In order to inflict the least harm, change it only if it's set.
+: if needed, set CDPATH to a harmless value that is not chatty
+case "$CDPATH" in
+'') ;;
+*) case "$SHELL" in
+ *bash*) CDPATH='.' ;;
+ *) CDPATH='' ;;
+ esac
+ ;;
+esac
+
+: Configure runs within the UU subdirectory
+test -d UU || mkdir UU
+?X: Use ./* to avoid any confirmation prompts from enhanced shells -- WED
+cd UU && rm -f ./*
+
diff --git a/mcon/U/Inhdr.U b/mcon/U/Inhdr.U
new file mode 100644
index 0000000..72890e6
--- /dev/null
+++ b/mcon/U/Inhdr.U
@@ -0,0 +1,77 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: Inhdr.U,v $
+?RCS: Revision 3.0.1.2 1995/05/12 12:01:31 ram
+?RCS: patch54: deleted tabs that caused some /bin/sh to core dump (ADO)
+?RCS:
+?RCS: Revision 3.0.1.1 1994/10/29 15:55:01 ram
+?RCS: patch36: call ./whoa explicitly instead of relying on PATH
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:05:01 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: This unit checks wether a set of header files exists or not.
+?X: If the first header is not found, the function tries to locate
+?X: the next header, and so on, until one is found or there is no
+?X: more header in the list.
+?X:
+?X: To use it, say:
+?X: set header i_header [ header2 i_header2 ... ]
+?X: eval $inhdr
+?X:
+?MAKE:Inhdr: test Findhdr Whoa
+?MAKE: -pick add $@ %<
+?LINT:define inhdr
+?V:inhdr
+?S:inhdr:
+?S: This shell variable is used internally by Configure to check
+?S: wether a set of headers exist or not. A typical use is:
+?S: set header i_header [ header2 i_header2 ... ]
+?S: eval $inhdr
+?S: That will print a message, saying wether header was found or
+?S: not and set i_header* accordingly. If the first header is not
+?S: found, we try the next one, until the list is empty or one is found.
+?S:.
+?T:xxx xxf var td xxnf tu yyy instead was cont
+: define an alternate in-header-list? function
+inhdr='echo " "; td=$define; tu=$undef; yyy=$@;
+cont=true; xxf="echo \"<\$1> found.\" >&4";
+case $# in 2) xxnf="echo \"<\$1> NOT found.\" >&4";;
+*) xxnf="echo \"<\$1> NOT found, ...\" >&4";;
+esac;
+case $# in 4) instead=instead;; *) instead="at last";; esac;
+while $test "$cont"; do
+ xxx=`./findhdr $1`
+ var=$2; eval "was=\$$2";
+ if $test "$xxx" && $test -r "$xxx";
+ then eval $xxf;
+?X: Next line shifted left 1 tabstop to avoid sh core dump on MachTen 2.1.1.
+ eval "case \"\$$var\" in $undef) . ./whoa; esac"; eval "$var=\$td";
+ cont="";
+ else eval $xxnf;
+?X: Likewise, the next line has been shifted left 1 tabstop -- ADO, 08/03/95
+ eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu"; fi;
+ set $yyy; shift; shift; yyy=$@;
+ case $# in 0) cont="";;
+ 2) xxf="echo \"but I found <\$1> $instead.\" >&4";
+ xxnf="echo \"and I did not find <\$1> either.\" >&4";;
+ *) xxf="echo \"but I found <\$1\> instead.\" >&4";
+ xxnf="echo \"there is no <\$1>, ...\" >&4";;
+ esac;
+done;
+?X: Remaining values are set to 'undef'
+while $test "$yyy";
+do set $yyy; var=$2; eval "was=\$$2";
+ eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu";
+ set $yyy; shift; shift; yyy=$@;
+done'
+
diff --git a/mcon/U/Init.U b/mcon/U/Init.U
new file mode 100644
index 0000000..63ee6bd
--- /dev/null
+++ b/mcon/U/Init.U
@@ -0,0 +1,81 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: Init.U,v $
+?RCS: Revision 3.0.1.1 1994/10/31 09:45:59 ram
+?RCS: patch44: removed Options from MAKE to prevent Init overrides
+?RCS: patch44: option processing now done after Myinit thanks to new Begin.U
+?RCS: patch44: moved "Beginning of configuration questions" to Begin.U
+?RCS: patch44: moved signal trapping instruction to Begin.U as well
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:05:02 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: This file initializes certain default variables used by Configure. They
+?X: may be overridden or added to by definitions in Myinit.U.
+?X:
+?MAKE:Init eunicefix _exe: Null
+?MAKE: -pick add $@ %<
+?MAKE: -pick weed $@ ./Init
+?S:eunicefix:
+?S: When running under Eunice this variable contains a command which will
+?S: convert a shell script to the proper form of text file for it to be
+?S: executable by the shell. On other systems it is a no-op.
+?S:.
+?S:_exe (exe_ext):
+?S: This variable defines the extension used for executable files.
+?S: For unix it is empty. Other possible values include '.exe'.
+?S: DJGPP, Cygwin and OS/2 use '.exe'. Stratus VOS uses '.pm'.
+?S: On operating systems which do not require a specific extension
+?S: for executable files, this variable is empty.
+?S:.
+?V:define undef smallmach:rmlist
+?X:
+?X: Throughout the units, one may make use of $define and $undef to reference
+?X: a defined symbol or an undefined one. There is no need to add them in
+?X: the dependency line since this unit makes them visible via ?V:, and
+?X: everyone inherits from those symbols since by convention Init.U is the
+?X: root dependency.
+?X:
+?T: DJGPP
+: Initialize wide constants
+define='define'
+undef='undef'
+smallmach='pdp11 i8086 z8000 i80286 iAPX286'
+rmlist=''
+
+: We must find out about Eunice early
+eunicefix=':'
+if test -f /etc/unixtovms; then
+ eunicefix=/etc/unixtovms
+fi
+if test -f /etc/unixtovms.exe; then
+ eunicefix=/etc/unixtovms.exe
+fi
+
+: Set executable suffix now -- needed before hints available
+if test -f "/libs/version.library"; then
+ : Amiga OS
+ _exe=""
+elif test -f "/system/gnu_library/bin/ar.pm"; then
+ : Stratus VOS
+ _exe=".pm"
+elif test -n "$DJGPP"; then
+ : DOS DJGPP
+ _exe=".exe"
+elif test -d c:/. ; then
+ : OS/2 or cygwin
+ _exe=".exe"
+else
+ : All other UNIX systems
+ _exe=""
+fi
+
diff --git a/mcon/U/Inlibc.U b/mcon/U/Inlibc.U
new file mode 100644
index 0000000..36796ea
--- /dev/null
+++ b/mcon/U/Inlibc.U
@@ -0,0 +1,64 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: Inlibc.U,v $
+?RCS: Revision 3.0.1.1 1994/10/29 15:55:08 ram
+?RCS: patch36: call ./whoa explicitly instead of relying on PATH
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:05:03 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: This unit checks for the definition of a given function.
+?X:
+?X: To use it, say:
+?X: set function d_func
+?X: eval $inlibc
+?X:
+?MAKE:Inlibc: Csym Whoa Oldconfig
+?MAKE: -pick add $@ %<
+?LINT:define inlibc
+?V:inlibc
+?S:inlibc:
+?S: This shell variable is used internally by Configure to check
+?S: wether a given function is defined or not. A typical use is:
+?S: set function d_func
+?S: eval $inlibc
+?S: That will print a message, saying wether function was found or
+?S: not and set d_func accordingly.
+?S:.
+?T:was tx sym tres td tu var
+: define an is-in-libc? function
+inlibc='echo " "; td=$define; tu=$undef;
+sym=$1; var=$2; eval "was=\$$2";
+tx=yes;
+case "$reuseval$was" in
+true) ;;
+true*) tx=no;;
+esac;
+case "$tx" in
+yes)
+ set $sym tres -f;
+ eval $csym;
+ case "$tres" in
+ true)
+ echo "$sym() found." >&4;
+ case "$was" in $undef) . ./whoa; esac; eval "$var=\$td";;
+ *)
+ echo "$sym() NOT found." >&4;
+ case "$was" in $define) . ./whoa; esac; eval "$var=\$tu";;
+ esac;;
+*)
+ case "$was" in
+ $define) echo "$sym() found." >&4;;
+ *) echo "$sym() NOT found." >&4;;
+ esac;;
+esac'
+
diff --git a/mcon/U/Instruct.U b/mcon/U/Instruct.U
new file mode 100644
index 0000000..3bc4de2
--- /dev/null
+++ b/mcon/U/Instruct.U
@@ -0,0 +1,116 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: Instruct.U,v $
+?RCS: Revision 3.0.1.3 1997/02/28 15:02:55 ram
+?RCS: patch61: logname / whoami sequence rewritten to use case
+?RCS:
+?RCS: Revision 3.0.1.2 1995/02/15 14:11:34 ram
+?RCS: patch51: author name now appears at the end of the paragraph (WED)
+?RCS:
+?RCS: Revision 3.0.1.1 1995/01/11 15:12:05 ram
+?RCS: patch45: now documents the & escape to turn -d on at the read prompt
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:05:04 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: This unit spew out the directions that we want everyone to read. I try to
+?X: keep the first "pagefull" much less than a page since they don't know it
+?X: isn't going to go shooting off the top of the screen, and we don't want
+?X: to panic them yet.
+?X:
+?MAKE:Instruct: Begin Myread Configdir contains
+?MAKE: -pick wipe $@ %<
+?T:user needman firsttime
+: general instructions
+needman=true
+firsttime=true
+user=`(logname) 2>/dev/null`
+case "$user" in
+'') user=`whoami 2>&1`;;
+esac
+if $contains "^$user\$" ../.config/instruct >/dev/null 2>&1; then
+ firsttime=false
+ echo " "
+ rp='Would you like to see the instructions?'
+ dflt=n
+ . ./myread
+ case "$ans" in
+ [yY]*) ;;
+ *) needman=false;;
+ esac
+fi
+if $needman; then
+ cat <<EOH
+
+This installation shell script will examine your system and ask you questions
+to determine how the <PACKAGENAME> package should be installed. If you get
+stuck on a question, you may use a ! shell escape to start a subshell or
+execute a command. Many of the questions will have default answers in square
+brackets; typing carriage return will give you the default.
+
+On some of the questions which ask for file or directory names you are allowed
+to use the ~name construct to specify the login directory belonging to "name",
+even if you don't have a shell which knows about that. Questions where this is
+allowed will be marked "(~name ok)".
+
+EOH
+ rp=''
+ dflt='Type carriage return to continue'
+ . ./myread
+ cat <<'EOH'
+
+The prompter used in this script allows you to use shell variables and
+backticks in your answers. You may use $1, $2, etc... to refer to the words
+in the default answer, as if the default line was a set of arguments given to a
+script shell. This means you may also use $* to repeat the whole default line,
+so you do not have to re-type everything to add something to the default.
+
+Everytime there is a substitution, you will have to confirm. If there is an
+error (e.g. an unmatched backtick), the default answer will remain unchanged
+and you will be prompted again.
+
+If you are in a hurry, you may run 'Configure -d'. This will bypass nearly all
+the questions and use the computed defaults (or the previous answers if there
+was already a config.sh file). Type 'Configure -h' for a list of options.
+You may also start interactively and then answer '& -d' at any prompt to turn
+on the non-interactive behaviour for the remainder of the execution.
+
+EOH
+ . ./myread
+ cat <<EOH
+
+Much effort has been expended to ensure that this shell script will run on any
+Unix system. If despite that it blows up on yours, your best bet is to edit
+Configure and run it again. If you can't run Configure for some reason,
+you'll have to generate a config.sh file by hand. Whatever problems you
+have, let me (<MAINTLOC>) know how I blew it.
+
+This installation script affects things in two ways:
+
+1) it may do direct variable substitutions on some of the files included
+ in this kit.
+2) it builds a config.h file for inclusion in C programs. You may edit
+ any of these files as the need arises after running this script.
+
+If you make a mistake on a question, there is no easy way to back up to it
+currently. The easiest thing to do is to edit config.sh and rerun all the SH
+files. Configure will offer to let you do this before it runs the SH files.
+
+EOH
+?X: In case they played with the prompter...
+ dflt='Type carriage return to continue'
+ . ./myread
+ case "$firsttime" in
+ true) echo $user >>../.config/instruct;;
+ esac
+fi
+
diff --git a/mcon/U/Largefile.U b/mcon/U/Largefile.U
new file mode 100644
index 0000000..559175a
--- /dev/null
+++ b/mcon/U/Largefile.U
@@ -0,0 +1,74 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 2006, Christian Biere
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:Largefile: Trylink cat ccflags i_unistd
+?MAKE: -pick add $@ %<
+?T:flags result saved_ccflags
+?W:%<:off_t
+?LINT:change ccflags
+: determine how to compile for large 64-bit file support
+echo " "
+echo "Checking whether we need flags for large file support..." >&4
+flags='-D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64'
+$cat >try.c <<EOC
+#include <sys/types.h>
+#$i_unistd I_UNISTD
+#ifdef I_UNISTD
+#include <unistd.h>
+#endif
+int main(void)
+{
+ switch (0) { case 0: case (sizeof(off_t) >= 8): break; }
+ return 0;
+}
+EOC
+
+result=''
+set result
+eval $trylink
+
+case "$result" in
+"$define")
+ echo "Selected C flags already provide 64-bit file support."
+ ;;
+"$undef")
+ echo "You're not natively compiling for large file, fixing..." >&4
+
+ saved_ccflags=$ccflags
+ ccflags="$flags $ccflags"
+
+ $cat >try.c <<EOC
+#include <sys/types.h>
+#$i_unistd I_UNISTD
+#ifdef I_UNISTD
+#include <unistd.h>
+#endif
+int main(void)
+{
+ switch (0) { case 0: case (sizeof(off_t) >= 8): break; }
+ return 0;
+}
+EOC
+ result=''
+ set result
+ eval $trylink
+
+ case "$result" in
+ "$define")
+ echo "(Adding $flags)"
+ ;;
+ "$undef")
+ echo "(Could not compile the test program, using 32-bit files)" >&4
+ ccflags=$saved_ccflags
+ ;;
+ esac
+ ;;
+esac
+
diff --git a/mcon/U/Loc.U b/mcon/U/Loc.U
new file mode 100644
index 0000000..6d6a5d0
--- /dev/null
+++ b/mcon/U/Loc.U
@@ -0,0 +1,442 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: Loc.U,v $
+?RCS: Revision 3.0.1.10 1997/02/28 15:04:16 ram
+?RCS: patch61: allow users to specify paths on the command line
+?RCS: patch61: will now substitute cp for ln if not supported
+?RCS:
+?RCS: Revision 3.0.1.9 1995/09/25 09:11:24 ram
+?RCS: patch59: commented the purpose of the #un-def directive
+?RCS: patch59: abort Configure run when mandatory command is missing
+?RCS:
+?RCS: Revision 3.0.1.8 1995/07/25 13:40:40 ram
+?RCS: patch56: now knows about OS/2 platforms
+?RCS:
+?RCS: Revision 3.0.1.7 1995/01/11 15:13:37 ram
+?RCS: patch45: protected "sh -c" within backquotes for Linux and SGI
+?RCS: patch45: added path lookup for the 'comm' program
+?RCS:
+?RCS: Revision 3.0.1.6 1994/10/29 15:56:14 ram
+?RCS: patch36: added ?F: line for metalint file checking
+?RCS: patch36: be careful and guard against wildcard searching (ADO)
+?RCS:
+?RCS: Revision 3.0.1.5 1994/06/20 06:54:55 ram
+?RCS: patch30: now locates find
+?RCS:
+?RCS: Revision 3.0.1.4 1994/05/13 15:18:15 ram
+?RCS: patch27: added byacc to the trylist (ADO)
+?RCS: patch27: lint lines reformatted (ADO)
+?RCS:
+?RCS: Revision 3.0.1.3 1994/01/24 14:01:44 ram
+?RCS: patch16: added metalint hint on changed PATH variable
+?RCS:
+?RCS: Revision 3.0.1.2 1993/12/15 08:16:52 ram
+?RCS: patch15: now set _test variable when test is built-in
+?RCS: patch15: fixed rare cases where echo is not needed
+?RCS:
+?RCS: Revision 3.0.1.1 1993/09/13 15:47:13 ram
+?RCS: patch10: test program not always in /bin/test (WAD)
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:05:05 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: This unit produces a shell script "loc" which can be used to find out
+?X: where in a list of directories something is. It then uses loc to
+?X: determine the location of commonly used programs. It leaves loc sitting
+?X: around for other Configure units to use, but arranges for its demise
+?X: at the end of Configure.
+?X:
+?X: To add a new program to find, add it both to the ?MAKE: line and to either
+?X: the loclist or trylist variable.
+?X:
+?X: I put startsh at the end of the dependency list, in order to avoid the
+?X: loading of the spitshell unit before the instructions.
+?X:
+?MAKE:Loc awk ar bash bison byacc cat chgrp chmod chown \
+ comm compress cp cpio cpp csh date echo egrep emacs expr find flex \
+ gcc gmake gzip grep inews ksh less line lint ln lp lpr ls mail mailx \
+ make mkdir more mv nawk nm nroff perl pg pmake pr rm rmail sed sendmail \
+ shar sleep smail sort submit tail tar tbl tee test touch tr troff \
+ gmsgfmt msgfmt msgmerge xgettext \
+ uname uniq uuname vi wc zcat zip: eunicefix n c startsh Instruct Warn
+?MAKE: -pick weed $@ %<
+?LINT: describe awk ar bash bison byacc cat chgrp chmod chown \
+ comm compress cp cpio cpp csh date echo egrep emacs expr find flex \
+ gcc gmake gzip grep inews ksh less line lint ln lp lpr ls mail mailx \
+ make mkdir more mv nawk nm nroff perl pg pmake pr rm rmail sed sendmail \
+ shar sleep smail sort submit tail tar tbl tee test touch tr troff \
+ gmsgfmt msgfmt msgmerge xgettext \
+ uname uniq uuname vi wc zcat zip
+?V::pth loclist trylist
+?F:./loc
+?T:thisthing thing xxx dir file say DJGPP
+?T:_echo _test _grep _cp _gmake _egrep _ln _make dflt
+?LINT: change PATH
+: find out where common programs are
+echo " "
+echo "Locating common programs..." >&4
+cat <<EOSC >loc
+$startsh
+case \$# in
+0) exit 1;;
+esac
+thing=\$1
+shift
+dflt=\$1
+shift
+for dir in \$*; do
+ case "\$thing" in
+ .)
+ if test -d \$dir/\$thing; then
+ echo \$dir
+ exit 0
+ fi
+ ;;
+ *)
+?X: Be careful in case thing includes wildcards that might expand to multiple
+?X: files. Choose the last one. This happens when searching for shared
+?X: libraries with version numbers. How to choose which one we want is
+?X: probably an insoluble problem, in general.
+?X: Some folks leave things like libc.so.orig around w/o read
+?X: permission. A -r test would handle that, but since ./loc is
+?X: also used to find executables (which are installed w/o read
+?X: permission on SCO ODT 3.0, we can't include the -r test.
+ for thisthing in \$dir/\$thing; do
+ : just loop through to pick last item
+ done
+ if test -f \$thisthing; then
+ echo \$thisthing
+ exit 0
+ elif test -f \$thisthing$_exe; then
+ echo \$thisthing
+ exit 0
+ elif test -f \$dir/\$thing.exe; then
+ if test -n "$DJGPP"; then
+ echo \$dir/\$thing.exe
+ else
+ : on Eunice apparently
+ echo \$dir/\$thing
+ fi
+ exit 0
+ fi
+ ;;
+ esac
+done
+echo \$dflt
+exit 1
+EOSC
+chmod +x loc
+$eunicefix loc
+loclist="
+?awk:awk
+?cat:cat
+?chgrp:chgrp
+?chmod:chmod
+?chown:chown
+?comm:comm
+?cp:cp
+?echo:echo
+?expr:expr
+?find:find
+?grep:grep
+?ls:ls
+?make:make
+?mkdir:mkdir
+?mv:mv
+?rm:rm
+?sed:sed
+?sleep:sleep
+?sort:sort
+?tail:tail
+?touch:touch
+?tr:tr
+?uniq:uniq
+"
+trylist="
+?Mcc:Mcc
+?ar:ar
+?bash:bash
+?bison:bison
+?byacc:byacc
+?compress:compress
+?cpio:cpio
+?cpp:cpp
+?csh:csh
+?date:date
+?egrep:egrep
+?emacs:emacs
+?flex:flex
+?gmake:gmake
+?gcc:gcc
+?gmsgfmt:gmsgfmt
+?gzip:gzip
+?inews:inews
+?ksh:ksh
+?less:less
+?line:line
+?lint:lint
+?ln:ln
+?lp:lp
+?lpr:lpr
+?mail:mail
+?mailx:mailx
+?more:more
+?msgfmt:msgfmt
+?msgmerge:msgmerge
+?nawk:nawk
+?nm:nm
+?nroff:nroff
+?perl:perl
+?pg:pg
+?pmake:pmake
+?pr:pr
+?rmail:rmail
+?sendmail:sendmail
+?shar:shar
+?smail:smail
+?submit:submit
+?tar:tar
+?tbl:tbl
+?tee:tee
+?test:test
+?troff:troff
+?uname:uname
+?uuname:uuname
+?vi:vi
+?wc:wc
+?xgettext:xgettext
+?zcat:zcat
+?zip:zip
+"
+?LINT: set awk ar bash bison byacc cat chgrp chmod chown \
+ comm compress cp cpio cpp csh date emacs expr find flex \
+ gcc gmake gzip grep inews ksh less line lint lp lpr ls mail mailx \
+ mkdir more mv nawk nm nroff perl pg pmake pr rm rmail sed sendmail \
+ shar sleep smail sort submit tail tar tbl tee touch tr troff \
+ msgfmt msgmerge \
+ uname uniq uuname vi wc zcat zip
+pth=`echo $PATH | sed -e "s/$p_/ /g"`
+pth="$pth /sbin /usr/sbin /lib /usr/lib /etc"
+for file in $loclist; do
+?X:
+?X: Allow them to -Dmake=pmake on the command line for instance...
+?X: If the file is not fully qualified, as in -Dmake=pmake, then we
+?X: look the for the specified command (pmake here). If they say
+?X: -Dmake=/sbin/make for instance, then we make sure the file
+?X: exists, or we die...
+?X:
+ eval xxx=\$$file
+ case "$xxx" in
+ /*|?:[\\/]*)
+ if test -f "$xxx"; then
+ : ok
+ else
+ ./warn "no $xxx -- ignoring your setting for $file." 4>&4
+ xxx=`./loc $file $file $pth`
+ fi
+ ;;
+ '') xxx=`./loc $file $file $pth`;;
+ *) xxx=`./loc $xxx $xxx $pth`;;
+ esac
+ eval $file=$xxx
+ eval _$file=$xxx
+ case "$xxx" in
+ /*)
+ echo $file is in $xxx.
+ ;;
+?X: Under OS/2, we have PC-like paths
+ ?:[\\/]*)
+ echo $file is in $xxx.
+ ;;
+ *)
+ echo "I don't know where '$file' is, and my life depends on it." >&4
+ echo "Go find a public domain implementation or fix your PATH!" >&4
+ exit 1
+ ;;
+ esac
+done
+echo " "
+echo "Don't worry if any of the following aren't found..."
+say=offhand
+for file in $trylist; do
+?X: Allow them to -Dmake=pmake on the command line for instance (see above)
+ eval xxx=\$$file
+ case "$xxx" in
+ /*|?:[\\/]*)
+ if test -f "$xxx"; then
+ : ok
+ else
+ ./warn "no $xxx -- ignoring your setting for $file." 4>&4
+ xxx=`./loc $file $file $pth`
+ fi
+ ;;
+ '') xxx=`./loc $file $file $pth`;;
+ *) xxx=`./loc $xxx $xxx $pth`;;
+ esac
+ eval $file=$xxx
+ eval _$file=$xxx
+ case "$xxx" in
+ /*)
+ echo $file is in $xxx.
+ ;;
+?X: Under OS/2, we have PC-like paths
+ ?:[\\/]*)
+ echo $file is in $xxx.
+ ;;
+ *)
+ echo "I don't see $file out there, $say."
+ say=either
+ ;;
+ esac
+done
+case "$egrep" in
+egrep$_exe|egrep)
+ echo "Substituting grep for egrep."
+ egrep=$grep
+ _egrep=$_grep
+ ;;
+esac
+@if ln
+case "$ln" in
+ln$_exe|ln)
+ echo "Substituting cp for ln."
+ ln=$cp
+ _ln=$_cp
+ ;;
+esac
+@end
+@if make || gmake
+case "$make" in
+make$_exe|make)
+ case "$gmake" in
+ gmake)
+ echo "I can't find make or gmake, and my life depends on it." >&4
+ echo "Go find a public domain implementation or fix your PATH setting!" >&4
+ exit 1
+ ;;
+ esac
+ ;;
+esac
+case "$gmake" in
+gmake$_exe|gmake) ;;
+*)
+?X: We can't have osname yet.
+?X: On Stratus VOS, assume that gmake, if found, is definitely GNU make
+?X: and prefer it over the system make.
+ if test -f "/system/gnu_library/bin/ar.pm"; then
+ : Stratus VOS
+ echo "Substituting gmake for make."
+ make=$gmake
+ _make=$_gmake
+ fi
+ ;;
+esac
+@end
+@if gmsgfmt && msgfmt
+?LINT: extern _msgfmt
+?LINT: change _gmsgfmt
+case "$gmsgfmt" in
+gmsgfmt$_exe|gmsgfmt)
+ echo "Substituting msgfmt for gmsgfmt."
+ gmsgfmt=$msgfmt
+ _gmsgfmt=$_msgfmt
+ ;;
+*)
+ if $gmsgfmt --statistics /dev/null >/dev/null 2>&1 &&
+ (if $gmsgfmt --statistics /dev/null 2>&1 >/dev/null | \
+ grep usage >/dev/null; then exit 0; else exit 1; fi)
+ then
+ echo "Your $gmsgfmt is not GNU msgfmt; substituting msgfmt."
+ gmsgfmt=$msgfmt
+ _gmsgfmt=$_msgfmt
+ fi
+ ;;
+esac
+@end
+@if xgettext
+?LINT: change _xgettext
+case "$xgettext" in
+xgettext$_exe|xgettext)
+ xgettext=":"
+ _xgettext=":"
+ ;;
+*)
+ if $xgettext --omit-header --copyright-holder= /dev/null >/dev/null 2>&1 &&
+ (if $xgettext --omit-header --copyright-holder= \
+ /dev/null 2>&1 >/dev/null | \
+ grep usage >/dev/null; then exit 0; else exit 1; fi)
+ then
+ echo "Your $xgettext is not GNU xgettext; ignoring it."
+ xgettext=":"
+ _xgettext=":"
+ elif $xgettext --from-code=UTF-8 /dev/null >/dev/null 2>&1; then
+ : ok
+ else
+ echo "Your $xgettext does not support --from-code; ignoring it."
+ xgettext=":"
+ _xgettext=":"
+ fi
+ ;;
+esac
+@end
+case "$test" in
+test|test$_exe)
+ echo "Hopefully test is built into your sh."
+ test=test
+ ;;
+*)
+ if `sh -c "PATH= test true" >/dev/null 2>&1`; then
+ echo "Using the test built into your sh."
+?X:
+?X: We need to set both test and _test, since Oldconfig.U will use the _test
+?X: value to systematically restore computed paths, which may be wrong if
+?X: we choose to load an old config.sh generated on another platform.
+?X:
+ test=test
+ _test=test
+ fi
+ ;;
+esac
+?LINT:change n c
+case "$echo" in
+echo|echo$_exe)
+ echo "Hopefully echo is built into your sh."
+ echo=echo
+ ;;
+?X: For those rare cases where we don't need $echo...
+'') ;;
+*)
+ echo " "
+echo "Checking compatibility between $_echo and builtin echo (if any)..." >&4
+ $echo $n "hi there$c" >foo1
+ echo $n "hi there$c" >foo2
+ if cmp foo1 foo2 >/dev/null 2>&1; then
+ echo "They are compatible. In fact, they may be identical."
+ else
+ case "$n" in
+ '-n') n='' c='\c';;
+ *) n='-n' c='';;
+ esac
+ cat <<FOO
+They are not compatible! You are probably running ksh on a non-USG system.
+I'll have to use $echo instead of the builtin, since Bourne shell doesn't
+have echo built in and we may have to run some Bourne shell scripts. That
+means I'll have to use '$n$c' to suppress newlines now. Life is ridiculous.
+
+FOO
+ $echo $n "The star should be here-->$c"
+ $echo "*"
+ fi
+ $rm -f foo1 foo2
+ ;;
+esac
+
diff --git a/mcon/U/Loc_sed.U b/mcon/U/Loc_sed.U
new file mode 100644
index 0000000..09a7c1c
--- /dev/null
+++ b/mcon/U/Loc_sed.U
@@ -0,0 +1,33 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1996, Andy Dougherty
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?X: This is used in perl.c.
+?MAKE:full_sed: sed
+?MAKE: -pick add $@ %<
+?S:full_sed:
+?S: This variable contains the full pathname to 'sed', whether or
+?S: not the user has specified 'portability'. This is only used
+?S: in the compiled C program, and we assume that all systems which
+?S: can share this executable will have the same full pathname to
+?S: 'sed.'
+?S:.
+?X: Yes, I know about the C symbol PORTABLE, but I think sed
+?X: is unlikely to move, and I'm too lazy to add all the
+?X: #ifdef PORTABLE sections to the perl source.
+?X:
+?C:LOC_SED:
+?C: This symbol holds the complete pathname to the sed program.
+?C:.
+?H:#define LOC_SED "$full_sed" /**/
+?H:.
+: Store the full pathname to the sed program for use in the C program
+full_sed=$sed
+
diff --git a/mcon/U/Magic_h.U b/mcon/U/Magic_h.U
new file mode 100644
index 0000000..ccf82b9
--- /dev/null
+++ b/mcon/U/Magic_h.U
@@ -0,0 +1,43 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: Magic_h.U,v $
+?RCS: Revision 3.0.1.2 1993/11/10 17:32:58 ram
+?RCS: patch14: forgot to mention Id in the dependencies
+?RCS:
+?RCS: Revision 3.0.1.1 1993/10/16 13:46:59 ram
+?RCS: patch12: created for ?M: lines support (magic symbols)
+?RCS:
+?X:
+?X: This file ends up producing the confmagic.h include, which is used to
+?X: automagically remap some C symbols via cpp redefinitions.
+?X:
+?X: The file ./Magic_h below contains all the ?M: lines extracted out of all
+?X: the units. Metaconfig itself adds the final #endif statement.
+?X: Note that this code isn't included into Configure, but must be shipped with.
+?X:
+?MAKE:Magic_h: Id Config_h
+?MAKE: -pick cm_h_weed $@ %<
+?MAKE: -pick cm_h_weed $@ ./Magic_h
+?LINT:nocomment
+/*
+ * This file was produced by running metaconfig and is intended to be included
+ * after config.h and after all the other needed includes have been dealt with.
+ *
+ * This file may be empty, and should not be edited. Rerun metaconfig instead.
+ * If you wish to get rid of this magic, remove this file and rerun metaconfig
+ * without the -M option.
+ *
+ * $Id$
+ */
+
+#ifndef _confmagic_h_
+#define _confmagic_h_
+
diff --git a/mcon/U/MailAuthor.U b/mcon/U/MailAuthor.U
new file mode 100644
index 0000000..5b93cde
--- /dev/null
+++ b/mcon/U/MailAuthor.U
@@ -0,0 +1,192 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Graham Stoney <greyham@research.canon.oz.au>
+?RCS:
+?RCS: $Log: MailAuthor.U,v $
+?RCS: Revision 3.0.1.5 1997/02/28 15:04:41 ram
+?RCS: patch61: added support for src.U
+?RCS:
+?RCS: Revision 3.0.1.4 1994/08/29 16:05:09 ram
+?RCS: patch32: avoid message sending if they said no previously
+?RCS:
+?RCS: Revision 3.0.1.3 1993/10/16 13:47:30 ram
+?RCS: patch12: now makes sure user-specified address is in Internet format
+?RCS:
+?RCS: Revision 3.0.1.2 1993/09/13 15:48:49 ram
+?RCS: patch10: reverted to original intent by the Author himself
+?RCS:
+?RCS: Revision 3.0.1.1 1993/08/27 14:38:38 ram
+?RCS: patch7: now prompts user for its e-mail address
+?RCS: patch7: no longer silent when mail has been sent
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:05:06 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?RCS:
+?X:
+?X: This unit asks the user to please send a message to the author.
+?X: To force inclusion of this unit, you must add it's name to the
+?X: dependencies on the MAKE line in your private copy of End.U.
+?X: This allows a smart mailagent program to automatically let users know
+?X: when their package is out of date, and to allow users to be notified of
+?X: any future patches.
+?X:
+?MAKE:MailAuthor mailpatches notifypatches usermail: test cat mailer \
+ package Myread patchlevel baserev rm rsrc Oldconfig Configdir
+?MAKE: -pick wipe $@ %<
+?S:mailpatches:
+?S: Indicates whether the user would like future patches to be mailed
+?S: directly to them.
+?S:.
+?S:notifypatches:
+?S: Indicates whether the user would like notification of future patches
+?S: mailed to them.
+?S:.
+?S:usermail:
+?S: This variable is used internally by Configure to keep track of the
+?S: user e-mail address, where notifications or patches should be sent.
+?S: A '-' value means the return address will be extracted by parsing
+?S: the mail headers.
+?S:.
+?T:opt mailpatches notifypatches atsh status
+: notify author that his package is used
+if $test -f ../.config/mailauthor &&
+ cmp $rsrc/patchlevel.h ../.config/mailauthor >/dev/null 2>&1
+then
+ status="say that you're using $package";
+ case "$mailpatches" in
+ true) status='have patches mailed to you as they are issued';;
+ esac
+ case "$notifypatches" in
+ true) status='be notified when new patches are issued';;
+ esac
+ $cat <<EOM
+
+You have already sent the author of $package (<MAINTLOC>) mail to
+$status. If you wish, you may modify
+your previous request by sending a new mail with different options.
+
+EOM
+ rp='Should I send a status update to <MAINTLOC>?'
+ dflt=n
+else
+ $cat <<EOM
+
+If you are able to send mail to the Internet, the author of $package would
+really appreciate you letting me send off a quick note, just to say that you've
+tried it. The author is more likely to spend time maintaining $package if it's
+known that many people are using it, and you can even ask to get sent new
+patches automagically this way if you wish. To protect your privacy, all I'll
+say in the mail is the version of $package that you're using.
+
+EOM
+ rp='Should I send mail to <MAINTLOC>?'
+ dflt=y
+?X: Ensure default is 'n' if question has been asked already, in case they
+?X: run Configure -d next time and answered 'n' the first time. Therefore,
+?X: an empty nomail will be created later on even if no mail is sent.
+ $test -f ../.config/nomail && dflt=n
+fi
+. ./myread
+case "$ans" in
+[yY]*)
+ echo " "
+ echo "Great! Your cooperation is really appreciated."
+ $cat <<EOM
+
+Some braindead sites do not set a proper return address in the From: header of
+their outgoing mail, making it impossible to reply to mail they generate.
+If your site is broken in this way, write to your system administrator and get
+it fixed!!! In the mean time, you can manually specify the Internet e-mail
+address by which the author can get back to you, should there be a need to do
+so. If manually specified, it should be something like "user@domain.top".
+If your mail system generates addresses correctly, specify "none".
+
+EOM
+ case "$usermail" in
+ '-'|'') dflt=none;;
+ *) dflt="$usermail";;
+ esac
+ rp='Manually specify a return address to use:'
+ . ./myread
+ case "$ans" in
+ none|*@*.*)
+ case "$ans" in
+ none) usermail='-';;
+ *) usermail="$ans";;
+ esac
+ ;;
+ *)
+ echo "(Address does not look like an Internet one -- ignoring it.)"
+?X:
+?X: If we can't trust their mailer or their return address, it's highly
+?X: suggested that they only register and don't ask to get anything from
+?X: the author, since it's likely to bounce in null-land -- RAM.
+?X:
+ usermail='-'
+ mailpatches=false
+ notifypatches=false
+ ;;
+ esac
+ echo " "
+ opt=''
+ rp='Would you like to have new patches automatically mailed to you?'
+ case "$mailpatches" in
+ true) dflt=y;;
+ *) dflt=n;;
+ esac
+ . ./myread
+ case "$ans" in
+ [yY]*) opt=' mailpatches'; mailpatches=true;;
+ *)
+ mailpatches=false
+ echo " "
+ rp='Ok, would you like to simply be notified of new patches?'
+ case "$notifypatches" in
+ false) dflt=n;;
+ *) dflt=y;;
+ esac
+ . ./myread
+ echo " "
+ case "$ans" in
+ [yY]*) opt=' notifypatches'; notifypatches=true;;
+ *)
+ echo "Fine, I'll simply say that you've tried it then."
+ notifypatches=false
+ ;;
+ esac
+ ;;
+ esac
+ echo "Sending mail to <MAINTLOC>..." >&4
+?X: Bizarre hack here. We can't just put @SH in the hereis lines below, because
+?X: metaconfig will interpret it as a command, and there's no quoting mechanism.
+?X: Do it via a variable instead.
+ atsh='@SH'
+ $mailer <MAINTLOC> <<EOM >/dev/null 2>&1
+Subject: Command
+Precedence: junk
+To: <MAINTLOC>
+
+$atsh package $usermail $package $baserev $patchlevel$opt
+EOM
+ $rm -f ../.config/mailauthor ../.config/nomail
+ cp $rsrc/patchlevel.h ../.config/mailauthor
+ ;;
+*)
+ case "$dflt" in
+ "y")
+ echo "Oh well, maybe next time."
+ cp /dev/null ../.config/nomail
+ ;;
+ esac
+ ;;
+esac
+
diff --git a/mcon/U/MailList.U b/mcon/U/MailList.U
new file mode 100644
index 0000000..f89262f
--- /dev/null
+++ b/mcon/U/MailList.U
@@ -0,0 +1,82 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Graham Stoney <greyham@research.canon.oz.au>
+?RCS:
+?RCS: $Log: MailList.U,v $
+?RCS: Revision 3.0.1.1 1994/01/24 14:01:49 ram
+?RCS: patch16: created
+?RCS:
+?RCS:
+?X:
+?X: This unit offers the user the option of subscribing to the mailing
+?X: list. To force inclusion of this unit, you must add it's name to the
+?X: dependencies on the MAKE line in your private copy of End.U.
+?X: The address of the mailing list server must be set via a "list_request=..."
+?X: entry in the .package file. This is usually done by running packinit and
+?X: answering the proper questions.
+?X:
+?MAKE:MailList: cat mailer package Myread cf_name cf_email
+?MAKE: -pick wipe $@ %<
+?T:list_request list_sub list_unsub list_name
+?X:
+?X: The cf_name dependency is used through list_sub when the mailing list
+?X: manager happens to be listserv, whereas cf_email is used whith majordomo
+?X: or when the mailing list request address is scanned by a human. Since
+?X: they do not appear within the unit itself, we need a lint hint.
+?X:
+?LINT:use cf_name cf_email
+: offer to join the mailing list
+list_request='<$list_request>'
+list_sub="<$list_sub>"
+list_unsub="<$list_unsub>"
+list_name="<$list_name>"
+$cat <<EOM
+
+There is a mailing list for discussion about $package and related issues.
+This is the preferred place to ask questions about the program and discuss
+modifications and additions with the author and other users. If you are able
+to send mail to the Internet, you are encouraged to subscribe. You need only
+ever subscribe once, and you can unsubscribe automatically at any time in the
+future. If you have already subscribed and you wish to unsubscribe now, you
+may do so by answering "unsubscribe". Answer "subscribe" to subscribe to the
+list.
+
+EOM
+rp="Subscribe to or unsubscribe from the $list_name mailing list?"
+dflt=neither
+. ./myread
+case "$ans" in
+[sS]*) $cat <<EOM
+
+You will be sent a message from the list server to let you know when your
+subscription has been successful and telling you how to submit articles and
+how to unsubscribe again when necessary. You may also unsubscribe by running
+this script again and asking it to do so for you.
+
+EOM
+ echo "Sending mail to subscribe you to the $list_name list..." >&4
+ $mailer $list_request <<EOM >/dev/null 2>&1
+Precedence: junk
+To: $list_request
+
+$list_sub
+EOM
+ ;;
+[uU]*) echo "Sending mail to unsubscribe you from the $list_name list..." >&4
+ $mailer $list_request <<EOM >/dev/null 2>&1
+Precedence: junk
+To: $list_request
+
+$list_unsub
+EOM
+ ;;
+esac
+
diff --git a/mcon/U/Mips.U b/mcon/U/Mips.U
new file mode 100644
index 0000000..603b713
--- /dev/null
+++ b/mcon/U/Mips.U
@@ -0,0 +1,69 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: usrinc.U,v $
+?RCS: Revision 3.0.1.3 1997/02/28 16:27:12 ram
+?RCS: patch61: don't ask for the include path unless they are on a MIPS
+?RCS:
+?RCS: Revision 3.0.1.2 1995/05/12 12:24:36 ram
+?RCS: patch54: ensure that ./mips always exists (ADO)
+?RCS:
+?RCS: Revision 3.0.1.1 1994/05/06 15:18:31 ram
+?RCS: patch23: ensure usrinc value is preserved across sessions (WED)
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:09:58 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:Mips mips_type incpath: test cat echo n c Getfile Guess \
+ Oldconfig eunicefix contains rm
+?MAKE: -pick add $@ %<
+?S:mips_type:
+?S: This variable holds the environment type for the mips system.
+?S: Possible values are "BSD 4.3" and "System V".
+?S:.
+?S:incpath:
+?S: This variable must precede the normal include path to get hte
+?S: right one, as in "$incpath/usr/include" or "$incpath/usr/lib".
+?S: Value can be "" or "/bsd43" on mips.
+?S:.
+?F:./mips !usr.c
+: What should the include directory be ?
+echo " "
+$echo $n "Hmm... $c"
+incpath=''
+?X: mips_type is used later, to add -DSYSTYPE_BSD43 to cppflags if needed.
+mips_type=''
+?X:
+?X: Cannot put the following in Guess, or we get a circular dependency.
+?X:
+if $test -f /bin/mips && /bin/mips; then
+ echo "Looks like a MIPS system..."
+ $cat >usr.c <<'EOCP'
+#ifdef SYSTYPE_BSD43
+/bsd43
+#endif
+EOCP
+ if cc -E usr.c > usr.out && $contains / usr.out >/dev/null 2>&1; then
+ dflt='/bsd43/usr/include'
+ incpath='/bsd43'
+ mips_type='BSD 4.3'
+ else
+ mips_type='System V'
+ fi
+ $rm -f usr.c usr.out
+ echo "and you're compiling with the $mips_type compiler and libraries."
+ echo "exit 0" >mips
+else
+ echo "Doesn't look like a MIPS system."
+ echo "exit 1" >mips
+fi
+chmod +x mips
+$eunicefix mips
+
diff --git a/mcon/U/Mkdirp.U b/mcon/U/Mkdirp.U
new file mode 100644
index 0000000..ab8097f
--- /dev/null
+++ b/mcon/U/Mkdirp.U
@@ -0,0 +1,51 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: Extract.U,v $
+?RCS: Revision 3.0.1.2 1997/02/28 14:58:52 ram
+?RCS: patch61: added support for src.U
+?RCS:
+?RCS: Revision 3.0.1.1 1994/10/29 15:51:46 ram
+?RCS: patch36: added ?F: line for metalint file checking
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:04:52 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: This unit produces a shell script which can launched to create a
+?X: directory path like "mkdir -p" would do.
+?X:
+?MAKE:Mkdirp: eunicefix startsh
+?MAKE: -pick add $@ %<
+?F:./mkdirp
+?T:name create file
+: script used to emulate mkdir -p
+cat >mkdirp <<EOS
+$startsh
+EOS
+cat >>mkdirp <<'EOS'
+name=$1;
+create="";
+while test $name; do
+ if test ! -d "$name"; then
+ create="$name $create"
+ name=`echo $name | sed -e "s|^[^/]*$||"`
+ name=`echo $name | sed -e "s|\(.*\)/.*|\1|"`
+ else
+ name=""
+ fi
+done
+for file in $create; do
+ mkdir $file
+done
+EOS
+chmod +x mkdirp
+$eunicefix mkdirp
+
diff --git a/mcon/U/Mksymlinks.U b/mcon/U/Mksymlinks.U
new file mode 100644
index 0000000..c150da4
--- /dev/null
+++ b/mcon/U/Mksymlinks.U
@@ -0,0 +1,90 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Copyright (c) 2000, Jarkko Hietaniemi
+?RCS:
+?X:
+?X: This unit allows the duplication of the source tree to the current
+?X: directory via symbolic links. This must be requested explicitly
+?X: by them issuing a -Dmksymlinks on the command line.
+?X:
+?MAKE:Mksymlinks: Mkdirp lns issymlink src rsrc pkgsrc
+?MAKE: -pick add $@ %<
+?F:!UU
+?T: dir filename tmppwd filelist
+?LINT:extern mksymlinks
+@if {test -f ../MANIFEST}
+: Duplicate the tree with symbolic links if -Dmksymlinks was supplied
+case "$mksymlinks" in
+$define|true|[yY]*)
+ echo " "
+ case "$src" in
+ ''|'.') echo "Cannot create symlinks in the original directory." >&4
+ exit 1
+ ;;
+ *) case "$lns:$issymlink" in
+ *"ln"*" -s:"*"test -"?)
+ echo "Creating the symbolic links..." >&4
+ echo "(First creating the subdirectories...)" >&4
+ cd ..
+ awk '{print $1}' $src/MANIFEST | grep / | sed 's:/[^/]*$::' | \
+ sort -u | while true
+ do
+ read dir
+ test -z "$dir" && break
+ ./UU/mkdirp $dir 2>/dev/null
+ if test -d $dir; then
+ : ok
+ else
+ echo "Failed to create '$dir'. Aborting." >&4
+ exit 1
+ fi
+ done
+ echo "(Now creating the symlinks...)" >&4
+ awk '{print $1}' $src/MANIFEST | while true; do
+ read filename
+ test -z "$filename" && break
+ if test -f $filename; then
+ if $issymlink $filename; then
+ rm -f $filename
+ fi
+ fi
+ if test -f $filename; then
+ echo "$filename already exists, not symlinking."
+ else
+?X: Note that the following works because "$pkgsrc" is absolute
+ ln -s $pkgsrc/$filename $filename
+ fi
+ done
+?X: Check that everything was correctly copied
+ echo "(Checking current directory...)" >&4
+ cd UU
+ awk '$1 !~ /PACK[A-Z]+/ {print $1}' "$rsrc/MANIFEST" | \
+ (split -l 50 2>/dev/null || split -50)
+ rm -f missing
+ tmppwd=`pwd`
+ for filelist in x??; do
+ (cd ..; ls `cat "$tmppwd/$filelist"` \
+ >/dev/null 2>>"$tmppwd/missing")
+ done
+ if test -s missing; then
+ echo "Failed duplication of source tree. Aborting." >&4
+ exit 1
+ fi
+ ;;
+ *) echo "(I cannot figure out how to do symbolic links, ignoring!)" >&4
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+esac
+
+@end
diff --git a/mcon/U/Myinit.U b/mcon/U/Myinit.U
new file mode 100644
index 0000000..81747c3
--- /dev/null
+++ b/mcon/U/Myinit.U
@@ -0,0 +1,26 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: Myinit.U,v $
+?RCS: Revision 3.0.1.1 1994/10/31 09:47:29 ram
+?RCS: patch44: leading comment states this unit comes before option processing
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:05:07 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: If you want to initialize any default values, copy this unit to your
+?X: personal U directory and add the assignments to the end. This file
+?X: is included after variables are initialized but before any old
+?X: config.sh file is read in and before any Configure switch processing.
+?X:
+?MAKE:Myinit: Init
+?MAKE: -pick add $@ %<
+?LINT: nocomment
diff --git a/mcon/U/Myread.U b/mcon/U/Myread.U
new file mode 100644
index 0000000..0f879ed
--- /dev/null
+++ b/mcon/U/Myread.U
@@ -0,0 +1,199 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: Myread.U,v $
+?RCS: Revision 3.0.1.6 1997/02/28 15:05:39 ram
+?RCS: patch61: myread script now starts with a "startsh"
+?RCS: patch61: miscellaneous fixes
+?RCS:
+?RCS: Revision 3.0.1.5 1995/01/11 15:14:22 ram
+?RCS: patch45: added & escape allowing user to turn on -d from the prompt
+?RCS:
+?RCS: Revision 3.0.1.4 1994/10/31 09:48:04 ram
+?RCS: patch44: added Options to the MAKE line since it's no longer in Init.U
+?RCS:
+?RCS: Revision 3.0.1.3 1994/10/29 15:56:20 ram
+?RCS: patch36: added ?F: line for metalint file checking
+?RCS:
+?RCS: Revision 3.0.1.2 1993/08/30 08:57:59 ram
+?RCS: patch8: added new visible 'nostick' symbol, mainly for Finish.U
+?RCS:
+?RCS: Revision 3.0.1.1 1993/08/27 14:39:20 ram
+?RCS: patch7: now sticks to the question when no default and empty answer
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:05:08 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: This unit produces a bit of shell code that must be dotted in in order
+?X: to do a read. It allows for shell escapes, default assignment and
+?X: parameter evaluation.
+?X:
+?X: To use this unit, $rp and $dflt must hold the question and the
+?X: default answer. The question will be printed by the script itself.
+?X: Neither $rp nor $dflt is altered by the script.
+?X:
+?X: The myread script will stick to the question if no default is proposed
+?X: and the user answer is empty, which prevents mistakes. However, at the
+?X: end of Configure, there is an exception to this rule (Finish.U) where we
+?X: set nostick to a non-empty value to allow the Return key to play its role!
+?X:
+?MAKE:Myread: Options startsh n c trnl
+?MAKE: -pick add $@ %<
+?V:ans:dflt rp nostick
+?F:./myread
+?T:COLUMNS xxxm rp dflt answ aok myecho
+?LINT:change fastread
+?X: Some shells (Ultrix) do not understand ${COLUMNS:-80}, sigh!
+: compute the number of columns on the terminal for proper question formatting
+case "$COLUMNS" in
+'') COLUMNS='80';;
+esac
+
+: set up the echo used in my read
+?X:
+?X: This variable is intended to be eval'ed. It will echo the two
+?X: variables $rp and $dflt (provided this latter has a non null value).
+?X: It is mainly used by the myread script to echo the questions.
+?X:
+?X: The $n and $c below are substituted before Loc does its silly echo check
+?X: so don't put a $ on the echo below so we get builtin, even if $echo is
+?X: pointing to /bin/echo.
+?X:
+myecho="case \"\$xxxm\" in
+'') echo $n \"\$rp $c\" >&4;;
+*) case \"\$rp\" in
+ '') echo $n \"[\$xxxm] $c\";;
+ *)
+ if test \`echo \"\$rp [\$xxxm] \" | wc -c\` -ge $COLUMNS; then
+ echo \"\$rp\" >&4
+ echo $n \"[\$xxxm] $c\" >&4
+ else
+ echo $n \"\$rp [\$xxxm] $c\" >&4
+ fi
+ ;;
+ esac;;
+esac"
+
+: now set up to do reads with possible shell escape and default assignment
+cat <<EOSC >myread
+$startsh
+?X:
+?X: Save value of default -- do not alter original in case of eval
+?X:
+xxxm=\$dflt
+$myecho
+?X:
+?X: If there is no default, then stop, regardless of the value in fastread.
+?X: In silent mode, no new-line is to be echoed if the question is empty,
+?X: since this is used to wait for the "return" key.
+?X:
+ans='!'
+case "\$fastread" in
+yes) case "\$dflt" in
+ '') ;;
+ *) ans='';
+ case "\$silent-\$rp" in
+ true-) ;;
+ *) echo " " >&4;;
+ esac;;
+ esac;;
+*) case "\$silent" in
+ true) case "\$rp" in
+ '') ans='';;
+ esac;;
+ esac;;
+esac
+while expr "X\$ans" : "X!" >/dev/null; do
+ read answ
+?X:
+?X: Run 'eval' on the answer, in order to do variable substitution, in case
+?X: the user types $HOME or $WHATEVER. Variables must be evaluated now.
+?X: Typing '\$HOME' won't currently prevent from substitution -- use '\\$HOME'
+?X: The $1 .. $9 and $*, as well as $@, are available to refer to the
+?X: default value.
+?X:
+ set x \$xxxm
+ shift
+ aok=''; eval "ans=\\"\$answ\\"" && aok=y
+ case "\$answ" in
+?X:
+?X: Use "!" and not a plain ! because of a bug in BSD 4.4 shell
+?X: (reported by Wayne Davison)
+?X: We must handle the shell escapes before dealing with possible variable
+?X: substitution, since the shell we're launching in that case will be able
+?X: to do it as well as we can -- RAM, 15/03/96
+?X
+ "!")
+ sh 1>&4
+ echo " "
+ $myecho
+ ;;
+ !*)
+ set x \`expr "X\$ans" : "X!\(.*\)\$"\`
+ shift
+ sh 1>&4 -c "\$*"
+ echo " "
+ $myecho
+ ;;
+ "\$ans")
+ case "\$ans" in
+?X:
+?X: Answers starting with & are hooks allowing to dynamically turn on/off
+?X: some Configure options. That's for the future. -- RAM, 09/01/95
+?X: Today, we only recognize '& -d' to mean 'go on as if Configure -d, which
+?X: is a hardwired behaviour compatible with our general scheme.
+?X:
+ \\&*)
+ set x \`expr "X\$ans" : "X&\(.*\)\$"\`
+ shift
+ case "\$1" in
+ -d)
+ fastread=yes
+ echo "(OK, I'll run with -d after this question.)" >&4
+ ;;
+ -*)
+ echo "*** Sorry, \$1 not supported yet." >&4
+ ;;
+ esac
+ $myecho
+ ans=!
+ ;;
+ esac;;
+ *)
+ case "\$aok" in
+ y)
+ echo "*** Substitution done -- please confirm."
+ xxxm="\$ans"
+ ans=\`echo $n "\$ans$c" | tr '$trnl' ' '\`
+ xxxm="\$ans"
+ ans=!
+ ;;
+ *)
+ echo "*** Error -- try again."
+ ans=!
+ ;;
+ esac
+ $myecho
+ ;;
+ esac
+?X: Stick in myread if no default answer and nothing was answered
+ case "\$ans\$xxxm\$nostick" in
+ '')
+ ans=!
+ $myecho
+ ;;
+ esac
+done
+case "\$ans" in
+'') ans="\$xxxm";;
+esac
+EOSC
+
diff --git a/mcon/U/Nothing.U b/mcon/U/Nothing.U
new file mode 100644
index 0000000..0709901
--- /dev/null
+++ b/mcon/U/Nothing.U
@@ -0,0 +1,19 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: Nothing.U,v $
+?RCS: Revision 3.0 1993/08/18 12:05:09 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: The purpose of this file is to supply an empty target for the private
+?X: Makefile built by metaconfig to order the units.
+?X:
+?MAKE:Nothing: Head
diff --git a/mcon/U/Null.U b/mcon/U/Null.U
new file mode 100644
index 0000000..6f9fc70
--- /dev/null
+++ b/mcon/U/Null.U
@@ -0,0 +1,20 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: Null.U,v $
+?RCS: Revision 3.0 1993/08/18 12:05:10 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: This unit ends up producing shell code to set all variables to ''. This
+?X: probably isn't necessary, but I'm paranoid. About certain things.
+?X:
+?MAKE:Null: Head
+?MAKE: -pick add.Null $@ %<
diff --git a/mcon/U/Obsol_h.U b/mcon/U/Obsol_h.U
new file mode 100644
index 0000000..fc59938
--- /dev/null
+++ b/mcon/U/Obsol_h.U
@@ -0,0 +1,28 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: Obsol_h.U,v $
+?RCS: Revision 3.0 1993/08/18 12:05:11 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: This file is prepended to .MT/Obsol_h if that file is not empty. That file
+?X: contains the necessary mappings of new symbols to obsolete ones.
+?X:
+?MAKE:Obsol_h:
+?MAKE: -pick prepend $@ ./Obsol_h
+?LINT:nocomment
+/*
+ * The following symbols are obsolete. They are mapped to the the new
+ * symbols only to ease the transition process. The sources should be
+ * updated so as to use the new symbols only, as the support for these
+ * obsolete symbols may end without notice.
+ */
+
diff --git a/mcon/U/Obsol_sh.U b/mcon/U/Obsol_sh.U
new file mode 100644
index 0000000..de1a1e1
--- /dev/null
+++ b/mcon/U/Obsol_sh.U
@@ -0,0 +1,27 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: Obsol_sh.U,v $
+?RCS: Revision 3.0 1993/08/18 12:05:11 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: This file is prepended to .MT/Obsol_sh if that file is not empty. That file
+?X: contains the necessary mappings of new symbols to obsolete ones.
+?X:
+?MAKE:Obsol_sh:
+?MAKE: -pick prepend $@ ./Obsol_sh
+?LINT:nocomment
+#
+# The following symbols are obsolete. They are mapped to the the new
+# symbols only to ease the transition process. The sources should be
+# updated so as to use the new symbols only, since supporting of those
+# obsolete symbols may end without notice.
+#
diff --git a/mcon/U/Oldconfig.U b/mcon/U/Oldconfig.U
new file mode 100644
index 0000000..ca18947
--- /dev/null
+++ b/mcon/U/Oldconfig.U
@@ -0,0 +1,715 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: Oldconfig.U,v $
+?RCS: Revision 3.0.1.10 1997/02/28 15:06:39 ram
+?RCS: patch61: added support for src.U
+?RCS: patch61: new OSNAME define
+?RCS: patch61: can now sense new OSes
+?RCS:
+?RCS: Revision 3.0.1.9 1995/07/25 13:40:51 ram
+?RCS: patch56: now knows about OS/2 platforms
+?RCS:
+?RCS: Revision 3.0.1.8 1995/05/12 12:04:18 ram
+?RCS: patch54: config.sh reload logic now knows about new -K switch
+?RCS: patch54: cleaned up and extended osvers for DEC OSF/1 (ADO)
+?RCS: patch54: added MachTen detection (ADO)
+?RCS:
+?RCS: Revision 3.0.1.7 1995/02/15 14:13:41 ram
+?RCS: patch51: adapted osvers computation for AIX (ADO)
+?RCS:
+?RCS: Revision 3.0.1.6 1995/01/30 14:27:15 ram
+?RCS: patch49: unit Options.U now exports file optdef.sh, not a variable
+?RCS: patch49: update code for myuname changed (WED)
+?RCS:
+?RCS: Revision 3.0.1.5 1995/01/11 15:15:36 ram
+?RCS: patch45: added quotes around the INITPROG variable (ADO)
+?RCS: patch45: allows variable overriding after config file loading
+?RCS:
+?RCS: Revision 3.0.1.4 1994/10/29 15:57:05 ram
+?RCS: patch36: added ?F: line for metalint file checking
+?RCS: patch36: merged with the version used for perl5's Configure (ADO)
+?RCS:
+?RCS: Revision 3.0.1.3 1994/05/06 14:24:17 ram
+?RCS: patch23: added support for osf1 hints
+?RCS: patch23: new support for solaris and i386 systems (ADO)
+?RCS:
+?RCS: Revision 3.0.1.2 1994/01/24 14:05:02 ram
+?RCS: patch16: added post-processing on myuname for Xenix targets
+?RCS: patch16: message proposing config.sh defaults made consistent
+?RCS:
+?RCS: Revision 3.0.1.1 1993/09/13 15:56:32 ram
+?RCS: patch10: force use of config.sh when -d option is used (WAD)
+?RCS: patch10: complain about non-existent hint files (WAD)
+?RCS: patch10: added Options dependency for fastread variable
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:05:12 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: This unit tries to remember what we did last time we ran Configure, mostly
+?X: for the sake of setting defaults.
+?X:
+?MAKE:Oldconfig hint myuname osname osvers: Instruct Myread Checkcc \
+ Mksymlinks Loc Options Tr src trnl ln uname sh awk sed test cat grep \
+ rm lns tr n c contains targetarch
+?MAKE: -pick wipe $@ %<
+?S:myuname:
+?S: The output of 'uname -a' if available, otherwise the hostname. On Xenix,
+?S: pseudo variables assignments in the output are stripped, thank you. The
+?S: whole thing is then lower-cased.
+?S:.
+?S:hint:
+?S: Gives the type of hints used for previous answers. May be one of
+?S: "default", "recommended" or "previous".
+?S:.
+?S:osname:
+?S: This variable contains the operating system name (e.g. sunos,
+?S: solaris, hpux, etc.). It can be useful later on for setting
+?S: defaults. Any spaces are replaced with underscores. It is set
+?S: to a null string if we can't figure it out.
+?S:.
+?S:osvers:
+?S: This variable contains the operating system version (e.g.
+?S: 4.1.3, 5.2, etc.). It is primarily used for helping select
+?S: an appropriate hints file, but might be useful elsewhere for
+?S: setting defaults. It is set to '' if we can't figure it out.
+?S: We try to be flexible about how much of the version number
+?S: to keep, e.g. if 4.1.1, 4.1.2, and 4.1.3 are essentially the
+?S: same for this package, hints files might just be os_4.0 or
+?S: os_4.1, etc., not keeping separate files for each little release.
+?S:.
+?C:OSNAME:
+?C: This symbol contains the name of the operating system, as determined
+?C: by Configure. You shouldn't rely on it too much; the specific
+?C: feature tests from Configure are generally more reliable.
+?C:.
+?C:OSVERS:
+?C: This symbol contains the version of the operating system, as determined
+?C: by Configure. You shouldn't rely on it too much; the specific
+?C: feature tests from Configure are generally more reliable.
+?C:.
+?H:#define OSNAME "$osname" /**/
+?H:#define OSVERS "$osvers" /**/
+?H:.
+?F:!config.sh
+?T:tmp tmp_n tmp_c tmp_sh file
+?T:xxxxfile xxxfile xxfile xfile hintfile newmyuname
+?T:tans _ isesix INITPROG DJGPP has_uname
+?T:saved_osname saved_osvers saved_libswanted
+?D:osname=''
+?LINT:change n c sh
+?LINT:extern hostarch libswanted libs
+?LINT:change hostarch libswanted libs
+: Determine the name of the machine
+myuname=`$uname -a 2>/dev/null`
+$test -z "$myuname" && myuname=`hostname 2>/dev/null`
+?X: Special mention for Xenix, whose 'uname -a' gives us output like this:
+?X: sysname=XENIX
+?X: nodename=whatever
+?X: release=2.3.2 .. etc...
+?X: Therefore, we strip all this variable assignment junk and remove all the
+?X: new lines to keep the myuname variable sane... --RAM
+myuname=`echo $myuname | $sed -e 's/^[^=]*=//' -e 's/\///g' | \
+ ./tr '[A-Z]' '[a-z]' | $tr $trnl ' '`
+?X: Save the value we just computed to reset myuname after we get done here.
+newmyuname="$myuname"
+has_uname=
+$test -f "$uname" && has_uname=y
+
+: Guessing of the OS name -- half the following guesses are probably wrong...
+: If you have better tests or hints, please send them to the metaconfig
+: authors and to <MAINTLOC>
+$test -f /irix && osname=irix
+$test -f /xenix && osname=sco_xenix
+$test -f /dynix && osname=dynix
+$test -f /dnix && osname=dnix
+$test -f /lynx.os && osname=lynxos
+$test -f /unicos && osname=unicos && osvers=`$uname -r`
+$test -f /unicosmk && osname=unicosmk && osvers=`$uname -r`
+$test -f /unicosmk.ar && osname=unicosmk && osvers=`$uname -r`
+$test -f /bin/mips && /bin/mips && osname=mips
+$test -d /NextApps && set X `hostinfo | $grep 'NeXT Mach.*:' | \
+ $sed -e 's/://' -e 's/\./_/'` && osname=next && osvers=$4
+$test -d /usr/apollo/bin && osname=apollo
+$test -f /etc/saf/_sactab && osname=svr4
+$test -d /usr/include/minix && osname=minix
+$test -f /system/gnu_library/bin/ar.pm && osname=vos
+if $test -d /MachTen -o -d /MachTen_Folder; then
+?X: MachTen uname -a output looks like
+?X: xxx 4 0.0 Macintosh
+?X: MachTen /sbin/version output looks like
+?X: MachTen 4.0 Mon Aug 28 10:18:00 1995
+?X: MachTen 3.x had the 'version' command in /usr/etc/version.
+ osname=machten
+ if $test -x /sbin/version; then
+ osvers=`/sbin/version | $awk '{print $2}' |
+ $sed -e 's/[A-Za-z]$//'`
+ elif $test -x /usr/etc/version; then
+ osvers=`/usr/etc/version | $awk '{print $2}' |
+ $sed -e 's/[A-Za-z]$//'`
+ else
+ osvers="$2.$3"
+ fi
+fi
+$test -f /sys/posix.dll &&
+ $test -f /usr/bin/what &&
+ set X `/usr/bin/what /sys/posix.dll` &&
+ $test "$3" = UWIN &&
+ osname=uwin &&
+ osvers="$5"
+?X: If we have uname, we already computed a suitable uname -a output, correctly
+?X: formatted for Xenix, and it lies in $myuname.
+if $test "X$has_uname" != X; then
+ set X $myuname
+ shift
+ case "$5" in
+ fps*) osname=fps ;;
+ mips*)
+ case "$4" in
+ umips) osname=umips ;;
+ *) osname=mips ;;
+ esac;;
+ [23]100) osname=mips ;;
+ next*) osname=next ;;
+?X: Interactive Unix.
+ i386*)
+ tmp=`/bin/uname -X 2>/dev/null|awk '/3\.2v[45]/{ print $(NF) }'`
+ if $test "$tmp" != "" -a "$3" = "3.2" -a -f '/etc/systemid'; then
+ osname='sco'
+ osvers=$tmp
+ elif $test -f /etc/kconfig; then
+ osname=isc
+ if $test "$lns" = "$ln -s"; then
+ osvers=4
+ elif $contains _SYSV3 /usr/include/stdio.h > /dev/null 2>&1 ; then
+ osvers=3
+ elif $contains _POSIX_SOURCE /usr/include/stdio.h > /dev/null 2>&1
+ then
+ osvers=2
+ fi
+ fi
+ tmp=''
+ ;;
+?X: MS-DOS djgpp uname -a output looks like:
+?X: ms-dos xxx 6 22 pc
+?X: $1 is the "dos flavor" (need not be "ms-dos").
+?X: $2 is the node name
+?X: $3 and $4 are version/subversion
+?X: $5 is always "pc", but that might not be unique to DJGPP.
+?X: (e.g. Solaris_x86 has $5 = i86pc, which doesn't actually conflict,
+?X: but it's close enough that I can easily imagine other vendors also
+?X: using variants of pc* in $5.)
+?X: The "DJGPP" environment variable is always set when djgpp is active.
+ pc*)
+ if $test -n "$DJGPP"; then
+ osname=dos
+ osvers=djgpp
+ fi
+ ;;
+ esac
+ case "$1" in
+ aix) osname=aix
+?X: aix 4.1 uname -a output looks like
+?X: AIX foo 1 4 000123456789
+?X: where $4 is the major release number and $3 is the (minor) version.
+?X: More detail on the version is available with the oslevel command.
+?X: in 3.2.x, it output a string (see case statements below). In 4.1,
+?X: it puts out something like 4.1.1.0
+ tmp=`( (oslevel) 2>/dev/null || echo "not found") 2>&1`
+ case "$tmp" in
+ 'not found') osvers="$4"."$3" ;;
+ '<3240'|'<>3240') osvers=3.2.0 ;;
+ '=3240'|'>3240'|'<3250'|'<>3250') osvers=3.2.4 ;;
+ '=3250'|'>3250') osvers=3.2.5 ;;
+ *) osvers=$tmp;;
+ esac
+ ;;
+ bsd386) osname=bsd386
+ osvers=`$uname -r`
+ ;;
+ cygwin*) osname=cygwin
+ osvers=`echo "$3" | sed -e 's/\(.*\)(.*/\1/'`
+ ;;
+ mingw*) osname=mingw
+ osvers=`echo "$3" | sed -e 's/\(.*\)(.*/\1/'`
+ ;;
+ *dc.osx) osname=dcosx
+ osvers="$3"
+ ;;
+ dnix) osname=dnix
+ osvers="$3"
+ ;;
+ domainos) osname=apollo
+ osvers="$3"
+ ;;
+ dgux) osname=dgux
+ osvers="$3"
+ ;;
+?X: uname -a returns
+?X: DYNIX/ptx xxx 4.0 V4.1.2 i386
+ dynixptx*) osname=dynixptx
+ osvers=`echo "$4"|sed 's/^v//'`
+ ;;
+ freebsd) osname=freebsd
+ osvers="$3" ;;
+ genix) osname=genix ;;
+?X: HP-UX uname -a gives something like
+?X: HP-UX foobar B.10.20 A 9000/735 2016483812 two-user license
+?X: Preserve the full 10.20 string instead of the previous plain '10'.
+?X: Thanks to Graham Barr. --AD 6/30/1998
+ hp*) osname=hpux
+ osvers=`echo "$3" | $sed 's,.*\.\([0-9]*\.[0-9]*\),\1,'`
+ ;;
+ irix*) osname=irix
+ case "$3" in
+ 4*) osvers=4 ;;
+ 5*) osvers=5 ;;
+ *) osvers="$3" ;;
+ esac
+ ;;
+ linux) osname=linux
+ case "$3" in
+ *) osvers="$3" ;;
+ esac
+ ;;
+ MiNT) osname=mint
+ ;;
+ netbsd*) osname=netbsd
+ osvers="$3"
+ ;;
+ news-os) osvers="$3"
+ case "$3" in
+ 4*) osname=newsos4 ;;
+ *) osname=newsos ;;
+ esac
+ ;;
+ next*) osname=next ;;
+ nonstop-ux) osname=nonstopux ;;
+ openbsd) osname=openbsd
+ osvers="$3"
+ ;;
+ POSIX-BC | posix-bc ) osname=posix-bc
+ osvers="$3"
+ ;;
+ powerux | power_ux | powermax_os | powermaxos | \
+ powerunix | power_unix) osname=powerux
+ osvers="$3"
+ ;;
+ qnx) osname=qnx
+ osvers="$4"
+ ;;
+ solaris) osname=solaris
+ case "$3" in
+ 5*) osvers=`echo $3 | $sed 's/^5/2/g'` ;;
+ *) osvers="$3" ;;
+ esac
+ ;;
+ sunos) osname=sunos
+ case "$3" in
+ 5*) osname=solaris
+ osvers=`echo $3 | $sed 's/^5/2/g'` ;;
+ *) osvers="$3" ;;
+ esac
+ ;;
+ titanos) osname=titanos
+ case "$3" in
+ 1*) osvers=1 ;;
+ 2*) osvers=2 ;;
+ 3*) osvers=3 ;;
+ 4*) osvers=4 ;;
+ *) osvers="$3" ;;
+ esac
+ ;;
+ ultrix) osname=ultrix
+ osvers="$3"
+ ;;
+ osf1|mls+) case "$5" in
+ alpha)
+?X: DEC OSF/1 myuname -a output looks like: osf1 xxxx t3.2 123.4 alpha
+?X: where the version number can be something like [xvt]n.n
+ osname=dec_osf
+?X: sizer knows the minor minor version: the letter
+ osvers=`sizer -v | awk '{print $3}' | \
+ ./tr '[A-Z]' '[a-z]' | sed 's/^[xvt]//'`
+ case "$osvers" in
+ [1-9].[0-9]*) ;;
+ *) osvers=`echo "$3" | sed 's/^[xvt]//'` ;;
+ esac
+ ;;
+ hp*) osname=hp_osf1 ;;
+ mips) osname=mips_osf1 ;;
+?X: hp and mips were unsupported Technology Releases -- ADO, 24/10/94
+ esac
+ ;;
+ unixware) osname=svr5
+ osvers="$4"
+ ;;
+ uts) osname=uts
+ osvers="$3"
+ ;;
+ vos) osvers="$3"
+ ;;
+ $2) case "$osname" in
+ *isc*) ;;
+ *freebsd*) ;;
+ svr*)
+ : svr4.x or possibly later
+ case "svr$3" in
+ ${osname}*)
+ osname=svr$3
+ osvers=$4
+ ;;
+ esac
+ case "$osname" in
+ svr4.0)
+ : Check for ESIX
+ if $test -f /stand/boot ; then
+ eval `$grep '^INITPROG=[a-z/0-9]*$' /stand/boot`
+ if $test -n "$INITPROG" -a -f "$INITPROG"; then
+ isesix=`strings -a $INITPROG | \
+ $grep 'ESIX SYSTEM V/386 Release 4.0'`
+ if $test -n "$isesix"; then
+ osname=esix4
+ fi
+ fi
+ fi
+ ;;
+ esac
+ ;;
+ *) if $test -f /etc/systemid; then
+ osname=sco
+ set `echo $3 | $sed 's/\./ /g'` $4
+ if $test -f $src/hints/sco_$1_$2_$3.sh; then
+ osvers=$1.$2.$3
+ elif $test -f $src/hints/sco_$1_$2.sh; then
+ osvers=$1.$2
+ elif $test -f $src/hints/sco_$1.sh; then
+ osvers=$1
+ fi
+ else
+ case "$osname" in
+ '') : Still unknown. Probably a generic Sys V.
+ osname="sysv"
+ osvers="$3"
+ ;;
+ esac
+ fi
+ ;;
+ esac
+ ;;
+ *) case "$osname" in
+ '') : Still unknown. Probably a generic BSD.
+ osname="$1"
+ osvers="$3"
+ ;;
+ esac
+ ;;
+ esac
+else
+?X: Try to identify sony's NEWS-OS (BSD unix)
+ if $test -f /vmunix -a -f $src/hints/news_os.sh; then
+ (what /vmunix | UU/tr '[A-Z]' '[a-z]') > UU/kernel.what 2>&1
+ if $contains news-os UU/kernel.what >/dev/null 2>&1; then
+ osname=news_os
+ fi
+ $rm -f UU/kernel.what
+?X: Maybe it's OS/2 or DOS or something similar
+ elif $test -d c:/.; then
+ set X $myuname
+ osname=os2
+ osvers="$5"
+ fi
+fi
+
+: Try to determine whether config.sh was made on this system
+case "$config_sh" in
+'')
+?X: indentation wrong on purpose--RAM
+dflt=n
+case "$knowitall" in
+'')
+ if test -f ../config.sh; then
+ if $contains myuname= ../config.sh >/dev/null 2>&1; then
+ eval "`$grep myuname= ../config.sh`"
+ fi
+ if test "X$myuname" = "X$newmyuname"; then
+ dflt=y
+ fi
+ fi
+ ;;
+*) dflt=y;;
+esac
+
+?X: Before loading a previous config.sh, save the variables we've
+?X: just computed above so that we can propagate these new values.
+saved_osname="$osname"
+saved_osvers="$osvers"
+saved_libswanted="$libswanted"
+tmp_n="$n"
+tmp_c="$c"
+tmp_sh="$sh"
+
+: Get old answers from config file if it was generated on the same system
+hint=default
+if $test -f ../config.sh; then
+ echo " "
+ rp="I see a config.sh file. Shall I use it to set the defaults?"
+ . ./myread
+ case "$ans" in
+ n*|N*) echo "OK, I'll ignore it."
+ mv ../config.sh ../config.sh.old
+ myuname="$newmyuname"
+ ;;
+ *) echo "Fetching default answers from your old config.sh file..." >&4
+ . ../config.sh
+ cp ../config.sh .
+ hint=previous
+ case "$dflt" in
+ n)
+ echo " "
+ rp="Do you want further invocations to use these defaults?"
+ . ./myread
+ case "$ans" in
+ y*|Y*) myuname="$newmyuname";;
+ esac
+ ;;
+ esac
+ ;;
+ esac
+fi
+?X: remember, case indentation is wrong--RAM
+;;
+*)
+ echo " "
+ echo "Fetching default answers from $config_sh..." >&4
+ cd ..
+?X: preserve symbolic links, if any
+ cp $config_sh config.sh 2>/dev/null
+ chmod +w config.sh
+ . ./config.sh
+ cd UU
+ cp ../config.sh .
+ hint=previous
+ ;;
+esac
+?X: Older versions did not always set $sh.
+case "$sh" in
+'') sh="$tmp_sh" ;;
+esac
+$test "$override" && . ./optdef.sh
+
+: Restore computed paths
+for file in $loclist $trylist; do
+ eval $file="\$_$file"
+done
+
+?X: Restore saved variables
+osname="$saved_osname"
+osvers="$saved_osvers"
+n="$tmp_n"
+c="$tmp_c"
+
+?X: Reset libs when libswanted changed since last time
+case "$libswanted" in
+"$saved_libswanted") ;;
+*) libs='';;
+esac
+libswanted="$saved_libswanted"
+
+. ./checkcc
+?X: Cross-compiling support
+case "$targetarch" in
+'') ;;
+*) hostarch=$osname
+ osname=`echo $targetarch|sed 's,^[^-]*-,,'`
+ osvers=''
+ ;;
+esac
+
+@if {test -d ../hints}
+: Offer them some hints based on their OS
+cd ..
+?X: Since we are now at the root of the source tree, we must use $src
+?X: to access the sources and not $rsrc. See src.U for details...
+if $test ! -f config.sh; then
+ $cat <<EOM
+
+First time through, eh? I have some defaults handy for some systems
+that need some extra help getting the Configure answers right:
+
+EOM
+ (cd $src/hints; ls -C *.sh) | $sed 's/\.sh/ /g' >&4
+ dflt=''
+
+ : Now look for a hint file osname_osvers, unless one has been
+ : specified already.
+ case "$hintfile" in
+ ''|' ')
+ file=`echo "${osname}_${osvers}" | $sed -e 's%\.%_%g' -e 's%_$%%'`
+ : Also try without trailing minor version numbers.
+ xfile=`echo $file | $sed -e 's%_[^_]*$%%'`
+ xxfile=`echo $xfile | $sed -e 's%_[^_]*$%%'`
+ xxxfile=`echo $xxfile | $sed -e 's%_[^_]*$%%'`
+ xxxxfile=`echo $xxxfile | $sed -e 's%_[^_]*$%%'`
+ case "$file" in
+ '') dflt=none ;;
+ *) case "$osvers" in
+ '') dflt=$file
+ ;;
+ *) if $test -f $src/hints/$file.sh ; then
+ dflt=$file
+ elif $test -f $src/hints/$xfile.sh ; then
+ dflt=$xfile
+ elif $test -f $src/hints/$xxfile.sh ; then
+ dflt=$xxfile
+ elif $test -f $src/hints/$xxxfile.sh ; then
+ dflt=$xxxfile
+ elif $test -f $src/hints/$xxxxfile.sh ; then
+ dflt=$xxxxfile
+ elif $test -f "$src/hints/${osname}.sh" ; then
+ dflt="${osname}"
+ else
+ dflt=none
+ fi
+ ;;
+ esac
+ ;;
+ esac
+ if $test -f Policy.sh ; then
+ case "$dflt" in
+ *Policy*) ;;
+ none) dflt="Policy" ;;
+ *) dflt="Policy $dflt" ;;
+ esac
+ fi
+ ;;
+ *)
+ dflt=`echo $hintfile | $sed 's/\.sh$//'`
+ ;;
+ esac
+
+ if $test -f Policy.sh ; then
+ $cat <<EOM
+
+There's also a Policy hint file available, which should make the
+site-specific (policy) questions easier to answer.
+EOM
+
+ fi
+
+ $cat <<EOM
+
+You may give one or more space-separated answers, or "none" if appropriate.
+A well-behaved OS will have no hints, so answering "none" or just "Policy"
+is a good thing. DO NOT give a wrong version or a wrong OS.
+
+EOM
+
+ rp="Which of these apply, if any?"
+ . UU/myread
+ tans=$ans
+ for file in $tans; do
+ if $test X$file = XPolicy -a -f Policy.sh; then
+ . Policy.sh
+ $cat Policy.sh >> UU/config.sh
+ elif $test -f $src/hints/$file.sh; then
+ . $src/hints/$file.sh
+ $cat $src/hints/$file.sh >> UU/config.sh
+ elif $test X"$tans" = X -o X"$tans" = Xnone ; then
+ : nothing
+ else
+ : Give one chance to correct a possible typo.
+ echo "$file.sh does not exist"
+ dflt=$file
+ rp="hint to use instead?"
+ . UU/myread
+ for file in $ans; do
+ if $test -f "$src/hints/$file.sh"; then
+ . $src/hints/$file.sh
+ $cat $src/hints/$file.sh >> UU/config.sh
+ elif $test X$ans = X -o X$ans = Xnone ; then
+ : nothing
+ else
+ echo "$file.sh does not exist -- ignored."
+ fi
+ done
+ fi
+ done
+
+ hint=recommended
+ : Remember our hint file for later.
+ if $test -f "$src/hints/$file.sh" ; then
+ hintfile="$file"
+ else
+ hintfile=''
+ fi
+fi
+cd UU
+?X: From here on, we must use $rsrc instead of $src
+
+@end
+: Process their -A options
+. ./posthint.sh
+
+@if osname || osvers
+: Ask them to confirm the OS name
+cat << EOM
+
+Configure uses the operating system name and version to set some defaults.
+The default value is probably right if the name rings a bell. Otherwise,
+since spelling matters for me, either accept the default or answer "none"
+to leave it blank.
+
+EOM
+@end
+@if osname
+case "$osname" in
+ ''|' ')
+ case "$hintfile" in
+ ''|' '|none) dflt=none ;;
+ *) dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/_.*$//'` ;;
+ esac
+ ;;
+ *) dflt="$osname" ;;
+esac
+rp="Operating system name?"
+. ./myread
+case "$ans" in
+none) osname='' ;;
+*) osname=`echo "$ans" | $sed -e 's/[ ][ ]*/_/g' | ./tr '[A-Z]' '[a-z]'`;;
+esac
+@end
+@if osvers
+@if osname
+echo " "
+@end
+case "$osvers" in
+ ''|' ')
+ case "$hintfile" in
+ ''|' '|none) dflt=none ;;
+ *) dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/^[^_]*//'`
+ dflt=`echo $dflt | $sed -e 's/^_//' -e 's/_/./g'`
+ case "$dflt" in
+ ''|' ') dflt=none ;;
+ esac
+ ;;
+ esac
+ ;;
+ *) dflt="$osvers" ;;
+esac
+rp="Operating system version?"
+. ./myread
+case "$ans" in
+none) osvers='' ;;
+*) osvers="$ans" ;;
+esac
+
+@end
diff --git a/mcon/U/Oldsym.U b/mcon/U/Oldsym.U
new file mode 100644
index 0000000..5e85313
--- /dev/null
+++ b/mcon/U/Oldsym.U
@@ -0,0 +1,72 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: Oldsym.U,v $
+?RCS: Revision 3.0.1.1 1997/02/28 15:06:58 ram
+?RCS: patch61: added support for src.U
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:05:13 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: This unit follows the creation of the config.sh file. It adds some
+?X: special symbols: defines from patchlevel.h file if any and CONFIG,
+?X: which is set to true. Then, we try to keep all the new symbols that
+?X: may come from a hint file or a previous config.sh file.
+?X:
+?MAKE:Oldsym: Config_sh Options test hint src sed sort uniq
+?MAKE: -pick add $@ %<
+?T:CONFIG sym tmp
+?F:!UU
+: add special variables
+$test -f $src/patchlevel.h && \
+awk '/^#define/ {printf "%s=%s\n",$2,$3}' $src/patchlevel.h >>config.sh
+?X: In revision.h we expect something like:
+?X: #define REVISION "$Revision$"
+?X: which is supposed to be expanded by the revision control system.
+$test -f $src/revision.h && \
+sed -ne 's/^#define \([A-Za-z0-9_]*\) ".*: \([0-9]*\).*"/\1=\2/p' \
+ < $src/revision.h >>config.sh
+echo "CONFIG=true" >>config.sh
+
+: propagate old symbols
+if $test -f UU/config.sh; then
+?X: Make sure each symbol is unique in oldconfig.sh
+ <UU/config.sh $sort | $uniq >UU/oldconfig.sh
+?X:
+?X: All the symbols that appear twice come only from config.sh (hence the
+?X: two config.sh in the command line). These symbols will be removed by
+?X: the uniq -u command. The oldsyms file thus contains all the symbols
+?X: that did not appear in the produced config.sh (Larry Wall).
+?X:
+?X: Do not touch the -u flag of uniq. This means you too, Jarkko.
+?X:
+ $sed -n 's/^\([a-zA-Z_0-9]*\)=.*/\1/p' \
+ config.sh config.sh UU/oldconfig.sh |\
+ $sort | $uniq -u >UU/oldsyms
+ set X `cat UU/oldsyms`
+ shift
+ case $# in
+ 0) ;;
+ *)
+ cat <<EOM
+Hmm...You had some extra variables I don't know about...I'll try to keep 'em...
+EOM
+ echo ": Variables propagated from previous config.sh file." >>config.sh
+ for sym in `cat UU/oldsyms`; do
+ echo " Propagating $hint variable "'$'"$sym..."
+ eval 'tmp="$'"${sym}"'"'
+ echo "$tmp" | \
+ sed -e "s/'/'\"'\"'/g" -e "s/^/$sym='/" -e "s/$/'/" >>config.sh
+ done
+ ;;
+ esac
+fi
+
diff --git a/mcon/U/Options.U b/mcon/U/Options.U
new file mode 100644
index 0000000..2bfe289
--- /dev/null
+++ b/mcon/U/Options.U
@@ -0,0 +1,374 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: Options.U,v $
+?RCS: Revision 3.0.1.7 1997/02/28 15:08:15 ram
+?RCS: patch61: optdef.sh now starts with a "startsh"
+?RCS: patch61: moved some code from Head.U
+?RCS:
+?RCS: Revision 3.0.1.6 1995/09/25 09:14:46 ram
+?RCS: patch59: protected option parsing code against 'echo -*' option failure
+?RCS:
+?RCS: Revision 3.0.1.5 1995/05/12 12:04:52 ram
+?RCS: patch54: added -K option for experts
+?RCS:
+?RCS: Revision 3.0.1.4 1995/01/30 14:27:52 ram
+?RCS: patch49: this unit now exports file optdef.sh, not a variable
+?RCS:
+?RCS: Revision 3.0.1.3 1995/01/11 15:19:00 ram
+?RCS: patch45: new -O option allowing -D and -U to override config.sh settings
+?RCS: patch45: file optdef.sh is no longer removed after sourcing
+?RCS:
+?RCS: Revision 3.0.1.2 1994/10/29 15:58:06 ram
+?RCS: patch36: ensure option definition file is removed before appending
+?RCS: patch36: protect variable definitions with spaces in them
+?RCS:
+?RCS: Revision 3.0.1.1 1994/06/20 06:55:44 ram
+?RCS: patch30: now uses new me symbol to tag error messages
+?RCS: patch30: new -D and -U options to define/undef symbols (JHI)
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:05:14 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: Command line parsing. It is really important that the variables used here
+?X: be not listed in the MAKE line, or they will be saved in config.sh and
+?X: loading this file to fetch default answers would clobber the values set
+?X: herein.
+?X:
+?MAKE:Options: startsh
+?MAKE: -pick wipe $@ %<
+?V:reuseval alldone error realsilent silent extractsh fastread \
+ override knowitall: config_sh
+?T:arg argn symbol config_arg0 config_args config_argc xxx yyy zzz uuu
+?T:args_exp args_sep arg_exp
+?F:!Configure
+?F:./optdef.sh ./cmdline.opt ./posthint.sh ./cmdl.opt
+: Save command line options in file UU/cmdline.opt for later use in
+: generating config.sh.
+?X: This temporary file will be read by Oldsym.U. I used a temporary
+?X: file to preserve all sorts of potential command line quotes and
+?X: also because we don't know in advance how many variables we'll
+?X: need, so I can't actually declare them on the MAKE line.
+?X: The config_args variable won't be quite correct if Configure is
+?X: fed something like ./Configure -Dcc="gcc -B/usr/ccs/bin/"
+?X: since the quotes are gone by the time we see them. You'd have to
+?X: reconstruct the command line from the config_arg? lines, but since
+?X: I don't imagine anyone actually having to do that, I'm not going
+?X: to worry too much.
+cat > cmdline.opt <<EOSH
+: Configure command line arguments.
+config_arg0='$0'
+config_args='$*'
+config_argc=$#
+EOSH
+argn=1
+args_exp=''
+args_sep=''
+for arg in "$@"; do
+ cat >>cmdline.opt <<EOSH
+config_arg$argn='$arg'
+EOSH
+?X: Extreme backslashitis: replace each ' by '"'"'
+ cat <<EOC | sed -e "s/'/'"'"'"'"'"'"'/g" > cmdl.opt
+$arg
+EOC
+ arg_exp=`cat cmdl.opt`
+ args_exp="$args_exp$args_sep'$arg_exp'"
+ argn=`expr $argn + 1`
+ args_sep=' '
+done
+?X: args_exp is good for restarting self: eval "set X $args_exp"; shift; $0 "$@"
+?X: used by hints/os2.sh in Perl, for instance
+rm -f cmdl.opt
+
+: produce awk script to parse command line options
+cat >options.awk <<'EOF'
+BEGIN {
+ optstr = "A:dD:eEf:hKOrsSU:V"; # getopt-style specification
+
+ len = length(optstr);
+ for (i = 1; i <= len; i++) {
+ c = substr(optstr, i, 1);
+?X: some older awk's do not have the C ?: construct
+ if (i < len) a = substr(optstr, i + 1, 1); else a = "";
+ if (a == ":") {
+ arg[c] = 1;
+ i++;
+ }
+ opt[c] = 1;
+ }
+}
+{
+ expect = 0;
+ str = $0;
+ if (substr(str, 1, 1) != "-") {
+ printf("'%s'\n", str);
+ next;
+ }
+ len = length($0);
+ for (i = 2; i <= len; i++) {
+ c = substr(str, i, 1);
+ if (!opt[c]) {
+ printf("-%s\n", substr(str, i));
+ next;
+ }
+ printf("-%s\n", c);
+ if (arg[c]) {
+ if (i < len)
+ printf("'%s'\n", substr(str, i + 1));
+ else
+ expect = 1;
+ next;
+ }
+ }
+}
+END {
+ if (expect)
+ print "?";
+}
+EOF
+
+: process the command line options
+?X: Use "$@" to keep arguments with spaces in them from being split apart.
+?X: For the same reason, awk will output quoted arguments and the final eval
+?X: removes them and sets a proper $* array. An 'X' is prepended to each
+?X: argument before being fed to echo to guard against 'echo -x', where -x
+?X: would be understood as an echo option! It is removed before feeding awk.
+set X `for arg in "$@"; do echo "X$arg"; done |
+ sed -e s/X// | awk -f options.awk`
+eval "set $*"
+shift
+rm -f options.awk
+
+: set up default values
+fastread=''
+reuseval=false
+config_sh=''
+alldone=''
+error=''
+silent=''
+extractsh=''
+override=''
+knowitall=''
+rm -f optdef.sh posthint.sh
+cat >optdef.sh <<EOS
+$startsh
+EOS
+
+?X:
+?X: Given that we now have the possibility to execute Configure remotely
+?X: thanks to the new src.U support, we have to face the possibility
+?X: of having to ask where the source lie, which means we need the Myread.U
+?X: stuff and possibly other things that might echo something on the
+?X: screen...
+?X:
+?X: That's not pretty, and might be confusing in 99% of the time. So...
+?X: We introduce a new realsilent variable which is set when -s is given,
+?X: and we force silent=true if -S is supplied. The Extractall.U unit
+?X: will then undo the >&4 redirection based on the value of the
+?X: realsilent variable... -- RAM, 18/93/96
+?X:
+
+: option parsing
+while test $# -gt 0; do
+ case "$1" in
+ -d) shift; fastread=yes;;
+ -e) shift; alldone=cont;;
+ -f)
+ shift
+ cd ..
+ if test -r "$1"; then
+ config_sh="$1"
+ else
+ echo "$me: cannot read config file $1." >&2
+ error=true
+ fi
+ cd UU
+ shift;;
+ -h) shift; error=true;;
+ -r) shift; reuseval=true;;
+ -s) shift; silent=true; realsilent=true;;
+ -E) shift; alldone=exit;;
+ -K) shift; knowitall=true;;
+ -O) shift; override=true;;
+ -S) shift; silent=true; extractsh=true;;
+ -D)
+ shift
+ case "$1" in
+ *=)
+ echo "$me: use '-U symbol=', not '-D symbol='." >&2
+ echo "$me: ignoring -D $1" >&2
+ ;;
+ *=*) echo "$1" | \
+ sed -e "s/'/'\"'\"'/g" -e "s/=\(.*\)/='\1'/" >> optdef.sh;;
+ *) echo "$1='define'" >> optdef.sh;;
+ esac
+ shift
+ ;;
+ -U)
+ shift
+ case "$1" in
+ *=) echo "$1" >> optdef.sh;;
+ *=*)
+ echo "$me: use '-D symbol=val', not '-U symbol=val'." >&2
+ echo "$me: ignoring -U $1" >&2
+ ;;
+ *) echo "$1='undef'" >> optdef.sh;;
+ esac
+ shift
+ ;;
+ -A)
+ shift
+ xxx=''
+ yyy="$1"
+ zzz=''
+ uuu=undef
+ case "$yyy" in
+ *=*) zzz=`echo "$yyy"|sed 's!=.*!!'`
+ case "$zzz" in
+ *:*) zzz='' ;;
+ *) xxx=append
+ zzz=" "`echo "$yyy"|sed 's!^[^=]*=!!'`
+ yyy=`echo "$yyy"|sed 's!=.*!!'` ;;
+ esac
+ ;;
+ esac
+ case "$xxx" in
+ '') case "$yyy" in
+ *:*) xxx=`echo "$yyy"|sed 's!:.*!!'`
+ yyy=`echo "$yyy"|sed 's!^[^:]*:!!'`
+ zzz=`echo "$yyy"|sed 's!^[^=]*=!!'`
+ yyy=`echo "$yyy"|sed 's!=.*!!'` ;;
+ *) xxx=`echo "$yyy"|sed 's!:.*!!'`
+ yyy=`echo "$yyy"|sed 's!^[^:]*:!!'` ;;
+ esac
+ ;;
+ esac
+ case "$xxx" in
+ append)
+ echo "$yyy=\"\${$yyy}$zzz\"" >> posthint.sh ;;
+ clear)
+ echo "$yyy=''" >> posthint.sh ;;
+ define)
+ case "$zzz" in
+ '') zzz=define ;;
+ esac
+ echo "$yyy='$zzz'" >> posthint.sh ;;
+ eval)
+ echo "eval \"$yyy=$zzz\"" >> posthint.sh ;;
+ prepend)
+ echo "$yyy=\"$zzz\${$yyy}\"" >> posthint.sh ;;
+ undef)
+ case "$zzz" in
+ '') zzz="$uuu" ;;
+ esac
+ echo "$yyy=$zzz" >> posthint.sh ;;
+ *) echo "$me: unknown -A command '$xxx', ignoring -A $1" >&2 ;;
+ esac
+ shift
+ ;;
+ -V) echo "$me generated by metaconfig <VERSION>-<REVISION>." >&2
+ exit 0;;
+ --) break;;
+ -*) echo "$me: unknown option $1" >&2; shift; error=true;;
+ *) break;;
+ esac
+done
+
+case "$error" in
+true)
+ cat >&2 <<EOM
+Usage: $me [-dehrsEKOSV] [-f config.sh] [-D symbol] [-D symbol=value]
+ [-U symbol] [-U symbol=] [-A command:symbol...]
+ -d : use defaults for all answers.
+ -e : go on without questioning past the production of config.sh.
+ -f : specify an alternate default configuration file.
+ -h : print this help message and exit (with an error status).
+ -r : reuse C symbols value if possible (skips costly nm extraction).
+ -s : silent mode, only echoes questions and essential information.
+ -D : define symbol to have some value:
+ -D symbol symbol gets the value 'define'
+ -D symbol=value symbol gets the value 'value'
+ -E : stop at the end of questions, after having produced config.sh.
+ -K : do not use unless you know what you are doing.
+ -O : let -D and -U override definitions from loaded configuration file.
+ -S : perform variable substitutions on all .SH files (can mix with -f)
+ -U : undefine symbol:
+ -U symbol symbol gets the value 'undef'
+ -U symbol= symbol gets completely empty
+ -A : manipulate symbol after the platform specific hints have been applied:
+ -A symbol=value append " "value to symbol
+ -A append:symbol=value append value to symbol
+ -A define:symbol=value define symbol to have value
+ -A clear:symbol define symbol to be ''
+ -A define:symbol define symbol to be 'define'
+ -A eval:symbol=value define symbol to be eval of value
+ -A prepend:symbol=value prepend value to symbol
+ -A undef:symbol define symbol to be 'undef'
+ -A undef:symbol= define symbol to be ''
+ -V : print version number and exit (with a zero status).
+EOM
+ exit 1
+ ;;
+esac
+
+?X:
+?X: Unless they specified either -S or both -d and -e/E, make sure we're
+?X: running interactively, i.e. attached to a terminal. Moved from Head.U to
+?X: be able to handle batch configurations...
+?X:
+?X: We have to hardwire the Configure name and cannot use $me, since if they
+?X: said 'sh <Configure', then $me is 'sh'...
+?X:
+: Sanity checks
+case "$fastread$alldone" in
+yescont|yesexit) ;;
+*)
+ case "$extractsh" in
+ true) ;;
+ *)
+ if test ! -t 0; then
+ echo "Say 'sh Configure', not 'sh <Configure'"
+ exit 1
+ fi
+ ;;
+ esac
+ ;;
+esac
+
+?X: In silent mode, the standard output is closed. Questions are asked by
+?X: outputing on file descriptor #4, which is the original stdout descriptor.
+?X: This filters out all the "junk", since all the needed information is written
+?X: on #4. Note that ksh will not let us redirect output if the file descriptor
+?X: has not be defined yet, unlike sh, hence the following line...--RAM.
+exec 4>&1
+case "$silent" in
+true) exec 1>/dev/null;;
+esac
+
+?X: Patch from H.Merijn Brand -- 2015-04-19
+?X: The reasoning behind this change is that optdef.sh gets sourced and the
+?X: arguments, like prefix, are passed around in different quotation styles
+?X: and subshells all around, and the (unescaped) backslash will not be
+?X: pertained in the final config.sh
+?X: Note that -q is POSIX but to be sure, we also silence all output --RAM
+touch optdef.sh
+if grep -q '\\' optdef.sh >/dev/null 2>&1; then
+ echo "Configure does not support \\ in -D or -U arguments" >&2
+ exit 1
+fi
+
+: run the defines and the undefines, if any, but leave the file out there...
+. ./optdef.sh
+: create the posthint manipulation script and leave the file out there...
+?X: this file will be perused by Oldconfig.U
+touch posthint.sh
+
diff --git a/mcon/U/Prefixit.U b/mcon/U/Prefixit.U
new file mode 100644
index 0000000..875024d
--- /dev/null
+++ b/mcon/U/Prefixit.U
@@ -0,0 +1,68 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: Prefixit.U,v $
+?RCS: Revision 3.0.1.1 1995/01/30 14:29:22 ram
+?RCS: patch49: created
+?RCS:
+?X:
+?X: Used as: "set dflt var dir; eval $prefixit" to set $dflt to be
+?X: $prefix/dir by default, or the previous $var depending on certain
+?X: conditions:
+?X: - If the $oldprefix variable is empty, then $prefix holds the same
+?X: value as on previous runs. Therefore, reuse $var if set, otherwise
+?X: set $dflt to $prefix/dir.
+?X: - If $oldprefix is not empty, then set $dflt to $prefix/dir if $var
+?X: is empty (first run). Otherwise, if $var is $oldprefix/dir, then
+?X: change it to $prefix/dir. If none of the above, reuse the old $var.
+?X:
+?X: When dir is omitted, the dflt variable is set to $var if prefix did not
+?X: change, to an empty value otherwise. If dir=none, then a single space
+?X: in var is kept as-is, even if the prefix changes.
+?X:
+?MAKE:Prefixit: prefix oldprefix
+?MAKE: -pick add $@ %<
+?LINT:define prefixit
+?S:prefixit:
+?S: This shell variable is used internally by Configure to reset
+?S: the leading installation prefix correctly when it is changed.
+?S: set dflt var [dir]
+?S: eval $prefixit
+?S: That will set $dflt to $var or $prefix/dir depending on the
+?S: value of $var and $oldprefix.
+?S:.
+?V:prefixit
+?T:tp
+: set the prefixit variable, to compute a suitable default value
+prefixit='case "$3" in
+""|none)
+ case "$oldprefix" in
+ "") eval "$1=\"\$$2\"";;
+ *)
+ case "$3" in
+ "") eval "$1=";;
+ none)
+ eval "tp=\"\$$2\"";
+ case "$tp" in
+ ""|" ") eval "$1=\"\$$2\"";;
+ *) eval "$1=";;
+ esac;;
+ esac;;
+ esac;;
+*)
+ eval "tp=\"$oldprefix-\$$2-\""; eval "tp=\"$tp\"";
+ case "$tp" in
+ --|/*--|\~*--) eval "$1=\"$prefix/$3\"";;
+ /*-$oldprefix/*|\~*-$oldprefix/*)
+ eval "$1=\`echo \$$2 | sed \"s,^$oldprefix,$prefix,\"\`";;
+ *) eval "$1=\"\$$2\"";;
+ esac;;
+esac'
+
diff --git a/mcon/U/Prefixup.U b/mcon/U/Prefixup.U
new file mode 100644
index 0000000..3c6778f
--- /dev/null
+++ b/mcon/U/Prefixup.U
@@ -0,0 +1,38 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: Prefixup.U,v $
+?RCS: Revision 3.0.1.1 1995/01/30 14:30:40 ram
+?RCS: patch49: created
+?RCS:
+?X:
+?X: Used as: "set dflt; eval $prefixup" to set $dflt to be $prefix/dir
+?X: instead of $prefixexp/dir, in case portability was involved somehow
+?X: and $prefix uses ~name expansion.
+?X:
+?MAKE:Prefixup: prefix prefixexp
+?MAKE: -pick add $@ %<
+?LINT:define prefixup
+?S:prefixup:
+?S: This shell variable is used internally by Configure to reset
+?S: the leading installation prefix correctly when $prefix uses
+?S: ~name expansion.
+?S: set dflt
+?S: eval $prefixup
+?S: That will set $dflt to $prefix/dir if it was $prefixexp/dir and
+?S: $prefix differs from $prefixexp.
+?S:.
+?V:prefixup
+: set the prefixup variable, to restore leading tilda escape
+prefixup='case "$prefixexp" in
+"$prefix") ;;
+*) eval "$1=\`echo \$$1 | sed \"s,^$prefixexp,$prefix,\"\`";;
+esac'
+
diff --git a/mcon/U/Rcs.U b/mcon/U/Rcs.U
new file mode 100644
index 0000000..b8d7a42
--- /dev/null
+++ b/mcon/U/Rcs.U
@@ -0,0 +1,34 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: Rcs.U,v $
+?RCS: Revision 3.0 1993/08/18 12:05:15 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: This is a unit that helps people who write SH scripts and keep them under
+?X: RCS, but don't think to protect the $Log and other $Id keywords from
+?X: variable substitution (or people like me who do not like to).
+?X:
+?MAKE:Author Date Header Id Locker Log RCSfile Revision Source State: Oldconfig
+?MAKE: -pick weed $@ %<
+?LINT:describe Author Date Header Id Locker Log RCSfile Revision Source State
+: preserve RCS keywords in files with variable substitution, grrr
+?Author:Author='$Author'
+?Date:Date='$Date'
+?Header:Header='$Header'
+?Id:Id='$Id'
+?$Locker'
+?Log:Log='$Log'
+?RCSfile:RCSfile='$RCSfile'
+?Revision:Revision='$Revision'
+?Source:Source='$Source'
+?State:State='$State'
+
diff --git a/mcon/U/Sendfile64.U b/mcon/U/Sendfile64.U
new file mode 100644
index 0000000..f5e77d4
--- /dev/null
+++ b/mcon/U/Sendfile64.U
@@ -0,0 +1,36 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 2006, Christian Biere
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:Sendfile64: Largefile Trylink d_sendfile i_syssendfile cat
+?MAKE: -pick add $@ %<
+?T:result
+?LINT:change i_syssendfile d_sendfile
+: determine whether sendfile works with 64-bit file support
+$cat >try.c <<EOC
+#$i_syssendfile I_SYS_SENDFILE
+#ifdef I_SYS_SENDFILE
+#include <sys/sendfile.h>
+#endif
+int main(void)
+{
+ return 0;
+}
+EOC
+cyn="whether sendfile() works with current compiling flags"
+result=''
+set result
+eval $trylink
+case "$result" in
+"$undef")
+ i_syssendfile="$undef"
+ d_sendfile="$undef"
+ ;;
+esac
+
diff --git a/mcon/U/Setvar.U b/mcon/U/Setvar.U
new file mode 100644
index 0000000..ab83bf5
--- /dev/null
+++ b/mcon/U/Setvar.U
@@ -0,0 +1,50 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: Setvar.U,v $
+?RCS: Revision 3.0.1.1 1994/10/29 15:58:28 ram
+?RCS: patch36: call ./whoa explicitly instead of relying on PATH
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:05:16 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: This unit produces a variable that is intended to be eval'ed in
+?X: order to define/undefine a symbol. A consistency check is made
+?X: regarding any previous value and a warning is issued if there
+?X: is any discrepancy.
+?X:
+?X: To use it, say:
+?X: val=<value>
+?X: set d_variable
+?X: eval $setvar
+?X:
+?MAKE:Setvar: Whoa
+?MAKE: -pick add $@ %<
+?LINT:define setvar
+?S:setvar:
+?S: This shell variable is used internally by Configure to set a value
+?S: to a given symbol that is defined or not. A typical use is:
+?S: val=<value computed>
+?S: set d_variable
+?S: eval $setvar
+?S: That will print a message in case the $val value is not the same
+?S: as the previous value of $d_variable.
+?S:.
+?V:setvar:val
+?T:var was td tu
+: function used to set '$1' to '$val'
+setvar='var=$1; eval "was=\$$1"; td=$define; tu=$undef;
+case "$val$was" in
+$define$undef) . ./whoa; eval "$var=\$td";;
+$undef$define) . ./whoa; eval "$var=\$tu";;
+*) eval "$var=$val";;
+esac'
+
diff --git a/mcon/U/Signal.U b/mcon/U/Signal.U
new file mode 100644
index 0000000..769e358
--- /dev/null
+++ b/mcon/U/Signal.U
@@ -0,0 +1,271 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: Signal.U,v $
+?RCS: Revision 3.0.1.1 1997/02/28 15:20:01 ram
+?RCS: patch61: created
+?RCS:
+?X:
+?X: This unit produces three files:
+?X:
+?X: 1- A signal.c file, which, when compiled and run, produces an output like:
+?X:
+?X: HUP 1
+?X: INT 2
+?X: QUIT 3
+?X: etc...
+?X:
+?X: 2- A signal.awk script to parse the output of signal.c, fill
+?X: in gaps (up to NSIG) and move duplicates to the end.
+?X:
+?X: 3- A signal_cmd script to compile signal.c and run it
+?X: through sort -n -k 2 | uniq | awk -f signal.awk.
+?X: (we try also sort -n +1 since some old hosts don't grok sort -k)
+?X: (This is called signal_cmd to avoid OS/2 confusion with
+?X: signal.cmd vs. signal.
+?X: The signal_cmd script also falls back on checking signals one at a
+?X: time in case the signal.c program fails. On at least one version of
+?X: Linux 2.1.x, the header file #define'd SIGRTMAX to a symbol that
+?X: is not defined by the compiler/linker. :-(. Further, on that same
+?X: version of Linux, the user had a defective C-shell that gave an
+?X: incorrect list for kill -l, so the fall-back didn't work.
+?X:
+?X: This unit is then used by sig_name.U.
+?X:
+?MAKE:Signal: test tr rm awk cat grep startsh eunicefix sed sort uniq \
+ Findhdr cppstdin +cppflags cppminus Compile trnl run fieldn
+?MAKE: -pick add $@ %<
+?X:all files declared as "public" since they're used from other units
+?F:signal.c signal_cmd signal.lst signal signal.awk
+?T: xx xxx xxxfiles
+?LINT:use rm run
+: Trace out the files included by signal.h, then look for SIGxxx names.
+?X: Remove SIGARRAYSIZE used by HPUX.
+?X: Remove SIGSTKSIZE used by Linux.
+?X: Remove SIGSTKSZ used by Posix.
+?X: Remove SIGTYP void lines used by OS2.
+?X: Some cpps, like os390, dont give the file name anywhere
+if [ "X$fieldn" = X ]; then
+ : Just make some guesses. We check them later.
+ xxx='/usr/include/signal.h /usr/include/sys/signal.h'
+else
+ xxx=`echo '#include <signal.h>' |
+ $cppstdin $cppminus $cppflags 2>/dev/null |
+ $grep '^[ ]*#.*include' |
+ $awk "{print \\$$fieldn}" | $sed 's!"!!g' | \
+ $sed 's!\\\\\\\\!/!g' | $sort | $uniq`
+fi
+?X: Check this list of files to be sure we have parsed the cpp output ok.
+?X: This will also avoid potentially non-existent files, such
+?X: as ../foo/bar.h
+xxxfiles=''
+?X: Add /dev/null in case the $xxx list is empty.
+for xx in $xxx /dev/null ; do
+ $test -f "$xx" && xxxfiles="$xxxfiles $xx"
+done
+?X: If we have found no files, at least try signal.h
+case "$xxxfiles" in
+'') xxxfiles=`./findhdr signal.h` ;;
+esac
+xxx=`awk '
+$1 ~ /^#define$/ && $2 ~ /^SIG[A-Z0-9]*$/ && $2 !~ /SIGARRAYSIZE/ && $2 !~ /SIGSTKSIZE/ && $2 !~ /SIGSTKSZ/ && $3 !~ /void/ {
+ print substr($2, 4, 20)
+}
+$1 == "#" && $2 ~ /^define$/ && $3 ~ /^SIG[A-Z0-9]*$/ && $3 !~ /SIGARRAYSIZE/ && $4 !~ /void/ {
+ print substr($3, 4, 20)
+}' $xxxfiles`
+: Append some common names just in case the awk scan failed.
+xxx="$xxx ABRT ALRM BUS CANCEL CHLD CLD CONT DIL EMT FPE"
+xxx="$xxx FREEZE HUP ILL INT IO IOT KILL LOST LWP PHONE"
+xxx="$xxx PIPE POLL PROF PWR QUIT RTMAX RTMIN SEGV STKFLT STOP"
+xxx="$xxx SYS TERM THAW TRAP TSTP TTIN TTOU URG USR1 USR2"
+xxx="$xxx USR3 USR4 VTALRM WAITING WINCH WIND WINDOW XCPU XFSZ"
+
+: generate a few handy files for later
+$cat > signal.c <<'EOCP'
+#include <sys/types.h>
+#include <signal.h>
+#include <stdio.h>
+int main() {
+
+/* Strange style to avoid deeply-nested #if/#else/#endif */
+#ifndef NSIG
+# ifdef _NSIG
+# define NSIG (_NSIG)
+# endif
+#endif
+
+#ifndef NSIG
+# ifdef SIGMAX
+# define NSIG (SIGMAX+1)
+# endif
+#endif
+
+#ifndef NSIG
+# ifdef SIG_MAX
+# define NSIG (SIG_MAX+1)
+# endif
+#endif
+
+#ifndef NSIG
+# ifdef MAXSIG
+# define NSIG (MAXSIG+1)
+# endif
+#endif
+
+#ifndef NSIG
+# ifdef MAX_SIG
+# define NSIG (MAX_SIG+1)
+# endif
+#endif
+
+#ifndef NSIG
+# ifdef SIGARRAYSIZE
+# define NSIG (SIGARRAYSIZE+1) /* Not sure of the +1 */
+# endif
+#endif
+
+#ifndef NSIG
+# ifdef _sys_nsig
+# define NSIG (_sys_nsig) /* Solaris 2.5 */
+# endif
+#endif
+
+/* Default to some arbitrary number that's big enough to get most
+ of the common signals.
+*/
+#ifndef NSIG
+# define NSIG 50
+#endif
+
+printf("NSIG %d\n", NSIG);
+
+#ifndef JUST_NSIG
+
+EOCP
+
+echo $xxx | $tr ' ' $trnl | $sort | $uniq | $awk '
+{
+ printf "#ifdef SIG"; printf $1; printf "\n"
+ printf "printf(\""; printf $1; printf " %%d\\n\",SIG";
+ printf $1; printf ");\n"
+ printf "#endif\n"
+}
+END {
+ printf "#endif /* JUST_NSIG */\n";
+ printf "return 0;\n}\n";
+}
+' >>signal.c
+$cat >signal.awk <<'EOP'
+BEGIN { ndups = 0 }
+$1 ~ /^NSIG$/ { nsig = $2 }
+($1 !~ /^NSIG$/) && (NF == 2) {
+ if ($2 > maxsig) { maxsig = $2 }
+ if (sig_name[$2]) {
+ dup_name[ndups] = $1
+ dup_num[ndups] = $2
+ ndups++
+ }
+ else {
+ sig_name[$2] = $1
+ sig_num[$2] = $2
+ }
+}
+END {
+ if (nsig == 0) {
+ nsig = maxsig + 1
+ }
+ printf("NSIG %d\n", nsig);
+ for (n = 1; n < nsig; n++) {
+ if (sig_name[n]) {
+ printf("%s %d\n", sig_name[n], sig_num[n])
+ }
+ else {
+ printf("NUM%d %d\n", n, n)
+ }
+ }
+ for (n = 0; n < ndups; n++) {
+ printf("%s %d\n", dup_name[n], dup_num[n])
+ }
+}
+EOP
+$cat >signal_cmd <<EOS
+$startsh
+if $test -s signal.lst; then
+ echo "Using your existing signal.lst file"
+ exit 0
+fi
+xxx="$xxx"
+EOS
+?X: Avoid variable interpolation problems, especially with
+?X: xxx, which contains newlines.
+$cat >>signal_cmd <<'EOS'
+
+set signal
+if eval $compile_ok; then
+ $run ./signal$_exe | ($sort -n -k 2 2>/dev/null || $sort -n +1) | \
+ $uniq | $awk -f signal.awk >signal.lst
+else
+ echo "(I can't seem be able to compile the whole test program)" >&4
+ echo "(I'll try it in little pieces.)" >&4
+ set signal -DJUST_NSIG
+ if eval $compile_ok; then
+ $run ./signal$_exe > signal.nsg
+ $cat signal.nsg
+ else
+ echo "I can't seem to figure out how many signals you have." >&4
+ echo "Guessing 50." >&4
+ echo 'NSIG 50' > signal.nsg
+ fi
+ : Now look at all the signal names, one at a time.
+ for xx in `echo $xxx | $tr ' ' $trnl | $sort | $uniq`; do
+ $cat > signal.c <<EOCP
+#include <sys/types.h>
+#include <signal.h>
+#include <stdio.h>
+int main() {
+printf("$xx %d\n", SIG${xx});
+return 0;
+}
+EOCP
+ set signal
+ if eval $compile; then
+ echo "SIG${xx} found."
+ $run ./signal$_exe >> signal.ls1
+ else
+ echo "SIG${xx} NOT found."
+ fi
+ done
+ if $test -s signal.ls1; then
+ $cat signal.nsg signal.ls1 |
+ $sort -n | $uniq | $awk -f signal.awk >signal.lst
+ fi
+
+fi
+if $test -s signal.lst; then
+ :
+else
+ echo "(AAK! I can't compile the test programs -- Guessing)" >&4
+ echo 'kill -l' >signal
+ set X `csh -f <signal`
+ $rm -f signal
+ shift
+ case $# in
+ 0) set HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM;;
+ esac
+ echo $@ | $tr ' ' $trnl | \
+ $awk '{ printf "%s %d\n", $1, ++s; }
+ END { printf "NSIG %d\n", ++s }' >signal.lst
+fi
+$rm -f signal.c signal$_exe signal$_o signal.nsg signal.ls1
+EOS
+chmod a+x signal_cmd
+$eunicefix signal_cmd
+
diff --git a/mcon/U/Tr.U b/mcon/U/Tr.U
new file mode 100644
index 0000000..f58d163
--- /dev/null
+++ b/mcon/U/Tr.U
@@ -0,0 +1,103 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: Tr.U,v $
+?RCS: Revision 3.0.1.2 1994/10/29 18:00:54 ram
+?RCS: patch43: forgot to quote $@ to protect against "evil" characters
+?RCS:
+?RCS: Revision 3.0.1.1 1994/10/29 15:58:35 ram
+?RCS: patch36: created
+?RCS:
+?X:
+?X: This unit produces a bit of shell code that must be dotted in in order
+?X: to do a character translation. It catches translations to uppercase or
+?X: to lowercase, and then invokes the real tr to perform the job.
+?X:
+?X: This unit is necessary on HP machines (HP strikes again!) with non-ascii
+?X: ROMAN8-charset, where normal letters are not arranged in a row, so a-z
+?X: covers not the whole alphabet but lots of special chars. This was reported
+?X: by Andreas Sahlbach <a.sahlbach@tu-bs.de>.
+?X:
+?X: Units performing a tr '[A-Z]' '[a-z]' or the other way round should include
+?X: us in their dependency and use ./tr instead.
+?X:
+?MAKE:Tr: startsh tr eunicefix
+?MAKE: -pick add $@ %<
+?F:./tr
+?T:up low LC_ALL
+: see whether [:lower:] and [:upper:] are supported character classes
+echo " "
+case "`echo AbyZ | LC_ALL=C $tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
+ABYZ)
+ echo "Good, your tr supports [:lower:] and [:upper:] to convert case." >&4
+ up='[:upper:]'
+ low='[:lower:]'
+ ;;
+*) # There is a discontinuity in EBCDIC between 'I' and 'J'
+ # (0xc9 and 0xd1), therefore that is a nice testing point.
+ if test "X$up" = X -o "X$low" = X; then
+ case "`echo IJ | LC_ALL=C $tr '[I-J]' '[i-j]' 2>/dev/null`" in
+ ij) up='[A-Z]'
+ low='[a-z]'
+ ;;
+ esac
+ fi
+ if test "X$up" = X -o "X$low" = X; then
+ case "`echo IJ | LC_ALL=C $tr I-J i-j 2>/dev/null`" in
+ ij) up='A-Z'
+ low='a-z'
+ ;;
+ esac
+ fi
+ if test "X$up" = X -o "X$low" = X; then
+ case "`echo IJ | od -x 2>/dev/null`" in
+ *C9D1*|*c9d1*)
+ echo "Hey, this might be EBCDIC." >&4
+ if test "X$up" = X -o "X$low" = X; then
+ case "`echo IJ | \
+ LC_ALL=C $tr '[A-IJ-RS-Z]' '[a-ij-rs-z]' 2>/dev/null`" in
+ ij) up='[A-IJ-RS-Z]'
+ low='[a-ij-rs-z]'
+ ;;
+ esac
+ fi
+ if test "X$up" = X -o "X$low" = X; then
+ case "`echo IJ | LC_ALL=C $tr A-IJ-RS-Z a-ij-rs-z 2>/dev/null`" in
+ ij) up='A-IJ-RS-Z'
+ low='a-ij-rs-z'
+ ;;
+ esac
+ fi
+ ;;
+ esac
+ fi
+esac
+case "`echo IJ | LC_ALL=C $tr \"$up\" \"$low\" 2>/dev/null`" in
+ij)
+ echo "Using $up and $low to convert case." >&4
+ ;;
+*)
+ echo "I don't know how to translate letters from upper to lower case." >&4
+ echo "Your tr is not acting any way I know of." >&4
+ exit 1
+ ;;
+esac
+: set up the translation script tr, must be called with ./tr of course
+cat >tr <<EOSC
+$startsh
+case "\$1\$2" in
+'[A-Z][a-z]') LC_ALL=C exec $tr '$up' '$low';;
+'[a-z][A-Z]') LC_ALL=C exec $tr '$low' '$up';;
+esac
+LC_ALL=C exec $tr "\$@"
+EOSC
+chmod +x tr
+$eunicefix tr
+
diff --git a/mcon/U/Trylink.U b/mcon/U/Trylink.U
new file mode 100644
index 0000000..d45ffe2
--- /dev/null
+++ b/mcon/U/Trylink.U
@@ -0,0 +1,110 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?X:
+?X: This unit tries to compile and link a test program.
+?X:
+?X: To use it, put the program to compile in try.c, then say:
+?X:
+?X: cyn=func
+?X: set d_func [optional cc flags to try in sequence]
+?X: eval $trylink
+?X:
+?X: A log of all attempts is kept in the trylink.log file, within the UU
+?X: directory (where Configure runs). This directory is only cleaned-up
+?X: at the end of the Configure run, so do not supply -e to Configure in order
+?X: to stop after the production of the config.sh file and be able to
+?X: inspect the UU/trylink.log file.
+?X:
+?X: Before calling $trylink, on can also set the $cyn variable (check yes/no)
+?X: with a message that will be printed before the test is made and which
+?X: will indicate whether the test was successful or not. The string
+?X: "Checking $cyn..." is emitted and will be followed by "yes." if the
+?X: compilation succeeds, and "no." otherwise.
+?X:
+?X: If there are no space in the $cyn variable, then it is expected to hold
+?X: the name of a routine if the variable to test starts with d_, or
+?X: the name of an include file if the variable to test starts with i_.
+?X: In which case the message for success are changed to "found." and
+?X: "missing." on failure.
+?X:
+?X: The "$cyn" variable is explicitly reset at the end, and nothing is
+?X: printed if it is empty upon entry.
+?X:
+?MAKE:Trylink: Setvar Oldconfig cat rm test +cc +ccflags +ldflags echo c n
+?MAKE: -pick add $@ %<
+?LINT:define trylink
+?V:trylink:cyn
+?S:trylink:
+?S: This shell variable is used internally by Configure to check
+?S: wether a given function is defined or not. A typical use is:
+?S: create try.c
+?S: set d_func [optional cc flags to try in sequence]
+?S: eval $trylink
+?S: That will print a message, saying wether function was found or
+?S: not and set d_func accordingly.
+?S:.
+?T:var file val nparams msg yes no
+: see whether the try.c file compiles and links
+trylink='
+var=$1;
+shift;
+val=$undef;
+file=trylink.log;
+nparams=$#;
+?X: If they supplied a $cyn, display it now.
+case "$cyn" in
+"") msg="";;
+*" "*) msg="$cyn"; yes=yes; no=no;;
+*)
+ case "$var" in
+ d_*) msg="for $cyn()"; yes=found; no=missing;;
+ i_*) msg="for <$cyn>"; yes=found; no=missing;;
+ *) msg="$cyn"; yes=yes; no=no;;
+ esac
+ ;;
+esac;
+case "$cyn" in
+"") echo "--- $var ---" >> "$file";;
+*)
+ echo " "; $echo $n "Checking $msg...$c" >&4;
+ echo "--- $var --- ($msg)" >>"$file"
+ ;;
+esac;
+$cat try.c >> "$file";
+while :; do
+ $rm -f try$_exe;
+ if $cc $ccflags -o try try.c $ldflags $1 >> "$file" 2>&1; then
+ case "$nparams" in 0) ;; *) echo "==> OK with \"$1\"" >> "$file";; esac;
+ val=$define;
+ break;
+ fi;
+ if $test $# -lt 1; then
+ break;
+ fi;
+ echo "==> FAILED with \"$1\"" >> "$file";
+ shift;
+done;
+$rm -rf try try.*;
+echo "==> $var=$val" >> "$file";
+?X: Show feedback if they supplied a $cyn
+case "$cyn" in
+"") ;;
+*)
+ case "$val" in
+ "$define") echo " $yes." >&4;;
+ *) echo " $no." >&4;;
+ esac
+ ;;
+esac;
+set $var; eval $setvar;
+?X: Cleanup so that next unit using $trylink does not have to do that
+cyn=""
+'
+
diff --git a/mcon/U/Typedef.U b/mcon/U/Typedef.U
new file mode 100644
index 0000000..ad39117
--- /dev/null
+++ b/mcon/U/Typedef.U
@@ -0,0 +1,63 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: Typedef.U,v $
+?RCS: Revision 3.0.1.3 1995/07/25 13:42:07 ram
+?RCS: patch56: added backslash escapes within evals to prevent space problems
+?RCS:
+?RCS: Revision 3.0.1.2 1994/10/29 16:01:16 ram
+?RCS: patch36: don't clobber visible 'val' variable, use 'varval' instead
+?RCS:
+?RCS: Revision 3.0.1.1 1994/08/29 16:05:14 ram
+?RCS: patch32: created
+?RCS:
+?X:
+?X: This unit checks for the definition of a given typedef.
+?X:
+?X: To use it, say:
+?X: set typedef val_t default [includes]
+?X: eval $typedef
+?X:
+?MAKE:Typedef: cppstdin cppminus cppflags rm contains Oldconfig
+?MAKE: -pick add $@ %<
+?F:!temp.c
+?LINT:define typedef
+?V:typedef
+?S:typedef:
+?S: This shell variable is used internally by Configure to check
+?S: wether a given typedef is defined or not. A typical use is:
+?S: set typedef val_t default [includes]
+?S: eval $typedef
+?S: That will return val_t set to default if the typedef was not found,
+?S: to typedef otherwise. If no includes are specified, look in sys/types.h.
+?S:.
+?T:type var def inclist varval inc
+: define an is-a-typedef? function
+typedef='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
+case "$inclist" in
+"") inclist="sys/types.h";;
+esac;
+eval "varval=\$$var";
+case "$varval" in
+"")
+ $rm -f temp.c;
+ for inc in $inclist; do
+ echo "#include <$inc>" >>temp.c;
+ done;
+ $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
+ if $contains $type temp.E >/dev/null 2>&1; then
+ eval "$var=\$type";
+ else
+ eval "$var=\$def";
+ fi;
+ $rm -f temp.?;;
+*) eval "$var=\$varval";;
+esac'
+
diff --git a/mcon/U/Unix.U b/mcon/U/Unix.U
new file mode 100644
index 0000000..ed1d066
--- /dev/null
+++ b/mcon/U/Unix.U
@@ -0,0 +1,70 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1996, Andy Dougherty
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: Unix.U,v $
+?RCS: Revision 3.0.1.1 1997/02/28 15:20:06 ram
+?RCS: patch61: created
+?RCS:
+?X:
+?X: The purpose of this unit is to define things that are common across all
+?X: known UNIX platforms. If Configure is ported/used on a non-UNIX
+?X: environment, then some of the following variables can be redefined in hint
+?X: files.
+?X:
+?MAKE:Unix _a _o firstmakefile archobjs rm_try: Oldconfig rm
+?MAKE: -pick add $@ %<
+?S:_a (lib_ext):
+?S: This variable defines the extension used for ordinary libraries.
+?S: For unix, it is '.a'. The '.' is included. Other possible
+?S: values include '.lib'.
+?S:.
+?S:_o (obj_ext):
+?S: This variable defines the extension used for object files.
+?S: For unix, it is '.o'. The '.' is included. Other possible
+?S: values include '.obj'.
+?S:.
+?S:firstmakefile:
+?S: This variable defines the first file searched by make. On unix,
+?S: it is makefile (then Makefile). On case-insensitive systems,
+?S: it might be something else. This is only used to deal with
+?S: convoluted make depend tricks.
+?S:.
+?S:archobjs:
+?S: This variable defines any additional objects that must be linked
+?S: in with the program on this architecture. On unix, it is usually
+?S: empty. It is typically used to include emulations of unix calls
+?S: or other facilities. For perl on OS/2, for example, this would
+?S: include os2/os2.obj.
+?S:.
+?S:rm_try:
+?S: This is a cleanup variable for try test programs.
+?S: Internal Configure use only.
+?S:.
+?INIT:: Extra object files, if any, needed on this platform.
+?INIT:archobjs=''
+: Define several unixisms.
+: Hints files or command line option can be used to override them.
+case "$_a" in
+'') _a='.a';;
+esac
+case "$_o" in
+'') _o='.o';;
+esac
+
+rm_try="$rm -f try try$_exe a.out .out try.[cho] try.$_o core core.try* try.core*"
+
+@if firstmakefile
+: Which makefile gets called first. This is used by make depend.
+case "$firstmakefile" in
+'') firstmakefile='makefile';;
+esac
+
+@end
diff --git a/mcon/U/Warn.U b/mcon/U/Warn.U
new file mode 100644
index 0000000..36b37eb
--- /dev/null
+++ b/mcon/U/Warn.U
@@ -0,0 +1,57 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: Extract.U,v $
+?X:
+?X: This unit produces a shell script which can be run in order to emit
+?X: an important warning to the user, which will be remembered and shown
+?X: at the end of the Configure run as well.
+?X:
+?X: A typical use would be:
+?X:
+?X: ./warn <<EOM
+?X: Problem with your C compiler: can't turn debugging on.
+?X: EOM
+?X:
+?X: or:
+?X:
+?X: ./warn "Problem with your C compiler: can't turn debugging on."
+?X:
+?X: Which will both display to the user:
+?X:
+?X: *** WARNING:
+?X: *** Problem with your C compiler: can't turn debugging on.
+?X: ***
+?X:
+?MAKE:Warn: startsh eunicefix
+?MAKE: -pick add $@ %<
+?F:./warn
+: script used to emit important warnings
+cat >warn <<EOS
+$startsh
+?X: Read the whole warning message from stdin into a temporary file
+?X: when no argument was supplied.
+if test \$# -gt 0; then
+ echo "\$@" >msg
+else
+ cat >msg
+fi
+?X: Emit the warning, prefixing all lines with '*** '
+echo "*** WARNING:" >&4
+sed -e 's/^/*** /' <msg >&4
+echo "*** " >&4
+?X: Save the warning in the logs, which will be shown again at the end
+cat msg >>config.msg
+echo " " >>config.msg
+rm -f msg
+EOS
+chmod +x warn
+$eunicefix warn
+
diff --git a/mcon/U/Warn_v7EXT.U b/mcon/U/Warn_v7EXT.U
new file mode 100644
index 0000000..f679931
--- /dev/null
+++ b/mcon/U/Warn_v7EXT.U
@@ -0,0 +1,34 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: Warn_v7EXT.U,v $
+?RCS: Revision 3.0.1.1 1994/10/29 16:01:42 ram
+?RCS: patch36: call ./v7 explicitly instead of relying on PATH
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:05:17 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: This unit issues warnings to V7 sites that they are living dangerously.
+?X: This unit needs to get mentioned in End.U to get included.
+?X:
+?MAKE:Warn_v7EXT: package Guess
+?MAKE: -pick add $@ %<
+: Warnings
+if ./v7; then
+ cat <<EOM
+
+NOTE: the V7 compiler may ignore some #undefs that $package uses. If so,
+you may get messages about redefining EXT. Some V7 compilers also have
+difficulties with #defines near buffer boundaries, so beware. You may have
+to play with the spacing in some .h files, believe it or not.
+EOM
+fi
+
diff --git a/mcon/U/Warn_v7ND.U b/mcon/U/Warn_v7ND.U
new file mode 100644
index 0000000..455097e
--- /dev/null
+++ b/mcon/U/Warn_v7ND.U
@@ -0,0 +1,33 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: Warn_v7ND.U,v $
+?RCS: Revision 3.0.1.1 1994/10/29 16:01:46 ram
+?RCS: patch36: call ./v7 explicitly instead of relying on PATH
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:05:18 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: This unit warns V7 sites that they may not have a non-blocking read.
+?X: This unit needs to be mentioned in End.U to get included.
+?X:
+?MAKE:Warn_v7ND: package Guess
+?MAKE: -pick add $@ %<
+: Warnings
+if ./v7; then
+ cat <<EOM
+
+NOTE: many V7 systems do not have a way to do a non-blocking read. If you
+don't have any of FIONREAD, O_NDELAY, or rdchk(), the $package package
+may not work as well as it might. It might not work at all.
+EOM
+fi
+
diff --git a/mcon/U/Whoa.U b/mcon/U/Whoa.U
new file mode 100644
index 0000000..abc0637
--- /dev/null
+++ b/mcon/U/Whoa.U
@@ -0,0 +1,51 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: Whoa.U,v $
+?RCS: Revision 3.0.1.2 1997/02/28 15:21:21 ram
+?RCS: patch61: whoa script now starts with leading "startsh"
+?RCS:
+?RCS: Revision 3.0.1.1 1994/10/29 16:02:01 ram
+?RCS: patch36: added ?F: line for metalint file checking
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:05:19 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: This unit produces a bit of shell code that must be dotted in in order
+?X: to warn the user in case a change into a variable is noticed.
+?X:
+?X: To use this unit, $was must hold the old value that has changed. Upon
+?X: exit, the two variables $td and $tu are set to the correct value for
+?X: respectively defining or undefining a variable. For instance, if $vas was
+?X: $undef, but now $var is $define, after calling . whoa, you should use
+?X: eval "$var=\$tu" to finally set $var to the correct value. See unit Inlibc.
+?X:
+?MAKE:Whoa: Myread startsh hint
+?MAKE: -pick add $@ %<
+?F:./whoa
+?T:var was
+?LINT:change td tu
+: set up the script used to warn in case of inconsistency
+cat <<EOS >whoa
+$startsh
+EOS
+cat <<'EOSC' >>whoa
+dflt=y
+echo " "
+echo "*** WHOA THERE!!! ***" >&4
+echo " The $hint value for \$$var on this machine was \"$was\"!" >&4
+rp=" Keep the $hint value?"
+. ./myread
+case "$ans" in
+y) td=$was; tu=$was;;
+esac
+EOSC
+
diff --git a/mcon/U/abortsig.U b/mcon/U/abortsig.U
new file mode 100644
index 0000000..f0bc51c
--- /dev/null
+++ b/mcon/U/abortsig.U
@@ -0,0 +1,80 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: abortsig.U,v $
+?RCS: Revision 3.0.1.1 1994/10/29 16:02:19 ram
+?RCS: patch36: call ./usg explicitly instead of relying on PATH
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:05:20 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:abortsig: Myread Oldconfig Guess cat +cc ccflags rm
+?MAKE: -pick add $@ %<
+?S:abortsig:
+?S: This variable holds the name of the signal used by the abort() call.
+?S:.
+?C:ABORTSIG:
+?C: This symbol holds the signal number (symbol) used by the abort() call. To
+?C: actually define the signal symbol, <signal.h> should be included.
+?C:.
+?H:#define ABORTSIG $abortsig /**/
+?H:.
+?T:signal
+: which signal is sent by abort ?
+echo " "
+case "$abortsig" in
+'')
+ echo "Checking to see which signal is sent to the process by abort()..." >&4
+ echo "abort" > abort.sh
+ chmod +x abort.sh
+?X: SIGABRT should replace SIGIOT on USG machines in a near future (1991).
+ for signal in SIGIOT SIGILL SIGABRT; do
+ case "$abortsig" in
+ '') $cat >abort.c <<EOP
+/* FIXME: Missing #include <stdlib.h>*/
+#include <signal.h>
+caught() { exit(0); } /* FIXME: Use _exit() or _Exit() in signal handler */
+int main()
+{
+#ifdef $signal
+ signal($signal, caught);
+#endif
+ if (-1 == abort())
+ exit(1);
+ exit(1);
+}
+EOP
+?X: We have to use the abort.sh script otherwise sh behaves strangely on AIX.
+ if $cc $ccflags -o abort abort.c >/dev/null 2>&1; then
+ (./abort.sh) >/dev/null 2>&1
+ case $? in
+ 0) abortsig="$signal";;
+ esac
+ fi
+ ;;
+ esac
+ done
+ ;;
+esac
+case "$abortsig" in
+'') echo "(I wasn't able to compute the signal name--guessing)"
+ if ./usg; then
+ dflt="SIGIOT"
+ else
+ dflt="SIGILL"
+ fi;;
+*) dflt="$abortsig"
+ ;;
+esac
+rp="Which signal does abort() send to the process (signal name)?"
+. ./myread
+abortsig="$ans"
+$rm -f core abort.sh abort abort.c
+
diff --git a/mcon/U/active.U b/mcon/U/active.U
new file mode 100644
index 0000000..e2cb287
--- /dev/null
+++ b/mcon/U/active.U
@@ -0,0 +1,50 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: active.U,v $
+?RCS: Revision 3.0 1993/08/18 12:05:21 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:active activeexp: newslib Oldconfig Getfile
+?MAKE: -pick add $@ %<
+?S:active:
+?S: The name of the active file for the news system. This file contains
+?S: the list of active newsgroups. The name may have ~ on the front.
+?S: The variable myactive is the expanded form.
+?S:.
+?S:activeexp (myactive):
+?S: This is the same as the active variable, but is filename expanded
+?S: so that later Configure units can look at the active file if desired.
+?S:.
+?C:ACTIVE:
+?C: The name of the active file for the news system. This file contains
+?C: the list of active newsgroups. The name may have ~ on the front.
+?C:.
+?C:ACTIVE_EXP:
+?C: This is the same as ACTIVE, but is filename expanded at configuration
+?C: time, for programs that do not want to deal with it themselves.
+?C:.
+?H:#define ACTIVE "$active" /**/
+?H:#define ACTIVE_EXP "$activeexp" /**/
+?H:.
+: locate active file
+echo " "
+case "$active" in
+'')
+ dflt=$newslib/active
+ ;;
+*) dflt="$active";;
+esac
+fn=l~:active
+rp='Where is the active file?'
+. ./getfile
+active="$ans"
+activeexp="$ansexp"
+
diff --git a/mcon/U/afs.U b/mcon/U/afs.U
new file mode 100644
index 0000000..9a5cc83
--- /dev/null
+++ b/mcon/U/afs.U
@@ -0,0 +1,55 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: afs.U,v $
+?RCS: Revision 3.0.1.2 1997/02/28 15:23:06 ram
+?RCS: patch61: can now explicitly tell Configure whether AFS is running
+?RCS:
+?RCS: Revision 3.0.1.1 1993/08/24 12:24:43 ram
+?RCS: patch3: created
+?RCS:
+?MAKE:afs afsroot: test
+?MAKE: -pick add $@ %<
+?S:afs:
+?S: This variable is set to 'true' if AFS (Andrew File System) is used
+?S: on the system, 'false' otherwise. It is possible to override this
+?S: with a hint value or command line option, but you'd better know
+?S: what you are doing.
+?S:.
+?S:afsroot:
+?S: This variable is by default set to '/afs'. In the unlikely case
+?S: this is not the correct root, it is possible to override this with
+?S: a hint value or command line option. This will be used in subsequent
+?S: tests for AFSness in the configure and test process.
+?S:.
+: allow them to override the AFS root
+case "$afsroot" in
+'') afsroot=/afs ;;
+*) afsroot=$afsroot ;;
+esac
+
+: is AFS running?
+echo " "
+case "$afs" in
+$define|true) afs=true ;;
+$undef|false) afs=false ;;
+*) if $test -d $afsroot; then
+ afs=true
+ else
+ afs=false
+ fi
+ ;;
+esac
+if $afs; then
+ echo "AFS may be running... I'll be extra cautious then..." >&4
+else
+ echo "AFS does not seem to be running..." >&4
+fi
+
diff --git a/mcon/U/alignbytes.U b/mcon/U/alignbytes.U
new file mode 100644
index 0000000..569c25a
--- /dev/null
+++ b/mcon/U/alignbytes.U
@@ -0,0 +1,141 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: alignbytes.U,v $
+?RCS: Revision 3.0.1.2 1994/10/29 16:02:28 ram
+?RCS: patch36: added ?F: line for metalint file checking
+?RCS:
+?RCS: Revision 3.0.1.1 1994/05/06 14:25:20 ram
+?RCS: patch23: avoid ALIGNBYTES, since it conflicts on NetBSD
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:05:23 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:alignbytes: Assert Myread Trylink cat i_inttypes i_limits i_math
+?MAKE: -pick add $@ %<
+?S:alignbytes:
+?S: This variable holds the number of bytes required to align an
+?S: arbitrary standard type. Usual values are 2, 4 and 8.
+?S:.
+?X: This used to be called ALIGNBYTES, but that conflicts with
+?X: <machines/param.h> in NetBSD.
+?C:MEM_ALIGNBYTES (ALIGNBYTES):
+?C: This symbol contains the number of bytes required to align a
+?C: double. Usual values are 2, 4 and 8.
+?C:.
+?H:#define MEM_ALIGNBYTES $alignbytes /**/
+?H:.
+?T:alignment result
+: check for alignment requirements
+echo " "
+case "$alignbytes" in
+'')
+ echo "Checking alignment constraints..." >&4
+
+ for alignment in 8 4 2 1 16 32 error
+ do
+ $cat >try.c <<EOCP
+#$i_inttypes I_INTTYPES
+#ifdef I_INTTYPES
+#include <inttypes.h>
+#endif
+#$i_limits I_LIMITS
+#ifdef I_LIMITS
+#include <limits.h>
+#endif
+#$i_math I_MATH
+#ifdef I_MATH
+#include <math.h>
+#endif
+
+union u {
+ void *void_ptr;
+ void (*func_ptr)(void);
+ char c;
+ short s;
+ int i;
+ long l;
+ float f;
+ double d;
+#ifdef LLONG_MAX
+ long long ll;
+#else
+#warning "LLONG_MAX undefined"
+#endif
+#if defined(HUGE_VALL)
+ long double ld;
+#else
+#warning "HUGE_VALL undefined"
+#endif
+#ifdef UINT32_MAX
+ uint32_t u32;
+#else
+#warning "UINT32_MAX undefined"
+#endif
+#ifdef UINT16_MAX
+ uint16_t u16;
+#else
+#warning "UINT32_MAX undefined"
+#endif
+#ifdef UINT64_MAX
+ uint64_t u64;
+#else
+#warning "UINT64_MAX undefined"
+#endif
+#ifdef UINTMAX_MAX
+ uintmax_t m;
+#else
+#warning "UINTMAX_MAX undefined"
+#endif
+#ifdef UINTPTR_MAX
+ uintptr_t up;
+#else
+#warning "UINTPTR_MAX undefined"
+#endif
+};
+
+struct s {
+ char a;
+ union u b;
+};
+
+#include "static_assert.h"
+
+int
+main(void)
+{
+ STATIC_ASSERT($alignment == ((sizeof (struct s) - (sizeof (union u)))));
+ return 0;
+}
+EOCP
+
+ result=''
+ set result
+ eval $trylink
+ case "$result" in
+ "$define") break;;
+ esac
+ done
+
+ case "$alignment" in
+ error) dflt='8'
+ echo "(I can't seem to compile the test program...)" >&4
+ ;;
+ *) dflt=$alignment
+ ;;
+ esac
+;;
+*) dflt="$alignbytes"
+ ;;
+esac
+rp="What is the maximum alignment in bytes required for a standard type?"
+. ./myread
+alignbytes="$ans"
+
diff --git a/mcon/U/archlib.U b/mcon/U/archlib.U
new file mode 100644
index 0000000..d5ed39b
--- /dev/null
+++ b/mcon/U/archlib.U
@@ -0,0 +1,125 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu>
+?RCS:
+?RCS: $Log: archlib.U,v $
+?RCS: Revision 3.0.1.5 1997/02/28 15:23:38 ram
+?RCS: patch61: skip existence checks for archlib
+?RCS:
+?RCS: Revision 3.0.1.4 1995/09/25 09:15:18 ram
+?RCS: patch59: unit is now forced to the top of Configure, if possible
+?RCS:
+?RCS: Revision 3.0.1.3 1995/02/15 14:14:14 ram
+?RCS: patch51: architecture name is now computed by a separate unit
+?RCS:
+?RCS: Revision 3.0.1.2 1995/01/30 14:32:22 ram
+?RCS: patch49: archname is now systematically recomputed
+?RCS: patch49: can now handle installation prefix changes (from WED)
+?RCS:
+?RCS: Revision 3.0.1.1 1994/10/29 16:02:36 ram
+?RCS: patch36: created by ADO
+?RCS:
+?MAKE:d_archlib archlib archlibexp installarchlib: archname afs spackage \
+ cat Getfile Loc Oldconfig prefixexp privlib test Prefixit Prefixup
+?MAKE: -pick add $@ %<
+?Y:TOP
+?S:d_archlib:
+?S: This variable conditionally defines ARCHLIB to hold the pathname
+?S: of architecture-dependent library files for $package. If
+?S: $archlib is the same as $privlib, then this is set to undef.
+?S:.
+?S:archlib:
+?S: This variable holds the name of the directory in which the user wants
+?S: to put architecture-dependent public library files for $package.
+?S: It is most often a local directory such as /usr/local/lib.
+?S: Programs using this variable must be prepared to deal
+?S: with filename expansion.
+?S:.
+?S:archlibexp:
+?S: This variable is the same as the archlib variable, but is
+?S: filename expanded at configuration time, for convenient use.
+?S:.
+?S:installarchlib:
+?S: This variable is really the same as archlibexp but may differ on
+?S: those systems using AFS. For extra portability, only this variable
+?S: should be used in makefiles.
+?S:.
+?C:ARCHLIB:
+?C: This variable, if defined, holds the name of the directory in
+?C: which the user wants to put architecture-dependent public
+?C: library files for $package. It is most often a local directory
+?C: such as /usr/local/lib. Programs using this variable must be
+?C: prepared to deal with filename expansion. If ARCHLIB is the
+?C: same as PRIVLIB, it is not defined, since presumably the
+?C: program already searches PRIVLIB.
+?C:.
+?C:ARCHLIB_EXP:
+?C: This symbol contains the ~name expanded version of ARCHLIB, to be used
+?C: in programs that are not prepared to deal with ~ expansion at run-time.
+?C:.
+?H:#$d_archlib ARCHLIB "$archlib" /**/
+?H:#$d_archlib ARCHLIB_EXP "$archlibexp" /**/
+?H:.
+: determine where public architecture dependent libraries go
+set archlib archlib
+eval $prefixit
+case "$archlib" in
+'')
+ case "$privlib" in
+ '')
+ dflt=`./loc . "." $prefixexp/lib /usr/local/lib /usr/lib /lib`
+ set dflt
+ eval $prefixup
+ ;;
+ *) dflt="$privlib/$archname";;
+ esac
+ ;;
+*) dflt="$archlib";;
+esac
+cat <<EOM
+
+$spackage contains architecture-dependent library files. If you are
+sharing libraries in a heterogeneous environment, you might store
+these files in a separate location. Otherwise, you can just include
+them with the rest of the public library files.
+
+EOM
+fn=d+~
+rp='Where do you want to put the public architecture-dependent libraries?'
+. ./getfile
+archlib="$ans"
+archlibexp="$ansexp"
+
+if $afs; then
+ $cat <<EOM
+
+Since you are running AFS, I need to distinguish the directory in which
+private files reside from the directory in which they are installed (and from
+which they are presumably copied to the former directory by occult means).
+
+EOM
+ case "$installarchlib" in
+ '') dflt=`echo $archlibexp | sed 's#^/afs/#/afs/.#'`;;
+ *) dflt="$installarchlib";;
+ esac
+ fn=de~
+ rp='Where will architecture-dependent library files be installed?'
+ . ./getfile
+ installarchlib="$ans"
+else
+ installarchlib="$archlibexp"
+fi
+if $test X"$archlib" = X"$privlib"; then
+ d_archlib="$undef"
+else
+ d_archlib="$define"
+fi
+
diff --git a/mcon/U/archname.U b/mcon/U/archname.U
new file mode 100644
index 0000000..8d79e2a
--- /dev/null
+++ b/mcon/U/archname.U
@@ -0,0 +1,76 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: archname.U,v $
+?RCS: Revision 3.0.1.3 1997/02/28 15:24:32 ram
+?RCS: patch61: changed the way the archname is mangled from uname
+?RCS:
+?RCS: Revision 3.0.1.2 1995/05/12 12:05:24 ram
+?RCS: patch54: protect against spaces in "uname -m" output (ADO)
+?RCS:
+?RCS: Revision 3.0.1.1 1995/02/15 14:14:21 ram
+?RCS: patch51: created
+?RCS:
+?MAKE:archname myarchname: sed Loc Myread Oldconfig osname test rm
+?MAKE: -pick add $@ %<
+?S:archname:
+?S: This variable is a short name to characterize the current
+?S: architecture. It is used mainly to construct the default archlib.
+?S:.
+?S:myarchname:
+?S: This variable holds the architecture name computed by Configure in
+?S: a previous run. It is not intended to be perused by any user and
+?S: should never be set in a hint file.
+?S:.
+?C:ARCHNAME:
+?C: This symbol holds a string representing the architecture name.
+?C: It may be used to construct an architecture-dependant pathname
+?C: where library files may be held under a private library, for
+?C: instance.
+?C:.
+?H:#define ARCHNAME "$archname" /**/
+?H:.
+?T:xxx tarch
+: determine the architecture name
+echo " "
+?X: We always recompute archname in case osname changes. However, we need
+?X: to be careful since, as ADO rightfully pointed out, some systems pick
+?X: silly architecture names (0001307135000-aix on AIX or 9000/715-ux under
+?X: HP-UX). Therefore, we allow hint files to superseed our guess and ask
+?X: the user for confirmation.
+if xxx=`./loc arch blurfl $pth`; $test -f "$xxx"; then
+ tarch=`arch`"-$osname"
+elif xxx=`./loc uname blurfl $pth`; $test -f "$xxx" ; then
+ if uname -m > tmparch 2>&1 ; then
+ tarch=`$sed -e 's/ *$//' -e 's/ /_/g' \
+ -e 's/$/'"-$osname/" tmparch`
+ else
+ tarch="$osname"
+ fi
+ $rm -f tmparch
+else
+ tarch="$osname"
+fi
+case "$myarchname" in
+''|"$tarch") ;;
+*)
+ echo "(Your architecture name used to be $myarchname.)"
+ archname=''
+ ;;
+esac
+case "$archname" in
+'') dflt="$tarch";;
+*) dflt="$archname";;
+esac
+rp='What is your architecture name'
+. ./myread
+archname="$ans"
+myarchname="$tarch"
+
diff --git a/mcon/U/baserev.U b/mcon/U/baserev.U
new file mode 100644
index 0000000..fe47c36
--- /dev/null
+++ b/mcon/U/baserev.U
@@ -0,0 +1,22 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: baserev.U,v $
+?RCS: Revision 3.0 1993/08/18 12:05:24 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:baserev: Null
+?MAKE: -pick wipe $@ %<
+?S:baserev:
+?S: The base revision level of this package, from the .package file.
+?S:.
+: set the base revision
+baserev=<BASEREV>
+
diff --git a/mcon/U/basicshell.U b/mcon/U/basicshell.U
new file mode 100644
index 0000000..1d4d769
--- /dev/null
+++ b/mcon/U/basicshell.U
@@ -0,0 +1,47 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: basicshell.U,v $
+?RCS: Revision 3.0 1993/08/18 12:05:25 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:basicshell: Getfile Oldconfig bash csh ksh sh
+?MAKE: -pick add $@ %<
+?S:basicshell:
+?S: This variable contains the eventual value of the BASICSHELL symbol,
+?S: which contains the full name of the basic script shell on this
+?S: system. Usual values are /bin/sh, /bin/ksh, /bin/csh.
+?S:.
+?C:BASICSHELL:
+?C: This symbol contains the full name of the basic script shell on this
+?C: system. Usual values are /bin/sh, /bin/ksh, /bin/csh.
+?C:.
+?H:#define BASICSHELL "$basicshell" /**/
+?H:.
+: find the most basic shell for scripts
+echo " "
+case "$basicshell" in
+'')
+ case "$sh $bash $csh $ksh" in
+ */sh*) dflt="$sh" ;;
+ */ksh*) dflt="$ksh" ;;
+ */csh*) dflt="$csh" ;;
+ */bash*) dflt="$bash" ;;
+ *) dflt='/bin/sh' ;;
+ esac
+ ;;
+*)
+ dflt="$basicshell";;
+esac
+fn=f
+rp="Give the full path name of the most basic shell used on your system"
+. ./getfile
+basicshell=$ans
+
diff --git a/mcon/U/bin.U b/mcon/U/bin.U
new file mode 100644
index 0000000..e814e9a
--- /dev/null
+++ b/mcon/U/bin.U
@@ -0,0 +1,88 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: bin.U,v $
+?RCS: Revision 3.0.1.4 1995/09/25 09:15:32 ram
+?RCS: patch59: unit is now forced to the top of Configure, if possible
+?RCS:
+?RCS: Revision 3.0.1.3 1995/01/30 14:32:40 ram
+?RCS: patch49: can now handle installation prefix changes (from WED)
+?RCS:
+?RCS: Revision 3.0.1.2 1994/08/29 16:05:28 ram
+?RCS: patch32: now uses installation prefix
+?RCS:
+?RCS: Revision 3.0.1.1 1993/09/13 15:56:51 ram
+?RCS: patch10: made prompting more explicit (WAD)
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:05:26 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:bin binexp installbin: Prefixit Getfile Oldconfig afs cat test
+?MAKE: -pick add $@ %<
+?Y:TOP
+?S:bin:
+?S: This variable holds the name of the directory in which the user wants
+?S: to put publicly executable images for the package in question. It
+?S: is most often a local directory such as /usr/local/bin. Programs using
+?S: this variable must be prepared to deal with ~name substitution.
+?S:.
+?S:binexp:
+?S: This is the same as the bin variable, but is filename expanded at
+?S: configuration time, for use in your makefiles.
+?S:.
+?S:installbin:
+?S: This variable is the same as binexp unless AFS is running in which case
+?S: the user is explicitly prompted for it. This variable should always
+?S: be used in your makefiles for maximum portability.
+?S:.
+?C:BIN:
+?C: This symbol holds the path of the bin directory where the package will
+?C: be installed. Program must be prepared to deal with ~name substitution.
+?C:.
+?C:BIN_EXP:
+?C: This symbol is the filename expanded version of the BIN symbol, for
+?C: programs that do not want to deal with that at run-time.
+?C:.
+?H:#define BIN "$bin" /**/
+?H:#define BIN_EXP "$binexp" /**/
+?H:.
+?D:bin='/usr/local/bin'
+: determine where public executables go
+echo " "
+set dflt bin bin
+eval $prefixit
+fn=d~
+rp='Pathname where the public executables will reside?'
+. ./getfile
+if $test "X$ansexp" != "X$binexp"; then
+ installbin=''
+fi
+bin="$ans"
+binexp="$ansexp"
+if $afs; then
+ $cat <<EOM
+
+Since you are running AFS, I need to distinguish the directory in which
+executables reside from the directory in which they are installed (and from
+which they are presumably copied to the former directory by occult means).
+
+EOM
+ case "$installbin" in
+ '') dflt=`echo $binexp | sed 's#^/afs/#/afs/.#'`;;
+ *) dflt="$installbin";;
+ esac
+ fn=de~
+ rp='Where will public executables be installed?'
+ . ./getfile
+ installbin="$ans"
+else
+ installbin="$binexp"
+fi
+
diff --git a/mcon/U/bitpbyte.U b/mcon/U/bitpbyte.U
new file mode 100644
index 0000000..cdd2c05
--- /dev/null
+++ b/mcon/U/bitpbyte.U
@@ -0,0 +1,74 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: bitpbyte.U,v $
+?RCS: Revision 3.0.1.1 1994/10/29 16:02:54 ram
+?RCS: patch36: added ?F: line for metalint file checking
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:05:27 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:bitpbyte: cat rm Myread +cc +ccflags
+?MAKE: -pick add $@ %<
+?S:bitpbyte:
+?S: This variable contains the value of the BITS_PER_BYTE symbol, which
+?S: indicates to the C program how many bits there are in a byte.
+?S:.
+?C:BITS_PER_BYTE:
+?C: This symbol contains the number of bits in a byte, so that the C
+?C: preprocessor can make decisions based on it.
+?C:.
+?H:#define BITS_PER_BYTE $bitpbyte /**/
+?H:.
+?F:!try
+: check for length of byte
+echo " "
+case "$bitpbyte" in
+'')
+ echo "Checking to see how many bits there are in a byte..." >&4
+ $cat >try.c <<'EOCP'
+#include <stdio.h>
+?X: Standard C requires a macro CHAR_BIT in <limits.h>
+#ifdef __STDC__
+#include <limits.h>
+#ifndef CHAR_BIT
+#define CHAR_BIT 8
+#endif
+#ifndef BITSPERBYTE
+#define BITSPERBYTE CHAR_BIT
+#endif
+#else
+?X: On non standard C, try with <values.h>
+#include <values.h>
+#ifndef BITSPERBYTE
+#define BITSPERBYTE 8
+#endif
+#endif
+int main()
+{
+ printf("%d\n", BITSPERBYTE);
+}
+EOCP
+ if $cc $ccflags -o try try.c >/dev/null 2>&1 ; then
+ dflt=`./try`
+ else
+ dflt='8'
+ echo "(I can't seem to compile the test program. Guessing...)"
+ fi
+ ;;
+*)
+ dflt="$bitpbyte"
+ ;;
+esac
+rp="What is the length of a byte (in bits)?"
+. ./myread
+bitpbyte="$ans"
+$rm -f try.c try
+
diff --git a/mcon/U/byteorder.U b/mcon/U/byteorder.U
new file mode 100644
index 0000000..9bd2467
--- /dev/null
+++ b/mcon/U/byteorder.U
@@ -0,0 +1,68 @@
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, 2012 Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:byteorder: cat contains echo n c Myread Oldconfig Loc +cc +ccflags rm_try _o
+?MAKE: -pick add $@ %<
+?S:byteorder:
+?S: This variable holds the byte order. In the following, larger digits
+?S: indicate more significance. The variable byteorder is either 4321
+?S: on a big-endian machine, or 1234 on a little-endian one.
+?S: cannot figure it out.
+?S:.
+?C:BYTEORDER:
+?C: This symbol holds the hexadecimal constant defined in byteorder,
+?C: i.e. 1234 for little-endian or 4321 for big-ending.
+?C:.
+?H:#define BYTEORDER 0x$byteorder /* large digits for MSB */
+?H:.
+?T:order
+: check for ordering of bytes in a word
+?X:
+?X: An idea from Guido Draheim <Guido.Draheim@gmx.de> checking the endianness
+?X: without actually executing code, which allows cross-compiling.
+?X:
+echo " "
+$echo $n "Checking integer byte-ordering...$c" >&4
+$cat >try.c <<'EOCP'
+short ascii_be[] = { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 };
+short ascii_le[] = { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 };
+short ebcdic_be[] = { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 };
+short ebcdic_le[] = { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 };
+EOCP
+order=''
+if $cc -c $ccflags try.c >/dev/null 2>&1; then
+ if $contains BIGenDianSyS try$_o >/dev/null 2>&1; then
+ order=4321
+ elif $contains LiTTleEnDian try$_o >/dev/null 2>&1; then
+ order=1234
+ else
+ $echo $n " wild guessing$c" >&4
+ order=4321
+ fi
+fi
+case "$order" in
+'')
+ echo " cannot compute it." >&4
+ rp="Are integers stored in big-endian format?"
+ case "$byteorder" in
+ 1234) dflt=n;;
+ *) dflt=y;;
+ esac
+ . ./myread
+ case "$ans" in
+ y*) order=4321;;
+ *) order=1234;;
+ esac
+ ;;
+1234) echo " little-endian." >&4;;
+4321) echo " big-endian." >&4;;
+esac
+byteorder=$order
+$rm_try
+
diff --git a/mcon/U/cc.U b/mcon/U/cc.U
new file mode 100644
index 0000000..b20f5f5
--- /dev/null
+++ b/mcon/U/cc.U
@@ -0,0 +1,58 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: cc.U,v $
+?RCS: Revision 3.0.1.4 1995/05/12 12:06:47 ram
+?RCS: patch54: may now abort Configure when cc does not work
+?RCS:
+?RCS: Revision 3.0.1.3 1995/01/11 15:20:11 ram
+?RCS: patch45: changed gcc checking message to a more explicit one (WED)
+?RCS:
+?RCS: Revision 3.0.1.2 1994/10/29 16:04:29 ram
+?RCS: patch36: detect gcc even when not called as 'gcc' (ADO)
+?RCS: patch36: simplified gcc version checking (ADO)
+?RCS: patch36: added ?F: line for metalint file checking
+?RCS:
+?RCS: Revision 3.0.1.1 1994/05/06 14:26:06 ram
+?RCS: patch23: added support for gcc version (ADO)
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:05:30 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:cc: Myread Oldconfig Checkcc test
+?MAKE: -pick add $@ %<
+?S:cc:
+?S: This variable holds the name of a command to execute a C compiler which
+?S: can resolve multiple global references that happen to have the same
+?S: name. Usual values are 'cc' and 'gcc'.
+?S: Fervent ANSI compilers may be called 'c89'. AIX has xlc.
+?S:.
+?F:!cc.cbu
+?D:cc='cc'
+: Determine the C compiler to be used
+echo " "
+case "$cc" in
+'') dflt=cc;;
+*) dflt="$cc";;
+esac
+rp="Use which C compiler?"
+. ./myread
+cc="$ans"
+
+: See whether they have no cc but they do have gcc
+. ./trygcc
+?X: Look for a hint-file generated 'call-back-unit'. Now that the
+?X: user has specified the compiler, we may need to set or change some
+?X: other defaults.
+if $test -f cc.cbu; then
+ . ./cc.cbu
+fi
+. ./checkcc
+
diff --git a/mcon/U/ccflags.U b/mcon/U/ccflags.U
new file mode 100644
index 0000000..942e462
--- /dev/null
+++ b/mcon/U/ccflags.U
@@ -0,0 +1,457 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: ccflags.U,v $
+?RCS: Revision 3.0.1.9 1997/02/28 15:27:07 ram
+?RCS: patch61: removed support for NO_PROTOTYPE detection on SCO
+?RCS: patch61: new locincpth variable
+?RCS: patch61: added info on the "additional ld flags" question
+?RCS:
+?RCS: Revision 3.0.1.8 1995/07/25 13:48:54 ram
+?RCS: patch56: re-arranged compile line to include ldflags before objects
+?RCS:
+?RCS: Revision 3.0.1.7 1995/05/12 12:08:33 ram
+?RCS: patch54: now checks for cc/ccflags/ldflags coherency
+?RCS:
+?RCS: Revision 3.0.1.6 1994/10/29 16:07:02 ram
+?RCS: patch36: gcc versioning no longer relies on the C compiler's name
+?RCS: patch36: simplified check for gcc version checking (ADO)
+?RCS:
+?RCS: Revision 3.0.1.5 1994/08/29 16:06:35 ram
+?RCS: patch32: propagate -posix flag from ccflags to ldflags
+?RCS:
+?RCS: Revision 3.0.1.4 1994/05/06 14:28:45 ram
+?RCS: patch23: -fpcc-struct-return only needed in gcc 1.x (ADO)
+?RCS: patch23: cppflags now computed on an option-by-option basis
+?RCS: patch23: magically added cc flags now only done the first time
+?RCS:
+?RCS: Revision 3.0.1.3 1993/09/13 15:58:29 ram
+?RCS: patch10: explicitly mention -DDEBUG just in case they need it (WAD)
+?RCS: patch10: removed all the "tans" variable usage (WAD)
+?RCS:
+?RCS: Revision 3.0.1.2 1993/08/27 14:39:38 ram
+?RCS: patch7: added support for OSF/1 machines
+?RCS:
+?RCS: Revision 3.0.1.1 1993/08/25 14:00:24 ram
+?RCS: patch6: added defaults for cppflags, ccflags and ldflags
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:05:31 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:ccflags ldflags lkflags cppflags optimize pthread locincpth: test cat \
+ Myread Guess Options Oldconfig gccversion mips_type +usrinc \
+ package contains rm rm_try +cc cppstdin cppminus cpprun cpplast libpth \
+ loclibpth hint
+?MAKE: -pick add $@ %<
+?S:ccflags:
+?S: This variable contains any additional C compiler flags desired by
+?S: the user. It is up to the Makefile to use this.
+?S:.
+?S:cppflags:
+?S: This variable holds the flags that will be passed to the C pre-
+?S: processor. It is up to the Makefile to use it.
+?S:.
+?S:optimize:
+?S: This variable contains any optimizer/debugger flag that should be used.
+?S: It is up to the Makefile to use it.
+?S:.
+?S:pthread:
+?S: This variable contains any thread-specific flag that should be used.
+?S: It is up to the Makefile to use it.
+?S:.
+?S:ldflags:
+?S: This variable contains any additional C loader flags desired by
+?S: the user. It is up to the Makefile to use this.
+?S:.
+?S:lkflags:
+?S: This variable contains any additional C partial linker flags desired by
+?S: the user. It is up to the Makefile to use this.
+?S:.
+?S:locincpth:
+?S: This variable contains a list of additional directories to be
+?S: searched by the compiler. The appropriate -I directives will
+?S: be added to ccflags. This is intended to simplify setting
+?S: local directories from the Configure command line.
+?S: It's not much, but it parallels the loclibpth stuff in libpth.U.
+?S:.
+?T:inctest thisincl xxx flag inclwanted ftry previous thislibdir
+?F:!cpp.c
+?D:cppflags=''
+?D:ccflags=''
+?D:ldflags=''
+?D:optimize=''
+?D:pthread=''
+?INIT:: Possible local include directories to search.
+?INIT:: Set locincpth to "" in a hint file to defeat local include searches.
+?INIT:locincpth=""
+?INIT::
+?INIT:: no include file wanted by default
+?INIT:inclwanted=''
+?INIT:
+: determine optimize, if desired, or use for debug flag also
+case "$optimize" in
+' '|$undef) dflt='none';;
+'')
+ case "$gccversion" in
+ '') dflt='-O';;
+ *) dflt='-O2 -g';;
+ esac
+ ;;
+*) dflt="$optimize";;
+esac
+case "$gccversion" in
+'') $cat <<EOH
+
+Some C compilers have problems with their optimizers. By default, $package
+compiles with the -O flag to use the optimizer. Alternately, you might want
+to use the symbolic debugger, which uses the -g flag (on traditional Unix
+systems). Either flag can be specified here. To use neither flag, specify
+the word "none".
+
+EOH
+ ;;
+*) $cat <<EOH
+
+With the GNU C compiler, it is possible to supply both -O2 and -g flags, to
+be able to reasonably optimize, whilst retaining the ability to use a
+symbolic debugger. Either flag can be specified here. To use neither flag,
+specify the word "none".
+
+EOH
+ ;;
+esac
+rp="What optimizer/debugger flag should be used?"
+. ./myread
+optimize="$ans"
+case "$optimize" in
+'none') optimize=" ";;
+esac
+
+?X: When they are using I_PTHREAD, check whether we need/can supply -pthread
+?X: to the compiler for proper threading support. This is usually necessary
+?X: with gcc, in addition to the required -lpthread that need to be listed
+?X: at link time.
+@if I_PTHREAD
+: see whether we need -pthread at the compile/link stage
+case "$pthread" in
+''|$undef)
+ $cat > try.c <<'EOF'
+int main() { return 0; }
+EOF
+ if $cc -pthread -c try.c >/dev/null 2>&1; then
+ dflt='-pthread'
+ else
+ dflt='none'
+ fi
+ ;;
+*) dflt="$pthread";;
+esac
+$cat <<EOH
+
+Some C compilers need to have special flags supplied at compile and link time
+to be able to generate code that will work correctly with POSIX threads.
+When no specific flags are required, specify the word "none".
+
+EOH
+rp="What thread-support compiler/linker flag should be used?"
+. ./myread
+pthread="$ans"
+case "$pthread" in
+'none') pthread="";;
+esac
+@end
+
+dflt=''
+: We will not override a previous value, but we might want to
+: augment a hint file
+case "$hint" in
+default|recommended)
+ case "$gccversion" in
+ 1*) dflt='-fpcc-struct-return' ;;
+ esac
+?X: check for POSIXized ISC
+ case "$gccversion" in
+ 2*) if test -d /etc/conf/kconfig.d &&
+ $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1
+ then
+ dflt="$dflt -posix"
+ fi
+ ;;
+ esac
+?X: turn warnings on if they're using gcc
+ case "$gccversion" in
+ 1*|2*) dflt="$dflt -Wall";;
+?X: starting with version 3, add "-W -Wall -Wformat=2 -Wshadow" by default
+ *) dflt="$dflt -W -Wall -Wformat=2 -Wshadow";;
+ esac
+ ;;
+esac
+
+?X: In USG mode, a MIPS system may need some BSD includes
+case "$mips_type" in
+*BSD*|'') inclwanted="$locincpth $usrinc";;
+*) inclwanted="$locincpth $inclwanted $usrinc/bsd";;
+esac
+for thisincl in $inclwanted; do
+ if $test -d $thisincl; then
+ if $test x$thisincl != x$usrinc; then
+ case "$dflt" in
+ *$thisincl*);;
+ *) dflt="$dflt -I$thisincl";;
+ esac
+ fi
+ fi
+done
+
+?X: Include test function (header, symbol)
+inctest='if $contains $2 $usrinc/$1 >/dev/null 2>&1; then
+ xxx=true;
+elif $contains $2 $usrinc/sys/$1 >/dev/null 2>&1; then
+ xxx=true;
+else
+ xxx=false;
+fi;
+if $xxx; then
+ case "$dflt" in
+ *$2*);;
+ *) dflt="$dflt -D$2";;
+ esac;
+fi'
+
+?X:
+?X: OSF/1 uses __LANGUAGE_C__ instead of LANGUAGE_C
+?X:
+if ./osf1; then
+ set signal.h __LANGUAGE_C__; eval $inctest
+else
+ set signal.h LANGUAGE_C; eval $inctest
+fi
+
+case "$hint" in
+default|recommended) dflt="$dflt $ccflags" ;;
+*) dflt="$ccflags";;
+esac
+
+case "$dflt" in
+''|' ') dflt=none;;
+esac
+$cat <<EOH
+
+Your C compiler may want other flags. For this question you should include
+-I/whatever and -DWHATEVER flags and any other flags used by the C compiler,
+but you should NOT include libraries or ld flags like -lwhatever.
+
+To use no flags, specify the word "none".
+
+EOH
+?X: strip leading space
+set X $dflt
+shift
+dflt=${1+"$@"}
+rp="Any additional cc flags?"
+. ./myread
+case "$ans" in
+none) ccflags='';;
+*) ccflags="$ans";;
+esac
+
+: the following weeds options from ccflags that are of no interest to cpp
+cppflags="$ccflags"
+case "$gccversion" in
+1*) cppflags="$cppflags -D__GNUC__"
+esac
+case "$mips_type" in
+'');;
+*BSD*) cppflags="$cppflags -DSYSTYPE_BSD43";;
+esac
+case "$cppflags" in
+'');;
+*)
+ echo " "
+ echo "Let me guess what the preprocessor flags are..." >&4
+ set X $cppflags
+ shift
+ cppflags=''
+ $cat >cpp.c <<'EOM'
+#define BLURFL foo
+
+BLURFL xx LFRULB
+EOM
+?X:
+?X: For each cc flag, try it out with both cppstdin and cpprun, since the
+?X: first is almost surely a cc wrapper. We have to try both in case
+?X: of cc flags like '-Olimit 2900' that are actually two words...
+?X:
+ previous=''
+ for flag in $*
+ do
+ case "$flag" in
+ -*) ftry="$flag";;
+ *) ftry="$previous $flag";;
+ esac
+ if $cppstdin -DLFRULB=bar $ftry $cppminus <cpp.c \
+ >cpp1.out 2>/dev/null && \
+ $cpprun -DLFRULB=bar $ftry $cpplast <cpp.c \
+ >cpp2.out 2>/dev/null && \
+ $contains 'foo.*xx.*bar' cpp1.out >/dev/null 2>&1 && \
+ $contains 'foo.*xx.*bar' cpp2.out >/dev/null 2>&1
+ then
+ cppflags="$cppflags $ftry"
+ previous=''
+ else
+ previous="$flag"
+ fi
+ done
+ set X $cppflags
+ shift
+ cppflags=${1+"$@"}
+ case "$cppflags" in
+ *-*) echo "They appear to be: $cppflags";;
+ esac
+ $rm -f cpp.c cpp?.out
+ ;;
+esac
+
+: flags used in final linking phase
+case "$ldflags" in
+'') if ./venix; then
+ dflt='-i -z'
+ else
+ dflt=''
+ fi
+ case "$ccflags" in
+ *-posix*) dflt="$dflt -posix" ;;
+ esac
+ ;;
+*) dflt="$ldflags";;
+esac
+
+: Try to guess additional flags to pick up local libraries.
+for thislibdir in $libpth; do
+ case " $loclibpth " in
+ *" $thislibdir "*)
+ case "$dflt " in
+ *"-L$thislibdir "*) ;;
+ *) dflt="$dflt -L$thislibdir" ;;
+ esac
+ ;;
+ esac
+done
+
+case "$dflt" in
+'') dflt='none' ;;
+*) set X $dflt; shift; dflt="$@";;
+esac
+
+$cat <<EOH
+
+Your C linker may need flags. For this question you should
+include -L/whatever and any other flags used by the C linker, but you
+should NOT include libraries like -lwhatever.
+
+Make sure you include the appropriate -L/path flags if your C linker
+does not normally search all of the directories you specified above,
+namely
+ $libpth
+To use no flags, specify the word "none".
+
+EOH
+
+rp="Any additional ld flags (NOT including libraries)?"
+. ./myread
+case "$ans" in
+none) ldflags='';;
+*) ldflags="$ans";;
+esac
+rmlist="$rmlist pdp11"
+
+@if lkflags
+: partial linking may need other flags
+case "$lkflags" in
+'') case "$ldflags" in
+ '') dflt='none';;
+ *) dflt="$ldflags";;
+ esac;;
+*) dflt="$lkflags";;
+esac
+echo " "
+rp="Partial linking flags to be used (NOT including -r)?"
+. ./myread
+case "$ans" in
+none) lkflags='';;
+*) lkflags="$ans";;
+esac
+
+@end
+?X:
+?X: If the user changes compilers after selecting a hint file, it's
+?X: possible that the suggested ccflags/ldflags will be wrong. Try to
+?X: compile and run a simple test program. Let the user see all the
+?X: error messages. -- ADO and RAM
+?X:
+: coherency check
+echo " "
+echo "Checking your choice of C compiler and flags for coherency..." >&4
+?X: Strip extra blanks in case some of the following variables are empty
+set X $cc $optimize $pthread $ccflags $ldflags -o try try.c
+shift
+$cat >try.msg <<EOM
+I've tried to compile and run a simple program with:
+
+ $*
+ ./try
+
+and I got the following output:
+
+EOM
+$cat > try.c <<'EOF'
+int main() { return 0; }
+EOF
+dflt=y
+?X: Use "sh -c" to avoid error messages tagged with leading "Configure:".
+?X: We need to try the resulting executable, because cc might yield a 0 status
+?X: even when ld failed, in which case the executable will not run properly,
+?X: if its x bit is set at all...
+if sh -c "$cc $optimize $ccflags $ldflags -o try try.c" >>try.msg 2>&1; then
+ if sh -c './try' >>try.msg 2>&1; then
+ dflt=n
+ else
+ echo "The program compiled OK, but exited with status $?." >>try.msg
+ rp="You have a problem. Shall I abort Configure"
+ dflt=y
+ fi
+else
+ echo "I can't compile the test program." >>try.msg
+ rp="You have a BIG problem. Shall I abort Configure"
+ dflt=y
+fi
+case "$dflt" in
+y)
+ $cat try.msg >&4
+?X: using -K will prevent default aborting--maybe they're cross compiling?
+ case "$knowitall" in
+ '')
+ echo "(The supplied flags might be incorrect with this C compiler.)"
+ ;;
+ *) dflt=n;;
+ esac
+ echo " "
+ . ./myread
+ case "$ans" in
+ n*|N*) ;;
+ *) echo "Ok. Stopping Configure." >&4
+ exit 1
+ ;;
+ esac
+ ;;
+n) echo "OK, that should do.";;
+esac
+$rm_try
+
diff --git a/mcon/U/cf_email.U b/mcon/U/cf_email.U
new file mode 100644
index 0000000..acc950e
--- /dev/null
+++ b/mcon/U/cf_email.U
@@ -0,0 +1,69 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: cf_email.U,v $
+?RCS: Revision 3.0.1.1 1994/01/24 14:05:06 ram
+?RCS: patch16: created
+?RCS:
+?RCS:
+?MAKE:cf_email: cat cf_by test myhostname mydomain Oldconfig Myread
+?MAKE: -pick add $@ %<
+?S:cf_email:
+?S: Electronic mail address of the person who ran Configure. This can be
+?S: used by units that require the user's e-mail, like MailList.U.
+?S:.
+?T:cont maildomain
+?LINT:extern MAILDOMAIN
+: determine the e-mail address of the user who is running us
+$cat <<EOM
+
+I need to get your e-mail address in Internet format if possible, i.e.
+something like user@host.domain. Please answer accurately since I have
+no easy means to double check it. The default value provided below
+is most probably close to reality but may not be valid from outside
+your organization...
+
+EOM
+cont=x
+while test "$cont"; do
+ case "$MAILDOMAIN" in
+ '')
+ if $test -s /etc/mailname; then
+ maildomain=`$cat /etc/mailname`
+ else
+ maildomain="$myhostname$mydomain"
+ fi
+ ;;
+ *) maildomain="$MAILDOMAIN";;
+ esac
+ case "$cf_email" in
+ '') dflt="$cf_by@$maildomain";;
+ *) dflt="$cf_email";;
+ esac
+ rp='What is your e-mail address?'
+ . ./myread
+ cf_email="$ans"
+ case "$cf_email" in
+ *@*.*) cont='' ;;
+ *)
+ rp='Address does not look like an Internet one. Use it anyway?'
+ case "$fastread" in
+ yes) dflt=y ;;
+ *) dflt=n ;;
+ esac
+ . ./myread
+ case "$ans" in
+ y*) cont='' ;;
+ *) echo " " ;;
+ esac
+ ;;
+ esac
+done
+
diff --git a/mcon/U/cf_name.U b/mcon/U/cf_name.U
new file mode 100644
index 0000000..a711ffd
--- /dev/null
+++ b/mcon/U/cf_name.U
@@ -0,0 +1,72 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Graham Stoney <greyham@research.canon.oz.au>
+?RCS:
+?RCS: $Log: cf_name.U,v $
+?RCS: Revision 3.0.1.2 1994/05/06 14:29:36 ram
+?RCS: patch23: fixed user name computation from /etc/passwd in bsd systems
+?RCS:
+?RCS: Revision 3.0.1.1 1994/01/24 14:05:11 ram
+?RCS: patch16: created
+?RCS:
+?RCS:
+?MAKE:+cf_name: cf_by passcat Filexp nametype cat test
+?MAKE: -pick add $@ %<
+?S:cf_name:
+?S: Full name of the person who ran the Configure script and answered the
+?S: questions. This can be used by units that require the user's full name.
+?S: This variable is for internal use only.
+?S:.
+?T:xxx fn NAME
+: figure out their full name
+case "$NAME" in
+'') case "$nametype" in
+ other)
+ fn=`./filexp ~/.fullname`
+ xxx=usg
+ $test -f $fn && xxx=other
+ ;;
+ *)
+ xxx="$nametype"
+ ;;
+ esac
+
+ case "$xxx" in
+ bsd)
+ cf_name=`$passcat | grep "^$cf_by:" | \
+ sed -e 's/^[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\):.*/\1/' \
+ -e 's/,.*//'`
+ ;;
+ usg)
+ cf_name=`$passcat | grep "^$cf_by:" | \
+ sed -e 's/^[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\):.*/\1/' \
+ -e 's/[^-]*-\(.*\)(.*)/\1/'`
+ ;;
+ *)
+ cf_name=`$cat $fn`
+ ;;
+ esac
+ ;;
+*)
+ cf_name="$NAME"
+ ;;
+esac
+?X:
+?X: In the original unit, Graham asked for the user name, in case the above
+?X: code was unable to figure it out correctly. Since now cf_name has been
+?X: made an internal variable only (i.e. it is not saved in config.sh), letting
+?X: the user override the computed default each time would be a pain.
+?X: Therefore, I have decided to trust the above code to get it right, and for
+?X: those rare cases where it will fail, too bad :-) --RAM.
+?X:
+echo " "
+echo "Pleased to meet you, $cf_name."
+
diff --git a/mcon/U/cf_who.U b/mcon/U/cf_who.U
new file mode 100644
index 0000000..d7492c7
--- /dev/null
+++ b/mcon/U/cf_who.U
@@ -0,0 +1,65 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: cf_who.U,v $
+?RCS: Revision 3.0.1.2 1997/02/28 15:28:50 ram
+?RCS: patch61: new computation method avoiding use of temporary file
+?RCS:
+?RCS: Revision 3.0.1.1 1994/05/06 14:42:34 ram
+?RCS: patch23: login name now computed the hard way
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:05:32 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: Oldconfig dependency is there to ensure computation occurs after old values
+?X: from config.sh have been loaded, so that we can supersede them.
+?X:
+?MAKE:cf_time cf_by: date Oldconfig
+?MAKE: -pick add $@ %<
+?S:cf_time:
+?S: Holds the output of the "date" command when the configuration file was
+?S: produced. This is used to tag both config.sh and config_h.SH.
+?S:.
+?S:cf_by:
+?S: Login name of the person who ran the Configure script and answered the
+?S: questions. This is used to tag both config.sh and config_h.SH.
+?S:.
+?LINT:change LC_ALL LANGUAGE
+: who configured the system
+?X: Ensure English date -- Jarkko Hietaniemi
+cf_time=`LC_ALL=C; LANGUAGE=C; export LC_ALL; export LANGUAGE; $date 2>&1`
+?X:
+?X: Leave a white space between first two '(' for ksh. The sub-shell is needed
+?X: on some machines to avoid the error message when logname is not found; e.g.
+?X: on SUN-OS 3.2, (logname || whoami) would not execute whoami if logname was
+?X: not found. Sigh!
+?X:
+?X: Convex had a broken logname executable which returned a non-zero status,
+?X: and that broke the previous:
+?X: cf_by=`( (logname) 2>/dev/null || whoami) 2>&1`
+?X: Switch to emergency mode... -- RAM, 19/04/94
+?X:
+?X: Parentheses needed to avoid error message if the program does not exist.
+?X: Uses case instead of $test so it can be put before $test is defined.
+?X: Don't redirect to a file because on Ultrix (under script?) logname
+?X: outputs a blank line first. This method will apparently work.
+case "$cf_by" in
+"")
+ cf_by=`(logname) 2>/dev/null`
+ case "$cf_by" in
+ "")
+ cf_by=`(whoami) 2>/dev/null`
+ case "$cf_by" in
+ "") cf_by=unknown ;;
+ esac ;;
+ esac ;;
+esac
+
diff --git a/mcon/U/charorder.U b/mcon/U/charorder.U
new file mode 100644
index 0000000..5c445de
--- /dev/null
+++ b/mcon/U/charorder.U
@@ -0,0 +1,143 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: charorder.U,v $
+?RCS: Revision 3.0.1.1 1994/10/29 16:07:08 ram
+?RCS: patch36: added ?F: line for metalint file checking
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:05:33 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:chorder_int chorder_short chorder_long: Myread cat +cc +ccflags rm
+?MAKE: -pick add $@ %<
+?S:chorder_short (d_cos d_bos):
+?S: Holds the value describing the byte ordering of characters in a short.
+?S: On a Big-Endian machine, that would be "c0c1".
+?S:.
+?S:chorder_int (charoder):
+?S: Holds the value describing the byte ordering of characters in an int.
+?S: For instance, on a Big-Endian machine, this would be: "c0c1c2c3".
+?S:.
+?S:chorder_long (d_col d_bol):
+?S: Holds the value describing the byte ordering of characters in a long.
+?S: On a 64 bits Big-Endian machine, that would yield: "c0c1c2c3c4c5c6c7".
+?S:.
+?C:CHAR_ORDER_SHORT:
+?C: Holds the byte ordering of characters in a short. It's a string
+?C: value like "c0c1" on a Big-Endian machine.
+?C:.
+?C:CHAR_ORDER_INT:
+?C: Holds the byte ordering of characters in an int. It's a string
+?C: value like "c0c1c2c3" on a Big-Endian machine.
+?C:.
+?C:CHAR_ORDER_LONG:
+?C: Holds the byte ordering of characters in a long. It's a string
+?C: value like "c0c1c2c3c4c5c6c7" on a 64 bits Big-Endian machine.
+?C:.
+?H:#define CHAR_ORDER_SHORT "$chorder_short" /* byte order in a short */
+?H:#define CHAR_ORDER_INT "$chorder_int" /* byte order in an int */
+?H:#define CHAR_ORDER_LONG "$chorder_long" /* byte order in a long */
+?H:.
+?F:!byteorder
+: check for character ordering
+echo " "
+echo "Checking out byte order..." >&4
+$cat >byteorder.c <<'EOCP'
+#include <stdio.h>
+
+main(argc, argv)
+ int argc;
+ char *argv[]; {
+ int i;
+ int max;
+ union {
+ short u_s;
+ int u_i;
+ long u_l;
+ char u_c[sizeof(long)];
+ } u;
+ switch (argv[1][0]) {
+ case 'l':
+ u.u_l = 0L;
+ /* HMS: ASSERT: sizeof(long) < 10. */
+ for(i = 0; i < sizeof(long); ++i) {
+ u.u_l *= 0x100L;
+ u.u_l += (0xc0 + i);
+ }
+ max = sizeof(long);
+ break;
+ case 's':
+ u.u_s = 0;
+ /* HMS: ASSERT: sizeof(short) < 10. */
+ for(i = 0; i < sizeof(short); ++i) {
+ u.u_s *= 0x100L;
+ u.u_s += (0xc0 + i);
+ }
+ max = sizeof(short);
+ break;
+ case 'i':
+ u.u_i = 0;
+ /* RAM: ASSERT: sizeof(int) < 10. */
+ for(i = 0; i < sizeof(int); ++i) {
+ u.u_l *= 0x100L;
+ u.u_l += (0xc0 + i);
+ }
+ max = sizeof(int);
+ break;
+ default:
+ max = 0;
+ break;
+ }
+ for(i = 0; i < max; i++) {
+ printf("%x", u.u_c[i] & 0x00FF);
+ }
+ printf("\n");
+ exit(0);
+}
+EOCP
+if $cc $ccflags -o byteorder byteorder.c >/dev/null 2>&1 ; then
+ : null statement
+@if chorder_short
+ chorder_short=`./byteorder s`
+@end
+@if chorder_int
+ chorder_int=`./byteorder i`
+@end
+@if chorder_long
+ chorder_long=`./byteorder l`
+@end
+else
+ $cat <<EOM
+(I can't seem to get my test program to work. Guessing 32 bits big-endian.)
+EOM
+ chorder_short="c0c1"
+ chorder_int="c0c1c2c3"
+ chorder_long="c0c1c2c3"
+fi
+@if chorder_short
+dflt=$chorder_short
+rp='What is the order of characters in a short?'
+. ./myread
+chorder_short="$ans"
+@end
+@if chorder_int
+dflt=$chorder_int
+rp='What is the order of characters in an int?'
+. ./myread
+chorder_int="$ans"
+@end
+@if chorder_long
+dflt=$chorder_long
+rp='What is the order of characters in a long?'
+. ./myread
+chorder_long="$ans"
+@end
+$rm -f byteorder* core
+
diff --git a/mcon/U/charsize.U b/mcon/U/charsize.U
new file mode 100644
index 0000000..ae3cd8b
--- /dev/null
+++ b/mcon/U/charsize.U
@@ -0,0 +1,64 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: charsize.U,v $
+?RCS: Revision 3.0.1.1 1994/10/29 16:07:13 ram
+?RCS: patch36: added ?F: line for metalint file checking
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:05:34 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:charsize: Assert Myread cat rm_try +cc +ccflags echo n c
+?MAKE: -pick add $@ %<
+?S:charsize:
+?S: This variable contains the value of the CHARSIZE symbol, which
+?S: indicates to the C program how many bytes there are in a character.
+?S:.
+?C:CHARSIZE:
+?C: This symbol contains the size of a char, so that the C preprocessor
+?C: can make decisions based on it.
+?C:.
+?H:#define CHARSIZE $charsize
+?H:.
+?T:size s
+: check for length of character
+echo " "
+$echo $n "Checking to see how big your characters are...$c" >&4
+for size in 1 2 4 8 error; do
+ $cat >try.c <<EOCP
+#include "static_assert.h"
+char foo;
+int main()
+{
+ STATIC_ASSERT($size == sizeof(foo));
+ return 0;
+}
+EOCP
+ if $cc -c $ccflags try.c >/dev/null 2>&1; then break; fi
+done
+case "$size" in
+error)
+ echo " cannot compute it." >&4
+ dflt=1
+ rp="What is the size of a character (in bytes)?"
+ . ./myread
+ charsize="$ans"
+ ;;
+*)
+ case "$size" in
+ 1) s='';;
+ *) s='s';;
+ esac
+ echo " $size byte$s." >&4
+ charsize=$size
+ ;;
+esac
+$rm_try
+
diff --git a/mcon/U/contains.U b/mcon/U/contains.U
new file mode 100644
index 0000000..0ac11f5
--- /dev/null
+++ b/mcon/U/contains.U
@@ -0,0 +1,43 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: contains.U,v $
+?RCS: Revision 3.0 1993/08/18 12:05:35 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:contains: Nothing
+?MAKE: -pick add $@ %<
+?S:contains:
+?S: This variable holds the command to do a grep with a proper return
+?S: status. On most sane systems it is simply "grep". On insane systems
+?S: it is a grep followed by a cat followed by a test. This variable
+?S: is primarily for the use of other Configure units.
+?S:.
+: Some greps do not return status, grrr.
+echo "grimblepritz" >grimble
+if grep blurfldyick grimble >/dev/null 2>&1 ; then
+ contains=contains
+elif grep grimblepritz grimble >/dev/null 2>&1 ; then
+ contains=grep
+else
+ contains=contains
+fi
+rm -f grimble
+: the following should work in any shell
+case "$contains" in
+contains*)
+ echo " "
+ echo "AGH! Grep doesn't return a status. Attempting remedial action."
+ cat >contains <<'EOSS'
+grep "$1" "$2" >.greptmp && cat .greptmp && test -s .greptmp
+EOSS
+chmod +x contains
+esac
+
diff --git a/mcon/U/cpp_stuff.U b/mcon/U/cpp_stuff.U
new file mode 100644
index 0000000..3a0715b
--- /dev/null
+++ b/mcon/U/cpp_stuff.U
@@ -0,0 +1,157 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: cpp_stuff.U,v $
+?RCS: Revision 3.0.1.2 1997/02/28 15:30:48 ram
+?RCS: patch61: added cute quoting trick for wild stringify support
+?RCS:
+?RCS: Revision 3.0.1.1 1994/10/29 16:08:24 ram
+?RCS: patch36: now uses cppstdin instead of plain cpp for consistency (ADO)
+?RCS: patch36: remove temporary files when done
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:05:36 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:cpp_stuff cpp_quote: cat contains cppstdin cppflags cppminus rm Warn \
+ package
+?MAKE: -pick add $@ %<
+?S:cpp_stuff:
+?S: This variable contains an identification of the catenation mechanism
+?S: used by the C preprocessor.
+?S:.
+?S:cpp_quote:
+?S: This variable is set to either '"' or '' depending on whether the
+?S: pre-processor pre-dates ANSI or not. It is used in the production of
+?S: the SQuoTe() and EQuoTe() macros, and was introduced to overcome a bug
+?S: in gcc 3.x whereby the pre-processor complained loudly about the
+?S: unterminated strings.
+?S:.
+?C:CAT2:
+?C: This macro catenates 2 tokens together.
+?C:.
+?C:CAT3:
+?C: This macro catenates 3 tokens together.
+?C:.
+?C:CAT4:
+?C: This macro catenates 4 tokens together.
+?C:.
+?C:CAT5:
+?C: This macro catenates 5 tokens together.
+?C:.
+?C:STRINGIFY:
+?C: This macro surrounds its token with double quotes.
+?C:.
+?C:SCAT2:
+?C: This macro catenates 2 tokens together and stringifies the result.
+?C:.
+?C:SCAT3:
+?C: This macro catenates 3 tokens together and stringifies the result.
+?C:.
+?C:SCAT4:
+?C: This macro catenates 4 tokens together and stringifies the result.
+?C:.
+?C:SCAT5:
+?C: This macro catenates 5 tokens together and stringifies the result.
+?C:.
+?H:?%<:#if $cpp_stuff == 1
+?H:?CAT2:#define CAT2(a,b)a/**/b
+?H:?CAT3:#define CAT3(a,b,c)a/**/b/**/c
+?H:?CAT4:#define CAT4(a,b,c,d)a/**/b/**/c/**/d
+?H:?CAT5:#define CAT5(a,b,c,d,e)a/**/b/**/c/**/d/**/e
+?H:?STRINGIFY:#define STRINGIFY(a)"a"
+?H:?%<:#define SQuoTe(a)${cpp_quote}a
+?H:?%<:#define EQuoTe(a)a${cpp_quote}
+?H:?SCAT2:#define SCAT2(a,b)EQuoTe(SQuoTe(a)b)
+?H:?SCAT3:#define SCAT3(a,b,c)EQuoTe(SQuoTe(a)b/**/c)
+?H:?SCAT4:#define SCAT4(a,b,c,d)EQuoTe(SQuoTe(a)b/**/c/**/d)
+?H:?SCAT5:#define SCAT5(a,b,c,d,e)EQuoTe(SQuoTe(a)b/**/c/**/d/**/e)
+?H:?%<:#endif
+?H:?%<:#if $cpp_stuff == 42
+?X: The additional level of indirection enables these macros to be
+?X: used as arguments to other macros. See K&R 2nd ed., page 231.
+?H:?%<:#define CaTiFy(a,b) a ## b
+?H:?%<:#define CAT2(a,b) CaTiFy(a,b)
+?H:?CAT3:#define CAT3(a,b,c) CAT2(CaTiFy(a,b),c)
+?H:?CAT4:#define CAT4(a,b,c,d) CAT2(CaTiFy(a,b), CaTiFy(c,d))
+?H:?CAT5:#define CAT5(a,b,c,d,e) CAT2(CAT2(CaTiFy(a,b), CaTiFy(c,d)), e)
+?H:?%<:#define StGiFy(a)# a
+?H:?STRINGIFY:#define STRINGIFY(a)StGiFy(a)
+?H:?SCAT2:#define SCAT2(a,b)StGiFy(a) StGiFy(b)
+?H:?SCAT3:#define SCAT3(a,b,c)StGiFy(a) StGiFy(b) StGiFy(c)
+?H:?SCAT4:#define SCAT4(a,b,c,d)StGiFy(a) StGiFy(b) StGiFy(c) StGiFy(d)
+?H:?SCAT5:#define SCAT5(a,b,c,d,e)StGiFy(a) StGiFy(b) StGiFy(c) StGiFy(d) StGiFy(e)
+?H:?%<:#endif
+?H:?%<:#if $cpp_stuff != 1 && $cpp_stuff != 42
+?H:?%<:#include "Bletch: How does this C preprocessor catenate tokens?"
+?H:?%<:#endif
+?H:.
+?W:%<:CAT2 CAT3 CAT4 CAT5 STRINGIFY SCAT2 SCAT3 SCAT4 SCAT5
+?F:!cpp_stuff.c
+?LINT:known StGiFy EQuoTe SQuoTe CaTiFy
+: how do we catenate cpp tokens here?
+echo " "
+echo "Checking to see how your cpp does stuff like catenate tokens..." >&4
+cpp_quote=''
+$cat >cpp_stuff.c <<'EOCP'
+#define RCAT(a,b)a/**/b
+#define ACAT(a,b)a ## b
+RCAT(Rei,ser)
+ACAT(Cir,cus)
+EOCP
+$cppstdin $cppflags $cppminus <cpp_stuff.c >cpp_stuff.out 2>&1
+if $contains 'Circus' cpp_stuff.out >/dev/null 2>&1; then
+ echo "Oh! Smells like ANSI's been here."
+ echo "We can catify or stringify, separately or together!"
+ cpp_stuff=42
+elif $contains 'Reiser' cpp_stuff.out >/dev/null 2>&1; then
+ echo "Ah, yes! The good old days!"
+ cpp_stuff=1
+ $cat >cpp_stuff.c <<'EOCP'
+#define SQuoTe(a)"a
+#define EQuoTe(a)a"
+#define CAT2(a,b)EQuoTe(SQuoTe(a)b)
+CAT2(Vic,tory)
+EOCP
+ $cppstdin $cppflags $cppminus <cpp_stuff.c >cpp_stuff.out 2>&1
+ if $contains '"Victory"' cpp_stuff.out >/dev/null 2>&1; then
+ echo "I'll resort to a cute trick to also be able to stringify."
+ cpp_quote='"'
+ else
+ $cat <<EOM
+However, in the good old days we don't know how to stringify and
+catify at the same time...
+@if SCAT2 || SCAT3 || SCAT4 || SCAT5
+You might have to edit the values of the SCAT[2-5] macros in config.h...
+@else
+Hopefully, $package does not need this feature.
+@end
+EOM
+ fi
+else
+ ./warn 4>&4 <<EOM
+I can't seem to be able to catenate tokens with your cpp.
+@if CAT2 || CAT3 || CAT4 || CAT5 || SCAT2 || SCAT3 || SCAT4 || SCAT5
+You're going to have to edit the values of the following
+macros in config.h:
+
+@if CAT2 || CAT3 || CAT4 || CAT5
+ CAT[2-5]
+@end
+@if SCAT2 || SCAT3 || SCAT4 || SCAT5
+ SCAT[2-5]
+@end
+
+in order to let me compile.
+@end
+EOM
+ cpp_stuff="/* Help! How do we handle cpp_stuff? */*/"
+fi
+$rm -f cpp_stuff.*
+
diff --git a/mcon/U/cpp_trad.U b/mcon/U/cpp_trad.U
new file mode 100644
index 0000000..3f86047
--- /dev/null
+++ b/mcon/U/cpp_trad.U
@@ -0,0 +1,41 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: cpp_stuff.U,v $
+?MAKE:cpp_trad: cpp cat contains rm
+?MAKE: -pick add $@ %<
+?S:cpp_trad:
+?S: This variable contains the program to run to get traditional C
+?S: preprocessor semantics and not ISO C semantics: we want something
+?S: that knows as little about C as possible to use as a more general
+?S: purpose preprocessor.
+?S:.
+?F:!foo.c !foo.cpp
+: how do we get traditional cpp semantics?
+echo " "
+echo "Checking to see how to get traditional cpp semantics..." >&4
+$cat >foo.c <<'EOF'
+#define A(x) x
+#define B(y) y
+A(a)B(b)
+EOF
+if $cpp foo.c >foo.cpp; $contains ab foo.cpp >/dev/null 2>&1; then
+ echo "Plain '$cpp' works just fine."
+ cpp_trad="$cpp"
+elif $cpp -traditional foo.c >foo.cpp; \
+ $contains ab foo.cpp >/dev/null 2>&1; then
+ echo "We'll use '$cpp -traditional' to get proper semantics."
+ cpp_trad="$cpp -traditional"
+else
+ echo "I don't know how to get traditional semantics with '$cpp'." >&4
+ cpp_trad="$cpp"
+fi
+$rm -f foo.c foo.cpp
+
diff --git a/mcon/U/cppfilecom.U b/mcon/U/cppfilecom.U
new file mode 100644
index 0000000..3216080
--- /dev/null
+++ b/mcon/U/cppfilecom.U
@@ -0,0 +1,204 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Orginal Author: Graham Stoney <greyham@research.canon.oz.au>
+?RCS:
+?RCS: $Log: cppfilecom.U,v $
+?RCS: Revision 3.0 1993/08/18 12:05:37 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:cppfilecom cppstdinflags d_cppignhdrs d_cppcanstdin: \
+ contains package test Myread Oldconfig Loc Setvar cpp cc cat rm
+?MAKE: -pick add $@ %<
+?S:cppfilecom:
+?S: This variable contains the first part of the string which will invoke
+?S: the C preprocessor a file and produce to standard output, preserving
+?S: comments. Typical value of "cc -E -C" or "/lib/cpp -C".
+?S:.
+?S:cppstdinflags:
+?S: This variable contains any flags necessary to get cppfilecom to read
+?S: from the standard input.
+?S:.
+?S:d_cppignhdrs:
+?S: This symbol conditionally defines CPP_IGN_HDRS if CPP_FILE_COM ignores
+?S: *.h files.
+?S:.
+?S:d_cppcanstdin:
+?S: This symbol conditionally defines CPP_CAN_STDIN if CPP_FILE_COM can
+?S: read standard input directly.
+?S:.
+?C:CPP_FILE_COM (CPPFILECOM):
+?C: This symbol contains the first part of the string which will invoke
+?C: the C preprocessor a file and produce to standard output, preserving
+?C: comments. Typical value of "cc -E -C" or "/lib/cpp -C".
+?C:.
+?C:CPP_STDIN_FLAGS (CPPSTDINFLAGS):
+?C: This variable contains any flags necessary to get CPP_FILE_COM to
+?C: read from the standard input.
+?C:.
+?C:CPP_IGN_HDRS (CPPIGNHDRS):
+?C: This symbol is defined if CPP_FILE_COM ignores *.h files.
+?C:.
+?C:CPP_CAN_STDIN (CPPCANSTDIN):
+?C: This symbol is defined if CPP_FILE_COM can read standard input
+?C: directly.
+?C:.
+?H:#define CPP_FILE_COM "$cppfilecom"
+?H:#define CPP_STDIN_FLAGS "$cppstdinflags"
+?H:#$d_cppignhdrs CPP_IGN_HDRS /* does CPP ignore .h files? */
+?H:#$d_cppcanstdin CPP_CAN_STDIN /* can CPP read stdin directly? */
+?H:.
+?T:cont
+?F:!testcpp.c !testcpp.h !testcpp.out
+?LINT:set d_cppcanstdin d_cppignhdrs
+?LINT:usefile testcpp.c testcpp.out
+: see how we invoke the C preprocessor
+$cat <<EOM
+
+$package needs to be able to preprocess its input files in a mode which
+preserves comments, which is often not the default behaviour. It should run
+the C preprocessor you will use when compiling your own source code, which
+should be ISO/ANSI C compliant if you want $package to handle the latest
+standard C. I will try to guess, but I might guess wrongly because it is not
+necessarily the same preprocessor used to build $package.
+
+EOM
+$cat <<'EOT' >testcpp.c
+#define ABC abc
+#define XYZ xyz
+ABC.XYZ
+/* comment */
+EOT
+:
+if $test "X$cppfilecom" != "X" && \
+ $cppfilecom testcpp.c </dev/null >testcpp.out 2>/dev/null && \
+ $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 && \
+ $contains comment testcpp.out >/dev/null 2>&1
+then
+ echo "You used to use $cppfilecom so we'll use that again."
+elif echo 'Maybe "'$cc' -E -C" will work...' && \
+ $cc -E -C testcpp.c </dev/null >testcpp.out 2>/dev/null && \
+ $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 && \
+ $contains comment testcpp.out >/dev/null 2>&1
+then
+ echo "It works!"
+ cppfilecom="$cc -E -C"
+elif echo 'Nope...maybe "'"$cc"' -P -C" will work...' && \
+ $cc -P -C testcpp.c </dev/null >testcpp.out 2>/dev/null && \
+ $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 && \
+ $contains comment testcpp.out >/dev/null 2>&1
+then
+ echo "Yup, that does."
+ cppfilecom="$cc -P -C"
+elif echo 'No such luck, maybe "'"$cpp"' -C" will work...' && \
+ $cpp -C testcpp.c </dev/null >testcpp.out 2>/dev/null && \
+ $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 && \
+ $contains comment testcpp.out >/dev/null 2>&1
+then
+ echo "Yup, it does."
+ cppfilecom="$cpp -C"
+else
+ cppfilecom=''
+ $cat <<'EOM'
+I can't find a C preprocessor that will preserve comments. Please name one.
+EOM
+fi
+:
+dflt="$cppfilecom"
+cont=true
+while $test "$cont" ; do
+ echo " "
+ rp="How should $package run your preprocessor preserving comments?"
+ . ./myread
+ cppfilecom="$ans"
+ $cppfilecom testcpp.c >testcpp.out 2>&1
+ if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 && \
+ $contains comment testcpp.out >/dev/null 2>&1
+ then
+ echo "OK, that will do."
+ cont=''
+ else
+ echo "Sorry, I can't get that to work."
+ fi
+done
+
+@if CPP_IGN_HDRS || d_cppignhdrs
+: Now see if it ignores header files.
+cp testcpp.c testcpp.h
+$cppfilecom testcpp.h >testcpp.out 2>&1
+if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 && \
+ $contains comment testcpp.out >/dev/null 2>&1
+then
+ echo "Terrific; it processes .h files passed on the command line too."
+ val="$undef"
+else
+ echo "It ignores .h files on the command line; pity."
+ val="$define"
+fi
+set d_cppignhdrs
+eval $setvar
+
+@end
+@if CPP_STDIN_FLAGS || CPP_CAN_STDIN || cppstdinflags || d_cppcanstdin
+: Now see how to send stdin to it.
+echo " "
+cp testcpp.c testcpp.h
+$cppfilecom <testcpp.h >testcpp.out 2>&1
+if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 && \
+ $contains comment testcpp.out >/dev/null 2>&1
+then
+ echo "Great; and it will read stdin if passed no arguments."
+ val="$define"
+ cppstdinflags=''
+else
+ $cppfilecom - <testcpp.h >testcpp.out 2>&1
+ if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 && \
+ $contains comment testcpp.out >/dev/null 2>&1
+ then
+ echo "Great; and it can read stdin by passing it '-'."
+ val="$define"
+ cppstdinflags='-'
+ else
+ $cat <<FOO
+Unfortunately, I can't find an easy way to get that preprocessor to read from
+standard input. Do you know any flags I can pass it to get it to do so?
+If that preprocessor can't read directly form standard input, answer 'none'.
+
+FOO
+ val='dunno'
+ while $test "$val" = "dunno"; do
+ rp='Flags to get preprocessor to read stdin?'
+ dflt='none'
+ . ./myread
+ if $test $ans = 'none'; then
+ echo "Oh well, if $package wants it done, it will do it for itself."
+ val="$undef"
+ else
+ $cppfilecom $ans <testcpp.h >testcpp.out 2>&1
+ if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 && \
+ $contains comment testcpp.out >/dev/null 2>&1
+ then
+ echo "Good; that works fine."
+ val="$define"
+ cppstdinflags="$ans"
+ else
+ echo "Sorry, I couldn't get that to work."
+ fi
+ fi
+ done
+ fi
+fi
+set d_cppcanstdin
+eval $setvar
+
+@end
+: cleanup cpp test files anyway
+$rm -f testcpp.*
+
diff --git a/mcon/U/cppstdin.U b/mcon/U/cppstdin.U
new file mode 100644
index 0000000..822493d
--- /dev/null
+++ b/mcon/U/cppstdin.U
@@ -0,0 +1,249 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: cppstdin.U,v $
+?RCS: Revision 3.0.1.4 1994/10/29 16:08:34 ram
+?RCS: patch36: added ?F: line for metalint file checking
+?RCS:
+?RCS: Revision 3.0.1.3 1994/01/24 14:05:38 ram
+?RCS: patch16: comment for CPPLAST was missing
+?RCS:
+?RCS: Revision 3.0.1.2 1993/12/15 08:18:58 ram
+?RCS: patch15: new variables cpprun and cpplast, guaranteed wrapper-free
+?RCS: patch15: cppstdin now tries to use cc, even at the cost of a wrapper
+?RCS:
+?RCS: Revision 3.0.1.1 1993/08/25 14:00:53 ram
+?RCS: patch6: remove wrapper when not actually used
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:05:38 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:cppstdin cppminus cpprun cpplast: contains test Myread Oldconfig Loc \
+ cpp +cc rm hint osname gccversion startsh eunicefix
+?MAKE: -pick add $@ %<
+?S:cppstdin:
+?S: This variable contains the command which will invoke the C
+?S: preprocessor on standard input and put the output to stdout.
+?S: It is primarily used by other Configure units that ask about
+?S: preprocessor symbols.
+?S:.
+?S:cppminus:
+?S: This variable contains the second part of the string which will invoke
+?S: the C preprocessor on the standard input and produce to standard
+?S: output. This variable will have the value "-" if cppstdin needs
+?S: a minus to specify standard input, otherwise the value is "".
+?S:.
+?S:cpprun:
+?S: This variable contains the command which will invoke a C preprocessor
+?S: on standard input and put the output to stdout. It is guaranteed not
+?S: to be a wrapper and may be a null string if no preprocessor can be
+?S: made directly available. This preprocessor might be different from the
+?S: one used by the C compiler. Don't forget to append cpplast after the
+?S: preprocessor options.
+?S:.
+?S:cpplast:
+?S: This variable has the same functionality as cppminus, only it applies to
+?S: cpprun and not cppstdin.
+?S:.
+?C:CPPSTDIN:
+?C: This symbol contains the first part of the string which will invoke
+?C: the C preprocessor on the standard input and produce to standard
+?C: output. Typical value of "cc -E" or "/lib/cpp", but it can also
+?C: call a wrapper. See CPPRUN.
+?C:.
+?C:CPPMINUS:
+?C: This symbol contains the second part of the string which will invoke
+?C: the C preprocessor on the standard input and produce to standard
+?C: output. This symbol will have the value "-" if CPPSTDIN needs a minus
+?C: to specify standard input, otherwise the value is "".
+?C:.
+?C:CPPRUN:
+?C: This symbol contains the string which will invoke a C preprocessor on
+?C: the standard input and produce to standard output. It needs to end
+?C: with CPPLAST, after all other preprocessor flags have been specified.
+?C: The main difference with CPPSTDIN is that this program will never be a
+?C: pointer to a shell wrapper, i.e. it will be empty if no preprocessor is
+?C: available directly to the user. Note that it may well be different from
+?C: the preprocessor used to compile the C program.
+?C:.
+?C:CPPLAST:
+?C: This symbol is intended to be used along with CPPRUN in the same manner
+?C: symbol CPPMINUS is used with CPPSTDIN. It contains either "-" or "".
+?C:.
+?H:#define CPPSTDIN "$cppstdin"
+?H:#define CPPMINUS "$cppminus"
+?H:#define CPPRUN "$cpprun"
+?H:#define CPPLAST "$cpplast"
+?H:.
+?F:cppstdin !testcpp.out !testcpp.c
+?T:wrapper x_cpp x_minus ok
+: see how we invoke the C preprocessor
+echo " "
+echo "Now, how can we feed standard input to your C preprocessor..." >&4
+cat <<'EOT' >testcpp.c
+#define ABC abc
+#define XYZ xyz
+ABC.XYZ
+EOT
+cd ..
+if $test ! -f cppstdin; then
+ echo "$startsh" >cppstdin
+if $test "X$osname" = "Xaix" -a "X$gccversion" = X; then
+?X: AIX cc -E doesn't show the absolute headerfile
+?X: locations but we'll cheat by using the -M flag.
+ echo 'cat >.$$.c; rm -f .$$.u; '"$cc"' ${1+"$@"} -M -c .$$.c 2>/dev/null; \
+ test -s .$$.u && \
+ awk '"'"'$2 ~ /\.h$/ { print "# 0 \""$2"\"" }'"'"' .$$.u; \
+ rm -f .$$.o .$$.u; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' >> cppstdin
+else
+ echo 'cat >.$$.c; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' >>cppstdin
+fi; else
+ echo "Keeping your $hint cppstdin wrapper."
+fi
+chmod 755 cppstdin
+$eunicefix cppstdin
+wrapper=`pwd`/cppstdin
+ok='false'
+cd UU
+
+?X:
+?X: We'll run the cpp tests again if we don't have any valid C preprocessor
+?X: yet or don't know how to proceed without a wrapper (in which case cpprun
+?X: is empty and that's really annoying...)
+?X:
+if $test "X$cppstdin" != "X" && \
+ $cppstdin $cppminus <testcpp.c >testcpp.out 2>&1 && \
+ $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
+then
+ echo "You used to use $cppstdin $cppminus so we'll use that again."
+ case "$cpprun" in
+ '') echo "But let's see if we can live without a wrapper..." ;;
+ *)
+ if $cpprun $cpplast <testcpp.c >testcpp.out 2>&1 && \
+ $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
+ then
+ echo "(And we'll use $cpprun $cpplast to preprocess directly.)"
+ ok='true'
+ else
+ echo "(However, $cpprun $cpplast does not work, let's see...)"
+ fi
+ ;;
+ esac
+else
+ case "$cppstdin" in
+ '') ;;
+ *)
+ echo "Good old $cppstdin $cppminus does not seem to be of any help..."
+ ;;
+ esac
+fi
+
+if $ok; then
+ : nothing
+elif echo 'Maybe "'"$cc"' -E" will work...'; \
+ $cc -E <testcpp.c >testcpp.out 2>&1; \
+ $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
+ echo "Yup, it does."
+ x_cpp="$cc -E"
+ x_minus='';
+elif echo 'Nope...maybe "'"$cc"' -E -" will work...'; \
+ $cc -E - <testcpp.c >testcpp.out 2>&1; \
+ $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
+ echo "Yup, it does."
+ x_cpp="$cc -E"
+ x_minus='-';
+elif echo 'Nope...maybe "'"$cc"' -P" will work...'; \
+ $cc -P <testcpp.c >testcpp.out 2>&1; \
+ $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
+ echo "Yipee, that works!"
+ x_cpp="$cc -P"
+ x_minus='';
+elif echo 'Nope...maybe "'"$cc"' -P -" will work...'; \
+ $cc -P - <testcpp.c >testcpp.out 2>&1; \
+ $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
+ echo "At long last!"
+ x_cpp="$cc -P"
+ x_minus='-';
+elif echo 'No such luck, maybe "'$cpp'" will work...'; \
+ $cpp <testcpp.c >testcpp.out 2>&1; \
+ $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
+ echo "It works!"
+ x_cpp="$cpp"
+ x_minus='';
+elif echo 'Nixed again...maybe "'$cpp' -" will work...'; \
+ $cpp - <testcpp.c >testcpp.out 2>&1; \
+ $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
+ echo "Hooray, it works! I was beginning to wonder."
+ x_cpp="$cpp"
+ x_minus='-';
+elif echo 'Uh-uh. Time to get fancy. Trying a wrapper...'; \
+ $wrapper <testcpp.c >testcpp.out 2>&1; \
+ $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
+ x_cpp="$wrapper"
+ x_minus=''
+ echo "Eureka!"
+else
+ dflt=''
+ rp="No dice. I can't find a C preprocessor. Name one:"
+ . ./myread
+ x_cpp="$ans"
+ x_minus=''
+ $x_cpp <testcpp.c >testcpp.out 2>&1
+ if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
+ echo "OK, that will do." >&4
+ else
+echo "Sorry, I can't get that to work. Go find one and rerun Configure." >&4
+ exit 1
+ fi
+fi
+
+case "$ok" in
+false)
+ cppstdin="$x_cpp"
+ cppminus="$x_minus"
+ cpprun="$x_cpp"
+ cpplast="$x_minus"
+?X:
+?X: If /lib/cpp is used, try using a wrapper to increase our chances to have
+?X: the C compiler and our $cppstdin agree on the same symbols... However,
+?X: since cpprun is guaranteed not to be a wrapper, we must clear it if the
+?X: only preprocessor we found was a wrapper, with all our luck...
+?X:
+ set X $x_cpp
+ shift
+ case "$1" in
+ "$cpp")
+ echo "Perhaps can we force $cc -E using a wrapper..."
+ if $wrapper <testcpp.c >testcpp.out 2>&1; \
+ $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
+ then
+ echo "Yup, we can."
+ cppstdin="$wrapper"
+ cppminus='';
+ else
+ echo "Nope, we'll have to live without it..."
+ fi
+ ;;
+ esac
+ case "$cpprun" in
+ "$wrapper")
+ cpprun=''
+ cpplast=''
+ ;;
+ esac
+ ;;
+esac
+
+case "$cppstdin" in
+"$wrapper"|'cppstdin') ;;
+*) $rm -f $wrapper;;
+esac
+$rm -f testcpp.c testcpp.out
+
diff --git a/mcon/U/d_NOFILE.U b/mcon/U/d_NOFILE.U
new file mode 100644
index 0000000..d602b51
--- /dev/null
+++ b/mcon/U/d_NOFILE.U
@@ -0,0 +1,189 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_NOFILE.U,v $
+?RCS: Revision 3.0.1.1 1994/10/29 16:08:38 ram
+?RCS: patch36: added ?F: line for metalint file checking
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:05:39 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:nofile d_gettblsz tablesize: Myread Guess cat +cc +ccflags +libs \
+ test rm Csym
+?MAKE: -pick add $@ %<
+?S:nofile:
+?S: This variable contains the number of file descriptors available to the
+?S: process.
+?S:.
+?S:d_gettblsz:
+?S: This variable conditionally handles remapping of the getdtablesize()
+?S: subroutine to ulimit(4,0), or the NOFILE manifest constant.
+?S:.
+?S:tablesize:
+?S: This variable contains either the 'NOFILE' constant or 'ulimit(4, 0L)'
+?S: and is used as the remapped value for the getdtablesize() macro.
+?S:.
+?C:getdtablesize:
+?C: This catches use of the getdtablesize() subroutine, and remaps it
+?C: to either ulimit(4,0) or NOFILE, if getdtablesize() isn't available.
+?C:.
+?C:VAL_NOFILE:
+?C: This symbol contains the number of file descriptors available to the
+?C: process, as determined at configuration time. Unless a static constant
+?C: is needed, you should rely on getdtablesize() to obtain that number.
+?C:.
+?H:#$d_gettblsz getdtablesize() $tablesize /**/
+?H:#define VAL_NOFILE $nofile /* Number of file descriptors */
+?H:.
+?F:!nofile
+?T:d_ulimit4 val
+: see if getdtablesize exists
+echo " "
+?X: Revert logical value (d_gettblsz is undef iff getdtablesize is present)
+case "$d_gettblsz" in
+$define) d_gettblsz="$undef";;
+$undef) d_gettblsz="$define";;
+esac
+if set getdtablesize val -f d_gettblsz; eval $csym; $val; then
+ echo 'getdtablesize() found.' >&4
+ d_gettblsz="$undef"
+ tablesize=''
+@if VAL_NOFILE || nofile
+ $cat >nofile.c <<'EOCP'
+#include <stdio.h>
+int main()
+{
+ printf("%d\n", getdtablesize());
+}
+EOCP
+ nofile=''
+ if $cc $ccflags -o nofile nofile.c $libs >/dev/null 2>&1; then
+ nofile=`./nofile 2>/dev/null`
+ fi
+ if $test "$nofile"; then
+ echo "(You have $nofile file descriptors available per process.)"
+ else
+ nofile='20'
+ if ./bsd; then
+ nofile='64'
+ fi
+ echo "(Hmm... Let's say you have $nofile file descriptors available.)"
+ fi
+@end
+else
+ echo 'getdtablesize() NOT found...' >&4
+ if set ulimit val -f; eval $csym; $val; then
+ echo 'Maybe ulimit(4,0) will work...'
+ $cat >nofile.c <<'EOCP'
+#include <stdio.h>
+#ifdef GETPARAM_H
+#include <sys/param.h>
+#endif
+int main()
+{
+ printf("%d %d\n",
+#ifdef NOFILE
+ NOFILE,
+#else
+ 0,
+#endif
+ ulimit(4,0));
+ exit(0);
+}
+EOCP
+ if $cc $ccflags -DGETPARAM_H -o nofile nofile.c $libs >/dev/null 2>&1 \
+ || $cc $ccflags -o nofile nofile.c $libs >/dev/null 2>&1 ; then
+ set `./nofile`
+ d_gettblsz=$1
+ d_ulimit4=$2
+ if $test "$d_ulimit4" -lt 0; then
+ echo "Your ulimit() call doesn't tell me what I want to know."
+ echo "We'll just use NOFILE in this case."
+ nofile=$d_gettblsz
+ d_gettblsz="$define"
+ tablesize='NOFILE'
+ else
+ if $test "$d_gettblsz" -gt 0; then
+ echo "Your system defines NOFILE to be $d_gettblsz, and" >&4
+ else
+ echo "I had trouble getting NOFILE from your system, but" >&4
+ fi
+echo "ulimit returns $d_ulimit4 as the number of available file descriptors." >&4
+ dflt='y';
+ echo " "
+ rp='Should I use ulimit to get the number of available file descriptors?'
+ . ./myread
+ case "$ans" in
+ y*)
+ nofile=$d_ulimit4
+ d_gettblsz="$define"
+ tablesize='ulimit(4, 0L)'
+ echo "Using ulimit(4,0)."
+ ;;
+ *)
+ nofile=$d_gettblsz
+ d_gettblsz="$define"
+ tablesize='NOFILE'
+ echo "Using NOFILE."
+ ;;
+ esac
+ fi
+ else
+ echo "Strange, I couldn't get my test program to compile."
+ echo "We'll just use NOFILE in this case."
+ d_gettblsz="$define"
+ tablesize='NOFILE'
+ nofile=''
+ fi
+ else
+ echo 'Using NOFILE instead.'
+ d_gettblsz="$define"
+ tablesize='NOFILE'
+ nofile=''
+ fi
+fi
+@if VAL_NOFILE || nofile
+case "$nofile" in
+'')
+ $cat >nofile.c <<'EOCP'
+#include <stdio.h>
+#ifdef GETPARAM_H
+#include <sys/param.h>
+#endif
+int main()
+{
+ printf("%d\n",
+#ifdef NOFILE
+ NOFILE,
+#else
+ 0,
+#endif
+ );
+ exit(0);
+}
+EOCP
+ if $cc $ccflags -DGETPARAM_H -o nofile nofile.c $libs >/dev/null 2>&1 \
+ || $cc $ccflags -o nofile nofile.c $libs >/dev/null 2>&1 ; then
+ nofile=`./nofile 2>/dev/null`
+ fi
+ if $test "$nofile"; then
+ echo "(You have $nofile file descriptors available per process.)"
+ else
+ nofile='20'
+ if ./bsd; then
+ nofile='64'
+ fi
+ echo "(Hmm... Let's say you have $nofile file descriptors available.)"
+ fi
+ ;;
+esac
+@end
+$rm -f nofile*
+
diff --git a/mcon/U/d_NeWS.U b/mcon/U/d_NeWS.U
new file mode 100644
index 0000000..d951cdb
--- /dev/null
+++ b/mcon/U/d_NeWS.U
@@ -0,0 +1,102 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_NeWS.U,v $
+?RCS: Revision 3.0 1993/08/18 12:05:39 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_news d_news0 d_newshome d_textcan: test rm Myread Getfile
+?MAKE: -pick add $@ %<
+?S:d_news:
+?S: Set if running NeWS 1.1
+?S:.
+?S:d_news0:
+?S: Set if running NeWS 1.0
+?S:.
+?S:d_newshome:
+?S: Path to the top directory of the NeWS structure.
+?S:.
+?S:d_textcan:
+?S: Path to where the textcan.ps stuff is...
+?S:.
+?C:HAS_NEWS1_1 (NEWS1_1):
+?C: This symbol defined if running NeWS 1.1.
+?C:.
+?C:HAS_NEWS1_0 (NEWS1_0):
+?C: This symbol defined if running NeWS 1.0.
+?C:.
+?C:TEXTCAN:
+?C: Tells path to where the textcan.ps stuff is...
+?C:.
+?H:#$d_news HAS_NEWS1_1 /**/
+?H:#$d_news0 HAS_NEWS1_0 /**/
+?H:#define TEXTCAN $d_textcan /**/
+?H:.
+?INIT:: default path for NeWS
+?INIT:d_newshome="/usr/NeWS"
+?INIT:
+: Check to see what version of NeWS is being run?
+cd ..
+echo " "
+echo "Now for the interesting stuff... Lets see what kind of NeWS"
+echo "they grow round here...."
+echo " "
+dflt='y'
+if $test -d $d_newshome; then
+ d_newshome=`(cd $d_newshome ; /bin/pwd)`
+ echo "Ah...found myself a NeWS in $d_newshome..."
+ dflt='y'
+ rp="Is this the NeWS you want your children to grow up with?"
+ . UU/myread
+fi
+while $test $ans = "n"; do
+dflt=$d_newshome
+fn=d
+rp="Path to NeWS you want:"
+. UU/getfile
+d_newshome=$ans
+done
+
+echo " "
+if $test ! -d $d_newshome/lib; then
+ echo "ARG! No lib directory in $d_newshome!!!"
+ : heavy medicine. I wonder what the disease is...
+ $rm -f kit*isdone
+ $rm -rf UU
+ : bye bye
+ set -t; echo "Sorry... no NeWS is bad news..."
+fi
+
+if $test -r $d_newshome/lib/NeWS/colors.ps ; then
+ echo 'Ahh... your running NeWS 1.1! Boy... that makes stuff easy....'
+ echo " "
+ d_news="$define"
+ d_news0="$undef"
+ if $test -r $d_newshome/lib/NeWS/textcan.ps; then
+ d_textcan=$d_newshome/lib/NeWS
+ echo "The textcan.ps stuff seems to be in : $d_textcan"
+ else
+ d_textcan=$d_newshome/clientsrc/client/nterm
+ if $test ! -r $d_textcan/textcan.ps; then
+ d_news="$undef"
+ d_news0="$define"
+ echo 'Hmm... must have been fooled... gotta be NeWS 1.1 beta!'
+ else
+ echo "The textcan.ps stuff seems to be in : $d_textcan"
+ fi
+ fi
+else
+ echo 'snif... snif... I smell the dilapidated smell of NeWS 1.0..'
+ echo 'Some things will not work under NeWS 1.0...'
+ d_news="$undef"
+ d_news0="$define"
+fi
+cd UU
+
diff --git a/mcon/U/d_PORTAR.U b/mcon/U/d_PORTAR.U
new file mode 100644
index 0000000..01ac6d1
--- /dev/null
+++ b/mcon/U/d_PORTAR.U
@@ -0,0 +1,79 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_PORTAR.U,v $
+?RCS: Revision 3.0.1.1 1994/10/29 16:08:42 ram
+?RCS: patch36: added ?F: line for metalint file checking
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:05:40 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_PORTAR: cat +cc rm Setvar
+?MAKE: -pick add $@ %<
+?S:d_PORTAR:
+?S: This variable conditionally handles definition of PORTAR,
+?S: a creation of greater minds than I can imagine.
+?S:.
+?C:PORTAR:
+?C: This manifest constant must be defined to 1 for some implementations
+?C: of ar.h to get the portable ar most everybody uses.
+?C:.
+?L:ar_fmag:
+?L:ARFMAG:
+?L:SARMAG:
+?H:#$d_PORTAR PORTAR 1 /**/
+?H:.
+?F:!portar
+?LINT:set d_PORTAR
+: see if we need to define PORTAR
+echo " "
+echo 'Checking to see if we need to define PORTAR for portable archives...' >&4
+$cat >portar.c <<'EOCP'
+#include <ar.h>
+int main() {
+ char *arfmag = ARFMAG;
+ int sarmag = SARMAG;
+ struct ar_hdr arh;
+
+ strncpy(arh.ar_fmag, arfmag, 2);
+
+#ifdef PORTAR
+ printf("D\n");
+#else
+ printf("U\n");
+#endif
+ exit(0);}
+EOCP
+if $cc -o portar portar.c >/dev/null 2>&1 || \
+ $cc -DPORTAR=1 -o portar portar.c >/dev/null 2>&1 ; then
+ case "`./portar`" in
+ D)
+ val="$define"
+ echo "We'll be defining PORTAR for you."
+ ;;
+ U)
+ val="$undef"
+ echo "We don't seem to need PORTAR defined here."
+ ;;
+ *)
+ val="$define"
+ echo "(My test program gave me an unexpected value!)"
+ echo "I'll just define PORTAR to be sure."
+ ;;
+ esac
+else
+ echo "(Strange, I couldn't get my test program to compile.)"
+ echo "We'll just define PORTAR in this case."
+ val="$define"
+fi
+set d_PORTAR
+eval $setvar
+$rm -f portar*
+
diff --git a/mcon/U/d_SHM_MAC.U b/mcon/U/d_SHM_MAC.U
new file mode 100644
index 0000000..de4433e
--- /dev/null
+++ b/mcon/U/d_SHM_MAC.U
@@ -0,0 +1,141 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_SHM_MAC.U,v $
+?RCS: Revision 3.0 1993/08/18 12:05:41 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_SHM_MAC d_SHM_PRM d_SHM_SEG d_SHM_IMMU: cat d_shm test rm +cc +ccflags
+?MAKE: -pick add $@ %<
+?S:d_SHM_MAC:
+?S: Sometimes, the SHMLBA manifest needs sys/sysmacros.h, usually for
+?S: the ctob() macro.
+?S:.
+?S:d_SHM_PRM:
+?S: Sometimes, the SHMLBA manifest needs sys/param.h, usually for the
+?S: NBPC constant.
+?S:.
+?S:d_SHM_SEG:
+?S: Sometimes, the SHMLBA manifest needs sys/seg.h, usually for the
+?S: SNUMSHFT constant.
+?S:.
+?S:d_SHM_IMMU:
+?S: Sometimes, the SHMLBA manifest needs sys/immu.h, usually for the
+?S: stob() macro.
+?S:.
+?C:SHMLBA_WANTS_SYSMACROS:
+?C: This value tells us to include <sys/sysmacros.h> because SHMLBA
+?C: needs something from there, probably the ctob() macro.
+?C:.
+?C:SHMLBA_WANTS_PARAM:
+?C: This value tells us to include <sys/param.h> because SHMLBA needs
+?C: something from there, probably the NBPC constant.
+?C:.
+?C:SHMLBA_WANTS_SEG:
+?C: This value tells us to include <sys/seg.h> because SHMLBA needs
+?C: something from there, probably the SNUMSHFT constant.
+?C:.
+?C:SHMLBA_WANTS_IMMU:
+?C: This value tells us to include <sys/immu.h> because SHMLBA needs
+?C: something from there, probably the stob() macro. (tower_600 only?)
+?C:.
+?H:#$d_SHM_MAC SHMLBA_WANTS_SYSMACROS /* SHMLBA wants ctob()? */
+?H:#$d_SHM_PRM SHMLBA_WANTS_PARAM /* SHMLBA wants NBPC? */
+?H:#$d_SHM_SEG SHMLBA_WANTS_SEG /* SHMLBA wants SNUMSHFT? */
+?H:#$d_SHM_IMMU SHMLBA_WANTS_IMMU /* SHMLBA wants stob()? */
+?H:.
+?T:flags D_sys_immu D_sys_seg D_sys_sysmacros D_sys_param
+: check for SHMLBA braindamage
+d_SHM_MAC="$undef"
+d_SHM_PRM="$undef"
+d_SHM_SEG="$undef"
+d_SHM_IMMU="$undef"
+if $test "$d_shm" = "$define" ; then
+ echo " "
+ $cat >&4 <<EOM
+Checking to see if SHMLBA needs additional headers.
+The headers I'll be checking are:
+
+ sys/macros.h (for the ctob() macro)
+ sys/param.h (for NBPC)
+ sys/seg.h (for SNUMSHFT)
+ sys/immu.h (for the stob() macro)
+
+EOM
+ $cat >shm_mac.c <<'EOCP'
+#include <sys/types.h>
+#include <sys/ipc.h>
+#include <sys/shm.h>
+#ifdef I_SYS_IMMU
+#include <sys/immu.h>
+#endif
+#ifdef I_SYS_SYSMACROS
+#include <sys/sysmacros.h>
+#endif
+#ifdef I_SYS_PARAM
+#include <sys/param.h>
+#endif
+#ifdef I_SYS_SEG
+#include <sys/seg.h>
+#endif
+
+int main() {
+ int foo = SHMLBA ;
+ }
+EOCP
+ flags='xxx'
+ for D_sys_immu in '' '-DI_SYS_IMMU'; do
+ for D_sys_seg in '' '-DI_SYS_SEG'; do
+ for D_sys_sysmacros in '' '-DI_SYS_SYSMACROS'; do
+ for D_sys_param in '' '-DI_SYS_PARAM'; do
+ case "$flags" in
+ 'xxx')
+ case "$D_sys_immu$D_sys_param$D_sys_sysmacros$D_sys_seg" in
+ '')
+ echo "Trying it normally..."
+ ;;
+ *)
+ echo "Trying $D_sys_immu $D_sys_param $D_sys_sysmacros $D_sys_seg"
+ ;;
+ esac
+ if $cc $ccflags \
+ $D_sys_immu $D_sys_param $D_sys_sysmacros $D_sys_seg \
+ -o shm_mac shm_mac.c >/dev/null 2>&1 ; then
+ set X $D_sys_immu $D_sys_param $D_sys_sysmacros $D_sys_seg
+ shift
+ flags="$*"
+ echo "Succeeded with $flags"
+ fi
+ ;;
+ esac
+ done
+ done
+ done
+ done
+ case "$flags" in
+ xxx)
+ echo "I don't know how to keep SHMLBA happy. Good luck!"
+ ;;
+ esac
+ case "$flags" in
+ *I_SYS_PARAM*) d_SHM_PRM="$define";;
+ esac
+ case "$flags" in
+ *I_SYS_SYSMACROS*) d_SHM_MAC="$define";;
+ esac
+ case "$flags" in
+ *I_SYS_SEG*) d_SHM_SEG="$define";;
+ esac
+ case "$flags" in
+ *I_SYS_IMMU*) d_SHM_IMMU="$define";;
+ esac
+fi
+$rm -f shm_mac*
+
diff --git a/mcon/U/d_access.U b/mcon/U/d_access.U
new file mode 100644
index 0000000..fff13db
--- /dev/null
+++ b/mcon/U/d_access.U
@@ -0,0 +1,93 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_access.U,v $
+?RCS: Revision 3.0 1993/08/18 12:05:42 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_access: test +cc cat +cppflags h_fcntl h_sysfile rm Trylink Findhdr \
+ i_unistd
+?MAKE: -pick add $@ %<
+?S:d_access:
+?S: This variable conditionally defines HAS_ACCESS if the access() system
+?S: call is available to check for access permissions using real IDs.
+?S:.
+?C:HAS_ACCESS:
+?C: This manifest constant lets the C program know that the access()
+?C: system call is available to check for accessibility using real UID/GID.
+?C: (always present on UNIX.)
+?C:.
+?H:#$d_access HAS_ACCESS /**/
+?H:.
+?W:%<:R_OK W_OK X_OK F_OK
+?LINT:set d_access
+?LINT:change h_fcntl h_sysfile
+: access call always available on UNIX
+$cat >try.c <<EOC
+#$i_unistd I_UNISTD
+#ifdef I_UNISTD
+#include <unistd.h>
+#endif
+int main(void)
+{
+ static int ret;
+ ret |= access("path", 1);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=access
+set d_access
+eval $trylink
+
+: locate the flags for 'access()'
+case "$d_access" in
+"$define")
+ echo " "
+ $cat >access.c <<'EOCP'
+#include <sys/types.h>
+#ifdef I_FCNTL
+#include <fcntl.h>
+#endif
+#ifdef I_SYS_FILE
+#include <sys/file.h>
+#endif
+#ifdef I_UNISTD
+#include <unistd.h>
+#endif
+int main(void) {
+ static int mode;
+ mode |= R_OK;
+ mode |= W_OK;
+ mode |= X_OK;
+ mode |= F_OK;
+ return mode ? 0 : 1;
+}
+EOCP
+ : check sys/file.h first, no particular reason here
+ if $test `./findhdr sys/file.h` && \
+ $cc -o access $cppflags -DI_SYS_FILE access.c >/dev/null 2>&1 ; then
+ h_sysfile=true;
+ echo "<sys/file.h> defines the *_OK access constants." >&4
+ elif $test `./findhdr fcntl.h` && \
+ $cc -o access $cppflags -DI_FCNTL access.c >/dev/null 2>&1 ; then
+ h_fcntl=true;
+ echo "<fcntl.h> defines the *_OK access constants." >&4
+@if I_UNISTD
+ elif $test `./findhdr unistd.h` && \
+ $cc -o access $cppflags -DI_UNISTD access.c >/dev/null 2>&1 ; then
+ echo "<unistd.h> defines the *_OK access constants." >&4
+@end
+ else
+ echo "I can't find the four *_OK access constants--I'll use mine." >&4
+ fi
+ ;;
+esac
+$rm -f access*
+
diff --git a/mcon/U/d_alarm.U b/mcon/U/d_alarm.U
new file mode 100644
index 0000000..1452763
--- /dev/null
+++ b/mcon/U/d_alarm.U
@@ -0,0 +1,46 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu>
+?RCS:
+?RCS: $Log: d_alarm.U,v $
+?RCS: Revision 3.0.1.1 1994/08/29 16:06:58 ram
+?RCS: patch32: created by ADO
+?RCS:
+?MAKE:d_alarm: Trylink cat i_unistd
+?MAKE: -pick add $@ %<
+?S:d_alarm:
+?S: This variable conditionally defines the HAS_ALARM symbol, which
+?S: indicates to the C program that the alarm() routine is available.
+?S:.
+?C:HAS_ALARM :
+?C: This symbol, if defined, indicates that the alarm routine is
+?C: available.
+?C:.
+?H:#$d_alarm HAS_ALARM /**/
+?H:.
+?LINT:set d_alarm
+: see if alarm exists
+$cat >try.c <<EOC
+#$i_unistd I_UNISTD
+#ifdef I_UNISTD
+#include <unistd.h>
+#endif
+int main(void)
+{
+ static unsigned ret;
+ ret |= alarm(1);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=alarm
+set d_alarm
+eval $trylink
+
diff --git a/mcon/U/d_arc4random.U b/mcon/U/d_arc4random.U
new file mode 100644
index 0000000..0fd3f49
--- /dev/null
+++ b/mcon/U/d_arc4random.U
@@ -0,0 +1,40 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 2006, Christian Biere
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:d_arc4random: Trylink cat i_stdlib
+?MAKE: -pick add $@ %<
+?S:d_arc4random:
+?S: This variable conditionally defines the HAS_ARC4RANDOM symbol, which
+?S: indicates to the C program that the arc4random() routine is available.
+?S:.
+?C:HAS_ARC4RANDOM:
+?C: This symbol, if defined, indicates that the arc4random routine is
+?C: available.
+?C:.
+?H:#$d_arc4random HAS_ARC4RANDOM /**/
+?H:.
+?LINT:set d_arc4random
+: see if arc4random exists
+$cat >try.c <<EOC
+#$i_stdlib I_STDLIB
+#ifdef I_STDLIB
+#include <stdlib.h>
+#endif
+int main(void)
+{
+ static unsigned long ret;
+ ret |= arc4random();
+ return 0 != ret;
+}
+EOC
+cyn=arc4random
+set d_arc4random
+eval $trylink
+
diff --git a/mcon/U/d_attribut.U b/mcon/U/d_attribut.U
new file mode 100644
index 0000000..7c56fa1
--- /dev/null
+++ b/mcon/U/d_attribut.U
@@ -0,0 +1,51 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu>
+?RCS:
+?RCS: $Log: d_attribut.U,v $
+?RCS: Revision 3.0.1.3 1995/01/30 14:33:45 ram
+?RCS: patch49: test C program now includes <stdio.h> (WED)
+?RCS:
+?RCS: Revision 3.0.1.2 1995/01/11 15:25:47 ram
+?RCS: patch45: fixed typo in the d_attribut variable (ADO)
+?RCS:
+?RCS: Revision 3.0.1.1 1994/10/29 16:08:55 ram
+?RCS: patch36: created by ADO
+?RCS:
+?MAKE:d_attribut: Myread Oldconfig Trylink cat
+?MAKE: -pick add $@ %<
+?S:d_attribut (d_attrib):
+?S: This variable conditionally defines HASATTRIBUTE, which
+?S: indicates the C compiler can check for function attributes,
+?S: such as printf formats.
+?S:.
+?C:HASATTRIBUTE ~ %< (GNUC_ATTRIBUTE_CHECK):
+?C: This symbol indicates the C compiler can check for function attributes,
+?C: such as printf formats. This is normally only supported by GNU cc.
+?C:.
+?H:?%<:#$d_attribut HASATTRIBUTE /**/
+?H:?%<:#ifndef HASATTRIBUTE
+?H:?%<:#define __attribute__(_arg_)
+?H:?%<:#endif
+?H:.
+?W:%<:__attribute__
+?LINT:set d_attribut
+?LINT:known __attribute__
+: Look for GNU-cc style attribute checking
+$cat >try.c <<'EOCP'
+#include <stdio.h>
+void croak (char* pat,...) __attribute__((format(printf,1,2),noreturn));
+int main(void) { return 0; }
+EOCP
+cyn="whether your compiler can handle __attribute__"
+set d_attribut
+eval $trylink
+
diff --git a/mcon/U/d_backtrace.U b/mcon/U/d_backtrace.U
new file mode 100644
index 0000000..7c5f914
--- /dev/null
+++ b/mcon/U/d_backtrace.U
@@ -0,0 +1,45 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 2011, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_semget.U,v $
+?RCS:
+?MAKE:d_backtrace: Trylink cat i_execinfo
+?MAKE: -pick add $@ %<
+?S:d_backtrace:
+?S: This variable conditionally defines the HAS_BACKTRACE symbol, which
+?S: indicates to the C program that the backtrace() routine is available
+?S: to get a stack trace.
+?S:.
+?C:HAS_BACKTRACE:
+?C: This symbol, if defined, indicates that the backtrace() routine is
+?C: available to get a stack trace. The <execinfo.h> header must be
+?C: included to use this routine.
+?C:.
+?H:#$d_backtrace HAS_BACKTRACE /**/
+?H:.
+?LINT:set d_backtrace
+: see if backtrace exists
+$cat >try.c <<EOC
+#$i_execinfo I_EXECINFO
+#ifdef I_EXECINFO
+#include <execinfo.h>
+#endif
+int main(void)
+{
+ void *buf[2];
+ static int ret;
+ ret |= backtrace(buf, 2);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=backtrace
+set d_backtrace
+eval $trylink
+
diff --git a/mcon/U/d_bcmp.U b/mcon/U/d_bcmp.U
new file mode 100644
index 0000000..e64052e
--- /dev/null
+++ b/mcon/U/d_bcmp.U
@@ -0,0 +1,54 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_bcmp.U,v $
+?RCS: Revision 3.0.1.2 1993/10/16 13:47:52 ram
+?RCS: patch12: added magic support for bcmp()
+?RCS:
+?RCS: Revision 3.0.1.1 1993/09/13 16:00:44 ram
+?RCS: patch10: now only defines HAS_BCMP, no macro remap on memcmp (WAD)
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:05:42 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_bcmp: Trylink cat
+?MAKE: -pick add $@ %<
+?S:d_bcmp:
+?S: This variable conditionally defines the HAS_BCMP symbol if
+?S: the bcmp() routine is available to compare strings.
+?S:.
+?C:HAS_BCMP:
+?C: This symbol is defined if the bcmp() routine is available to
+?C: compare blocks of memory.
+?C:.
+?H:#$d_bcmp HAS_BCMP /**/
+?H:.
+?M:bcmp: HAS_BCMP
+?M:#ifndef HAS_BCMP
+?M:#ifndef bcmp
+?M:#define bcmp(s,d,l) memcmp((s),(d),(l))
+?M:#endif
+?M:#endif
+?M:.
+?LINT:set d_bcmp
+: see if bcmp exists
+$cat >try.c <<EOC
+#include <strings.h>
+int main(void)
+{
+ static int a, b, ret;
+ ret |= bcmp(&a, &b, sizeof(a));
+ return ret ? 0 : 1;
+}
+EOC
+cyn=bcmp
+set d_bcmp
+eval $trylink
+
diff --git a/mcon/U/d_bcopy.U b/mcon/U/d_bcopy.U
new file mode 100644
index 0000000..9e91dd7
--- /dev/null
+++ b/mcon/U/d_bcopy.U
@@ -0,0 +1,68 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_bcopy.U,v $
+?RCS: Revision 3.0.1.2 1993/10/16 13:48:04 ram
+?RCS: patch12: added magic support for bcopy()
+?RCS:
+?RCS: Revision 3.0.1.1 1993/09/13 16:01:11 ram
+?RCS: patch10: now only defines HAS_BCOPY, no macro remap on memcpy (WAD)
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:05:44 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_bcopy: Trylink cat
+?MAKE: -pick add $@ %<
+?S:d_bcopy:
+?S: This variable conditionally defines the HAS_BCOPY symbol if
+?S: the bcopy() routine is available to copy strings.
+?S:.
+?C:HAS_BCOPY:
+?C: This symbol is defined if the bcopy() routine is available to
+?C: copy blocks of memory.
+?C:.
+?H:#$d_bcopy HAS_BCOPY /**/
+?H:.
+?M:bcopy: HAS_BCOPY
+?M:#ifndef HAS_BCOPY
+?M:#ifndef bcopy
+?M:#define bcopy(s,d,l) memcpy((d),(s),(l))
+?M:#endif
+?M:#endif
+?M:.
+?LINT:set d_bcopy
+: see if bcopy exists
+?X: Test is over-complex to avoid gcc optimizing bcopy() away.
+$cat >try.c <<EOC
+#include <strings.h>
+static void
+init_data(char *a, unsigned len)
+{
+ unsigned i;
+ for (i = 0; i < len; i++)
+ a[i] = i * 2 + 1;
+}
+static void
+recopy_data(char *src, char *dst, unsigned len)
+{
+ bcopy(&src[3], &dst[0], len - 3);
+}
+int main(void)
+{
+ static char src[20], dst[20];
+ init_data(src, sizeof src);
+ recopy_data(src, dst, sizeof src);
+ return dst[0] + dst[1];
+}
+EOC
+cyn=bcopy
+set d_bcopy
+eval $trylink
+
diff --git a/mcon/U/d_bfd_lib.U b/mcon/U/d_bfd_lib.U
new file mode 100644
index 0000000..d1fa688
--- /dev/null
+++ b/mcon/U/d_bfd_lib.U
@@ -0,0 +1,51 @@
+?RCS: $Id: d_dlopen.U 40 2010-11-27 20:54:48Z rmanfredi $
+?RCS:
+?RCS: Copyright (c) 2012 Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:d_bfd_lib: Trylink cat
+?MAKE: -pick add $@ %<
+?S:d_bfd_lib:
+?S: This variable conditionally defines the HAS_BFD_LIBRARY symbol, which
+?S: indicates to the C program that the BFD library is available.
+?S:.
+?C:HAS_BFD_LIBRARY :
+?C: This symbol, if defined, indicates that the BFD library is available
+?C: to inspect symbols and debugging information. You can safely include
+?C: the <bfd.h> file when this symbol is defined, making sure to define
+?C: the PACKAGE and PACKAGE_VERSION symbols, just in case we're facing
+?C: binutils 2.23 or higher.
+?C:.
+?H:#$d_bfd_lib HAS_BFD_LIBRARY /**/
+?H:.
+?LINT:set d_bfd_lib
+: see whether the bfd library is available
+$cat >try.c <<EOC
+?X: Starting with binutils 2.23, it is necessary to define some symbols before
+?X: including <bfd.h>, or the file does not compile properly. Do it blindly
+?X: since we do not want to bother with the actual version of the file.
+?X: This is a BFD library bug, as reported in:
+?X: https://sourceware.org/bugzilla/show_bug.cgi?id=15920
+#define PACKAGE
+#define PACKAGE_VERSION
+#include <bfd.h>
+int main(void)
+{
+ bfd *b;
+ b = bfd_openr("file", 0);
+ return b ? 0 : 1;
+}
+EOC
+cyn="whether the BFD library is available"
+?X: Modern BFD library versions no longer require -lintl and -liberty but do
+?X: require -ldl, on Linux at least. -- RAM, 2014-07-22
+set d_bfd_lib '-lbfd -lintl -liberty' '-lbfd -liberty' '-lbfd -liberty -lz' \
+ '-lbfd -lintl -liberty -lz' '-lbfd -lz' '-lbfd -lintl -lz' \
+ '-lbfd -lz -ldl'
+eval $trylink
+
diff --git a/mcon/U/d_bindtxtcode.U b/mcon/U/d_bindtxtcode.U
new file mode 100644
index 0000000..d2f4d4c
--- /dev/null
+++ b/mcon/U/d_bindtxtcode.U
@@ -0,0 +1,38 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 2006, Christian Biere
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:d_bindtxtcode: Trylink cat
+?MAKE: -pick add $@ %<
+?S:d_bindtxtcode:
+?S: This variable conditionally defines the HAS_BIND_TEXTDOMAIN_CODESET symbol,
+?S: which indicates to the C program that the bind_textdomain_codeset()
+?S: routine is available.
+?S:.
+?C:HAS_BIND_TEXTDOMAIN_CODESET:
+?C: This symbol, if defined, indicates that the bind_textdomain_codeset routine
+?C: is available.
+?C:.
+?H:#$d_bindtxtcode HAS_BIND_TEXTDOMAIN_CODESET /**/
+?H:.
+?LINT:set d_bindtxtcode
+: see if bind_textdomain_codeset exists
+$cat >try.c <<EOC
+#include <libintl.h>
+int main(void)
+{
+ static char ret;
+ ret |= *bind_textdomain_codeset("domain", "codeset");
+ return ret ? 0 : 1;
+}
+EOC
+cyn=bind_textdomain_codeset
+set d_bindtxtcode '-lintl'
+eval $trylink
+
diff --git a/mcon/U/d_brokstat.U b/mcon/U/d_brokstat.U
new file mode 100644
index 0000000..e82ad4b
--- /dev/null
+++ b/mcon/U/d_brokstat.U
@@ -0,0 +1,75 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_brokstat.U,v $
+?RCS: Revision 3.0.1.1 1997/02/28 15:30:53 ram
+?RCS: patch61: created
+?RCS:
+?MAKE:d_brokstat: cat contains cppstdin cppminus +cppflags rm Setvar
+?MAKE: -pick add $@ %<
+?S:d_brokstat:
+?S: This variable conditionally defines STAT_MACROS_BROKEN if some
+?S: of the S_IS*() macros from <sys/stat.h> give false positive on
+?S: regular files.
+?S:.
+?C:STAT_MACROS_BROKEN:
+?C: This symbol, if defined, indicates that the S_IS*() stat macros
+?C: such as S_ISBLK() give false positive and are thus unusable.
+?C: Your best bet is then to supply your own set.
+?C:.
+?H:#$d_brokstat STAT_MACROS_BROKEN /**/
+?H:.
+?F:!try.c !try
+?LINT:set d_brokstat
+?LINT:usefile try
+?X: This test inspired by autoconf -- RAM, 28/02/97
+: are stat macros sane?
+echo " "
+echo "Checking whether your stat() macros are broken..."
+$cat >try.c <<EOC
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#if defined(S_ISBLK) && defined(S_IFDIR)
+#if S_ISBLK(S_IFDIR)
+Broken
+#endif
+#endif
+
+#if defined(S_ISBLK) && defined(S_IFCHR)
+#if S_ISBLK(S_IFCHR)
+Broken
+#endif
+#endif
+
+#if defined(S_ISLNK) && defined(S_IFREG)
+#if S_ISLNK(S_IFREG)
+Broken.
+#endif
+#endif
+
+#if defined(S_ISSOCK) && defined(S_IFREG)
+#if S_ISSOCK(S_IFREG)
+Broken.
+#endif
+#endif
+EOC
+$cppstdin $cppflags $cppminus <try.c 2>/dev/null >try
+if $contains Broken try >/dev/null 2>&1; then
+ echo "Alas, they are. I'll use my own macro set then." >&4
+ val="$define"
+else
+ echo "Nope, working just fine." >&4
+ val="$undef"
+fi
+$rm -f try try.c
+set d_brokstat
+eval $setvar
+
diff --git a/mcon/U/d_bsdjmp.U b/mcon/U/d_bsdjmp.U
new file mode 100644
index 0000000..86f6920
--- /dev/null
+++ b/mcon/U/d_bsdjmp.U
@@ -0,0 +1,85 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_bsdjmp.U,v $
+?RCS: Revision 3.0.1.2 1997/02/28 15:31:10 ram
+?RCS: patch61: added ?F: metalint hint
+?RCS:
+?RCS: Revision 3.0.1.1 1994/10/29 16:09:09 ram
+?RCS: patch36: call ./usg explicitly instead of relying on PATH
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:05:45 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_bsdjmp: Guess Setvar cat +cc libs rm
+?MAKE: -pick add $@ %<
+?S:d_bsdjmp:
+?S: This variable conditionally defines USE_BSDJMP if BSD _setjmp and
+?S: _longjmp routines are available to do non-local gotos without saving
+?S: or restoring the signal mask flag.
+?S:.
+?C:USE_BSDJMP (BSDJMP):
+?C: This symbol, if defined, indicates that the BSD _setjmp and _longjmp
+?C: routines are available to do non-local gotos wihtout saving or restoring
+?C: the signal mask flag.
+?C:.
+?H:#$d_bsdjmp USE_BSDJMP /**/
+?H:.
+?F:!set
+?LINT:set d_bsdjmp
+: see if _setjmp and _longjmp exists
+echo " "
+case "$d_bsdjmp" in
+'')
+ $cat >set.c <<EOP
+#include <setjmp.h>
+jmp_buf env;
+int set = 1;
+int main()
+{
+ if (_setjmp(env))
+ exit(set);
+ set = 0;
+ _longjmp(env, 1);
+ exit(1);
+}
+EOP
+ if $cc -o set set.c $libs >/dev/null 2>&1; then
+ if ./set >/dev/null 2>&1; then
+ echo "Good! You have BSD _setjmp and _longjmp routines." >&4
+ val="$define"
+ else
+ $cat <<EOM
+Uh-Oh! You have BSD _setjmp and _longjmp, but they do not work properly!!
+EOM
+ val="$undef"
+ fi
+ else
+ if ./usg; then
+ echo "You do not have _setjmp and _longjmp, but that's fine." >&4
+ else
+ cat <<EOM
+It sounds strange for a BSD system to miss _setjmp and _longjmp, but that's ok.
+EOM
+ fi
+ val="$undef"
+ fi
+ ;;
+*) val="$d_bsdjmp"
+ case "$d_bsdjmp" in
+ $define) echo "Good! You have BSD _setjmp and _longjmp routines." >&4;;
+ $undef) echo "You do not have _setjmp and _longjmp, but that's fine." >&4;;
+ esac
+ ;;
+esac
+set d_bsdjmp
+eval $setvar
+$rm -f set.c set
+
diff --git a/mcon/U/d_bsearch.U b/mcon/U/d_bsearch.U
new file mode 100644
index 0000000..a1fbc94
--- /dev/null
+++ b/mcon/U/d_bsearch.U
@@ -0,0 +1,39 @@
+?RCS:
+?RCS: Copyright (c) 2015 Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:d_bsearch: Trylink cat
+?MAKE: -pick add $@ %<
+?S:d_bsearch:
+?S: This variable conditionally defines the HAS_BSEARCH symbol, which
+?S: indicates to the C program that it can use the bsearch() routine
+?S: to perform a binary search on a sorted array.
+?S:.
+?C:HAS_BSEARCH:
+?C: This symbol, if defined, indicates that the bsearch() routine
+?C: is available to perform a binary search on a sorted array.
+?C:.
+?H:#$d_bsearch HAS_BSEARCH /**/
+?H:.
+?LINT:set d_bsearch
+: see if there is a bsearch
+$cat >try.c <<EOC
+#include <stdlib.h>
+int mycmp(const void *a, const void *b)
+{
+ return (char *) a - (char *) b;
+}
+int main(int argc, char **argv)
+{
+ return NULL == bsearch("foo", argv, argc, sizeof argv[0], mycmp);
+}
+EOC
+cyn=bsearch
+set d_bsearch
+eval $trylink
+
diff --git a/mcon/U/d_built_bswap32.U b/mcon/U/d_built_bswap32.U
new file mode 100644
index 0000000..0f22396
--- /dev/null
+++ b/mcon/U/d_built_bswap32.U
@@ -0,0 +1,35 @@
+?RCS:
+?RCS: Copyright (c) 2013 Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:d_built_bswap32: Trylink cat
+?MAKE: -pick add $@ %<
+?S:d_built_bswap32:
+?S: This variable conditionally defines the HAS_BUILTIN_BSWAP32 symbol, which
+?S: indicates to the C program that __builtin_bswap32 is available.
+?S:.
+?C:HAS_BUILTIN_BSWAP32:
+?C: This symbol, if defined, indicates that __builtin_bswap32 routine is
+?C: available to byte-swap a 32-bit value (little <-> big endian).
+?C:.
+?H:#$d_built_bswap32 HAS_BUILTIN_BSWAP32 /**/
+?H:.
+?LINT:set d_built_bswap32
+: check for __builtin_bswap32
+$cat >try.c <<EOC
+int main(void)
+{
+ static int ret;
+ ret |= __builtin_bswap32(127);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=__builtin_bswap32
+set d_built_bswap32
+eval $trylink
+
diff --git a/mcon/U/d_built_bswap64.U b/mcon/U/d_built_bswap64.U
new file mode 100644
index 0000000..6379502
--- /dev/null
+++ b/mcon/U/d_built_bswap64.U
@@ -0,0 +1,35 @@
+?RCS:
+?RCS: Copyright (c) 2013 Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:d_built_bswap64: Trylink cat
+?MAKE: -pick add $@ %<
+?S:d_built_bswap64:
+?S: This variable conditionally defines the HAS_BUILTIN_BSWAP64 symbol, which
+?S: indicates to the C program that __builtin_bswap64 is available.
+?S:.
+?C:HAS_BUILTIN_BSWAP64:
+?C: This symbol, if defined, indicates that __builtin_bswap64 routine is
+?C: available to byte-swap a 64-bit value (little <-> big endian).
+?C:.
+?H:#$d_built_bswap64 HAS_BUILTIN_BSWAP64 /**/
+?H:.
+?LINT:set d_built_bswap64
+: check for __builtin_bswap64
+$cat >try.c <<EOC
+int main(void)
+{
+ static int ret;
+ ret |= __builtin_bswap64(127);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=__builtin_bswap64
+set d_built_bswap64
+eval $trylink
+
diff --git a/mcon/U/d_built_clz.U b/mcon/U/d_built_clz.U
new file mode 100644
index 0000000..92df13e
--- /dev/null
+++ b/mcon/U/d_built_clz.U
@@ -0,0 +1,37 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 2012 Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:d_built_clz: Trylink cat
+?MAKE: -pick add $@ %<
+?S:d_built_clz:
+?S: This variable conditionally defines the HAS_BUILTIN_CLZ symbol, which
+?S: indicates to the C program that __builtin_clz is available to count
+?S: leading zeroes.
+?S:.
+?C:HAS_BUILTIN_CLZ:
+?C: This symbol, if defined, indicates that the __builtin_clz routine is
+?C: available to count leading zeroes in a word.
+?C:.
+?H:#$d_built_clz HAS_BUILTIN_CLZ /**/
+?H:.
+?LINT:set d_built_clz
+: check for __builtin_clz
+$cat >try.c <<EOC
+int main(void)
+{
+ static int ret;
+ ret |= __builtin_clz(127);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=__builtin_clz
+set d_built_clz
+eval $trylink
+
diff --git a/mcon/U/d_built_ctz.U b/mcon/U/d_built_ctz.U
new file mode 100644
index 0000000..9f43e50
--- /dev/null
+++ b/mcon/U/d_built_ctz.U
@@ -0,0 +1,37 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 2012 Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:d_built_ctz: Trylink cat
+?MAKE: -pick add $@ %<
+?S:d_built_ctz:
+?S: This variable conditionally defines the HAS_BUILTIN_CTZ symbol, which
+?S: indicates to the C program that __builtin_ctz is available to count
+?S: trailing zeroes.
+?S:.
+?C:HAS_BUILTIN_CTZ:
+?C: This symbol, if defined, indicates that __builtin_ctz routine is
+?C: available to count trailing zeroes in a word.
+?C:.
+?H:#$d_built_ctz HAS_BUILTIN_CTZ /**/
+?H:.
+?LINT:set d_built_ctz
+: check for __builtin_ctz
+$cat >try.c <<EOC
+int main(void)
+{
+ static int ret;
+ ret |= __builtin_ctz(127);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=__builtin_ctz
+set d_built_ctz
+eval $trylink
+
diff --git a/mcon/U/d_built_memcmp.U b/mcon/U/d_built_memcmp.U
new file mode 100644
index 0000000..e0dd670
--- /dev/null
+++ b/mcon/U/d_built_memcmp.U
@@ -0,0 +1,37 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 2011, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:d_built_memcmp: Trylink cat
+?MAKE: -pick add $@ %<
+?S:d_built_memcmp:
+?S: This variable conditionally defines the HAS_BUILTIN_MEMCMP symbol, which
+?S: indicates to the C program that __builtin_memcmp is available.
+?S:.
+?C:HAS_BUILTIN_MEMCMP:
+?C: This symbol, if defined, indicates that __builtin_memcmp routine is
+?C: available to compare memory buffers.
+?C:.
+?H:#$d_built_memcmp HAS_BUILTIN_MEMCMP /**/
+?H:.
+?LINT:set d_built_memcmp
+: check for __builtin_memcmp
+$cat >try.c <<EOC
+int main(void)
+{
+ static int ret;
+ char a[5], b[5];
+ ret |= __builtin_memcmp(a, b, 5);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=__builtin_memcmp
+set d_built_memcmp
+eval $trylink
+
diff --git a/mcon/U/d_built_popcount.U b/mcon/U/d_built_popcount.U
new file mode 100644
index 0000000..c91e9d2
--- /dev/null
+++ b/mcon/U/d_built_popcount.U
@@ -0,0 +1,36 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 2006, Christian Biere
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:d_built_popcount: Trylink cat
+?MAKE: -pick add $@ %<
+?S:d_built_popcount:
+?S: This variable conditionally defines the HAS_BUILTIN_POPCOUNT symbol, which
+?S: indicates to the C program that __builtin_popcount is available.
+?S:.
+?C:HAS_BUILTIN_POPCOUNT:
+?C: This symbol, if defined, indicates that __builtin_popcount routine is
+?C: available to compute the amount of '1' bits in a word.
+?C:.
+?H:#$d_built_popcount HAS_BUILTIN_POPCOUNT /**/
+?H:.
+?LINT:set d_built_popcount
+: check for __builtin_popcount
+$cat >try.c <<EOC
+int main(void)
+{
+ static int ret;
+ ret |= __builtin_popcount(127);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=__builtin_popcount
+set d_built_popcount
+eval $trylink
+
diff --git a/mcon/U/d_byacc.U b/mcon/U/d_byacc.U
new file mode 100644
index 0000000..91f3963
--- /dev/null
+++ b/mcon/U/d_byacc.U
@@ -0,0 +1,33 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1996, Andy Dougherty
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_byacc.U,v $
+?RCS: Revision 3.0.1.1 1997/02/28 15:31:14 ram
+?RCS: patch61: created
+?RCS:
+?MAKE:d_byacc: byacc Setvar
+?MAKE: -pick add $@ %<
+?S:d_byacc:
+?S: This variable indicates whether byacc is available.
+?S: If the user has specified 'portability', then Makefile.SH
+?S: sees $byacc='byacc' whether or not the user actually has
+?S: byacc. This variable allows us to determine in a makefile
+?S: if we really have byacc.
+?S:.
+?LINT:set d_byacc
+: Check if we really have byacc
+case "$byacc" in
+''|'byacc') val="$undef" ;;
+*) val="$define" ;;
+esac
+set d_byacc
+eval $setvar
+
diff --git a/mcon/U/d_bzero.U b/mcon/U/d_bzero.U
new file mode 100644
index 0000000..14f7e4d
--- /dev/null
+++ b/mcon/U/d_bzero.U
@@ -0,0 +1,54 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_bzero.U,v $
+?RCS: Revision 3.0.1.2 1993/10/16 13:48:15 ram
+?RCS: patch12: added magic support for bzero()
+?RCS:
+?RCS: Revision 3.0.1.1 1993/09/13 16:01:33 ram
+?RCS: patch10: now only defines HAS_BZERO, no macro remap on memset (WAD)
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:05:46 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_bzero: Trylink cat
+?MAKE: -pick add $@ %<
+?S:d_bzero:
+?S: This variable conditionally defines the HAS_BZERO symbol if
+?S: the bzero() routine is available to set memory to 0.
+?S:.
+?C:HAS_BZERO:
+?C: This symbol is defined if the bzero() routine is available to
+?C: set a memory block to 0.
+?C:.
+?H:#$d_bzero HAS_BZERO /**/
+?H:.
+?M:bzero: HAS_BZERO
+?M:#ifndef HAS_BZERO
+?M:#ifndef bzero
+?M:#define bzero(s,l) memset((s),0,(l))
+?M:#endif
+?M:#endif
+?M:.
+?LINT:set d_bzero
+: see if bzero exists
+$cat >try.c <<EOC
+#include <strings.h>
+int main(void)
+{
+ static int dst;
+ bzero(&dst, sizeof(dst));
+ return 0;
+}
+EOC
+cyn=bzero
+set d_bzero
+eval $trylink
+
diff --git a/mcon/U/d_casti32.U b/mcon/U/d_casti32.U
new file mode 100644
index 0000000..6363761
--- /dev/null
+++ b/mcon/U/d_casti32.U
@@ -0,0 +1,87 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu>
+?RCS:
+?RCS: $Log: d_casti32.U,v $
+?RCS: Revision 3.0.1.3 1995/05/12 12:10:45 ram
+?RCS: patch54: made sure cc and ccflags are conditional dependencies
+?RCS:
+?RCS: Revision 3.0.1.2 1994/10/29 16:09:37 ram
+?RCS: patch36: declare signal handler correctly (ADO)
+?RCS:
+?RCS: Revision 3.0.1.1 1994/08/29 16:07:06 ram
+?RCS: patch32: created by ADO
+?RCS:
+?X:
+?X: Can the compiler cast large floats to 32-bit integers?
+?X:
+?MAKE:d_casti32: cat +cc +ccflags rm_try intsize Setvar test signal_t
+?MAKE: -pick add $@ %<
+?S:d_casti32:
+?S: This variable conditionally defines CASTI32, which indicates
+?S: whether the C compiler can cast large floats to 32-bit ints.
+?S:.
+?C:CASTI32:
+?C: This symbol is defined if the C compiler can cast negative
+?C: or large floating point numbers to 32-bit ints.
+?C:.
+?T:xxx yyy
+?H:#$d_casti32 CASTI32 /**/
+?H:.
+?F:!try
+?LINT:set d_casti32
+: check for ability to cast large floats to 32-bit ints.
+echo " "
+echo 'Checking whether your C compiler can cast large floats to int32.' >&4
+if $test "$intsize" -eq 4; then
+ xxx=int
+else
+ xxx=long
+fi
+$cat >try.c <<EOCP
+#include <sys/types.h>
+#include <signal.h>
+$signal_t blech() { exit(3); }
+int main()
+{
+ $xxx i32;
+ double f;
+ int result = 0;
+ signal(SIGFPE, blech);
+
+ f = (double) 0x7fffffff;
+ f = 10 * f;
+ i32 = ($xxx) f;
+
+ if (i32 != ($xxx) f)
+ result |= 1;
+ exit(result);
+}
+EOCP
+if $cc $ccflags -o try try.c >/dev/null 2>&1; then
+ ./try
+ yyy=$?
+else
+ echo "(I can't seem to compile the test program--assuming it can't)"
+ yyy=1
+fi
+case "$yyy" in
+0) val="$define"
+ echo "Yup, it can."
+ ;;
+*) val="$undef"
+ echo "Nope, it can't."
+ ;;
+esac
+set d_casti32
+eval $setvar
+$rm_try
+
diff --git a/mcon/U/d_castneg.U b/mcon/U/d_castneg.U
new file mode 100644
index 0000000..517ac1c
--- /dev/null
+++ b/mcon/U/d_castneg.U
@@ -0,0 +1,143 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_castneg.U,v $
+?RCS: Revision 3.0.1.2 1995/05/12 12:11:21 ram
+?RCS: patch54: made sure cc and ccflags are conditional dependencies
+?RCS: patch54: added improved test case for Interactive Unix
+?RCS:
+?RCS: Revision 3.0.1.1 1994/10/29 16:10:50 ram
+?RCS: patch36: don't forget to tell user about compilation failures (ADO)
+?RCS: patch36: declare signal handler correctly using 'signal_t' (ADO)
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:05:47 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: Can the compiler cast negative / odd floats to unsigned values.
+?X:
+?MAKE:d_castneg castflags: cat +cc +ccflags rm_try Setvar signal_t
+?MAKE: -pick add $@ %<
+?S:d_castneg:
+?S: This variable conditionally defines CASTNEG, which indicates
+?S: wether the C compiler can cast negative float to unsigned.
+?S:.
+?S:castflags:
+?S: This variable contains a flag that precise difficulties the
+?S: compiler has casting odd floating values to unsigned long:
+?S: 0 = ok
+?S: 1 = couldn't cast < 0
+?S: 2 = couldn't cast >= 0x80000000
+?S: 4 = couldn't cast in argument expression list
+?S:.
+?C:CASTNEGFLOAT:
+?C: This symbol is defined if the C compiler can cast negative
+?C: numbers to unsigned longs, ints and shorts.
+?C:.
+?C:CASTFLAGS:
+?C: This symbol contains flags that say what difficulties the compiler
+?C: has casting odd floating values to unsigned long:
+?C: 0 = ok
+?C: 1 = couldn't cast < 0
+?C: 2 = couldn't cast >= 0x80000000
+?C: 4 = couldn't cast in argument expression list
+?C:.
+?H:#$d_castneg CASTNEGFLOAT /**/
+?H:#define CASTFLAGS $castflags /**/
+?H:.
+?F:!try
+?LINT:set d_castneg
+: check for ability to cast negative floats to unsigned
+echo " "
+echo 'Checking whether your C compiler can cast negative float to unsigned.' >&4
+$cat >try.c <<EOCP
+#include <sys/types.h>
+#include <signal.h>
+$signal_t blech() { exit(7); }
+$signal_t blech_in_list() { exit(4); }
+unsigned long dummy_long(p) unsigned long p; { return p; }
+unsigned int dummy_int(p) unsigned int p; { return p; }
+unsigned short dummy_short(p) unsigned short p; { return p; }
+int main()
+{
+ double f = -123.;
+ unsigned long along;
+ unsigned int aint;
+ unsigned short ashort;
+ int result = 0;
+
+ signal(SIGFPE, blech);
+ along = (unsigned long)f;
+ aint = (unsigned int)f;
+ ashort = (unsigned short)f;
+ if (along != (unsigned long)-123)
+ result |= 1;
+ if (aint != (unsigned int)-123)
+ result |= 1;
+ if (ashort != (unsigned short)-123)
+ result |= 1;
+ f = (double)0x40000000;
+ f = f + f;
+ along = 0;
+ along = (unsigned long)f;
+ if (along != 0x80000000)
+ result |= 2;
+ f -= 1.;
+ along = 0;
+ along = (unsigned long)f;
+ if (along != 0x7fffffff)
+ result |= 1;
+ f += 2.;
+ along = 0;
+ along = (unsigned long)f;
+ if (along != 0x80000001)
+ result |= 2;
+ if (result)
+ exit(result);
+?X:
+?X: The following is a test for Interactive Unix Version 4.1, which
+?X: has an 'improved' compiler which can correctly cast negative
+?X: floats in expression lists, but apparently not in argument lists.
+?X: Contributed by Winfried Koenig <win@incom.rhein-main.de>
+?X:
+ signal(SIGFPE, blech_in_list);
+ f = 123.;
+ along = dummy_long((unsigned long)f);
+ aint = dummy_int((unsigned int)f);
+ ashort = dummy_short((unsigned short)f);
+ if (along != (unsigned long)123)
+ result |= 4;
+ if (aint != (unsigned int)123)
+ result |= 4;
+ if (ashort != (unsigned short)123)
+ result |= 4;
+ exit(result);
+
+}
+EOCP
+if $cc $ccflags -o try try.c >/dev/null 2>&1; then
+ ./try
+ castflags=$?
+else
+ echo "(I can't seem to compile the test program--assuming it can't)"
+ castflags=7
+fi
+case "$castflags" in
+0) val="$define"
+ echo "Yup, it can."
+ ;;
+*) val="$undef"
+ echo "Nope, it can't."
+ ;;
+esac
+set d_castneg
+eval $setvar
+$rm_try
+
diff --git a/mcon/U/d_cbrt.U b/mcon/U/d_cbrt.U
new file mode 100644
index 0000000..42dd284
--- /dev/null
+++ b/mcon/U/d_cbrt.U
@@ -0,0 +1,42 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_cbrt.U,v $
+?RCS: Revision 3.0 1993/08/18 12:05:48 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_cbrt: Trylink cat
+?MAKE: -pick add $@ %<
+?S:d_cbrt:
+?S: This variable conditionally defines the HAS_CBRT symbol, which
+?S: indicates to the C program that the cbrt() (cube root) function
+?S: is available.
+?S:.
+?C:HAS_CBRT (CBRT):
+?C: This symbol, if defined, indicates that the cbrt() (cube root)
+?C: function is available.
+?C:.
+?H:#$d_cbrt HAS_CBRT /**/
+?H:.
+?LINT:set d_cbrt
+: see if cbrt exists
+$cat >try.c <<EOC
+#include <math.h>
+int main(void)
+{
+ static double x, ret;
+ ret = 1.0 * cbrt(x);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=cbrt
+set d_cbrt '-lm'
+eval $trylink
+
diff --git a/mcon/U/d_charsprf.U b/mcon/U/d_charsprf.U
new file mode 100644
index 0000000..2364018
--- /dev/null
+++ b/mcon/U/d_charsprf.U
@@ -0,0 +1,52 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_charsprf.U,v $
+?RCS: Revision 3.0 1993/08/18 12:05:49 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_charsprf: cat rm +cc Setvar
+?MAKE: -pick add $@ %<
+?S:d_charsprf:
+?S: This variable conditionally defines CHARSPRINTF if this system
+?S: declares "char *sprintf()" in stdio.h. The trend seems to be to
+?S: declare it as "int sprintf()".
+?S:.
+?C:CHARSPRINTF:
+?C: This symbol is defined if this system declares "char *sprintf()" in
+?C: stdio.h. The trend seems to be to declare it as "int sprintf()". It
+?C: is up to the package author to declare sprintf correctly based on the
+?C: symbol.
+?C:.
+?H:#$d_charsprf CHARSPRINTF /**/
+?H:.
+?F:!ucbsprf.c !ucbsprf
+?LINT:set d_charsprf
+: see if sprintf is declared as int or pointer to char
+echo " "
+$cat >ucbsprf.c <<'EOF'
+int main()
+{
+ int sprintf();
+ char buf[10];
+ exit((unsigned long)sprintf(buf,"%s","foo") > 10L);
+}
+EOF
+if $cc -o ucbsprf ucbsprf.c >/dev/null 2>&1 && ./ucbsprf; then
+ echo "Your sprintf() returns (int)." >&4
+ val="$undef"
+else
+ echo "Your sprintf() returns (char*)." >&4
+ val="$define"
+fi
+set d_charsprf
+eval $setvar
+$rm -f ucbsprf*
+
diff --git a/mcon/U/d_chown.U b/mcon/U/d_chown.U
new file mode 100644
index 0000000..45fd681
--- /dev/null
+++ b/mcon/U/d_chown.U
@@ -0,0 +1,49 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu>
+?RCS:
+?RCS: $Log: d_chown.U,v $
+?RCS: Revision 3.0.1.1 1994/08/29 16:07:14 ram
+?RCS: patch32: created by ADO
+?RCS:
+?MAKE:d_chown: Trylink cat i_unistd
+?MAKE: -pick add $@ %<
+?S:d_chown:
+?S: This variable conditionally defines the HAS_CHOWN symbol, which
+?S: indicates to the C program that the chown() routine is available.
+?S:.
+?C:HAS_CHOWN :
+?C: This symbol, if defined, indicates that the chown routine is
+?C: available.
+?C:.
+?H:#$d_chown HAS_CHOWN /**/
+?H:.
+?LINT:set d_chown
+: see if chown exists
+$cat >try.c <<EOC
+#include <sys/types.h>
+#$i_unistd I_UNISTD
+#ifdef I_UNISTD
+#include <unistd.h>
+#endif
+int main(void)
+{
+ static uid_t uid;
+ static gid_t gid;
+ static int ret;
+ ret |= chown("path", uid, gid);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=chown
+set d_chown
+eval $trylink
+
diff --git a/mcon/U/d_chroot.U b/mcon/U/d_chroot.U
new file mode 100644
index 0000000..ef6f4be
--- /dev/null
+++ b/mcon/U/d_chroot.U
@@ -0,0 +1,46 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu>
+?RCS:
+?RCS: $Log: d_chroot.U,v $
+?RCS: Revision 3.0.1.1 1994/08/29 16:07:17 ram
+?RCS: patch32: created by ADO
+?RCS:
+?MAKE:d_chroot: Trylink cat i_unistd
+?MAKE: -pick add $@ %<
+?S:d_chroot:
+?S: This variable conditionally defines the HAS_CHROOT symbol, which
+?S: indicates to the C program that the chroot() routine is available.
+?S:.
+?C:HAS_CHROOT :
+?C: This symbol, if defined, indicates that the chroot routine is
+?C: available.
+?C:.
+?H:#$d_chroot HAS_CHROOT /**/
+?H:.
+?LINT:set d_chroot
+: see if chroot exists
+$cat >try.c <<EOC
+#$i_unistd I_UNISTD
+#ifdef I_UNISTD
+#include <unistd.h>
+#endif
+int main(void)
+{
+ static int ret;
+ ret |= chroot("path");
+ return ret ? 0 : 1;
+}
+EOC
+cyn=chroot
+set d_chroot
+eval $trylink
+
diff --git a/mcon/U/d_chsize.U b/mcon/U/d_chsize.U
new file mode 100644
index 0000000..7b6bee2
--- /dev/null
+++ b/mcon/U/d_chsize.U
@@ -0,0 +1,42 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_chsize.U,v $
+?RCS: Revision 3.0 1993/08/18 12:05:50 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_chsize: Trylink cat
+?MAKE: -pick add $@ %<
+?S:d_chsize:
+?S: This variable conditionally defines the CHSIZE symbol, which
+?S: indicates to the C program that the chsize() routine is available
+?S: to truncate files. You might need a -lx to get this routine.
+?S:.
+?C:HAS_CHSIZE (CHSIZE):
+?C: This symbol, if defined, indicates that the chsize routine is available
+?C: to truncate files. You might need a -lx to get this routine.
+?C:.
+?H:#$d_chsize HAS_CHSIZE /**/
+?H:.
+?LINT:set d_chsize
+: see if chsize exists
+$cat >try.c <<EOC
+int main(void)
+{
+ static int fd, ret;
+ static long size;
+ ret |= chsize(fd, size);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=chsize
+set d_chsize
+eval $trylink
+
diff --git a/mcon/U/d_ckeypad.U b/mcon/U/d_ckeypad.U
new file mode 100644
index 0000000..7e9566a
--- /dev/null
+++ b/mcon/U/d_ckeypad.U
@@ -0,0 +1,56 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_ckeypad.U,v $
+?RCS: Revision 3.0 1993/08/18 12:05:50 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_ckeypad: cat cc termlib Setvar
+?MAKE: -pick add $@ %<
+?S:d_ckeypad:
+?S: This variable controls the definition of HAS_CURSES_KEYPAD,
+?S: which tells the application that the keypad() curses function
+?S: is available.
+?S:.
+?C:HAS_CURSES_KEYPAD:
+?C: This symbol indicates the availability of the keypad() function
+?C: of the curses library.
+?C:.
+?H:#$d_ckeypad HAS_CURSES_KEYPAD /**/
+?H:.
+?LINT:set d_ckeypad
+: check for the "keypad" function in the curses library
+echo " "
+case "$termlib" in
+'')
+ echo "You don't have a curses library, so I won't waste time looking" >&4
+ echo "to see if has the keypad() function." >&4
+ ;;
+*)
+echo "Checking the curses library ($termlib) for the keypad() function..." >&4
+ $cat >c_keypad.c <<'EOCP'
+#include <curses.h>
+int main() {
+ keypad(stdscr, TRUE);
+ exit(0);
+}
+EOCP
+ if $cc c_keypad.c >c_keypad.out 2>&1 ; then
+ val=$define
+ echo "It appears to have the keypad() function."
+ else
+ val=$undef
+ echo "Your curses library doesn't appear to have the keypad() function."
+ fi
+ ;;
+esac
+set d_ckeypad
+eval $setvar
+
diff --git a/mcon/U/d_clearenv.U b/mcon/U/d_clearenv.U
new file mode 100644
index 0000000..d8e892f
--- /dev/null
+++ b/mcon/U/d_clearenv.U
@@ -0,0 +1,38 @@
+?RCS:
+?RCS: Copyright (c) 2015 Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:d_clearenv: Trylink cat i_stdlib
+?MAKE: -pick add $@ %<
+?S:d_clearenv:
+?S: This variable conditionally defines the HAS_CLEARENV
+?S: symbol, which indicates to the C program that clearenv()
+?S: is available to clear the environment.
+?S:.
+?C:HAS_CLEARENV:
+?C: This symbol is defined when clearenv() is there to clear the
+?C: environment.
+?C:.
+?H:#$d_clearenv HAS_CLEARENV
+?H:.
+?LINT: set d_clearenv
+: do we have clearenv?
+$cat >try.c <<EOC
+#$i_stdlib I_STDLIB
+#ifdef I_STDLIB
+#include <stdlib.h>
+#endif
+int main(void)
+{
+ return clearenv();
+}
+EOC
+cyn=clearenv
+set d_clearenv
+eval $trylink
+
diff --git a/mcon/U/d_clock_getres.U b/mcon/U/d_clock_getres.U
new file mode 100644
index 0000000..793692e
--- /dev/null
+++ b/mcon/U/d_clock_getres.U
@@ -0,0 +1,38 @@
+?RCS:
+?RCS: Copyright (c) 2014 Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:d_clock_getres: Trylink cat
+?MAKE: -pick add $@ %<
+?S:d_clock_getres:
+?S: This variable conditionally defines HAS_CLOCK_GETRES when clock_getres() is
+?S: available to fetch the granularity of the available clock.
+?S:.
+?C:HAS_CLOCK_GETRES:
+?C: This symbol, if defined, indicates that the clock_getres() system call is
+?C: available to fetch the granularity of available clock (CLOCK_REALTIME is
+?C: a valid clock when the symbol is defined).
+?C:.
+?H:#$d_clock_getres HAS_CLOCK_GETRES /**/
+?H:.
+?LINT:set d_clock_getres
+: see whether clock_getres exists
+$cat >try.c <<EOC
+#include <time.h>
+int main(void)
+{
+ int ret;
+ struct timespec res;
+ ret = clock_getres(CLOCK_REALTIME, &res);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=clock_getres
+set d_clock_getres
+eval $trylink
+
diff --git a/mcon/U/d_clock_gettime.U b/mcon/U/d_clock_gettime.U
new file mode 100644
index 0000000..3e2cf4d
--- /dev/null
+++ b/mcon/U/d_clock_gettime.U
@@ -0,0 +1,38 @@
+?RCS:
+?RCS: Copyright (c) 2014 Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:d_clock_gettime: Trylink cat
+?MAKE: -pick add $@ %<
+?S:d_clock_gettime:
+?S: This variable conditionally defines HAS_CLOCK_GETTIME when clock_gettime()
+?S: is available to fetch the clock.
+?S:.
+?C:HAS_CLOCK_GETTIME:
+?C: This symbol, if defined, indicates that the clock_gettime() system call is
+?C: available to fetch the clock (CLOCK_REALTIME is a valid clock when the
+?C: symbol is defined).
+?C:.
+?H:#$d_clock_gettime HAS_CLOCK_GETTIME /**/
+?H:.
+?LINT:set d_clock_gettime
+: see whether clock_gettime exists
+$cat >try.c <<EOC
+#include <time.h>
+int main(void)
+{
+ int ret;
+ struct timespec tp;
+ ret = clock_gettime(CLOCK_REALTIME, &tp);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=clock_gettime
+set d_clock_gettime
+eval $trylink
+
diff --git a/mcon/U/d_closedir.U b/mcon/U/d_closedir.U
new file mode 100644
index 0000000..c0cd33a
--- /dev/null
+++ b/mcon/U/d_closedir.U
@@ -0,0 +1,121 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu>
+?RCS:
+?RCS: $Log: d_closedir.U,v $
+?RCS: Revision 3.0.1.3 1997/02/28 15:31:26 ram
+?RCS: patch61: added ?F: metalint hint
+?RCS:
+?RCS: Revision 3.0.1.2 1994/10/29 16:11:18 ram
+?RCS: patch36: added 'ldflags' to the test compile line (ADO)
+?RCS:
+?RCS: Revision 3.0.1.1 1994/08/29 16:07:21 ram
+?RCS: patch32: created by ADO
+?RCS:
+?MAKE:d_closedir d_void_closedir: Trylink cat i_dirent i_sysdir i_sysndir \
+ cc ccflags ldflags libs Setvar rm
+?MAKE: -pick add $@ %<
+?S:d_closedir:
+?S: This variable conditionally defines HAS_CLOSEDIR if closedir() is
+?S: available.
+?S:.
+?C:HAS_CLOSEDIR:
+?C: This symbol, if defined, indicates that the closedir() routine is
+?C: available.
+?C:.
+?H:#$d_closedir HAS_CLOSEDIR /**/
+?H:.
+?S:d_void_closedir:
+?S: This variable conditionally defines VOID_CLOSEDIR if closedir()
+?S: does not return a value.
+?S:.
+?C:VOID_CLOSEDIR:
+?C: This symbol, if defined, indicates that the closedir() routine
+?C: does not return a value.
+?C:.
+?H:#$d_void_closedir VOID_CLOSEDIR /**/
+?H:.
+?F:!closedir
+?LINT:set d_closedir d_void_closedir
+: see if closedir exists
+$cat >try.c <<EOC
+#$i_dirent I_DIRENT
+#ifdef I_DIRENT
+#include <dirent.h>
+#endif
+int main(void)
+{
+ static DIR *dir;
+ dir = opendir("path");
+ closedir(dir);
+ return 0;
+}
+EOC
+cyn=closedir
+set d_closedir
+eval $trylink
+
+@if VOID_CLOSEDIR || d_void_closedir
+?X: The following contortions are designed so we can call closedir()
+?X: and check whether it returns a value. The contortions are designed
+?X: to portably pick up the correct directory header, for those
+?X: systems that support various mutually incompatible directory functions.
+?X: This is from perl5's perl.h
+case "$d_closedir" in
+"$define")
+ echo " "
+ echo "Checking whether closedir() returns a status..." >&4
+ cat > closedir.c <<EOM
+#$i_dirent I_DIRENT /**/
+#$i_sysdir I_SYS_DIR /**/
+#$i_sysndir I_SYS_NDIR /**/
+
+#if defined(I_DIRENT)
+#include <dirent.h>
+#if defined(NeXT) && defined(I_SYS_DIR) /* NeXT needs dirent + sys/dir.h */
+#include <sys/dir.h>
+#endif
+#else
+#ifdef I_SYS_NDIR
+#include <sys/ndir.h>
+#else
+#ifdef I_SYS_DIR
+#ifdef hp9000s500
+#include <ndir.h> /* may be wrong in the future */
+#else
+#include <sys/dir.h>
+#endif
+#endif
+#endif
+#endif
+int main() { return closedir(opendir(".")); }
+EOM
+ if $cc $ccflags -o closedir closedir.c $ldflags $libs > /dev/null 2>&1; then
+ if ./closedir > /dev/null 2>&1 ; then
+ echo "Yes, it does."
+ val="$undef"
+ else
+ echo "No, it doesn't."
+ val="$define"
+ fi
+ else
+ echo "(I can't seem to compile the test program--assuming it doesn't)"
+ val="$define"
+ fi
+ ;;
+*)
+ val="$undef";
+ ;;
+esac
+set d_void_closedir
+eval $setvar
+$rm -f closedir*
+@end
diff --git a/mcon/U/d_closefrom.U b/mcon/U/d_closefrom.U
new file mode 100644
index 0000000..5fd4942
--- /dev/null
+++ b/mcon/U/d_closefrom.U
@@ -0,0 +1,45 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 2006, Christian Biere
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:d_closefrom: Trylink cat i_unistd
+?MAKE: -pick add $@ %<
+?S:d_closefrom:
+?S: This variable conditionally defines the HAS_CLOSEFROM symbol, which
+?S: indicates to the C program that closefrom() support is available.
+?S:.
+?C:HAS_CLOSEFROM:
+?C: This symbol is defined when closefrom() can be used.
+?C:.
+?H:#$d_closefrom HAS_CLOSEFROM
+?H:.
+?LINT: set d_closefrom
+: can we use closefrom?
+$cat >try.c <<EOC
+#include <sys/types.h>
+#include <stdlib.h>
+#$i_unistd I_UNISTD
+#ifdef I_UNISTD
+#include <unistd.h>
+#endif
+int main(void)
+{
+ static const int fd = 1;
+ /*
+ * On Solaris it returns nothing
+ * On NetBSD it's equivalent to fcntl(fd, F_CLOSEM)
+ */
+ closefrom(fd);
+ return 0;
+}
+EOC
+cyn=closefrom
+set d_closefrom
+eval $trylink
+
diff --git a/mcon/U/d_const.U b/mcon/U/d_const.U
new file mode 100644
index 0000000..18afb2b
--- /dev/null
+++ b/mcon/U/d_const.U
@@ -0,0 +1,69 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_const.U,v $
+?RCS: Revision 3.0.1.1 1993/11/10 17:33:41 ram
+?RCS: patch14: stronger const check with added typedef for MIPS cc
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:05:51 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_const: cat rm cc ccflags Setvar
+?MAKE: -pick add $@ %<
+?S:d_const:
+?S: This variable conditionally defines the HASCONST symbol, which
+?S: indicates to the C program that this C compiler knows about the
+?S: const type.
+?S:.
+?C:HASCONST ~ %<:
+?C: This symbol, if defined, indicates that this C compiler knows about
+?C: the const type. There is no need to actually test for that symbol
+?C: within your programs. The mere use of the "const" keyword will
+?C: trigger the necessary tests.
+?C:.
+?H:?%<:#$d_const HASCONST /**/
+?H:?%<:#ifndef HASCONST
+?H:?%<:#define const
+?H:?%<:#endif
+?H:.
+?W:%<:const
+?F:const.c const.o
+?LINT:set d_const
+?LINT:known const
+: check for const keyword
+echo " "
+echo 'Checking to see if your C compiler knows about "const"...' >&4
+$cat >const.c <<'EOCP'
+?X: mmcg@bruce.cs.monash.edu.au reports that:
+?X: The MIPS cc compiler (V2.10) on a dec 5000 running Ultrix 4.2A
+?X: pretends to understand `const' but doesn't - it'll also fail to
+?X: handle typedefs properly if they're declared const. To guard
+?X: against this, boost up the test by using an explicit typedef...
+typedef struct spug { int drokk; } spug;
+int main(void)
+{
+ static const char *foo;
+ static const spug y;
+ (void) foo;
+ (void) y;
+ return 0;
+}
+EOCP
+if $cc -c $ccflags const.c; then
+ val="$define"
+ echo "Yup, it does."
+else
+ val="$undef"
+ echo "Nope, it doesn't."
+fi
+set d_const
+eval $setvar
+$rm -f const.c const.o
+
diff --git a/mcon/U/d_crypt.U b/mcon/U/d_crypt.U
new file mode 100644
index 0000000..abc32c2
--- /dev/null
+++ b/mcon/U/d_crypt.U
@@ -0,0 +1,82 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_crypt.U,v $
+?RCS: Revision 3.0.1.1 1997/02/28 15:31:47 ram
+?RCS: patch61: replaced .a with $_a all over the place
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:05:52 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_crypt cryptlib: Loc test xlibpth libpth Setvar _a Trylink cat i_unistd
+?MAKE: -pick add $@ %<
+?S:d_crypt:
+?S: This variable conditionally defines the CRYPT symbol, which
+?S: indicates to the C program that the crypt() routine is available
+?S: to encrypt passwords and the like.
+?S:.
+?S:cryptlib:
+?S: This variable holds -lcrypt or the path to a libcrypt.a archive if
+?S: the crypt() function is not defined in the standard C library. It is
+?S: up to the Makefile to use this.
+?S:.
+?C:HAS_CRYPT (CRYPT):
+?C: This symbol, if defined, indicates that the crypt routine is available
+?C: to encrypt passwords and the like.
+?C:.
+?H:#$d_crypt HAS_CRYPT /**/
+?H:.
+?LINT:set d_crypt
+?T:val
+: see if crypt exists
+$cat >try.c <<EOC
+#$i_unistd I_UNISTD
+#ifdef I_UNISTD
+#include <unistd.h>
+#endif
+int main(void)
+{
+ static char ret;
+ ret |= *crypt("key", "salt");
+ return ret ? 0 : 1;
+}
+EOC
+cyn=crypt
+set d_crypt -lcrypt
+eval $trylink
+
+case "$d_crypt" in
+$define) cryptlib='';;
+*)
+ cryptlib=`./loc Slibcrypt$_a "" $xlibpth`
+ if $test -z "$cryptlib"; then
+ cryptlib=`./loc Mlibcrypt$_a "" $xlibpth`
+ else
+ cryptlib=-lcrypt
+ fi
+ if $test -z "$cryptlib"; then
+ cryptlib=`./loc Llibcrypt$_a "" $xlibpth`
+ else
+ cryptlib=-lcrypt
+ fi
+ if $test -z "$cryptlib"; then
+ cryptlib=`./loc libcrypt$_a "" $libpth`
+ else
+ cryptlib=-lcrypt
+ fi
+ if $test -z "$cryptlib"; then
+ echo 'crypt() NOT found.' >&4
+ val="$undef"
+ else
+ val="$define"
+ fi
+;;
+esac
+
diff --git a/mcon/U/d_csh.U b/mcon/U/d_csh.U
new file mode 100644
index 0000000..926f833
--- /dev/null
+++ b/mcon/U/d_csh.U
@@ -0,0 +1,62 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_csh.U,v $
+?RCS: Revision 3.0.1.1 1997/02/28 15:32:18 ram
+?RCS: patch61: added full_csh to preserve the full path even when portable
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:05:53 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_csh full_csh: csh Setvar
+?MAKE: -pick add $@ %<
+?S:d_csh:
+?S: This variable conditionally defines the CSH symbol, which
+?S: indicates to the C program that the C-shell exists.
+?S:.
+?S:full_csh:
+?S: This variable contains the full pathname to 'csh', whether or
+?S: not the user has specified 'portability'. This is only used
+?S: in the compiled C program, and we assume that all systems which
+?S: can share this executable will have the same full pathname to
+?S: 'csh.'
+?S:.
+?C:HAS_CSH:
+?C: This symbol, if defined, indicates that the C-shell exists.
+?C:.
+?C:CSH:
+?C: This symbol, if defined, contains the full pathname of csh.
+?C:.
+?X: Previously, I just did $d_csh CSH "$full_csh", but that caused
+?X: problems on VMS where the config.sh extraction program changes
+?X: $undef to a real cpp undef, and they then had #undef CSH ""
+?X: which the compiler didn't like. It's easy to work around this,
+?X: so I did. --AD 3/1998.
+?X: And we don't want to define CSH if !HAS_CSH, but we don't want
+?X: those lines in config.h if they don't need CSH, so protect with ?CSH
+?X: and not ?%<. --RAM, 15/02/2004
+?H:?%<:#$d_csh HAS_CSH /**/
+?H:?CSH:#ifdef HAS_CSH
+?H:?CSH:#define CSH "$full_csh" /**/
+?H:?CSH:#endif
+?H:.
+?LINT:set d_csh
+: get csh whereabouts
+case "$csh" in
+'csh') val="$undef" ;;
+*) val="$define" ;;
+esac
+set d_csh
+eval $setvar
+: Respect a hint or command line value for full_csh.
+case "$full_csh" in
+'') full_csh=$csh ;;
+esac
+
diff --git a/mcon/U/d_ctermid.U b/mcon/U/d_ctermid.U
new file mode 100644
index 0000000..cf0a110
--- /dev/null
+++ b/mcon/U/d_ctermid.U
@@ -0,0 +1,41 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_ctermid.U,v $
+?RCS: Revision 3.0 1993/08/18 12:05:54 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_ctermid: Trylink cat
+?MAKE: -pick add $@ %<
+?S:d_ctermid:
+?S: This variable conditionally defines CTERMID if ctermid() is
+?S: available to generate filename for terminal.
+?S:.
+?C:HAS_CTERMID (CTERMID):
+?C: This symbol, if defined, indicates that the ctermid routine is
+?C: available to generate filename for terminal.
+?C:.
+?H:#$d_ctermid HAS_CTERMID /**/
+?H:.
+?LINT:set d_ctermid
+: see if ctermid exists
+$cat >try.c <<EOC
+#include <stdio.h>
+int main(void)
+{
+ static char term[L_ctermid], ret;
+ ret |= *ctermid(term);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=ctermid
+set d_ctermid
+eval $trylink
+
diff --git a/mcon/U/d_cuserid.U b/mcon/U/d_cuserid.U
new file mode 100644
index 0000000..d713ad8
--- /dev/null
+++ b/mcon/U/d_cuserid.U
@@ -0,0 +1,44 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu>
+?RCS:
+?RCS: $Log: d_cuserid.U,v $
+?RCS: Revision 3.0.1.1 1994/08/29 16:07:25 ram
+?RCS: patch32: created by ADO
+?RCS:
+?MAKE:d_cuserid: Trylink cat
+?MAKE: -pick add $@ %<
+?S:d_cuserid:
+?S: This variable conditionally defines the HAS_CUSERID symbol, which
+?S: indicates to the C program that the cuserid() routine is available
+?S: to get character login names.
+?S:.
+?C:HAS_CUSERID :
+?C: This symbol, if defined, indicates that the cuserid routine is
+?C: available to get character login names.
+?C:.
+?H:#$d_cuserid HAS_CUSERID /**/
+?H:.
+?LINT:set d_cuserid
+: see if cuserid exists
+$cat >try.c <<EOC
+#include <stdio.h>
+int main(void)
+{
+ static char user[L_cuserid], ret;
+ ret |= *cuserid(user);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=cuserid
+set d_cuserid
+eval $trylink
+
diff --git a/mcon/U/d_datastart_symbol.U b/mcon/U/d_datastart_symbol.U
new file mode 100644
index 0000000..5c24755
--- /dev/null
+++ b/mcon/U/d_datastart_symbol.U
@@ -0,0 +1,64 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 2011, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:d_datastart_symbol d_weak_datastart_symbol: Trylink cat
+?MAKE: -pick add $@ %<
+?S:d_datastart_symbol:
+?S: This variable conditionally defines HAS_DATA_START_SYMBOL if the
+?S: linker-defined symbol "__data_start" is available to compute the start
+?S: address of the program's data segment.
+?S:.
+?S:d_weak_datastart_symbol:
+?S: This variable conditionally defines HAS_WEAK_DATA_START_SYMBOL if the
+?S: linker-defined symbol "data_start" is weakly defined to compute the start
+?S: address of the program's data segment.
+?S:.
+?C:HAS_DATA_START_SYMBOL:
+?C: This symbol, if defined, indicates that the C program can declare
+?C: extern const int __data_start;
+?C: and then use &__data_start to know the start of the data segment.
+?C:.
+?C:HAS_WEAK_DATA_START_SYMBOL:
+?C: This symbol, if defined, indicates that the C program can declare
+?C: #pragma weak data_start
+?C: extern const int data_start;
+?C: and then use &data_start to know the start of the data segment.
+?C:.
+?H:#$d_datastart_symbol HAS_DATA_START_SYMBOL /**/
+?H:#$d_weak_datastart_symbol HAS_WEAK_DATA_START_SYMBOL /**/
+?H:.
+?LINT:set d_datastart_symbol d_weak_datastart_symbol
+: see if the __data_start symbol exists
+$cat >try.c <<EOC
+int main(void)
+{
+ extern int __data_start;
+ return (int) &__data_start >> 12;
+}
+EOC
+cyn="whether your linker defines the __data_start symbol"
+set d_datastart_symbol
+eval $trylink
+
+@if d_weak_datastart_symbol || HAS_WEAK_DATA_START_SYMBOL
+: see if the weak data_start symbol exists
+$cat >try.c <<EOC
+int main(void)
+{
+#pragma weak data_start
+ extern int data_start;
+ return (int) &data_start >> 12;
+}
+EOC
+cyn="whether your linker defines the weak data_start symbol"
+set d_weak_datastart_symbol
+eval $trylink
+
+@end
diff --git a/mcon/U/d_dbl_dig.U b/mcon/U/d_dbl_dig.U
new file mode 100644
index 0000000..30066cd
--- /dev/null
+++ b/mcon/U/d_dbl_dig.U
@@ -0,0 +1,61 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu>
+?RCS:
+?RCS: $Log: d_dbl_dig.U,v $
+?RCS: Revision 3.0.1.1 1994/08/29 16:07:28 ram
+?RCS: patch32: created by ADO
+?RCS:
+?MAKE:d_dbl_dig: Myread contains cat rm Setvar i_limits i_float \
+ cppstdin cppflags cppminus
+?MAKE: -pick add $@ %<
+?S:d_dbl_dig:
+?S: This variable conditionally defines d_dbl_dig if this system's
+?S: header files provide DBL_DIG, which is the number of significant
+?S: digits in a double precision number.
+?S:.
+?C:HAS_DBL_DIG:
+?C: This symbol, if defined, indicates that this system's <float.h>
+?C: or <limits.h> defines the symbol DBL_DIG, which is the number
+?C: of significant digits in a double precision number. If this
+?C: symbol is not defined, a guess of 15 is usually pretty good.
+?C:.
+?H:#$d_dbl_dig HAS_DBL_DIG /**/
+?H:.
+?F:!dbl_dig.c
+?LINT:set d_dbl_dig
+: See if number of significant digits in a double precision number is known
+echo " "
+$cat >dbl_dig.c <<EOM
+#$i_limits I_LIMITS
+#$i_float I_FLOAT
+#ifdef I_LIMITS
+#include <limits.h>
+#endif
+#ifdef I_FLOAT
+#include <float.h>
+#endif
+#ifdef DBL_DIG
+printf("Contains DBL_DIG");
+#endif
+EOM
+$cppstdin $cppflags $cppminus < dbl_dig.c >dbl_dig.E 2>/dev/null
+if $contains 'DBL_DIG' dbl_dig.E >/dev/null 2>&1; then
+ echo "DBL_DIG found." >&4
+ val="$define"
+else
+ echo "DBL_DIG NOT found." >&4
+ val="$undef"
+fi
+$rm -f dbl_dig.?
+set d_dbl_dig
+eval $setvar
+
diff --git a/mcon/U/d_debugging.U b/mcon/U/d_debugging.U
new file mode 100644
index 0000000..3aaa520
--- /dev/null
+++ b/mcon/U/d_debugging.U
@@ -0,0 +1,42 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:d_debugging: Myread Setvar spackage cat
+?MAKE: -pick add $@ %<
+?S:d_debugging:
+?S: This variable conditionally defines the DEBUGGING symbol.
+?S:.
+?C:DEBUGGING:
+?C: This symbol, when defined, activates extra debugging.
+?C:.
+?H:#$d_debugging DEBUGGING
+?H:.
+?LINT:set d_debugging
+: see whether debugging should be turned on
+$cat <<EOM
+
+$spackage comes with a debugging option. Enabling that option will
+compile extra debugging code that may slow-down the execution and/or
+bloat the size of the executable by a significant amount.
+
+EOM
+case "$d_debugging" in
+"$define") dflt=y;;
+*) dflt=n;;
+esac
+rp='Enable extra debugging code'
+. ./myread
+val="$undef"
+case "$ans" in
+y|Y) val="$define";;
+esac
+set d_debugging
+eval $setvar
+
diff --git a/mcon/U/d_deflate.U b/mcon/U/d_deflate.U
new file mode 100644
index 0000000..604d820
--- /dev/null
+++ b/mcon/U/d_deflate.U
@@ -0,0 +1,42 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 2006, Christian Biere
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:d_deflate: Trylink cat
+?MAKE: -pick add $@ %<
+?S:d_deflate:
+?S: This variable conditionally defines the HAS_DEFLATE symbol, which
+?S: indicates to the C program that the deflate() routine from zlib is
+?S: available.
+?S:.
+?C:HAS_DEFLATE:
+?C: This symbol, if defined, indicates that the zlib deflate() routine is
+?C: available.
+?C:.
+?H:#$d_deflate HAS_DEFLATE /**/
+?H:.
+?LINT:set d_deflate
+: see if deflate exists
+$cat >try.c <<EOC
+#include <zlib.h>
+int main(void)
+{
+ static int ret, flush;
+ static z_stream zs;
+ flush |= Z_FULL_FLUSH;
+ flush |= Z_SYNC_FLUSH;
+ flush |= Z_FINISH;
+ ret |= deflate(&zs, flush);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=deflate
+set d_deflate '-lz'
+eval $trylink
+
diff --git a/mcon/U/d_devpoll.U b/mcon/U/d_devpoll.U
new file mode 100644
index 0000000..1731a3c
--- /dev/null
+++ b/mcon/U/d_devpoll.U
@@ -0,0 +1,52 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 2006, Christian Biere
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:d_dev_poll: Trylink cat
+?MAKE: -pick add $@ %<
+?S:d_dev_poll:
+?S: This variable conditionally defines the HAS_DEV_POLL symbol, which
+?S: indicates to the C program that /dev/poll support is available.
+?S:.
+?C:HAS_DEV_POLL:
+?C: This symbol is defined when /dev/poll can be used.
+?C:.
+?H:#$d_dev_poll HAS_DEV_POLL
+?H:.
+?LINT: set d_dev_poll
+: can we use /dev/poll?
+$cat >try.c <<EOC
+#include <poll.h>
+#include <stropts.h>
+#include <sys/devpoll.h>
+int main(void)
+{
+ static struct pollfd pfd;
+ static struct dvpoll dvp;
+ static int ret;
+ pfd.fd |= 1;
+ pfd.events |= POLLIN;
+ pfd.events |= POLLPRI;
+ pfd.events |= POLLOUT;
+ pfd.events |= POLLHUP;
+ pfd.events |= POLLERR;
+ pfd.events |= POLLNVAL;
+ pfd.events |= POLLREMOVE;
+ pfd.revents |= 1;
+ dvp.dp_timeout |= 1;
+ dvp.dp_nfds |= 1;
+ dvp.dp_fds = &pfd;
+ ret |= ioctl(1, DP_POLL, &dvp);
+ return 0 != ret;
+}
+EOC
+cyn="whether /dev/poll can be used"
+set d_dev_poll
+eval $trylink
+
diff --git a/mcon/U/d_difftime.U b/mcon/U/d_difftime.U
new file mode 100644
index 0000000..82ddb21
--- /dev/null
+++ b/mcon/U/d_difftime.U
@@ -0,0 +1,80 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, 2013 Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu>
+?RCS:
+?MAKE:d_difftime use_difftime: Assert Trylink cat
+?MAKE: -pick add $@ %<
+?S:d_difftime:
+?S: This variable conditionally defines the HAS_DIFFTIME symbol, which
+?S: indicates to the C program that the difftime() routine is available.
+?S:.
+?S:use_difftime:
+?S: This variable conditionally defines the USE_DIFFTIME symbol, which
+?S: indicates to the C program that the difftime() routine should be
+?S: used to compare times.
+?S:.
+?C:HAS_DIFFTIME :
+?C: This symbol, if defined, indicates that the difftime routine is
+?C: available.
+?C:.
+?C:USE_DIFFTIME :
+?C: This symbol, if defined, indicates that the difftime routine should
+?C: really be used to compare times.
+?C:.
+?H:#$d_difftime HAS_DIFFTIME /**/
+?H:#$use_difftime USE_DIFFTIME /**/
+?H:.
+?LINT:set d_difftime use_difftime
+?T:avoid_difftime
+: see if difftime exists
+$cat >try.c <<EOC
+#include <time.h>
+int main(void)
+{
+ static double ret;
+ static time_t t0, t1;
+ ret = difftime(t1, t0) * 1.0;
+ return ret ? 0 : 1;
+}
+EOC
+cyn=difftime
+set d_difftime
+eval $trylink
+
+@if USE_DIFFTIME || use_difftime
+: see whether difftime should be used
+case "$d_difftime" in
+"$define")
+ $cat >try.c <<EOC
+#include "static_assert.h"
+#include <time.h>
+int main(void)
+{
+?X: If time_t is not a signed integer type, we cannot calculate properly
+?X: with the raw values. Define USE_DIFFTIME when this does not compile.
+ STATIC_ASSERT((time_t) -1 < 0);
+ return 0;
+}
+EOC
+ cyn="whether difftime() can be avoided"
+ set avoid_difftime
+ eval $trylink
+ ;;
+*) avoid_difftime="$define";;
+esac
+case "$avoid_difftime" in
+"$define") val="$undef";;
+*) val="$define";;
+esac
+set use_difftime
+eval $setvar
+
+@end
diff --git a/mcon/U/d_dirent_d_namlen.U b/mcon/U/d_dirent_d_namlen.U
new file mode 100644
index 0000000..00fdfb2
--- /dev/null
+++ b/mcon/U/d_dirent_d_namlen.U
@@ -0,0 +1,42 @@
+?RCS:
+?RCS: Copyright (c) 2015 Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:d_dirent_d_namlen: Trylink cat i_dirent
+?MAKE: -pick add $@ %<
+?S:d_dirent_d_namlen:
+?S: This variable conditionally defines the HAS_DIRENT_D_NAMLEN symbol,
+?S: which indicates to the C program that struct dirent has an
+?S: integer member d_namlen. Better check for HAS_DIRENT_D_NAMLEN than
+?S: DIRNAMLEN since the latter has a weaker test not involving compilation.
+?S:.
+?C:HAS_DIRENT_D_NAMLEN:
+?C: This symbol, if defined, indicates that struct dirent has an
+?C: integer member d_namlen to hold the actual string length of d_name.
+?C:.
+?H:#$d_dirent_d_namlen HAS_DIRENT_D_NAMLEN /**/
+?H:.
+?LINT:set d_dirent_d_namlen
+: check whether struct dirent has a member d_namlen.
+$cat >try.c <<EOC
+#include <sys/types.h>
+#$i_dirent I_DIRENT
+#ifdef I_DIRENT
+#include <dirent.h>
+#endif
+int main(void)
+{
+ static struct dirent dir_entry;
+ dir_entry.d_namlen |= 1;
+ return 0;
+}
+EOC
+cyn="whether struct dirent has a d_namlen member"
+set d_dirent_d_namlen
+eval $trylink
+
diff --git a/mcon/U/d_dirent_d_type.U b/mcon/U/d_dirent_d_type.U
new file mode 100644
index 0000000..431d299
--- /dev/null
+++ b/mcon/U/d_dirent_d_type.U
@@ -0,0 +1,52 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 2006, Christian Biere
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:d_dirent_d_type: Trylink cat i_dirent
+?MAKE: -pick add $@ %<
+?S:d_dirent_d_type:
+?S: This variable conditionally defines the HAS_DIRENT_D_TYPE symbol,
+?S: which indicates to the C program that struct dirent has an
+?S: integer member d_type.
+?S:.
+?C:HAS_DIRENT_D_TYPE:
+?C: This symbol, if defined, indicates that struct dirent has an
+?C: integer member d_type. Note that DT_WHT is BSD-specific and may
+?C: not be available. If DT_UNKNOWN is returned, the filesystem does
+?C: not fill d_type even though it is present in the dir entry.
+?C:.
+?H:#$d_dirent_d_type HAS_DIRENT_D_TYPE /**/
+?H:.
+?LINT:set d_dirent_d_type
+: check whether struct dirent has a member d_type.
+$cat >try.c <<EOC
+#include <sys/types.h>
+#$i_dirent I_DIRENT
+#ifdef I_DIRENT
+#include <dirent.h>
+#endif
+int main(void)
+{
+ static struct dirent dir_entry;
+ dir_entry.d_type |= 1
+ | DT_UNKNOWN
+ | DT_FIFO
+ | DT_CHR
+ | DT_DIR
+ | DT_BLK
+ | DT_REG
+ | DT_LNK
+ | DT_SOCK;
+ return 0;
+}
+EOC
+cyn="whether struct dirent has a d_type member"
+set d_dirent_d_type
+eval $trylink
+
diff --git a/mcon/U/d_dirfd.U b/mcon/U/d_dirfd.U
new file mode 100644
index 0000000..3e64671
--- /dev/null
+++ b/mcon/U/d_dirfd.U
@@ -0,0 +1,42 @@
+?RCS:
+?RCS: Copyright (c) 2015 Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:d_dirfd: Trylink cat i_dirent
+?MAKE: -pick add $@ %<
+?S:d_dirfd:
+?S: This variable conditionally defines HAS_DIRFD when dirfd() is
+?S: available to get the underlying file descriptor from opendir().
+?S:.
+?C:HAS_DIRFD:
+?C: This symbol, if defined, indicates that the dirfd() routine is
+?C: available to get the underlying file descriptor from a DIR *
+?C: opened by opendir().
+?C:.
+?H:#$d_dirfd HAS_DIRFD /**/
+?H:.
+?LINT:set d_dirfd
+: see if dirfd exists
+$cat >try.c <<EOC
+#include <sys/types.h>
+#$i_dirent I_DIRENT
+#ifdef I_DIRENT
+#include <dirent.h>
+#endif
+int main(void)
+{
+ static DIR *dir;
+ static int ret;
+ ret = dirfd(dir);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=dirfd
+set d_dirfd
+eval $trylink
+
diff --git a/mcon/U/d_dladdr.U b/mcon/U/d_dladdr.U
new file mode 100644
index 0000000..d0e2d8d
--- /dev/null
+++ b/mcon/U/d_dladdr.U
@@ -0,0 +1,42 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 2012 Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:d_dladdr: Trylink cat i_dlfcn
+?MAKE: -pick add $@ %<
+?S:d_dladdr:
+?S: This variable conditionally defines the HAS_DLADDR symbol, which
+?S: indicates to the C program that the dladdr() routine is available.
+?S:.
+?C:HAS_DLADDR :
+?C: This symbol, if defined, indicates that the dladdr() routine is
+?C: available to query the dynamic linker about a specified address.
+?C:.
+?H:#$d_dladdr HAS_DLADDR /**/
+?H:.
+?LINT:set d_dladdr
+: see if dladdr exists
+$cat >try.c <<EOC
+#$i_dlfcn I_DLFCN
+#define _GNU_SOURCE
+#ifdef I_DLFCN
+#include <dlfcn.h>
+#endif
+int main(void)
+{
+ Dl_info info;
+
+ dladdr(main, &info);
+ return info.dli_fbase != 0;
+}
+EOC
+cyn=dladdr
+set d_dladdr '-ldl'
+eval $trylink
+
diff --git a/mcon/U/d_dlerror.U b/mcon/U/d_dlerror.U
new file mode 100644
index 0000000..72a7c7f
--- /dev/null
+++ b/mcon/U/d_dlerror.U
@@ -0,0 +1,50 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu>
+?RCS:
+?RCS: $Log: d_dlerror.U,v $
+?RCS: Revision 3.0.1.2 1995/07/25 13:52:49 ram
+?RCS: patch56: force compile-link test since symbol might lie in crt0.o (ADO)
+?RCS:
+?RCS: Revision 3.0.1.1 1994/10/29 16:11:23 ram
+?RCS: patch36: created by ADO
+?RCS:
+?MAKE:d_dlerror: Trylink cat i_dlfcn
+?MAKE: -pick add $@ %<
+?S:d_dlerror:
+?S: This variable conditionally defines the HAS_DLERROR symbol, which
+?S: indicates to the C program that the dlerror() routine is available.
+?S:.
+?C:HAS_DLERROR :
+?C: This symbol, if defined, indicates that the dlerror routine is
+?C: available to return a string describing the last error that
+?C: occurred from a call to dlopen(), dlclose() or dlsym().
+?C:.
+?H:#$d_dlerror HAS_DLERROR /**/
+?H:.
+?LINT:set d_dlerror
+: see if dlerror exists
+$cat >try.c <<EOC
+#$i_dlfcn I_DLFCN
+#ifdef I_DLFCN
+#include <dlfcn.h>
+#endif
+int main(void)
+{
+ static char ret;
+ ret |= *dlerror();
+ return ret ? 0 : 1;
+}
+EOC
+cyn=dlerror
+set d_dlerror '-ldl'
+eval $trylink
+
diff --git a/mcon/U/d_dliterphdr.U b/mcon/U/d_dliterphdr.U
new file mode 100644
index 0000000..fd6e2b7
--- /dev/null
+++ b/mcon/U/d_dliterphdr.U
@@ -0,0 +1,44 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 2012, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:d_dliterphdr: Trylink cat
+?MAKE: -pick add $@ %<
+?S:d_dliterphdr:
+?S: This variable conditionally defines HAS_DL_ITERATE_PHDR when
+?S: dl_iterate_phdr() is available to walk through the list of shared
+?S: objects.
+?S:.
+?C:HAS_DL_ITERATE_PHDR:
+?C: This symbol, if defined, indicates that the dl_iterate_phdr() function is
+?C: available to walk through the list of shared objects. One needs to
+?C: define _GNU_SOURCE before including <link.h> to get the proper signature.
+?C:.
+?H:#$d_dliterphdr HAS_DL_ITERATE_PHDR /**/
+?H:.
+?LINT:set d_dliterphdr
+: see if dl_iterate_phdr exists
+$cat >try.c <<EOC
+#define _GNU_SOURCE
+#include <link.h>
+int cb(struct dl_phdr_info *info, size_t size, void *data)
+{
+ return NULL == info && NULL == data && size != 0 ? 0 : 1;
+}
+int main(void)
+{
+ int ret;
+ ret = dl_iterate_phdr(cb, NULL);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=dl_iterate_phdr
+set d_dliterphdr
+eval $trylink
+
diff --git a/mcon/U/d_dlopen.U b/mcon/U/d_dlopen.U
new file mode 100644
index 0000000..216789b
--- /dev/null
+++ b/mcon/U/d_dlopen.U
@@ -0,0 +1,49 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu>
+?RCS:
+?RCS: $Log: d_dlopen.U,v $
+?RCS: Revision 3.0.1.2 1995/07/25 13:52:56 ram
+?RCS: patch56: force compile-link test since symbol might lie in crt0.o (ADO)
+?RCS:
+?RCS: Revision 3.0.1.1 1994/08/29 16:07:34 ram
+?RCS: patch32: created by ADO
+?RCS:
+?MAKE:d_dlopen: Trylink cat i_dlfcn
+?MAKE: -pick add $@ %<
+?S:d_dlopen:
+?S: This variable conditionally defines the HAS_DLOPEN symbol, which
+?S: indicates to the C program that the dlopen() routine is available.
+?S:.
+?C:HAS_DLOPEN :
+?C: This symbol, if defined, indicates that the dlopen routine is
+?C: available.
+?C:.
+?H:#$d_dlopen HAS_DLOPEN /**/
+?H:.
+?LINT:set d_dlopen
+: see if dlopen exists
+$cat >try.c <<EOC
+#$i_dlfcn I_DLFCN
+#ifdef I_DLFCN
+#include <dlfcn.h>
+#endif
+int main(void)
+{
+ void *p;
+ p = dlopen("file", RTLD_GLOBAL);
+ return p ? 0 : 1;
+}
+EOC
+cyn=dlopen
+set d_dlopen '-ldl'
+eval $trylink
+
diff --git a/mcon/U/d_dosuid.U b/mcon/U/d_dosuid.U
new file mode 100644
index 0000000..1e82270
--- /dev/null
+++ b/mcon/U/d_dosuid.U
@@ -0,0 +1,169 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Tye McQueen <tye@metronet.com> added safe setuid script checks.
+?RCS:
+?RCS: $Log: d_dosuid.U,v $
+?RCS: Revision 3.0.1.2 1997/02/28 15:33:03 ram
+?RCS: patch61: moved unit to TOP via a ?Y: layout directive
+?RCS: patch61: tell them /dev/fd is not about floppy disks
+?RCS:
+?RCS: Revision 3.0.1.1 1994/10/29 16:12:08 ram
+?RCS: patch36: added checks for secure setuid scripts (Tye McQueen)
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:05:55 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_dosuid d_suidsafe: cat contains ls rm test Myread Setvar \
+ Oldconfig Guess package hint
+?MAKE: -pick add $@ %<
+?S:d_suidsafe:
+?S: This variable conditionally defines SETUID_SCRIPTS_ARE_SECURE_NOW
+?S: if setuid scripts can be secure. This test looks in /dev/fd/.
+?S:.
+?S:d_dosuid:
+?S: This variable conditionally defines the symbol DOSUID, which
+?S: tells the C program that it should insert setuid emulation code
+?S: on hosts which have setuid #! scripts disabled.
+?S:.
+?C:SETUID_SCRIPTS_ARE_SECURE_NOW:
+?C: This symbol, if defined, indicates that the bug that prevents
+?C: setuid scripts from being secure is not present in this kernel.
+?C:.
+?C:DOSUID:
+?C: This symbol, if defined, indicates that the C program should
+?C: check the script that it is executing for setuid/setgid bits, and
+?C: attempt to emulate setuid/setgid on systems that have disabled
+?C: setuid #! scripts because the kernel can't do it securely.
+?C: It is up to the package designer to make sure that this emulation
+?C: is done securely. Among other things, it should do an fstat on
+?C: the script it just opened to make sure it really is a setuid/setgid
+?C: script, it should make sure the arguments passed correspond exactly
+?C: to the argument on the #! line, and it should not trust any
+?C: subprocesses to which it must pass the filename rather than the
+?C: file descriptor of the script to be executed.
+?C:.
+?H:#$d_suidsafe SETUID_SCRIPTS_ARE_SECURE_NOW /**/
+?H:#$d_dosuid DOSUID /**/
+?H:.
+?Y:TOP
+?F:!reflect
+?LINT: set d_suidsafe
+?LINT: set d_dosuid
+: see if setuid scripts can be secure
+$cat <<EOM
+
+Some kernels have a bug that prevents setuid #! scripts from being
+secure. Some sites have disabled setuid #! scripts because of this.
+
+First let's decide if your kernel supports secure setuid #! scripts.
+(If setuid #! scripts would be secure but have been disabled anyway,
+don't say that they are secure if asked.)
+
+EOM
+
+val="$undef"
+if $test -d /dev/fd; then
+ echo "#!$ls" >reflect
+ chmod +x,u+s reflect
+ ./reflect >flect 2>&1
+ if $contains "/dev/fd" flect >/dev/null; then
+ echo "Congratulations, your kernel has secure setuid scripts!" >&4
+ val="$define"
+ else
+ $cat <<EOM
+If you are not sure if they are secure, I can check but I'll need a
+username and password different from the one you are using right now.
+If you don't have such a username or don't want me to test, simply
+enter 'none'.
+
+EOM
+ rp='Other username to test security of setuid scripts with?'
+ dflt='none'
+ . ./myread
+ case "$ans" in
+ n|none)
+ case "$d_suidsafe" in
+ '') echo "I'll assume setuid scripts are *not* secure." >&4
+ dflt=n;;
+ "$undef")
+ echo "Well, the $hint value is *not* secure." >&4
+ dflt=n;;
+ *) echo "Well, the $hint value *is* secure." >&4
+ dflt=y;;
+ esac
+ ;;
+ *)
+ $rm -f reflect flect
+ echo "#!$ls" >reflect
+ chmod +x,u+s reflect
+ echo >flect
+ chmod a+w flect
+ echo '"su" will (probably) prompt you for '"$ans's password."
+ su $ans -c './reflect >flect'
+ if $contains "/dev/fd" flect >/dev/null; then
+ echo "Okay, it looks like setuid scripts are secure." >&4
+ dflt=y
+ else
+ echo "I don't think setuid scripts are secure." >&4
+ dflt=n
+ fi
+ ;;
+ esac
+ rp='Does your kernel have *secure* setuid scripts?'
+ . ./myread
+ case "$ans" in
+ [yY]*) val="$define";;
+ *) val="$undef";;
+ esac
+ fi
+else
+ echo "I don't think setuid scripts are secure (no /dev/fd directory)." >&4
+ echo "(That's for file descriptors, not floppy disks.)"
+ val="$undef"
+fi
+set d_suidsafe
+eval $setvar
+
+$rm -f reflect flect
+
+: now see if they want to do setuid emulation
+echo " "
+val="$undef"
+case "$d_suidsafe" in
+"$define")
+ val="$undef"
+ echo "No need to emulate SUID scripts since they are secure here." >& 4
+ ;;
+*)
+ $cat <<EOM
+Some systems have disabled setuid scripts, especially systems where
+setuid scripts cannot be secure. On systems where setuid scripts have
+been disabled, the setuid/setgid bits on scripts are currently
+useless. It is possible for $package to detect those bits and emulate
+setuid/setgid in a secure fashion. This emulation will only work if
+setuid scripts have been disabled in your kernel.
+
+EOM
+ case "$d_dosuid" in
+ "$define") dflt=y ;;
+ *) dflt=n ;;
+ esac
+ rp="Do you want to do setuid/setgid emulation?"
+ . ./myread
+ case "$ans" in
+ [yY]*) val="$define";;
+ *) val="$undef";;
+ esac
+ ;;
+esac
+set d_dosuid
+eval $setvar
+
diff --git a/mcon/U/d_drem.U b/mcon/U/d_drem.U
new file mode 100644
index 0000000..53fa8c7
--- /dev/null
+++ b/mcon/U/d_drem.U
@@ -0,0 +1,45 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu>
+?RCS:
+?RCS: $Log: d_drem.U,v $
+?RCS: Revision 3.0.1.1 1994/10/29 16:12:14 ram
+?RCS: patch36: created by ADO
+?RCS:
+?MAKE:d_drem: Trylink cat
+?MAKE: -pick add $@ %<
+?S:d_drem:
+?S: This variable conditionally defines the HAS_DREM symbol, which
+?S: indicates to the C program that the drem() routine is available.
+?S:.
+?C:HAS_DREM :
+?C: This symbol, if defined, indicates that the drem routine is
+?C: available. This routine is roughly the same as fmod, i.e. it
+?C: computes the remainder r=x-n*y, where n=rint(x/y), whereas fmod
+?C: uses n=trunc(x/y).
+?C:.
+?H:#$d_drem HAS_DREM /**/
+?H:.
+?LINT:set d_drem
+: see if drem exists
+$cat >try.c <<EOC
+#include <math.h>
+int main(void)
+{
+ static double x, y, ret;
+ ret = 1.0 * drem(x, y);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=drem
+set d_drem '-lm'
+eval $trylink
+
diff --git a/mcon/U/d_dup2.U b/mcon/U/d_dup2.U
new file mode 100644
index 0000000..f807297
--- /dev/null
+++ b/mcon/U/d_dup2.U
@@ -0,0 +1,44 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_dup2.U,v $
+?RCS: Revision 3.0 1993/08/18 12:05:56 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_dup2: Trylink cat i_unistd
+?MAKE: -pick add $@ %<
+?S:d_dup2:
+?S: This variable conditionally defines HAS_DUP2 if dup2() is
+?S: available to duplicate file descriptors.
+?S:.
+?C:HAS_DUP2 (DUP2):
+?C: This symbol, if defined, indicates that the dup2 routine is
+?C: available to duplicate file descriptors.
+?C:.
+?H:#$d_dup2 HAS_DUP2 /**/
+?H:.
+?LINT:set d_dup2
+: see if dup2 exists
+$cat >try.c <<EOC
+#$i_unistd I_UNISTD
+#ifdef I_UNISTD
+#include <unistd.h>
+#endif
+int main(void)
+{
+ static int fd1, fd2, ret;
+ ret |= dup2(fd1, fd2);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=dup2
+set d_dup2
+eval $trylink
+
diff --git a/mcon/U/d_end_symbol.U b/mcon/U/d_end_symbol.U
new file mode 100644
index 0000000..1a46ec2
--- /dev/null
+++ b/mcon/U/d_end_symbol.U
@@ -0,0 +1,37 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 2011, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:d_end_symbol: Trylink cat
+?MAKE: -pick add $@ %<
+?S:d_end_symbol:
+?S: This variable conditionally defines HAS_END_SYMBOL if the
+?S: linker-defined symbol "end" is available to compute the end
+?S: address of the program's BSS segment.
+?S:.
+?C:HAS_END_SYMBOL:
+?C: This symbol, if defined, indicates that the C program can declare
+?C: extern const int end;
+?C: and then use &end to know the end of the BSS segment.
+?C:.
+?H:#$d_end_symbol HAS_END_SYMBOL /**/
+?H:.
+?LINT:set d_end_symbol
+: see if the end symbol exists
+$cat >try.c <<EOC
+int main(void)
+{
+ extern int end;
+ return (int) &end >> 12;
+}
+EOC
+cyn="whether your linker defines the end symbol"
+set d_end_symbol
+eval $trylink
+
diff --git a/mcon/U/d_eofpipe.U b/mcon/U/d_eofpipe.U
new file mode 100644
index 0000000..c516ba3
--- /dev/null
+++ b/mcon/U/d_eofpipe.U
@@ -0,0 +1,93 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_eofpipe.U,v $
+?RCS: Revision 3.0.1.1 1994/10/29 16:12:40 ram
+?RCS: patch36: call ./bsd explicitly instead of relying on PATH
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:05:57 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_eofpipe: cat +cc +ccflags +libs rm Oldconfig Guess echo n c
+?MAKE: -pick add $@ %<
+?S:d_eofpipe:
+?S: This variable conditionally defines the EOFPIPE symbol, which
+?S: indicates to the C program that select will correctly detect the EOF
+?S: condition when pipe is closed from the other end.
+?S:.
+?C:EOFPIPE:
+?C: This symbol, if defined, indicates that EOF condition will be detected
+?C: by the reader of the pipe when it is closed by the writing process.
+?C: That is, a select() call on that file descriptor will not block when
+?C: only an EOF remains (typical behaviour for BSD systems).
+?C:.
+?H:#$d_eofpipe EOFPIPE /**/
+?H:.
+?F:!mpipe
+: see if pipe correctly gives the EOF condition
+echo " "
+case "$d_eofpipe" in
+'')
+ echo "Let's see if your pipes return EOF to select() upon closing..." >&4
+ $cat >pipe.c <<'EOP'
+int main()
+{
+ int pd[2];
+ int mask;
+
+ pipe(pd);
+ if (0 == fork()) {
+ close(pd[0]);
+ close(pd[1]);
+ exit(0);
+ }
+
+ close(pd[1]);
+ mask = 1 << pd[0];
+ alarm(2);
+ select(32, &mask, (int *) 0, (int *) 0, (char *) 0);
+ if (0 == read(pd[0], &mask, 1))
+ exit(0);
+
+ exit(1);
+}
+EOP
+ if $cc $ccflags -o pipe pipe.c $libs >/dev/null 2>&1; then
+?X: Use a script to avoid the possible 'alarm call' message
+ echo "./pipe || exit 1" > mpipe
+ chmod +x mpipe
+ ./mpipe >/dev/null 2>&1
+ case $? in
+ 0) d_eofpipe="$define";;
+ *) d_eofpipe="$undef";;
+ esac
+ else
+ echo "(The test program did not compile correctly -- Guessing.)"
+ if ./bsd; then
+ d_eofpipe="$define"
+ else
+ d_eofpipe="$undef"
+ fi
+ fi
+ case "$d_eofpipe" in
+ "$define") echo "Yes, they do.";;
+ *) echo "No, they don't! (sigh)";;
+ esac
+ ;;
+*)
+ $echo $n "Your pipes $c"
+ case "$d_eofpipe" in
+ "$define") echo "allow select() to see EOF upon closing.";;
+ *) echo "won't let select() see EOF on closing.";;
+ esac
+ ;;
+esac
+$rm -f *pipe* core
+
diff --git a/mcon/U/d_epoll.U b/mcon/U/d_epoll.U
new file mode 100644
index 0000000..e039a0d
--- /dev/null
+++ b/mcon/U/d_epoll.U
@@ -0,0 +1,51 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 2006, Christian Biere
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:d_epoll: Trylink cat
+?MAKE: -pick add $@ %<
+?S:d_epoll:
+?S: This variable conditionally defines the HAS_EPOLL symbol, which
+?S: indicates to the C program that epoll() support is available.
+?S:.
+?C:HAS_EPOLL:
+?C: This symbol is defined when epoll() can be used.
+?C:.
+?H:#$d_epoll HAS_EPOLL
+?H:.
+?LINT: set d_epoll
+: can we use epoll?
+$cat >try.c <<EOC
+#include <sys/types.h>
+#include <sys/epoll.h>
+int main(void)
+{
+ static struct epoll_event ev;
+ static int ret, epfd;
+ epfd |= epoll_create(1);
+ ev.events |= EPOLLOUT;
+ ev.events |= EPOLLPRI;
+ ev.events |= EPOLLERR;
+ ev.events |= EPOLLHUP;
+ ev.events |= EPOLLET;
+ ev.data.ptr = (void *) 0;
+ ev.data.fd |= 1;
+ ev.data.u32 |= 1;
+ ev.data.u64 |= 1;
+ ret |= epoll_ctl(epfd, 1, EPOLL_CTL_ADD, &ev);
+ ret |= epoll_ctl(epfd, 1, EPOLL_CTL_MOD, &ev);
+ ret |= epoll_ctl(epfd, 1, EPOLL_CTL_DEL, &ev);
+ ret |= epoll_wait(epfd, &ev, 1, -1);
+ return 0 != ret;
+}
+EOC
+cyn="whether epoll support is available"
+set d_epoll
+eval $trylink
+
diff --git a/mcon/U/d_etext_symbol.U b/mcon/U/d_etext_symbol.U
new file mode 100644
index 0000000..076d016
--- /dev/null
+++ b/mcon/U/d_etext_symbol.U
@@ -0,0 +1,37 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 2011, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:d_etext_symbol: Trylink cat
+?MAKE: -pick add $@ %<
+?S:d_etext_symbol:
+?S: This variable conditionally defines HAS_ETEXT_SYMBOL if the
+?S: linker-defined symbol "etext" is available to compute the end
+?S: address of the program's text segment.
+?S:.
+?C:HAS_ETEXT_SYMBOL:
+?C: This symbol, if defined, indicates that the C program can declare
+?C: extern const int etext;
+?C: and then use &etext to know the end of the text segment.
+?C:.
+?H:#$d_etext_symbol HAS_ETEXT_SYMBOL /**/
+?H:.
+?LINT:set d_etext_symbol
+: see if the etext symbol exists
+$cat >try.c <<EOC
+int main(void)
+{
+ extern int etext;
+ return (int) &etext >> 12;
+}
+EOC
+cyn="whether your linker defines the etext symbol"
+set d_etext_symbol
+eval $trylink
+
diff --git a/mcon/U/d_euc2jis.U b/mcon/U/d_euc2jis.U
new file mode 100644
index 0000000..b1e11aa
--- /dev/null
+++ b/mcon/U/d_euc2jis.U
@@ -0,0 +1,32 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_euc2jis.U,v $
+?RCS: Revision 3.0 1993/08/18 12:05:58 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_euc2jis: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_euc2jis:
+?S: This variable conditionally defines the HAS_EUC2JIS symbol, which
+?S: indicates to the C program that the euc2jis() routine is available
+?S: to convert EUC to JIS.
+?S:.
+?C:HAS_EUC2JIS:
+?C: This symbol, if defined, indicates that the euc2jis routine is
+?C: available to convert EUC to JIS.
+?C:.
+?H:#$d_euc2jis HAS_EUC2JIS /**/
+?H:.
+?LINT:set d_euc2jis
+: see if euc2jis exists
+set euc2jis d_euc2jis
+eval $inlibc
+
diff --git a/mcon/U/d_fast_assert.U b/mcon/U/d_fast_assert.U
new file mode 100644
index 0000000..dba5132
--- /dev/null
+++ b/mcon/U/d_fast_assert.U
@@ -0,0 +1,85 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 2006, Christian Biere
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:d_fast_assert: Myread Setvar cat gccversion spackage \
+ sed +ccflags +cc +ldflags +optimize
+?MAKE: -pick add $@ %<
+?S:d_fast_assert:
+?S: This variable conditionally defines FAST_ASSERTIONS.
+?S:.
+?C:FAST_ASSERTIONS:
+?C: This symbol, when defined, indicates that the program should make
+?C: use of its own asserting and failure reporting code, instead of
+?C: the one from GLib.
+?C:.
+?H:#$d_fast_assert FAST_ASSERTIONS /**/
+?H:.
+?F:!try.c !try
+?LINT:set d_fast_assert
+?LINT:change ccflags
+: determine whether to enable fast assertions
+echo " "
+case "$d_fast_assert" in
+"$undef")
+ dflt=n;;
+*)
+ dflt=y;;
+esac
+$cat <<EOM
+$spackage contains code called "fast assertions" which are lightweight
+assertions in terms of code space used. They use much less code than
+their GLib counterpart, and therefore should be more efficient.
+
+EOM
+rp='Shall I enable "fast assertions"'
+. ./myread
+case "$ans" in
+y) val="$define";;
+*) val="$undef";;
+esac
+set d_fast_assert
+eval $setvar
+?X: When gcc is used, see whether we can use -momit-leaf-frame-pointer
+?X: This is useful for tail routines containing assertions if they use
+?X: "fast assertions", given that the code is not calling any routine.
+case "$gccversion" in
+'') ;;
+*)
+ case "$d_fast_assert" in
+ "$define")
+ $cat >try.c <<'EOC'
+int main()
+{
+ return 0;
+}
+EOC
+ if $cc $ccflags -momit-leaf-frame-pointer $ldflags -o try try.c >/dev/null 2>&1
+ then
+ case "$ccflags $optimize" in
+ *-momit-leaf-frame-pointer*) ;;
+ *-O0*) ;;
+ *-O*)
+ ccflags="-momit-leaf-frame-pointer $ccflags"
+ echo "Added -momit-leaf-frame-pointer to the cc flags." >&4
+ ;;
+ esac
+ else
+ case "$ccflags" in
+ *-momit-leaf-frame-pointer*)
+ echo "Stripping -momit-leaf-frame-pointer from cc flags." >&4
+ ccflags=`echo $ccflags | $sed 's/ *-momit-leaf-frame-pointer//'`
+ ;;
+ esac
+ fi
+ ;;
+ esac
+;;
+esac
+
diff --git a/mcon/U/d_fchdir.U b/mcon/U/d_fchdir.U
new file mode 100644
index 0000000..382971d
--- /dev/null
+++ b/mcon/U/d_fchdir.U
@@ -0,0 +1,40 @@
+?RCS:
+?RCS: Copyright (c) 2015 Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:d_fchdir: Trylink cat i_unistd
+?MAKE: -pick add $@ %<
+?S:d_fchdir:
+?S: This variable conditionally defines HAS_FCHDIR if fchdir() is
+?S: available to change the directory to that of an opened directory.
+?S:.
+?C:HAS_FCHDIR:
+?C: This symbol, if defined, indicates that the fchdir routine is
+?C: available to change the working directory to that of the opened
+?C: directory whose file descriptor is given.
+?C:.
+?H:#$d_fchdir HAS_FCHDIR /**/
+?H:.
+?LINT:set d_fchdir
+: see if fchdir exists
+$cat >try.c <<EOC
+#$i_unistd I_UNISTD
+#ifdef I_UNISTD
+#include <unistd.h>
+#endif
+int main(void)
+{
+ static int fd, ret;
+ ret |= fchdir(fd);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=fchdir
+set d_fchdir
+eval $trylink
+
diff --git a/mcon/U/d_fchmod.U b/mcon/U/d_fchmod.U
new file mode 100644
index 0000000..367b216
--- /dev/null
+++ b/mcon/U/d_fchmod.U
@@ -0,0 +1,47 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_fchmod.U,v $
+?RCS: Revision 3.0 1993/08/18 12:05:59 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_fchmod: Trylink cat i_sysstat
+?MAKE: -pick add $@ %<
+?S:d_fchmod:
+?S: This variable conditionally defines the HAS_FCHMOD symbol, which
+?S: indicates to the C program that the fchmod() routine is available
+?S: to change mode of opened files.
+?S:.
+?C:HAS_FCHMOD (FCHMOD):
+?C: This symbol, if defined, indicates that the fchmod routine is available
+?C: to change mode of opened files. If unavailable, use chmod().
+?C:.
+?H:#$d_fchmod HAS_FCHMOD /**/
+?H:.
+?LINT:set d_fchmod
+: see if fchmod exists
+$cat >try.c <<EOC
+#include <sys/types.h>
+#$i_sysstat I_SYS_STAT
+#ifdef I_SYS_STAT
+#include <sys/stat.h>
+#endif
+int main(void)
+{
+ static int fd, ret;
+ static mode_t mode;
+ ret |= fchmod(fd, mode);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=fchmod
+set d_fchmod
+eval $trylink
+
diff --git a/mcon/U/d_fchown.U b/mcon/U/d_fchown.U
new file mode 100644
index 0000000..731f48b
--- /dev/null
+++ b/mcon/U/d_fchown.U
@@ -0,0 +1,48 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_fchown.U,v $
+?RCS: Revision 3.0 1993/08/18 12:06:01 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_fchown: Trylink cat i_unistd
+?MAKE: -pick add $@ %<
+?S:d_fchown:
+?S: This variable conditionally defines the HAS_FCHOWN symbol, which
+?S: indicates to the C program that the fchown() routine is available
+?S: to change ownership of opened files.
+?S:.
+?C:HAS_FCHOWN (FCHOWN):
+?C: This symbol, if defined, indicates that the fchown routine is available
+?C: to change ownership of opened files. If unavailable, use chown().
+?C:.
+?H:#$d_fchown HAS_FCHOWN /**/
+?H:.
+?LINT:set d_fchown
+: see if fchown exists
+$cat >try.c <<EOC
+#include <sys/types.h>
+#$i_unistd I_UNISTD
+#ifdef I_UNISTD
+#include <unistd.h>
+#endif
+int main(void)
+{
+ static int ret, fd;
+ static uid_t uid;
+ static gid_t gid;
+ ret |= fchown(fd, uid, gid);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=fchown
+set d_fchown
+eval $trylink
+
diff --git a/mcon/U/d_fcntl.U b/mcon/U/d_fcntl.U
new file mode 100644
index 0000000..4351354
--- /dev/null
+++ b/mcon/U/d_fcntl.U
@@ -0,0 +1,48 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_fcntl.U,v $
+?RCS: Revision 3.0 1993/08/18 12:06:01 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_fcntl: Trylink cat i_unistd
+?MAKE: -pick add $@ %<
+?S:d_fcntl:
+?S: This variable conditionally defines the HAS_FCNTL symbol, and indicates
+?S: whether the fcntl() function exists
+?S:.
+?C:HAS_FCNTL:
+?C: This symbol, if defined, indicates to the C program that
+?C: the fcntl() function exists.
+?C:.
+?H:#$d_fcntl HAS_FCNTL /**/
+?H:.
+?LINT:set d_fcntl
+: see if this is an fcntl system
+$cat >try.c <<EOC
+#include <sys/types.h>
+#$i_unistd I_UNISTD
+#ifdef I_UNISTD
+#include <unistd.h>
+#endif
+#include <fcntl.h>
+int main(void)
+{
+ static int fd, ret;
+ ret |= fcntl(fd, F_DUPFD, 1);
+ ret |= fcntl(fd, F_GETFD);
+ ret |= fcntl(fd, F_GETFL);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=fcntl
+set d_fcntl
+eval $trylink
+
diff --git a/mcon/U/d_fd_set.U b/mcon/U/d_fd_set.U
new file mode 100644
index 0000000..dbba6c2
--- /dev/null
+++ b/mcon/U/d_fd_set.U
@@ -0,0 +1,141 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_fd_set.U,v $
+?RCS: Revision 3.0.1.3 1997/02/28 15:33:16 ram
+?RCS: patch61: added ?F: metalint hint
+?RCS:
+?RCS: Revision 3.0.1.2 1994/06/20 06:57:23 ram
+?RCS: patch30: extended scope for fd_set checks (ADO)
+?RCS:
+?RCS: Revision 3.0.1.1 1994/01/24 14:06:27 ram
+?RCS: patch16: comments for HAS_FD_* symbols were not consistent
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:06:02 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_fd_set d_fd_macros d_fds_bits: cat +cc +ccflags rm Oldconfig \
+ d_socket i_systime i_sysselct i_syssock
+?MAKE: -pick add $@ %<
+?S:d_fd_set:
+?S: This variable contains the eventual value of the HAS_FD_SET symbol,
+?S: which indicates if your C compiler knows about the fd_set typedef.
+?S:.
+?S:d_fd_macros:
+?S: This variable contains the eventual value of the HAS_FD_MACROS symbol,
+?S: which indicates if your C compiler knows about the macros which
+?S: manipulate an fd_set.
+?S:.
+?S:d_fds_bits:
+?S: This variable contains the eventual value of the HAS_FDS_BITS symbol,
+?S: which indicates if your fd_set typedef contains the fds_bits member.
+?S: If you have an fd_set typedef, but the dweebs who installed it did
+?S: a half-fast job and neglected to provide the macros to manipulate
+?S: an fd_set, HAS_FDS_BITS will let us know how to fix the gaffe.
+?S:.
+?C:HAS_FD_SET:
+?C: This symbol, when defined, indicates presence of the fd_set typedef
+?C: in <sys/types.h>
+?C:.
+?C:HAS_FD_MACROS:
+?C: This symbol, when defined, indicates presence of the macros used to
+?C: manipulate an fd_set.
+?C:.
+?C:HAS_FDS_BITS:
+?C: This symbol, when defined, indicates presence of the fds_bits member in
+?C: fd_set. This knowledge is useful if fd_set is available but the macros
+?C: aren't.
+?C:.
+?H:#$d_fd_set HAS_FD_SET /**/
+?H:#$d_fd_macros HAS_FD_MACROS /**/
+?H:#$d_fds_bits HAS_FDS_BITS /**/
+?H:.
+?F:!fd_set
+: check for fd_set items
+$cat <<EOM
+
+Checking to see how well your C compiler handles fd_set and friends ...
+EOM
+?X: The FD_SET macros can be in strange places. On some SysV-based
+?X: systems, they are in <sys/bsdtypes.h>, which is included (perhaps)
+?X: by <sys/socket.h>. We won't force people to include
+?X: <sys/bsdtypes.h> because it might introduce other
+?X: incompatibilities.
+$cat >fd_set.c <<EOCP
+#$i_systime I_SYS_TIME
+#$i_sysselct I_SYS_SELECT
+#$d_socket HAS_SOCKET
+#$i_syssock I_SYS_SOCKET
+#include <sys/types.h>
+#ifdef HAS_SOCKET
+#ifdef I_SYS_SOCKET
+#include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
+#endif
+#endif
+#ifdef I_SYS_TIME
+#include <sys/time.h>
+#endif
+#ifdef I_SYS_SELECT
+#include <sys/select.h>
+#endif
+int main() {
+ fd_set fds;
+
+#ifdef TRYBITS
+ if(fds.fds_bits);
+#endif
+
+#if defined(FD_SET) && defined(FD_CLR) && defined(FD_ISSET) && defined(FD_ZERO)
+ exit(0);
+#else
+ exit(1);
+#endif
+}
+EOCP
+if $cc $ccflags -DTRYBITS -o fd_set fd_set.c >fd_set.out 2>&1 ; then
+ d_fds_bits="$define"
+ d_fd_set="$define"
+ echo "Well, your system knows about the normal fd_set typedef..." >&4
+ if ./fd_set; then
+ echo "and you have the normal fd_set macros (just as I'd expect)." >&4
+ d_fd_macros="$define"
+ else
+ $cat >&4 <<'EOM'
+but not the normal fd_set macros! Gaaack! I'll have to cover for you.
+EOM
+ d_fd_macros="$undef"
+ fi
+else
+ $cat <<'EOM'
+Hmm, your compiler has some difficulty with fd_set. Checking further...
+EOM
+ if $cc $ccflags -o fd_set fd_set.c >fd_set.out 2>&1 ; then
+ d_fds_bits="$undef"
+ d_fd_set="$define"
+ echo "Well, your system has some sort of fd_set available..." >&4
+ if ./fd_set; then
+ echo "and you have the normal fd_set macros." >&4
+ d_fd_macros="$define"
+ else
+ $cat <<'EOM'
+but not the normal fd_set macros! Gross! More work for me...
+EOM
+ d_fd_macros="$undef"
+ fi
+ else
+ echo "Well, you got zip. That's OK, I can roll my own fd_set stuff." >&4
+ d_fd_set="$undef"
+ d_fds_bits="$undef"
+ d_fd_macros="$undef"
+ fi
+fi
+$rm -f fd_set*
+
+
diff --git a/mcon/U/d_fdatasync.U b/mcon/U/d_fdatasync.U
new file mode 100644
index 0000000..151fc48
--- /dev/null
+++ b/mcon/U/d_fdatasync.U
@@ -0,0 +1,41 @@
+?RCS:
+?RCS: Copyright (c) 2013 Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:d_fdatasync: Trylink cat i_unistd
+?MAKE: -pick add $@ %<
+?S:d_fdatasync:
+?S: This variable conditionally defines the HAS_FDATASYNC symbol, which
+?S: indicates to the C program that the fdatasync() routine is available
+?S: to synchronize a file's in-core data with the storage device.
+?S:.
+?C:HAS_FDATASYNC:
+?C: This symbol, if defined, indicates that the fdatasync routine is available
+?C: to synchronize a file's in-core data with the storage device.
+?C:.
+?H:#$d_fdatasync HAS_FDATASYNC /**/
+?H:.
+?LINT:set d_fdatasync
+: see if fdatasync exists
+$cat >try.c <<EOC
+#include <sys/types.h>
+#$i_unistd I_UNISTD
+#ifdef I_UNISTD
+#include <unistd.h>
+#endif
+int main(void)
+{
+ static int ret, fd;
+ ret |= fdatasync(fd);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=fdatasync
+set d_fdatasync
+eval $trylink
+
diff --git a/mcon/U/d_fdopendir.U b/mcon/U/d_fdopendir.U
new file mode 100644
index 0000000..3fcca91
--- /dev/null
+++ b/mcon/U/d_fdopendir.U
@@ -0,0 +1,42 @@
+?RCS:
+?RCS: Copyright (c) 2015 Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:d_fdopendir: Trylink cat i_dirent
+?MAKE: -pick add $@ %<
+?S:d_fdopendir:
+?S: This variable conditionally defines HAS_FDOPENDIR if fdopendir() is
+?S: available to open a directory using an opened file descriptor already
+?S: referring to that directory.
+?S:.
+?C:HAS_FDOPENDIR:
+?C: This symbol, if defined, indicates that the fdopendir() routine is
+?C: available to open directories using an opened file descriptor already
+?C: referring to that directory.
+?C:.
+?H:#$d_fdopendir HAS_FDOPENDIR /**/
+?H:.
+?LINT:set d_fdopendir
+: see if fdopendir exists
+$cat >try.c <<EOC
+#$i_dirent I_DIRENT
+#include <sys/types.h>
+#ifdef I_DIRENT
+#include <dirent.h>
+#endif
+int main(void)
+{
+ static DIR *d;
+ d = fdopendir(0);
+ return (DIR *) 0 == d;
+}
+EOC
+cyn=fdopendir
+set d_fdopendir
+eval $trylink
+
diff --git a/mcon/U/d_ffs.U b/mcon/U/d_ffs.U
new file mode 100644
index 0000000..93c7667
--- /dev/null
+++ b/mcon/U/d_ffs.U
@@ -0,0 +1,43 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_ffs.U,v $
+?RCS: Revision 3.0 1993/08/18 12:06:03 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_ffs: Trylink cat
+?MAKE: -pick add $@ %<
+?S:d_ffs:
+?S: This variable conditionally defines the HAS_FFS symbol, which
+?S: indicates to the C program that the ffs() routine is available
+?S: to find the first bit which is set in its integer argument.
+?S:.
+?C:HAS_FFS:
+?C: This symbol, if defined, indicates that the ffs routine is available
+?C: to find the first bit set in its argument. If it's not available,
+?C: roll your own.
+?C:.
+?H:#$d_ffs HAS_FFS /**/
+?H:.
+?LINT:set d_ffs
+: see if ffs exists
+$cat >try.c <<EOC
+#include <strings.h>
+int main(void)
+{
+ static int i, ret;
+ ret |= ffs(i);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=ffs
+set d_ffs
+eval $trylink
+
diff --git a/mcon/U/d_fgetpos.U b/mcon/U/d_fgetpos.U
new file mode 100644
index 0000000..ff8541d
--- /dev/null
+++ b/mcon/U/d_fgetpos.U
@@ -0,0 +1,42 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_fgetpos.U,v $
+?RCS: Revision 3.0.1.1 1994/06/20 06:57:33 ram
+?RCS: patch30: created
+?RCS:
+?MAKE:d_fgetpos: Trylink cat
+?MAKE: -pick add $@ %<
+?S:d_fgetpos:
+?S: This variable conditionally defines HAS_FGETPOS if fgetpos() is
+?S: available to get the file position indicator.
+?S:.
+?C:HAS_FGETPOS:
+?C: This symbol, if defined, indicates that the fgetpos routine is
+?C: available to get the file position indicator, similar to ftell().
+?C:.
+?H:#$d_fgetpos HAS_FGETPOS /**/
+?H:.
+?LINT:set d_fgetpos
+: see if fgetpos exists
+$cat >try.c <<EOC
+#include <stdio.h>
+int main(void)
+{
+ static fpos_t pos;
+ static int ret;
+ ret |= fgetpos(stdout, &pos);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=fgetpos
+set d_fgetpos
+eval $trylink
+
diff --git a/mcon/U/d_flexfnam.U b/mcon/U/d_flexfnam.U
new file mode 100644
index 0000000..6adb85b
--- /dev/null
+++ b/mcon/U/d_flexfnam.U
@@ -0,0 +1,79 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_flexfnam.U,v $
+?RCS: Revision 3.0 1993/08/18 12:06:04 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_flexfnam: cat rm test Setvar
+?MAKE: -pick add $@ %<
+?S:d_flexfnam:
+?S: This variable conditionally defines the FLEXFILENAMES symbol, which
+?S: indicates that the system supports filenames longer than 14 characters.
+?S:.
+?C:FLEXFILENAMES:
+?C: This symbol, if defined, indicates that the system supports filenames
+?C: longer than 14 characters.
+?C:.
+?H:#$d_flexfnam FLEXFILENAMES /**/
+?H:.
+?T:first second tmpdir
+?LINT:set d_flexfnam
+?LINT:extern TMPDIR
+: see if we can have long filenames
+echo " "
+?X:
+?X: We have to test in both /tmp and . because of NFS (remote server may allow
+?X: long filenames while the local filesystem cannot support them). If at least
+?X: one of those file systems cannot support long filenames, then we assume the
+?X: whole system can't.
+?X:
+tmpdir="${TMPDIR:-/tmp}"
+rmlist="$rmlist $tmpdir/cf$$"
+$test -d "$tmpdir/cf$$" || mkdir "$tmpdir/cf$$"
+first=123456789abcdef
+second="$tmpdir/cf$$/$first"
+$rm -f $first $second
+if (echo hi >$first) 2>/dev/null; then
+ if $test -f 123456789abcde; then
+ echo 'You cannot have filenames longer than 14 characters. Sigh.' >&4
+ val="$undef"
+ else
+ if (echo hi >$second) 2>/dev/null; then
+ if $test -f "$tmpdir/cf$$/123456789abcde"; then
+ $cat <<'EOM'
+That's peculiar... You can have filenames longer than 14 characters, but only
+on some of the filesystems. Maybe you are using NFS. Anyway, to avoid problems
+I shall consider your system cannot support long filenames at all.
+EOM
+ val="$undef"
+ else
+ echo 'You can have filenames longer than 14 characters.' >&4
+ val="$define"
+ fi
+ else
+ $cat <<'EOM'
+How confusing! Some of your filesystems are sane enough to allow filenames
+longer than 14 characters but some others like /tmp can't even think about them.
+So, for now on, I shall assume your kernel does not allow them at all.
+EOM
+ val="$undef"
+ fi
+ fi
+else
+ $cat <<'EOM'
+You can't have filenames longer than 14 chars. You can't even think about them!
+EOM
+ val="$undef"
+fi
+set d_flexfnam
+eval $setvar
+$rm -rf "$tmpdir/cf$$" 123456789abcde*
+
diff --git a/mcon/U/d_flock.U b/mcon/U/d_flock.U
new file mode 100644
index 0000000..76d20c2
--- /dev/null
+++ b/mcon/U/d_flock.U
@@ -0,0 +1,44 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_flock.U,v $
+?RCS: Revision 3.0 1993/08/18 12:06:05 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_flock: Trylink cat
+?MAKE: -pick add $@ %<
+?S:d_flock:
+?S: This variable conditionally defines HAS_FLOCK if flock() is
+?S: available to do file locking.
+?S:.
+?C:HAS_FLOCK (FLOCK):
+?C: This symbol, if defined, indicates that the flock routine is
+?C: available to do file locking.
+?C:.
+?H:#$d_flock HAS_FLOCK /**/
+?H:.
+?LINT:set d_flock
+: see if flock exists
+$cat >try.c <<EOC
+#include <sys/file.h>
+#include <fcntl.h>
+int main(void)
+{
+ static int fd, ret;
+ ret |= flock(fd, LOCK_SH);
+ ret |= flock(fd, LOCK_EX);
+ ret |= flock(fd, LOCK_UN);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=flock
+set d_flock
+eval $trylink
+
diff --git a/mcon/U/d_fmod.U b/mcon/U/d_fmod.U
new file mode 100644
index 0000000..6be9e81
--- /dev/null
+++ b/mcon/U/d_fmod.U
@@ -0,0 +1,44 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu>
+?RCS:
+?RCS: $Log: d_fmod.U,v $
+?RCS: Revision 3.0.1.1 1994/10/29 16:12:46 ram
+?RCS: patch36: created by ADO
+?RCS:
+?MAKE:d_fmod: Trylink cat
+?MAKE: -pick add $@ %<
+?S:d_fmod:
+?S: This variable conditionally defines the HAS_FMOD symbol, which
+?S: indicates to the C program that the fmod() routine is available.
+?S: See also d_drem for the drem() routine which does roughly the same.
+?S:.
+?C:HAS_FMOD :
+?C: This symbol, if defined, indicates that the fmod routine is
+?C: available to compute the remainder r=x-n*y where n=trunc(x/y).
+?C:.
+?H:#$d_fmod HAS_FMOD /**/
+?H:.
+?LINT:set d_fmod
+: see if fmod exists
+$cat >try.c <<EOC
+#include <math.h>
+int main(void)
+{
+ static double x, y, ret;
+ ret = 1.0 * fmod(x, y);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=fmod
+set d_fmod '-lm'
+eval $trylink
+
diff --git a/mcon/U/d_fork.U b/mcon/U/d_fork.U
new file mode 100644
index 0000000..562100a
--- /dev/null
+++ b/mcon/U/d_fork.U
@@ -0,0 +1,47 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu>
+?RCS:
+?RCS: $Log: d_fork.U,v $
+?RCS: Revision 3.0.1.1 1994/08/29 16:07:38 ram
+?RCS: patch32: created by ADO
+?RCS:
+?MAKE:d_fork: Trylink cat i_unistd
+?MAKE: -pick add $@ %<
+?S:d_fork:
+?S: This variable conditionally defines the HAS_FORK symbol, which
+?S: indicates to the C program that the fork() routine is available.
+?S:.
+?C:HAS_FORK :
+?C: This symbol, if defined, indicates that the fork routine is
+?C: available.
+?C:.
+?H:#$d_fork HAS_FORK /**/
+?H:.
+?LINT:set d_fork
+: see if fork exists
+$cat >try.c <<EOC
+#include <sys/types.h>
+#$i_unistd I_UNISTD
+#ifdef I_UNISTD
+#include <unistd.h>
+#endif
+int main(void)
+{
+ static pid_t pid;
+ pid |= fork();
+ return pid ? 0 : 1;
+}
+EOC
+cyn=fork
+set d_fork
+eval $trylink
+
diff --git a/mcon/U/d_fsetpos.U b/mcon/U/d_fsetpos.U
new file mode 100644
index 0000000..15e244a
--- /dev/null
+++ b/mcon/U/d_fsetpos.U
@@ -0,0 +1,42 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_fsetpos.U,v $
+?RCS: Revision 3.0.1.1 1994/06/20 06:57:38 ram
+?RCS: patch30: created
+?RCS:
+?MAKE:d_fsetpos: Trylink cat
+?MAKE: -pick add $@ %<
+?S:d_fsetpos:
+?S: This variable conditionally defines HAS_FSETPOS if fsetpos() is
+?S: available to set the file position indicator.
+?S:.
+?C:HAS_FSETPOS:
+?C: This symbol, if defined, indicates that the fsetpos routine is
+?C: available to set the file position indicator, similar to fseek().
+?C:.
+?H:#$d_fsetpos HAS_FSETPOS /**/
+?H:.
+?LINT:set d_fsetpos
+: see if fsetpos exists
+$cat >try.c <<EOC
+#include <stdio.h>
+int main(void)
+{
+ static fpos_t pos;
+ static int ret;
+ ret |= fsetpos(stdout, &pos);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=fsetpos
+set d_fsetpos
+eval $trylink
+
diff --git a/mcon/U/d_fstatat.U b/mcon/U/d_fstatat.U
new file mode 100644
index 0000000..0f5b008
--- /dev/null
+++ b/mcon/U/d_fstatat.U
@@ -0,0 +1,43 @@
+?RCS:
+?RCS: Copyright (c) 2015 Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:d_fstatat: Trylink cat i_sysstat
+?MAKE: -pick add $@ %<
+?S:d_fstatat:
+?S: This variable conditionally defines HAS_FSTATAT if fstatat() is
+?S: available to do file stats with a relative path interepreted in
+?S: the context of an opened directory.
+?S:.
+?C:HAS_FSTATAT:
+?C: This symbol, if defined, indicates that the fstatat() routine is
+?C: available to do file stats with a relative path interepreted in
+?C: the context of an opened directory.
+?C:.
+?H:#$d_fstatat HAS_FSTATAT /**/
+?H:.
+?LINT:set d_fstatat
+: see if fstatat exists
+$cat >try.c <<EOC
+#$i_sysstat I_SYS_STAT
+#include <fcntl.h> /* AT_* constants */
+#ifdef I_SYS_STAT
+#include <sys/stat.h>
+#endif
+int main(void)
+{
+ static int ret;
+ struct stat sb;
+ ret |= fstatat(AT_FDCWD, "path", &sb, 0);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=fstatat
+set d_fstatat
+eval $trylink
+
diff --git a/mcon/U/d_fsync.U b/mcon/U/d_fsync.U
new file mode 100644
index 0000000..3e9a98f
--- /dev/null
+++ b/mcon/U/d_fsync.U
@@ -0,0 +1,41 @@
+?RCS:
+?RCS: Copyright (c) 2013 Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:d_fsync: Trylink cat i_unistd
+?MAKE: -pick add $@ %<
+?S:d_fsync:
+?S: This variable conditionally defines the HAS_FSYNC symbol, which
+?S: indicates to the C program that the fsync() routine is available
+?S: to synchronize a file's in-core state with the storage device.
+?S:.
+?C:HAS_FSYNC:
+?C: This symbol, if defined, indicates that the fsync routine is available
+?C: to synchronize a file's in-core state with the storage device.
+?C:.
+?H:#$d_fsync HAS_FSYNC /**/
+?H:.
+?LINT:set d_fsync
+: see if fsync exists
+$cat >try.c <<EOC
+#include <sys/types.h>
+#$i_unistd I_UNISTD
+#ifdef I_UNISTD
+#include <unistd.h>
+#endif
+int main(void)
+{
+ static int ret, fd;
+ ret |= fsync(fd);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=fsync
+set d_fsync
+eval $trylink
+
diff --git a/mcon/U/d_ftime.U b/mcon/U/d_ftime.U
new file mode 100644
index 0000000..f7c1095
--- /dev/null
+++ b/mcon/U/d_ftime.U
@@ -0,0 +1,100 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_ftime.U,v $
+?RCS: Revision 3.0 1993/08/18 12:06:06 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_ftime d_gettimeod: Trylink cat i_systimeb
+?MAKE: -pick add $@ %<
+?S:d_ftime:
+?S: This variable conditionally defines the HAS_FTIME symbol, which indicates
+?S: that the ftime() routine exists. The ftime() routine is basically
+?S: a sub-second accuracy clock.
+?S:.
+?S:d_gettimeod:
+?S: This variable conditionally defines the HAS_GETTIMEOFDAY symbol, which
+?S: indicates that the gettimeofday() system call exists (to obtain a
+?S: sub-second accuracy clock). You should probably include <sys/resource.h>.
+?S:.
+?C:HAS_FTIME (FTIMER):
+?C: This symbol, if defined, indicates that the ftime() routine exists.
+?C: It is basically a sub-second accuracy clock, but is less accurate
+?C: than gettimeofday(2) anyway. The type "Timeval" should be used to
+?C: refer to "struct timeb".
+?C:.
+?C:HAS_GETTIMEOFDAY (GETTIMEOFDAY):
+?C: This symbol, if defined, indicates that the gettimeofday() system
+?C: call is available for a sub-second accuracy clock. Usually, the file
+?C: <sys/resource.h> needs to be included (see I_SYS_RESOURCE).
+?C: The type "Timeval" should be used to refer to "struct timeval".
+?C:.
+?H:#$d_ftime HAS_FTIME /**/
+?H:#$d_gettimeod HAS_GETTIMEOFDAY /**/
+?H:?%<:@if HAS_FTIME
+?H:?%<:#ifdef HAS_FTIME
+?H:?%<:#define Timeval struct timeb /* Structure used by ftime() */
+?H:?%<:#endif
+?H:?%<:@end
+?H:?%<:@if HAS_GETTIMEOFDAY
+?H:?%<:#ifdef HAS_GETTIMEOFDAY
+?H:?%<:#define Timeval struct timeval /* Structure used by gettimeofday() */
+?H:?%<:#endif
+?H:?%<:@end
+?H:.
+?X:FIXME
+?X:?I:?d_ftime:i_systimeb
+?X:?I:?d_gettimeod:i_sysresrc
+?LINT:set d_gettimeod d_ftime
+?LINT:known Timeval
+: see if gettimeofday or ftime exists
+?X:
+?X: Give priority to gettimeofday(2) because timing is more accurate
+?X:
+$cat >try.c <<EOC
+#include <sys/time.h>
+int main(void)
+{
+ static struct timeval tv;
+ static void *tz;
+ static int ret;
+ ret |= gettimeofday(&tv, tz);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=gettimeofday
+set d_gettimeod
+eval $trylink
+
+$cat >try.c <<EOC
+#include <sys/types.h>
+#$i_systimeb I_SYS_TIMEB
+#ifdef I_SYS_TIMEB
+#include <sys/timeb.h>
+#endif
+int main(void)
+{
+ static struct timeb t;
+ static int ret;
+ ret |= ftime(&t);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=ftime
+set d_ftime
+eval $trylink
+
+case "$d_gettimeod$d_ftime" in
+"$undef$undef")
+ echo " "
+ echo 'No ftime() nor gettimeofday() -- timing may be less accurate.' >&4
+ ;;
+esac
+
diff --git a/mcon/U/d_ftrncate.U b/mcon/U/d_ftrncate.U
new file mode 100644
index 0000000..d96b71f
--- /dev/null
+++ b/mcon/U/d_ftrncate.U
@@ -0,0 +1,46 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_ftrncate.U,v $
+?RCS: Revision 3.0 1993/08/18 12:06:07 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_ftrncate: Trylink cat i_unistd
+?MAKE: -pick add $@ %<
+?S:d_ftrncate (d_ftruncate):
+?S: This variable conditionally defines the HAS_FTRUNCATE symbol, which
+?S: indicates to the C program that the ftruncate() subroutine exists.
+?S:.
+?C:HAS_FTRUNCATE:
+?C: This symbol, if defined, indicates that the ftruncate() subroutine
+?C: exists.
+?C:.
+?H:#$d_ftrncate HAS_FTRUNCATE /**/
+?H:.
+?LINT:set d_ftrncate
+: see if ftruncate exists
+$cat >try.c <<EOC
+#include <sys/types.h>
+#$i_unistd I_UNISTD
+#ifdef I_UNISTD
+#include <unistd.h>
+#endif
+int main(void)
+{
+ static int fd, ret;
+ static off_t length;
+ ret |= ftruncate(fd, length);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=ftruncate
+set d_ftrncate
+eval $trylink
+
diff --git a/mcon/U/d_gconvert.U b/mcon/U/d_gconvert.U
new file mode 100644
index 0000000..bc4d89e
--- /dev/null
+++ b/mcon/U/d_gconvert.U
@@ -0,0 +1,147 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu>
+?RCS:
+?RCS: $Log: d_gconvert.U,v $
+?RCS: Revision 3.0.1.3 1997/02/28 15:33:38 ram
+?RCS: patch61: integrated new unit from perl5
+?RCS:
+?RCS: Revision 3.0.1.2 1995/07/25 13:55:59 ram
+?RCS: patch56: improved comments about the Gconvert macro (ADO)
+?RCS: patch56: force compile-link test since it may exist but be unusable (ADO)
+?RCS:
+?RCS: Revision 3.0.1.1 1994/10/29 16:12:51 ram
+?RCS: patch36: created by ADO
+?RCS:
+?MAKE:d_Gconvert: cat cc ccflags ldflags libs rm_try
+?MAKE: -pick add $@ %<
+?S:d_Gconvert:
+?S: This variable holds what Gconvert is defined as to convert
+?S: floating point numbers into strings. It could be 'gconvert'
+?S: or a more complex macro emulating gconvert with gcvt() or sprintf.
+?S:.
+?C:Gconvert:
+?C: This preprocessor macro is defined to convert a floating point
+?C: number to a string without a trailing decimal point. This
+?C: emulates the behavior of sprintf("%g"), but is sometimes much more
+?C: efficient. If gconvert() is not available, but gcvt() drops the
+?C: trailing decimal point, then gcvt() is used. If all else fails,
+?C: a macro using sprintf("%g") is used. Arguments for the Gconvert
+?C: macro are: value, number of digits, whether trailing zeros should
+?C: be retained, and the output buffer.
+?C: Possible values are:
+?C: d_Gconvert='gconvert((x),(n),(t),(b))'
+?C: d_Gconvert='gcvt((x),(n),(b))'
+?C: d_Gconvert='sprintf((b),"%.*g",(n),(x))'
+?C: The last two assume trailing zeros should not be kept.
+?C:.
+?H:#define Gconvert(x,n,t,b) $d_Gconvert
+?H:.
+?T: xxx_list xxx_convert
+?F:!try
+?X:
+: Check how to convert floats to strings.
+echo " "
+echo "Checking for an efficient way to convert floats to strings."
+?X: We want to be sure to drop trailing decimal points (perl5
+?X: needs this).
+$cat >try.c <<'EOP'
+#ifdef TRY_gconvert
+#define Gconvert(x,n,t,b) gconvert((x),(n),(t),(b))
+char *myname = "gconvert";
+#endif
+#ifdef TRY_gcvt
+#define Gconvert(x,n,t,b) gcvt((x),(n),(b))
+char *myname = "gcvt";
+#endif
+#ifdef TRY_sprintf
+#define Gconvert(x,n,t,b) sprintf((b),"%.*g",(n),(x))
+char *myname = "sprintf";
+#endif
+
+#include <stdio.h>
+
+int
+checkit(expect, got)
+char *expect;
+char *got;
+{
+ if (strcmp(expect, got)) {
+ printf("%s oddity: Expected %s, got %s\n",
+ myname, expect, got);
+ exit(1);
+ }
+}
+
+int
+int main()
+{
+ char buf[64];
+ buf[63] = '\0';
+
+ /* This must be 1st test on (which?) platform */
+ /* Alan Burlison <AlanBurlsin@unn.unisys.com> */
+ Gconvert(0.1, 8, 0, buf);
+ checkit("0.1", buf);
+
+ Gconvert(1.0, 8, 0, buf);
+ checkit("1", buf);
+
+ Gconvert(0.0, 8, 0, buf);
+ checkit("0", buf);
+
+ Gconvert(-1.0, 8, 0, buf);
+ checkit("-1", buf);
+
+ /* Some Linux gcvt's give 1.e+5 here. */
+ Gconvert(100000.0, 8, 0, buf);
+ checkit("100000", buf);
+
+ /* Some Linux gcvt's give -1.e+5 here. */
+ Gconvert(-100000.0, 8, 0, buf);
+ checkit("-100000", buf);
+
+ exit(0);
+}
+EOP
+?X: List of order in which to search for functions.
+?X: Usual order of efficiency is gconvert gcvt sprintf
+?X: Respect a previous or hinted value.
+case "$d_Gconvert" in
+gconvert*) xxx_list='gconvert gcvt sprintf' ;;
+gcvt*) xxx_list='gcvt gconvert sprintf' ;;
+sprintf*) xxx_list='sprintf gconvert gcvt' ;;
+*) xxx_list='gconvert gcvt sprintf' ;;
+esac
+
+for xxx_convert in $xxx_list; do
+ echo "Trying $xxx_convert"
+ $rm_try
+ if $cc $ccflags -DTRY_$xxx_convert $ldflags -o try \
+ try.c $libs > /dev/null 2>&1 ; then
+ echo "$xxx_convert" found. >&4
+ if ./try; then
+ echo "I'll use $xxx_convert to convert floats into a string." >&4
+ break;
+ else
+ echo "...But $xxx_convert didn't work as I expected."
+ fi
+ else
+ echo "$xxx_convert NOT found." >&4
+ fi
+done
+
+case "$xxx_convert" in
+gconvert) d_Gconvert='gconvert((x),(n),(t),(b))' ;;
+gcvt) d_Gconvert='gcvt((x),(n),(b))' ;;
+*) d_Gconvert='sprintf((b),"%.*g",(n),(x))' ;;
+esac
+
diff --git a/mcon/U/d_getaddrinfo.U b/mcon/U/d_getaddrinfo.U
new file mode 100644
index 0000000..d36e504
--- /dev/null
+++ b/mcon/U/d_getaddrinfo.U
@@ -0,0 +1,82 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 2006, Christian Biere
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:d_getaddrinfo: Trylink cat i_arpainet i_netdb i_syssock \
+ i_winsock2 i_ws2tcpip i_niin d_windows
+?MAKE: -pick add $@ %<
+?S:d_getaddrinfo:
+?S: This variable conditionally defines the HAS_GETADDRINFO symbol, which
+?S: indicates to the C program that the getaddrinfo() routine is available.
+?S:.
+?C:HAS_GETADDRINFO:
+?C: This symbol is defined when getaddrinfo() can be used.
+?C:.
+?H:#$d_getaddrinfo HAS_GETADDRINFO
+?H:.
+?LINT: set d_getaddrinfo
+: can we use getaddrinfo?
+$cat >try.c <<EOC
+#$i_syssock I_SYS_SOCKET
+#$i_winsock2 I_WINSOCK2
+#$i_ws2tcpip I_WS2TCPIP
+#$i_niin I_NETINET_IN
+#$i_arpainet I_ARPA_INET
+#$i_netdb I_NETDB
+#$d_windows WINDOWS_SYSTEM
+#ifdef WINDOWS_SYSTEM
+#define WINVER 0x0501
+#endif
+#include <sys/types.h>
+#ifdef I_SYS_SOCKET
+#include <sys/socket.h>
+#endif
+#ifdef I_NETINET_IN
+#include <netinet/in.h>
+#endif
+#ifdef I_ARPA_INET
+#include <arpa/inet.h>
+#endif
+#ifdef I_NETDB
+#include <netdb.h>
+#endif
+#ifdef I_WINSOCK2
+#include <Winsock2.h>
+#endif
+#ifdef I_WS2TCPIP
+#include <Ws2tcpip.h>
+#endif
+int main(void)
+{
+ struct addrinfo hints, *res;
+ int ret;
+
+ hints.ai_flags = 1;
+ hints.ai_family = PF_UNSPEC;
+ hints.ai_socktype = 1;
+ hints.ai_protocol = 1;
+ hints.ai_addrlen = (socklen_t) 1;
+ hints.ai_canonname = "canonname";
+ hints.ai_addr = (struct sockaddr *) 0;
+ hints.ai_next = (struct addrinfo *) 0;
+ ret = getaddrinfo("localhost", "www", &hints, &res);
+ if (0 != ret) {
+ const char *s;
+ s = gai_strerror(ret);
+ (void) s;
+ }
+ if (res)
+ freeaddrinfo(res);
+ return 0;
+}
+EOC
+cyn=getaddrinfo
+set d_getaddrinfo '-lWs2_32'
+eval $trylink
+
diff --git a/mcon/U/d_getcontext.U b/mcon/U/d_getcontext.U
new file mode 100644
index 0000000..eac7d22
--- /dev/null
+++ b/mcon/U/d_getcontext.U
@@ -0,0 +1,38 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 2012, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:d_getcontext: Trylink cat
+?MAKE: -pick add $@ %<
+?S:d_getcontext:
+?S: This variable conditionally defines HAS_GETCONTEXT if getcontext() is
+?S: available to save a process context.
+?S:.
+?C:HAS_GETCONTEXT:
+?C: This symbol, if defined, indicates that the getcontext() function is
+?C: available to save a process context.
+?C:.
+?H:#$d_getcontext HAS_GETCONTEXT /**/
+?H:.
+?LINT:set d_getcontext
+: see if getcontext exists
+$cat >try.c <<EOC
+#include <ucontext.h>
+int main(void)
+{
+ int ret;
+ ucontext_t u;
+ ret = getcontext(&u);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=getcontext
+set d_getcontext
+eval $trylink
+
diff --git a/mcon/U/d_geteuid.U b/mcon/U/d_geteuid.U
new file mode 100644
index 0000000..651ac1f
--- /dev/null
+++ b/mcon/U/d_geteuid.U
@@ -0,0 +1,40 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 2006, Christian Biere
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:d_geteuid: Trylink cat i_unistd
+?MAKE: -pick add $@ %<
+?S:d_geteuid:
+?S: This variable conditionally defines the HAS_GETEUID symbol, which
+?S: indicates to the C program that geteuid() is available.
+?S:.
+?C:HAS_GETEUID:
+?C: This symbol is defined when geteuid() can be used.
+?C:.
+?H:#$d_geteuid HAS_GETEUID
+?H:.
+?LINT: set d_geteuid
+: can we use geteuid?
+$cat >try.c <<EOC
+#include <sys/types.h>
+#$i_unistd I_UNISTD
+#ifdef I_UNISTD
+#include <unistd.h>
+#endif
+int main(void)
+{
+ static uid_t ret;
+ ret |= geteuid();
+ return ret ? 0 : 1;
+}
+EOC
+cyn=geteuid
+set d_geteuid
+eval $trylink
+
diff --git a/mcon/U/d_getgrps.U b/mcon/U/d_getgrps.U
new file mode 100644
index 0000000..5f0ab24
--- /dev/null
+++ b/mcon/U/d_getgrps.U
@@ -0,0 +1,48 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_getgrps.U,v $
+?RCS: Revision 3.0 1993/08/18 12:06:08 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_getgrps: Trylink cat i_unistd
+?MAKE: -pick add $@ %<
+?S:d_getgrps:
+?S: This variable conditionally defines the HAS_GETGROUPS symbol, which
+?S: indicates to the C program that the getgroups() routine is available
+?S: to get the list of process groups.
+?S:.
+?C:HAS_GETGROUPS (GETGROUPS):
+?C: This symbol, if defined, indicates that the getgroups() routine is
+?C: available to get the list of process groups. If unavailable, multiple
+?C: groups are probably not supported.
+?C:.
+?H:#$d_getgrps HAS_GETGROUPS /**/
+?H:.
+?LINT:set d_getgrps
+: see if getgroups exists
+$cat >try.c <<EOC
+#include <sys/types.h>
+#$i_unistd I_UNISTD
+#ifdef I_UNISTD
+#include <unistd.h>
+#endif
+int main(void)
+{
+ static int ret;
+ static gid_t grouplist;
+ ret |= getgroups(1, &grouplist);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=getgroups
+set d_getgrps
+eval $trylink
+
diff --git a/mcon/U/d_gethbynm.U b/mcon/U/d_gethbynm.U
new file mode 100644
index 0000000..1b9af63
--- /dev/null
+++ b/mcon/U/d_gethbynm.U
@@ -0,0 +1,42 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_gethbynm.U,v $
+?RCS: Revision 3.0 1993/08/18 12:06:08 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_gethbynm: Trylink cat
+?MAKE: -pick add $@ %<
+?S:d_gethbynm (d_gethhstby):
+?S: This variable conditionally defines the HAS_GETHOSTBYNAME symbol, which
+?S: indicates to the C program that the gethostbyname() routine is available
+?S: to lookup host names in some data base or other.
+?S:.
+?C:HAS_GETHOSTBYNAME (GETHOSTBYNAME):
+?C: This symbol, if defined, indicates that the gethostbyname() routine is
+?C: available to lookup host names in some data base or other.
+?C:.
+?H:#$d_gethbynm HAS_GETHOSTBYNAME /**/
+?H:.
+?LINT:set d_gethbynm
+: see if gethostbyname exists
+$cat >try.c <<EOC
+#include <netdb.h>
+int main(void)
+{
+ struct hostent *he;
+ he = gethostbyname("hostname");
+ return he ? 0 : 1;
+}
+EOC
+cyn=gethostbyname
+set d_gethbynm '-lnsl'
+eval $trylink
+
diff --git a/mcon/U/d_gethent.U b/mcon/U/d_gethent.U
new file mode 100644
index 0000000..b0138c5
--- /dev/null
+++ b/mcon/U/d_gethent.U
@@ -0,0 +1,41 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_gethent.U,v $
+?RCS: Revision 3.0 1993/08/18 12:06:09 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_gethent: Trylink cat
+?MAKE: -pick add $@ %<
+?S:d_gethent:
+?S: This variable conditionally defines HAS_GETHOSTENT if gethostent() is
+?S: available to dup file descriptors.
+?S:.
+?C:HAS_GETHOSTENT (GETHOSTENT):
+?C: This symbol, if defined, indicates that the gethostent routine is
+?C: available to lookup host names in some data base or other.
+?C:.
+?H:#$d_gethent HAS_GETHOSTENT /**/
+?H:.
+?LINT:set d_gethent
+: see if gethostent exists
+$cat >try.c <<EOC
+#include <netdb.h>
+int main(void)
+{
+ struct hostent *ret;
+ ret = gethostent();
+ return ret ? 0 : 1;
+}
+EOC
+cyn=gethostent
+set d_gethent
+eval $trylink
+
diff --git a/mcon/U/d_gethid.U b/mcon/U/d_gethid.U
new file mode 100644
index 0000000..66fdfb9
--- /dev/null
+++ b/mcon/U/d_gethid.U
@@ -0,0 +1,44 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_gethid.U,v $
+?RCS: Revision 3.0 1993/08/18 12:06:10 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_gethid: Trylink cat i_unistd
+?MAKE: -pick add $@ %<
+?S:d_gethid:
+?S: This variable conditionally defines HAS_GETHOSTID if gethostid() is
+?S: available to get the host id.
+?S:.
+?C:HAS_GETHOSTID (GETHOSTID):
+?C: This symbol, if defined, indicates that the gethostid system call is
+?C: available to get the host id.
+?C:.
+?H:#$d_gethid HAS_GETHOSTID /**/
+?H:.
+?LINT:set d_gethid
+: see if gethid exists
+$cat >try.c <<EOC
+#$i_unistd I_UNISTD
+#ifdef I_UNISTD
+#include <unistd.h>
+#endif
+int main(void)
+{
+ static long id;
+ id |= gethostid();
+ return id ? 0 : 1;
+}
+EOC
+cyn=gethostid
+set d_gethid
+eval $trylink
+
diff --git a/mcon/U/d_gethname.U b/mcon/U/d_gethname.U
new file mode 100644
index 0000000..46691b3
--- /dev/null
+++ b/mcon/U/d_gethname.U
@@ -0,0 +1,287 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_gethname.U,v $
+?RCS: Revision 3.0.1.1 1994/10/29 16:13:00 ram
+?RCS: patch36: call ./xenix explicitly instead of relying on PATH
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:06:11 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_gethname d_uname d_phostname aphostname: phostname cat \
+ myhostname package d_portable Loc echo n c +i_whoami +usrinc \
+ Myread Guess Oldconfig Csym
+?MAKE: -pick add $@ %<
+?S:d_gethname:
+?S: This variable conditionally defines the HAS_GETHOSTNAME symbol, which
+?S: indicates to the C program that the gethostname() routine may be
+?S: used to derive the host name.
+?S:.
+?S:d_uname:
+?S: This variable conditionally defines the HAS_UNAME symbol, which
+?S: indicates to the C program that the uname() routine may be
+?S: used to derive the host name.
+?S:.
+?S:d_phostname:
+?S: This variable conditionally defines the PHOSTNAME symbol, which
+?S: contains the shell command which, when fed to popen(), may be
+?S: used to derive the host name.
+?S:.
+?S:aphostname:
+?S: Thie variable contains the command which can be used to compute the
+?S: host name. The command is fully qualified by its absolute path, to make
+?S: it safe when used by a process with super-user privileges.
+?S:.
+?C:HAS_GETHOSTNAME (GETHOSTNAME):
+?C: This symbol, if defined, indicates that the C program may use the
+?C: gethostname() routine to derive the host name. See also HAS_UNAME
+?C: and PHOSTNAME.
+?C:.
+?C:HAS_UNAME (UNAME):
+?C: This symbol, if defined, indicates that the C program may use the
+?C: uname() routine to derive the host name. See also HAS_GETHOSTNAME
+?C: and PHOSTNAME.
+?C:.
+?C:PHOSTNAME:
+?C: This symbol, if defined, indicates that the C program may use the
+?C: contents of PHOSTNAME as a command to feed to the popen() routine
+?C: to derive the host name. See also HAS_GETHOSTNAME and HAS_UNAME.
+?C: Note that the command uses a fully qualified path, so that it is safe
+?C: even if used by a process with super-user privileges.
+?C:.
+?H:#$d_gethname HAS_GETHOSTNAME /**/
+?H:#$d_uname HAS_UNAME /**/
+?H:#$d_phostname PHOSTNAME "$aphostname" /* How to get the host name */
+?H:.
+?T:file val call
+?LINT:change i_whoami
+: see how we will look up host name
+echo " "
+if false; then
+ : dummy stub to allow use of elif
+@if HAS_GETHOSTNAME
+elif set gethostname val -f d_gethname; eval $csym; $val; then
+ echo 'gethostname() found.' >&4
+ d_gethname="$define"
+ call=gethostname
+@end
+@if HAS_UNAME
+elif set uname val -f d_uname; eval $csym; $val; then
+ if ./xenix; then
+ $cat <<'EOM'
+uname() was found, but you're running xenix, and older versions of xenix
+have a broken uname(). If you don't really know whether your xenix is old
+enough to have a broken system call, use the default answer.
+
+EOM
+ dflt=y
+ case "$d_uname" in
+ "$define") dflt=n;;
+ esac
+ rp='Is your uname() broken?'
+ . ./myread
+ case "$ans" in
+ n*) d_uname="$define"; call=uname;;
+ esac
+ else
+ echo 'uname() found.' >&4
+ d_uname="$define"
+ call=uname
+ fi
+@end
+fi
+case "$d_gethname" in
+'') d_gethname="$undef";;
+esac
+case "$d_uname" in
+'') d_uname="$undef";;
+esac
+@if PHOSTNAME || MYHOSTNAME
+case "$d_uname$d_gethname" in
+*define*)
+ dflt=n
+ cat <<EOM
+
+Every now and then someone has a $call() that lies about the hostname
+but can't be fixed for political or economic reasons. If you wish, I can
+@if MYHOSTNAME && PHOSTNAME
+pretend $call() isn't there and maybe compile in the hostname or
+compute it from the '$phostname' command at run-time.
+@elsif MYHOSTNAME
+pretend $call() isn't there and maybe compile in the hostname.
+@elsif PHOSTNAME
+pretend $call() isn't there and maybe compute hostname at run-time
+thanks to the '$phostname' command.
+@elsif WHOAMI
+get the hostname from whomai.h (provided you have one).
+@else
+simply ignore your host name and use someting like "noname" instead.
+@end
+
+EOM
+ rp="Shall I ignore $call() from now on?"
+ . ./myread
+ case "$ans" in
+ y*) d_uname="$undef" d_gethname="$undef"; $echo $n "Okay...$c";;
+ esac;;
+esac
+@end
+@if PHOSTNAME || aphostname
+?X: Compute the full path name for the command
+case "$phostname" in
+'') aphostname='';;
+*) case "$aphostname" in
+ /*) ;;
+ *) set X $phostname
+ shift
+ file=$1
+ shift
+ file=`./loc $file $file $pth`
+ aphostname=`echo $file $*`
+ ;;
+ esac
+ ;;
+esac
+@end
+@if PHOSTNAME && MYHOSTNAME
+case "$d_uname$d_gethname" in
+*define*) ;;
+*)
+ case "$phostname" in
+ '') ;;
+ *)
+ $cat <<EOT
+
+There is no gethostname() or uname() on this system. You have two
+possibilities at this point:
+
+1) You can have your host name ($myhostname) compiled into $package, which
+ lets $package start up faster, but makes your binaries non-portable, or
+2) you can have $package use a
+
+ popen("$aphostname","r")
+
+ which will start slower but be more portable.
+
+@ if WHOAMI
+Option 1 will give you the option of using whoami.h if you have one.
+@ end
+If you want option 2 but with a different command, you can edit config.sh at
+the end of this shell script.
+
+EOT
+ case "$d_phostname" in
+ "$define") dflt=n;;
+ "$undef") dflt=y;;
+ '')
+ case "$d_portable" in
+ "$define") dflt=n ;;
+ *) dflt=y ;;
+ esac;;
+ esac
+ rp="Do you want your host name compiled in?"
+ . ./myread
+ case "$ans" in
+ n*) d_phostname="$define" ;;
+ *) aphostname=''; d_phostname="$undef";;
+ esac;;
+ esac
+ case "$aphostname" in
+ '')
+@ if WHOAMI
+ case "$i_whoami" in
+ "$define")
+ dflt=y
+ $cat <<EOM
+
+No hostname function--you can either use the whoami.h file, which has this line:
+
+ `grep sysname $usrinc/whoami.h`
+
+or you can have the name we came up with earlier ($myhostname) hardwired in.
+EOM
+ rp="Use whoami.h to get hostname?"
+ . ./myread
+ case "$ans" in
+ n*) i_whoami="$undef";;
+ esac
+ ;;
+ "$undef")
+ $cat <<EOM
+No hostname function and no whoami.h -- hardwiring "$myhostname".
+EOM
+ ;;
+ esac;;
+@ else
+ echo 'No hostname function -- hardwiring "'$myhostname'".' >&4;;
+@ end
+ esac;;
+esac
+@elsif PHOSTNAME
+case "$d_uname$d_gethname" in
+*define*) ;;
+*)
+ case "$phostname" in
+ '')
+@ if WHOAMI
+ case "$i_whoami" in
+ "$define")
+ $cat <<EOM
+
+No hostname function--we'll use the whoami.h file, which has this line:
+
+ `grep sysname $usrinc/whoami.h`
+
+EOM
+ ;;
+ *) echo "There will be no way for $package to get your hostname." >&4;;
+ esac;;
+@ else
+ echo "There will be no way for $package to get your hostname." >&4;;
+@ end
+ *)
+ echo "I'll use 'popen("'"'$aphostname'", "r")'"' to get your hostname." >&4
+ ;;
+ esac;;
+esac
+@elsif MYHOSTNAME
+case "$d_uname$d_gethname" in
+*define*) ;;
+*)
+@ if WHOAMI
+ case "$i_whoami" in
+ "$define")
+ dflt=y
+ $cat <<EOM
+
+No hostname function--you can either use the whoami.h file, which has this line:
+
+ `grep sysname $usrinc/whoami.h`
+
+or you can have the name we came up with earlier ($myhostname) hardwired in.
+EOM
+ rp="Use whoami.h to get hostname?"
+ . ./myread
+ case "$ans" in
+ n*) i_whoami="$undef";;
+ esac
+ ;;
+ "$undef")
+ echo 'No whoami.h--hardwiring "'$myhostname'".' >&4;;
+ esac;;
+@ else
+ echo 'Hardwiring "'$myhostname'".' >&4;;
+@ end
+esac
+@end
+case "$d_phostname" in
+'') d_phostname="$undef";;
+esac
+
diff --git a/mcon/U/d_getifaddrs.U b/mcon/U/d_getifaddrs.U
new file mode 100644
index 0000000..952726f
--- /dev/null
+++ b/mcon/U/d_getifaddrs.U
@@ -0,0 +1,54 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 2006, Christian Biere
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:d_getifaddrs: Trylink cat i_netif
+?MAKE: -pick add $@ %<
+?S:d_getifaddrs:
+?S: This variable conditionally defines the HAS_GETIFADDRS symbol, which
+?S: indicates to the C program that getifaddrs() support is available.
+?S:.
+?C:HAS_GETIFADDRS:
+?C: This symbol is defined when getifaddrs() and freeifaddrs() can be used.
+?C:.
+?H:#$d_getifaddrs HAS_GETIFADDRS
+?H:.
+?LINT: set d_getifaddrs
+: can we use getifaddrs?
+$cat >try.c <<EOC
+#include <sys/types.h>
+#include <sys/socket.h>
+#$i_netif I_NET_IF
+#ifdef I_NET_IF
+#include <net/if.h>
+#endif
+#include <ifaddrs.h>
+int main(void)
+{
+ struct ifaddrs *ifa0, *ifa;
+ static int ret;
+
+ ret |= getifaddrs(&ifa0);
+
+ for (ifa = ifa0; ifa; ifa = ifa->ifa_next) {
+ (void) ifa->ifa_flags;
+ (void) ifa->ifa_addr;
+ (void) ifa->ifa_addr->sa_family;
+ (void) ifa->ifa_netmask;
+ if ((IFF_LOOPBACK | IFF_UP | IFF_RUNNING) & ifa->ifa_flags)
+ break;
+ }
+ freeifaddrs(ifa0);
+ return 0;
+}
+EOC
+cyn=getifaddrs
+set d_getifaddrs
+eval $trylink
+
diff --git a/mcon/U/d_getinvent.U b/mcon/U/d_getinvent.U
new file mode 100644
index 0000000..124cde8
--- /dev/null
+++ b/mcon/U/d_getinvent.U
@@ -0,0 +1,37 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 2006, Christian Biere
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:d_getinvent: Trylink cat
+?MAKE: -pick add $@ %<
+?S:d_getinvent:
+?S: This variable conditionally defines the HAS_GETINVENT symbol, which
+?S: indicates to the C program that the getinvent() routine is available.
+?S:.
+?C:HAS_GETINVENT:
+?C: This symbol, if defined, indicates that the getinvent() routine is
+?C: available.
+?C:.
+?H:#$d_getinvent HAS_GETINVENT /**/
+?H:.
+?LINT:set d_getinvent
+: see if getinvent exists
+$cat >try.c <<EOC
+#include <invent.h>
+int main(void)
+{
+ static inventory_t *ret;
+ ret = getinvent();
+ return ret ? 0 : 1;
+}
+EOC
+cyn=getinvent
+set d_getinvent
+eval $trylink
+
diff --git a/mcon/U/d_getlogin.U b/mcon/U/d_getlogin.U
new file mode 100644
index 0000000..b3c7581
--- /dev/null
+++ b/mcon/U/d_getlogin.U
@@ -0,0 +1,47 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu>
+?RCS:
+?RCS: $Log: d_getlogin.U,v $
+?RCS: Revision 3.0.1.1 1994/08/29 16:07:41 ram
+?RCS: patch32: created by ADO
+?RCS:
+?MAKE:d_getlogin: Trylink cat i_unistd
+?MAKE: -pick add $@ %<
+?S:d_getlogin:
+?S: This variable conditionally defines the HAS_GETLOGIN symbol, which
+?S: indicates to the C program that the getlogin() routine is available
+?S: to get the login name.
+?S:.
+?C:HAS_GETLOGIN :
+?C: This symbol, if defined, indicates that the getlogin routine is
+?C: available to get the login name.
+?C:.
+?H:#$d_getlogin HAS_GETLOGIN /**/
+?H:.
+?LINT:set d_getlogin
+: see if getlogin exists
+$cat >try.c <<EOC
+#$i_unistd I_UNISTD
+#ifdef I_UNISTD
+#include <unistd.h>
+#endif
+int main(void)
+{
+ static char ret;
+ ret |= *getlogin();
+ return ret ? 0 : 1;
+}
+EOC
+cyn=getlogin
+set d_getlogin
+eval $trylink
+
diff --git a/mcon/U/d_getnameinfo.U b/mcon/U/d_getnameinfo.U
new file mode 100644
index 0000000..10af525
--- /dev/null
+++ b/mcon/U/d_getnameinfo.U
@@ -0,0 +1,73 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 2013, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:d_getnameinfo: Trylink cat i_arpainet i_netdb i_syssock \
+ i_winsock2 i_ws2tcpip i_niin d_windows
+?MAKE: -pick add $@ %<
+?S:d_getnameinfo:
+?S: This variable conditionally defines the HAS_GETNAMEINFO symbol, which
+?S: indicates to the C program that the getnameinfo() routine is available.
+?S:.
+?C:HAS_GETNAMEINFO:
+?C: This symbol is defined when getnameinfo() can be used.
+?C:.
+?H:#$d_getnameinfo HAS_GETNAMEINFO
+?H:.
+?LINT: set d_getnameinfo
+: can we use getnameinfo?
+$cat >try.c <<EOC
+#$i_syssock I_SYS_SOCKET
+#$i_winsock2 I_WINSOCK2
+#$i_ws2tcpip I_WS2TCPIP
+#$i_niin I_NETINET_IN
+#$i_arpainet I_ARPA_INET
+#$i_netdb I_NETDB
+#$d_windows WINDOWS_SYSTEM
+#ifdef WINDOWS_SYSTEM
+#define WINVER 0x0501
+#endif
+#include <sys/types.h>
+#ifdef I_SYS_SOCKET
+#include <sys/socket.h>
+#endif
+#ifdef I_NETINET_IN
+#include <netinet/in.h>
+#endif
+#ifdef I_ARPA_INET
+#include <arpa/inet.h>
+#endif
+#ifdef I_NETDB
+#include <netdb.h>
+#endif
+#ifdef I_WINSOCK2
+#include <Winsock2.h>
+#endif
+#ifdef I_WS2TCPIP
+#include <Ws2tcpip.h>
+#endif
+int main(void)
+{
+ int ret;
+ static struct sockaddr sa;
+ socklen_t salen;
+ char host[NI_MAXHOST];
+ char serv[NI_MAXSERV];
+
+ salen = sizeof(sa);
+ ret = getnameinfo(&sa, salen,
+ host, sizeof host, serv, sizeof serv,
+ NI_NAMEREQD | NI_DGRAM | NI_NOFQDN | NI_NUMERICHOST | NI_NUMERICSERV);
+ return 0 == ret;
+}
+EOC
+cyn=getnameinfo
+set d_getnameinfo '-lWs2_32'
+eval $trylink
+
diff --git a/mcon/U/d_getopt.U b/mcon/U/d_getopt.U
new file mode 100644
index 0000000..61accb7
--- /dev/null
+++ b/mcon/U/d_getopt.U
@@ -0,0 +1,46 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_getopt.U,v $
+?RCS: Revision 3.0 1993/08/18 12:06:13 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_getopt: Trylink cat i_unistd
+?MAKE: -pick add $@ %<
+?S:d_getopt:
+?S: This variable conditionally defines the HAS_GETOPT symbol, which
+?S: indicates that the getopt() routine exists. The getopt() routine
+?S: parses command line options in a standard fashion.
+?S:.
+?C:HAS_GETOPT (GETOPT):
+?C: This symbol, if defined, indicates that the getopt() routine exists.
+?C:.
+?H:#$d_getopt HAS_GETOPT /**/
+?H:.
+?LINT:set d_getopt
+: see if getopt exists
+$cat >try.c <<EOC
+#$i_unistd I_UNISTD
+#ifdef I_UNISTD
+#include <unistd.h>
+#endif
+extern char *optarg;
+extern int optind, opterr, optopt;
+int main(int argc, char *argv[])
+{
+ static int ret;
+ ret |= getopt(argc, argv, "abc");
+ return ret ? 0 : 1;
+}
+EOC
+cyn=getopt
+set d_getopt
+eval $trylink
+
diff --git a/mcon/U/d_getpagsz.U b/mcon/U/d_getpagsz.U
new file mode 100644
index 0000000..2499ebe
--- /dev/null
+++ b/mcon/U/d_getpagsz.U
@@ -0,0 +1,122 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_getpagsz.U,v $
+?RCS: Revision 3.0.1.1 1994/10/29 16:13:10 ram
+?RCS: patch36: added ?F: line for metalint file checking
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:06:14 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_getpagsz pagesize: Oldconfig Myread Trylink cat contains +cc +ccflags \
+ libs rm Findhdr i_unistd
+?MAKE: -pick add $@ %<
+?S:d_getpagsz:
+?S: This variable conditionally defines HAS_GETPAGESIZE if getpagesize()
+?S: is available to get the system page size.
+?S:.
+?S:pagesize (pagsize):
+?S: This variable holds the size in bytes of a system page.
+?S:.
+?C:HAS_GETPAGESIZE (GETPAGESIZE):
+?C: This symbol, if defined, indicates that the getpagesize system call
+?C: is available to get system page size, which is the granularity of
+?C: many memory management calls.
+?C:.
+?X: Don't name it PAGESIZE, this is sometimes used by <sys/param.h>
+?C:PAGESIZE_VALUE (PAGSIZE):
+?C: This symbol holds the size in bytes of a system page (obtained via
+?C: the getpagesize() system call at configuration time or asked to the
+?C: user if the system call is not available).
+?C:.
+?H:#$d_getpagsz HAS_GETPAGESIZE /**/
+?H:#define PAGESIZE_VALUE $pagesize /* System page size, in bytes */
+?H:.
+?F:!page
+?T:guess
+?LINT:set d_getpagsz
+: see if getpagesize exists
+$cat >try.c <<EOC
+#$i_unistd I_UNISTD
+#ifdef I_UNISTD
+#include <unistd.h>
+#endif
+int main(void)
+{
+ static int ret;
+ ret |= getpagesize();
+ return ret ? 0 : 1;
+}
+EOC
+cyn=getpagesize
+set d_getpagsz
+eval $trylink
+
+@if pagesize || PAGESIZE_VALUE
+: determine the system page size
+echo " "
+guess=' (OK to guess)'
+case "$pagesize" in
+'')
+ $cat >page.c <<EOP
+#include <stdio.h>
+#$i_unistd I_UNISTD
+#ifdef I_UNISTD
+#include <unistd.h>
+#endif
+int main(void)
+{
+ printf("%d\n", getpagesize());
+}
+EOP
+ echo "Computing the granularity of memory management calls..." >&4
+ dflt='4096'
+ case "$d_getpagsz" in
+ "$define")
+ if $cc $ccflags -o page page.c $libs >/dev/null 2>&1; then
+ dflt=`./page`
+ guess=''
+ else
+ echo "(I can't seem to compile the test program--guessing)"
+ fi
+ ;;
+ *)
+ if $cc $ccflags -o page page.c $libs -lPW >/dev/null 2>&1; then
+ dflt=`./page`
+ guess=''
+ echo "(For your eyes only: I used the getpagesize() from -lPW.)"
+ else
+ if $contains PAGESIZE `./findhdr sys/param.h` >/dev/null 2>&1; then
+ $cat >page.c <<EOP
+#include <sys/param.h>
+#include <stdio.h>
+int main(void)
+{
+ printf("%d\n", (int) PAGESIZE);
+}
+EOP
+ if $cc $ccflags -o page page.c $libs >/dev/null 2>&1; then
+ dflt=`./page`
+ guess=''
+ echo "(Using value of PAGESIZE found in <sys/param.h>.)"
+ fi
+ fi
+ fi
+ ;;
+ esac
+ ;;
+*) dflt="$pagesize"; guess='';;
+esac
+rp="What is the system page size, in bytes$guess?"
+. ./myread
+pagesize=$ans
+$rm -f page.c page
+
+@end
diff --git a/mcon/U/d_getpgid.U b/mcon/U/d_getpgid.U
new file mode 100644
index 0000000..e318ce2
--- /dev/null
+++ b/mcon/U/d_getpgid.U
@@ -0,0 +1,48 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1996, Andy Dougherty
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_getpgid.U,v $
+?RCS: Revision 3.0.1.1 1997/02/28 15:33:44 ram
+?RCS: patch61: created
+?RCS:
+?MAKE:d_getpgid: Trylink cat i_unistd
+?MAKE: -pick add $@ %<
+?S:d_getpgid:
+?S: This variable conditionally defines the HAS_GETPGID symbol, which
+?S: indicates to the C program that the getpgid(pid) function
+?S: is available to get the process group id.
+?S:.
+?C:HAS_GETPGID:
+?C: This symbol, if defined, indicates to the C program that
+?C: the getpgid(pid) function is available to get the
+?C: process group id.
+?C:.
+?H:#$d_getpgid HAS_GETPGID /**/
+?H:.
+?LINT:set d_getpgid
+: see if getpgid exists
+$cat >try.c <<EOC
+#include <sys/types.h>
+#$i_unistd I_UNISTD
+#ifdef I_UNISTD
+#include <unistd.h>
+#endif
+int main(void)
+{
+ static pid_t pid, ret;
+ ret |= getpgid(pid);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=getpgid
+set d_getpgid
+eval $trylink
+
diff --git a/mcon/U/d_getpgrp.U b/mcon/U/d_getpgrp.U
new file mode 100644
index 0000000..c11c524
--- /dev/null
+++ b/mcon/U/d_getpgrp.U
@@ -0,0 +1,83 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_getpgrp.U,v $
+?RCS: Revision 3.0.1.1 1997/02/28 15:34:28 ram
+?RCS: patch61: new USE_BSD_GETPGRP to detect the getpgrp() flavour
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:06:15 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_getpgrp d_bsdgetpgrp: Trylink Setvar cat i_unistd
+?MAKE: -pick add $@ %<
+?S:d_getpgrp:
+?S: This variable conditionally defines HAS_GETPGRP if getpgrp() is
+?S: available to get the current process group.
+?S:.
+?S:d_bsdgetpgrp:
+?S: This variable conditionally defines USE_BSD_GETPGRP if
+?S: getpgrp needs one arguments whereas USG one needs none.
+?S:.
+?C:HAS_GETPGRP (GETPGRP):
+?C: This symbol, if defined, indicates that the getpgrp routine is
+?C: available to get the current process group.
+?C:.
+?C:USE_BSD_GETPGRP:
+?C: This symbol, if defined, indicates that getpgrp needs one
+?C: arguments whereas the USG one needs none.
+?C:.
+?H:#$d_getpgrp HAS_GETPGRP /**/
+?H:#$d_bsdgetpgrp USE_BSD_GETPGRP /**/
+?H:.
+?LINT:set d_getpgrp d_bsdgetpgrp
+: see if getpgrp exists
+$cat >try.c <<EOC
+#include <sys/types.h>
+#$i_unistd I_UNISTD
+#ifdef I_UNISTD
+#include <unistd.h>
+#endif
+int main(void)
+{
+ static pid_t ret, pid;
+ ret |= getpgrp(pid);
+ return ret ? 0 : 1;
+}
+EOC
+cyn="whether you have a BSD-like getpgrp()"
+set d_bsdgetpgrp
+eval $trylink
+
+case "$d_bsdgetpgrp" in
+$define)
+ val="$define"
+ set d_getpgrp
+ eval $setvar
+ ;;
+*)
+ $cat >try.c <<EOC
+#include <sys/types.h>
+#$i_unistd I_UNISTD
+#ifdef I_UNISTD
+#include <unistd.h>
+#endif
+int main(void)
+{
+ static pid_t ret;
+ ret |= getpgrp();
+ return ret ? 0 : 1;
+}
+EOC
+ cyn="whether you have a USG-like getpgrp() instead"
+ set d_getpgrp
+ eval $trylink
+ ;;
+esac
+
diff --git a/mcon/U/d_getpgrp2.U b/mcon/U/d_getpgrp2.U
new file mode 100644
index 0000000..67aec2a
--- /dev/null
+++ b/mcon/U/d_getpgrp2.U
@@ -0,0 +1,46 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_getpgrp2.U,v $
+?RCS: Revision 3.0 1993/08/18 12:06:15 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_getpgrp2: Trylink cat i_unistd
+?MAKE: -pick add $@ %<
+?S:d_getpgrp2:
+?S: This variable conditionally defines the HAS_GETPGRP2 symbol, which
+?S: indicates to the C program that the getpgrp2() (as in DG/UX) routine
+?S: is available to get the current process group.
+?S:.
+?C:HAS_GETPGRP2 (GETPGRP2):
+?C: This symbol, if defined, indicates that the getpgrp2() (as in DG/UX)
+?C: routine is available to get the current process group.
+?C:.
+?H:#$d_getpgrp2 HAS_GETPGRP2 /**/
+?H:.
+?LINT:set d_getpgrp2
+: see if getpgrp2 exists
+$cat >try.c <<EOC
+#include <sys/types.h>
+#$i_unistd I_UNISTD
+#ifdef I_UNISTD
+#include <unistd.h>
+#endif
+int main(void)
+{
+ static pid_t pid, ret;
+ ret |= getpgrp2(pid);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=getpgrp2
+set d_getpgrp2
+eval $trylink
+
diff --git a/mcon/U/d_getppid.U b/mcon/U/d_getppid.U
new file mode 100644
index 0000000..c98debc
--- /dev/null
+++ b/mcon/U/d_getppid.U
@@ -0,0 +1,48 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu>
+?RCS:
+?RCS: $Log: d_getppid.U,v $
+?RCS: Revision 3.0.1.1 1994/08/29 16:07:45 ram
+?RCS: patch32: created by ADO
+?RCS:
+?MAKE:d_getppid: Trylink cat i_unistd
+?MAKE: -pick add $@ %<
+?S:d_getppid:
+?S: This variable conditionally defines the HAS_GETPPID symbol, which
+?S: indicates to the C program that the getppid() routine is available
+?S: to get the parent process ID.
+?S:.
+?C:HAS_GETPPID :
+?C: This symbol, if defined, indicates that the getppid routine is
+?C: available to get the parent process ID.
+?C:.
+?H:#$d_getppid HAS_GETPPID /**/
+?H:.
+?LINT:set d_getppid
+: see if getppid exists
+$cat >try.c <<EOC
+#include <sys/types.h>
+#$i_unistd I_UNISTD
+#ifdef I_UNISTD
+#include <unistd.h>
+#endif
+int main(void)
+{
+ static pid_t ret;
+ ret |= getppid();
+ return ret ? 0 : 1;
+}
+EOC
+cyn=getppid
+set d_getppid
+eval $trylink
+
diff --git a/mcon/U/d_getprior.U b/mcon/U/d_getprior.U
new file mode 100644
index 0000000..74bf4bd
--- /dev/null
+++ b/mcon/U/d_getprior.U
@@ -0,0 +1,47 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_getprior.U,v $
+?RCS: Revision 3.0 1993/08/18 12:06:16 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_getprior: Trylink cat i_sysresrc
+?MAKE: -pick add $@ %<
+?S:d_getprior:
+?S: This variable conditionally defines HAS_GETPRIORITY if getpriority()
+?S: is available to get a process's priority.
+?S:.
+?C:HAS_GETPRIORITY (GETPRIORITY):
+?C: This symbol, if defined, indicates that the getpriority routine is
+?C: available to get a process's priority.
+?C:.
+?H:#$d_getprior HAS_GETPRIORITY /**/
+?H:.
+: see if getpriority exists
+?LINT:set d_getprior
+$cat >try.c <<EOC
+#$i_sysresrc I_SYS_RESOURCE
+#ifdef I_SYS_RESOURCE
+#include <sys/resource.h>
+#endif
+int main(void)
+{
+ static int ret;
+ static id_t id;
+ ret |= getpriority(PRIO_PROCESS, id);
+ ret |= getpriority(PRIO_PGRP, id);
+ ret |= getpriority(PRIO_USER, id);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=getpriority
+set d_getprior
+eval $trylink
+
diff --git a/mcon/U/d_getprogname.U b/mcon/U/d_getprogname.U
new file mode 100644
index 0000000..a5a6175
--- /dev/null
+++ b/mcon/U/d_getprogname.U
@@ -0,0 +1,40 @@
+?RCS:
+?RCS: Copyright (c) 2015 Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:d_getprogname: Trylink cat i_stdlib
+?MAKE: -pick add $@ %<
+?S:d_getprogname:
+?S: This variable conditionally defines the HAS_GETPROGNAME
+?S: symbol, which indicates to the C program that getprogname()
+?S: is available to get the program name.
+?S:.
+?C:HAS_GETPROGNAME:
+?C: This symbol is defined when getprogname() is there to get the
+?C: program name.
+?C:.
+?H:#$d_getprogname HAS_GETPROGNAME
+?H:.
+?LINT: set d_getprogname
+: can we use getprogname?
+$cat >try.c <<EOC
+#include <stdio.h>
+#$i_stdlib I_STDLIB
+#ifdef I_STDLIB
+#include <stdlib.h>
+#endif
+int main(void)
+{
+ printf("%s\n", getprogname());
+ return 0;
+}
+EOC
+cyn=getprogname
+set d_getprogname
+eval $trylink
+
diff --git a/mcon/U/d_getpwent.U b/mcon/U/d_getpwent.U
new file mode 100644
index 0000000..b16a012
--- /dev/null
+++ b/mcon/U/d_getpwent.U
@@ -0,0 +1,42 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_getpwent.U,v $
+?RCS: Revision 3.0 1993/08/18 12:06:17 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_getpwent: Trylink cat
+?MAKE: -pick add $@ %<
+?S:d_getpwent:
+?S: This variable conditionally defines the HAS_GETPWENT symbol, which
+?S: indicates to the C program that it should use the getpwent()
+?S: routine instead of the getpw() routine.
+?S:.
+?C:HAS_GETPWENT (GETPWENT):
+?C: This symbol, if defined, indicates that the getpwent() routine
+?C: should be used instead of the getpw() routine.
+?C:.
+?H:#$d_getpwent HAS_GETPWENT /**/
+?H:.
+?LINT:set d_getpwent
+: see if there is a getpwent
+$cat >try.c <<EOC
+#include <pwd.h>
+int main(void)
+{
+ struct passwd pw;
+ pw = *getpwent();
+ return pw.pw_name ? 0 : 1;
+}
+EOC
+cyn=getpwent
+set d_getpwent
+eval $trylink
+
diff --git a/mcon/U/d_getpwnam.U b/mcon/U/d_getpwnam.U
new file mode 100644
index 0000000..f2c784f
--- /dev/null
+++ b/mcon/U/d_getpwnam.U
@@ -0,0 +1,38 @@
+?RCS:
+?RCS: Copyright (c) 2015 Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:d_getpwnam: Trylink cat
+?MAKE: -pick add $@ %<
+?S:d_getpwnam:
+?S: This variable conditionally defines the HAS_GETPWNAM symbol, which
+?S: indicates to the C program that it can use the getpwnam() routine
+?S: to get the /etc/passwd structure entries for given user name.
+?S:.
+?C:HAS_GETPWNAM:
+?C: This symbol, if defined, indicates that the getpwnam() routine
+?C: is available to get the /etc/passwd structure entries for given
+?C: user name.
+?C:.
+?H:#$d_getpwnam HAS_GETPWNAM /**/
+?H:.
+?LINT:set d_getpwnam
+: see if there is a getpwnam
+$cat >try.c <<EOC
+#include <pwd.h>
+int main(void)
+{
+ struct passwd pw;
+ pw = *getpwnam("foo");
+ return pw.pw_name ? 0 : 1;
+}
+EOC
+cyn=getpwnam
+set d_getpwnam
+eval $trylink
+
diff --git a/mcon/U/d_getpwuid.U b/mcon/U/d_getpwuid.U
new file mode 100644
index 0000000..af5eb0d
--- /dev/null
+++ b/mcon/U/d_getpwuid.U
@@ -0,0 +1,38 @@
+?RCS:
+?RCS: Copyright (c) 2015 Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:d_getpwuid: Trylink cat
+?MAKE: -pick add $@ %<
+?S:d_getpwuid:
+?S: This variable conditionally defines the HAS_GETPWUID symbol, which
+?S: indicates to the C program that it can use the getpwuid() routine
+?S: to get the /etc/passwd structure entries for given user ID.
+?S:.
+?C:HAS_GETPWUID:
+?C: This symbol, if defined, indicates that the getpwuid() routine
+?C: is available to get the /etc/passwd structure entries for given
+?C: user ID.
+?C:.
+?H:#$d_getpwuid HAS_GETPWUID /**/
+?H:.
+?LINT:set d_getpwuid
+: see if there is a getpwuid
+$cat >try.c <<EOC
+#include <pwd.h>
+int main(void)
+{
+ struct passwd pw;
+ pw = *getpwuid(0);
+ return pw.pw_name ? 0 : 1;
+}
+EOC
+cyn=getpwuid
+set d_getpwuid
+eval $trylink
+
diff --git a/mcon/U/d_getrlimit.U b/mcon/U/d_getrlimit.U
new file mode 100644
index 0000000..b50d86f
--- /dev/null
+++ b/mcon/U/d_getrlimit.U
@@ -0,0 +1,46 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 2012 Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_getrlimit.U,v $
+?RCS:
+?MAKE:d_getrlimit: Trylink cat i_systime
+?MAKE: -pick add $@ %<
+?S:d_getrlimit:
+?S: This variable conditionally defines the HAS_GETRLIMIT symbol, which
+?S: indicates to the C program that the getrlimit() routine is available
+?S: to get process resource limits.
+?S:.
+?C:HAS_GETRLIMIT :
+?C: This symbol, if defined, indicates that the getrlimit() routine is
+?C: available to get process resource limits.
+?C:.
+?H:#$d_getrlimit HAS_GETRLIMIT /**/
+?H:.
+?LINT:set d_getrlimit
+: see if getrlimit exists
+$cat >try.c <<EOC
+#$i_systime I_SYS_TIME
+#ifdef I_SYS_TIME
+#include <sys/time.h>
+#endif
+#include <sys/resource.h>
+int main(void)
+{
+ static struct rlimit lim;
+ int ret;
+ ret |= getrlimit(RLIMIT_CORE, &lim);
+ ret += lim.rlim_cur > lim.rlim_max ? 1 : 0;
+ return ret ? 0 : 1;
+}
+EOC
+cyn=getrlimit
+set d_getrlimit
+eval $trylink
+
diff --git a/mcon/U/d_gettext.U b/mcon/U/d_gettext.U
new file mode 100644
index 0000000..9e2d4eb
--- /dev/null
+++ b/mcon/U/d_gettext.U
@@ -0,0 +1,37 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 2006, Christian Biere
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:d_gettext: Trylink cat
+?MAKE: -pick add $@ %<
+?S:d_gettext:
+?S: This variable conditionally defines the HAS_GETTEXT symbol, which
+?S: indicates to the C program that the gettext() routine is available.
+?S:.
+?C:HAS_GETTEXT:
+?C: This symbol, if defined, indicates that the gettext routine is
+?C: available.
+?C:.
+?H:#$d_gettext HAS_GETTEXT /**/
+?H:.
+?LINT:set d_gettext
+: see if gettext exists
+$cat >try.c <<EOC
+#include <libintl.h>
+int main(void)
+{
+ static char ret;
+ ret |= *gettext("msgid");
+ return ret ? 0 : 1;
+}
+EOC
+cyn=gettext
+set d_gettext -lintl
+eval $trylink
+
diff --git a/mcon/U/d_getuid.U b/mcon/U/d_getuid.U
new file mode 100644
index 0000000..49071b8
--- /dev/null
+++ b/mcon/U/d_getuid.U
@@ -0,0 +1,40 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 2006, Christian Biere
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:d_getuid: Trylink cat i_unistd
+?MAKE: -pick add $@ %<
+?S:d_getuid:
+?S: This variable conditionally defines the HAS_GETUID symbol, which
+?S: indicates to the C program that getuid() is available.
+?S:.
+?C:HAS_GETUID:
+?C: This symbol is defined when getuid() can be used.
+?C:.
+?H:#$d_getuid HAS_GETUID
+?H:.
+?LINT: set d_getuid
+: can we use getuid?
+$cat >try.c <<EOC
+#include <sys/types.h>
+#$i_unistd I_UNISTD
+#ifdef I_UNISTD
+#include <unistd.h>
+#endif
+int main(void)
+{
+ static uid_t ret;
+ ret |= getuid();
+ return ret ? 0 : 1;
+}
+EOC
+cyn=getuid
+set d_getuid
+eval $trylink
+
diff --git a/mcon/U/d_getwd.U b/mcon/U/d_getwd.U
new file mode 100644
index 0000000..d55cd13
--- /dev/null
+++ b/mcon/U/d_getwd.U
@@ -0,0 +1,48 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_getwd.U,v $
+?RCS: Revision 3.0 1993/08/18 12:06:18 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_getwd: Trylink cat i_unistd
+?MAKE: -pick add $@ %<
+?S:d_getwd:
+?S: This variable conditionally defines HAS_GETWD if getwd() is
+?S: available to get working directory. If not, you should
+?S: probably use getcwd().
+?S:.
+?C:HAS_GETWD (GETWD):
+?C: This symbol, if defined, indicates that the getwd routine is
+?C: available to get working directory. If not, you should
+?C: probably use getcwd().
+?C:.
+?H:#$d_getwd HAS_GETWD /**/
+?H:.
+?LINT:set d_getwd
+: see if getwd exists
+$cat >try.c <<EOC
+#include <sys/param.h>
+#$i_unistd I_UNISTD
+#ifdef I_UNISTD
+#include <unistd.h>
+#endif
+int main(void)
+{
+ static char ret;
+ static char buf[MAXPATHLEN];
+ ret |= *getwd(buf);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=getwd
+set d_getwd
+eval $trylink
+
diff --git a/mcon/U/d_gnugettext.U b/mcon/U/d_gnugettext.U
new file mode 100644
index 0000000..8292cd7
--- /dev/null
+++ b/mcon/U/d_gnugettext.U
@@ -0,0 +1,54 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 2006, Christian Biere
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:d_gnugettext: Myread Setvar cat d_nls +cc +ccflags +ldflags +libs
+?MAKE: -pick add $@ %<
+?S:d_gnugettext:
+?S: This variable conditionally defines HAS_GNU_GETTEXT
+?S:.
+?C:HAS_GNU_GETTEXT:
+?C: This symbol, if defined, indicates that GNU gettext() is available.
+?C:.
+?H:#$d_gnugettext HAS_GNU_GETTEXT /**/
+?H:.
+?F:!t.c !t
+?LINT:set d_gnugettext
+?LINT:usefile t t.c
+: determine whether we have GNU 'gettext()'
+echo " "
+case "$d_nls" in
+"$define")
+ echo "Looking for GNU gettext()..." >&4
+ $cat >t.c <<'EOC'
+#include <libintl.h>
+extern int _nl_msg_cat_cntr;
+extern int *_nl_domain_bindings;
+int main()
+{
+ bindtextdomain ("", "");
+ return (int) gettext ("") + _nl_msg_cat_cntr + *_nl_domain_bindings;
+}
+EOC
+ if $cc $ccflags $ldflags -o t t.c $libs >/dev/null 2>&1; then
+ echo "Yes, you have the GNU version." >&4
+ val="$define"
+ else
+ echo "No, you don't have the GNU version." >&4
+ val="$undef"
+ fi
+ ;;
+*)
+ echo "You don't have NLS, you can't have GNU gettext()!" >&4
+ val="$undef"
+ ;;
+esac
+set d_gnugettext
+eval $setvar
+
diff --git a/mcon/U/d_gnulibc.U b/mcon/U/d_gnulibc.U
new file mode 100644
index 0000000..a839def
--- /dev/null
+++ b/mcon/U/d_gnulibc.U
@@ -0,0 +1,98 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1996,1998 Andy Dougherty
+?RCS: Copyright (c) 1996, Sven Verdoolaege
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:d_gnulibc gnulibc_version: Myread Oldconfig Setvar rm_try \
+ cat Compile run
+?MAKE: -pick add $@ %<
+?S:d_gnulibc:
+?S: Defined if we're dealing with the GNU C Library.
+?S:.
+?S:gnulibc_version:
+?S: This variable contains the version number of the GNU C library.
+?S: It is usually something like '2.2.5'. It is a plain '' if this
+?S: is not the GNU C library, or if the version is unknown.
+?S:.
+?C:HAS_GNULIBC ~ %<:
+?C: This symbol, if defined, indicates to the C program that
+?C: the GNU C library is being used. A better check is to use
+?C: the __GLIBC__ and __GLIBC_MINOR__ symbols supplied with glibc.
+?C:.
+?H:?%<:#$d_gnulibc HAS_GNULIBC /**/
+?H:?%<:#if defined(HAS_GNULIBC) && !defined(_GNU_SOURCE)
+?H:?%<:#define _GNU_SOURCE
+?H:?%<:#endif
+?H:.
+?F:!glibc.ver !try.c !try
+?LINT: set d_gnulibc
+?LINT: usefile try.c
+?LINT: known _GNU_SOURCE
+?X: gnulibc can be executed by calling __libc_main().
+?X: Ulrich Drepper doesn't think any other libc does that,
+?X: but we check if it says 'GNU C Library' to be sure.
+?X:
+?X: Alas, as of 3/1998 glibc 2.0.7 reportedly isn't going to
+?X: have __libc_main() anymore. :-(. Fortunately, all released
+?X: versions of glibc 2.x.x _do_ have CPP variables. For 2.0.6,
+?X: they are:
+?X: #define __GLIBC__ 2
+?X: #define__GLIBC_MINOR__ 0.
+?X: (The '6' isn't available :-(.
+?X: glibc2.1 will also have
+?X: extern const char * __gnu_get_libc_release(void);
+?X: extern const char * __gnu_get_libc_version(void);
+?X: functions. --thanks to Andreas Jaeger. --AD 6/1998.
+?X: Although the exact format isn't documented, __gnu_get_libc_version()
+?X: returns a simple string '2.1.3' in glibc 2.1.3.
+?X:
+: determine whether we are using a GNU C library
+echo " "
+echo "Checking for GNU C Library..." >&4
+cat >try.c <<'EOCP'
+/* Find out version of GNU C library. __GLIBC__ and __GLIBC_MINOR__
+ alone are insufficient to distinguish different versions, such as
+ 2.0.6 and 2.0.7. The function gnu_get_libc_version() appeared in
+ libc version 2.1.0. A. Dougherty, June 3, 2002.
+*/
+#include <stdio.h>
+int main(void)
+{
+#ifdef __GLIBC__
+# ifdef __GLIBC_MINOR__
+# if __GLIBC__ >= 2 && __GLIBC_MINOR__ >= 1
+# include <gnu/libc-version.h>
+ printf("%s\n", gnu_get_libc_version());
+# else
+ printf("%d.%d\n", __GLIBC__, __GLIBC_MINOR__);
+# endif
+# else
+ printf("%d\n", __GLIBC__);
+# endif
+ return 0;
+#else
+ return 1;
+#endif
+}
+EOCP
+set try
+if eval $compile_ok && $run ./try > glibc.ver; then
+ val="$define"
+ gnulibc_version=`$cat glibc.ver`
+ echo "You are using the GNU C Library version $gnulibc_version"
+else
+ val="$undef"
+ gnulibc_version=''
+ echo "You are not using the GNU C Library"
+fi
+$rm_try glibc.ver
+set d_gnulibc
+eval $setvar
+
diff --git a/mcon/U/d_group.U b/mcon/U/d_group.U
new file mode 100644
index 0000000..3c8f914
--- /dev/null
+++ b/mcon/U/d_group.U
@@ -0,0 +1,23 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu>
+?RCS:
+?RCS: $Log: d_group.U,v $
+?RCS: Revision 3.0.1.2 1997/02/28 15:34:52 ram
+?RCS: patch61: useless unit dropped.
+?RCS:
+?RCS: Revision 3.0.1.1 1994/08/29 16:07:48 ram
+?RCS: patch32: created by ADO
+?RCS:
+?X:
+?X: Useless unit dropped.
+?X:
+?LINT:empty
diff --git a/mcon/U/d_havetlib.U b/mcon/U/d_havetlib.U
new file mode 100644
index 0000000..24017ad
--- /dev/null
+++ b/mcon/U/d_havetlib.U
@@ -0,0 +1,125 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_havetlib.U,v $
+?RCS: Revision 3.0.1.2 1997/02/28 15:36:31 ram
+?RCS: patch61: replaced .a with $_a all over the place
+?RCS: patch61: likewise for .o replaced by $_o
+?RCS:
+?RCS: Revision 3.0.1.1 1994/05/06 14:44:06 ram
+?RCS: patch23: added AIX support to accept shared lib stub as termlib (WED)
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:06:19 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_havetlib termlib: cat contains Myread Loc Filexp Oldconfig libpth \
+ test uname _a _o
+?MAKE: -pick add $@ %<
+?S:d_havetlib:
+?S: This variable conditionally defines the HAS_TERMLIB symbol, which
+?S: indicates to the C program that termlib-style routines are available.
+?S:.
+?S:termlib:
+?S: This variable contains the argument to pass to the loader to get
+?S: termlib-style routines. It is up to the Makefile.SH to make sure
+?S: the value gets to the right command. Note that on many systems the
+?S: termlib routines are emulated by the curses or terminfo library.
+?S:.
+?C:HAS_TERMLIB (HAVETERMLIB):
+?C: This symbol, when defined, indicates that termlib-style routines
+?C: are available. There is nothing to include.
+?C:.
+?H:#$d_havetlib HAS_TERMLIB /**/
+?H:.
+?T:xxx
+: where do we get termlib routines from
+echo " "
+xxx=`./loc libcurses$_a x $libpth`
+case "$xxx" in
+/*)
+ ar t $xxx >grimble
+ if $contains tputs$_o grimble >/dev/null 2>&1; then
+ termlib='-lcurses'
+ d_havetlib="$define"
+ echo "Terminfo library found." >&4
+ elif $test "x`$uname 2>/dev/null`" = xAIX; then
+ # Ok, do the AIX shr.o fun thing
+ /usr/ccs/bin/nm -en $xxx 2>/dev/null >grimble
+ if $contains '^tputs .*|extern|' grimble >/dev/null 2>&1; then
+ termlib='-lcurses'
+ d_havetlib="$define"
+ echo "AIX Terminfo library found." >&4
+ else
+ xxx=x
+ fi
+ else
+ xxx=x
+ fi
+ rm -f grimble
+ ;;
+esac
+case "$xxx" in
+x)
+ xxx=`./loc libtermlib$_a x $libpth`
+ case "$xxx" in
+ /usr/lib*|/lib*)
+ termlib='-ltermlib'
+ d_havetlib="$define"
+ echo "Termlib library found." >&4
+ ;;
+ /*)
+ termlib="$xxx"
+ d_havetlib="$define"
+ echo "Termlib library found." >&4
+ ;;
+ *)
+ xxx=`./loc libtermcap$_a x $libpth`
+ case "$xxx" in
+ /usr/lib*|/lib*)
+ termlib='-ltermcap'
+ d_havetlib="$define"
+ echo "Termcap library found." >&4
+ ;;
+ /*)
+ termlib="$xxx"
+ d_havetlib="$define"
+ echo "Termcap library found." >&4
+ ;;
+ *)
+ case "$termlib" in
+ '')
+ dflt=y
+rp="Your system appears to NOT have termlib-style routines. Is this true?"
+ . ./myread
+ case "$ans" in
+ n*|f*) d_havetlib="$define"
+ $cat <<'EOM'
+Then where are the termlib-style routines kept? Specify either -llibname
+or a full pathname (~name ok).
+
+EOM
+ dflt=''
+ rp='Specify termlib path:'
+ . ./myread
+ termlib=`./filexp $ans`
+ ;;
+ *)
+ d_havetlib="$undef"
+ termlib=''
+ echo "You will have to play around with term.c then." >&4
+ ;;
+ esac
+ echo " ";;
+ *) echo "You said termlib was $termlib before." >&4;;
+ esac;;
+ esac;;
+ esac;;
+esac
+
diff --git a/mcon/U/d_herror.U b/mcon/U/d_herror.U
new file mode 100644
index 0000000..e379850
--- /dev/null
+++ b/mcon/U/d_herror.U
@@ -0,0 +1,36 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 2006, Christian Biere
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:d_herror: Trylink cat
+?MAKE: -pick add $@ %<
+?S:d_herror:
+?S: This variable conditionally defines the HAS_HERROR symbol, which
+?S: indicates to the C program that the herror() routine is available.
+?S:.
+?C:HAS_HERROR:
+?C: This symbol, if defined, indicates that the herror routine is
+?C: available.
+?C:.
+?H:#$d_herror HAS_HERROR /**/
+?H:.
+?LINT:set d_herror
+: see if herror exists
+$cat >try.c <<EOC
+#include <netdb.h>
+int main(void)
+{
+ herror("string");
+ return 0;
+}
+EOC
+cyn=herror
+set d_herror
+eval $trylink
+
diff --git a/mcon/U/d_hidnet.U b/mcon/U/d_hidnet.U
new file mode 100644
index 0000000..ffa8a5d
--- /dev/null
+++ b/mcon/U/d_hidnet.U
@@ -0,0 +1,68 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_hidnet.U,v $
+?RCS: Revision 3.0 1993/08/18 12:06:20 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_hidnet hiddennet: cat sed myhostname mydomain Myread Oldconfig
+?MAKE: -pick add $@ %<
+?S:d_hidnet:
+?S: This variable conditionally defines the symbol HIDDEN_NET, which
+?S: tells the C program that it should pretend it is on a different
+?S: host for purposes of advertising a mailing address.
+?S:.
+?S:hiddennet:
+?S: This variable contains the value eventually given to the symbol
+?S: HIDDEN_NET, if d_hidnet defines it. If defined, it's the name
+?S: of the host which serves as the mail server for a network that
+?S: is invisible to the outside world.
+?S:.
+?C:HIDDEN_NET (HIDDENNET):
+?C: This symbol, if defined, contains the host name that you want to
+?C: advertise to the outside world. This name can be different from
+?C: your actual host name, as long as the machine you specify knows
+?C: how to forward mail to you.
+?C:.
+?H:#$d_hidnet HIDDEN_NET "$hiddennet" /**/
+?H:.
+: now get the host name to advertise as our mailing address
+case "$hiddennet" in
+'') dflt=n;;
+*) dflt=y;;
+esac
+$cat <<EOM
+
+Some sites are on "hidden" networks, in the sense that the network appears
+to the outside world as a single machine. The advertised name of any host
+on this hidden network is the name of one machine on the local network which
+knows how to forward mail to any other host on the hidden network.
+
+Do you wish to advertise a different hostname to the world than the one your
+own host ($myhostname$mydomain) has?
+
+EOM
+rp='Use "hidden" network?'
+. ./myread
+case "$ans" in
+n*) d_hidnet="$undef" hiddennet='';;
+*)
+ d_hidnet="$define"
+ echo " "
+ case "$hiddennet" in
+ '') dflt=`echo $mydomain | $sed -e 's/^\.//'`;;
+ *) dflt="$hiddennet";;
+ esac
+ rp='What hostname do you wish to advertise?'
+ . ./myread
+ hiddennet="$ans"
+ ;;
+esac
+
diff --git a/mcon/U/d_hstrerror.U b/mcon/U/d_hstrerror.U
new file mode 100644
index 0000000..5e6a3f2
--- /dev/null
+++ b/mcon/U/d_hstrerror.U
@@ -0,0 +1,37 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 2006, Christian Biere
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:d_hstrerror: Trylink cat
+?MAKE: -pick add $@ %<
+?S:d_hstrerror:
+?S: This variable conditionally defines the HAS_HSTRERROR symbol, which
+?S: indicates to the C program that the hstrerror() routine is available.
+?S:.
+?C:HAS_HSTRERROR:
+?C: This symbol, if defined, indicates that the hstrerror routine is
+?C: available.
+?C:.
+?H:#$d_hstrerror HAS_HSTRERROR /**/
+?H:.
+?LINT:set d_hstrerror
+: see if hstrerror exists
+$cat >try.c <<EOC
+#include <netdb.h>
+int main(void)
+{
+ static char ret;
+ ret |= *hstrerror(1);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=hstrerror
+set d_hstrerror
+eval $trylink
+
diff --git a/mcon/U/d_htonl.U b/mcon/U/d_htonl.U
new file mode 100644
index 0000000..5e601b0
--- /dev/null
+++ b/mcon/U/d_htonl.U
@@ -0,0 +1,80 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_htonl.U,v $
+?RCS: Revision 3.0.1.2 1994/08/29 16:09:25 ram
+?RCS: patch32: now properly handles htonl() and friends when macros (ADO)
+?RCS:
+?RCS: Revision 3.0.1.1 1994/05/06 14:45:00 ram
+?RCS: patch23: now also check for htonl() macro (ADO)
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:06:22 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_htonl: Trylink cat i_niin i_sysin
+?MAKE: -pick add $@ %<
+?S:d_htonl:
+?S: This variable conditionally defines HAS_HTONL if htonl() and its
+?S: friends are available to do network order byte swapping.
+?S:.
+?C:HAS_HTONL (HTONL):
+?C: This symbol, if defined, indicates that the htonl() routine (and
+?C: friends htons() ntohl() ntohs()) are available to do network
+?C: order byte swapping.
+?C:.
+?C:HAS_HTONS (HTONS):
+?C: This symbol, if defined, indicates that the htons() routine (and
+?C: friends htonl() ntohl() ntohs()) are available to do network
+?C: order byte swapping.
+?C:.
+?C:HAS_NTOHL (NTOHL):
+?C: This symbol, if defined, indicates that the ntohl() routine (and
+?C: friends htonl() htons() ntohs()) are available to do network
+?C: order byte swapping.
+?C:.
+?C:HAS_NTOHS (NTOHS):
+?C: This symbol, if defined, indicates that the ntohs() routine (and
+?C: friends htonl() htons() ntohl()) are available to do network
+?C: order byte swapping.
+?C:.
+?H:#$d_htonl HAS_HTONL /**/
+?H:#$d_htonl HAS_HTONS /**/
+?H:#$d_htonl HAS_NTOHL /**/
+?H:#$d_htonl HAS_NTOHS /**/
+?H:.
+?LINT:set d_htonl
+: see if htonl --and friends-- exist
+$cat >try.c <<EOC
+#include <stdio.h>
+#include <sys/types.h>
+#$i_niin I_NETINET_IN
+#ifdef I_NETINET_IN
+#include <netinet/in.h>
+#endif
+#$i_sysin I_SYS_IN
+#ifdef I_SYS_IN
+#include <sys/in.h>
+#endif
+int main(int argc, char *argv[])
+{
+ static unsigned long ret;
+ unsigned char val = argc;
+ (void) argv;
+ ret |= htonl(val);
+ ret |= htons(val);
+ ret |= ntohl(val);
+ ret |= ntohs(val);
+ return ret ? 0 : 1;
+}
+EOC
+cyn="whether htonl() and friends exist"
+set d_htonl
+eval $trylink
+
diff --git a/mcon/U/d_iconv.U b/mcon/U/d_iconv.U
new file mode 100644
index 0000000..377f789
--- /dev/null
+++ b/mcon/U/d_iconv.U
@@ -0,0 +1,47 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 2006, Christian Biere
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:d_iconv: Trylink cat i_iconv
+?MAKE: -pick add $@ %<
+?S:d_iconv:
+?S: This variable conditionally defines the HAS_ICONV symbol, which
+?S: indicates to the C program that the iconv() routine from iconv is
+?S: available.
+?S:.
+?C:HAS_ICONV:
+?C: This symbol, if defined, indicates that the iconv iconv() routine is
+?C: available.
+?C:.
+?H:#$d_iconv HAS_ICONV /**/
+?H:.
+?LINT:set d_iconv
+: see if iconv exists
+$cat >try.c <<EOC
+#include <sys/types.h>
+#$i_iconv I_ICONV
+#ifdef I_ICONV
+#include <iconv.h>
+#endif
+int main(void)
+{
+ static size_t n, srcleft, dstleft;
+ static char *src, *dst;
+ static int ret;
+ iconv_t cd;
+ cd = iconv_open("ISO8859-1", "UTF-8");
+ n |= iconv(cd, (void *) &src, &srcleft, (void *) &dst, &dstleft);
+ ret |= iconv_close(cd);
+ return 0 != ret;
+}
+EOC
+cyn=iconv
+set d_iconv '-liconv'
+eval $trylink
+
diff --git a/mcon/U/d_ieee754.U b/mcon/U/d_ieee754.U
new file mode 100644
index 0000000..124e09c
--- /dev/null
+++ b/mcon/U/d_ieee754.U
@@ -0,0 +1,88 @@
+?RCS:
+?RCS: Copyright (c) 2012 Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:d_ieee754 ieee754_byteorder: cat contains echo n c \
+ Myread Oldconfig Loc Setvar +cc +ccflags rm _o
+?MAKE: -pick add $@ %<
+?S:d_ieee754:
+?S: This variable conditionally defines the USE_IEEE754_FLOAT symbol,
+?S: which indicates to the C program that floats and doubles use the
+?S: IEEE-754 format.
+?S:.
+?S:ieee754_byteorder:
+?S: This variable holds the IEEE float byte order. In the following, larger
+?S: digits indicate more significance. The variable byteorder is either 4321
+?S: on a big-endian machine, or 1234 on a little-endian one.
+?S: cannot figure it out.
+?S:.
+?C:USE_IEEE754_FLOAT:
+?C: When defined, this symbol indicates that float and double values are
+?C: stored using the IEEE-754 floating point format. See IEEE754_BYTEORDER
+?C: to determine the endianness in case these values need to be serialized.
+?C:.
+?C:IEEE754_BYTEORDER:
+?C: This symbol holds the hexadecimal constant defined in ieee754_byteorder,
+?C: i.e. 1234 for little-endian or 4321 for big-ending floats. It is 0 when
+?C: floats are not stored in IEEE-754 format.
+?C:.
+?H:#$d_ieee754 USE_IEEE754_FLOAT
+?H:#define IEEE754_BYTEORDER 0x$ieee754_byteorder /* large digits for MSB */
+?H:.
+?T:order
+?F:!str !try.c
+?LINT:set d_ieee754
+: check for ieee754 float and their endianness
+?X:
+?X: An idea from Guido Draheim <Guido.Draheim@gmx.de> checking the endianness
+?X: without actually executing code, which allows cross-compiling.
+?X:
+echo " "
+$echo $n "Checking IEEE-754 float byte-ordering...$c" >&4
+$cat >try.c <<'EOCP'
+float ascii_le[] = {
+ 3223.213134765625, 6.8273612896518898e-07, 1.9753562586009612e+31, 0 };
+float ascii_be[] = {
+ 865942.3125, 6.7652519659605424e+22, 1.9695089292781631e-07, 0 };
+EOCP
+order=0
+val=''
+if $cc -c $ccflags try.c >/dev/null 2>&1; then
+ if $contains ISieee754Sys try$_o >/dev/null 2>&1; then
+ val=$define
+ order=4321
+ elif $contains isIEEE754Sys try$_o >/dev/null 2>&1; then
+ val=$define
+ order=1234
+?X:
+?X: On Solaris, "grep" does not work on binary files -- use strings.
+?X:
+ else
+ strings try$_o >str 2>/dev/null
+ if $contains ISieee754Sys str >/dev/null 2>&1; then
+ val=$define
+ order=4321
+ elif $contains isIEEE754Sys str >/dev/null 2>&1; then
+ val=$define
+ order=1234
+ else
+ val=$undef
+ fi
+ $rm -f str
+ fi
+fi
+set d_ieee754
+eval $setvar
+case "$order" in
+0) echo " not using IEEE-754 here." >&4;;
+1234) echo " little-endian." >&4;;
+4321) echo " big-endian." >&4;;
+esac
+ieee754_byteorder=$order
+$rm -f try.c try$_o
+
diff --git a/mcon/U/d_inetaton.U b/mcon/U/d_inetaton.U
new file mode 100644
index 0000000..5ac8957
--- /dev/null
+++ b/mcon/U/d_inetaton.U
@@ -0,0 +1,48 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1996, Spider Boardman
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_inetaton.U,v $
+?RCS: Revision 3.0.1.1 1997/02/28 15:36:35 ram
+?RCS: patch61: created
+?RCS:
+?MAKE:d_inetaton: Trylink cat i_arpainet
+?MAKE: -pick add $@ %<
+?S:d_inetaton:
+?S: This variable conditionally defines the HAS_INET_ATON symbol, which
+?S: indicates to the C program that the inet_aton() function is available
+?S: to parse IP address "dotted-quad" strings.
+?S:.
+?C:HAS_INET_ATON:
+?C: This symbol, if defined, indicates to the C program that the
+?C: inet_aton() function is available to parse IP address "dotted-quad"
+?C: strings.
+?C:.
+?H:#$d_inetaton HAS_INET_ATON /**/
+?H:.
+?LINT:set d_inetaton
+: check whether inet_aton exists
+$cat >try.c <<EOC
+#$i_arpainet I_ARPA_INET
+#ifdef I_ARPA_INET
+#include <arpa/inet.h>
+#endif
+int main(void)
+{
+ static int ret;
+ static struct in_addr addr;
+ ret |= inet_aton("0.0.0.0", &addr);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=inet_aton
+set d_inetaton
+eval $trylink
+
diff --git a/mcon/U/d_inetd.U b/mcon/U/d_inetd.U
new file mode 100644
index 0000000..52e956d
--- /dev/null
+++ b/mcon/U/d_inetd.U
@@ -0,0 +1,70 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_inetd.U,v $
+?RCS: Revision 3.0 1993/08/18 12:06:23 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_inetd: cat test package Myread Setvar
+?MAKE: -pick add $@ %<
+?S:d_inetd:
+?S: This symbol conditionally defines USE_INETD which indicates to the C
+?S: program that the initial socket connection will be done via inetd.
+?S:.
+?C:USE_INETD (INETD):
+?C: This symbol if defined indicates to the C program that inetd will be
+?C: in charge of the initial socket connection. The file descriptors 0 and
+?C: 1 have been dup()ed from the original connected socket descriptor and
+?C: are ready for send() and recv().
+?C:.
+?H:#$d_inetd USE_INETD /**/
+?H:.
+?LINT:set d_inetd
+: ask whether initial socket connection is to be done via inetd
+echo " "
+dflt=n
+case "$d_inetd" in
+'') if $test -f /etc/inetd.conf; then
+ $cat <<EOM
+Your system provides a so called "Internet super-server", the inetd daemon.
+Network services like ftp or rlogin are usually handled via ftpd and rlogind
+daemons. Without inetd, these daemons must always be running for the service
+to be on. On the contrary, inetd listens to specific ports defined in file
+/etc/inetd.conf and will run the appropriate daemon upon request. This scheme
+avoids eating up the process table and memory with useless daemons.
+
+I can set up things so that internet connections for $package will be done
+using inetd, in which case you will have to edit /etc/inetd.conf to add some
+specific informations.
+
+EOM
+ dflt=y
+ else
+ $cat <<EOM
+I do not see any trace of a configuration file for inetd, hence I assume your
+system does not support the so called "Internet super-server". This means
+$package will need to have a daemon process running on this machine to allow
+network connections.
+
+EOM
+ fi;;
+*) case "$d_inetd" in
+ "$define") dflt=y;;
+ esac;;
+esac
+rp='Do you wish to use inetd for network connections?'
+. ./myread
+val="$undef"
+case "$ans" in
+y*|Y*) val="$define";;
+esac
+set d_inetd
+eval $setvar
+
diff --git a/mcon/U/d_inflate.U b/mcon/U/d_inflate.U
new file mode 100644
index 0000000..6882765
--- /dev/null
+++ b/mcon/U/d_inflate.U
@@ -0,0 +1,42 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 2006, Christian Biere
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:d_inflate: Trylink cat
+?MAKE: -pick add $@ %<
+?S:d_inflate:
+?S: This variable conditionally defines the HAS_INFLATE symbol, which
+?S: indicates to the C program that the inflate() routine from zlib is
+?S: available.
+?S:.
+?C:HAS_INFLATE:
+?C: This symbol, if defined, indicates that the zlib inflate() routine is
+?C: available.
+?C:.
+?H:#$d_inflate HAS_INFLATE /**/
+?H:.
+?LINT:set d_inflate
+: see if inflate exists
+$cat >try.c <<EOC
+#include <zlib.h>
+int main(void)
+{
+ static int ret, flush;
+ static z_stream zs;
+ flush |= Z_SYNC_FLUSH;
+ flush |= Z_FULL_FLUSH;
+ flush |= Z_FINISH;
+ ret |= inflate(&zs, flush);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=inflate
+set d_inflate '-lz'
+eval $trylink
+
diff --git a/mcon/U/d_initstate.U b/mcon/U/d_initstate.U
new file mode 100644
index 0000000..f1ceb40
--- /dev/null
+++ b/mcon/U/d_initstate.U
@@ -0,0 +1,43 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 2006, Christian Biere
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:d_initstate: Trylink cat i_stdlib
+?MAKE: -pick add $@ %<
+?S:d_initstate:
+?S: This variable conditionally defines the HAS_INITSTATE symbol, which
+?S: indicates to the C program that the initstate() routine is available
+?S: to initialize the random() number generator.
+?S:.
+?C:HAS_INITSTATE:
+?C: This symbol, if defined, indicates that the initstate routine is
+?C: available to initialize the random() number generator.
+?C:.
+?H:#$d_initstate HAS_INITSTATE /**/
+?H:.
+?LINT:set d_initstate
+: see if initstate exists
+$cat >try.c <<EOC
+#$i_stdlib I_STDLIB
+#ifdef I_STDLIB
+#include <stdlib.h>
+#endif
+int main(void)
+{
+ static long state[31];
+ static size_t size;
+ static char ret;
+ ret |= *initstate(1U, (char *) state, size);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=initstate
+set d_initstate
+eval $trylink
+
diff --git a/mcon/U/d_internet.U b/mcon/U/d_internet.U
new file mode 100644
index 0000000..684b3e8
--- /dev/null
+++ b/mcon/U/d_internet.U
@@ -0,0 +1,52 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_internet.U,v $
+?RCS: Revision 3.0.1.1 1993/09/13 16:02:04 ram
+?RCS: patch10: most mailers support Internet addresses nowadays (WAD)
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:06:24 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_internet: Myread Oldconfig Setvar
+?MAKE: -pick add $@ %<
+?S:d_internet:
+?S: This variable conditionally defines the INTERNET symbol, which
+?S: indicates to the C program that there is a mailer available which
+?S: supports internet-style addresses (user@site.domain).
+?S:.
+?C:INTERNET:
+?C: This symbol, if defined, indicates that there is a mailer available
+?C: which supports internet-style addresses (user@site.domain).
+?C:.
+?H:#$d_internet INTERNET /**/
+?H:.
+?LINT:set d_internet
+: check for internet mailer
+dflt=y
+case "$d_internet" in
+"$undef") dflt=n;;
+esac
+cat <<EOM
+
+Most mailers can deliver mail to addresses of the INTERNET persuasion,
+such as user@host.edu. Some older mailers, however, require the complete
+path to the destination to be specified in the address.
+
+EOM
+rp="Does your mailer understand INTERNET addresses?"
+. ./myread
+case "$ans" in
+y*) val="$define";;
+*) val="$undef";;
+esac
+set d_internet
+eval $setvar
+
diff --git a/mcon/U/d_iptos.U b/mcon/U/d_iptos.U
new file mode 100644
index 0000000..08db48f
--- /dev/null
+++ b/mcon/U/d_iptos.U
@@ -0,0 +1,94 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 2006, Christian Biere
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:d_iptos: cat rm contains cppstdin cppflags cppminus d_windows \
+ i_niin i_sysin i_niip i_syssock i_winsock2 i_ws2tcpip test Setvar
+?MAKE: -pick add $@ %<
+?S:d_iptos:
+?S: This variable conditionally defines the USE_IP_TOS symbol, which
+?S: indicates to the C program that the IP TOS services are available.
+?S:.
+?C:USE_IP_TOS:
+?C: This symbol, if defined, indicates that the IP TOS services are
+?C: available and can be used. Be prepared to include <sys/socket.h>,
+?C: either <netinet/in.h> or <sys/in.h>, and <netinet/ip.h> when
+?C: I_NETINET_IP is defined.
+?C:.
+?H:#$d_iptos USE_IP_TOS /**/
+?H:.
+?F:!iptos !iptos.h
+?T:inh
+?LINT:set d_iptos
+?LINT:usefile iptos.h
+: check for IP TOS support
+echo " "
+echo "Checking whether IP TOS (Type of Service) support is available..." >&4
+case "$i_niin" in
+"$define") inh=netinet/in.h;;
+*)
+ case "$i_sysin" in
+ "$define") inh=sys/in.h;;
+ *)
+ case "$i_ws2tcpip" in
+ "$define") inh=Ws2tcpip.h;;
+ esac
+ ;;
+ esac
+ ;;
+esac
+$cat >iptos <<EOM
+#$i_syssock I_SYS_SOCKET
+#$i_winsock2 I_WINSOCK2
+#$d_windows WINDOWS_SYSTEM
+#ifdef WINDOWS_SYSTEM
+#define WINVER 0x0501
+#endif
+#ifdef I_SYS_SOCKET
+#include <sys/socket.h>
+#endif
+#ifdef I_WINSOCK2
+#include <Winsock2.h>
+#endif
+#include <$inh>
+#if defined(IP_TOS) && defined(IPTOS_LOWDELAY) && defined(IPTOS_THROUGHPUT)
+YES
+#endif
+EOM
+$cppstdin $cppflags $cppminus <iptos >iptos.h 2>/dev/null
+val="$undef"
+if $contains YES iptos.h >/dev/null 2>&1; then
+ val="$define"
+ echo "You have IP TOS support in <$inh>." >&4
+elif $test "x$i_niip" = "x$define"; then
+ $cat >iptos <<EOM
+#$i_syssock I_SYS_SOCKET
+#ifdef I_SYS_SOCKET
+#include <sys/socket.h>
+#endif
+#include <$inh>
+#include <netinet/ip.h>
+#if defined(IP_TOS) && defined(IPTOS_LOWDELAY) && defined(IPTOS_THROUGHPUT)
+YES
+#endif
+EOM
+ $cppstdin $cppflags $cppminus <iptos >iptos.h 2>/dev/null
+ if $contains YES iptos.h >/dev/null 2>&1; then
+ val="$define"
+ echo "You have IP TOS support in <netinet/ip.h>." >&4
+ fi
+fi
+case "$val" in
+"$define") ;;
+*) echo "Sorry, you seem to be lacking IP TOS support." >&4;;
+esac
+set d_iptos
+eval $setvar
+$rm -f iptos iptos.h
+
diff --git a/mcon/U/d_ipv6.U b/mcon/U/d_ipv6.U
new file mode 100644
index 0000000..18b5ccc
--- /dev/null
+++ b/mcon/U/d_ipv6.U
@@ -0,0 +1,91 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 2006, Christian Biere
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:d_ipv6: Assert Trylink cat i_arpainet i_netdb i_syssock i_niin \
+ i_winsock2 i_ws2tcpip
+?MAKE: -pick add $@ %<
+?S:d_ipv6:
+?S: This variable conditionally defines HAS_IPV6.
+?S:.
+?C:HAS_IPV6:
+?C: This symbol is defined when IPv6 can be used
+?C:.
+?H:#$d_ipv6 HAS_IPV6 /**/
+?H:.
+?LINT:set d_ipv6
+: determine whether IPv6 can be used
+case "$d_ipv6" in
+"$undef")
+ echo "IPv6 support is disabled." >&4
+;;
+*)
+ $cat >try.c <<EOC
+#$i_syssock I_SYS_SOCKET
+#$i_winsock2 I_WINSOCK2
+#$i_ws2tcpip I_WS2TCPIP
+#$i_niin I_NETINET_IN
+#$i_arpainet I_ARPA_INET
+#$i_netdb I_NETDB
+#include <sys/types.h>
+#ifdef I_SYS_SOCKET
+#include <sys/socket.h>
+#endif
+#ifdef I_NETINET_IN
+#include <netinet/in.h>
+#endif
+#ifdef I_ARPA_INET
+#include <arpa/inet.h>
+#endif
+#ifdef I_NETDB
+#include <netdb.h>
+#endif
+#ifdef I_WINSOCK2
+#include <Winsock2.h>
+#endif
+#ifdef I_WS2TCPIP
+#include <Ws2tcpip.h>
+#endif
+#include "static_assert.h"
+
+int main(void)
+{
+ struct sockaddr_storage ss;
+ struct sockaddr_in6 sin6;
+ static struct in6_addr in6;
+
+ ss.ss_family = PF_INET6;
+
+ sin6.sin6_family = AF_INET6;
+ sin6.sin6_port = 6346;
+ sin6.sin6_flowinfo = 23UL;
+ sin6.sin6_scope_id = 42UL;
+ sin6.sin6_addr = in6;
+ sin6.sin6_addr.s6_addr[0] = in6.s6_addr[0];
+
+ STATIC_ASSERT(AF_INET6 == PF_INET6);
+ STATIC_ASSERT(sizeof in6 == sizeof sin6.sin6_addr);
+ STATIC_ASSERT(16 == sizeof sin6.sin6_addr.s6_addr);
+ STATIC_ASSERT(2 == sizeof sin6.sin6_port);
+ STATIC_ASSERT(4 == sizeof sin6.sin6_flowinfo);
+ STATIC_ASSERT(4 == sizeof sin6.sin6_scope_id);
+
+ (void) sin6;
+ (void) in6;
+
+ return 0;
+}
+EOC
+
+ cyn="whether IPv6 support is available"
+ set d_ipv6
+ eval $trylink
+ ;;
+esac
+
diff --git a/mcon/U/d_isascii.U b/mcon/U/d_isascii.U
new file mode 100644
index 0000000..f9784ec
--- /dev/null
+++ b/mcon/U/d_isascii.U
@@ -0,0 +1,46 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu>
+?RCS:
+?RCS: $Log: d_isascii.U,v $
+?RCS: Revision 3.0.1.2 1994/10/29 16:13:39 ram
+?RCS: patch36: added 'ldflags' to the test compile line (ADO)
+?RCS:
+?RCS: Revision 3.0.1.1 1994/08/29 16:09:32 ram
+?RCS: patch32: created by ADO
+?RCS:
+?MAKE:d_isascii: Trylink cat
+?MAKE: -pick add $@ %<
+?S:d_isascii:
+?S: This variable conditionally defines the HAS_ISASCII constant,
+?S: which indicates to the C program that isascii() is available.
+?S:.
+?C:HAS_ISASCII:
+?C: This manifest constant lets the C program know that isascii
+?C: is available.
+?C:.
+?H:#$d_isascii HAS_ISASCII /**/
+?H:.
+?LINT:set d_isascii
+: Look for isascii
+$cat >try.c <<EOC
+#include <ctype.h>
+int main(void)
+{
+ static int ret, c;
+ ret |= isascii(c);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=isascii
+set d_isascii
+eval $trylink
+
diff --git a/mcon/U/d_itimer.U b/mcon/U/d_itimer.U
new file mode 100644
index 0000000..b7018a1
--- /dev/null
+++ b/mcon/U/d_itimer.U
@@ -0,0 +1,46 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_itimer.U,v $
+?RCS: Revision 3.0 1993/08/18 12:06:25 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_itimer: Trylink cat
+?MAKE: -pick add $@ %<
+?S:d_itimer:
+?S: This variable conditionally defines the HAS_ITIMER symbol, which
+?S: indicates that the setitimer() routine exists. The setitimer()
+?S: routine supports sub-second accuracy for one real-time and two
+?S: cpu clocks.
+?S:.
+?C:HAS_ITIMER (ITIMER):
+?C: This symbol, if defined, indicates that the setitimer() routine exists.
+?C:.
+?H:#$d_itimer HAS_ITIMER /**/
+?H:.
+?LINT:set d_itimer
+: see if setitimer exists
+$cat >try.c <<EOC
+#include <sys/time.h>
+int main(void)
+{
+ static int ret;
+ static struct itimerval val, old;
+
+ ret |= setitimer(ITIMER_REAL, &val, &old);
+ ret |= setitimer(ITIMER_VIRTUAL, &val, &old);
+ ret |= setitimer(ITIMER_PROF, &val, &old);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=setitimer
+set d_itimer
+eval $trylink
+
diff --git a/mcon/U/d_keepsig.U b/mcon/U/d_keepsig.U
new file mode 100644
index 0000000..dfa13fd
--- /dev/null
+++ b/mcon/U/d_keepsig.U
@@ -0,0 +1,81 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_keepsig.U,v $
+?RCS: Revision 3.0.1.4 1995/07/25 13:57:56 ram
+?RCS: patch56: made cc and ccflags optional dependencies
+?RCS:
+?RCS: Revision 3.0.1.3 1995/01/11 15:26:25 ram
+?RCS: patch45: protected "sh -c" within backquotes for Linux and SGI
+?RCS:
+?RCS: Revision 3.0.1.2 1994/10/29 16:13:59 ram
+?RCS: patch36: call ./bsd explicitly instead of relying on PATH
+?RCS:
+?RCS: Revision 3.0.1.1 1993/10/16 13:48:47 ram
+?RCS: patch12: comment for SIGNALS_KEPT was the other way round
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:06:26 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_keepsig: cat Compile rm Guess contains echo n c Setvar run
+?MAKE: -pick add $@ %<
+?S:d_keepsig:
+?S: This variable contains the eventual value of the SIGNALS_KEPT symbol,
+?S: which indicates to the C program if signal handlers need not reinstated
+?S: after receipt of a signal.
+?S:.
+?C:SIGNALS_KEPT (PERSISTENT_SIGNAL):
+?C: This symbol is defined if signal handlers needn't be reinstated after
+?C: receipt of a signal.
+?C:.
+?H:#$d_keepsig SIGNALS_KEPT /**/
+?H:.
+?F:!try !try.out
+?LINT:set d_keepsig
+: see if signals are kept
+val="$undef";
+echo " "
+echo "Checking to see if signal handlers stick around..." >&4
+$cat >try.c <<'EOCP'
+foo() {}
+
+int main()
+{
+ signal(2, foo);
+ kill(getpid(), 2);
+ kill(getpid(), 2);
+ printf("abc\n");
+}
+EOCP
+set try
+if eval $compile; then
+?X: On AIX a single ./try will not work (with ksh)
+?X: Backquotes required on Linux and SGI (prevents "ambiguous output redirect")
+?X: (reported by Xavier LeVourch <xavierl@eiffel.com>)
+ echo `sh -c $run ./try >try.out 2>/dev/null` >/dev/null
+ if $contains abc try.out >/dev/null 2>&1; then
+ echo "Yes, they do."
+ val="$define";
+ else
+ echo "No, they don't."
+ fi
+else
+ $echo $n "(I can't seem to compile the test program. Assuming $c"
+ if ./bsd; then
+ echo "they do.)"
+ val="$define"
+ else
+ echo "they don't.)"
+ fi
+fi
+set d_keepsig
+eval $setvar
+$rm -f try*
+
diff --git a/mcon/U/d_kevent_udata.U b/mcon/U/d_kevent_udata.U
new file mode 100644
index 0000000..1af2ecb
--- /dev/null
+++ b/mcon/U/d_kevent_udata.U
@@ -0,0 +1,49 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 2006, Christian Biere
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:d_kevent_int_udata: Trylink cat d_kqueue
+?MAKE: -pick add $@ %<
+?S:d_kevent_int_udata:
+?S: This variable conditionally defines the HAS_KEVENT_INT_UDATA symbol,
+?S: which indicates to the C program that struct kevent has an
+?S: integer member udata.
+?S:.
+?C:HAS_KEVENT_INT_UDATA:
+?C: This symbol, if defined, indicates that struct kevent has an
+?C: integer member udata.
+?C:.
+?H:#$d_kevent_int_udata HAS_KEVENT_INT_UDATA /**/
+?H:.
+?LINT:set d_kevent_int_udata
+: check whether udata in struct kevent is an integer
+case "$d_kqueue" in
+"$define")
+ $cat >try.c <<EOC
+#include <sys/types.h>
+#include <sys/event.h>
+#include <sys/time.h>
+int main(void)
+{
+ static struct kevent ev;
+ ev.udata |= 1;
+ return 0;
+}
+EOC
+
+ cyn="whether member 'udata' of 'struct kevent' is an integer"
+ set d_kevent_int_udata
+ eval $trylink
+ ;;
+*)
+ val="$undef"
+ set d_kevent_int_udata
+ eval $setvar
+esac
+
diff --git a/mcon/U/d_killpg.U b/mcon/U/d_killpg.U
new file mode 100644
index 0000000..77b64ed
--- /dev/null
+++ b/mcon/U/d_killpg.U
@@ -0,0 +1,45 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_killpg.U,v $
+?RCS: Revision 3.0 1993/08/18 12:06:27 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_killpg: Trylink cat
+?MAKE: -pick add $@ %<
+?S:d_killpg:
+?S: This variable conditionally defines the HAS_KILLPG symbol, which
+?S: indicates to the C program that the killpg() routine is available
+?S: to kill process groups.
+?S:.
+?C:HAS_KILLPG (KILLPG):
+?C: This symbol, if defined, indicates that the killpg routine is available
+?C: to kill process groups. If unavailable, you probably should use kill
+?C: with a negative process number.
+?C:.
+?H:#$d_killpg HAS_KILLPG /**/
+?H:.
+?LINT:set d_killpg
+: see if killpg exists
+$cat >try.c <<EOC
+#include <sys/types.h>
+#include <signal.h>
+int main(void)
+{
+ static pid_t pid;
+ static int ret, sig;
+ ret |= killpg(pid, sig);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=killpg
+set d_killpg
+eval $trylink
+
diff --git a/mcon/U/d_kqueue.U b/mcon/U/d_kqueue.U
new file mode 100644
index 0000000..c561084
--- /dev/null
+++ b/mcon/U/d_kqueue.U
@@ -0,0 +1,57 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 2006, Christian Biere
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:d_kqueue: Trylink cat
+?MAKE: -pick add $@ %<
+?S:d_kqueue:
+?S: This variable conditionally defines the HAS_KQUEUE symbol, which
+?S: indicates to the C program that kqueue() support is available.
+?S:.
+?C:HAS_KQUEUE:
+?C: This symbol is defined when kqueue() can be used.
+?C:.
+?H:#$d_kqueue HAS_KQUEUE
+?H:.
+?LINT: set d_kqueue
+: can we use kqueue?
+$cat >try.c <<'EOC'
+#include <sys/types.h>
+#include <sys/event.h>
+#include <sys/time.h>
+int main(void)
+{
+ static struct kevent changes, events;
+ static struct timespec ts;
+ static unsigned long filter;
+ static int kq, fd;
+ static unsigned long flags;
+ filter |= EVFILT_READ;
+ filter |= EVFILT_WRITE;
+ filter |= EVFILT_SIGNAL;
+ filter |= EVFILT_VNODE;
+ filter |= EVFILT_PROC;
+ flags |= EV_ADD;
+ flags |= EV_ENABLE;
+ flags |= EV_ONESHOT;
+ flags |= EV_CLEAR;
+ flags |= EV_EOF;
+ flags |= EV_ERROR;
+ flags |= EV_DISABLE;
+ flags |= EV_DELETE;
+ EV_SET(&changes, fd, filter, flags, 0, 0, 0);
+ kq |= kqueue();
+ kevent(kq, &changes, 1, &events, 1, &ts);
+ return 0;
+}
+EOC
+cyn=kqueue
+set d_kqueue
+eval $trylink
+
diff --git a/mcon/U/d_link.U b/mcon/U/d_link.U
new file mode 100644
index 0000000..5848bae
--- /dev/null
+++ b/mcon/U/d_link.U
@@ -0,0 +1,44 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_link.U,v $
+?RCS: Revision 3.0.1.1 1993/08/25 14:01:13 ram
+?RCS: patch6: created for completeness
+?RCS:
+?MAKE:d_link: Trylink cat i_unistd
+?MAKE: -pick add $@ %<
+?S:d_link:
+?S: This variable conditionally defines HAS_LINK if link() is
+?S: available to create hard links.
+?S:.
+?C:HAS_LINK:
+?C: This symbol, if defined, indicates that the link routine is
+?C: available to create hard links.
+?C:.
+?H:#$d_link HAS_LINK /**/
+?H:.
+?LINT:set d_link
+: see if link exists
+$cat >try.c <<EOC
+#$i_unistd I_UNISTD
+#ifdef I_UNISTD
+#include <unistd.h>
+#endif
+int main(void)
+{
+ static int ret;
+ ret |= link("path1", "path2");
+ return ret ? 0 : 1;
+}
+EOC
+cyn=link
+set d_link
+eval $trylink
+
diff --git a/mcon/U/d_linuxstd.U b/mcon/U/d_linuxstd.U
new file mode 100644
index 0000000..547755d
--- /dev/null
+++ b/mcon/U/d_linuxstd.U
@@ -0,0 +1,55 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu>
+?RCS:
+?RCS: $Log: d_linuxstd.U,v $
+?RCS: Revision 3.0.1.1 1994/10/29 16:14:05 ram
+?RCS: patch36: created by ADO
+?RCS:
+?MAKE:d_linuxstd: d_stdstdio cppstdin cppflags cppminus \
+ contains rm Setvar Findhdr
+?MAKE: -pick add $@ %<
+?S:d_linuxstd:
+?S: This variable conditionally defines USE_LINUX_STDIO if this system
+?S: has a FILE structure declaring _IO_read_base, _IO_read_ptr,
+?S: and _IO_read_end in stdio.h.
+?S:.
+?C:USE_LINUX_STDIO:
+?C: This symbol is defined if this system has a FILE structure declaring
+?C: _IO_read_base, _IO_read_ptr, and _IO_read_end in stdio.h.
+?C:.
+?H:#$d_linuxstd USE_LINUX_STDIO /**/
+?H:.
+?T:xxx
+?LINT:set d_linuxstd
+: see if stdio is like that in linux
+case "$d_stdstdio" in
+"$undef")
+ echo " "
+ xxx=`./findhdr stdio.h`
+ $cppstdin $cppflags $cppminus < "$xxx" > stdio.E
+ if $contains 'char.*_IO_read_base' stdio.E >/dev/null 2>&1 && \
+ $contains '_IO_read_ptr' stdio.E >/dev/null 2>&1 && \
+ $contains '_IO_read_end' stdio.E >/dev/null 2>&1 ; then
+ echo "Your stdio looks like linux." >&4
+ val="$define"
+ else
+ echo "You don't have linux stdio, either." >&4
+ val="$undef"
+ fi
+ $rm -f stdio.E
+ ;;
+*) val="$undef" ;;
+esac
+
+set d_linuxstd
+eval $setvar
+
diff --git a/mcon/U/d_locale_charset.U b/mcon/U/d_locale_charset.U
new file mode 100644
index 0000000..028fa70
--- /dev/null
+++ b/mcon/U/d_locale_charset.U
@@ -0,0 +1,39 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 2006, Christian Biere
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:d_locale_charset: Trylink cat i_libcharset
+?MAKE: -pick add $@ %<
+?S:d_locale_charset:
+?S: This variable conditionally defines the HAS_LOCALE_CHARSET symbol, which
+?S: indicates to the C program that locale_charset() support is available.
+?S:.
+?C:HAS_LOCALE_CHARSET:
+?C: This symbol is defined when locale_charset() can be used.
+?C:.
+?H:#$d_locale_charset HAS_LOCALE_CHARSET
+?H:.
+?LINT: set d_locale_charset
+: can we use locale_charset?
+$cat >try.c <<EOC
+#$i_libcharset I_LIBCHARSET
+#ifdef I_LIBCHARSET
+#include <libcharset.h>
+#endif
+int main(void)
+{
+ static char ret;
+ ret |= *locale_charset();
+ return ret ? 0 : 1;
+}
+EOC
+cyn=locale_charset
+set d_locale_charset
+eval $trylink
+
diff --git a/mcon/U/d_locconv.U b/mcon/U/d_locconv.U
new file mode 100644
index 0000000..e06c152
--- /dev/null
+++ b/mcon/U/d_locconv.U
@@ -0,0 +1,46 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu>
+?RCS:
+?RCS: $Log: d_locconv.U,v $
+?RCS: Revision 3.0.1.1 1994/10/29 16:14:11 ram
+?RCS: patch36: created by ADO
+?RCS:
+?MAKE:d_locconv: Trylink cat i_locale
+?MAKE: -pick add $@ %<
+?S:d_locconv:
+?S: This variable conditionally defines HAS_LOCALECONV if localeconv() is
+?S: available for numeric and monetary formatting conventions.
+?S:.
+?C:HAS_LOCALECONV:
+?C: This symbol, if defined, indicates that the localeconv routine is
+?C: available for numeric and monetary formatting conventions.
+?C:.
+?H:#$d_locconv HAS_LOCALECONV /**/
+?H:.
+?LINT:set d_locconv
+: see if localeconv exists
+$cat >try.c <<EOC
+#$i_locale I_LOCALE
+#ifdef I_LOCALE
+#include <locale.h>
+#endif
+int main(void)
+{
+ struct lconv *lc;
+ lc = localeconv();
+ return lc ? 0 : 1;
+}
+EOC
+cyn=localeconv
+set d_locconv
+eval $trylink
+
diff --git a/mcon/U/d_lockf.U b/mcon/U/d_lockf.U
new file mode 100644
index 0000000..1e71ceb
--- /dev/null
+++ b/mcon/U/d_lockf.U
@@ -0,0 +1,51 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu>
+?RCS:
+?RCS: $Log: d_lockf.U,v $
+?RCS: Revision 3.0.1.1 1994/08/29 16:09:36 ram
+?RCS: patch32: created by ADO
+?RCS:
+?MAKE:d_lockf: Trylink cat i_unistd
+?MAKE: -pick add $@ %<
+?S:d_lockf:
+?S: This variable conditionally defines HAS_LOCKF if lockf() is
+?S: available to do file locking.
+?S:.
+?C:HAS_LOCKF (LOCKF):
+?C: This symbol, if defined, indicates that the lockf routine is
+?C: available to do file locking.
+?C:.
+?H:#$d_lockf HAS_LOCKF /**/
+?H:.
+?LINT:set d_lockf
+: see if lockf exists
+$cat >try.c <<EOC
+#include <sys/types.h>
+#$i_unistd I_UNISTD
+#ifdef I_UNISTD
+#include <unistd.h>
+#endif
+int main(void)
+{
+ static int fd, ret;
+ static off_t size;
+ ret |= lockf(fd, F_ULOCK, size);
+ ret |= lockf(fd, F_LOCK, size);
+ ret |= lockf(fd, F_TLOCK, size);
+ ret |= lockf(fd, F_TEST, size);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=lockf
+set d_lockf
+eval $trylink
+
diff --git a/mcon/U/d_lstat.U b/mcon/U/d_lstat.U
new file mode 100644
index 0000000..d9a4c7c
--- /dev/null
+++ b/mcon/U/d_lstat.U
@@ -0,0 +1,45 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_lstat.U,v $
+?RCS: Revision 3.0 1993/08/18 12:06:28 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_lstat: Trylink cat i_sysstat
+?MAKE: -pick add $@ %<
+?S:d_lstat:
+?S: This variable conditionally defines HAS_LSTAT if lstat() is
+?S: available to do file stats on symbolic links.
+?S:.
+?C:HAS_LSTAT (LSTAT):
+?C: This symbol, if defined, indicates that the lstat routine is
+?C: available to do file stats on symbolic links.
+?C:.
+?H:#$d_lstat HAS_LSTAT /**/
+?H:.
+?LINT:set d_lstat
+: see if lstat exists
+$cat >try.c <<EOC
+#$i_sysstat I_SYS_STAT
+#ifdef I_SYS_STAT
+#include <sys/stat.h>
+#endif
+int main(void)
+{
+ static int ret;
+ struct stat sb;
+ ret |= lstat("path", &sb);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=lstat
+set d_lstat
+eval $trylink
+
diff --git a/mcon/U/d_madvise.U b/mcon/U/d_madvise.U
new file mode 100644
index 0000000..9ef4acb
--- /dev/null
+++ b/mcon/U/d_madvise.U
@@ -0,0 +1,43 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 2006, Christian Biere
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:d_madvise: Trylink cat i_sysmman
+?MAKE: -pick add $@ %<
+?S:d_madvise:
+?S: This variable conditionally defines the HAS_MADVISE symbol, which
+?S: indicates to the C program that the madvise() routine is available.
+?S:.
+?C:HAS_MADVISE:
+?C: This symbol, if defined, indicates that the madvise routine is
+?C: available.
+?C:.
+?H:#$d_madvise HAS_MADVISE /**/
+?H:.
+?LINT:set d_madvise
+: see if madvise exists
+$cat >try.c <<EOC
+#include <sys/types.h>
+#$i_sysmman I_SYS_MMAN
+#ifdef I_SYS_MMAN
+#include <sys/mman.h>
+#endif
+int main(void)
+{
+ static int ret;
+ static void *p;
+ size_t len = 1024;
+ ret |= madvise(p, len, 1);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=madvise
+set d_madvise
+eval $trylink
+
diff --git a/mcon/U/d_mblen.U b/mcon/U/d_mblen.U
new file mode 100644
index 0000000..59eeed5
--- /dev/null
+++ b/mcon/U/d_mblen.U
@@ -0,0 +1,48 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu>
+?RCS:
+?RCS: $Log: d_mblen.U,v $
+?RCS: Revision 3.0.1.1 1994/08/29 16:09:40 ram
+?RCS: patch32: created by ADO
+?RCS:
+?MAKE:d_mblen: Trylink cat i_stdlib
+?MAKE: -pick add $@ %<
+?S:d_mblen:
+?S: This variable conditionally defines the HAS_MBLEN symbol, which
+?S: indicates to the C program that the mblen() routine is available
+?S: to find the number of bytes in a multibye character.
+?S:.
+?C:HAS_MBLEN:
+?C: This symbol, if defined, indicates that the mblen routine is available
+?C: to find the number of bytes in a multibye character.
+?C:.
+?H:#$d_mblen HAS_MBLEN /**/
+?H:.
+?LINT:set d_mblen
+: see if mblen exists
+$cat >try.c <<EOC
+#$i_stdlib I_STDLIB
+#ifdef I_STDLIB
+#include <stdlib.h>
+#endif
+int main(void)
+{
+ static int ret;
+ static size_t n;
+ ret |= mblen("xxx", n);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=mblen
+set d_mblen
+eval $trylink
+
diff --git a/mcon/U/d_mbstowcs.U b/mcon/U/d_mbstowcs.U
new file mode 100644
index 0000000..4e2a67b
--- /dev/null
+++ b/mcon/U/d_mbstowcs.U
@@ -0,0 +1,46 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_mbstowcs.U,v $
+?RCS: Revision 3.0 1993/08/18 12:06:29 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_mbstowcs: Trylink cat i_stdlib
+?MAKE: -pick add $@ %<
+?S:d_mbstowcs:
+?S: This variable conditionally defines the HAS_MBSTOWCS symbol, which
+?S: indicates to the C program that the mbstowcs() routine is available
+?S: to convert a multibyte string into a wide character string.
+?S:.
+?C:HAS_MBSTOWCS (MBSTOWCS):
+?C: This symbol, if defined, indicates that the mbstowcs routine is
+?C: available to covert a multibyte string into a wide character string.
+?C:.
+?H:#$d_mbstowcs HAS_MBSTOWCS /**/
+?H:.
+?LINT:set d_mbstowcs
+: see if mbstowcs exists
+$cat >try.c <<EOC
+#$i_stdlib I_STDLIB
+#ifdef I_STDLIB
+#include <stdlib.h>
+#endif
+int main(void)
+{
+ static size_t n, ret;
+ static wchar_t wcs;
+ ret |= mbstowcs(&wcs, "xxx", n);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=mbstowcs
+set d_mbstowcs
+eval $trylink
+
diff --git a/mcon/U/d_mbtowc.U b/mcon/U/d_mbtowc.U
new file mode 100644
index 0000000..ae0f12e
--- /dev/null
+++ b/mcon/U/d_mbtowc.U
@@ -0,0 +1,47 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_mbtowc.U,v $
+?RCS: Revision 3.0 1993/08/18 12:06:30 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_mbtowc: Trylink cat i_stdlib
+?MAKE: -pick add $@ %<
+?S:d_mbtowc:
+?S: This variable conditionally defines the HAS_MBTOWC symbol, which
+?S: indicates to the C program that the mbtowc() routine is available
+?S: to convert multibyte to a wide character.
+?S:.
+?C:HAS_MBTOWC (MBTOWC):
+?C: This symbol, if defined, indicates that the mbtowc routine is available
+?C: to covert a multibyte to a wide character.
+?C:.
+?H:#$d_mbtowc HAS_MBTOWC /**/
+?H:.
+?LINT:set d_mbtowc
+: see if mbtowc exists
+$cat >try.c <<EOC
+#$i_stdlib I_STDLIB
+#ifdef I_STDLIB
+#include <stdlib.h>
+#endif
+int main(void)
+{
+ static wchar_t wc;
+ static size_t n;
+ static int ret;
+ ret |= mbtowc(&wc, "xxx", n);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=mbtowc
+set d_mbtowc
+eval $trylink
+
diff --git a/mcon/U/d_memalign.U b/mcon/U/d_memalign.U
new file mode 100644
index 0000000..86abc55
--- /dev/null
+++ b/mcon/U/d_memalign.U
@@ -0,0 +1,48 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_memalign.U,v $
+?RCS:
+?MAKE:d_memalign: Trylink cat i_stdlib i_malloc
+?MAKE: -pick add $@ %<
+?S:d_memalign:
+?S: This variable conditionally defines the HAS_MEMALIGN symbol, which
+?S: indicates to the C program that the memalign() routine is available.
+?S:.
+?C:HAS_MEMALIGN :
+?C: This symbol, if defined, indicates that the memalign routine is
+?C: available to allocate aligned memory.
+?C:.
+?H:#$d_memalign HAS_MEMALIGN /**/
+?H:.
+?LINT:set d_memalign
+: see if memalign exists
+$cat >try.c <<EOC
+#define _GNU_SOURCE
+#$i_stdlib I_STDLIB
+#ifdef I_STDLIB
+#include <stdlib.h>
+#endif
+#$i_malloc I_MALLOC
+#ifdef I_MALLOC
+#include <malloc.h>
+#endif
+int main(void)
+{
+ static size_t align, size;
+ void *p;
+ p = memalign(align, size);
+ return p ? 0 : 1;
+}
+EOC
+cyn=memalign
+set d_memalign
+eval $trylink
+
diff --git a/mcon/U/d_memccpy.U b/mcon/U/d_memccpy.U
new file mode 100644
index 0000000..27f293c
--- /dev/null
+++ b/mcon/U/d_memccpy.U
@@ -0,0 +1,45 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_memccpy.U,v $
+?RCS: Revision 3.0 1993/08/18 12:06:31 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_memccpy: Trylink cat
+?MAKE: -pick add $@ %<
+?S:d_memccpy:
+?S: This variable conditionally defines the HAS_MEMCCPY symbol, which
+?S: indicates to the C program that the memccpy() routine is available
+?S: to copy a character into a block of memory.
+?S:.
+?C:HAS_MEMCCPY (MEMCCPY):
+?C: This symbol, if defined, indicates that the memccpy routine is available
+?C: to copy a character into a block of memory. Otherwise you should
+?C: roll your own.
+?C:.
+?H:#$d_memccpy HAS_MEMCCPY /**/
+?H:.
+?LINT:set d_memccpy
+: see if memccpy exists
+$cat >try.c <<EOC
+#include <string.h>
+int main(void)
+{
+ static int dst, src, c;
+ static size_t n;
+ void *p;
+ p = memccpy(&dst, &src, c, n);
+ return p ? 0 : 1;
+}
+EOC
+cyn=memccpy
+set d_memccpy
+eval $trylink
+
diff --git a/mcon/U/d_memchr.U b/mcon/U/d_memchr.U
new file mode 100644
index 0000000..d9c2c8d
--- /dev/null
+++ b/mcon/U/d_memchr.U
@@ -0,0 +1,44 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_memchr.U,v $
+?RCS: Revision 3.0 1993/08/18 12:06:32 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_memchr: Trylink cat
+?MAKE: -pick add $@ %<
+?S:d_memchr:
+?S: This variable conditionally defines the HAS_MEMCHR symbol, which
+?S: indicates to the C program that the memchr() routine is available
+?S: to scan a block of memory for a character.
+?S:.
+?C:HAS_MEMCHR:
+?C: This symbol, if defined, indicates that the memchr routine is available
+?C: to scan a block of memory for a character. If undefined, roll your own.
+?C:.
+?H:#$d_memchr HAS_MEMCHR /**/
+?H:.
+?LINT:set d_memchr
+: see if memchr exists
+$cat >try.c <<EOC
+#include <string.h>
+int main(void)
+{
+ static char s[] = "xxx";
+ static size_t n = sizeof(s);
+ void *p;
+ p = memchr(s, 'x', n);
+ return p ? 0 : 1;
+}
+EOC
+cyn=memchr
+set d_memchr
+eval $trylink
+
diff --git a/mcon/U/d_memcmp.U b/mcon/U/d_memcmp.U
new file mode 100644
index 0000000..127f6bf
--- /dev/null
+++ b/mcon/U/d_memcmp.U
@@ -0,0 +1,45 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_memcmp.U,v $
+?RCS: Revision 3.0.1.1 1993/09/13 16:02:35 ram
+?RCS: patch10: removed text recommending bcmp over memcmp (WAD)
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:06:33 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_memcmp: Trylink cat
+?MAKE: -pick add $@ %<
+?S:d_memcmp:
+?S: This variable conditionally defines the HAS_MEMCMP symbol, which
+?S: indicates to the C program that the memcmp() routine is available
+?S: to compare blocks of memory.
+?S:.
+?C:HAS_MEMCMP (MEMCMP):
+?C: This symbol, if defined, indicates that the memcmp routine is available
+?C: to compare blocks of memory.
+?C:.
+?H:#$d_memcmp HAS_MEMCMP /**/
+?H:.
+?LINT:set d_memcmp
+: see if memcmp exists
+$cat >try.c <<EOC
+#include <string.h>
+int main(void)
+{
+ static int a, b, ret;
+ ret |= memcmp(&a, &b, sizeof(a));
+ return ret ? 0 : 1;
+}
+EOC
+cyn=memcmp
+set d_memcmp
+eval $trylink
+
diff --git a/mcon/U/d_memcpy.U b/mcon/U/d_memcpy.U
new file mode 100644
index 0000000..1d5cca1
--- /dev/null
+++ b/mcon/U/d_memcpy.U
@@ -0,0 +1,46 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_memcpy.U,v $
+?RCS: Revision 3.0.1.1 1993/09/13 16:02:58 ram
+?RCS: patch10: removed text recommending bcopy over memcpy (WAD)
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:06:34 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_memcpy: Trylink cat
+?MAKE: -pick add $@ %<
+?S:d_memcpy:
+?S: This variable conditionally defines the HAS_MEMCPY symbol, which
+?S: indicates to the C program that the memcpy() routine is available
+?S: to copy blocks of memory.
+?S:.
+?C:HAS_MEMCPY (MEMCPY):
+?C: This symbol, if defined, indicates that the memcpy routine is available
+?C: to copy blocks of memory.
+?C:.
+?H:#$d_memcpy HAS_MEMCPY /**/
+?H:.
+?LINT:set d_memcpy
+: see if memcpy exists
+$cat >try.c <<EOC
+#include <string.h>
+int main(void)
+{
+ static char src, dst;
+ void *p;
+ p = memcpy(&dst, &src, sizeof(dst));
+ return p ? 0 : 1;
+}
+EOC
+cyn=memcpy
+set d_memcpy
+eval $trylink
+
diff --git a/mcon/U/d_memmove.U b/mcon/U/d_memmove.U
new file mode 100644
index 0000000..c74a5c7
--- /dev/null
+++ b/mcon/U/d_memmove.U
@@ -0,0 +1,45 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_memmove.U,v $
+?RCS: Revision 3.0 1993/08/18 12:06:35 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_memmove: Trylink cat
+?MAKE: -pick add $@ %<
+?S:d_memmove:
+?S: This variable conditionally defines the HAS_MEMMOVE symbol, which
+?S: indicates to the C program that the memmove() routine is available
+?S: to copy potentially overlapping blocks of memory.
+?S:.
+?C:HAS_MEMMOVE:
+?C: This symbol, if defined, indicates that the memmove routine is available
+?C: to copy potentially overlapping blocks of memory. This should be used
+?C: only when HAS_SAFE_BCOPY is not defined. If neither is there, roll your
+?C: own version.
+?C:.
+?H:#$d_memmove HAS_MEMMOVE /**/
+?H:.
+?LINT:set d_memmove
+: see if memmove exists
+$cat >try.c <<EOC
+#include <string.h>
+int main(void)
+{
+ static char dst, src;
+ void *p;
+ p = memmove(&dst, &src, sizeof(dst));
+ return p ? 0 : 1;
+}
+EOC
+cyn=memmove
+set d_memmove
+eval $trylink
+
diff --git a/mcon/U/d_mempcpy.U b/mcon/U/d_mempcpy.U
new file mode 100644
index 0000000..fa65fc9
--- /dev/null
+++ b/mcon/U/d_mempcpy.U
@@ -0,0 +1,51 @@
+?RCS:
+?RCS: Copyright (c) 2012 Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:d_mempcpy: Trylink cat
+?MAKE: -pick add $@ %<
+?S:d_mempcpy:
+?S: This variable conditionally defines the HAS_MEMPCPY symbol, which
+?S: indicates to the C program that the mempcpy() routine is available
+?S: to copy blocks of memory and returns a pointer past the last written
+?S: byte.
+?S:.
+?C:HAS_MEMPCPY:
+?C: This symbol, if defined, indicates that the mempcpy routine is available
+?C: to copy blocks of memory, returning a pointer past the last written byte.
+?C:.
+?H:#$d_mempcpy HAS_MEMPCPY /**/
+?H:.
+?LINT:set d_mempcpy
+: see if mempcpy exists
+?X:
+?X: Need some extra code convolutions to avoid gcc's optimizing the mempcpy()
+?X: call with its built-in implementation.
+?X:
+$cat >try.c <<EOC
+#include <string.h>
+
+void *copy(void *d, const void *s, unsigned n)
+{
+ char *q = d;
+ const char *r = s;
+ return mempcpy(q + 4, r + 2, n - 1);
+}
+
+int main(void)
+{
+ static char src, dst;
+ void *p;
+ p = copy(&dst, &src, sizeof(dst));
+ return p ? 0 : 1;
+}
+EOC
+cyn=mempcpy
+set d_mempcpy
+eval $trylink
+
diff --git a/mcon/U/d_memset.U b/mcon/U/d_memset.U
new file mode 100644
index 0000000..82e80ca
--- /dev/null
+++ b/mcon/U/d_memset.U
@@ -0,0 +1,47 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_memset.U,v $
+?RCS: Revision 3.0.1.1 1993/09/13 16:03:11 ram
+?RCS: patch10: removed text recommending bzero over memset (WAD)
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:06:36 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_memset: Trylink cat
+?MAKE: -pick add $@ %<
+?S:d_memset:
+?S: This variable conditionally defines the HAS_MEMSET symbol, which
+?S: indicates to the C program that the memset() routine is available
+?S: to set blocks of memory.
+?S:.
+?C:HAS_MEMSET (MEMSET):
+?C: This symbol, if defined, indicates that the memset routine is available
+?C: to set blocks of memory.
+?C:.
+?H:#$d_memset HAS_MEMSET /**/
+?H:.
+?LINT:set d_memset
+: see if memset exists
+$cat >try.c <<EOC
+#include <string.h>
+int main(void)
+{
+ static int dst, c;
+ size_t n = sizeof(dst);
+ void *p;
+ p = memset(&dst, c, n);
+ return p ? 0 : 1;
+}
+EOC
+cyn=memset
+set d_memset
+eval $trylink
+
diff --git a/mcon/U/d_mkdir.U b/mcon/U/d_mkdir.U
new file mode 100644
index 0000000..ddbb433
--- /dev/null
+++ b/mcon/U/d_mkdir.U
@@ -0,0 +1,48 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_mkdir.U,v $
+?RCS: Revision 3.0 1993/08/18 12:06:37 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_mkdir: Trylink cat i_sysstat
+?MAKE: -pick add $@ %<
+?S:d_mkdir:
+?S: This variable conditionally defines the HAS_MKDIR symbol, which
+?S: indicates to the C program that the mkdir() routine is available
+?S: to create directories..
+?S:.
+?C:HAS_MKDIR (MKDIR):
+?C: This symbol, if defined, indicates that the mkdir routine is available
+?C: to create directories. Otherwise you should fork off a new process to
+?C: exec /bin/mkdir.
+?C:.
+?H:#$d_mkdir HAS_MKDIR /**/
+?H:.
+?LINT:set d_mkdir
+: see if mkdir exists
+$cat >try.c <<EOC
+#include <sys/types.h>
+#$i_sysstat I_SYS_STAT
+#ifdef I_SYS_STAT
+#include <sys/stat.h>
+#endif
+int main(void)
+{
+ static int ret;
+ static mode_t mode;
+ ret |= mkdir("path", mode);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=mkdir
+set d_mkdir
+eval $trylink
+
diff --git a/mcon/U/d_mkfifo.U b/mcon/U/d_mkfifo.U
new file mode 100644
index 0000000..d73a93e
--- /dev/null
+++ b/mcon/U/d_mkfifo.U
@@ -0,0 +1,51 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu>
+?RCS:
+?RCS: $Log: d_mkfifo.U,v $
+?RCS: Revision 3.0.1.1 1994/10/29 16:14:17 ram
+?RCS: patch36: created by ADO
+?RCS:
+?RCS:
+?MAKE:d_mkfifo: Trylink cat i_sysstat
+?MAKE: -pick add $@ %<
+?S:d_mkfifo:
+?S: This variable conditionally defines the HAS_MKFIFO symbol, which
+?S: indicates to the C program that the mkfifo() routine is available.
+?S:.
+?C:HAS_MKFIFO :
+?C: This symbol, if defined, indicates that the mkfifo routine is
+?C: available to create FIFOs. Otherwise, mknod should be able to
+?C: do it for you. However, if mkfifo is there, mknod might require
+?C: super-user privileges which mkfifo will not.
+?C:.
+?H:#$d_mkfifo HAS_MKFIFO /**/
+?H:.
+?LINT:set d_mkfifo
+: see if mkfifo exists
+$cat >try.c <<EOC
+#include <sys/types.h>
+#$i_sysstat I_SYS_STAT
+#ifdef I_SYS_STAT
+#include <sys/stat.h>
+#endif
+int main(void)
+{
+ static int ret;
+ static mode_t mode;
+ ret |= mkfifo("path", mode);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=mkfifo
+set d_mkfifo
+eval $trylink
+
diff --git a/mcon/U/d_mktime.U b/mcon/U/d_mktime.U
new file mode 100644
index 0000000..5cd11a3
--- /dev/null
+++ b/mcon/U/d_mktime.U
@@ -0,0 +1,44 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu>
+?RCS:
+?RCS: $Log: d_mktime.U,v $
+?RCS: Revision 3.0.1.1 1994/08/29 16:09:44 ram
+?RCS: patch32: created by ADO
+?RCS:
+?MAKE:d_mktime: Trylink cat
+?MAKE: -pick add $@ %<
+?S:d_mktime:
+?S: This variable conditionally defines the HAS_MKTIME symbol, which
+?S: indicates to the C program that the mktime() routine is available.
+?S:.
+?C:HAS_MKTIME :
+?C: This symbol, if defined, indicates that the mktime routine is
+?C: available.
+?C:.
+?H:#$d_mktime HAS_MKTIME /**/
+?H:.
+?LINT:set d_mktime
+: see if mktime exists
+$cat >try.c <<EOC
+#include <time.h>
+int main(void)
+{
+ static struct tm tm;
+ static time_t ret;
+ ret = mktime(&tm);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=mktime
+set d_mktime
+eval $trylink
+
diff --git a/mcon/U/d_mmap.U b/mcon/U/d_mmap.U
new file mode 100644
index 0000000..b2f671f
--- /dev/null
+++ b/mcon/U/d_mmap.U
@@ -0,0 +1,53 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_mmap.U,v $
+?RCS: Revision 3.0.1.1 1993/12/15 08:19:12 ram
+?RCS: patch15: created
+?RCS:
+?MAKE:d_mmap: Trylink cat i_sysmman
+?MAKE: -pick add $@ %<
+?S:d_mmap:
+?S: This variable conditionally defines HAS_MMAP if mmap() is
+?S: available to map a file into memory.
+?S:.
+?C:HAS_MMAP:
+?C: This symbol, if defined, indicates that the mmap system call is
+?C: available to map a file into memory.
+?C:.
+?H:#$d_mmap HAS_MMAP /**/
+?H:.
+?LINT:set d_mmap
+: see if mmap exists
+$cat >try.c <<EOC
+#include <sys/types.h>
+#$i_sysmman I_SYS_MMAN
+#ifdef I_SYS_MMAN
+#include <sys/mman.h>
+#endif
+int main(void)
+{
+ static off_t offset;
+ static void *addr;
+ static size_t len;
+ static int flags, fd, prot;
+ void *p;
+ flags |= PROT_NONE;
+ flags |= PROT_READ;
+ flags |= PROT_WRITE;
+ flags |= PROT_EXEC;
+ p = mmap(addr, len, prot, flags, fd, offset);
+ return p ? 0 : 1;
+}
+EOC
+cyn=mmap
+set d_mmap
+eval $trylink
+
diff --git a/mcon/U/d_msem_lck.U b/mcon/U/d_msem_lck.U
new file mode 100644
index 0000000..f35de33
--- /dev/null
+++ b/mcon/U/d_msem_lck.U
@@ -0,0 +1,42 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_msem_lck.U,v $
+?MAKE:d_msem_lck: Trylink cat i_sysmman
+?MAKE: -pick add $@ %<
+?S:d_msem_lck:
+?S: This variable conditionally defines HAS_MSEM_LOCK if msem_lock() is
+?S: available, thereby indicating kernel support for memory semaphores.
+?S:.
+?C:HAS_MSEM_LOCK:
+?C: This symbol, if defined, indicates that memory semaphores are
+?C: available to protect mmap()'ed regions.
+?C:.
+?H:#$d_msem_lck HAS_MSEM_LOCK /**/
+?H:.
+?LINT:set d_msem_lck
+: see if msem_lock exists
+$cat >try.c <<EOC
+#$i_sysmman I_SYS_MMAN
+#ifdef I_SYS_MMAN
+#include <sys/mman.h>
+#endif
+int main(void)
+{
+ static int ret;
+ static msemaphore *sem;
+ ret |= msem_lock(sem, MSEM_IF_NOWAIT);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=msem_lock
+set d_msem_lck
+eval $trylink
+
diff --git a/mcon/U/d_msg.U b/mcon/U/d_msg.U
new file mode 100644
index 0000000..748da6a
--- /dev/null
+++ b/mcon/U/d_msg.U
@@ -0,0 +1,64 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_msg.U,v $
+?RCS: Revision 3.0 1993/08/18 12:06:37 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_msg: test d_msgctl d_msgget d_msgsnd d_msgrcv Setvar Findhdr osname
+?MAKE: -pick add $@ %<
+?S:d_msg:
+?S: This variable conditionally defines the HAS_MSG symbol, which
+?S: indicates that the entire msg*(2) library is present.
+?S:.
+?C:HAS_MSG:
+?C: This symbol, if defined, indicates that the entire msg*(2) library is
+?C: supported (IPC mechanism based on message queues).
+?C:.
+?H:#$d_msg HAS_MSG /**/
+?H:.
+?T:h_msg
+?LINT:set d_msg
+: see how much of the 'msg*(2)' library is present.
+h_msg=true
+echo " "
+case "$d_msgctl$d_msgget$d_msgsnd$d_msgrcv" in
+*"$undef"*) h_msg=false;;
+esac
+case "$osname" in
+freebsd)
+ case "`ipcs 2>&1`" in
+ "SVID messages"*"not configured"*)
+ echo "Your $osname does not have the msg*(2) configured." >&4
+ h_msg=false
+ val="$undef"
+ set msgctl d_msgctl
+ eval $setvar
+ set msgget d_msgget
+ eval $setvar
+ set msgsnd d_msgsnd
+ eval $setvar
+ set msgrcv d_msgrcv
+ eval $setvar
+ ;;
+ esac
+ ;;
+esac
+: we could also check for sys/ipc.h ...
+if $h_msg && $test `./findhdr sys/msg.h`; then
+ echo "You have the full msg*(2) library." >&4
+ val="$define"
+else
+ echo "You don't have the full msg*(2) library." >&4
+ val="$undef"
+fi
+set d_msg
+eval $setvar
+
diff --git a/mcon/U/d_msg_flags.U b/mcon/U/d_msg_flags.U
new file mode 100644
index 0000000..0a94db3
--- /dev/null
+++ b/mcon/U/d_msg_flags.U
@@ -0,0 +1,59 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 2006, Christian Biere
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:d_msghdr_msg_flags: Trylink cat i_systypes i_sysselct i_syssock \
+ i_winsock2 i_mswsock d_windows
+?MAKE: -pick add $@ %<
+?S:d_msghdr_msg_flags:
+?S: This variable conditionally defines the HAS_MSGHDR_MSG_FLAGS symbol,
+?S: which indicates to the C program that struct msghdr has a member
+?S: msg_flags.
+?S:.
+?C:HAS_MSGHDR_MSG_FLAGS:
+?C: This symbol, if defined, indicates that struct msghdr has a
+?C: member msg_flags.
+?C:.
+?H:#$d_msghdr_msg_flags HAS_MSGHDR_MSG_FLAGS /**/
+?H:.
+?LINT:set d_msghdr_msg_flags
+: check for msg_flags in struct msghdr
+$cat >try.c <<EOC
+#$i_systypes I_SYS_TYPES
+#$i_sysselct I_SYS_SELECT
+#$i_syssock I_SYS_SOCKET
+#$i_winsock2 I_WINSOCK2
+#$i_mswsock I_MSWSOCK
+#$d_windows WINDOWS_SYSTEM
+#ifdef WINDOWS_SYSTEM
+#define WINVER 0x0501
+#endif
+#ifdef I_SYS_TYPES
+#include <sys/types.h>
+#endif
+#ifdef I_SYS_SOCKET
+#include <sys/socket.h>
+#endif
+#ifdef I_WINSOCK2
+#include <Winsock2.h>
+#endif
+#ifdef I_MSWSOCK
+#include <Mswsock.h>
+#endif
+int main(void)
+{
+ struct msghdr msg;
+ msg.msg_flags |= 1;
+ return 0;
+}
+EOC
+cyn="whether 'struct msghdr' has a 'msg_flags' member"
+set d_msghdr_msg_flags
+eval $trylink
+
diff --git a/mcon/U/d_msgctl.U b/mcon/U/d_msgctl.U
new file mode 100644
index 0000000..a18e263
--- /dev/null
+++ b/mcon/U/d_msgctl.U
@@ -0,0 +1,44 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_msgctl.U,v $
+?RCS: Revision 3.0 1993/08/18 12:06:38 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_msgctl: Trylink cat
+?MAKE: -pick add $@ %<
+?S:d_msgctl:
+?S: This variable conditionally defines the HAS_MSGCTL symbol, which
+?S: indicates to the C program that the msgctl() routine is available.
+?S:.
+?C:HAS_MSGCTL:
+?C: This symbol, if defined, indicates that the msgctl() routine is
+?C: available to perform message control operations.
+?C:.
+?H:#$d_msgctl HAS_MSGCTL /**/
+?H:.
+?LINT:set d_msgctl
+: see if msgctl exists
+$cat >try.c <<EOC
+#include <sys/msg.h>
+int main(void)
+{
+ static int ret, id;
+ static struct msqid_ds buf;
+ ret |= msgctl(id, IPC_STAT, &buf);
+ ret |= msgctl(id, IPC_SET, &buf);
+ ret |= msgctl(id, IPC_RMID, &buf);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=msgctl
+set d_msgctl
+eval $trylink
+
diff --git a/mcon/U/d_msgget.U b/mcon/U/d_msgget.U
new file mode 100644
index 0000000..9ff25b1
--- /dev/null
+++ b/mcon/U/d_msgget.U
@@ -0,0 +1,45 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_msgget.U,v $
+?RCS: Revision 3.0 1993/08/18 12:06:39 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_msgget: Trylink cat
+?MAKE: -pick add $@ %<
+?S:d_msgget:
+?S: This variable conditionally defines the HAS_MSGGET symbol, which
+?S: indicates to the C program that the msgget() routine is available.
+?S:.
+?C:HAS_MSGGET:
+?C: This symbol, if defined, indicates that the msgget() routine is
+?C: available to get a new message queue.
+?C:.
+?H:#$d_msgget HAS_MSGGET /**/
+?H:.
+?LINT:set d_msgget
+: see if msgget exists
+$cat >try.c <<EOC
+#include <sys/msg.h>
+int main(void)
+{
+ static int ret, flags;
+ static key_t key;
+ flags |= IPC_CREAT;
+ flags |= IPC_EXCL;
+ key = IPC_PRIVATE;
+ ret |= msgget(key, flags);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=msgget
+set d_msgget
+eval $trylink
+
diff --git a/mcon/U/d_msgrcv.U b/mcon/U/d_msgrcv.U
new file mode 100644
index 0000000..f5195e6
--- /dev/null
+++ b/mcon/U/d_msgrcv.U
@@ -0,0 +1,47 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_msgrcv.U,v $
+?RCS: Revision 3.0 1993/08/18 12:06:40 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_msgrcv: Trylink cat
+?MAKE: -pick add $@ %<
+?S:d_msgrcv:
+?S: This variable conditionally defines the HAS_MSGRCV symbol, which
+?S: indicates to the C program that the msgrcv() routine is available.
+?S:.
+?C:HAS_MSGRCV:
+?C: This symbol, if defined, indicates that the msgrcv() routine is
+?C: available to extract a message from the message queue.
+?C:.
+?H:#$d_msgrcv HAS_MSGRCV /**/
+?H:.
+?LINT:set d_msgrcv
+: see if msgrcv exists
+$cat >try.c <<EOC
+#include <sys/msg.h>
+int main(void)
+{
+ static ssize_t ret;
+ static int id, flags;
+ static size_t size;
+ static long type;
+ static char buf[16];
+ flags |= IPC_CREAT;
+ flags |= IPC_EXCL;
+ ret |= msgrcv(id, &buf, size, type, flags);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=msgrcv
+set d_msgrcv
+eval $trylink
+
diff --git a/mcon/U/d_msgsnd.U b/mcon/U/d_msgsnd.U
new file mode 100644
index 0000000..b40c5ef
--- /dev/null
+++ b/mcon/U/d_msgsnd.U
@@ -0,0 +1,44 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_msgsnd.U,v $
+?RCS: Revision 3.0 1993/08/18 12:06:41 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_msgsnd: Trylink cat
+?MAKE: -pick add $@ %<
+?S:d_msgsnd:
+?S: This variable conditionally defines the HAS_MSGSND symbol, which
+?S: indicates to the C program that the msgsnd() routine is available.
+?S:.
+?C:HAS_MSGSND:
+?C: This symbol, if defined, indicates that the msgsnd() routine is
+?C: available to send a message into the message queue.
+?C:.
+?H:#$d_msgsnd HAS_MSGSND /**/
+?H:.
+?LINT:set d_msgsnd
+: see if msgsnd exists
+$cat >try.c <<EOC
+#include <sys/msg.h>
+int main(void)
+{
+ static int ret, id, flags;
+ static size_t size;
+ static char buf[16];
+ flags |= IPC_NOWAIT;
+ ret |= msgsnd(id, &buf, size, flags);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=msgsnd
+set d_msgsnd
+eval $trylink
+
diff --git a/mcon/U/d_msync.U b/mcon/U/d_msync.U
new file mode 100644
index 0000000..2d13d74
--- /dev/null
+++ b/mcon/U/d_msync.U
@@ -0,0 +1,49 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_msync.U,v $
+?RCS: Revision 3.0.1.1 1993/12/15 08:19:17 ram
+?RCS: patch15: created
+?RCS:
+?MAKE:d_msync: Trylink cat i_sysmman
+?MAKE: -pick add $@ %<
+?S:d_msync:
+?S: This variable conditionally defines HAS_MSYNC if msync() is
+?S: available to synchronize a mapped file.
+?S:.
+?C:HAS_MSYNC:
+?C: This symbol, if defined, indicates that the msync system call is
+?C: available to synchronize a mapped file.
+?C:.
+?H:#$d_msync HAS_MSYNC /**/
+?H:.
+?LINT:set d_msync
+: see if msync exists
+$cat >try.c <<EOC
+#$i_sysmman I_SYS_MMAN
+#ifdef I_SYS_MMAN
+#include <sys/mman.h>
+#endif
+int main(void)
+{
+ static int ret, flags;
+ static void *addr;
+ static size_t len;
+ flags |= MS_ASYNC;
+ flags |= MS_SYNC;
+ flags |= MS_INVALIDATE;
+ ret |= msync(addr, len, flags);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=msync
+set d_msync
+eval $trylink
+
diff --git a/mcon/U/d_munmap.U b/mcon/U/d_munmap.U
new file mode 100644
index 0000000..f8e01a6
--- /dev/null
+++ b/mcon/U/d_munmap.U
@@ -0,0 +1,46 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_munmap.U,v $
+?RCS: Revision 3.0.1.1 1993/12/15 08:19:22 ram
+?RCS: patch15: created
+?RCS:
+?MAKE:d_munmap: Trylink cat i_sysmman
+?MAKE: -pick add $@ %<
+?S:d_munmap:
+?S: This variable conditionally defines HAS_MUNMAP if munmap() is
+?S: available to unmap a region mapped by mmap().
+?S:.
+?C:HAS_MUNMAP:
+?C: This symbol, if defined, indicates that the munmap system call is
+?C: available to unmap a region, usually mapped by mmap().
+?C:.
+?H:#$d_munmap HAS_MUNMAP /**/
+?H:.
+?LINT:set d_munmap
+: see if munmap exists
+$cat >try.c <<EOC
+#$i_sysmman I_SYS_MMAN
+#ifdef I_SYS_MMAN
+#include <sys/mman.h>
+#endif
+int main(void)
+{
+ static int ret;
+ static void *addr;
+ static size_t len;
+ ret |= munmap(addr, len);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=munmap
+set d_munmap
+eval $trylink
+
diff --git a/mcon/U/d_nanosleep.U b/mcon/U/d_nanosleep.U
new file mode 100644
index 0000000..d65eef6
--- /dev/null
+++ b/mcon/U/d_nanosleep.U
@@ -0,0 +1,38 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 2006, Christian Biere
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:d_nanosleep: Trylink cat
+?MAKE: -pick add $@ %<
+?S:d_nanosleep:
+?S: This variable conditionally defines the HAS_NANOSLEEP symbol, which
+?S: indicates to the C program that the nanosleep() system call is available.
+?S:.
+?C:HAS_NANOSLEEP:
+?C: This symbol, if defined, indicates that the nanosleep() system call
+?C: is available.
+?C:.
+?H:#$d_nanosleep HAS_NANOSLEEP /**/
+?H:.
+?LINT:set d_nanosleep
+: see if nanosleep exists
+$cat >try.c <<EOC
+#include <time.h>
+int main(void)
+{
+ static int ret;
+ static struct timespec request, remain;
+ ret |= nanosleep(&request, &remain);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=nanosleep
+set d_nanosleep
+eval $trylink
+
diff --git a/mcon/U/d_newsadm.U b/mcon/U/d_newsadm.U
new file mode 100644
index 0000000..ed51502
--- /dev/null
+++ b/mcon/U/d_newsadm.U
@@ -0,0 +1,72 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_newsadm.U,v $
+?RCS: Revision 3.0.1.2 1997/02/28 15:36:53 ram
+?RCS: patch61: added Guess dependency
+?RCS:
+?RCS: Revision 3.0.1.1 1994/10/29 16:14:33 ram
+?RCS: patch36: call ./eunice explicitly instead of relying on PATH
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:06:42 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_newsadm newsadmin: cat contains Guess Setvar Myread Oldconfig
+?MAKE: -pick add $@ %<
+?S:d_newsadm:
+?S: This variable conditionally defines the NEWS_ADMIN symbol, which
+?S: indicates to the C program that there is a user who is in charge
+?S: of news administration.
+?S:.
+?S:newsadmin:
+?S: This variable holds the login name of the news administrator, if any.
+?S:.
+?C:NEWS_ADMIN (NEWSADMIN):
+?C: This symbol, if defined, contains the login name of the news
+?C: administrator.
+?C:.
+?H:#$d_newsadm NEWS_ADMIN "$newsadmin" /**/
+?H:.
+?LINT:set d_newsadm
+: get news administrator name
+case "$newsadmin" in
+'')
+ if $contains "^news:" /etc/passwd >/dev/null 2>&1 ; then
+ dflt=news
+ elif $contains "^usenet:" /etc/passwd >/dev/null 2>&1 ; then
+ dflt=usenet
+ elif ./eunice; then
+ dflt=system
+ else
+ dflt=root
+ fi
+ ;;
+*)
+ dflt="$newsadmin"
+ ;;
+esac
+$cat <<'EOM'
+
+Many systems keep their news in a private directory, or have a non-superuser
+in charge of administering news. (If you don't have such a user, take the
+default answer.) I need the login name (not directory) which is used for
+news administration.
+
+EOM
+rp="News admin login?"
+. ./myread
+newsadmin="$ans"
+case "$newsadmin" in
+root) val="$undef" ;;
+*) val="$define" ;;
+esac
+set d_newsadm
+eval $setvar
+
diff --git a/mcon/U/d_nice.U b/mcon/U/d_nice.U
new file mode 100644
index 0000000..aacb448
--- /dev/null
+++ b/mcon/U/d_nice.U
@@ -0,0 +1,46 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu>
+?RCS:
+?RCS: $Log: d_nice.U,v $
+?RCS: Revision 3.0.1.1 1994/08/29 16:09:48 ram
+?RCS: patch32: created by ADO
+?RCS:
+?MAKE:d_nice: Trylink cat i_unistd
+?MAKE: -pick add $@ %<
+?S:d_nice:
+?S: This variable conditionally defines the HAS_NICE symbol, which
+?S: indicates to the C program that the nice() routine is available.
+?S:.
+?C:HAS_NICE :
+?C: This symbol, if defined, indicates that the nice routine is
+?C: available.
+?C:.
+?H:#$d_nice HAS_NICE /**/
+?H:.
+?LINT:set d_nice
+: see if nice exists
+$cat >try.c <<EOC
+#$i_unistd I_UNISTD
+#ifdef I_UNISTD
+#include <unistd.h>
+#endif
+int main(void)
+{
+ static int ret, i;
+ ret |= nice(i);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=nice
+set d_nice
+eval $trylink
+
diff --git a/mcon/U/d_nls.U b/mcon/U/d_nls.U
new file mode 100644
index 0000000..523b203
--- /dev/null
+++ b/mcon/U/d_nls.U
@@ -0,0 +1,45 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 2006, Christian Biere
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:d_nls: Myread Setvar d_gettext i_libintl
+?MAKE: -pick add $@ %<
+?S:d_nls:
+?S: This variable conditionally defines USE_NLS.
+?S:.
+?C:USE_NLS:
+?C: This symbol, when defined, indicates that Native Language Support
+?C: primitives are present and should be enabled.
+?C:.
+?H:#$d_nls USE_NLS /**/
+?H:.
+?LINT:set d_nls
+: determine whether we support NLS
+echo " "
+case "$d_nls" in
+"$define")
+ echo "You have NLS support." >&4
+ val="$define"
+ ;;
+*)
+ case "$d_gettext$i_libintl" in
+ "$define$define")
+ echo "You have NLS support." >&4
+ val="$define"
+ ;;
+ *)
+ echo "I don't see support for NLS here..." >&4
+ val="$undef"
+ ;;
+ esac
+ ;;
+esac
+set d_nls
+eval $setvar
+
diff --git a/mcon/U/d_nolnbuf.U b/mcon/U/d_nolnbuf.U
new file mode 100644
index 0000000..330a643
--- /dev/null
+++ b/mcon/U/d_nolnbuf.U
@@ -0,0 +1,99 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_nolnbuf.U,v $
+?RCS: Revision 3.0.1.1 1994/05/06 14:46:07 ram
+?RCS: patch23: avoid looping in the "see that again?" prompt (WED)
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:06:43 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_nolnbuf: test +cc cat rm Setvar Myread
+?MAKE: -pick add $@ %<
+?S:d_nolnbuf:
+?S: This variable conditionally defines the NOLINEBUF symbol, which
+?S: indicates to the C program that stdout is not buffered, so that
+?S: the program can call setbuf() or setlinebuf() for efficiency.
+?S:.
+?C:NOLINEBUF:
+?C: This symbol, if defined, indicates that stdout is not buffered, so that
+?C: the program can call setbuf() or setlinebuf() for efficiency.
+?C:.
+?H:#$d_nolnbuf NOLINEBUF /**/
+?H:.
+?T:xxx
+?F:!blurfl
+?LINT:set d_nolnbuf
+: check for buffering of stdout
+echo " "
+case "$d_nolnbuf" in
+'')
+ $cat <<'EOT' >blurfl.c
+#include <stdio.h>
+int main()
+{
+ int i;
+
+ for (i = 0; i < 5; i++) {
+ putchar(i+'a');
+ sleep(1);
+ }
+ putchar('\n');
+}
+EOT
+ $cc -o blurfl blurfl.c >/dev/null 2>&1;
+ $rm -f blurfl.c
+ $cat >&4 <<'EOM'
+Checking for buffering of stdout to terminal.
+
+Observe the following characters as they are printed out, to see whether they
+print out all at once, or with a 1 second pause between each of them. If they
+print out one by one, you don't have buffering. If they print together (after
+about a 5 second pause), you do have buffering.
+
+EOM
+ dflt='Type return to start printing the test characters'
+ rp=''
+ . ./myread
+ xxx=y
+ while $test "$xxx" = 'y'; do
+ ./blurfl 1>&4
+ dflt=n
+ rp='Would you like to see that again?'
+ . ./myread
+ case "$ans" in
+ [yY]*) xxx="y";;
+ *) xxx="n";;
+ esac
+ done
+ dflt=y
+ rp="Do you have buffering (printed all at once)?"
+ . ./myread
+ case "$ans" in
+ n*) val="$define";;
+ *) val="$undef";;
+ esac
+ ;;
+*)
+ case "$d_nolnbuf" in
+ "$define") dflt=n;;
+ *) dflt=y;;
+ esac
+ rp="Do you have buffering on stdout to terminals?"
+ . ./myread
+ case "$ans" in
+ n*) val="$define";;
+ *) val="$undef";;
+ esac
+ ;;
+esac
+set d_nolnbuf
+eval $setvar
+
diff --git a/mcon/U/d_normsig.U b/mcon/U/d_normsig.U
new file mode 100644
index 0000000..10a1efd
--- /dev/null
+++ b/mcon/U/d_normsig.U
@@ -0,0 +1,57 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_normsig.U,v $
+?RCS: Revision 3.0.1.2 1997/02/28 15:37:03 ram
+?RCS: patch61: replaced .a with $_a all over the place
+?RCS:
+?RCS: Revision 3.0.1.1 1994/10/29 16:14:48 ram
+?RCS: patch36: call ./bsd explicitly instead of relying on PATH
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:06:44 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_normsig jobslib: test Setvar Guess _a
+?MAKE: -pick add $@ %<
+?S:d_normsig:
+?S: This variable conditionally defines the NORMSIG symbol, which
+?S: indicates to the C program that the normal signal handling routines
+?S: should be used, as opposed to the ones in 4.1bsd (sigset, etc.).
+?S:.
+?S:jobslib:
+?S: This variable holds the argument to be passed to the loader to include
+?S: the strange signal handling routines from 4.1bsd. On systems that
+?S: have NORMSIG defined this variable is null.
+?S:.
+?C:NORMSIG:
+?C: This symbol, if defined, indicates that normal signal handling routines
+?C: should be used, as opposed to the ones in 4.1bsd (sigset, etc.).
+?C:.
+?H:#$d_normsig NORMSIG /**/
+?H:.
+?LINT:set d_normsig
+: see if we need -ljobs and if we have sigset, etc.
+echo " "
+if $test -r /usr/lib/libjobs$_a || $test -r /usr/local/lib/libjobs$_a ; then
+ echo "Jobs library found." >&4
+ val="$undef"
+ jobslib='-ljobs'
+else
+ if ./bsd; then
+ echo "No jobs library found. (I suppose this is at least 4.2...)" >&4
+ else
+ echo "No jobs library found. (That's okay, we all have our faults.)" >&4
+ fi
+ val="$define"
+ jobslib=''
+fi
+set d_normsig
+eval $setvar
+
diff --git a/mcon/U/d_open3.U b/mcon/U/d_open3.U
new file mode 100644
index 0000000..a5fa847
--- /dev/null
+++ b/mcon/U/d_open3.U
@@ -0,0 +1,90 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_open3.U,v $
+?RCS: Revision 3.0.1.2 1997/02/28 15:37:12 ram
+?RCS: patch61: added ?F: metalint hint
+?RCS:
+?RCS: Revision 3.0.1.1 1995/07/25 13:58:26 ram
+?RCS: patch56: added knowledge of the O_NONBLOCK symbol
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:06:44 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_open3: test +cc cat +cppflags h_fcntl h_sysfile rm Setvar Findhdr Warn
+?MAKE: -pick add $@ %<
+?X: It would be easy to separate the h_O_stuff from this.
+?X: Is there a reason to do so? -- HMS
+?S:d_open3:
+?S: This variable conditionally defines the HAS_OPEN3 manifest constant,
+?S: which indicates to the C program that the 3 argument version of
+?S: the open(2) function is available.
+?S:.
+?C:HAS_OPEN3 (OPEN3):
+?C: This manifest constant lets the C program know that the three
+?C: argument form of open(2) is available.
+?C:.
+?H:#$d_open3 HAS_OPEN3 /**/
+?H:.
+?W:%<:O_RDONLY O_WRONLY O_RDWR O_NDELAY O_APPEND O_SYNC O_CREAT O_TRUNC
+?W:%<:O_EXCL O_NONBLOCK
+?F:!open3
+?LINT:set d_open3
+?LINT:change h_fcntl h_sysfile
+: Locate the flags for 'open()'
+echo " "
+$cat >open3.c <<'EOCP'
+#include <sys/types.h>
+#ifdef I_FCNTL
+#include <fcntl.h>
+#endif
+#ifdef I_SYS_FILE
+#include <sys/file.h>
+#endif
+int main(void) {
+ if(O_RDONLY);
+#ifdef O_TRUNC
+ return 0;
+#else
+ return 1;
+#endif
+}
+EOCP
+: check sys/file.h first to get FREAD on Sun
+if $test `./findhdr sys/file.h` && \
+ $cc $cppflags "-DI_SYS_FILE" -o open3 open3.c >/dev/null 2>&1 ; then
+ h_sysfile=true;
+ echo "<sys/file.h> defines the O_* constants..." >&4
+ if ./open3; then
+ echo "and you have the 3 argument form of open()." >&4
+ val="$define"
+ else
+ echo "but not the 3 argument form of open(). Oh, well." >&4
+ val="$undef"
+ fi
+elif $test `./findhdr fcntl.h` && \
+ $cc "-DI_FCNTL" -o open3 open3.c >/dev/null 2>&1 ; then
+ h_fcntl=true;
+ echo "<fcntl.h> defines the O_* constants..." >&4
+ if ./open3; then
+ echo "and you have the 3 argument form of open()." >&4
+ val="$define"
+ else
+ echo "but not the 3 argument form of open(). Oh, well." >&4
+ val="$undef"
+ fi
+else
+ val="$undef"
+ ./warn "I can't find the O_* constant definitions! You got problems." 4>&4
+fi
+set d_open3
+eval $setvar
+$rm -f open3*
+
diff --git a/mcon/U/d_openat.U b/mcon/U/d_openat.U
new file mode 100644
index 0000000..47beb25
--- /dev/null
+++ b/mcon/U/d_openat.U
@@ -0,0 +1,38 @@
+?RCS:
+?RCS: Copyright (c) 2015 Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:d_openat: Trylink cat
+?MAKE: -pick add $@ %<
+?S:d_openat:
+?S: This variable conditionally defines HAS_OPENAT if openat() is
+?S: available to open files with a relative path interepreted in
+?S: the context of an opened directory.
+?S:.
+?C:HAS_OPENAT:
+?C: This symbol, if defined, indicates that the openat() routine is
+?C: available to open files with a relative path interepreted in
+?C: the context of an opened directory.
+?C:.
+?H:#$d_openat HAS_OPENAT /**/
+?H:.
+?LINT:set d_openat
+: see if openat exists
+$cat >try.c <<EOC
+#include <fcntl.h> /* AT_* constants */
+int main(void)
+{
+ static int ret;
+ ret |= openat(AT_FDCWD, "path", /* flags */ 0, /* mode */ 0);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=openat
+set d_openat
+eval $trylink
+
diff --git a/mcon/U/d_passwd.U b/mcon/U/d_passwd.U
new file mode 100644
index 0000000..c9e2418
--- /dev/null
+++ b/mcon/U/d_passwd.U
@@ -0,0 +1,23 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu>
+?RCS:
+?RCS: $Log: d_passwd.U,v $
+?RCS: Revision 3.0.1.2 1997/02/28 15:37:21 ram
+?RCS: patch61: useless unit dropped.
+?RCS:
+?RCS: Revision 3.0.1.1 1994/08/29 16:09:51 ram
+?RCS: patch32: created by ADO
+?RCS:
+?X:
+?X: Useless unit dropped.
+?X:
+?LINT:empty
diff --git a/mcon/U/d_pathconf.U b/mcon/U/d_pathconf.U
new file mode 100644
index 0000000..02b7e52
--- /dev/null
+++ b/mcon/U/d_pathconf.U
@@ -0,0 +1,83 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu>
+?RCS:
+?RCS: $Log: d_pathconf.U,v $
+?RCS: Revision 3.0.1.1 1994/10/29 16:14:54 ram
+?RCS: patch36: created by ADO
+?RCS:
+?MAKE:d_pathconf d_fpathconf: Trylink cat i_unistd
+?MAKE: -pick add $@ %<
+?S:d_pathconf:
+?S: This variable conditionally defines the HAS_PATHCONF symbol, which
+?S: indicates to the C program that the pathconf() routine is available
+?S: to determine file-system related limits and options associated
+?S: with a given filename.
+?S:.
+?S:d_fpathconf:
+?S: This variable conditionally defines the HAS_FPATHCONF symbol, which
+?S: indicates to the C program that the pathconf() routine is available
+?S: to determine file-system related limits and options associated
+?S: with a given open file descriptor.
+?S:.
+?C:HAS_PATHCONF:
+?C: This symbol, if defined, indicates that pathconf() is available
+?C: to determine file-system related limits and options associated
+?C: with a given filename.
+?C:.
+?C:HAS_FPATHCONF:
+?C: This symbol, if defined, indicates that pathconf() is available
+?C: to determine file-system related limits and options associated
+?C: with a given open file descriptor.
+?C:.
+?H:#$d_pathconf HAS_PATHCONF /**/
+?H:#$d_fpathconf HAS_FPATHCONF /**/
+?H:.
+?LINT:set d_pathconf
+?LINT:set d_fpathconf
+: see if pathconf exists
+$cat >try.c <<EOC
+#$i_unistd I_UNISTD
+#ifdef I_UNISTD
+#include <unistd.h>
+#endif
+int main(void)
+{
+ static long ret;
+ static int name;
+ ret |= pathconf("path", name);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=pathconf
+set d_pathconf
+eval $trylink
+
+
+@if d_fpathconf || HAS_FPATHCONF
+: see if fpathconf exists
+$cat >try.c <<EOC
+#$i_unistd I_UNISTD
+#ifdef I_UNISTD
+#include <unistd.h>
+#endif
+int main(void)
+{
+ static long ret;
+ static int fd, name;
+ ret |= fpathconf(fd, name);
+ return ret ? 0 : 1;
+}
+EOC
+set d_fpathconf
+eval $trylink
+
+@end
diff --git a/mcon/U/d_pause.U b/mcon/U/d_pause.U
new file mode 100644
index 0000000..9acd60d
--- /dev/null
+++ b/mcon/U/d_pause.U
@@ -0,0 +1,47 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu>
+?RCS:
+?RCS: $Log: d_pause.U,v $
+?RCS: Revision 3.0.1.1 1994/08/29 16:09:54 ram
+?RCS: patch32: created by ADO
+?RCS:
+?MAKE:d_pause: Trylink cat i_unistd
+?MAKE: -pick add $@ %<
+?S:d_pause:
+?S: This variable conditionally defines the HAS_PAUSE symbol, which
+?S: indicates to the C program that the pause() routine is available
+?S: to suspend a process until a signal is received.
+?S:.
+?C:HAS_PAUSE :
+?C: This symbol, if defined, indicates that the pause routine is
+?C: available to suspend a process until a signal is received.
+?C:.
+?H:#$d_pause HAS_PAUSE /**/
+?H:.
+?LINT:set d_pause
+: see if pause exists
+$cat >try.c <<EOC
+#$i_unistd I_UNISTD
+#ifdef I_UNISTD
+#include <unistd.h>
+#endif
+int main(void)
+{
+ static int ret;
+ ret |= pause();
+ return ret ? 0 : 1;
+}
+EOC
+cyn=pause
+set d_pause
+eval $trylink
+
diff --git a/mcon/U/d_perror.U b/mcon/U/d_perror.U
new file mode 100644
index 0000000..50b0aa0
--- /dev/null
+++ b/mcon/U/d_perror.U
@@ -0,0 +1,53 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_perror.U,v $
+?RCS: Revision 3.0.1.1 1994/08/29 16:11:38 ram
+?RCS: patch32: always define HAS_PERROR even when not used in C code
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:06:45 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_perror: Trylink cat
+?MAKE: -pick add $@ %<
+?S:d_perror:
+?S: This variable conditionally remaps perror to a null action and
+?S: defines the symbol HAS_PERROR, which indicates to the C program
+?S: that the perror() routine is not available to print system
+?S: error messages.
+?S:.
+?C:HAS_PERROR ~ %<:
+?C: This symbol, if defined, indicates that the perror() routine is
+?C: available to print system error messages. If not defined, you should
+?C: use your own diagnostic routine...
+?C:.
+?C:perror ~ %<:
+?C: This symbol is maped to null if the perror() routine is not
+?C: available to print system error messages.
+?C:.
+?H:?%<:#$d_perror HAS_PERROR /**/
+?H:?%<:#ifndef HAS_PERROR
+?H:?%<:#define perror(s) ; /* mapped to a null statement */
+?H:?%<:#endif
+?H:.
+?LINT:set d_perror
+: see if perror exists
+$cat >try.c <<EOC
+#include <stdio.h>
+int main(void)
+{
+ perror("error");
+ return 0;
+}
+EOC
+cyn=perror
+set d_perror
+eval $trylink
+
diff --git a/mcon/U/d_pidcheck.U b/mcon/U/d_pidcheck.U
new file mode 100644
index 0000000..8fedf85
--- /dev/null
+++ b/mcon/U/d_pidcheck.U
@@ -0,0 +1,75 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_pidcheck.U,v $
+?RCS: Revision 3.0.1.1 1997/02/28 15:37:55 ram
+?RCS: patch61: replaced .o with $_o all over the place
+?RCS: patch61: added ?F: metalint hint
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:06:46 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_pidcheck: cat rm +cc _o
+?MAKE: -pick add $@ %<
+?S:d_pidcheck:
+?S: This variable conditionally defines the variable PIDCHECK
+?S: which indicates that kill(pid, 0) will check for an active pid.
+?S:.
+?C:PIDCHECK:
+?C: This symbol, if defined, means that the kill(pid, 0) will
+?C: check for an active pid (i.e. the kernel will run all the
+?C: necessary pid checks, but no signal is actually sent).
+?C:.
+?H:#$d_pidcheck PIDCHECK /**/
+?H:.
+?F:!try
+: check for "kill(pid, 0)"
+echo " "
+case "$d_pidcheck" in
+"$define")
+echo "I already know your system supports kill(pid, 0) for pid checks." >&4
+ ;;
+"$undef")
+echo "We both know your system does not support signal #0 for pid checks." >&4
+ ;;
+*)
+ echo "Checking to see if kill(pid, 0) works..." >&4
+ $cat >try.c <<'EOCP'
+int main()
+ {
+ int pid, status0, status9;
+
+ if ((pid = fork()) == 0)
+ {
+ sleep(30);
+ exit(1);
+ }
+ status0 = kill(pid, 0);
+ status9 = kill(pid, 9);
+ exit(status0 == status9);
+ }
+EOCP
+ if $cc -o try try.c >/dev/null 2>&1 ; then
+ if ./try >/dev/null 2>&1 ; then
+ echo "Yes, it does marvels."
+ d_pidcheck="$undef"
+ else
+ d_pidcheck="$define"
+ echo "No, it doesn't."
+ fi
+ else
+ echo "(I was unable to compile the test program.)"
+ echo "Your system does not appear to support kill(pid, 0)."
+ d_pidcheck="$undef"
+ fi
+ $rm -f try.c try$_o try
+ ;;
+esac
+
diff --git a/mcon/U/d_pipe.U b/mcon/U/d_pipe.U
new file mode 100644
index 0000000..004905f
--- /dev/null
+++ b/mcon/U/d_pipe.U
@@ -0,0 +1,47 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu>
+?RCS:
+?RCS: $Log: d_pipe.U,v $
+?RCS: Revision 3.0.1.1 1994/08/29 16:11:44 ram
+?RCS: patch32: created by ADO
+?RCS:
+?MAKE:d_pipe: Trylink cat i_unistd
+?MAKE: -pick add $@ %<
+?S:d_pipe:
+?S: This variable conditionally defines the HAS_PIPE symbol, which
+?S: indicates to the C program that the pipe() routine is available
+?S: to create an inter-process channel.
+?S:.
+?C:HAS_PIPE:
+?C: This symbol, if defined, indicates that the pipe routine is
+?C: available to create an inter-process channel.
+?C:.
+?H:#$d_pipe HAS_PIPE /**/
+?H:.
+?LINT:set d_pipe
+: see if pipe exists
+$cat >try.c <<EOC
+#$i_unistd I_UNISTD
+#ifdef I_UNISTD
+#include <unistd.h>
+#endif
+int main(void)
+{
+ static int fds[2], ret;
+ ret |= pipe(fds);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=pipe
+set d_pipe
+eval $trylink
+
diff --git a/mcon/U/d_pipe2.U b/mcon/U/d_pipe2.U
new file mode 100644
index 0000000..d64c703
--- /dev/null
+++ b/mcon/U/d_pipe2.U
@@ -0,0 +1,46 @@
+?RCS:
+?RCS: Copyright (c) 2015, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:d_pipe2: Trylink cat i_unistd i_sysfile
+?MAKE: -pick add $@ %<
+?S:d_pipe2:
+?S: This variable conditionally defines the HAS_PIPE2 symbol, which
+?S: indicates to the C program that the pipe2() routine is available
+?S: to create an inter-process channel with some flags.
+?S:.
+?C:HAS_PIPE2:
+?C: This symbol, if defined, indicates that the pipe routine is
+?C: available to create an inter-process channel with O_CLOEXEC or
+?C: O_NONBLOCK flags.
+?C:.
+?H:#$d_pipe2 HAS_PIPE2 /**/
+?H:.
+?LINT:set d_pipe2
+: see if pipe2 exists
+$cat >try.c <<EOC
+#$i_unistd I_UNISTD
+#$i_sysfile I_SYS_FILE
+#ifdef I_UNISTD
+#include <unistd.h>
+#endif
+#ifdef I_SYS_FILE
+#include <sys/file.h> /* For O_* constants */
+#endif
+#include <fcntl.h> /* For O_* constants */
+int main(void)
+{
+ static int fds[2], ret;
+ ret |= pipe2(fds, O_CLOEXEC | O_NONBLOCK);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=pipe2
+set d_pipe2
+eval $trylink
+
diff --git a/mcon/U/d_poll.U b/mcon/U/d_poll.U
new file mode 100644
index 0000000..39d6b40
--- /dev/null
+++ b/mcon/U/d_poll.U
@@ -0,0 +1,64 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_poll.U,v $
+?RCS: Revision 3.0.1.2 1997/02/28 15:38:17 ram
+?RCS: patch61: mention that <poll.h> can be included if HAS_POLL defined
+?RCS:
+?RCS: Revision 3.0.1.1 1995/01/11 15:26:31 ram
+?RCS: patch45: created
+?RCS:
+?MAKE:d_poll: Trylink cat i_poll i_syspoll
+?MAKE: -pick add $@ %<
+?S:d_poll:
+?S: This variable conditionally defines the HAS_POLL symbol, which
+?S: indicates to the C program that the poll() routine is available
+?S: to poll active file descriptors.
+?S:.
+?C:HAS_POLL :
+?C: This symbol, if defined, indicates that the poll routine is
+?C: available to poll active file descriptors. Please check I_POLL and
+?C: I_SYS_POLL to know which header should be included as well.
+?C:.
+?H:#$d_poll HAS_POLL /**/
+?H:.
+?LINT:set d_poll
+: see if poll exists
+$cat >try.c <<EOC
+#include <sys/types.h>
+#$i_syspoll I_SYS_POLL
+#ifdef I_SYS_POLL
+#include <sys/poll.h>
+#endif
+#$i_poll I_POLL
+#ifdef I_POLL
+#include <poll.h>
+#endif
+int main(void)
+{
+ static int ret, timeout;
+ static unsigned n;
+ static struct pollfd pfd;
+ pfd.fd |= 1;
+ pfd.revents |= 1;
+ pfd.events |= POLLIN;
+ pfd.events |= POLLOUT;
+ pfd.events |= POLLPRI;
+ pfd.events |= POLLERR;
+ pfd.events |= POLLHUP;
+ pfd.events |= POLLNVAL;
+ ret |= poll(&pfd, n, timeout);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=poll
+set d_poll
+eval $trylink
+
diff --git a/mcon/U/d_popen.U b/mcon/U/d_popen.U
new file mode 100644
index 0000000..4e5ff55
--- /dev/null
+++ b/mcon/U/d_popen.U
@@ -0,0 +1,42 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_popen.U,v $
+?RCS: Revision 3.0 1993/08/18 12:06:47 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_popen: Trylink cat
+?MAKE: -pick add $@ %<
+?S:d_popen:
+?S: This variable conditionally defines HAS_POPEN if popen() is
+?S: available to open a pipe from a process.
+?S:.
+?C:HAS_POPEN (POPEN):
+?C: This symbol, if defined, indicates that the popen routine is
+?C: available to open a pipe from a process.
+?C:.
+?H:#$d_popen HAS_POPEN /**/
+?H:.
+?LINT:set d_popen
+: see if popen exists
+$cat >try.c <<EOC
+#include <stdio.h>
+int main(void)
+{
+ FILE *f;
+
+ f = popen("command", "mode");
+ return f ? 0 : 1;
+}
+EOC
+cyn=popen
+set d_popen
+eval $trylink
+
diff --git a/mcon/U/d_portable.U b/mcon/U/d_portable.U
new file mode 100644
index 0000000..f052d65
--- /dev/null
+++ b/mcon/U/d_portable.U
@@ -0,0 +1,71 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_portable.U,v $
+?RCS: Revision 3.0.1.2 1995/01/11 15:28:52 ram
+?RCS: patch45: executable path stripping moved to the end in Config_sh.U
+?RCS:
+?RCS: Revision 3.0.1.1 1993/12/15 08:21:17 ram
+?RCS: patch15: did not strip variables properly when needed
+?RCS: patch15: now also strips down variables from trylist
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:06:48 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: The Loc unit is wanted to get the definition of all the locating variables.
+?X:
+?MAKE:d_portable: cat Loc Myread Oldconfig
+?MAKE: -pick add $@ %<
+?S:d_portable:
+?S: This variable conditionally defines the PORTABLE symbol, which
+?S: indicates to the C program that it should not assume that it is
+?S: running on the machine it was compiled on.
+?S:.
+?C:PORTABLE:
+?C: This symbol, if defined, indicates to the C program that it should
+?C: not assume that it is running on the machine it was compiled on.
+?C: The program should be prepared to look up the host name, translate
+?C: generic filenames, use PATH, etc.
+?C:.
+?H:#$d_portable PORTABLE /**/
+?H:.
+?D:d_portable=''
+: decide how portable to be
+case "$d_portable" in
+"$define") dflt=y;;
+*) dflt=n;;
+esac
+$cat <<'EOH'
+
+I can set things up so that your shell scripts and binaries are more portable,
+at what may be a noticable cost in performance. In particular, if you
+ask to be portable, the following happens:
+
+ 1) Shell scripts will rely on the PATH variable rather than using
+ the paths derived above.
+ 2) ~username interpretations will be done at run time rather than
+ by Configure.
+@if PHOSTNAME
+ 3) The system name will be determined at run time, if at all possible.
+@end
+
+EOH
+rp="Do you expect to run these scripts and binaries on multiple machines?"
+. ./myread
+case "$ans" in
+ y*) d_portable="$define"
+?X:
+?X: Paths will be stripped down (/usr/bin/vi -> vi) in Config_sh.U if needed.
+?X:
+ ;;
+ *) d_portable="$undef" ;;
+esac
+
diff --git a/mcon/U/d_posix_fadvise.U b/mcon/U/d_posix_fadvise.U
new file mode 100644
index 0000000..eecf982
--- /dev/null
+++ b/mcon/U/d_posix_fadvise.U
@@ -0,0 +1,47 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 2006, Christian Biere
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:d_posix_fadvise: Trylink cat
+?MAKE: -pick add $@ %<
+?S:d_posix_fadvise:
+?S: This variable conditionally defines the HAS_POSIX_FADVISE symbol, which
+?S: indicates to the C program that posix_fadvise() support is available.
+?S:.
+?C:HAS_POSIX_FADVISE:
+?C: This symbol is defined when posix_fadvise() can be used.
+?C:.
+?H:#$d_posix_fadvise HAS_POSIX_FADVISE
+?H:.
+?LINT: set d_posix_fadvise
+: can we use posix_fadvise?
+$cat >try.c <<'EOC'
+#include <sys/types.h>
+#include <fcntl.h>
+int main(void)
+{
+ static int ret, fd;
+ static off_t offset, size;
+ static int hint;
+
+ hint = POSIX_FADV_NORMAL
+ | POSIX_FADV_RANDOM
+ | POSIX_FADV_SEQUENTIAL
+ | POSIX_FADV_WILLNEED
+ | POSIX_FADV_DONTNEED
+ | POSIX_FADV_NOREUSE;
+
+ ret |= posix_fadvise(fd, offset, size, hint);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=posix_fadvise
+set d_posix_fadvise
+eval $trylink
+
diff --git a/mcon/U/d_posix_memalign.U b/mcon/U/d_posix_memalign.U
new file mode 100644
index 0000000..498cf1d
--- /dev/null
+++ b/mcon/U/d_posix_memalign.U
@@ -0,0 +1,41 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 2006, Christian Biere
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:d_posix_memalign: Trylink cat i_stdlib
+?MAKE: -pick add $@ %<
+?S:d_posix_memalign:
+?S: This variable conditionally defines the HAS_POSIX_MEMALIGN symbol, which
+?S: indicates to the C program that posix_memalign() support is available.
+?S:.
+?C:HAS_POSIX_MEMALIGN:
+?C: This symbol is defined when posix_memalign() can be used.
+?C:.
+?H:#$d_posix_memalign HAS_POSIX_MEMALIGN
+?H:.
+?LINT: set d_posix_memalign
+: can we use posix_memalign?
+$cat >try.c <<EOC
+#$i_stdlib I_STDLIB
+#ifdef I_STDLIB
+#include <stdlib.h>
+#endif
+int main(void)
+{
+ static int ret;
+ static size_t align, size;
+ void *p;
+ ret |= posix_memalign(&p, align, size);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=posix_memalign
+set d_posix_memalign
+eval $trylink
+
diff --git a/mcon/U/d_pread.U b/mcon/U/d_pread.U
new file mode 100644
index 0000000..60ab4d9
--- /dev/null
+++ b/mcon/U/d_pread.U
@@ -0,0 +1,48 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_pread.U,v $
+?RCS:
+?MAKE:d_pread: Trylink cat i_unistd
+?MAKE: -pick add $@ %<
+?S:d_pread:
+?S: This variable conditionally defines the HAS_PREAD symbol, which
+?S: indicates to the C program that the pread() routine is available.
+?S:.
+?C:HAS_PREAD :
+?C: This symbol, if defined, indicates that the pread routine is
+?C: available to perform reads on a file descriptor at a given offset.
+?C:.
+?H:#$d_pread HAS_PREAD /**/
+?H:.
+?LINT:set d_pread
+: see if pread exists
+$cat >try.c <<EOC
+#define _GNU_SOURCE
+#include <sys/types.h>
+#$i_unistd I_UNISTD
+#ifdef I_UNISTD
+#include <unistd.h>
+#endif
+int main(void)
+{
+ static ssize_t ret;
+ static int fd;
+ static char buf[1];
+ static size_t size;
+ static off_t offset;
+ ret |= pread(fd, buf, size, offset);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=pread
+set d_pread
+eval $trylink
+
diff --git a/mcon/U/d_preadv.U b/mcon/U/d_preadv.U
new file mode 100644
index 0000000..4261454
--- /dev/null
+++ b/mcon/U/d_preadv.U
@@ -0,0 +1,48 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_preadv.U,v $
+?RCS:
+?MAKE:d_preadv: Trylink cat i_unistd
+?MAKE: -pick add $@ %<
+?S:d_preadv:
+?S: This variable conditionally defines the HAS_PREADV symbol, which
+?S: indicates to the C program that the preadv() routine is available.
+?S:.
+?C:HAS_PREADV :
+?C: This symbol, if defined, indicates that the preadv routine is
+?C: available to perform vectored reads on a file descriptor at a
+?C: given offset.
+?C:.
+?H:#$d_preadv HAS_PREADV /**/
+?H:.
+?LINT:set d_preadv
+: see if preadv exists
+$cat >try.c <<EOC
+#include <sys/types.h>
+#include <sys/uio.h>
+#$i_unistd I_UNISTD
+#ifdef I_UNISTD
+#include <unistd.h>
+#endif
+int main(void)
+{
+ static ssize_t ret;
+ static int fd, iovcnt;
+ static struct iovec iov;
+ static off_t offset;
+ ret |= preadv(fd, &iov, iovcnt, offset);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=preadv
+set d_preadv
+eval $trylink
+
diff --git a/mcon/U/d_proginvocname.U b/mcon/U/d_proginvocname.U
new file mode 100644
index 0000000..1ebd177
--- /dev/null
+++ b/mcon/U/d_proginvocname.U
@@ -0,0 +1,40 @@
+?RCS:
+?RCS: Copyright (c) 2015 Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:d_proginvocname: Trylink cat
+?MAKE: -pick add $@ %<
+?S:d_proginvocname:
+?S: This variable conditionally defines the HAS_PROGRAM_INVOCATION_NAME
+?S: symbol, which indicates to the C program that the two variables
+?S: program_invocation_name and program_invocation_short_name are set
+?S: at startup time.
+?S:.
+?C:HAS_PROGRAM_INVOCATION_NAME:
+?C: This symbol is defined when the C startup sets the two variables
+?C: program_invocation_name and program_invocation_short_name. To get
+?C: these definitions, <errno.h> must be included with __USE_GNU defined.
+?C:.
+?H:#$d_proginvocname HAS_PROGRAM_INVOCATION_NAME
+?H:.
+?LINT: set d_proginvocname
+: do we have the program_invocation_name variable?
+$cat >try.c <<EOC
+#include <stdio.h>
+#define __USE_GNU
+#include <errno.h>
+int main(void)
+{
+ printf("%s\n%s\n", program_invocation_name, program_invocation_short_name);
+ return 0;
+}
+EOC
+cyn="whether C startup sets program_invocation_name"
+set d_proginvocname
+eval $trylink
+
diff --git a/mcon/U/d_psignal.U b/mcon/U/d_psignal.U
new file mode 100644
index 0000000..6cd2467
--- /dev/null
+++ b/mcon/U/d_psignal.U
@@ -0,0 +1,41 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_psignal.U,v $
+?RCS: Revision 3.0 1993/08/18 12:06:49 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_psignal: Trylink cat
+?MAKE: -pick add $@ %<
+?S:d_psignal:
+?S: This variable conditionally defines the HAS_PSIGNAL symbol, which
+?S: indicates that the psignal() routine exists. The psignal() routine
+?S: prints a description of a signal on the standard error output.
+?S:.
+?C:HAS_PSIGNAL (PSIGNAL):
+?C: This symbol, if defined, indicates that the psignal() routine exists.
+?C:.
+?H:#$d_psignal HAS_PSIGNAL /**/
+?H:.
+?LINT:set d_psignal
+: see if psignal exists
+$cat >try.c <<EOC
+#include <signal.h>
+int main(void)
+{
+ static int sig;
+ psignal(sig, "signal");
+ return 0;
+}
+EOC
+cyn=psignal
+set d_psignal
+eval $trylink
+
diff --git a/mcon/U/d_ptattr_setstack.U b/mcon/U/d_ptattr_setstack.U
new file mode 100644
index 0000000..5517390
--- /dev/null
+++ b/mcon/U/d_ptattr_setstack.U
@@ -0,0 +1,40 @@
+?RCS:
+?RCS: Copyright (c) 2013 Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:d_ptattr_setstack: Trylink cat
+?MAKE: -pick add $@ %<
+?S:d_ptattr_setstack:
+?S: This variable conditionally defines the HAS_PTHREAD_ATTR_SETSTACK symbol,
+?S: which indicates to the C program that pthread_attr_setstack() should be
+?S: used to set the thread stack, instead of pthread_attr_setstackaddr().
+?S:.
+?C:HAS_PTHREAD_ATTR_SETSTACK:
+?C: This symbol is defined when pthread_attr_setstack() can be used to set
+?C: the thread stack. Otherwise, use obsoleted pthread_attr_setstackaddr().
+?C:.
+?H:#$d_ptattr_setstack HAS_PTHREAD_ATTR_SETSTACK
+?H:.
+?LINT: set d_ptattr_setstack
+: can we use pthread_attr_setstack
+$cat >try.c <<'EOC'
+#include <pthread.h>
+int main(void)
+{
+ pthread_attr_t attr;
+ void *p = NULL;
+ static int ret;
+
+ ret |= pthread_attr_setstack(&attr, p, 4096);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=pthread_attr_setstack
+set d_ptattr_setstack '-lpthread'
+eval $trylink
+
diff --git a/mcon/U/d_pwrite.U b/mcon/U/d_pwrite.U
new file mode 100644
index 0000000..f811308
--- /dev/null
+++ b/mcon/U/d_pwrite.U
@@ -0,0 +1,48 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_pwrite.U,v $
+?RCS:
+?MAKE:d_pwrite: Trylink cat i_unistd
+?MAKE: -pick add $@ %<
+?S:d_pwrite:
+?S: This variable conditionally defines the HAS_PWRITE symbol, which
+?S: indicates to the C program that the pwrite() routine is available.
+?S:.
+?C:HAS_PWRITE :
+?C: This symbol, if defined, indicates that the pwrite routine is
+?C: available to perform writes on a file descriptor at a given offset.
+?C:.
+?H:#$d_pwrite HAS_PWRITE /**/
+?H:.
+?LINT:set d_pwrite
+: see if pwrite exists
+$cat >try.c <<EOC
+#define _GNU_SOURCE
+#include <sys/types.h>
+#$i_unistd I_UNISTD
+#ifdef I_UNISTD
+#include <unistd.h>
+#endif
+int main(void)
+{
+ static ssize_t ret;
+ static int fd;
+ static char buf[1];
+ static size_t size;
+ static off_t offset;
+ ret |= pwrite(fd, buf, size, offset);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=pwrite
+set d_pwrite
+eval $trylink
+
diff --git a/mcon/U/d_pwritev.U b/mcon/U/d_pwritev.U
new file mode 100644
index 0000000..6612cf7
--- /dev/null
+++ b/mcon/U/d_pwritev.U
@@ -0,0 +1,48 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_pwritev.U,v $
+?RCS:
+?MAKE:d_pwritev: Trylink cat i_unistd
+?MAKE: -pick add $@ %<
+?S:d_pwritev:
+?S: This variable conditionally defines the HAS_PWRITEV symbol, which
+?S: indicates to the C program that the pwritev() routine is available.
+?S:.
+?C:HAS_PWRITEV :
+?C: This symbol, if defined, indicates that the pwritev routine is
+?C: available to perform vectored writes on a file descriptor at a
+?C: given offset.
+?C:.
+?H:#$d_pwritev HAS_PWRITEV /**/
+?H:.
+?LINT:set d_pwritev
+: see if pwritev exists
+$cat >try.c <<EOC
+#include <sys/types.h>
+#include <sys/uio.h>
+#$i_unistd I_UNISTD
+#ifdef I_UNISTD
+#include <unistd.h>
+#endif
+int main(void)
+{
+ static ssize_t ret;
+ static int fd, iovcnt;
+ static struct iovec iov;
+ static off_t offset;
+ ret |= pwritev(fd, &iov, iovcnt, offset);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=pwritev
+set d_pwritev
+eval $trylink
+
diff --git a/mcon/U/d_random.U b/mcon/U/d_random.U
new file mode 100644
index 0000000..8494759
--- /dev/null
+++ b/mcon/U/d_random.U
@@ -0,0 +1,40 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 2006, Christian Biere
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:d_random: Trylink cat i_stdlib
+?MAKE: -pick add $@ %<
+?S:d_random:
+?S: This variable conditionally defines the HAS_RANDOM symbol, which
+?S: indicates to the C program that the random() routine is available.
+?S:.
+?C:HAS_RANDOM:
+?C: This symbol, if defined, indicates that the random routine is
+?C: available.
+?C:.
+?H:#$d_random HAS_RANDOM /**/
+?H:.
+?LINT:set d_random
+: see if random exists
+$cat >try.c <<EOC
+#$i_stdlib I_STDLIB
+#ifdef I_STDLIB
+#include <stdlib.h>
+#endif
+int main(void)
+{
+ static long ret;
+ ret |= random();
+ return ret ? 0 : 1;
+}
+EOC
+cyn=random
+set d_random
+eval $trylink
+
diff --git a/mcon/U/d_raster.U b/mcon/U/d_raster.U
new file mode 100644
index 0000000..01702fb
--- /dev/null
+++ b/mcon/U/d_raster.U
@@ -0,0 +1,57 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_raster.U,v $
+?RCS: Revision 3.0 1993/08/18 12:06:50 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_raster rasterlib: cat test Setvar Myread Oldconfig
+?MAKE: -pick add $@ %<
+?S:d_raster:
+?S: Conditionally defines RASTER_TEK if this is a raster tech machine.
+?S:.
+?S:rasterlib (d_rasterlib):
+?S: Set to the needed compile flag if this is a raster tech machine.
+?S: It is up to the Makefile to use this variable.
+?S:.
+?C:RASTER_TEK:
+?C: Defined if this is a rastertech machine.
+?C:.
+?H:#$d_raster RASTER_TEK /**/
+?H:.
+?LINT:set d_raster
+: See if this is a raster tech machine.
+val="$undef"
+rasterlib=''
+if $test -r /dev/mirage; then
+ $cat <<'EOM'
+
+You seem to have a mirage device... this is normally associated with a raster
+technologies graphics workstation. If this is right, you may want to use raster
+tech in this program.
+
+EOM
+ dflt=y
+ case "$d_raster" in
+ "$undef") dflt=n;;
+ esac
+ rp='Use raster tech?'
+ . ./myread
+ case "$ans" in
+ y*) val="$define";;
+ esac
+fi
+set d_raster
+eval $setvar
+
+case "$d_raster" in
+"$define") rasterlib='-lphigs';;
+esac
+
diff --git a/mcon/U/d_rdchk.U b/mcon/U/d_rdchk.U
new file mode 100644
index 0000000..12e24ff
--- /dev/null
+++ b/mcon/U/d_rdchk.U
@@ -0,0 +1,42 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_rdchk.U,v $
+?RCS: Revision 3.0 1993/08/18 12:06:51 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_rdchk: Trylink cat
+?MAKE: -pick add $@ %<
+?S:d_rdchk:
+?S: This variable conditionally defines the HAS_RDCHK symbol, which
+?S: indicates to the C program that the rdchk() routine is available
+?S: to find out if there is input pending on an IO channel.
+?S:.
+?C:HAS_RDCHK (RDCHK):
+?C: This symbol, if defined, indicates that the rdchk routine is available
+?C: to find out if there is input pending on an IO channel. Generally
+?C: the routine is used only if FIONREAD and O_NDELAY aren't available.
+?C:.
+?H:#$d_rdchk HAS_RDCHK /**/
+?H:.
+?LINT:set d_rdchk
+: see if rdchk exists
+$cat >try.c <<EOC
+int main(void)
+{
+ static int ret, fd;
+ ret |= rdchk(fd);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=rdchk
+set d_rdchk
+eval $trylink
+
diff --git a/mcon/U/d_readdir.U b/mcon/U/d_readdir.U
new file mode 100644
index 0000000..2db9d28
--- /dev/null
+++ b/mcon/U/d_readdir.U
@@ -0,0 +1,135 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_readdir.U,v $
+?RCS: Revision 3.0.1.1 1994/05/06 14:46:37 ram
+?RCS: patch23: added support for seekdir, telldir and rewinddir (ADO)
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:06:52 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_readdir d_seekdir d_telldir d_rewinddir: Trylink cat i_dirent
+?MAKE: -pick add $@ %<
+?S:d_readdir:
+?S: This variable conditionally defines HAS_READDIR if readdir() is
+?S: available to read directory entries.
+?S:.
+?C:HAS_READDIR (READDIR):
+?C: This symbol, if defined, indicates that the readdir routine is
+?C: available to read directory entries. You may have to include
+?C: <dirent.h>. See I_DIRENT.
+?C:.
+?H:#$d_readdir HAS_READDIR /**/
+?H:.
+?S:d_seekdir:
+?S: This variable conditionally defines HAS_SEEKDIR if seekdir() is
+?S: available.
+?S:.
+?C:HAS_SEEKDIR:
+?C: This symbol, if defined, indicates that the seekdir routine is
+?C: available. You may have to include <dirent.h>. See I_DIRENT.
+?C:.
+?H:#$d_seekdir HAS_SEEKDIR /**/
+?H:.
+?S:d_telldir:
+?S: This variable conditionally defines HAS_TELLDIR if telldir() is
+?S: available.
+?S:.
+?C:HAS_TELLDIR:
+?C: This symbol, if defined, indicates that the telldir routine is
+?C: available. You may have to include <dirent.h>. See I_DIRENT.
+?C:.
+?H:#$d_telldir HAS_TELLDIR /**/
+?H:.
+?S:d_rewinddir:
+?S: This variable conditionally defines HAS_REWINDDIR if rewinddir() is
+?S: available.
+?S:.
+?C:HAS_REWINDDIR:
+?C: This symbol, if defined, indicates that the rewinddir routine is
+?C: available. You may have to include <dirent.h>. See I_DIRENT.
+?C:.
+?H:#$d_rewinddir HAS_REWINDDIR /**/
+?H:.
+?LINT:set d_readdir d_seekdir d_telldir d_rewinddir
+: see if readdir and friends exist
+$cat >try.c <<EOC
+#$i_dirent I_DIRENT
+#ifdef I_DIRENT
+#include <dirent.h>
+#endif
+int main(void)
+{
+ static DIR *dir;
+ struct dirent *ret;
+ ret = readdir(dir);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=readdir
+set d_readdir
+eval $trylink
+
+@if d_seekdir || HAS_SEEKDIR
+$cat >try.c <<EOC
+#$i_dirent I_DIRENT
+#ifdef I_DIRENT
+#include <dirent.h>
+#endif
+int main(void)
+{
+ static DIR *dir;
+ static long loc;
+ seekdir(dir, loc);
+ return 0;
+}
+EOC
+cyn=seekdir
+set d_seekdir
+eval $trylink
+@end
+@if d_telldir || HAS_TELLDIR
+$cat >try.c <<EOC
+#$i_dirent I_DIRENT
+#ifdef I_DIRENT
+#include <dirent.h>
+#endif
+int main(void)
+{
+ static DIR *dir;
+ static long ret;
+ ret |= telldir(dir);
+ if (ret)
+ return 1;
+ return 0;
+}
+EOC
+cyn=telldir
+set d_telldir
+eval $trylink
+@end
+@if d_rewinddir || HAS_REWINDDIR
+$cat >try.c <<EOC
+#$i_dirent I_DIRENT
+#ifdef I_DIRENT
+#include <dirent.h>
+#endif
+int main(void)
+{
+ static DIR *dir;
+ rewinddir(dir);
+ return 0;
+}
+EOC
+cyn=rewinddir
+set d_rewinddir
+eval $trylink
+@end
+
diff --git a/mcon/U/d_readlink.U b/mcon/U/d_readlink.U
new file mode 100644
index 0000000..e4e6dc6
--- /dev/null
+++ b/mcon/U/d_readlink.U
@@ -0,0 +1,49 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu>
+?RCS:
+?RCS: $Log: d_readlink.U,v $
+?RCS: Revision 3.0.1.1 1994/08/29 16:11:52 ram
+?RCS: patch32: created by ADO
+?RCS:
+?MAKE:d_readlink: Trylink cat i_unistd
+?MAKE: -pick add $@ %<
+?S:d_readlink:
+?S: This variable conditionally defines the HAS_READLINK symbol, which
+?S: indicates to the C program that the readlink() routine is available
+?S: to read the value of a symbolic link.
+?S:.
+?C:HAS_READLINK :
+?C: This symbol, if defined, indicates that the readlink routine is
+?C: available to read the value of a symbolic link.
+?C:.
+?H:#$d_readlink HAS_READLINK /**/
+?H:.
+?LINT:set d_readlink
+: see if readlink exists
+$cat >try.c <<EOC
+#$i_unistd I_UNISTD
+#ifdef I_UNISTD
+#include <unistd.h>
+#endif
+int main(void)
+{
+ static ssize_t ret;
+ static char buf[1];
+ static size_t size;
+ ret |= readlink("path", buf, size);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=readlink
+set d_readlink
+eval $trylink
+
diff --git a/mcon/U/d_recvmsg.U b/mcon/U/d_recvmsg.U
new file mode 100644
index 0000000..4e3d488
--- /dev/null
+++ b/mcon/U/d_recvmsg.U
@@ -0,0 +1,70 @@
+?RCS: $Id: d_msg_flags.U 59 2010-12-12 10:14:03Z rmanfredi $
+?RCS:
+?RCS: Copyright (c) 2006, Christian Biere
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:d_recvmsg: Trylink cat i_systypes i_sysselct i_syssock \
+ i_winsock2 i_mswsock d_windows
+?MAKE: -pick add $@ %<
+?S:d_recvmsg:
+?S: This variable conditionally defines the HAS_RECVMSG symbol,
+?S: which indicates to the C program that the recvmsg() function is
+?S: available.
+?S:.
+?C:HAS_RECVMSG:
+?C: This symbol, if defined, indicates that the recvmsg() function
+?C: is available.
+?C:.
+?H:#$d_recvmsg HAS_RECVMSG /**/
+?H:.
+?LINT:set d_recvmsg
+: check for recvmsg function
+$cat >try.c <<EOC
+#$i_systypes I_SYS_TYPES
+#$i_sysselct I_SYS_SELECT
+#$i_syssock I_SYS_SOCKET
+#$i_winsock2 I_WINSOCK2
+#$i_mswsock I_MSWSOCK
+#$d_windows WINDOWS_SYSTEM
+#ifdef WINDOWS_SYSTEM
+#define WINVER 0x0501
+#endif
+#ifdef I_SYS_TYPES
+#include <sys/types.h>
+#endif
+#ifdef I_SYS_SOCKET
+#include <sys/socket.h>
+#endif
+#ifdef I_WINSOCK2
+#include <Winsock2.h>
+#endif
+#ifdef I_MSWSOCK
+#include <Mswsock.h>
+#endif
+int main(void)
+{
+ static struct msghdr msg;
+ int ret, fd, flags;
+
+ fd = 1;
+ flags = 1;
+ msg.msg_name = (void *) 0;
+ msg.msg_namelen |= 1;
+ msg.msg_iov = (void *) 0;
+ msg.msg_iovlen |= 1;
+ /* msg.msg_flags is intentionally excluded, see other unit */
+ msg.msg_control = (void *) 0;
+ msg.msg_controllen |= 1;
+ ret = recvmsg(fd, &msg, flags);
+ return ret ? 0 : 1;
+}
+EOC
+cyn='recvmsg'
+set d_recvmsg
+eval $trylink
+
diff --git a/mcon/U/d_regcmp.U b/mcon/U/d_regcmp.U
new file mode 100644
index 0000000..891ccf5
--- /dev/null
+++ b/mcon/U/d_regcmp.U
@@ -0,0 +1,64 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_regcmp.U,v $
+?RCS: Revision 3.0.1.1 1995/01/30 14:34:45 ram
+?RCS: patch49: now looks for POSIX regcomp() routine
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:06:53 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_regcmp d_re_comp: Csym cat
+?MAKE: -pick add $@ %<
+?X:
+?X: Modern code should use POSIX's regcomp().
+?X:
+?S:d_regcmp:
+?S: This variable conditionally defines the HAS_REGCMP symbol, which
+?S: indicates to the C program that the regcmp() routine is available
+?S: for regular pattern matching (usually on System V).
+?S:.
+?S:d_re_comp:
+?S: This variable conditionally defines the HAS_RECOMP symbol, which
+?S: indicates to the C program that the re_comp() routine is available
+?S: for regular pattern matching (usually on BSD). If so, it is likely that
+?S: re_exec() exists.
+?S:.
+?C:HAS_REGCMP (REGCMP):
+?C: This symbol, if defined, indicates that the regcmp() routine is
+?C: available to do some regular pattern matching (usually on System V).
+?C:.
+?C:HAS_RECOMP (RECOMP):
+?C: This symbol, if defined, indicates that the re_comp() routine is
+?C: available to do some regular pattern matching (usually on BSD). If so,
+?C: it is likely that re_exec() be available.
+?C:.
+?H:#$d_regcmp HAS_REGCMP /* sysV */
+?H:#$d_re_comp HAS_RECOMP /* BSD */
+?H:.
+?T:val
+: see if regcmp or re_comp exist, for regular pattern matching
+echo " "
+if set regcmp val -f d_regcmp; eval $csym; $val; then
+ echo 'regcmp() found.' >&4
+ d_regcmp="$define"
+ d_re_comp="$undef"
+elif set re_comp val -f d_re_comp; eval $csym; $val; then
+ echo 're_comp() found, assuming re_exec() also exists.' >&4
+ d_re_comp="$define"
+ d_regcmp="$undef"
+else
+ $cat >&4 <<EOM
+No regcmp() nor re_comp() found.
+EOM
+ d_regcmp="$undef"
+ d_re_comp="$undef"
+fi
+
diff --git a/mcon/U/d_regcomp.U b/mcon/U/d_regcomp.U
new file mode 100644
index 0000000..885b65e
--- /dev/null
+++ b/mcon/U/d_regcomp.U
@@ -0,0 +1,44 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 2011, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log$
+?MAKE:d_regcomp: Trylink cat
+?MAKE: -pick add $@ %<
+?S:d_regcomp:
+?S: This variable conditionally defines the HAS_REGCOMP symbol, which
+?S: indicates to the C program that the regcomp() routine is available
+?S: for regular patern matching (usally on POSIX.2 conforming systems).
+?S:.
+?C:HAS_REGCOMP (REGCOMP):
+?C: This symbol, if defined, indicates that the regcomp() routine is
+?C: available to do some regular patern matching (usually on POSIX.2
+?C: conforming systems).
+?C: When regcomp() exists, it is safe to assume regexec() and regfree()
+?C: are also available.
+?C:.
+?H:#$d_regcomp HAS_REGCOMP /**/
+?H:.
+?LINT:set d_regcomp
+: see if regcomp exists
+$cat >try.c <<EOC
+#include <regex.h>
+int main(void)
+{
+ int ret = 0;
+ regex_t re;
+ ret |= regcomp(&re, ".",
+ REG_EXTENDED | REG_NOSUB | REG_ICASE | REG_NEWLINE);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=regcomp
+set d_regcomp
+eval $trylink
+
diff --git a/mcon/U/d_regparm.U b/mcon/U/d_regparm.U
new file mode 100644
index 0000000..f1d03a5
--- /dev/null
+++ b/mcon/U/d_regparm.U
@@ -0,0 +1,48 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 2006, Christian Biere
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:d_regparm: Myread Setvar cat rm cc ccflags ldflags gccversion
+?MAKE: -pick add $@ %<
+?S:d_regparm:
+?S: This variable conditionally defines the HAS_REGPARM symbol, which
+?S: indicates to the C program that attribute regparm is available.
+?S:.
+?C:HAS_REGPARM:
+?C: This symbol is defined when __attribute__((__regparm__(n))) can be used.
+?C:.
+?H:#$d_regparm HAS_REGPARM
+?H:.
+?LINT:set d_regparm
+: check whether '__attribute__((__regparm__(n)))' can be used
+val="$undef"
+if [ "x$gccversion" != x ]
+then
+ $cat >try.c <<'EOC'
+static __attribute__((__regparm__(1))) int
+blah(int x)
+{
+ return x / 2;
+}
+int main(int argc, char *argv[])
+{
+ (void) argv;
+ return blah(argc);
+}
+EOC
+ if $cc $ccflags -Werror $ldflags -o try try.c >/dev/null 2>&1
+ then
+ val="$define"
+ fi
+ $rm -rf try try.*
+fi
+
+set d_regparm
+eval $setvar
+
diff --git a/mcon/U/d_rename.U b/mcon/U/d_rename.U
new file mode 100644
index 0000000..445ae43
--- /dev/null
+++ b/mcon/U/d_rename.U
@@ -0,0 +1,43 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_rename.U,v $
+?RCS: Revision 3.0 1993/08/18 12:06:54 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_rename: Trylink cat
+?MAKE: -pick add $@ %<
+?S:d_rename:
+?S: This variable conditionally defines the HAS_RENAME symbol, which
+?S: indicates to the C program that the rename() routine is available
+?S: to rename files.
+?S:.
+?C:HAS_RENAME (RENAME):
+?C: This symbol, if defined, indicates that the rename routine is available
+?C: to rename files. Otherwise you should do the unlink(), link(), unlink()
+?C: trick.
+?C:.
+?H:#$d_rename HAS_RENAME /**/
+?H:.
+?LINT:set d_rename
+: see if rename exists
+$cat >try.c <<EOC
+#include <stdio.h>
+int main(void)
+{
+ static int ret;
+ ret |= rename("old", "new");
+ return ret ? 0 : 1;
+}
+EOC
+cyn=rename
+set d_rename
+eval $trylink
+
diff --git a/mcon/U/d_rmdir.U b/mcon/U/d_rmdir.U
new file mode 100644
index 0000000..3a4ca4e
--- /dev/null
+++ b/mcon/U/d_rmdir.U
@@ -0,0 +1,45 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_rmdir.U,v $
+?RCS: Revision 3.0 1993/08/18 12:06:56 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_rmdir: Trylink cat i_unistd
+?MAKE: -pick add $@ %<
+?S:d_rmdir:
+?S: This variable conditionally defines HAS_RMDIR if rmdir() is
+?S: available to remove directories.
+?S:.
+?C:HAS_RMDIR (RMDIR):
+?C: This symbol, if defined, indicates that the rmdir routine is
+?C: available to remove directories. Otherwise you should fork off a
+?C: new process to exec /bin/rmdir.
+?C:.
+?H:#$d_rmdir HAS_RMDIR /**/
+?H:.
+?LINT:set d_rmdir
+: see if rmdir exists
+$cat >try.c <<EOC
+#$i_unistd I_UNISTD
+#ifdef I_UNISTD
+#include <unistd.h>
+#endif
+int main(void)
+{
+ static int ret;
+ ret |= rmdir("path");
+ return ret ? 0 : 1;
+}
+EOC
+cyn=rmdir
+set d_rmdir
+eval $trylink
+
diff --git a/mcon/U/d_rusage.U b/mcon/U/d_rusage.U
new file mode 100644
index 0000000..1864872
--- /dev/null
+++ b/mcon/U/d_rusage.U
@@ -0,0 +1,53 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_rusage.U,v $
+?RCS: Revision 3.0 1993/08/18 12:06:57 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X: We may need to include <sys/resource.h> and <sys/time.h> FIXME
+?X:INC: i_sysresrc i_systime
+?MAKE:d_rusage: Trylink cat i_sysresrc
+?MAKE: -pick add $@ %<
+?S:d_rusage (d_getrusg):
+?S: This variable conditionally defines the HAS_GETRUSAGE symbol, which
+?S: indicates that the getrusage() routine exists. The getrusage() routine
+?S: supports sub-second accuracy for process cpu accounting. You may need
+?S: to include <sys/resource.h> and <sys/time.h>.
+?S:.
+?C:HAS_GETRUSAGE (RUSAGE GETRUSAGE):
+?C: This symbol, if defined, indicates that the getrusage() routine is
+?C: available to get process statistics with a sub-second accuracy.
+?C: Inclusion of <sys/resource.h> and <sys/time.h> may be necessary.
+?C:.
+?H:#$d_rusage HAS_GETRUSAGE /**/
+?H:.
+?LINT:set d_rusage
+: see if getrusage exists
+$cat >try.c <<EOC
+#include <sys/types.h>
+#include <sys/time.h>
+#$i_sysresrc I_SYS_RESOURCE
+#ifdef I_SYS_RESOURCE
+#include <sys/resource.h>
+#endif
+int main(void)
+{
+ static struct rusage ru;
+ static int ret;
+ ret |= getrusage(RUSAGE_SELF, &ru);
+ ret |= getrusage(RUSAGE_CHILDREN, &ru);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=getrusage
+set d_rusage
+eval $trylink
+
diff --git a/mcon/U/d_sa_interrupt.U b/mcon/U/d_sa_interrupt.U
new file mode 100644
index 0000000..443696c
--- /dev/null
+++ b/mcon/U/d_sa_interrupt.U
@@ -0,0 +1,37 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 2006, Christian Biere
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:d_sa_interrupt: Trylink cat
+?MAKE: -pick add $@ %<
+?S:d_sa_interrupt:
+?S: This variable conditionally defines the HAS_SA_INTERRUPT symbol, which
+?S: indicates to the C program that SA_INTERRUPT() is available for
+?S: sigaction().
+?S:.
+?C:HAS_SA_INTERRUPT:
+?C: This symbol is defined when SA_INTERRUPT can be used in sigaction().
+?C:.
+?H:#$d_sa_interrupt HAS_SA_INTERRUPT
+?H:.
+?LINT: set d_sa_interrupt
+: can we use SA_INTERRUPT?
+$cat >try.c <<'EOC'
+#include <signal.h>
+int main(void)
+{
+ static int ret;
+ ret |= SA_INTERRUPT;
+ return ret ? 0 : 1;
+}
+EOC
+cyn="whether SA_INTERRUPT is available in <signal.h>"
+set d_sa_interrupt
+eval $trylink
+
diff --git a/mcon/U/d_safebcpy.U b/mcon/U/d_safebcpy.U
new file mode 100644
index 0000000..68b921e
--- /dev/null
+++ b/mcon/U/d_safebcpy.U
@@ -0,0 +1,124 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_safebcpy.U,v $
+?RCS: Revision 3.0.1.4 1997/02/28 15:40:58 ram
+?RCS: patch61: improved overlapping copy check
+?RCS: patch61: comfort them if they have memmove
+?RCS: patch61: added ?F: metalint hint
+?RCS:
+?RCS: Revision 3.0.1.3 1995/07/25 13:58:40 ram
+?RCS: patch56: re-arranged compile line to include ldflags before objects
+?RCS:
+?RCS: Revision 3.0.1.2 1995/01/11 15:29:23 ram
+?RCS: patch45: added 'ldflags' to the test compile line (ADO)
+?RCS:
+?RCS: Revision 3.0.1.1 1994/05/06 14:49:03 ram
+?RCS: patch23: ensure string is not optimized in read-only memory (ADO)
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:06:58 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_safebcpy: cat d_bcopy +cc +optimize +ccflags +ldflags +libs rm \
+ d_memmove i_memory i_stdlib i_string i_unistd Oldconfig Setvar
+?MAKE: -pick add $@ %<
+?S:d_safebcpy:
+?S: This variable conditionally defines the HAS_SAFE_BCOPY symbol if
+?S: the bcopy() routine can do overlapping copies.
+?S:.
+?C:HAS_SAFE_BCOPY (SAFE_BCOPY):
+?C: This symbol, if defined, indicates that the bcopy routine is available
+?C: to copy potentially overlapping memory blocks. Otherwise you should
+?C: probably use memmove() or memcpy(). If neither is defined, roll your
+?C: own version.
+?C:.
+?H:#$d_safebcpy HAS_SAFE_BCOPY /**/
+?H:.
+?F:!safebcpy
+?LINT: set d_safebcpy
+: can bcopy handle overlapping blocks?
+?X: assume the worst
+val="$undef"
+case "$d_bcopy" in
+"$define")
+ echo " "
+ echo "Checking to see if your bcopy() can do overlapping copies..." >&4
+ $cat >foo.c <<EOCP
+#$i_memory I_MEMORY
+#$i_stdlib I_STDLIB
+#$i_string I_STRING
+#$i_unistd I_UNISTD
+EOCP
+ $cat >>foo.c <<'EOCP'
+#include <stdio.h>
+#ifdef I_MEMORY
+# include <memory.h>
+#endif
+#ifdef I_STDLIB
+# include <stdlib.h>
+#endif
+#ifdef I_STRING
+# include <string.h>
+#else
+# include <strings.h>
+#endif
+#ifdef I_UNISTD
+# include <unistd.h> /* Needed for NetBSD */
+#endif
+int main()
+{
+char buf[128], abc[128];
+char *b;
+int len;
+int off;
+int align;
+
+?X: Copy "abcde..." string to char abc[] so that gcc doesn't
+?X: try to store the string in read-only memory.
+bcopy("abcdefghijklmnopqrstuvwxyz0123456789", abc, 36);
+
+for (align = 7; align >= 0; align--) {
+ for (len = 36; len; len--) {
+ b = buf+align;
+ bcopy(abc, b, len);
+ for (off = 1; off <= len; off++) {
+ bcopy(b, b+off, len);
+ bcopy(b+off, b, len);
+ if (bcmp(b, abc, len))
+ exit(1);
+ }
+ }
+}
+exit(0);
+}
+EOCP
+ if $cc $optimize $ccflags $ldflags \
+ -o safebcpy foo.c $libs >/dev/null 2>&1; then
+ if ./safebcpy 2>/dev/null; then
+ echo "Yes, it can."
+ val="$define"
+ else
+ echo "It can't, sorry."
+ case "$d_memmove" in
+ "$define") echo "But that's Ok since you have memmove()." ;;
+ esac
+ fi
+ else
+ echo "(I can't compile the test program, so we'll assume not...)"
+ case "$d_memmove" in
+ "$define") echo "But that's Ok since you have memmove()." ;;
+ esac
+ fi
+ ;;
+esac
+$rm -f foo.* safebcpy core
+set d_safebcpy
+eval $setvar
+
diff --git a/mcon/U/d_safemcpy.U b/mcon/U/d_safemcpy.U
new file mode 100644
index 0000000..160aa46
--- /dev/null
+++ b/mcon/U/d_safemcpy.U
@@ -0,0 +1,127 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_safemcpy.U,v $
+?RCS: Revision 3.0.1.5 1997/02/28 15:41:12 ram
+?RCS: patch61: improved overlapping copy check
+?RCS: patch61: comfort them if they have memmove
+?RCS: patch61: added ?F: metalint hint
+?RCS:
+?RCS: Revision 3.0.1.4 1995/07/25 13:58:46 ram
+?RCS: patch56: re-arranged compile line to include ldflags before objects
+?RCS:
+?RCS: Revision 3.0.1.3 1995/03/21 08:47:26 ram
+?RCS: patch52: swapped two first arguments of memcpy() calls
+?RCS:
+?RCS: Revision 3.0.1.2 1994/10/29 16:15:10 ram
+?RCS: patch36: added 'ldflags' to the test compile line (ADO)
+?RCS:
+?RCS: Revision 3.0.1.1 1994/05/06 14:53:12 ram
+?RCS: patch23: ensure string is not optimized in read-only memory (ADO)
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:06:58 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_safemcpy: cat d_memcpy +cc +optimize +ccflags +libs +ldflags rm \
+ d_memmove i_memory i_stdlib i_string i_unistd Oldconfig Setvar
+?MAKE: -pick add $@ %<
+?S:d_safemcpy:
+?S: This variable conditionally defines the HAS_SAFE_MEMCPY symbol if
+?S: the memcpy() routine can do overlapping copies.
+?S:.
+?C:HAS_SAFE_MEMCPY (SAFE_MEMCPY):
+?C: This symbol, if defined, indicates that the memcpy routine is available
+?C: to copy potentially overlapping memory blocks. Otherwise you should
+?C: probably use memmove() or memcpy(). If neither is defined, roll your
+?C: own version.
+?C:.
+?H:#$d_safemcpy HAS_SAFE_MEMCPY /**/
+?H:.
+?F:!safemcpy
+?LINT: set d_safemcpy
+: can memcpy handle overlapping blocks?
+?X: assume the worst
+val="$undef"
+case "$d_memcpy" in
+"$define")
+ echo " "
+ echo "Checking to see if your memcpy() can do overlapping copies..." >&4
+ $cat >foo.c <<EOCP
+#$i_memory I_MEMORY
+#$i_stdlib I_STDLIB
+#$i_string I_STRING
+#$i_unistd I_UNISTD
+EOCP
+ $cat >>foo.c <<'EOCP'
+#include <stdio.h>
+#ifdef I_MEMORY
+# include <memory.h>
+#endif
+#ifdef I_STDLIB
+# include <stdlib.h>
+#endif
+#ifdef I_STRING
+# include <string.h>
+#else
+# include <strings.h>
+#endif
+#ifdef I_UNISTD
+# include <unistd.h> /* Needed for NetBSD */
+#endif
+int main()
+{
+char buf[128], abc[128];
+char *b;
+int len;
+int off;
+int align;
+
+/* Copy "abcde..." string to char abc[] so that gcc doesn't
+ try to store the string in read-only memory. */
+memcpy(abc, "abcdefghijklmnopqrstuvwxyz0123456789", 36);
+
+for (align = 7; align >= 0; align--) {
+ for (len = 36; len; len--) {
+ b = buf+align;
+ memcpy(b, abc, len);
+ for (off = 1; off <= len; off++) {
+ memcpy(b+off, b, len);
+ memcpy(b, b+off, len);
+ if (memcmp(b, abc, len))
+ exit(1);
+ }
+ }
+}
+exit(0);
+}
+EOCP
+ if $cc $optimize $ccflags $ldflags \
+ -o safemcpy foo.c $libs >/dev/null 2>&1; then
+ if ./safemcpy 2>/dev/null; then
+ echo "Yes, it can."
+ val="$define"
+ else
+ echo "It can't, sorry."
+ case "$d_memmove" in
+ "$define") echo "But that's Ok since you have memmove()." ;;
+ esac
+ fi
+ else
+ echo "(I can't compile the test program, so we'll assume not...)"
+ case "$d_memmove" in
+ "$define") echo "But that's Ok since you have memmove()." ;;
+ esac
+ fi
+ ;;
+esac
+$rm -f foo.* safemcpy core
+set d_safemcpy
+eval $setvar
+
diff --git a/mcon/U/d_sanemcmp.U b/mcon/U/d_sanemcmp.U
new file mode 100644
index 0000000..f2dc7d9
--- /dev/null
+++ b/mcon/U/d_sanemcmp.U
@@ -0,0 +1,88 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_sanemcmp.U,v $
+?RCS: Revision 3.0.1.1 1997/02/28 15:41:19 ram
+?RCS: patch61: created
+?RCS:
+?RCS:
+?MAKE:d_sanemcmp: cat d_memcmp +cc +optimize +ccflags +libs +ldflags rm_try \
+ i_memory i_stdlib i_string i_unistd Oldconfig Setvar
+?MAKE: -pick add $@ %<
+?S:d_sanemcmp:
+?S: This variable conditionally defines the HAS_SANE_MEMCMP symbol if
+?S: the memcpy() routine is available and can be used to compare relative
+?S: magnitudes of chars with their high bits set.
+?S:.
+?C:HAS_SANE_MEMCMP:
+?C: This symbol, if defined, indicates that the memcmp routine is available
+?C: and can be used to compare relative magnitudes of chars with their high
+?C: bits set. If it is not defined, roll your own version.
+?C:.
+?H:#$d_sanemcmp HAS_SANE_MEMCMP /**/
+?H:.
+?F:!sanemcmp
+?LINT: set d_sanemcmp
+: can memcmp be trusted to compare relative magnitude?
+?X: assume the worst
+val="$undef"
+case "$d_memcmp" in
+"$define")
+ echo " "
+ echo \
+ "Checking to see if your memcmp() can compare relative magnitude..." >&4
+ $cat >foo.c <<EOCP
+#$i_memory I_MEMORY
+#$i_stdlib I_STDLIB
+#$i_string I_STRING
+#$i_unistd I_UNISTD
+EOCP
+ $cat >>foo.c <<'EOCP'
+#include <stdio.h>
+#ifdef I_MEMORY
+# include <memory.h>
+#endif
+#ifdef I_STDLIB
+# include <stdlib.h>
+#endif
+#ifdef I_STRING
+# include <string.h>
+#else
+# include <strings.h>
+#endif
+#ifdef I_UNISTD
+# include <unistd.h> /* Needed for NetBSD */
+#endif
+int main()
+{
+char a = -1;
+char b = 0;
+if ((a < b) && memcmp(&a, &b, 1) < 0)
+ exit(1);
+exit(0);
+}
+EOCP
+ if $cc $optimize $ccflags $ldflags \
+ -o sanemcmp foo.c $libs >/dev/null 2>&1; then
+ if ./sanemcmp 2>/dev/null; then
+ echo "Yes, it can."
+ val="$define"
+ else
+ echo "No, it can't (it uses signed chars)."
+ fi
+ else
+ echo "(I can't compile the test program, so we'll assume not...)"
+ fi
+ ;;
+esac
+$rm_try foo.* sanemcmp
+set d_sanemcmp
+eval $setvar
+
diff --git a/mcon/U/d_sbrk.U b/mcon/U/d_sbrk.U
new file mode 100644
index 0000000..0bb14f2
--- /dev/null
+++ b/mcon/U/d_sbrk.U
@@ -0,0 +1,44 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_sbrk.U,v $
+?RCS: Revision 3.0.1.1 1994/01/24 14:06:31 ram
+?RCS: patch16: created
+?RCS:
+?MAKE:d_sbrk: Trylink cat i_unistd
+?MAKE: -pick add $@ %<
+?S:d_sbrk:
+?S: This variable conditionally defines HAS_SBRK if sbrk() is
+?S: available to add more core to the process.
+?S:.
+?C:HAS_SBRK:
+?C: This symbol, if defined, indicates that the sbrk system call is
+?C: available to add/relase core. Always true on Unix.
+?C:.
+?H:#$d_sbrk HAS_SBRK /**/
+?H:.
+?LINT:set d_sbrk
+: see if sbrk exists
+$cat >try.c <<EOC
+#$i_unistd I_UNISTD
+#ifdef I_UNISTD
+#include <unistd.h>
+#endif
+int main(void)
+{
+ void *ret;
+ ret = sbrk(1);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=sbrk
+set d_sbrk
+eval $trylink
+
diff --git a/mcon/U/d_scandir.U b/mcon/U/d_scandir.U
new file mode 100644
index 0000000..4c2072d
--- /dev/null
+++ b/mcon/U/d_scandir.U
@@ -0,0 +1,58 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_scandir.U,v $
+?RCS: Revision 3.0.1.1 1994/01/24 14:06:35 ram
+?RCS: patch16: created
+?RCS:
+?MAKE:d_scandir: Trylink cat i_dirent
+?MAKE: -pick add $@ %<
+?S:d_scandir:
+?S: This variable conditionally defines HAS_SCANDIR if scandir() is
+?S: available to scan a directory.
+?S:.
+?C:HAS_SCANDIR:
+?C: This symbol, if defined, indicates that the scandir routine is
+?C: available to scan a directory.
+?C:.
+?H:#$d_scandir HAS_SCANDIR /**/
+?H:.
+?LINT:set d_scandir
+: see if scandir exists
+$cat >try.c <<EOC
+#$i_dirent I_DIRENT
+#ifdef I_DIRENT
+#include <dirent.h>
+#endif
+int filter(const struct dirent *d)
+{
+ (void) d;
+ return 1;
+}
+
+int compare(const struct dirent **a, const struct dirent **b)
+{
+ (void) a;
+ (void) b;
+ return 1;
+}
+
+int main(void)
+{
+ static struct dirent **namelist;
+ static int ret;
+ ret |= scandir("dir", &namelist, filter, compare);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=scandir
+set d_scandir
+eval $trylink
+
diff --git a/mcon/U/d_scannl.U b/mcon/U/d_scannl.U
new file mode 100644
index 0000000..4f31596
--- /dev/null
+++ b/mcon/U/d_scannl.U
@@ -0,0 +1,74 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_scannl.U,v $
+?RCS: Revision 3.0.1.2 1997/02/28 15:41:27 ram
+?RCS: patch61: added ?F: metalint hint
+?RCS:
+?RCS: Revision 3.0.1.1 1995/07/25 13:59:12 ram
+?RCS: patch56: made cc and ccflags optional dependencies
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:07:00 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: Does the scanf routine read "\n" correctly ? This is was not
+?X: the case on AIX...
+?X:
+?MAKE:d_scannl: cat +cc +ccflags rm Setvar
+?MAKE: -pick add $@ %<
+?S:d_scannl:
+?S: This variable conditionally defines SCAN_NL, which indicates
+?S: wether the C library routines scanf() and friends can deal with
+?S: a '\n' in the input correctly. They do most of the time.
+?S:.
+?C:SCAN_NL:
+?C: This symbol is defined if the C library routines scanf() and friends
+?C: can deal with a '\n' in the input correctly, so that you can say
+?C: scanf("%d\n"); instead of scanf("%d"); getc(c); to handle the '\n'.
+?C:.
+?H:#$d_scannl SCAN_NL /* scanf("%d\n") works */
+?H:.
+?F:!try
+?LINT:set d_scannl
+: does scanf handle "\n" correctly ?
+echo " "
+val="$define"
+?X: I really want to say "\n" instead of '\n', because I am referring
+?X: to the string given as argument to scanf().
+echo 'Let'"'"'s see if scanf() handles "\\n" correctly...' >&4
+$cat >try.c <<'EOCP'
+int main()
+{
+ int i = 0, j = 0;
+ scanf("%d\n%d", &i, &j);
+ if (j != 3)
+ exit(1);
+ exit(0);
+}
+EOCP
+if $cc $ccflags -o try try.c >/dev/null 2>&1; then
+ if ./try <<'EOD'
+2
+3
+EOD
+ then
+ echo "Yes, it does."
+ else
+ echo "No, it doesn't."
+ val="$undef"
+ fi
+else
+ echo "(I can't seem to compile the test program. Assuming it does.)"
+fi
+set d_scannl
+eval $setvar
+$rm -f try.* try
+
diff --git a/mcon/U/d_sched_yield.U b/mcon/U/d_sched_yield.U
new file mode 100644
index 0000000..834f6ac
--- /dev/null
+++ b/mcon/U/d_sched_yield.U
@@ -0,0 +1,36 @@
+?RCS: Copyright (c) 2012, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:d_sched_yield: Trylink cat
+?MAKE: -pick add $@ %<
+?S:d_sched_yield:
+?S: This variable conditionally defines the HAS_SCHED_YIELD symbol, which
+?S: indicates to the C program that the sched_yield() routine is available
+?S: to yield the CPU.
+?S:.
+?C:HAS_SCHED_YIELD :
+?C: This symbol, if defined, indicates that the sched_yield() routine is
+?C: available to yield the CPU.
+?C:.
+?H:#$d_sched_yield HAS_SCHED_YIELD /**/
+?H:.
+?LINT:set d_sched_yield
+: see if sched_yield exists
+$cat >try.c <<EOC
+#include <sched.h>
+int main(void)
+{
+ static int ret;
+ ret |= sched_yield();
+ return ret ? 0 : 1;
+}
+EOC
+cyn=sched_yield
+set d_sched_yield
+eval $trylink
+
diff --git a/mcon/U/d_scorfl.U b/mcon/U/d_scorfl.U
new file mode 100644
index 0000000..d53c00f
--- /dev/null
+++ b/mcon/U/d_scorfl.U
@@ -0,0 +1,58 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_scorfl.U,v $
+?RCS: Revision 3.0 1993/08/18 12:07:01 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_scorfl: cat Myread Oldconfig nametype Setvar
+?MAKE: -pick add $@ %<
+?S:d_scorfl:
+?S: This variable conditionally defines the SCOREFULL symbol, which
+?S: indicates to the C program that any scoreboard kept by the program
+?S: should be kept on the basis of the user's full name as opposed to
+?S: the user's login name.
+?S:.
+?C:SCOREFULL:
+?C: This symbol, if defined, indicates that any scoreboard kept by the
+?C: program should be kept on the basis of the user's full name as opposed
+?C: to the user's login name. If the user can change his full name he
+?C: can enter multiple scores if this is defined.
+?C:.
+?H:#$d_scorfl SCOREFULL /**/
+?H:.
+?LINT:set d_scorfl
+: see how they want the scoreboard kept
+case "$d_scorfl" in
+"$define") dflt=y ;;
+*) dflt=n ;;
+esac
+case "$nametype" in
+other) val="$undef" ;;
+*)
+ $cat <<'EOM'
+
+The scoreboard can be kept with one score per login name, or one score per full
+name. If users can change their full name, or if there is more than one person
+on your system with the same full name, you should keep the score by login name
+(the full name is still printed).
+
+EOM
+ rp='Do you want the scoreboard kept by full name?'
+ . ./myread
+ case "$ans" in
+ y*) val="$define" ;;
+ *) val="$undef" ;;
+ esac
+ ;;
+esac
+set d_scorfl
+eval $setvar
+
diff --git a/mcon/U/d_select.U b/mcon/U/d_select.U
new file mode 100644
index 0000000..83216a7
--- /dev/null
+++ b/mcon/U/d_select.U
@@ -0,0 +1,61 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_select.U,v $
+?RCS: Revision 3.0 1993/08/18 12:07:02 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_select: Trylink cat i_unistd i_systypes i_sysselct i_winsock2
+?MAKE: -pick add $@ %<
+?S:d_select:
+?S: This variable conditionally defines HAS_SELECT if select() is
+?S: available to select active file descriptors. A <sys/time.h>
+?S: inclusion may be necessary for the timeout field.
+?S:.
+?C:HAS_SELECT:
+?C: This symbol, if defined, indicates that the select routine is
+?C: available to select active file descriptors. If the timeout field
+?C: is used, <sys/time.h> may need to be included.
+?C:.
+?H:#$d_select HAS_SELECT /**/
+?H:.
+?LINT:set d_select
+: see if select exists
+$cat >try.c <<EOC
+#$i_unistd I_UNISTD
+#$i_systypes I_SYS_TYPES
+#$i_sysselct I_SYS_SELECT
+#$i_winsock2 I_WINSOCK2
+?X: This is still required on some systems
+#ifdef I_SYS_TYPES
+#include <sys/types.h>
+#endif
+#ifdef I_UNISTD
+#include <unistd.h>
+#endif
+#ifdef I_SYS_SELECT
+#include <sys/select.h>
+#endif
+#ifdef I_WINSOCK2
+#include <Winsock2.h>
+#endif
+int main(void)
+{
+ static int ret, n;
+ static fd_set r, w, x;
+ static struct timeval timeout;
+ ret |= select(n, &r, &w, &x, &timeout);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=select
+set d_select '-lWs2_32'
+eval $trylink
+
diff --git a/mcon/U/d_sem.U b/mcon/U/d_sem.U
new file mode 100644
index 0000000..d4c59aa
--- /dev/null
+++ b/mcon/U/d_sem.U
@@ -0,0 +1,62 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_sem.U,v $
+?RCS: Revision 3.0 1993/08/18 12:07:03 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_sem: test d_semctl d_semget d_semop Setvar Findhdr osname
+?MAKE: -pick add $@ %<
+?S:d_sem:
+?S: This variable conditionally defines the HAS_SEM symbol, which
+?S: indicates that the entire sem*(2) library is present.
+?S:.
+?C:HAS_SEM:
+?C: This symbol, if defined, indicates that the entire sem*(2) library is
+?C: supported.
+?C:.
+?H:#$d_sem HAS_SEM /**/
+?H:.
+?T:h_sem
+?LINT:set d_sem
+: see how much of the 'sem*(2)' library is present.
+h_sem=true
+echo " "
+case "$d_semctl$d_semget$d_semop" in
+*"$undef"*) h_sem=false;;
+esac
+case "$osname" in
+freebsd)
+ case "`ipcs 2>&1`" in
+ "SVID messages"*"not configured"*)
+ echo "Your $osname does not have the sem*(2) configured." >&4
+ h_sem=false
+ val="$undef"
+ set semctl d_semctl
+ eval $setvar
+ set semget d_semget
+ eval $setvar
+ set semop d_semop
+ eval $setvar
+ ;;
+ esac
+ ;;
+esac
+: we could also check for sys/ipc.h ...
+if $h_sem && $test `./findhdr sys/sem.h`; then
+ echo "You have the full sem*(2) library." >&4
+ val="$define"
+else
+ echo "You don't have the full sem*(2) library." >&4
+ val="$undef"
+fi
+set d_sem
+eval $setvar
+
diff --git a/mcon/U/d_semctl.U b/mcon/U/d_semctl.U
new file mode 100644
index 0000000..13b27f7
--- /dev/null
+++ b/mcon/U/d_semctl.U
@@ -0,0 +1,52 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_semctl.U,v $
+?RCS: Revision 3.0 1993/08/18 12:07:04 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_semctl: Trylink cat
+?MAKE: -pick add $@ %<
+?S:d_semctl:
+?S: This variable conditionally defines the HAS_SEMCTL symbol, which
+?S: indicates to the C program that the semctl() routine is available.
+?S:.
+?C:HAS_SEMCTL:
+?C: This symbol, if defined, indicates that the semctl() routine is
+?C: available to perform semaphore control operations.
+?C:.
+?H:#$d_semctl HAS_SEMCTL /**/
+?H:.
+?LINT:set d_semctl
+: see if semctl exists
+$cat >try.c <<EOC
+#include <sys/sem.h>
+int main(void)
+{
+ static int ret, id, num;
+ static union semun {
+ int val;
+ struct semid_ds *buf;
+ unsigned short *array;
+ } arg;
+ ret |= semctl(id, num, GETVAL, &arg);
+ ret |= semctl(id, num, SETVAL, &arg);
+ ret |= semctl(id, num, GETPID, &arg);
+ ret |= semctl(id, num, GETNCNT, &arg);
+ ret |= semctl(id, num, GETZCNT, &arg);
+ ret |= semctl(id, num, GETALL, &arg);
+ ret |= semctl(id, num, SETALL, &arg);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=semctl
+set d_semctl
+eval $trylink
+
diff --git a/mcon/U/d_semget.U b/mcon/U/d_semget.U
new file mode 100644
index 0000000..bf93fe3
--- /dev/null
+++ b/mcon/U/d_semget.U
@@ -0,0 +1,46 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_semget.U,v $
+?RCS: Revision 3.0 1993/08/18 12:07:05 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_semget: Trylink cat
+?MAKE: -pick add $@ %<
+?S:d_semget:
+?S: This variable conditionally defines the HAS_SEMGET symbol, which
+?S: indicates to the C program that the semget() routine is available.
+?S:.
+?C:HAS_SEMGET:
+?C: This symbol, if defined, indicates that the semget() routine is
+?C: available to get a set of semaphores.
+?C:.
+?H:#$d_semget HAS_SEMGET /**/
+?H:.
+?LINT:set d_semget
+: see if semget exists
+$cat >try.c <<EOC
+#include <sys/ipc.h>
+#include <sys/sem.h>
+int main(void)
+{
+ static int ret, n, flags;
+ static key_t key;
+ key = IPC_PRIVATE;
+ flags |= IPC_CREAT;
+ flags |= IPC_EXCL;
+ ret |= semget(key, n, flags);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=semget
+set d_semget
+eval $trylink
+
diff --git a/mcon/U/d_semop.U b/mcon/U/d_semop.U
new file mode 100644
index 0000000..968bebd
--- /dev/null
+++ b/mcon/U/d_semop.U
@@ -0,0 +1,84 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_semop.U,v $
+?RCS: Revision 3.0 1993/08/18 12:07:05 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_semop d_semtimedop: Trylink cat
+?MAKE: -pick add $@ %<
+?S:d_semop:
+?S: This variable conditionally defines the HAS_SEMOP symbol, which
+?S: indicates to the C program that the semop() routine is available.
+?S:.
+?S:d_semtimedop:
+?S: This variable conditionally defines the HAS_SEMTIMEDOP symbol, which
+?S: indicates to the C program that the semtimedop() routine is available.
+?S:.
+?C:HAS_SEMOP:
+?C: This symbol, if defined, indicates that the semop() routine is
+?C: available to execute semaphore operations.
+?C:.
+?C:HAS_SEMTIMEDOP:
+?C: This symbol, if defined, indicates that the semtimedop() routine is
+?C: available to execute semaphore operations with a timeout.
+?C:.
+?H:#$d_semop HAS_SEMOP /**/
+?H:#$d_semtimedop HAS_SEMTIMEDOP /**/
+?H:.
+?LINT:set d_semop d_semtimedop
+: see if semop exists
+$cat >try.c <<EOC
+#include <sys/ipc.h>
+#include <sys/sem.h>
+int main(void)
+{
+ static int ret, id;
+ static size_t n;
+ static struct sembuf buf;
+
+ buf.sem_num |= 1;
+ buf.sem_op |= 1;
+ buf.sem_flg |= SEM_UNDO;
+ buf.sem_flg |= IPC_NOWAIT;
+ ret |= semop(id, &buf, n);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=semop
+set d_semop
+eval $trylink
+
+@if d_semtimedop || HAS_SEMTIMEDOP
+: see if semtimedop exists
+$cat >try.c <<EOC
+#include <sys/types.h>
+#include <sys/ipc.h>
+#include <sys/sem.h>
+int main(void)
+{
+ static int ret, id;
+ static size_t n;
+ static struct sembuf buf;
+
+
+ buf.sem_num |= 1;
+ buf.sem_op |= 1;
+ buf.sem_flg |= SEM_UNDO;
+ buf.sem_flg |= IPC_NOWAIT;
+ ret |= semtimedop(id, &buf, n, (struct timespec *) 0);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=semtimedop
+set d_semtimedop
+eval $trylink
+
+@end
diff --git a/mcon/U/d_sendfile.U b/mcon/U/d_sendfile.U
new file mode 100644
index 0000000..3bac728
--- /dev/null
+++ b/mcon/U/d_sendfile.U
@@ -0,0 +1,41 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 2006, Christian Biere
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:d_sendfile: Trylink cat
+?MAKE: -pick add $@ %<
+?S:d_sendfile:
+?S: This variable conditionally defines the HAS_SENDFILE symbol, which
+?S: indicates to the C program that the sendfile() routine is available.
+?S:.
+?C:HAS_SENDFILE:
+?C: This symbol, if defined, indicates that the sendfile routine is
+?C: available.
+?C:.
+?H:#$d_sendfile HAS_SENDFILE /**/
+?H:.
+?LINT:set d_sendfile
+: see if sendfile exists
+$cat >try.c <<EOC
+#include <sys/types.h>
+#include <sys/sendfile.h>
+int main(void)
+{
+ static ssize_t ret;
+ static int out_fd, in_fd;
+ static off_t offset;
+ static size_t n;
+ ret |= sendfile(out_fd, in_fd, &offset, n);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=sendfile
+set d_sendfile '-lsendfile'
+eval $trylink
+
diff --git a/mcon/U/d_sendmsg.U b/mcon/U/d_sendmsg.U
new file mode 100644
index 0000000..ef668c9
--- /dev/null
+++ b/mcon/U/d_sendmsg.U
@@ -0,0 +1,70 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 2006, Christian Biere
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:d_sendmsg: Trylink cat i_systypes i_sysselct i_syssock \
+ i_winsock2 i_mswsock d_windows
+?MAKE: -pick add $@ %<
+?S:d_sendmsg:
+?S: This variable conditionally defines the HAS_SENDMSG symbol,
+?S: which indicates to the C program that the sendmsg() function is
+?S: available.
+?S:.
+?C:HAS_SENDMSG:
+?C: This symbol, if defined, indicates that the sendmsg() function
+?C: is available.
+?C:.
+?H:#$d_sendmsg HAS_SENDMSG /**/
+?H:.
+?LINT:set d_sendmsg
+: check for sendmsg function
+$cat >try.c <<EOC
+#$i_systypes I_SYS_TYPES
+#$i_sysselct I_SYS_SELECT
+#$i_syssock I_SYS_SOCKET
+#$i_winsock2 I_WINSOCK2
+#$i_mswsock I_MSWSOCK
+#$d_windows WINDOWS_SYSTEM
+#ifdef WINDOWS_SYSTEM
+#define WINVER 0x0501
+#endif
+#ifdef I_SYS_TYPES
+#include <sys/types.h>
+#endif
+#ifdef I_SYS_SOCKET
+#include <sys/socket.h>
+#endif
+#ifdef I_WINSOCK2
+#include <Winsock2.h>
+#endif
+#ifdef I_MSWSOCK
+#include <Mswsock.h>
+#endif
+int main(void)
+{
+ static struct msghdr msg;
+ int ret, fd, flags;
+
+ fd = 1;
+ flags = 1;
+ msg.msg_name = (void *) 0;
+ msg.msg_namelen |= 1;
+ msg.msg_iov = (void *) 0;
+ msg.msg_iovlen |= 1;
+ /* msg.msg_flags is intentionally excluded, see other unit */
+ msg.msg_control = (void *) 0;
+ msg.msg_controllen |= 1;
+ ret = sendmsg(fd, &msg, flags);
+ return ret ? 0 : 1;
+}
+EOC
+cyn='sendmsg'
+set d_sendmsg
+eval $trylink
+
diff --git a/mcon/U/d_setegid.U b/mcon/U/d_setegid.U
new file mode 100644
index 0000000..b05ed5e
--- /dev/null
+++ b/mcon/U/d_setegid.U
@@ -0,0 +1,47 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_setegid.U,v $
+?RCS: Revision 3.0 1993/08/18 12:07:07 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_setegid: Trylink cat i_unistd
+?MAKE: -pick add $@ %<
+?S:d_setegid:
+?S: This variable conditionally defines the HAS_SETEGID symbol, which
+?S: indicates to the C program that the setegid() routine is available
+?S: to change the effective gid of the current program.
+?S:.
+?C:HAS_SETEGID (SETEGID):
+?C: This symbol, if defined, indicates that the setegid routine is available
+?C: to change the effective gid of the current program.
+?C:.
+?H:#$d_setegid HAS_SETEGID /**/
+?H:.
+?LINT:set d_setegid
+: see if setegid exists
+$cat >try.c <<EOC
+#include <sys/types.h>
+#$i_unistd I_UNISTD
+#ifdef I_UNISTD
+#include <unistd.h>
+#endif
+int main(void)
+{
+ static int ret;
+ static gid_t gid;
+ ret |= setegid(gid);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=setegid
+set d_setegid
+eval $trylink
+
diff --git a/mcon/U/d_setenv.U b/mcon/U/d_setenv.U
new file mode 100644
index 0000000..9fcfd52
--- /dev/null
+++ b/mcon/U/d_setenv.U
@@ -0,0 +1,38 @@
+?RCS:
+?RCS: Copyright (c) 2015 Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:d_setenv: Trylink cat i_stdlib
+?MAKE: -pick add $@ %<
+?S:d_setenv:
+?S: This variable conditionally defines the HAS_SETENV
+?S: symbol, which indicates to the C program that setenv()
+?S: is available to change or add an environment variable.
+?S:.
+?C:HAS_SETENV:
+?C: This symbol is defined when setenv() is available to change or
+?C: add an environment variable.
+?C:.
+?H:#$d_setenv HAS_SETENV
+?H:.
+?LINT: set d_setenv
+: do we have setenv?
+$cat >try.c <<EOC
+#$i_stdlib I_STDLIB
+#ifdef I_STDLIB
+#include <stdlib.h>
+#endif
+int main(void)
+{
+ return setenv("foo", "bar", 1);
+}
+EOC
+cyn=setenv
+set d_setenv
+eval $trylink
+
diff --git a/mcon/U/d_seteuid.U b/mcon/U/d_seteuid.U
new file mode 100644
index 0000000..2a86744
--- /dev/null
+++ b/mcon/U/d_seteuid.U
@@ -0,0 +1,47 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_seteuid.U,v $
+?RCS: Revision 3.0 1993/08/18 12:07:08 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_seteuid: Trylink cat i_unistd
+?MAKE: -pick add $@ %<
+?S:d_seteuid:
+?S: This variable conditionally defines the HAS_SETEUID symbol, which
+?S: indicates to the C program that the seteuid() routine is available
+?S: to change the effective uid of the current program.
+?S:.
+?C:HAS_SETEUID (SETEUID):
+?C: This symbol, if defined, indicates that the seteuid routine is available
+?C: to change the effective uid of the current program.
+?C:.
+?H:#$d_seteuid HAS_SETEUID /**/
+?H:.
+?LINT:set d_seteuid
+: see if seteuid exists
+$cat >try.c <<EOC
+#include <sys/types.h>
+#$i_unistd I_UNISTD
+#ifdef I_UNISTD
+#include <unistd.h>
+#endif
+int main(void)
+{
+ static int ret;
+ static uid_t uid;
+ ret |= seteuid(uid);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=seteuid
+set d_seteuid
+eval $trylink
+
diff --git a/mcon/U/d_setgrps.U b/mcon/U/d_setgrps.U
new file mode 100644
index 0000000..bbbbef1
--- /dev/null
+++ b/mcon/U/d_setgrps.U
@@ -0,0 +1,48 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_setgrps.U,v $
+?RCS: Revision 3.0 1993/08/18 12:06:08 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_setgrps: Trylink cat i_unistd
+?MAKE: -pick add $@ %<
+?S:d_setgrps:
+?S: This variable conditionally defines the HAS_SETGROUPS symbol, which
+?S: indicates to the C program that the setgroups() routine is available
+?S: to set the list of process groups.
+?S:.
+?C:HAS_SETGROUPS:
+?C: This symbol, if defined, indicates that the setgroups() routine is
+?C: available to set the list of process groups. If unavailable, multiple
+?C: groups are probably not supported.
+?C:.
+?H:#$d_setgrps HAS_SETGROUPS /**/
+?H:.
+?LINT:set d_setgrps
+: see if setgroups exists
+$cat >try.c <<EOC
+#include <sys/types.h>
+#$i_unistd I_UNISTD
+#ifdef I_UNISTD
+#include <unistd.h>
+#endif
+int main(void)
+{
+ static int ret, n;
+ static gid_t gids;
+ ret |= setgroups(n, &gids);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=setgroups
+set d_setgrps
+eval $trylink
+
diff --git a/mcon/U/d_setlnbuf.U b/mcon/U/d_setlnbuf.U
new file mode 100644
index 0000000..f91fd5b
--- /dev/null
+++ b/mcon/U/d_setlnbuf.U
@@ -0,0 +1,45 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu>
+?RCS:
+?RCS: $Log: d_setlnbuf.U,v $
+?RCS: Revision 3.0.1.1 1994/08/29 16:11:57 ram
+?RCS: patch32: created by ADO
+?RCS:
+?MAKE:d_setlinebuf: Trylink cat
+?MAKE: -pick add $@ %<
+?S:d_setlinebuf:
+?S: This variable conditionally defines the HAS_SETLINEBUF symbol, which
+?S: indicates to the C program that the setlinebuf() routine is available
+?S: to change stderr or stdout from block-buffered or unbuffered to a
+?S: line-buffered mode.
+?S:.
+?C:HAS_SETLINEBUF :
+?C: This symbol, if defined, indicates that the setlinebuf routine is
+?C: available to change stderr or stdout from block-buffered or unbuffered
+?C: to a line-buffered mode.
+?C:.
+?H:#$d_setlinebuf HAS_SETLINEBUF /**/
+?H:.
+?LINT:set d_setlinebuf
+: see if setlinebuf exists
+$cat >try.c <<EOC
+#include <stdio.h>
+int main(void)
+{
+ setlinebuf(stdout);
+ return 0;
+}
+EOC
+cyn=setlinebuf
+set d_setlinebuf
+eval $trylink
+
diff --git a/mcon/U/d_setlocale.U b/mcon/U/d_setlocale.U
new file mode 100644
index 0000000..1533c12
--- /dev/null
+++ b/mcon/U/d_setlocale.U
@@ -0,0 +1,47 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu>
+?RCS:
+?RCS: $Log: d_setlocale.U,v $
+?RCS: Revision 3.0.1.1 1994/06/20 06:57:51 ram
+?RCS: patch30: created
+?RCS:
+?MAKE:d_setlocale: Trylink cat i_locale
+?MAKE: -pick add $@ %<
+?S:d_setlocale:
+?S: This variable conditionally defines HAS_SETLOCALE if setlocale() is
+?S: available to handle locale-specific ctype implementations.
+?S:.
+?C:HAS_SETLOCALE:
+?C: This symbol, if defined, indicates that the setlocale routine is
+?C: available to handle locale-specific ctype implementations.
+?C:.
+?H:#$d_setlocale HAS_SETLOCALE /**/
+?H:.
+?LINT:set d_setlocale
+: see if setlocale exists
+$cat >try.c <<EOC
+#$i_locale I_LOCALE
+#ifdef I_LOCALE
+#include <locale.h>
+#endif
+int main(void)
+{
+ static int category;
+ static char ret;
+ ret |= *setlocale(category, "locale");
+ return ret ? 0 : 1;
+}
+EOC
+cyn=setlocale
+set d_setlocale
+eval $trylink
+
diff --git a/mcon/U/d_setpgid.U b/mcon/U/d_setpgid.U
new file mode 100644
index 0000000..26994ce
--- /dev/null
+++ b/mcon/U/d_setpgid.U
@@ -0,0 +1,52 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_setpgid.U,v $
+?RCS: Revision 3.0.1.2 1997/02/28 15:41:49 ram
+?RCS: patch61: reworded symbol comments
+?RCS:
+?RCS: Revision 3.0.1.1 1994/01/24 14:06:40 ram
+?RCS: patch16: created
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:05:56 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_setpgid: Trylink cat i_unistd
+?MAKE: -pick add $@ %<
+?S:d_setpgid:
+?S: This variable conditionally defines the HAS_SETPGID symbol if the
+?S: setpgid(pid, gpid) function is available to set process group ID.
+?S:.
+?C:HAS_SETPGID:
+?C: This symbol, if defined, indicates that the setpgid(pid, gpid)
+?C: routine is available to set process group ID.
+?C:.
+?H:#$d_setpgid HAS_SETPGID /**/
+?H:.
+?LINT:set d_setpgid
+: see if setpgid exists
+$cat >try.c <<EOC
+#include <sys/types.h>
+#$i_unistd I_UNISTD
+#ifdef I_UNISTD
+#include <unistd.h>
+#endif
+int main(void)
+{
+ static pid_t pid, pgid;
+ static int ret;
+ ret |= setpgid(pid, pgid);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=setpgid
+set d_setpgid
+eval $trylink
+
diff --git a/mcon/U/d_setpgrp.U b/mcon/U/d_setpgrp.U
new file mode 100644
index 0000000..8b5e4e1
--- /dev/null
+++ b/mcon/U/d_setpgrp.U
@@ -0,0 +1,96 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_setpgrp.U,v $
+?RCS: Revision 3.0.1.3 1997/02/28 15:44:16 ram
+?RCS: patch61: obsoleted USE_BSDGRP in favor of USE_BSD_SETPGRP
+?RCS: patch61: another unit now also defines a USE_BSD_GETPGRP
+?RCS: patch61: fallback for test program failure improved
+?RCS:
+?RCS: Revision 3.0.1.2 1995/07/25 13:59:30 ram
+?RCS: patch56: re-arranged compile line to include ldflags before objects
+?RCS:
+?RCS: Revision 3.0.1.1 1994/10/29 16:15:37 ram
+?RCS: patch36: added 'ldflags' to the test compile line (ADO)
+?RCS: patch36: call ./usg explicitly instead of relying on PATH
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:07:09 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_setpgrp d_bsdsetpgrp: Trylink Setvar cat i_unistd
+?MAKE: -pick add $@ %<
+?S:d_setpgrp:
+?S: This variable conditionally defines HAS_SETPGRP if setpgrp() is
+?S: available to set the current process group.
+?S:.
+?S:d_bsdsetpgrp (d_bsdpgrp):
+?S: This variable conditionally defines USE_BSD_SETPGRP if
+?S: setpgrp needs two arguments whereas USG one needs none.
+?S: See also d_setpgid for a POSIX interface.
+?S:.
+?C:HAS_SETPGRP (SETPGRP):
+?C: This symbol, if defined, indicates that the setpgrp routine is
+?C: available to set the current process group.
+?C:.
+?C:USE_BSD_SETPGRP (USE_BSDPGRP BSDPGRP):
+?C: This symbol, if defined, indicates that setpgrp needs two
+?C: arguments whereas USG one needs none. See also HAS_SETPGID
+?C: for a POSIX interface.
+?C:.
+?H:#$d_setpgrp HAS_SETPGRP /**/
+?H:#$d_bsdsetpgrp USE_BSD_SETPGRP /**/
+?H:.
+?LINT:set d_setpgrp d_bsdsetpgrp
+: see if setpgrp exists
+$cat >try.c <<EOC
+#include <sys/types.h>
+#$i_unistd I_UNISTD
+#ifdef I_UNISTD
+#include <unistd.h>
+#endif
+int main(void)
+{
+ static pid_t ret, pid, pgrp;
+ ret |= setpgrp(pid, pgrp);
+ return ret ? 0 : 1;
+}
+EOC
+cyn="whether you have the BSD flavour of setpgrp()"
+set d_bsdsetpgrp
+eval $trylink
+
+case "$d_bsdsetpgrp" in
+$define)
+ val="$define"
+ set d_setpgrp
+ eval $setvar
+ ;;
+*)
+ $cat >try.c <<EOC
+#include <sys/types.h>
+#$i_unistd I_UNISTD
+#ifdef I_UNISTD
+#include <unistd.h>
+#endif
+int main(void)
+{
+ static pid_t ret;
+ ret |= setpgrp();
+ if (ret)
+ return 1;
+ return 0;
+}
+EOC
+ cyn="whether you have the USG flavour of setpgrp() then"
+ set d_setpgrp
+ eval $trylink
+ ;;
+esac
+
diff --git a/mcon/U/d_setpgrp2.U b/mcon/U/d_setpgrp2.U
new file mode 100644
index 0000000..25647a3
--- /dev/null
+++ b/mcon/U/d_setpgrp2.U
@@ -0,0 +1,47 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_setpgrp2.U,v $
+?RCS: Revision 3.0 1993/08/18 12:07:10 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_setpgrp2: Trylink cat i_unistd
+?MAKE: -pick add $@ %<
+?S:d_setpgrp2:
+?S: This variable conditionally defines the HAS_SETPGRP2 symbol, which
+?S: indicates to the C program that the setpgrp2() (as in DG/UX) routine
+?S: is available to set the current process group.
+?S:.
+?C:HAS_SETPGRP2 (SETPGRP2):
+?C: This symbol, if defined, indicates that the setpgrp2() (as in DG/UX)
+?C: routine is available to set the current process group.
+?C:.
+?H:#$d_setpgrp2 HAS_SETPGRP2 /**/
+?H:.
+?LINT:set d_setpgrp2
+: see if setpgrp2 exists
+$cat >try.c <<EOC
+#include <sys/types.h>
+#$i_unistd I_UNISTD
+#ifdef I_UNISTD
+#include <unistd.h>
+#endif
+int main(void)
+{
+ static pid_t pid;
+ static int ret;
+ ret |= setpgrp2(pid, pid);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=setpgrp2
+set d_setpgrp2
+eval $trylink
+
diff --git a/mcon/U/d_setprior.U b/mcon/U/d_setprior.U
new file mode 100644
index 0000000..c03ebdc
--- /dev/null
+++ b/mcon/U/d_setprior.U
@@ -0,0 +1,47 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_setprior.U,v $
+?RCS: Revision 3.0 1993/08/18 12:07:11 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_setprior: Trylink cat i_sysresrc
+?MAKE: -pick add $@ %<
+?S:d_setprior:
+?S: This variable conditionally defines HAS_SETPRIORITY if setpriority()
+?S: is available to set a process's priority.
+?S:.
+?C:HAS_SETPRIORITY (SETPRIORITY):
+?C: This symbol, if defined, indicates that the setpriority routine is
+?C: available to set a process's priority.
+?C:.
+?H:#$d_setprior HAS_SETPRIORITY /**/
+?H:.
+?LINT:set d_setprior
+: see if setpriority exists
+$cat >try.c <<EOC
+#$i_sysresrc I_SYS_RESOURCE
+#ifdef I_SYS_RESOURCE
+#include <sys/resource.h>
+#endif
+int main(void)
+{
+ static int ret, prio;
+ static id_t id;
+ ret |= setpriority(PRIO_PROCESS, id, prio);
+ ret |= setpriority(PRIO_PGRP, id, prio);
+ ret |= setpriority(PRIO_USER, id, prio);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=setpriority
+set d_setprior
+eval $trylink
+
diff --git a/mcon/U/d_setproctitle.U b/mcon/U/d_setproctitle.U
new file mode 100644
index 0000000..15a880e
--- /dev/null
+++ b/mcon/U/d_setproctitle.U
@@ -0,0 +1,45 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 2006, Christian Biere
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:d_setproctitle: Trylink cat i_stdlib i_unistd
+?MAKE: -pick add $@ %<
+?S:d_setproctitle:
+?S: This variable conditionally defines the HAS_SETPROCTITLE
+?S: symbol, which indicates to the C program that setproctitle()
+?S: is available.
+?S:.
+?C:HAS_SETPROCTITLE:
+?C: This symbol is defined when setproctitle() can be used and takes a
+?C: format string.
+?C:.
+?H:#$d_setproctitle HAS_SETPROCTITLE
+?H:.
+?LINT: set d_setproctitle
+: can we use setproctitle?
+$cat >try.c <<EOC
+#include <sys/types.h>
+#$i_stdlib I_STDLIB
+#ifdef I_STDLIB
+#include <stdlib.h>
+#endif
+#$i_unistd I_UNISTD
+#ifdef I_UNISTD
+#include <unistd.h>
+#endif
+int main(void)
+{
+ setproctitle("%s %d %s %c", "blah", 1, "x", 'X');
+ return 0;
+}
+EOC
+cyn=setproctitle
+set d_setproctitle
+eval $trylink
+
diff --git a/mcon/U/d_setprogname.U b/mcon/U/d_setprogname.U
new file mode 100644
index 0000000..0e53fdb
--- /dev/null
+++ b/mcon/U/d_setprogname.U
@@ -0,0 +1,40 @@
+?RCS:
+?RCS: Copyright (c) 2015 Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:d_setprogname: Trylink cat i_stdlib
+?MAKE: -pick add $@ %<
+?S:d_setprogname:
+?S: This variable conditionally defines the HAS_SETPROGNAME
+?S: symbol, which indicates to the C program that setprogname()
+?S: is available to set the program name.
+?S:.
+?C:HAS_SETPROGNAME:
+?C: This symbol is defined when setprogname() is there to set the
+?C: program name.
+?C:.
+?H:#$d_setprogname HAS_SETPROGNAME
+?H:.
+?LINT: set d_setprogname
+: can we use setprogname?
+$cat >try.c <<EOC
+#include <sys/types.h>
+#$i_stdlib I_STDLIB
+#ifdef I_STDLIB
+#include <stdlib.h>
+#endif
+int main(void)
+{
+ setprogname("test");
+ return 0;
+}
+EOC
+cyn=setprogname
+set d_setprogname
+eval $trylink
+
diff --git a/mcon/U/d_setregid.U b/mcon/U/d_setregid.U
new file mode 100644
index 0000000..906e731
--- /dev/null
+++ b/mcon/U/d_setregid.U
@@ -0,0 +1,78 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_setregid.U,v $
+?RCS: Revision 3.0 1993/08/18 12:07:12 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_setregid d_setresgid: Trylink cat i_unistd
+?MAKE: -pick add $@ %<
+?S:d_setregid:
+?S: This variable conditionally defines HAS_SETREGID if setregid() is
+?S: available to change the real and effective gid of the current
+?S: process.
+?S:.
+?S:d_setresgid:
+?S: This variable conditionally defines HAS_SETRESGID if setresgid() is
+?S: available to change the real, effective and saved gid of the current
+?S: process.
+?S:.
+?C:HAS_SETREGID (SETREGID):
+?C: This symbol, if defined, indicates that the setregid routine is
+?C: available to change the real and effective gid of the current
+?C: process.
+?C:.
+?C:HAS_SETRESGID (SETRESGID):
+?C: This symbol, if defined, indicates that the setresgid routine is
+?C: available to change the real, effective and saved gid of the current
+?C: process.
+?C:.
+?H:#$d_setregid HAS_SETREGID /**/
+?H:#$d_setresgid HAS_SETRESGID /**/
+?H:.
+?LINT: set d_setregid d_setresgid
+: see if setregid exists
+$cat >try.c <<EOC
+#include <sys/types.h>
+#$i_unistd I_UNISTD
+#ifdef I_UNISTD
+#include <unistd.h>
+#endif
+int main(void)
+{
+ static int ret;
+ static gid_t rgid, egid;
+ ret |= setregid(rgid, egid);
+ if (ret)
+ return 1;
+ return 0;
+}
+EOC
+cyn=setregid
+set d_setregid
+eval $trylink
+
+$cat >try.c <<EOC
+#$i_unistd I_UNISTD
+#ifdef I_UNISTD
+#include <unistd.h>
+#endif
+int main(void)
+{
+ static int ret;
+ static gid_t rgid, egid, sgid;
+ ret |= setresgid(rgid, egid, sgid);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=setresgid
+set d_setresgid
+eval $trylink
+
diff --git a/mcon/U/d_setreuid.U b/mcon/U/d_setreuid.U
new file mode 100644
index 0000000..b25b773
--- /dev/null
+++ b/mcon/U/d_setreuid.U
@@ -0,0 +1,78 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_setreuid.U,v $
+?RCS: Revision 3.0 1993/08/18 12:07:13 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_setreuid d_setresuid: Trylink cat i_unistd
+?MAKE: -pick add $@ %<
+?S:d_setreuid:
+?S: This variable conditionally defines HAS_SETREUID if setreuid() is
+?S: available to change the real and effective uid of the current
+?S: process.
+?S:.
+?S:d_setresuid:
+?S: This variable conditionally defines HAS_SETREUID if setresuid() is
+?S: available to change the real, effective and saved uid of the current
+?S: process.
+?S:.
+?C:HAS_SETREUID (SETREUID):
+?C: This symbol, if defined, indicates that the setreuid routine is
+?C: available to change the real and effective uid of the current
+?C: process.
+?C:.
+?C:HAS_SETRESUID (SETRESUID):
+?C: This symbol, if defined, indicates that the setresuid routine is
+?C: available to change the real, effective and saved uid of the current
+?C: process.
+?C:.
+?H:#$d_setreuid HAS_SETREUID /**/
+?H:#$d_setresuid HAS_SETRESUID /**/
+?H:.
+?LINT:set d_setreuid d_setresuid
+: see if setreuid exists
+$cat >try.c <<EOC
+#include <sys/types.h>
+#$i_unistd I_UNISTD
+#ifdef I_UNISTD
+#include <unistd.h>
+#endif
+int
+main(void)
+{
+ static uid_t ruid, euid;
+ static int ret;
+ ret |= setreuid(ruid, euid);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=setreuid
+set d_setreuid
+eval $trylink
+
+: see if setresuid exists
+$cat >try.c <<EOC
+#$i_unistd I_UNISTD
+#ifdef I_UNISTD
+#include <unistd.h>
+#endif
+int main(void)
+{
+ static uid_t ruid, euid, suid;
+ static int ret;
+ ret |= setresuid(ruid, euid, suid);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=setresuid
+set d_setresuid
+eval $trylink
+
diff --git a/mcon/U/d_setrgid.U b/mcon/U/d_setrgid.U
new file mode 100644
index 0000000..12c1164
--- /dev/null
+++ b/mcon/U/d_setrgid.U
@@ -0,0 +1,47 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_setrgid.U,v $
+?RCS: Revision 3.0 1993/08/18 12:07:14 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_setrgid: Trylink cat i_unistd
+?MAKE: -pick add $@ %<
+?S:d_setrgid:
+?S: This variable conditionally defines the HAS_SETRGID symbol, which
+?S: indicates to the C program that the setrgid() routine is available
+?S: to change the real gid of the current program.
+?S:.
+?C:HAS_SETRGID (SETRGID):
+?C: This symbol, if defined, indicates that the setrgid routine is available
+?C: to change the real gid of the current program.
+?C:.
+?H:#$d_setrgid HAS_SETRGID /**/
+?H:.
+?LINT:set d_setrgid
+: see if setrgid exists
+$cat >try.c <<EOC
+#include <sys/types.h>
+#$i_unistd I_UNISTD
+#ifdef I_UNISTD
+#include <unistd.h>
+#endif
+int main(void)
+{
+ static int ret;
+ static gid_t gid;
+ ret |= setrgid(gid);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=setrgid
+set d_setrgid
+eval $trylink
+
diff --git a/mcon/U/d_setrlimit.U b/mcon/U/d_setrlimit.U
new file mode 100644
index 0000000..3e69573
--- /dev/null
+++ b/mcon/U/d_setrlimit.U
@@ -0,0 +1,47 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 2012 Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_setrlimit.U,v $
+?RCS:
+?MAKE:d_setrlimit: Trylink cat i_systime
+?MAKE: -pick add $@ %<
+?S:d_setrlimit:
+?S: This variable conditionally defines the HAS_SETRLIMIT symbol, which
+?S: indicates to the C program that the setrlimit() routine is available
+?S: to set process resource limits.
+?S:.
+?C:HAS_SETRLIMIT :
+?C: This symbol, if defined, indicates that the setrlimit() routine is
+?C: available to set process resource limits.
+?C:.
+?H:#$d_setrlimit HAS_SETRLIMIT /**/
+?H:.
+?LINT:set d_setrlimit
+: see if setrlimit exists
+$cat >try.c <<EOC
+#$i_systime I_SYS_TIME
+#ifdef I_SYS_TIME
+#include <sys/time.h>
+#endif
+#include <sys/resource.h>
+int main(void)
+{
+ static struct rlimit lim;
+ int ret;
+ lim.rlim_cur = 0;
+ lim.rlim_max = 1;
+ ret |= setrlimit(RLIMIT_CORE, &lim);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=setrlimit
+set d_setrlimit
+eval $trylink
+
diff --git a/mcon/U/d_setruid.U b/mcon/U/d_setruid.U
new file mode 100644
index 0000000..e4c07f6
--- /dev/null
+++ b/mcon/U/d_setruid.U
@@ -0,0 +1,47 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_setruid.U,v $
+?RCS: Revision 3.0 1993/08/18 12:07:15 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_setruid: Trylink cat i_unistd
+?MAKE: -pick add $@ %<
+?S:d_setruid:
+?S: This variable conditionally defines the HAS_SETRUID symbol, which
+?S: indicates to the C program that the setruid() routine is available
+?S: to change the real uid of the current program.
+?S:.
+?C:HAS_SETRUID (SETRUID):
+?C: This symbol, if defined, indicates that the setruid routine is available
+?C: to change the real uid of the current program.
+?C:.
+?H:#$d_setruid HAS_SETRUID /**/
+?H:.
+?LINT:set d_setruid
+: see if setruid exists
+$cat >try.c <<EOC
+#include <sys/types.h>
+#$i_unistd I_UNISTD
+#ifdef I_UNISTD
+#include <unistd.h>
+#endif
+int main(void)
+{
+ static int ret;
+ static uid_t uid;
+ ret |= setruid(uid);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=setruid
+set d_setruid
+eval $trylink
+
diff --git a/mcon/U/d_setsid.U b/mcon/U/d_setsid.U
new file mode 100644
index 0000000..c7ccf16
--- /dev/null
+++ b/mcon/U/d_setsid.U
@@ -0,0 +1,48 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_setsid.U,v $
+?RCS: Revision 3.0.1.1 1994/01/24 14:06:49 ram
+?RCS: patch16: created
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:05:56 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_setsid: Trylink cat i_unistd
+?MAKE: -pick add $@ %<
+?S:d_setsid:
+?S: This variable conditionally defines HAS_SETSID if setsid() is
+?S: available to set the process group ID.
+?S:.
+?C:HAS_SETSID:
+?C: This symbol, if defined, indicates that the setsid routine is
+?C: available to set the process group ID.
+?C:.
+?H:#$d_setsid HAS_SETSID /**/
+?H:.
+?LINT:set d_setsid
+: see if setsid exists
+$cat >try.c <<EOC
+#include <sys/types.h>
+#$i_unistd I_UNISTD
+#ifdef I_UNISTD
+#include <unistd.h>
+#endif
+int main(void)
+{
+ static pid_t ret;
+ ret |= setsid();
+ return ret ? 0 : 1;
+}
+EOC
+cyn=setsid
+set d_setsid
+eval $trylink
+
diff --git a/mcon/U/d_sgndchr.U b/mcon/U/d_sgndchr.U
new file mode 100644
index 0000000..b023f5c
--- /dev/null
+++ b/mcon/U/d_sgndchr.U
@@ -0,0 +1,50 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_sgndchr.U,v $
+?RCS: Revision 3.0.1.2 1997/02/28 15:44:25 ram
+?RCS: patch61: added a ?F: metalint hint
+?RCS:
+?RCS: Revision 3.0.1.1 1995/07/25 14:00:24 ram
+?RCS: patch56: made cc and ccflags optional dependencies
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:07:16 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_sgndchr: Trylink cat
+?MAKE: -pick add $@ %<
+?S:d_sgndchr:
+?S: This variable conditionally defines the SIGNEDCHAR symbol, which
+?S: indicates to the C program that signed characters are available.
+?S:.
+?C:SIGNEDCHAR:
+?C: This symbol, if defined, indicates that characters are a signed type.
+?C: If not defined, things declared as signed characters (and that make
+?C: use of negative values) should probably be declared as shorts instead.
+?C:.
+?H:#$d_sgndchr SIGNEDCHAR /**/
+?H:.
+?LINT:set d_sgndchr
+: check for signed chars
+$cat >try.c <<EOC
+int main(void)
+{
+ switch (1) {
+ case 0:
+ case ((char) -1 < 0):
+ break;
+ }
+ return 0;
+}
+EOC
+cyn="whether your C compiler can do signed chars"
+set d_sgndchr
+eval $trylink
+
diff --git a/mcon/U/d_shm.U b/mcon/U/d_shm.U
new file mode 100644
index 0000000..8a403b4
--- /dev/null
+++ b/mcon/U/d_shm.U
@@ -0,0 +1,45 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_shm.U,v $
+?RCS: Revision 3.0 1993/08/18 12:07:17 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_shm: test d_shmctl d_shmget d_shmat d_shmdt Setvar Findhdr
+?MAKE: -pick add $@ %<
+?S:d_shm:
+?S: This variable conditionally defines the HAS_SHM symbol, which
+?S: indicates that the entire shm*(2) library is present.
+?S:.
+?C:HAS_SHM:
+?C: This symbol, if defined, indicates that the entire shm*(2) library is
+?C: supported.
+?C:.
+?H:#$d_shm HAS_SHM /**/
+?H:.
+?T:h_shm
+?LINT:set d_shm
+: see how much of the 'shm*(2)' library is present.
+h_shm=true
+echo " "
+case "$d_shmctl$d_shmget$d_shmat$d_shmdt" in
+*"$undef"*) h_shm=false;;
+esac
+: we could also check for sys/ipc.h ...
+if $h_shm && $test `./findhdr sys/shm.h`; then
+ echo "You have the full shm*(2) library." >&4
+ val="$define"
+else
+ echo "You don't have the full shm*(2) library." >&4
+ val="$undef"
+fi
+set d_shm
+eval $setvar
+
diff --git a/mcon/U/d_shmat.U b/mcon/U/d_shmat.U
new file mode 100644
index 0000000..bf37e88
--- /dev/null
+++ b/mcon/U/d_shmat.U
@@ -0,0 +1,147 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_shmat.U,v $
+?RCS: Revision 3.0.1.3 1995/07/25 14:04:23 ram
+?RCS: patch56: use findhdr to find <sys/shm.h>, to get the right one (ADO)
+?RCS:
+?RCS: Revision 3.0.1.2 1994/05/13 15:18:56 ram
+?RCS: patch27: added new symbol HAS_SHMAT_PROTOTYPE (ADO)
+?RCS:
+?RCS: Revision 3.0.1.1 1994/05/06 14:54:18 ram
+?RCS: patch23: new Shmat_t symbol to declare return type of shmat()
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:07:18 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_shmat shmattype d_shmatprototype: Trylink Setvar cat
+?MAKE: -pick add $@ %<
+?S:d_shmat:
+?S: This variable conditionally defines the HAS_SHMAT symbol, which
+?S: indicates to the C program that the shmat() routine is available.
+?S:.
+?S:shmattype:
+?S: This symbol contains the type of pointer returned by shmat().
+?S: It can be 'void *' or 'char *'.
+?S:.
+?S:d_shmatprototype:
+?S: This variable conditionally defines the HAS_SHMAT_PROTOTYPE
+?S: symbol, which indicates that sys/shm.h has a prototype for
+?S: shmat.
+?S:.
+?C:HAS_SHMAT:
+?C: This symbol, if defined, indicates that the shmat() routine is
+?C: available to attach a shared memory segment to the process space.
+?C:.
+?C:Shmat_t:
+?C: This symbol holds the return type of the shmat() system call.
+?C: Usually set to 'void *' or 'char *'.
+?C:.
+?C:HAS_SHMAT_PROTOTYPE:
+?C: This symbol, if defined, indicates that the sys/shm.h includes
+?C: a prototype for shmat(). Otherwise, it is up to the program to
+?C: guess one. Shmat_t shmat _((int, Shmat_t, int)) is a good guess,
+?C: but not always right so it should be emitted by the program only
+?C: when HAS_SHMAT_PROTOTYPE is not defined to avoid conflicting defs.
+?C:.
+?H:#$d_shmat HAS_SHMAT /**/
+?H:#define Shmat_t $shmattype /**/
+?H:#$d_shmatprototype HAS_SHMAT_PROTOTYPE /**/
+?H:.
+?LINT:set d_shmat d_shmatprototype
+: see if shmat exists
+$cat >try.c <<EOC
+#include <sys/shm.h>
+int main(void)
+{
+ static int id, flags;
+ static void *addr;
+ (void) shmat(id, addr, flags);
+ return 0;
+}
+EOC
+cyn=shmat
+set d_shmat
+eval $trylink
+
+case "$d_shmat" in
+"$define")
+ $cat >try.c <<EOC
+#include <sys/shm.h>
+extern void shmat(void);
+int main(void) { return 0; }
+EOC
+ cyn="whether <sys/shm.h> contains the shmat() prototype"
+ set val
+ eval $trylink
+ case "$val" in
+ "$define") val="$undef";;
+ *) val="$define";;
+ esac
+ ;;
+*) val="$undef";;
+esac
+
+set d_shmatprototype
+eval $setvar
+
+case "$d_shmat" in
+"$define")
+ echo " "
+ echo "Looking for the correct shmat prototype..." >&4
+ ;;
+esac
+
+case "$d_shmat" in
+"$define")
+ $cat >try.c <<EOC
+#include <sys/shm.h>
+extern void *shmat(int, const void *, int);
+int main(void) { return 0; }
+EOC
+ set val
+ eval $trylink
+ ;;
+esac
+
+case "$d_shmat" in
+"$define")
+ $cat >try.c <<EOC
+#include <sys/shm.h>
+extern void *shmat(int, void *, int);
+int main(void) { return 0; }
+EOC
+ set val
+ eval $trylink
+ case "$val" in
+ "$define") shmattype='void *';;
+ esac
+ ;;
+esac
+
+case "$d_shmat" in
+"$define")
+ $cat >try.c <<EOC
+#include <sys/shm.h>
+extern char *shmat(int, char *, int);
+int main(void) { return 0; }
+EOC
+ set val
+ eval $trylink
+ case "$val" in
+ "$define") shmattype='char *';;
+ esac
+ ;;
+esac
+
+case "$d_shmat" in
+"$define") echo "shmat() returns $shmattype";;
+esac
+
diff --git a/mcon/U/d_shmctl.U b/mcon/U/d_shmctl.U
new file mode 100644
index 0000000..555d4af
--- /dev/null
+++ b/mcon/U/d_shmctl.U
@@ -0,0 +1,44 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_shmctl.U,v $
+?RCS: Revision 3.0 1993/08/18 12:07:18 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_shmctl: Trylink cat
+?MAKE: -pick add $@ %<
+?S:d_shmctl:
+?S: This variable conditionally defines the HAS_SHMCTL symbol, which
+?S: indicates to the C program that the shmctl() routine is available.
+?S:.
+?C:HAS_SHMCTL:
+?C: This symbol, if defined, indicates that the shmctl() routine is
+?C: available to perform shared memory control operations.
+?C:.
+?H:#$d_shmctl HAS_SHMCTL /**/
+?H:.
+?LINT:set d_shmctl
+: see if shmctl exists
+$cat >try.c <<EOC
+#include <sys/shm.h>
+int main(void)
+{
+ static int ret, id;
+ static struct shmid_ds *buf;
+ ret |= shmctl(id, IPC_STAT, buf);
+ ret |= shmctl(id, IPC_SET, buf);
+ ret |= shmctl(id, IPC_RMID, buf);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=shmctl
+set d_shmctl
+eval $trylink
+
diff --git a/mcon/U/d_shmdt.U b/mcon/U/d_shmdt.U
new file mode 100644
index 0000000..6a243b1
--- /dev/null
+++ b/mcon/U/d_shmdt.U
@@ -0,0 +1,42 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_shmdt.U,v $
+?RCS: Revision 3.0 1993/08/18 12:07:19 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_shmdt: Trylink cat
+?MAKE: -pick add $@ %<
+?S:d_shmdt:
+?S: This variable conditionally defines the HAS_SHMDT symbol, which
+?S: indicates to the C program that the shmdt() routine is available.
+?S:.
+?C:HAS_SHMDT:
+?C: This symbol, if defined, indicates that the shmdt() routine is
+?C: available to detach a shared memory segment from the process space.
+?C:.
+?H:#$d_shmdt HAS_SHMDT /**/
+?H:.
+?LINT:set d_shmdt
+: see if shmdt exists
+$cat >try.c <<EOC
+#include <sys/shm.h>
+int main(void)
+{
+ static void *addr;
+ static int ret;
+ ret |= shmdt(addr);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=shmdt
+set d_shmdt
+eval $trylink
+
diff --git a/mcon/U/d_shmget.U b/mcon/U/d_shmget.U
new file mode 100644
index 0000000..4262dbf
--- /dev/null
+++ b/mcon/U/d_shmget.U
@@ -0,0 +1,46 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_shmget.U,v $
+?RCS: Revision 3.0 1993/08/18 12:07:20 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_shmget: Trylink cat
+?MAKE: -pick add $@ %<
+?S:d_shmget:
+?S: This variable conditionally defines the HAS_SHMGET symbol, which
+?S: indicates to the C program that the shmget() routine is available.
+?S:.
+?C:HAS_SHMGET:
+?C: This symbol, if defined, indicates that the shmget() routine is
+?C: available to request a shared memory segment from the kernel.
+?C:.
+?H:#$d_shmget HAS_SHMGET /**/
+?H:.
+?LINT:set d_shmget
+: see if shmget exists
+$cat >try.c <<EOC
+#include <sys/shm.h>
+int main(void)
+{
+ static key_t key = IPC_PRIVATE;
+ static size_t size;
+ static int ret, flags;
+ flags |= IPC_CREAT;
+ flags |= IPC_EXCL;
+ flags |= IPC_NOWAIT;
+ ret |= shmget(key, size, flags);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=shmget
+set d_shmget
+eval $trylink
+
diff --git a/mcon/U/d_sigaction.U b/mcon/U/d_sigaction.U
new file mode 100644
index 0000000..ffd58da
--- /dev/null
+++ b/mcon/U/d_sigaction.U
@@ -0,0 +1,45 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_sigaction.U,v $
+?RCS: Revision 3.0.1.1 1997/02/28 15:44:29 ram
+?RCS: patch61: created
+?RCS:
+?RCS:
+?MAKE:d_sigaction: Trylink cat
+?MAKE: -pick add $@ %<
+?S:d_sigaction:
+?S: This variable conditionally defines the HAS_SIGACTION symbol, which
+?S: indicates that the Vr4 sigaction() routine is available.
+?S:.
+?C:HAS_SIGACTION:
+?C: This symbol, if defined, indicates that Vr4's sigaction() routine
+?C: is available.
+?C:.
+?H:#$d_sigaction HAS_SIGACTION /**/
+?H:.
+?LINT:set d_sigaction
+: see if we have sigaction
+$cat >try.c <<EOC
+#include <stdio.h>
+#include <sys/types.h>
+#include <signal.h>
+int main(void)
+{
+ struct sigaction act, oact;
+ static int ret, sig;
+ ret |= sigaction(sig, &act, &oact);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=sigaction
+set d_sigaction
+eval $trylink
+
diff --git a/mcon/U/d_sigaltstack.U b/mcon/U/d_sigaltstack.U
new file mode 100644
index 0000000..6bfb22d
--- /dev/null
+++ b/mcon/U/d_sigaltstack.U
@@ -0,0 +1,42 @@
+?RCS:
+?RCS: Copyright (c) 2013, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:d_sigaltstack: Trylink cat
+?MAKE: -pick add $@ %<
+?S:d_sigaltstack:
+?S: This variable conditionally defines the HAS_SIGALTSTACK symbol, which
+?S: indicates that the sigaltstack() routine is available to define an
+?S: alternate signal stack.
+?S:.
+?C:HAS_SIGALTSTACK:
+?C: This symbol, if defined, indicates that the sigaltstack() routine
+?C: is available to define an alternate signal stack.
+?C:.
+?H:#$d_sigaltstack HAS_SIGALTSTACK /**/
+?H:.
+?LINT:set d_sigaltstack
+: see if we have sigaltstack
+$cat >try.c <<EOC
+#include <stdio.h>
+#include <signal.h>
+int main(void)
+{
+ stack_t ss;
+ static int ret;
+ ss.ss_sp = NULL;
+ ss.ss_flags |= SS_ONSTACK | SS_DISABLE;
+ ss.ss_size = SIGSTKSZ + MINSIGSTKSZ;
+ ret |= sigaltstack(&ss, NULL);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=sigaltstack
+set d_sigaltstack
+eval $trylink
+
diff --git a/mcon/U/d_sigblock.U b/mcon/U/d_sigblock.U
new file mode 100644
index 0000000..1ab7f3a
--- /dev/null
+++ b/mcon/U/d_sigblock.U
@@ -0,0 +1,41 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_sigblock.U,v $
+?RCS: Revision 3.0 1993/08/18 12:07:21 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_sigblock: Trylink cat
+?MAKE: -pick add $@ %<
+?S:d_sigblock:
+?S: This variable conditionally defines HAS_SIGBLOCK if sigblock() is
+?S: available to block signal reception.
+?S:.
+?C:HAS_SIGBLOCK:
+?C: This symbol, if defined, indicates that the sigblock routine is
+?C: available to block signal reception.
+?C:.
+?H:#$d_sigblock HAS_SIGBLOCK /**/
+?H:.
+?LINT:set d_sigblock
+: see if sigblock exists
+$cat >try.c <<EOC
+#include <signal.h>
+int main(void)
+{
+ static int ret, mask;
+ ret |= sigblock(mask);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=sigblock
+set d_sigblock
+eval $trylink
+
diff --git a/mcon/U/d_sighold.U b/mcon/U/d_sighold.U
new file mode 100644
index 0000000..7fdc2d2
--- /dev/null
+++ b/mcon/U/d_sighold.U
@@ -0,0 +1,41 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_sighold.U,v $
+?RCS: Revision 3.0 1993/08/18 12:07:21 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_sighold: Trylink cat
+?MAKE: -pick add $@ %<
+?S:d_sighold:
+?S: This variable conditionally defines HAS_SIGHOLD if sighold() is
+?S: available to hold signals.
+?S:.
+?C:HAS_SIGHOLD:
+?C: This symbol, if defined, indicates that the sighold routine is
+?C: available to hold signals.
+?C:.
+?H:#$d_sighold HAS_SIGHOLD /**/
+?H:.
+?LINT:set d_sighold
+: see if sighold exists
+$cat >try.c <<EOC
+#include <signal.h>
+int main(void)
+{
+ static int ret, sig;
+ ret |= sighold(sig);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=sighold
+set d_sighold
+eval $trylink
+
diff --git a/mcon/U/d_siglist.U b/mcon/U/d_siglist.U
new file mode 100644
index 0000000..f70f5a7
--- /dev/null
+++ b/mcon/U/d_siglist.U
@@ -0,0 +1,41 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_siglist.U,v $
+?RCS: Revision 3.0 1993/08/18 12:07:22 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_siglist: Trylink cat
+?MAKE: -pick add $@ %<
+?S:d_siglist:
+?S: This variable conditionally defines HAS_SYS_SIGLIST if sys_siglist[] is
+?S: available to translate signal numbers to strings.
+?S:.
+?C:HAS_SYS_SIGLIST (SYS_SIGLIST):
+?C: This symbol, if defined, indicates that the sys_siglist array is
+?C: available to translate signal numbers to strings.
+?C:.
+?H:#$d_siglist HAS_SYS_SIGLIST /**/
+?H:.
+?LINT:set d_siglist
+: see if sys_siglist[] exists
+$cat >try.c <<EOC
+#include <signal.h>
+int main(void)
+{
+ static char c;
+ c |= *sys_siglist[0];
+ return c ? 0 : 1
+}
+EOC
+cyn="whether sys_siglist[] exists"
+set d_siglist
+eval $trylink
+
diff --git a/mcon/U/d_sigprocmask.U b/mcon/U/d_sigprocmask.U
new file mode 100644
index 0000000..9c68b26
--- /dev/null
+++ b/mcon/U/d_sigprocmask.U
@@ -0,0 +1,42 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_sigprocmask.U,v $
+?RCS: Revision 3.0 1993/08/18 12:07:04 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_sigprocmask: Trylink cat
+?MAKE: -pick add $@ %<
+?S:d_sigprocmask:
+?S: This variable conditionally defines the HAS_SIGPROCMASK symbol, which
+?S: indicates to the C program that the sigprocmask() routine is available.
+?S:.
+?C:HAS_SIGPROCMASK:
+?C: This symbol, if defined, indicates that the sigprocmask() routine is
+?C: available to examine and change blocked signals.
+?C:.
+?H:#$d_sigprocmask HAS_SIGPROCMASK /**/
+?H:.
+?LINT:set d_sigprocmask
+: see if sigprocmask exists
+$cat >try.c <<EOC
+#include <signal.h>
+int main(void)
+{
+ static int ret;
+ sigset_t oset;
+ ret |= sigprocmask(SIG_BLOCK, &oset, &oset);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=sigprocmask
+set d_sigprocmask
+eval $trylink
+
diff --git a/mcon/U/d_sigsetjmp.U b/mcon/U/d_sigsetjmp.U
new file mode 100644
index 0000000..99f75e2
--- /dev/null
+++ b/mcon/U/d_sigsetjmp.U
@@ -0,0 +1,104 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1996, Andy Dougherty
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: You may distribute under the terms of either the GNU General Public
+?RCS: License or the Artistic License, as specified in the README file.
+?RCS:
+?RCS: $Log: d_sigsetjmp.U,v $
+?RCS: Revision 3.0.1.1 1997/02/28 15:44:33 ram
+?RCS: patch61: created
+?RCS:
+?MAKE:d_sigsetjmp: Setvar cat +cc +ccflags +ldflags libs rm
+?MAKE: -pick add $@ %<
+?S:d_sigsetjmp:
+?S: This variable conditionally defines the HAS_SIGSETJMP symbol,
+?S: which indicates that the sigsetjmp() routine is available to
+?S: call setjmp() and optionally save the process's signal mask.
+?S:.
+?C:HAS_SIGSETJMP:
+?C: This variable indicates to the C program that the sigsetjmp()
+?C: routine is available to save the calling process's registers
+?C: and stack environment for later use by siglongjmp(), and
+?C: to optionally save the process's signal mask. See
+?C: Sigjmp_buf, Sigsetjmp, and Siglongjmp.
+?C:.
+?C:Sigjmp_buf:
+?C: This is the buffer type to be used with Sigsetjmp and Siglongjmp.
+?C:.
+?C:Sigsetjmp:
+?C: This macro is used in the same way as sigsetjmp(), but will invoke
+?C: traditional setjmp() if sigsetjmp isn't available.
+?C: See HAS_SIGSETJMP.
+?C:.
+?C:Siglongjmp:
+?C: This macro is used in the same way as siglongjmp(), but will invoke
+?C: traditional longjmp() if siglongjmp isn't available.
+?C: See HAS_SIGSETJMP.
+?C:.
+?H:?%<:#$d_sigsetjmp HAS_SIGSETJMP /**/
+?H:?%<:#ifdef HAS_SIGSETJMP
+?H:?%<:#define Sigjmp_buf sigjmp_buf
+?H:?%<:#define Sigsetjmp(buf,save_mask) sigsetjmp((buf),(save_mask))
+?H:?%<:#define Siglongjmp(buf,retval) siglongjmp((buf),(retval))
+?H:?%<:#else
+?H:?%<:#define Sigjmp_buf jmp_buf
+?H:?%<:#define Sigsetjmp(buf,save_mask) setjmp((buf))
+?H:?%<:#define Siglongjmp(buf,retval) longjmp((buf),(retval))
+?H:?%<:#endif
+?H:.
+?W:%<:Sigjmp_buf Sigsetjmp Siglongjmp
+?F:!set
+?LINT:set d_sigsetjmp
+: see if sigsetjmp exists
+echo " "
+case "$d_sigsetjmp" in
+'')
+ $cat >set.c <<'EOP'
+#include <setjmp.h>
+sigjmp_buf env;
+int set = 1;
+int main(void)
+{
+ if (sigsetjmp(env,1))
+ return set;
+ set = 0;
+ siglongjmp(env, 1);
+ return 1;
+}
+EOP
+ if $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1; then
+ if ./set >/dev/null 2>&1; then
+ echo "POSIX sigsetjmp() found." >&4
+ val="$define"
+ else
+ $cat >&4 <<EOM
+Uh-Oh!
+You have POSIX sigsetjmp() and siglongjmp(), but they do not work properly!!
+I'll ignore them.
+EOM
+ val="$undef"
+ fi
+ else
+ echo "sigsetjmp() not found." >&4
+ val="$undef"
+ fi
+ ;;
+*) val="$d_sigsetjmp"
+ case "$d_sigsetjmp" in
+ $define) echo "POSIX sigsetjmp() found." >&4;;
+ $undef) echo "sigsetjmp() not found." >&4;;
+ esac
+ ;;
+esac
+set d_sigsetjmp
+eval $setvar
+$rm -f set.c set
+
diff --git a/mcon/U/d_sigsetmk.U b/mcon/U/d_sigsetmk.U
new file mode 100644
index 0000000..48a603e
--- /dev/null
+++ b/mcon/U/d_sigsetmk.U
@@ -0,0 +1,43 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_sigsetmk.U,v $
+?RCS: Revision 3.0 1993/08/18 12:07:23 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_sigsetmk: Trylink cat
+?MAKE: -pick add $@ %<
+?S:d_sigsetmk:
+?S: This variable conditionally defines the HAS_SIGSETMASK symbol, which
+?S: indicates to the C program that the sigsetmask() routine is available
+?S: to set current signal mask.
+?S:.
+?C:HAS_SIGSETMASK (SIGSETMASK):
+?C: This symbol, if defined, indicates that the sigsetmask() routine is
+?C: available to set current signal mask. Otherwise, you should probably
+?C: emulate this by using signal(), but fear race conditions...
+?C:.
+?H:#$d_sigsetmk HAS_SIGSETMASK /**/
+?H:.
+?LINT:set d_sigsetmk
+: see if sigsetmask exists
+$cat >try.c <<EOC
+#include <signal.h>
+int main(void)
+{
+ static int ret, mask;
+ ret |= sigsetmask(mask);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=sigsetmask
+set d_sigsetmk
+eval $trylink
+
diff --git a/mcon/U/d_sigvec.U b/mcon/U/d_sigvec.U
new file mode 100644
index 0000000..57c13ca
--- /dev/null
+++ b/mcon/U/d_sigvec.U
@@ -0,0 +1,99 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_sigvec.U,v $
+?RCS: Revision 3.0.1.1 1997/02/28 15:45:37 ram
+?RCS: patch61: there is now a separate routine for sigaction()
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:07:24 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X: d_sigvec.U, from d_ftime.U 1.0
+?X:
+?MAKE:d_sigvec d_sigvectr d_sigintrp: Trylink cat
+?MAKE: -pick add $@ %<
+?S:d_sigvec:
+?S: This variable conditionally defines the HAS_SIGVEC symbol, which indicates
+?S: that BSD reliable signals are supported.
+?S:.
+?S:d_sigvectr:
+?S: This variable conditionally defines the HAS_SIGVECTOR symbol, which
+?S: indicates that the sigvec() routine is called sigvector() instead, for
+?S: reasons known only to Hewlett-Packard.
+?S:.
+?S:d_sigintrp:
+?S: This variable conditionally defines the HAS_SIGINTRP symbol, which
+?S: indicates that the siginterrupt() routine is available.
+?S:.
+?C:HAS_SIGVEC (SIGVEC):
+?C: This symbol, if defined, indicates that BSD reliable signals are
+?C: supported.
+?C:.
+?C:HAS_SIGVECTOR (SIGVECTOR):
+?C: This symbol, if defined, indicates that the sigvec() routine is called
+?C: sigvector() instead, and that sigspace() is provided instead of
+?C: sigstack(). This is probably only true for HP-UX.
+?C:.
+?C:HAS_SIGINTRP (SIGINTRP):
+?C: This symbol, if defined, indicates that the siginterrupt() routine
+?C: is available.
+?C:.
+?H:#$d_sigvec HAS_SIGVEC /**/
+?H:#$d_sigvectr HAS_SIGVECTOR /**/
+?H:#$d_sigintrp HAS_SIGINTRP /**/
+?H:.
+?LINT:set d_sigvec d_sigvectr d_sigintrp
+@if d_sigvectr || d_sigvec || HAS_SIGVEC || HAS_SIGVECTOR
+: see if sigvector exists
+$cat >try.c <<EOC
+#include <signal.h>
+int main(void)
+{
+ static int ret, sig;
+ struct sigvec vec, ovec;
+ ret |= sigvector(sig, &vec, &ovec);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=sigvector
+set d_sigvectr
+eval $trylink
+
+$cat >try.c <<EOC
+#include <signal.h>
+int main(void)
+{
+ static int ret, sig;
+ struct sigvec vec, ovec;
+ ret |= sigvec(sig, &vec, &ovec);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=sigvec
+set d_sigvec
+eval $trylink
+
+@end
+@if d_sigintrp || HAS_SIGINTRP
+: see if we have siginterrupt
+$cat >try.c <<EOC
+#include <signal.h>
+int main(void)
+{
+ static int ret, sig, flag;
+ ret |= siginterrupt(sig, flag);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=siginterrupt
+set d_sigintrp
+eval $trylink
+
+@end
diff --git a/mcon/U/d_sjis2jis.U b/mcon/U/d_sjis2jis.U
new file mode 100644
index 0000000..15203df
--- /dev/null
+++ b/mcon/U/d_sjis2jis.U
@@ -0,0 +1,32 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_sjis2jis.U,v $
+?RCS: Revision 3.0 1993/08/18 12:07:25 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_sjis2jis: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_sjis2jis:
+?S: This variable conditionally defines the HAS_SJIS2JIS symbol, which
+?S: indicates to the C program that the sjis2jis() routine is available
+?S: to convert SJIS to JIS.
+?S:.
+?C:HAS_SJIS2JIS:
+?C: This symbol, if defined, indicates that the sjis2jis routine is
+?C: available to convert SJIS to JIS.
+?C:.
+?H:#$d_sjis2jis HAS_SJIS2JIS /**/
+?H:.
+?LINT:set d_sjis2jis
+: see if sjis2jis exists
+set sjis2jis d_sjis2jis
+eval $inlibc
+
diff --git a/mcon/U/d_sockaddr_in_sin_len.U b/mcon/U/d_sockaddr_in_sin_len.U
new file mode 100644
index 0000000..cafb111
--- /dev/null
+++ b/mcon/U/d_sockaddr_in_sin_len.U
@@ -0,0 +1,53 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 2006, Christian Biere
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:d_sockaddr_in_sin_len: Trylink cat i_arpainet i_syssock i_winsock2 i_niin
+?MAKE: -pick add $@ %<
+?S:d_sockaddr_in_sin_len:
+?S: This variable conditionally defines the HAS_SOCKADDR_IN_SIN_LEN symbol,
+?S: indicates to the C program that struct sockaddr_in has a member named
+?S: "sin_len".
+?S:.
+?C:HAS_SOCKADDR_IN_SIN_LEN:
+?C: This symbol is defined if struct sockaddr_in has sin_len.
+?C:.
+?H:#$d_sockaddr_in_sin_len HAS_SOCKADDR_IN_SIN_LEN
+?H:.
+?LINT: set d_sockaddr_in_sin_len
+: does struct sockaddr_in has sin_len
+$cat >try.c <<EOC
+#$i_syssock I_SYS_SOCKET
+#$i_niin I_NETINET_IN
+#$i_winsock2 I_WINSOCK2
+#$i_arpainet I_ARPA_INET
+#include <sys/types.h>
+#ifdef I_SYS_SOCKET
+#include <sys/socket.h>
+#endif
+#ifdef I_NETINET_IN
+#include <netinet/in.h>
+#endif
+#ifdef I_ARPA_INET
+#include <arpa/inet.h>
+#endif
+#ifdef I_WINSOCK2
+#include <Winsock2.h>
+#endif
+int main(void)
+{
+ static struct sockaddr_in addr;
+ addr.sin_len = 1;
+ return 0;
+}
+EOC
+cyn="whether 'struct sockaddr_in' has a 'sin_len' member"
+set d_sockaddr_in_sin_len
+eval $trylink
+
diff --git a/mcon/U/d_sockaddr_un.U b/mcon/U/d_sockaddr_un.U
new file mode 100644
index 0000000..c4d5f19
--- /dev/null
+++ b/mcon/U/d_sockaddr_un.U
@@ -0,0 +1,61 @@
+?RCS: $Id: d_sockaddr_in_sin_len.U 57 2010-12-11 23:44:52Z rmanfredi $
+?RCS:
+?RCS: Copyright (c) 2011, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:d_sockaddr_un: Trylink cat i_arpainet i_syssock i_winsock2 i_niin i_sysun
+?MAKE: -pick add $@ %<
+?S:d_sockaddr_un:
+?S: This variable conditionally defines the HAS_SOCKADDR_UN symbol,
+?S: indicates to the C program that struct sockaddr_un is available to
+?S: create file sockets.
+?S:.
+?C:HAS_SOCKADDR_UN:
+?C: This symbol is defined if struct sockaddr_un exists, allowing the
+?C: creation of file sockets.
+?C:.
+?H:#$d_sockaddr_un HAS_SOCKADDR_UN
+?H:.
+?LINT: set d_sockaddr_un
+: does struct sockaddr_un exists?
+$cat >try.c <<EOC
+#$i_syssock I_SYS_SOCKET
+#$i_sysun I_SYS_UN
+#$i_niin I_NETINET_IN
+#$i_winsock2 I_WINSOCK2
+#$i_arpainet I_ARPA_INET
+#include <sys/types.h>
+#ifdef I_SYS_SOCKET
+#include <sys/socket.h>
+#endif
+#ifdef I_SYS_UN
+#include <sys/un.h>
+#endif
+#ifdef I_NETINET_IN
+#include <netinet/in.h>
+#endif
+#ifdef I_ARPA_INET
+#include <arpa/inet.h>
+#endif
+#ifdef I_WINSOCK2
+#include <Winsock2.h>
+#endif
+#if !defined(AF_LOCAL) && defined(AF_UNIX)
+#define AF_LOCAL AF_UNIX
+#endif
+int main(void)
+{
+ static struct sockaddr_un addr;
+ addr.sun_family = AF_LOCAL;
+ return 0;
+}
+EOC
+cyn="whether 'struct sockaddr_un' is available"
+set d_sockaddr_un
+eval $trylink
+
diff --git a/mcon/U/d_socker_get.U b/mcon/U/d_socker_get.U
new file mode 100644
index 0000000..3d7ae23
--- /dev/null
+++ b/mcon/U/d_socker_get.U
@@ -0,0 +1,65 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 2006, Christian Biere
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:d_socker_get sockercflags sockerldflags: Trylink cat ccflags ldflags
+?MAKE: -pick add $@ %<
+?S:d_socker_get:
+?S: This variable conditionally defines the HAS_SOCKER_GET symbol, which
+?S: indicates to the C program that socker_get() support is available.
+?S:.
+?S:sockercflags:
+?S: This variable holds the compiler flags required to compile with socker.
+?S:.
+?S:sockerldflags:
+?S: This variable holds the linker flags required to link against socker.
+?S:.
+?C:HAS_SOCKER_GET:
+?C: This symbol is defined when socker_get() can be used to get sockets
+?C: bound to privileged ports.
+?C:.
+?H:#$d_socker_get HAS_SOCKER_GET
+?H:.
+?T:saved_ccflags saved_ldflags
+?LINT:change ccflags ldflags
+?LINT:set d_socker_get
+: determine whether socker_get is available
+case "$d_socker_get" in
+"$undef") echo " "; echo "socker support is disabled." >&4;;
+*)
+ $cat >try.c <<'EOC'
+#include <sys/types.h>
+#include <socker.h>
+int main(void)
+{
+ static int ret;
+ ret |= socker_get(1, 2, 3, "", 5);
+ return ret ? 0 : 1;
+}
+EOC
+ sockercflags=`socker-config --cflags 2>/dev/null`
+ sockerldflags=`socker-config --libs 2>/dev/null`
+ saved_ccflags=$ccflags
+ saved_ldflags=$ldflags
+ ccflags="$ccflags $sockercflags"
+ ldflags="$ldflags $sockerldflags"
+ cyn="whether socket_get() allows binding to privileged ports"
+ set d_socker_get
+ eval $trylink
+ ccflags=$saved_ccflags
+ ldflags=$saved_ldflags
+ case "$d_socker_get" in
+ "$undef")
+ sockercflags=''
+ sockerldflags=''
+ ;;
+ esac
+ ;;
+esac
+
diff --git a/mcon/U/d_socket.U b/mcon/U/d_socket.U
new file mode 100644
index 0000000..3a18daf
--- /dev/null
+++ b/mcon/U/d_socket.U
@@ -0,0 +1,140 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_socket.U,v $
+?RCS: Revision 3.0.1.2 1997/02/28 15:46:00 ram
+?RCS: patch61: replaced .a with $_a all over the place
+?RCS:
+?RCS: Revision 3.0.1.1 1994/01/24 14:08:04 ram
+?RCS: patch16: can now safely declare private nm_extract in dependencies
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:07:26 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_socket d_oldsock d_sockpair socketlib sockethdr: contains libc \
+ echo n c nm_opt nm_extract Trylink Csym _a cat i_syssock i_winsock2
+?MAKE: -pick add $@ %<
+?S:d_socket:
+?S: This variable conditionally defines HAS_SOCKET, which indicates
+?S: that the BSD socket interface is supported.
+?S:.
+?S:d_sockpair:
+?S: This variable conditionally defines the HAS_SOCKETPAIR symbol, which
+?S: indicates that the BSD socketpair() is supported.
+?S:.
+?S:d_oldsock:
+?S: This variable conditionally defines the OLDSOCKET symbol, which
+?S: indicates that the BSD socket interface is based on 4.1c and not 4.2.
+?S:.
+?S:socketlib:
+?S: This variable has the names of any libraries needed for socket support.
+?S:.
+?S:sockethdr:
+?S: This variable has any cpp -I flags needed for socket support.
+?S:.
+?C:HAS_SOCKET:
+?C: This symbol, if defined, indicates that the BSD socket interface is
+?C: supported.
+?C:.
+?C:HAS_SOCKETPAIR:
+?C: This symbol, if defined, indicates that the BSD socketpair() call is
+?C: supported.
+?C:.
+?C:USE_OLDSOCKET:
+?C: This symbol, if defined, indicates that the 4.1c BSD socket interface
+?C: is supported instead of the 4.2/4.3 BSD socket interface. For instance,
+?C: there is no setsockopt() call.
+?C:.
+?H:#$d_socket HAS_SOCKET /**/
+?H:#$d_sockpair HAS_SOCKETPAIR /**/
+?H:#$d_oldsock USE_OLDSOCKET /**/
+?H:.
+?T:val
+?LINT:use libc
+?LINT:set d_sockpair
+: see whether socket exists
+socketlib=''
+sockethdr=''
+echo " "
+$echo $n "Hmm... $c" >&4
+if set socket val -f d_socket; eval $csym; $val; then
+ echo "Looks like you have Berkeley networking support." >&4
+ d_socket="$define"
+?X: now check for advanced features
+ if set setsockopt val -f; eval $csym; $val; then
+ d_oldsock="$undef"
+ else
+ echo "...but it uses the old 4.1c interface, rather than 4.2" >&4
+ d_oldsock="$define"
+ fi
+else
+?X: HP-UX, for one, puts all the socket stuff in socklib.o. Note that if we
+?X: come here on HP-UX, then we must have used nm to get symbols, or we really
+?X: don't have sockets anyway...
+ if $contains socklib libc.list >/dev/null 2>&1; then
+ echo "Looks like you have Berkeley networking support." >&4
+ d_socket="$define"
+ : we will have to assume that it supports the 4.2 BSD interface
+ d_oldsock="$undef"
+ else
+ echo "You don't have Berkeley networking in libc$_a..." >&4
+?X: look for an optional networking library
+ if test -f /usr/lib/libnet$_a; then
+?X: space between two '(' needed for ksh
+ ( (nm $nm_opt /usr/lib/libnet$_a | eval $nm_extract) || \
+ ar t /usr/lib/libnet$_a) 2>/dev/null >> libc.list
+ if $contains socket libc.list >/dev/null 2>&1; then
+ echo "...but the Wollongong group seems to have hacked it in." >&4
+ socketlib="-lnet"
+ sockethdr="-I/usr/netinclude"
+ d_socket="$define"
+?X: now check for advanced features
+ if $contains setsockopt libc.list >/dev/null 2>&1; then
+ d_oldsock="$undef"
+ else
+ echo "...using the old 4.1c interface, rather than 4.2" >&4
+ d_oldsock="$define"
+ fi
+ else
+ echo "or even in libnet$_a, which is peculiar." >&4
+ d_socket="$undef"
+ d_oldsock="$undef"
+ fi
+ else
+ echo "or anywhere else I see." >&4
+ d_socket="$undef"
+ d_oldsock="$undef"
+ fi
+ fi
+fi
+
+@if HAS_SOCKETPAIR || d_sockpair
+: see if socketpair exists
+$cat >try.c <<EOC
+#$i_syssock I_SYS_SOCKET
+#$i_winsock2 I_WINSOCK2
+#ifdef I_SYS_SOCKET
+#include <sys/socket.h>
+#endif
+#ifdef I_WINSOCK2
+#include <Winsock2.h>
+#endif
+int main(void)
+{
+ static int ret, domain, type, protocol, sv[2];
+ ret |= socketpair(domain, type, protocol, sv);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=socketpair
+set d_sockpair
+eval $trylink
+
+@end
diff --git a/mcon/U/d_speedopt.U b/mcon/U/d_speedopt.U
new file mode 100644
index 0000000..e45961c
--- /dev/null
+++ b/mcon/U/d_speedopt.U
@@ -0,0 +1,62 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_speedopt.U,v $
+?RCS: Revision 3.0.1.1 1994/10/29 16:15:51 ram
+?RCS: patch36: call ./Cppsym explicitly instead of relying on PATH
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:07:27 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_speedopt: Myread Cppsym Oldconfig cat models Setvar
+?MAKE: -pick add $@ %<
+?S:d_speedopt:
+?S: This variable conditionally defines the SPEED_OVER_MEM symbol, which
+?S: indicates to the C program that it can burn memory in order to save
+?S: CPU time.
+?S:.
+?C:SPEED_OVER_MEM (SPEEDOVERMEM):
+?C: This symbol, if defined, indicates that the program can use more
+?C: memory in order to reduce CPU time. The symbol doesn't say whether
+?C: we are more interested in saving text space or data space.
+?C:.
+?H:#$d_speedopt SPEED_OVER_MEM /**/
+?H:.
+?LINT:set d_speedopt
+: do we want speed at the expense of memory
+$cat <<'EOM'
+
+I can try to optimize this package for either speed or memory. If you have
+limited address space you may wish to optimize for memory. Otherwise you
+should probably optimize for speed.
+
+EOM
+case "$d_speedopt" in
+'') if ./Cppsym $smallmach; then
+ case "$models" in
+ *large*|*huge*) dflt=speed;;
+ *) dflt=memory;;
+ esac
+ else
+ dflt=speed
+ fi
+ ;;
+*define*) dflt=speed;;
+*) dflt=memory;;
+esac
+rp="What to optimize for?"
+. ./myread
+case "$ans" in
+mem*) val="$undef";;
+*) val="$define";;
+esac
+set d_speedopt
+eval $setvar
+
diff --git a/mcon/U/d_srandom.U b/mcon/U/d_srandom.U
new file mode 100644
index 0000000..d796023
--- /dev/null
+++ b/mcon/U/d_srandom.U
@@ -0,0 +1,39 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 2006, Christian Biere
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:d_srandom: Trylink cat i_stdlib
+?MAKE: -pick add $@ %<
+?S:d_srandom:
+?S: This variable conditionally defines the HAS_SRANDOM symbol, which
+?S: indicates to the C program that the srandom() routine is available.
+?S:.
+?C:HAS_SRANDOM:
+?C: This symbol, if defined, indicates that the srandom routine is
+?C: available.
+?C:.
+?H:#$d_srandom HAS_SRANDOM /**/
+?H:.
+?LINT:set d_srandom
+: see if srandom exists
+$cat >try.c <<EOC
+#$i_stdlib I_STDLIB
+#ifdef I_STDLIB
+#include <stdlib.h>
+#endif
+int main(void)
+{
+ srandom(1UL);
+ return 0;
+}
+EOC
+cyn=srandom
+set d_srandom
+eval $trylink
+
diff --git a/mcon/U/d_stat.U b/mcon/U/d_stat.U
new file mode 100644
index 0000000..c128284
--- /dev/null
+++ b/mcon/U/d_stat.U
@@ -0,0 +1,45 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_stat.U,v $
+?RCS: Revision 3.0 1993/08/18 12:07:28 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_stat: Trylink cat i_sysstat
+?MAKE: -pick add $@ %<
+?S:d_stat:
+?S: This variable conditionally defines HAS_STAT if stat() is
+?S: available to get file status.
+?S:.
+?C:HAS_STAT (STAT):
+?C: This symbol, if defined, indicates that the stat routine is
+?C: available to get file status.
+?C:.
+?H:#$d_stat HAS_STAT /**/
+?H:.
+?LINT:set d_stat
+: see if stat exists
+$cat >try.c <<EOC
+#$i_sysstat I_SYS_STAT
+#ifdef I_SYS_STAT
+#include <sys/stat.h>
+#endif
+int main(void)
+{
+ static struct stat sb;
+ static int ret;
+ ret |= stat("path", &sb);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=stat
+set d_stat
+eval $trylink
+
diff --git a/mcon/U/d_statblks.U b/mcon/U/d_statblks.U
new file mode 100644
index 0000000..1391ef1
--- /dev/null
+++ b/mcon/U/d_statblks.U
@@ -0,0 +1,46 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_statblks.U,v $
+?RCS: Revision 3.0 1993/08/18 12:07:29 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_statblks: contains Setvar Findhdr
+?MAKE: -pick add $@ %<
+?S:d_statblks:
+?S: This variable conditionally defines USE_STAT_BLOCKS if this system
+?S: has a stat structure declaring st_blksize and st_blocks.
+?S:.
+?C:USE_STAT_BLOCKS (STATBLOCKS):
+?C: This symbol is defined if this system has a stat structure declaring
+?C: st_blksize and st_blocks.
+?C:.
+?H:#$d_statblks USE_STAT_BLOCKS /**/
+?H:.
+?T:xxx
+?LINT:set d_statblks
+: see if stat knows about block sizes
+echo " "
+xxx=`./findhdr sys/stat.h`
+if $contains 'st_blocks;' "$xxx" >/dev/null 2>&1 ; then
+ if $contains 'st_blksize;' "$xxx" >/dev/null 2>&1 ; then
+ echo "Your stat() knows about block sizes." >&4
+ val="$define"
+ else
+ echo "Your stat() doesn't know about block sizes." >&4
+ val="$undef"
+ fi
+else
+ echo "Your stat() doesn't know about block sizes." >&4
+ val="$undef"
+fi
+set d_statblks
+eval $setvar
+
diff --git a/mcon/U/d_statfs.U b/mcon/U/d_statfs.U
new file mode 100644
index 0000000..ff3b43c
--- /dev/null
+++ b/mcon/U/d_statfs.U
@@ -0,0 +1,50 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 2006, Christian Biere
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:d_statfs: Trylink cat i_sysmount i_sysparam i_sysvfs
+?MAKE: -pick add $@ %<
+?S:d_statfs:
+?S: This variable conditionally defines the HAS_STATFS symbol, which
+?S: indicates to the C program that the statfs() system call is available.
+?S:.
+?C:HAS_STATFS:
+?C: This symbol, if defined, indicates that the Linux statfs() system call
+?C: is available to get filesystem statistics.
+?C:.
+?H:#$d_statfs HAS_STATFS /**/
+?H:.
+?LINT:set d_statfs
+: see if statfs exists
+$cat >try.c <<EOC
+#$i_sysparam I_SYS_PARAM
+#ifdef I_SYS_PARAM
+#include <sys/param.h>
+#endif
+#$i_sysmount I_SYS_MOUNT
+#ifdef I_SYS_MOUNT
+#include <sys/mount.h>
+#endif
+#$i_sysvfs I_SYS_VFS
+#ifdef I_SYS_VFS
+#include <sys/vfs.h>
+#endif
+int main(void)
+{
+ static int ret;
+ static char *p;
+ static struct statfs buf;
+ ret |= statfs(p, &buf);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=statfs
+set d_statfs
+eval $trylink
+
diff --git a/mcon/U/d_statvfs.U b/mcon/U/d_statvfs.U
new file mode 100644
index 0000000..1b0c0e0
--- /dev/null
+++ b/mcon/U/d_statvfs.U
@@ -0,0 +1,39 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 2006, Christian Biere
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:d_statvfs: Trylink cat
+?MAKE: -pick add $@ %<
+?S:d_statvfs:
+?S: This variable conditionally defines the HAS_STATVFS symbol, which
+?S: indicates to the C program that the statvfs() system call is available.
+?S:.
+?C:HAS_STATVFS:
+?C: This symbol, if defined, indicates that the POSIX statvfs() system call
+?C: is available to get filesystem statistics.
+?C:.
+?H:#$d_statvfs HAS_STATVFS /**/
+?H:.
+?LINT:set d_statvfs
+: see if statvfs exists
+$cat >try.c <<EOC
+#include <sys/statvfs.h>
+int main(void)
+{
+ static int ret;
+ static char *p;
+ static struct statvfs buf;
+ ret |= statvfs(p, &buf);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=statvfs
+set d_statvfs
+eval $trylink
+
diff --git a/mcon/U/d_stdstdio.U b/mcon/U/d_stdstdio.U
new file mode 100644
index 0000000..fe3a853
--- /dev/null
+++ b/mcon/U/d_stdstdio.U
@@ -0,0 +1,325 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Tye McQueen <tye@metronet.com>
+?RCS:
+?RCS: $Log: d_stdstdio.U,v $
+?RCS: Revision 3.0.1.3 1997/02/28 15:46:32 ram
+?RCS: patch61: merged with perl5's unit
+?RCS:
+?RCS: Revision 3.0.1.2 1995/07/25 14:06:54 ram
+?RCS: patch56: typo fix on ?C: line for FILE_bufsiz
+?RCS: patch56: fixed unbalanced parenthesis (ADO)
+?RCS: patch56: check whether FILE_cnt and FILE_ptr can be assigned to (ADO)
+?RCS:
+?RCS: Revision 3.0.1.1 1995/05/12 12:12:11 ram
+?RCS: patch54: complete rewrite by Tye McQueen to fit modern systems
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:07:31 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_stdstdio d_stdiobase stdio_ptr stdio_cnt stdio_base \
+ stdio_bufsiz d_stdio_cnt_lval d_stdio_ptr_lval stdio_filbuf: cat \
+ +cc +ccflags contains +ldflags +libs rm_try \
+ Setvar Findhdr Oldconfig
+?MAKE: -pick add $@ %<
+?S:d_stdstdio:
+?S: This variable conditionally defines USE_STDIO_PTR if this system
+?S: has a FILE structure declaring usable _ptr and _cnt fields (or
+?S: equivalent) in stdio.h.
+?S:.
+?S:stdio_ptr:
+?S: This variable defines how, given a FILE pointer, fp, to access the
+?S: _ptr field (or equivalent) of stdio.h's FILE structure. This will
+?S: be used to define the macro FILE_ptr(fp).
+?S:.
+?S:d_stdio_ptr_lval:
+?S: This variable conditionally defines STDIO_PTR_LVALUE if the
+?S: FILE_ptr macro can be used as an lvalue.
+?S:.
+?S:stdio_cnt:
+?S: This variable defines how, given a FILE pointer, fp, to access the
+?S: _cnt field (or equivalent) of stdio.h's FILE structure. This will
+?S: be used to define the macro FILE_cnt(fp).
+?S:.
+?S:d_stdio_cnt_lval:
+?S: This variable conditionally defines STDIO_CNT_LVALUE if the
+?S: FILE_cnt macro can be used as an lvalue.
+?S:.
+?S:stdio_filbuf:
+?S: This variable defines how, given a FILE pointer, fp, to tell
+?S: stdio to refill it's internal buffers (?). This will
+?S: be used to define the macro FILE_filbuf(fp).
+?S:.
+?S:d_stdiobase:
+?S: This variable conditionally defines USE_STDIO_BASE if this system
+?S: has a FILE structure declaring a usable _base field (or equivalent)
+?S: in stdio.h.
+?S:.
+?S:stdio_base:
+?S: This variable defines how, given a FILE pointer, fp, to access the
+?S: _base field (or equivalent) of stdio.h's FILE structure. This will
+?S: be used to define the macro FILE_base(fp).
+?S:.
+?S:stdio_bufsiz:
+?S: This variable defines how, given a FILE pointer, fp, to determine
+?S: the number of bytes store in the I/O buffer pointer to by the
+?S: _base field (or equivalent) of stdio.h's FILE structure. This will
+?S: be used to define the macro FILE_bufsiz(fp).
+?S:.
+?C:USE_STDIO_PTR ~ d_stdstdio (USE_STD_STDIO STDSTDIO):
+?C: This symbol is defined if the _ptr and _cnt fields (or similar)
+?C: of the stdio FILE structure can be used to access the stdio buffer
+?C: for a file handle. If this is defined, then the FILE_ptr(fp)
+?C: and FILE_cnt(fp) macros will also be defined and should be used
+?C: to access these fields.
+?C:.
+?C:FILE_ptr:
+?C: This macro is used to access the _ptr field (or equivalent) of the
+?C: FILE structure pointed to by its argument. This macro will always be
+?C: defined if USE_STDIO_PTR is defined.
+?C:.
+?C:STDIO_PTR_LVALUE:
+?C: This symbol is defined if the FILE_ptr macro can be used as an
+?C: lvalue.
+?C:.
+?C:FILE_cnt:
+?C: This macro is used to access the _cnt field (or equivalent) of the
+?C: FILE structure pointed to by its argument. This macro will always be
+?C: defined if USE_STDIO_PTR is defined.
+?C:.
+?C:STDIO_CNT_LVALUE:
+?C: This symbol is defined if the FILE_cnt macro can be used as an
+?C: lvalue.
+?C:.
+?C:FILE_filbuf:
+?C: This macro is used to access the internal stdio _filbuf function
+?C: (or equivalent), if STDIO_CNT_LVALUE and STDIO_PTR_LVALUE
+?C: are defined. It is typically either _filbuf or __filbuf.
+?C: This macro will only be defined if both STDIO_CNT_LVALUE and
+?C: STDIO_PTR_LVALUE are defined.
+?C:.
+?H:?d_stdstdio:#$d_stdstdio USE_STDIO_PTR /**/
+?H:?d_stdstdio:#ifdef USE_STDIO_PTR
+?H:#define FILE_ptr(fp) $stdio_ptr
+?H:#$d_stdio_ptr_lval STDIO_PTR_LVALUE /**/
+?H:#define FILE_cnt(fp) $stdio_cnt
+?H:#$d_stdio_cnt_lval STDIO_CNT_LVALUE /**/
+?H:?d_stdstdio:#if defined(STDIO_PTR_LVALUE) && defined(STDIO_CNT_LVALUE)
+?H:#define FILE_filbuf(fp) $stdio_filbuf /**/
+?H:?d_stdstdio:#endif
+?H:?d_stdstdio:#endif
+?H:.
+?W:d_stdstdio:FILE_ptr FILE_cnt FILE_filbuf
+?C:USE_STDIO_BASE ~ d_stdiobase:
+?C: This symbol is defined if the _base field (or similar) of the
+?C: stdio FILE structure can be used to access the stdio buffer for
+?C: a file handle. If this is defined, then the FILE_base(fp) macro
+?C: will also be defined and should be used to access this field.
+?C: Also, the FILE_bufsiz(fp) macro will be defined and should be used
+?C: to determine the number of bytes in the buffer. USE_STDIO_BASE
+?C: will never be defined unless USE_STDIO_PTR is.
+?C:.
+?C:FILE_base:
+?C: This macro is used to access the _base field (or equivalent) of the
+?C: FILE structure pointed to by its argument. This macro will always be
+?C: defined if USE_STDIO_BASE is defined.
+?C:.
+?C:FILE_bufsiz:
+?C: This macro is used to determine the number of bytes in the I/O
+?C: buffer pointed to by _base field (or equivalent) of the FILE
+?C: structure pointed to its argument. This macro will always be defined
+?C: if USE_STDIO_BASE is defined.
+?C:.
+?H:?d_stdiobase:#$d_stdiobase USE_STDIO_BASE /**/
+?H:?d_stdiobase:#ifdef USE_STDIO_BASE
+?H:#define FILE_base(fp) $stdio_base
+?H:#define FILE_bufsiz(fp) $stdio_bufsiz
+?H:?d_stdiobase:#endif
+?H:.
+?W:d_stdiobase:FILE_base FILE_bufsiz
+?LINT:set d_stdstdio d_stdiobase
+?T:ptr_lval cnt_lval filbuf xxx
+?F:!try
+: see if _ptr and _cnt from stdio act std
+echo " "
+if $contains '_IO_fpos_t' `./findhdr stdio.h` >/dev/null 2>&1 ; then
+ echo "(Looks like you have stdio.h from Linux.)"
+ case "$stdio_ptr" in
+ '') stdio_ptr='((fp)->_IO_read_ptr)'
+ ptr_lval=$define
+ ;;
+ *) ptr_lval=$d_stdio_ptr_lval;;
+ esac
+ case "$stdio_cnt" in
+ '') stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)'
+ cnt_lval=$undef
+ ;;
+ *) cnt_lval=$d_stdio_cnt_lval;;
+ esac
+ case "$stdio_base" in
+ '') stdio_base='((fp)->_IO_read_base)';;
+ esac
+ case "$stdio_bufsiz" in
+ '') stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)';;
+ esac
+else
+ case "$stdio_ptr" in
+ '') stdio_ptr='((fp)->_ptr)'
+ ptr_lval=$define
+ ;;
+ *) ptr_lval=$d_stdio_ptr_lval;;
+ esac
+ case "$stdio_cnt" in
+ '') stdio_cnt='((fp)->_cnt)'
+ cnt_lval=$define
+ ;;
+ *) cnt_lval=$d_stdio_cnt_lval;;
+ esac
+ case "$stdio_base" in
+ '') stdio_base='((fp)->_base)';;
+ esac
+ case "$stdio_bufsiz" in
+ '') stdio_bufsiz='((fp)->_cnt + (fp)->_ptr - (fp)->_base)';;
+ esac
+fi
+: test whether _ptr and _cnt really work
+echo "Checking how std your stdio is..." >&4
+$cat >try.c <<EOP
+#include <stdio.h>
+#define FILE_ptr(fp) $stdio_ptr
+#define FILE_cnt(fp) $stdio_cnt
+int main() {
+ FILE *fp = fopen("try.c", "r");
+ char c = getc(fp);
+ if (
+ 18 <= FILE_cnt(fp) &&
+ strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
+ )
+ exit(0);
+ exit(1);
+}
+EOP
+val="$undef"
+if $cc $ccflags $ldflags -o try try.c $libs >/dev/null 2>&1; then
+ if ./try; then
+ echo "Your stdio acts pretty std."
+ val="$define"
+ else
+ echo "Your stdio isn't very std."
+ fi
+else
+ echo "Your stdio doesn't appear very std."
+fi
+$rm_try
+set d_stdstdio
+eval $setvar
+
+@if STDIO_PTR_LVALUE || d_stdio_ptr_lval
+: Can _ptr be used as an lvalue?
+?X: Only makes sense if we have a known stdio implementation.
+case "$d_stdstdio$ptr_lval" in
+$define$define) val=$define ;;
+*) val=$undef ;;
+esac
+set d_stdio_ptr_lval
+eval $setvar
+
+@end
+@if STDIO_CNT_LVALUE || d_stdio_cnt_lval
+: Can _cnt be used as an lvalue?
+?X: Only makes sense if we have a known stdio implementation.
+case "$d_stdstdio$cnt_lval" in
+$define$define) val=$define ;;
+*) val=$undef ;;
+esac
+set d_stdio_cnt_lval
+eval $setvar
+
+@end
+@if FILE_filbuf
+: How to access the stdio _filbuf or __filbuf function.
+: If this fails, check how the getc macro in stdio.h works.
+case "${d_stdio_ptr_lval}${d_stdio_cnt_lval}" in
+${define}${define})
+ : Try hint value, if any, then _filbuf, __filbuf, _fill, then punt.
+ : _fill is for OS/2.
+ xxx='notok'
+ for filbuf in $stdio_filbuf '_filbuf(fp)' '__filbuf(fp) ' '_fill(fp)' ; do
+ $cat >try.c <<EOP
+#include <stdio.h>
+#define FILE_ptr(fp) $stdio_ptr
+#define FILE_cnt(fp) $stdio_cnt
+#define FILE_filbuf(fp) $filbuf
+int main() {
+ FILE *fp = fopen("try.c", "r");
+ int c;
+ c = getc(fp);
+ c = FILE_filbuf(fp); /* Just looking for linker errors.*/
+ exit(0);
+}
+EOP
+ if $cc $ccflags $ldflags -o try try.c $libs >/dev/null 2>&1 && ./try; then
+ echo "Your stdio appears to use $filbuf"
+ stdio_filbuf="$filbuf"
+ xxx='ok'
+ break
+ else
+ echo "Hmm. $filbuf doesn't seem to work."
+ fi
+ $rm_try
+ done
+ case "$xxx" in
+ notok) echo "I can't figure out how to access _filbuf"
+ echo "I'll just have to work around it."
+ d_stdio_ptr_lval="$undef"
+ d_stdio_cnt_lval="$undef"
+ ;;
+ esac
+ ;;
+esac
+@end
+@if d_stdiobase || USE_STDIO_BASE || FILE_base || FILE_bufsiz
+: see if _base is also standard
+val="$undef"
+case "$d_stdstdio" in
+$define)
+ $cat >try.c <<EOP
+#include <stdio.h>
+#define FILE_base(fp) $stdio_base
+#define FILE_bufsiz(fp) $stdio_bufsiz
+int main() {
+ FILE *fp = fopen("try.c", "r");
+ char c = getc(fp);
+ if (
+ 19 <= FILE_bufsiz(fp) &&
+ strncmp(FILE_base(fp), "#include <stdio.h>\n", 19) == 0
+ )
+ exit(0);
+ exit(1);
+}
+EOP
+ if $cc $ccflags $ldflags -o try try.c $libs > /dev/null 2>&1; then
+ if ./try; then
+ echo "And its _base field acts std."
+ val="$define"
+ else
+ echo "But its _base field isn't std."
+ fi
+ else
+ echo "However, it seems to be lacking the _base field."
+ fi
+ $rm_try
+ ;;
+esac
+set d_stdiobase
+eval $setvar
+
+@end
diff --git a/mcon/U/d_strcasestr.U b/mcon/U/d_strcasestr.U
new file mode 100644
index 0000000..ef9e6e7
--- /dev/null
+++ b/mcon/U/d_strcasestr.U
@@ -0,0 +1,37 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 2006, Christian Biere
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:d_strcasestr: Trylink cat
+?MAKE: -pick add $@ %<
+?S:d_strcasestr:
+?S: This variable conditionally defines the HAS_STRCASESTR symbol, which
+?S: indicates to the C program that the strcasestr() routine is available.
+?S:.
+?C:HAS_STRCASESTR:
+?C: This symbol, if defined, indicates that the strcasestr routine is
+?C: available.
+?C:.
+?H:#$d_strcasestr HAS_STRCASESTR /**/
+?H:.
+?LINT:set d_strcasestr
+: see if strcasestr exists
+$cat >try.c <<EOC
+#include <string.h>
+int main(void)
+{
+ static char ret;
+ ret |= *strcasestr("big", "little");
+ return ret ? 0 : 1;
+}
+EOC
+cyn=strcasestr
+set d_strcasestr
+eval $trylink
+
diff --git a/mcon/U/d_strccmp.U b/mcon/U/d_strccmp.U
new file mode 100644
index 0000000..cf70f97
--- /dev/null
+++ b/mcon/U/d_strccmp.U
@@ -0,0 +1,49 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_strccmp.U,v $
+?RCS: Revision 3.0.1.2 1994/05/06 14:54:34 ram
+?RCS: patch23: fixed a typo (WED)
+?RCS:
+?RCS: Revision 3.0.1.1 1993/09/13 16:04:39 ram
+?RCS: patch10: created (WAD)
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:06:24 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_strccmp: Trylink cat
+?MAKE: -pick add $@ %<
+?S:d_strccmp:
+?S: This variable conditionally defines the HAS_STRCASECMP symbol, which
+?S: indicates to the C program that the strcasecmp() routine is available
+?S: for case-insensitive string compares.
+?S:.
+?C:HAS_STRCASECMP:
+?C: This symbol, if defined, indicates that the strcasecmp() routine is
+?C: available for case-insensitive string compares.
+?C:.
+?H:#$d_strccmp HAS_STRCASECMP /**/
+?H:.
+?LINT:set d_strccmp
+: see if strcasecmp exists
+$cat >try.c <<EOC
+#include <strings.h>
+int
+main(void)
+{
+ static int ret;
+ ret |= strcasecmp("xxx", "XXX");
+ return ret ? 0 : 1;
+}
+EOC
+cyn=strcasecmp
+set d_strccmp
+eval $trylink
+
diff --git a/mcon/U/d_strchr.U b/mcon/U/d_strchr.U
new file mode 100644
index 0000000..ddc44b1
--- /dev/null
+++ b/mcon/U/d_strchr.U
@@ -0,0 +1,87 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_strchr.U,v $
+?RCS: Revision 3.0.1.2 1993/10/16 13:49:20 ram
+?RCS: patch12: added support for HAS_INDEX
+?RCS: patch12: added magic for index() and rindex()
+?RCS:
+?RCS: Revision 3.0.1.1 1993/09/13 16:05:26 ram
+?RCS: patch10: now only defines HAS_STRCHR, no macro remap of index (WAD)
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:07:32 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_strchr d_index: Trylink cat
+?MAKE: -pick add $@ %<
+?S:d_strchr:
+?S: This variable conditionally defines HAS_STRCHR if strchr() and
+?S: strrchr() are available for string searching.
+?S:.
+?S:d_index:
+?S: This variable conditionally defines HAS_INDEX if index() and
+?S: rindex() are available for string searching.
+?S:.
+?C:HAS_STRCHR:
+?C: This symbol is defined to indicate that the strchr()/strrchr()
+?C: functions are available for string searching. If not, try the
+?C: index()/rindex() pair.
+?C:.
+?C:HAS_INDEX:
+?C: This symbol is defined to indicate that the index()/rindex()
+?C: functions are available for string searching.
+?C:.
+?H:#$d_strchr HAS_STRCHR /**/
+?H:#$d_index HAS_INDEX /**/
+?H:.
+?M:index: HAS_INDEX
+?M:#ifndef HAS_INDEX
+?M:#ifndef index
+?M:#define index strchr
+?M:#endif
+?M:#endif
+?M:.
+?M:rindex: HAS_INDEX
+?M:#ifndef HAS_INDEX
+?M:#ifndef rindex
+?M:#define rindex strrchr
+?M:#endif
+?M:#endif
+?M:.
+?LINT:set d_strchr d_index
+: index or strchr
+$cat >try.c <<EOC
+#include <string.h>
+int main(void)
+{
+ static char ret;
+ static int c;
+ ret |= *strchr("string", c);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=strchr
+set d_strchr
+eval $trylink
+
+$cat >try.c <<EOC
+#include <strings.h>
+int main(void)
+{
+ static char ret;
+ static int c;
+ ret |= *index("string", c);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=index
+set d_index
+eval $trylink
+
diff --git a/mcon/U/d_strcoll.U b/mcon/U/d_strcoll.U
new file mode 100644
index 0000000..84fc4b3
--- /dev/null
+++ b/mcon/U/d_strcoll.U
@@ -0,0 +1,43 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu>
+?RCS:
+?RCS: $Log: d_strcoll.U,v $
+?RCS: Revision 3.0.1.1 1994/08/29 16:12:01 ram
+?RCS: patch32: created by ADO
+?RCS:
+?MAKE:d_strcoll: Trylink cat
+?MAKE: -pick add $@ %<
+?S:d_strcoll:
+?S: This variable conditionally defines HAS_STRCOLL if strcoll() is
+?S: available to compare strings using collating information.
+?S:.
+?C:HAS_STRCOLL:
+?C: This symbol, if defined, indicates that the strcoll routine is
+?C: available to compare strings using collating information.
+?C:.
+?H:#$d_strcoll HAS_STRCOLL /**/
+?H:.
+?LINT:set d_strcoll
+: see if strcoll exists
+$cat >try.c <<EOC
+#include <string.h>
+int main(void)
+{
+ static int ret;
+ ret |= strcoll("A", "B");
+ return ret ? 0 : 1;
+}
+EOC
+cyn=strcoll
+set d_strcoll
+eval $trylink
+
diff --git a/mcon/U/d_strcspn.U b/mcon/U/d_strcspn.U
new file mode 100644
index 0000000..ed8c439
--- /dev/null
+++ b/mcon/U/d_strcspn.U
@@ -0,0 +1,42 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_strcspn.U,v $
+?RCS: Revision 3.0 1993/08/18 12:07:33 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_strcspn: Trylink cat
+?MAKE: -pick add $@ %<
+?S:d_strcspn:
+?S: This variable conditionally defines the HAS_STRCSPN symbol, which
+?S: indicates to the C program that the strcspn() routine is available
+?S: to scan strings.
+?S:.
+?C:HAS_STRCSPN (STRCSPN):
+?C: This symbol, if defined, indicates that the strcspn routine is
+?C: available to scan strings.
+?C:.
+?H:#$d_strcspn HAS_STRCSPN /**/
+?H:.
+?LINT:set d_strcspn
+: see if strcspn exists
+$cat >try.c <<EOC
+#include <string.h>
+int main(void)
+{
+ size_t ret;
+ ret |= strcspn("abc", "x");
+ return ret ? 0 : 1;
+}
+EOC
+cyn=strcspn
+set d_strcspn
+eval $trylink
+
diff --git a/mcon/U/d_strctcpy.U b/mcon/U/d_strctcpy.U
new file mode 100644
index 0000000..c5e9c40
--- /dev/null
+++ b/mcon/U/d_strctcpy.U
@@ -0,0 +1,53 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_strctcpy.U,v $
+?RCS: Revision 3.0 1993/08/18 12:07:34 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_strctcpy: cat rm_try cc Setvar
+?MAKE: -pick add $@ %<
+?S:d_strctcpy:
+?S: This variable conditionally defines the USE_STRUCT_COPY symbol, which
+?S: indicates to the C program that this C compiler knows how to copy
+?S: structures.
+?S:.
+?C:USE_STRUCT_COPY (STRUCTCOPY):
+?C: This symbol, if defined, indicates that this C compiler knows how
+?C: to copy structures. If undefined, you'll need to use a block copy
+?C: routine of some sort instead.
+?C:.
+?H:#$d_strctcpy USE_STRUCT_COPY /**/
+?H:.
+?LINT:set d_strctcpy
+: check for structure copying
+echo " "
+echo "Checking to see if your C compiler can copy structs..." >&4
+$cat >try.c <<'EOCP'
+int main()
+{
+ struct blurfl {
+ int dyick;
+ } foo, bar;
+
+ foo = bar;
+}
+EOCP
+if $cc -c try.c >/dev/null 2>&1 ; then
+ val="$define"
+ echo "Yup, it can."
+else
+ val="$undef"
+ echo "Nope, it can't."
+fi
+set d_strctcpy
+eval $setvar
+$rm_try
+
diff --git a/mcon/U/d_strdup.U b/mcon/U/d_strdup.U
new file mode 100644
index 0000000..314c1b6
--- /dev/null
+++ b/mcon/U/d_strdup.U
@@ -0,0 +1,43 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_strdup.U,v $
+?RCS: Revision 3.0.1.1 1993/12/15 08:21:41 ram
+?RCS: patch15: created
+?RCS:
+?MAKE:d_strdup: Trylink cat
+?MAKE: -pick add $@ %<
+?S:d_strdup:
+?S: This variable conditionally defines HAS_STRDUP if strdup() is
+?S: available to duplicate strings in memory.
+?S:.
+?C:HAS_STRDUP:
+?C: This symbol, if defined, indicates that the strdup routine is
+?C: available to duplicate strings in memory. Otherwise, roll up
+?C: your own...
+?C:.
+?H:#$d_strdup HAS_STRDUP /**/
+?H:.
+?LINT:set d_strdup
+: see if strdup exists
+$cat >try.c <<EOC
+#include <string.h>
+int main(void)
+{
+ static char ret;
+
+ ret |= *strdup("x");
+ return ret ? 0 : 1;
+}
+EOC
+cyn=strdup
+set d_strdup
+eval $trylink
+
diff --git a/mcon/U/d_strerror.U b/mcon/U/d_strerror.U
new file mode 100644
index 0000000..774ef1a
--- /dev/null
+++ b/mcon/U/d_strerror.U
@@ -0,0 +1,117 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_strerror.U,v $
+?RCS: Revision 3.0.1.3 1994/05/13 15:20:27 ram
+?RCS: patch27: now uses new macro support for cleaner Strerror def
+?RCS:
+?RCS: Revision 3.0.1.2 1994/05/06 14:58:26 ram
+?RCS: patch23: renamed strerror into Strerror to protect name space (ADO)
+?RCS:
+?RCS: Revision 3.0.1.1 1994/01/24 14:08:56 ram
+?RCS: patch16: protected code looking for sys_errnolist[] with @if
+?RCS: patch16: added default value for d_sysernlst
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:07:35 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_strerror d_syserrlst d_sysernlst d_strerrm: contains Csym Findhdr
+?MAKE: -pick add $@ %<
+?S:d_strerror:
+?S: This variable conditionally defines HAS_STRERROR if strerror() is
+?S: available to translate error numbers to strings.
+?S:.
+?S:d_syserrlst:
+?S: This variable conditionally defines HAS_SYS_ERRLIST if sys_errlist[] is
+?S: available to translate error numbers to strings.
+?S:.
+?S:d_sysernlst:
+?S: This variable conditionally defines HAS_SYS_ERRNOLIST if sys_errnolist[]
+?S: is available to translate error numbers to the symbolic name.
+?S:.
+?S:d_strerrm:
+?S: This variable holds what Strerrr is defined as to translate an error
+?S: code condition into an error message string. It could be 'strerror'
+?S: or a more complex macro emulating strrror with sys_errlist[], or the
+?S: "unknown" string when both strerror and sys_errlist are missing.
+?S:.
+?C:HAS_STRERROR (STRERROR):
+?C: This symbol, if defined, indicates that the strerror routine is
+?C: available to translate error numbers to strings. See the writeup
+?C: of Strerror() in this file before you try to define your own.
+?C:.
+?C:HAS_SYS_ERRLIST (SYSERRLIST):
+?C: This symbol, if defined, indicates that the sys_errlist array is
+?C: available to translate error numbers to strings. The extern int
+?C: sys_nerr gives the size of that table.
+?C:.
+?C:HAS_SYS_ERRNOLIST (SYSERRNOLIST):
+?C: This symbol, if defined, indicates that the sys_errnolist array is
+?C: available to translate an errno code into its symbolic name (e.g.
+?C: ENOENT). The extern int sys_nerrno gives the size of that table.
+?C:.
+?C:Strerror:
+?C: This preprocessor symbol is defined as a macro if strerror() is
+?C: not available to translate error numbers to strings but sys_errlist[]
+?C: array is there.
+?C:.
+?H:#$d_strerror HAS_STRERROR /**/
+?H:#$d_syserrlst HAS_SYS_ERRLIST /**/
+?H:#$d_sysernlst HAS_SYS_ERRNOLIST /**/
+?H:#define Strerror(e) $d_strerrm
+?H:.
+?D:d_sysernlst=''
+?T:xxx val
+: see if strerror and/or sys_errlist[] exist
+echo " "
+if set strerror val -f d_strerror; eval $csym; $val; then
+ echo 'strerror() found.' >&4
+ d_strerror="$define"
+ d_strerrm='strerror(e)'
+ if set sys_errlist val -a d_syserrlst; eval $csym; $val; then
+ echo "(You also have sys_errlist[], so we could roll our own strerror.)"
+ d_syserrlst="$define"
+ else
+ echo "(Since you don't have sys_errlist[], sterror() is welcome.)"
+ d_syserrlst="$undef"
+ fi
+elif xxx=`./findhdr string.h`; test "$xxx" || xxx=`./findhdr strings.h`; \
+ $contains '#[ ]*define.*strerror' "$xxx" >/dev/null 2>&1; then
+ echo 'strerror() found in string header.' >&4
+ d_strerror="$define"
+ d_strerrm='strerror(e)'
+ if set sys_errlist val -a d_syserrlst; eval $csym; $val; then
+ echo "(Most probably, strerror() uses sys_errlist[] for descriptions.)"
+ d_syserrlst="$define"
+ else
+ echo "(You don't appear to have any sys_errlist[], how can this be?)"
+ d_syserrlst="$undef"
+ fi
+elif set sys_errlist val -a d_syserrlst; eval $csym; $val; then
+echo "strerror() not found, but you have sys_errlist[] so we'll use that." >&4
+ d_strerror="$undef"
+ d_syserrlst="$define"
+ d_strerrm='((e)<0||(e)>=sys_nerr?"unknown":sys_errlist[e])'
+else
+ echo 'strerror() and sys_errlist[] NOT found.' >&4
+ d_strerror="$undef"
+ d_syserrlst="$undef"
+ d_strerrm='"unknown"'
+fi
+@if d_sysernlst || HAS_SYS_ERRNOLIST
+if set sys_errnolist val -a d_sysernlst; eval $csym; $val; then
+ echo "(Symbolic error codes can be fetched via the sys_errnolist[] array.)"
+ d_sysernlst="$define"
+else
+ echo "(However, I can't extract the symbolic error code out of errno.)"
+ d_sysernlst="$undef"
+fi
+@end
+
diff --git a/mcon/U/d_strftime.U b/mcon/U/d_strftime.U
new file mode 100644
index 0000000..3c0a777
--- /dev/null
+++ b/mcon/U/d_strftime.U
@@ -0,0 +1,43 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_strftime.U,v $
+?RCS: Revision 3.0 1993/08/18 12:07:36 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_strftime: Trylink cat
+?MAKE: -pick add $@ %<
+?S:d_strftime:
+?S: This variable conditionally defines HAS_STRFTIME if strftime() is
+?S: available to format locale-specific times.
+?S:.
+?C:HAS_STRFTIME:
+?C: This symbol, if defined, indicates that the strftime routine is
+?C: available to format locale-specific times.
+?C:.
+?H:#$d_strftime HAS_STRFTIME /**/
+?H:.
+?LINT:set d_strftime
+: see if strftime exists
+$cat >try.c <<EOC
+#include <time.h>
+int main(void)
+{
+ static size_t ret, size;
+ static struct tm tm;
+ static char buf[1];
+ ret |= strftime(buf, size, "%Y-%m-%d", &tm);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=strftime
+set d_strftime
+eval $trylink
+
diff --git a/mcon/U/d_strlcat.U b/mcon/U/d_strlcat.U
new file mode 100644
index 0000000..3e960ff
--- /dev/null
+++ b/mcon/U/d_strlcat.U
@@ -0,0 +1,38 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 2006, Christian Biere
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:d_strlcat: Trylink cat
+?MAKE: -pick add $@ %<
+?S:d_strlcat:
+?S: This variable conditionally defines the HAS_STRLCAT symbol, which
+?S: indicates to the C program that the strlcat() routine is available.
+?S:.
+?C:HAS_STRLCAT:
+?C: This symbol, if defined, indicates that the strlcat routine is
+?C: available.
+?C:.
+?H:#$d_strlcat HAS_STRLCAT /**/
+?H:.
+?LINT:set d_strlcat
+: see if strlcat exists
+$cat >try.c <<EOC
+#include <string.h>
+int main(void)
+{
+ static size_t ret, size;
+ static char dst;
+ ret |= strlcat(&dst, "src", size);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=strlcat
+set d_strlcat
+eval $trylink
+
diff --git a/mcon/U/d_strlcpy.U b/mcon/U/d_strlcpy.U
new file mode 100644
index 0000000..85cc988
--- /dev/null
+++ b/mcon/U/d_strlcpy.U
@@ -0,0 +1,38 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 2006, Christian Biere
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:d_strlcpy: Trylink cat
+?MAKE: -pick add $@ %<
+?S:d_strlcpy:
+?S: This variable conditionally defines the HAS_STRLCPY symbol, which
+?S: indicates to the C program that the strlcpy() routine is available.
+?S:.
+?C:HAS_STRLCPY:
+?C: This symbol, if defined, indicates that the strlcpy routine is
+?C: available.
+?C:.
+?H:#$d_strlcpy HAS_STRLCPY /**/
+?H:.
+?LINT:set d_strlcpy
+: see if strlcpy exists
+$cat >try.c <<EOC
+#include <string.h>
+int main(void)
+{
+ static size_t ret, size;
+ static char dst;
+ ret |= strlcpy(&dst, "src", size);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=strlcpy
+set d_strlcpy
+eval $trylink
+
diff --git a/mcon/U/d_strstr.U b/mcon/U/d_strstr.U
new file mode 100644
index 0000000..8cf8f7a
--- /dev/null
+++ b/mcon/U/d_strstr.U
@@ -0,0 +1,41 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_strstr.U,v $
+?RCS: Revision 3.0 1993/08/18 12:07:37 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_strstr: Trylink cat
+?MAKE: -pick add $@ %<
+?S:d_strstr:
+?S: This variable conditionally defines HAS_STRSTR if strstr() is
+?S: available to find substrings.
+?S:.
+?C:HAS_STRSTR (STRSTR):
+?C: This symbol, if defined, indicates that the strstr routine is
+?C: available to find substrings.
+?C:.
+?H:#$d_strstr HAS_STRSTR /**/
+?H:.
+?LINT:set d_strstr
+: see if strstr exists
+$cat >try.c <<EOC
+#include <string.h>
+int main(void)
+{
+ static char ret;
+ ret |= *strstr("abc", "b");
+ return ret ? 0 : 1;
+}
+EOC
+cyn=strstr
+set d_strstr
+eval $trylink
+
diff --git a/mcon/U/d_strtod.U b/mcon/U/d_strtod.U
new file mode 100644
index 0000000..effb49c
--- /dev/null
+++ b/mcon/U/d_strtod.U
@@ -0,0 +1,48 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1996, Andy Dougherty
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_strtod.U,v $
+?RCS: Revision 3.0.1.1 1997/02/28 15:46:36 ram
+?RCS: patch61: created
+?RCS:
+?RCS:
+?MAKE:d_strtod: Trylink cat i_stdlib
+?MAKE: -pick add $@ %<
+?S:d_strtod:
+?S: This variable conditionally defines the HAS_STRTOD symbol, which
+?S: indicates to the C program that the strtod() routine is available
+?S: to provide better numeric string conversion than atof().
+?S:.
+?C:HAS_STRTOD (STRTOD):
+?C: This symbol, if defined, indicates that the strtod routine is
+?C: available to provide better numeric string conversion than atof().
+?C:.
+?H:#$d_strtod HAS_STRTOD /**/
+?H:.
+?LINT:set d_strtod
+: see if strtod exists
+$cat >try.c <<EOC
+#$i_stdlib I_STDLIB
+#ifdef I_STDLIB
+#include <stdlib.h>
+#endif
+int main(void)
+{
+ static double ret;
+ static char *endptr;
+ ret = strtod("1.0", &endptr) * 1.0;
+ return ret ? 0 : 1;
+}
+EOC
+cyn=strtod
+set d_strtod
+eval $trylink
+
diff --git a/mcon/U/d_strtok.U b/mcon/U/d_strtok.U
new file mode 100644
index 0000000..fc6a8ec
--- /dev/null
+++ b/mcon/U/d_strtok.U
@@ -0,0 +1,45 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_strtok.U,v $
+?RCS: Revision 3.0 1993/08/18 12:07:38 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: The strtok routine now appears to be a standard one, but it was
+?X: missing in early BSD systems.
+?X:
+?MAKE:d_strtok: Trylink cat
+?MAKE: -pick add $@ %<
+?S:d_strtok:
+?S: This variable conditionally defines HAS_STRTOK if strtok() is
+?S: available to scan strings for tokens.
+?S:.
+?C:HAS_STRTOK (STRTOK):
+?C: This symbol, if defined, indicates that the strtok routine is
+?C: available to scan strings for tokens.
+?C:.
+?H:#$d_strtok HAS_STRTOK /**/
+?H:.
+?LINT:set d_strtok
+: see if strtok exists
+$cat >try.c <<EOC
+#include <string.h>
+int main(void)
+{
+ static char s[] = "a.b.c", ret;
+ ret |= *strtok(s, ".");
+ return ret ? 0 : 1;
+}
+EOC
+cyn=strtok
+set d_strtok
+eval $trylink
+
diff --git a/mcon/U/d_strtol.U b/mcon/U/d_strtol.U
new file mode 100644
index 0000000..15a1965
--- /dev/null
+++ b/mcon/U/d_strtol.U
@@ -0,0 +1,46 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_strtol.U,v $
+?RCS: Revision 3.0 1993/08/18 12:07:39 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_strtol: Trylink cat i_stdlib
+?MAKE: -pick add $@ %<
+?S:d_strtol:
+?S: This variable conditionally defines the HAS_STRTOL symbol, which
+?S: indicates to the C program that the strtol() routine is available
+?S: to provide better numeric string conversion than atoi() and friends.
+?S:.
+?C:HAS_STRTOL (STRTOL):
+?C: This symbol, if defined, indicates that the strtol routine is available
+?C: to provide better numeric string conversion than atoi() and friends.
+?C:.
+?H:#$d_strtol HAS_STRTOL /**/
+?H:.
+?LINT:set d_strtol
+: see if strtol exists
+$cat >try.c <<EOC
+#$i_stdlib I_STDLIB
+#ifdef I_STDLIB
+#include <stdlib.h>
+#endif
+int main(void)
+{
+ static long ret;
+ static char *endptr;
+ ret |= strtol("1234", &endptr, 10);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=strtol
+set d_strtol
+eval $trylink
+
diff --git a/mcon/U/d_strtoul.U b/mcon/U/d_strtoul.U
new file mode 100644
index 0000000..83f882a
--- /dev/null
+++ b/mcon/U/d_strtoul.U
@@ -0,0 +1,48 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1996, Andy Dougherty
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_strtoul.U,v $
+?RCS: Revision 3.0.1.1 1997/02/28 15:46:43 ram
+?RCS: patch61: created
+?RCS:
+?RCS:
+?MAKE:d_strtoul: Trylink cat i_stdlib
+?MAKE: -pick add $@ %<
+?S:d_strtoul:
+?S: This variable conditionally defines the HAS_STRTOUL symbol, which
+?S: indicates to the C program that the strtoul() routine is available
+?S: to provide conversion of strings to unsigned long.
+?S:.
+?C:HAS_STRTOUL (STRTOUL):
+?C: This symbol, if defined, indicates that the strtoul routine is
+?C: available to provide conversion of strings to unsigned long.
+?C:.
+?H:#$d_strtoul HAS_STRTOUL /**/
+?H:.
+?LINT:set d_strtoul
+: see if strtoul exists
+$cat >try.c <<EOC
+#$i_stdlib I_STDLIB
+#ifdef I_STDLIB
+#include <stdlib.h>
+#endif
+int main(void)
+{
+ static unsigned long ret;
+ static char *endptr;
+ ret |= strtoul("1234", &endptr, 10);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=strtoul
+set d_strtoul
+eval $trylink
+
diff --git a/mcon/U/d_strxfrm.U b/mcon/U/d_strxfrm.U
new file mode 100644
index 0000000..f94a7e9
--- /dev/null
+++ b/mcon/U/d_strxfrm.U
@@ -0,0 +1,44 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu>
+?RCS:
+?RCS: $Log: d_strxfrm.U,v $
+?RCS: Revision 3.0.1.1 1994/08/29 16:12:04 ram
+?RCS: patch32: created by ADO
+?RCS:
+?MAKE:d_strxfrm: Trylink cat
+?MAKE: -pick add $@ %<
+?S:d_strxfrm:
+?S: This variable conditionally defines HAS_STRXFRM if strxfrm() is
+?S: available to transform strings.
+?S:.
+?C:HAS_STRXFRM:
+?C: This symbol, if defined, indicates that the strxfrm() routine is
+?C: available to transform strings.
+?C:.
+?H:#$d_strxfrm HAS_STRXFRM /**/
+?H:.
+?LINT:set d_strxfrm
+: see if strxfrm exists
+$cat >try.c <<EOC
+#include <string.h>
+int main(void)
+{
+ static size_t ret, n;
+ static char dst[] = "xxx", *src;
+ ret |= strxfrm(dst, src, n);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=strxfrm
+set d_strxfrm
+eval $trylink
+
diff --git a/mcon/U/d_su_chown.U b/mcon/U/d_su_chown.U
new file mode 100644
index 0000000..2c9c451
--- /dev/null
+++ b/mcon/U/d_su_chown.U
@@ -0,0 +1,41 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_su_chown.U,v $
+?RCS: Revision 3.0 1993/08/18 12:07:40 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_su_chown: Csym Setvar
+?MAKE: -pick add $@ %<
+?S:d_su_chown (d_rootchown):
+?S: This variable conditionally defines the SU_CHOWN symbol, which
+?S: indicates to the C program that only root can chown() the owner
+?S: of a file.
+?S:.
+?C:SU_CHOWN (ROOT_CHOWN):
+?C: This symbol, if defined, indicates that the system allows only root
+?C: can change the owner of a file with chown().
+?C:.
+?H:#$d_su_chown SU_CHOWN /**/
+?H:.
+?LINT:set d_su_chown
+: see if 'chown()' is restricted.
+: but not too hard, as it is late and I am tired. -- HMS
+echo " "
+if set setreuid val -f d_su_chown; eval $csym; $val; then
+ echo 'It looks like only root can chown() the owner of a file.' >&4
+ val="$define"
+else
+ echo 'It looks like root or the owner can chown() a file away.' >&4
+ val="$undef"
+fi
+set d_su_chown
+eval $setvar
+
diff --git a/mcon/U/d_symlink.U b/mcon/U/d_symlink.U
new file mode 100644
index 0000000..bd10478
--- /dev/null
+++ b/mcon/U/d_symlink.U
@@ -0,0 +1,45 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_symlink.U,v $
+?RCS: Revision 3.0 1993/08/18 12:07:41 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_symlink: Trylink cat i_unistd
+?MAKE: -pick add $@ %<
+?S:d_symlink:
+?S: This variable conditionally defines the HAS_SYMLINK symbol, which
+?S: indicates to the C program that the symlink() routine is available
+?S: to create symbolic links.
+?S:.
+?C:HAS_SYMLINK (SYMLINK):
+?C: This symbol, if defined, indicates that the symlink routine is available
+?C: to create symbolic links.
+?C:.
+?H:#$d_symlink HAS_SYMLINK /**/
+?H:.
+?LINT:set d_symlink
+: see if symlink exists
+$cat >try.c <<EOC
+#$i_unistd I_UNISTD
+#ifdef I_UNISTD
+#include <unistd.h>
+#endif
+int main(void)
+{
+ static int ret;
+ ret |= symlink("name1", "name2");
+ return ret ? 0 : 1;
+}
+EOC
+cyn=symlink
+set d_symlink
+eval $trylink
+
diff --git a/mcon/U/d_sync_atomic.U b/mcon/U/d_sync_atomic.U
new file mode 100644
index 0000000..1a33ea1
--- /dev/null
+++ b/mcon/U/d_sync_atomic.U
@@ -0,0 +1,42 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 2011, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:d_sync_atomic: Trylink cat
+?MAKE: -pick add $@ %<
+?S:d_sync_atomic:
+?S: This variable conditionally defines the HAS_SYNC_ATOMIC symbol, which
+?S: indicates to the C program that __sync_xxx() atomic operations are
+?S: made available by the compiler.
+?S:.
+?C:HAS_SYNC_ATOMIC:
+?C: This symbol, if defined, indicates that __sync_xxx() atomic operations
+?C: are made available by the compiler, namely __sync_synchronize() to
+?C: issue a memory barrieer, __sync_bool_compare_and_swap() for issuing a
+?C: test-and-set and __sync_fetch_and_add() for atomic increases of values.
+?C:.
+?H:#$d_sync_atomic HAS_SYNC_ATOMIC /**/
+?H:.
+?LINT:set d_sync_atomic
+: check for __sync_synchronize and friends
+$cat >try.c <<EOC
+int main(void)
+{
+ static int ret;
+ int i;
+ __sync_synchronize();
+ ret |= __sync_bool_compare_and_swap(&i, 0, 1);
+ ret += __sync_fetch_and_add(&i, 1);
+ return ret;
+}
+EOC
+cyn="whether atomic memory operations are possible"
+set d_sync_atomic
+eval $trylink
+
diff --git a/mcon/U/d_syscall.U b/mcon/U/d_syscall.U
new file mode 100644
index 0000000..868f25b
--- /dev/null
+++ b/mcon/U/d_syscall.U
@@ -0,0 +1,45 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_syscall.U,v $
+?RCS: Revision 3.0 1993/08/18 12:07:42 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_syscall: Trylink cat i_unistd
+?MAKE: -pick add $@ %<
+?S:d_syscall:
+?S: This variable conditionally defines HAS_SYSCALL if syscall() is
+?S: available call arbitrary system calls.
+?S:.
+?C:HAS_SYSCALL (SYSCALL):
+?C: This symbol, if defined, indicates that the syscall routine is
+?C: available to call arbitrary system calls. If undefined, that's tough.
+?C:.
+?H:#$d_syscall HAS_SYSCALL /**/
+?H:.
+?LINT:set d_syscall
+: see if syscall exists
+$cat >try.c <<EOC
+#include <sys/syscall.h>
+#$i_unistd I_UNISTD
+#ifdef I_UNISTD
+#include <unistd.h>
+#endif
+int main(void)
+{
+ static int ret, number;
+ ret |= syscall(number, 0);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=syscall
+set d_syscall
+eval $trylink
+
diff --git a/mcon/U/d_sysconf.U b/mcon/U/d_sysconf.U
new file mode 100644
index 0000000..f02d7cc
--- /dev/null
+++ b/mcon/U/d_sysconf.U
@@ -0,0 +1,47 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu>
+?RCS:
+?RCS: $Log: d_sysconf.U,v $
+?RCS: Revision 3.0.1.1 1994/10/29 16:15:57 ram
+?RCS: patch36: created by ADO
+?RCS:
+?MAKE:d_sysconf: Trylink cat i_unistd
+?MAKE: -pick add $@ %<
+?S:d_sysconf:
+?S: This variable conditionally defines the HAS_SYSCONF symbol, which
+?S: indicates to the C program that the sysconf() routine is available
+?S: to determine system related limits and options.
+?S:.
+?C:HAS_SYSCONF:
+?C: This symbol, if defined, indicates that sysconf() is available
+?C: to determine system related limits and options.
+?C:.
+?H:#$d_sysconf HAS_SYSCONF /**/
+?H:.
+?LINT:set d_sysconf
+: see if sysconf exists
+$cat >try.c <<EOC
+#$i_unistd I_UNISTD
+#ifdef I_UNISTD
+#include <unistd.h>
+#endif
+int main(void)
+{
+ static long ret;
+ ret |= sysconf(1);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=sysconf
+set d_sysconf
+eval $trylink
+
diff --git a/mcon/U/d_sysctl.U b/mcon/U/d_sysctl.U
new file mode 100644
index 0000000..8628871
--- /dev/null
+++ b/mcon/U/d_sysctl.U
@@ -0,0 +1,41 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 2006, Christian Biere
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:d_sysctl: Trylink cat
+?MAKE: -pick add $@ %<
+?S:d_sysctl:
+?S: This variable conditionally defines the HAS_SYSCTL symbol, which
+?S: indicates to the C program that the sysctl() routine is available.
+?S:.
+?C:HAS_SYSCTL:
+?C: This symbol, if defined, indicates that the sysctl routine is
+?C: available.
+?C:.
+?H:#$d_sysctl HAS_SYSCTL /**/
+?H:.
+?LINT:set d_sysctl
+: see if sysctl exists
+$cat >try.c <<EOC
+#include <sys/param.h>
+#include <sys/sysctl.h>
+int main(void)
+{
+ static int ret, name;
+ static unsigned int namelen;
+ static void *oldp, *newp;
+ static size_t oldlen, newlen;
+ ret |= sysctl(&name, namelen, oldp, &oldlen, newp, newlen);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=sysctl
+set d_sysctl
+eval $trylink
+
diff --git a/mcon/U/d_syslog.U b/mcon/U/d_syslog.U
new file mode 100644
index 0000000..e5e8b75
--- /dev/null
+++ b/mcon/U/d_syslog.U
@@ -0,0 +1,45 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_syslog.U,v $
+?RCS: Revision 3.0.1.1 1997/02/28 15:46:56 ram
+?RCS: patch61: replaced .o with $_o all over the place
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:07:43 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_syslog: Trylink cat
+?MAKE: -pick add $@ %<
+?S:d_syslog:
+?S: This variable conditionally defines the HAS_SYSLOG symbol, which
+?S: indicates to the C program that syslog() exists on this system.
+?S:.
+?C:HAS_SYSLOG (LIBSYSLOG):
+?C: This symbol, if defined, indicates that the program can rely on the
+?C: system providing syslog(). Otherwise, the syslog code provided by
+?C: the package should be used.
+?C:.
+?H:#$d_syslog HAS_SYSLOG /**/
+?H:.
+?LINT:set d_syslog
+: see if syslog is available
+$cat >try.c <<EOC
+#include <syslog.h>
+int main(void)
+{
+ static int priority;
+ syslog(priority, "%s", "msg");
+ return 0;
+}
+EOC
+cyn=syslog
+set d_syslog
+eval $trylink
+
diff --git a/mcon/U/d_system.U b/mcon/U/d_system.U
new file mode 100644
index 0000000..f803f01
--- /dev/null
+++ b/mcon/U/d_system.U
@@ -0,0 +1,44 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_system.U,v $
+?RCS: Revision 3.0 1993/08/18 12:07:44 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_system: Trylink cat i_stdlib
+?MAKE: -pick add $@ %<
+?S:d_system:
+?S: This variable conditionally defines HAS_SYSTEM if system() is
+?S: available to issue a shell command.
+?S:.
+?C:HAS_SYSTEM (SYSTEM):
+?C: This symbol, if defined, indicates that the system routine is
+?C: available to issue a shell command.
+?C:.
+?H:#$d_system HAS_SYSTEM /**/
+?H:.
+?LINT:set d_system
+: see if system exists
+$cat >try.c <<EOC
+#$i_stdlib I_STDLIB
+#ifdef I_STDLIB
+#include <stdlib.h>
+#endif
+int main(void)
+{
+ static int ret;
+ ret |= system("command");
+ return ret ? 0 : 1;
+}
+EOC
+cyn=system
+set d_system
+eval $trylink
+
diff --git a/mcon/U/d_table.U b/mcon/U/d_table.U
new file mode 100644
index 0000000..d5a32f9
--- /dev/null
+++ b/mcon/U/d_table.U
@@ -0,0 +1,45 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_table.U,v $
+?RCS: Revision 3.0.1.2 1993/11/10 17:34:14 ram
+?RCS: patch14: wrongly mentioned an obsolete symbol
+?RCS:
+?RCS: Revision 3.0.1.1 1993/10/16 13:49:29 ram
+?RCS: patch12: created
+?RCS:
+?MAKE:d_table: Trylink cat
+?MAKE: -pick add $@ %<
+?S:d_table:
+?S: This variable conditionally defines HAS_TABLE if table() is
+?S: available to examine/update elements from a system table.
+?S:.
+?C:HAS_TABLE:
+?C: This symbol, if defined, indicates that the OSF/1 table() system
+?C: call is available to examine/update items from a system table.
+?C:.
+?H:#$d_table HAS_TABLE /**/
+?H:.
+?LINT:set d_table
+: see if table exists
+$cat >try.c <<EOC
+#include <sys/table.h>
+int main(void)
+{
+ static int ret;
+ static void *addr;
+ ret |= table(1, 2L, addr, 3L, 4L, 5L);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=table
+set d_table
+eval $trylink
+
diff --git a/mcon/U/d_tcgtpgrp.U b/mcon/U/d_tcgtpgrp.U
new file mode 100644
index 0000000..5800911
--- /dev/null
+++ b/mcon/U/d_tcgtpgrp.U
@@ -0,0 +1,48 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu>
+?RCS:
+?RCS: $Log: d_tcgtpgrp.U,v $
+?RCS: Revision 3.0.1.1 1994/08/29 16:12:08 ram
+?RCS: patch32: created by ADO
+?RCS:
+?MAKE:d_tcgetpgrp: Trylink cat i_unistd
+?MAKE: -pick add $@ %<
+?S:d_tcgetpgrp:
+?S: This variable conditionally defines the HAS_TCGETPGRP symbol, which
+?S: indicates to the C program that the tcgetpgrp() routine is available.
+?S: to get foreground process group ID.
+?S:.
+?C:HAS_TCGETPGRP :
+?C: This symbol, if defined, indicates that the tcgetpgrp routine is
+?C: available to get foreground process group ID.
+?C:.
+?H:#$d_tcgetpgrp HAS_TCGETPGRP /**/
+?H:.
+?LINT:set d_tcgetpgrp
+: see if tcgetpgrp exists
+$cat >try.c <<EOC
+#include <sys/types.h>
+#$i_unistd I_UNISTD
+#ifdef I_UNISTD
+#include <unistd.h>
+#endif
+int main(void)
+{
+ static pid_t ret;
+ ret |= tcgetpgrp(1);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=tcgetpgrp
+set d_tcgetpgrp
+eval $trylink
+
diff --git a/mcon/U/d_tcstpgrp.U b/mcon/U/d_tcstpgrp.U
new file mode 100644
index 0000000..5c0dbbd
--- /dev/null
+++ b/mcon/U/d_tcstpgrp.U
@@ -0,0 +1,49 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu>
+?RCS:
+?RCS: $Log: d_tcstpgrp.U,v $
+?RCS: Revision 3.0.1.1 1994/08/29 16:12:11 ram
+?RCS: patch32: created by ADO
+?RCS:
+?MAKE:d_tcsetpgrp: Trylink cat i_unistd
+?MAKE: -pick add $@ %<
+?S:d_tcsetpgrp:
+?S: This variable conditionally defines the HAS_TCSETPGRP symbol, which
+?S: indicates to the C program that the tcsetpgrp() routine is available
+?S: to set foreground process group ID.
+?S:.
+?C:HAS_TCSETPGRP :
+?C: This symbol, if defined, indicates that the tcsetpgrp routine is
+?C: available to set foreground process group ID.
+?C:.
+?H:#$d_tcsetpgrp HAS_TCSETPGRP /**/
+?H:.
+?LINT:set d_tcsetpgrp
+: see if tcsetpgrp exists
+$cat >try.c <<EOC
+#include <sys/types.h>
+#$i_unistd I_UNISTD
+#ifdef I_UNISTD
+#include <unistd.h>
+#endif
+int main(void)
+{
+ static int fd, ret;
+ static pid_t pid;
+ ret |= tcsetpgrp(fd, pid);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=tcsetpgrp
+set d_tcsetpgrp
+eval $trylink
+
diff --git a/mcon/U/d_time.U b/mcon/U/d_time.U
new file mode 100644
index 0000000..b783560
--- /dev/null
+++ b/mcon/U/d_time.U
@@ -0,0 +1,66 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_time.U,v $
+?RCS: Revision 3.0.1.2 1995/07/25 14:07:43 ram
+?RCS: patch56: typo fix, sytem -> system
+?RCS:
+?RCS: Revision 3.0.1.1 1994/10/29 16:16:38 ram
+?RCS: patch36: now uses new Typedef unit to compute type information (ADO)
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:07:45 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X: Maybe <sys/types.h> should be included?
+?X:INC: i_systypes
+?MAKE:d_time timetype: Csym Setvar Findhdr Myread Typedef
+?MAKE: -pick add $@ %<
+?S:d_time:
+?S: This variable conditionally defines the HAS_TIME symbol, which indicates
+?S: that the time() routine exists. The time() routine is normally
+?S: provided on UNIX systems.
+?S:.
+?S:timetype:
+?S: This variable holds the type returned by time(). It can be long,
+?S: or time_t on BSD sites (in which case <sys/types.h> should be
+?S: included). Anyway, the type Time_t should be used.
+?S:.
+?C:HAS_TIME (TIMER):
+?C: This symbol, if defined, indicates that the time() routine exists.
+?C:.
+?C:Time_t (TIMETYPE):
+?C: This symbol holds the type returned by time(). It can be long,
+?C: or time_t on BSD sites (in which case <sys/types.h> should be
+?C: included).
+?C:.
+?H:#$d_time HAS_TIME /**/
+?H:#define Time_t $timetype /* Time type */
+?H:.
+?LINT:set d_time
+: see if time exists
+echo " "
+if set time val -f d_time; eval $csym; $val; then
+ echo 'time() found.' >&4
+ val="$define"
+ set time_t timetype long stdio.h sys/types.h
+ eval $typedef
+ dflt="$timetype"
+ echo " "
+ rp="What type is returned by time() on this system?"
+ . ./myread
+ timetype="$ans"
+else
+ echo 'time() not found, hope that will do.' >&4
+ val="$undef"
+ timetype='int';
+fi
+set d_time
+eval $setvar
+
diff --git a/mcon/U/d_times.U b/mcon/U/d_times.U
new file mode 100644
index 0000000..fcaa405
--- /dev/null
+++ b/mcon/U/d_times.U
@@ -0,0 +1,74 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_times.U,v $
+?RCS: Revision 3.0.1.2 1995/07/25 14:07:50 ram
+?RCS: patch56: typo fix, sytem -> system
+?RCS:
+?RCS: Revision 3.0.1.1 1994/08/29 16:14:00 ram
+?RCS: patch32: now uses new Typedef unit to compute type information
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:07:46 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: What is the type returned by times() ?
+?X:
+?X: Force inclusion of <sys/types.h>
+?X:INC: i_systypes
+?MAKE:d_times clocktype: Csym Myread Typedef i_systimes
+?MAKE: -pick add $@ %<
+?S:d_times:
+?S: This variable conditionally defines the HAS_TIMES symbol, which indicates
+?S: that the times() routine exists. The times() routine is normally
+?S: provided on UNIX systems. You may have to include <sys/times.h>.
+?S:.
+?S:clocktype:
+?S: This variable holds the type returned by times(). It can be long,
+?S: or clock_t on BSD sites (in which case <sys/types.h> should be
+?S: included).
+?S:.
+?C:HAS_TIMES (TIMES):
+?C: This symbol, if defined, indicates that the times() routine exists.
+?C: Note that this became obsolete on some systems (SUNOS), which now
+?C: use getrusage(). It may be necessary to include <sys/times.h>.
+?C:.
+?C:Clock_t (CLOCKTYPE):
+?C: This symbol holds the type returned by times(). It can be long,
+?C: or clock_t on BSD sites (in which case <sys/types.h> should be
+?C: included).
+?C:.
+?H:#$d_times HAS_TIMES /**/
+?H:#define Clock_t $clocktype /* Clock time */
+?H:.
+?T:val inc
+: see if times exists
+echo " "
+if set times val -f d_times; eval $csym; $val; then
+ echo 'times() found.' >&4
+ d_times="$define"
+ inc=''
+ case "$i_systimes" in
+ "$define") inc='sys/times.h';;
+ esac
+ set clock_t clocktype long stdio.h sys/types.h $inc
+ eval $typedef
+ dflt="$clocktype"
+ echo " "
+ rp="What type is returned by times() on this system?"
+ . ./myread
+ clocktype="$ans"
+else
+ echo 'times() NOT found, hope that will do.' >&4
+ d_times="$undef"
+?X: The following is needed for typedef (won't like an empty variable)
+ clocktype='int'
+fi
+
diff --git a/mcon/U/d_tminsys.U b/mcon/U/d_tminsys.U
new file mode 100644
index 0000000..60fc95a
--- /dev/null
+++ b/mcon/U/d_tminsys.U
@@ -0,0 +1,41 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_tminsys.U,v $
+?RCS: Revision 3.0 1993/08/18 12:07:47 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_tminsys: contains Setvar Findhdr
+?MAKE: -pick add $@ %<
+?S:d_tminsys:
+?S: This variable conditionally defines TM_IN_SYS if this system
+?S: declares "struct tm" in <sys/time.h> rather than <time.h>.
+?S:.
+?C:TM_IN_SYS (TMINSYS):
+?C: This symbol is defined if this system declares "struct tm" in
+?C: in <sys/time.h> rather than <time.h>. We can't just say
+?C: -I/usr/include/sys because some systems have both time files, and
+?C: the -I trick gets the wrong one.
+?C:.
+?H:#$d_tminsys TM_IN_SYS /**/
+?H:.
+?LINT:set d_tminsys
+: see if struct tm is defined in sys/time.h
+echo " "
+if $contains 'struct tm' `./findhdr time.h` >/dev/null 2>&1 ; then
+ echo "You have struct tm defined in <time.h> rather than <sys/time.h>." >&4
+ val="$undef"
+else
+ echo "You have struct tm defined in <sys/time.h> rather than <time.h>." >&4
+ val="$define"
+fi
+set d_tminsys
+eval $setvar
+
diff --git a/mcon/U/d_truncate.U b/mcon/U/d_truncate.U
new file mode 100644
index 0000000..31a7419
--- /dev/null
+++ b/mcon/U/d_truncate.U
@@ -0,0 +1,46 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_truncate.U,v $
+?RCS: Revision 3.0 1993/08/18 12:07:48 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_truncate: Trylink cat i_unistd
+?MAKE: -pick add $@ %<
+?S:d_truncate:
+?S: This variable conditionally defines HAS_TRUNCATE if truncate() is
+?S: available to truncate files.
+?S:.
+?C:HAS_TRUNCATE (TRUNCATE):
+?C: This symbol, if defined, indicates that the truncate routine is
+?C: available to truncate files.
+?C:.
+?H:#$d_truncate HAS_TRUNCATE /**/
+?H:.
+?LINT:set d_truncate
+: see if truncate exists
+$cat >try.c <<EOC
+#include <sys/types.h>
+#$i_unistd I_UNISTD
+#ifdef I_UNISTD
+#include <unistd.h>
+#endif
+int main(void)
+{
+ static int ret;
+ static off_t length;
+ ret |= truncate("path", length);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=truncate
+set d_truncate
+eval $trylink
+
diff --git a/mcon/U/d_ttyname.U b/mcon/U/d_ttyname.U
new file mode 100644
index 0000000..06f6de0
--- /dev/null
+++ b/mcon/U/d_ttyname.U
@@ -0,0 +1,47 @@
+?RCS: $Id: d_backtrace.U 65 2011-01-01 22:01:00Z rmanfredi $
+?RCS:
+?RCS: Copyright (c) 2011, Raphael Manfredi
+?RCS: Copyright (c) 2011, Christian Biere
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_semget.U,v $
+?RCS:
+?MAKE:d_ttyname: Trylink cat i_unistd
+?MAKE: -pick add $@ %<
+?S:d_ttyname:
+?S: This variable conditionally defines the HAS_TTYNAME symbol, which
+?S: indicates to the C program that the ttyname() routine is available
+?S: to determine the pathname of the terminal associated with
+?S: a file descriptor.
+?S:.
+?C:HAS_TTYNAME:
+?C: This symbol, if defined, indicates that the ttyname() routine is
+?C: available to determine the pathname of the terminal associated with
+?C: a file descriptor. The <unistd.h> header must be included to use
+?C: this routine.
+?C:.
+?H:#$d_ttyname HAS_TTYNAME /**/
+?H:.
+?LINT:set d_ttyname
+: see if ttyname exists
+$cat >try.c <<EOC
+#$i_unistd I_UNISTD
+#ifdef I_UNISTD
+#include <unistd.h>
+#endif
+int main(void)
+{
+ char *name = ttyname(1);
+ char c = *ttyname(2);
+ return name[0] == c ? 0 : 1;
+}
+EOC
+cyn=ttyname
+set d_ttyname
+eval $trylink
+
diff --git a/mcon/U/d_tzmin.U b/mcon/U/d_tzmin.U
new file mode 100644
index 0000000..a78e53b
--- /dev/null
+++ b/mcon/U/d_tzmin.U
@@ -0,0 +1,53 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_tzmin.U,v $
+?RCS: Revision 3.0.1.1 1994/10/29 16:16:58 ram
+?RCS: patch36: call ./bsd explicitly instead of relying on PATH
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:07:49 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_tzmin: contains cppstdin cppminus timeincl rm Setvar Guess
+?MAKE: -pick add $@ %<
+?S:d_tzmin:
+?S: This symbol conditionally defines TZ_MINUTESWEST if the system uses
+?S: tz_minuteswest in time header instead of timezone.
+?S:.
+?C:TZ_MINUTESWEST:
+?C: This symbol is defined if this system uses tz_minuteswest
+?C: in time header instead of timezone.
+?C: If not defined, you may have to use struct timeb and ftime() rather
+?C: than the new gettimeofday() system call.
+?C:.
+?H:#$d_tzmin TZ_MINUTESWEST /**/
+?H:.
+?LINT:set d_tzmin
+: see if tz_minuteswest is defined in time header
+echo " "
+val="$undef"
+$cppstdin $cppminus < $timeincl > try 2>&1
+if $contains 'tz_minuteswest' try >/dev/null 2>&1; then
+echo "You have tz_minuteswest defined in $timeincl rather than timezone." >&4
+ val="$define"
+elif $contains 'timezone' try >/dev/null 2>&1; then
+echo "You have timezone defined in $timeincl rather than tz_minuteswest." >&4
+else
+ echo "Your $timeincl file looks strange." >&4
+fi
+if ./bsd; then
+ case "$d_tzmin" in
+ "$undef") echo "(Maybe your system is an USG one after all?)";;
+ esac
+fi
+set d_tzmin
+eval $setvar
+$rm -f try
+
diff --git a/mcon/U/d_tzname.U b/mcon/U/d_tzname.U
new file mode 100644
index 0000000..08ebc73
--- /dev/null
+++ b/mcon/U/d_tzname.U
@@ -0,0 +1,45 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_tzname.U,v $
+?RCS: Revision 3.0.1.2 1994/08/29 16:14:43 ram
+?RCS: patch32: forgot to set proper value in the val variable
+?RCS:
+?RCS: Revision 3.0.1.1 1994/06/20 06:57:55 ram
+?RCS: patch30: created
+?RCS:
+?MAKE:d_tzname: Trylink cat
+?MAKE: -pick add $@ %<
+?S:d_tzname:
+?S: This variable conditionally defines HAS_TZNAME if tzname[] is
+?S: available to access timezone names.
+?S:.
+?C:HAS_TZNAME:
+?C: This symbol, if defined, indicates that the tzname[] array is
+?C: available to access timezone names.
+?C:.
+?H:#$d_tzname HAS_TZNAME /**/
+?H:.
+?LINT:set d_tzname
+: see if tzname[] exists
+$cat >try.c <<EOC
+#include <time.h>
+int main(void)
+{
+ extern char *tzname[];
+ static char c;
+ c |= *tzname[0];
+ return c ? 0 : 1;
+}
+EOC
+cyn=tzname
+set d_tzname
+eval $trylink
+
diff --git a/mcon/U/d_uctx_mctx.U b/mcon/U/d_uctx_mctx.U
new file mode 100644
index 0000000..3e60723
--- /dev/null
+++ b/mcon/U/d_uctx_mctx.U
@@ -0,0 +1,44 @@
+?RCS:
+?RCS: Copyright (c) 2012 Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:d_uctx_mctx: Trylink cat i_ucontext i_sys_ucontext
+?MAKE: -pick add $@ %<
+?S:d_uctx_mctx:
+?S: This variable conditionally defines the HAS_UCONTEXT_MCONTEXT symbol,
+?S: which indicates to the C program that it can access general registers
+?S: through some field in ucontext->uc_mcontext.
+?S:.
+?C:HAS_UCONTEXT_MCONTEXT:
+?C: This symbol, if defined, indicates that the C program can access the
+?C: processor's general registers through some field in the uc_mcontext
+?C: machine context field from the ucontext_t structure.
+?C:.
+?H:#$d_uctx_mctx HAS_UCONTEXT_MCONTEXT /**/
+?H:.
+?LINT:set d_uctx_mctx
+: check for machine context field in the ucontext structure
+$cat >try.c <<EOC
+#$i_ucontext I_UCONTEXT
+#$i_sys_ucontext I_SYS_UCONTEXT
+#ifdef I_UCONTEXT
+#include <ucontext.h>
+#endif
+#ifdef I_SYS_UCONTEXT
+#include <sys/ucontext.h>
+#endif
+int main(void)
+{
+ static ucontext_t *uc = 0;
+ return (int) &uc->uc_mcontext;
+}
+EOC
+cyn="whether 'struct ucontext' has a 'uc_mcontext' member"
+set d_uctx_mctx
+eval $trylink
+
diff --git a/mcon/U/d_uctx_mctx_gregs.U b/mcon/U/d_uctx_mctx_gregs.U
new file mode 100644
index 0000000..bfd07a0
--- /dev/null
+++ b/mcon/U/d_uctx_mctx_gregs.U
@@ -0,0 +1,44 @@
+?RCS:
+?RCS: Copyright (c) 2012 Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:d_uctx_mctx_gregs: Trylink cat i_ucontext i_sys_ucontext
+?MAKE: -pick add $@ %<
+?S:d_uctx_mctx_gregs:
+?S: This variable conditionally defines the HAS_UCONTEXT_MCONTEXT_GREGS symbol,
+?S: which indicates to the C program that it can access general registers
+?S: through ucontext->uc_mcontext.gregs[].
+?S:.
+?C:HAS_UCONTEXT_MCONTEXT_GREGS:
+?C: This symbol, if defined, indicates that the C program can access the
+?C: processor's general registers through the gregs[] array in the uc_mcontext
+?C: machine context field from the ucontext_t structure.
+?C:.
+?H:#$d_uctx_mctx_gregs HAS_UCONTEXT_MCONTEXT_GREGS /**/
+?H:.
+?LINT:set d_uctx_mctx_gregs
+: check for general register access through the ucontext structure
+$cat >try.c <<EOC
+#$i_ucontext I_UCONTEXT
+#$i_sys_ucontext I_SYS_UCONTEXT
+#ifdef I_UCONTEXT
+#include <ucontext.h>
+#endif
+#ifdef I_SYS_UCONTEXT
+#include <sys/ucontext.h>
+#endif
+int main(void)
+{
+ static ucontext_t uc;
+ return uc.uc_mcontext.gregs[0];
+}
+EOC
+cyn="whether 'struct ucontext' has a 'mcontext.gregs[]' member"
+set d_uctx_mctx_gregs
+eval $trylink
+
diff --git a/mcon/U/d_ulimit.U b/mcon/U/d_ulimit.U
new file mode 100644
index 0000000..66eb545
--- /dev/null
+++ b/mcon/U/d_ulimit.U
@@ -0,0 +1,42 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_ulimit.U,v $
+?RCS: Revision 3.0 1993/08/18 12:07:51 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_ulimit: Trylink cat
+?MAKE: -pick add $@ %<
+?S:d_ulimit:
+?S: This variable conditionally defines HAS_ULIMIT if ulimit() is
+?S: available to get the user limits.
+?S:.
+?C:HAS_ULIMIT (ULIMIT):
+?C: This symbol, if defined, indicates that the ulimit system call is
+?C: available to get the user limits.
+?C:.
+?H:#$d_ulimit HAS_ULIMIT /**/
+?H:.
+?LINT:set d_ulimit
+: see if ulimit exists
+$cat >try.c <<EOC
+#include <ulimit.h>
+int main(void)
+{
+ static long ret;
+ ret |= ulimit(UL_GETFSIZE);
+ ret |= ulimit(UL_SETFSIZE, 1L);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=ulimit
+set d_ulimit
+eval $trylink
+
diff --git a/mcon/U/d_umask.U b/mcon/U/d_umask.U
new file mode 100644
index 0000000..c5867f5
--- /dev/null
+++ b/mcon/U/d_umask.U
@@ -0,0 +1,48 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu>
+?RCS:
+?RCS: $Log: d_umask.U,v $
+?RCS: Revision 3.0.1.1 1994/08/29 16:14:50 ram
+?RCS: patch32: created by ADO
+?RCS:
+?MAKE:d_umask: Trylink cat i_sysstat
+?MAKE: -pick add $@ %<
+?S:d_umask:
+?S: This variable conditionally defines the HAS_UMASK symbol, which
+?S: indicates to the C program that the umask() routine is available.
+?S: to set and get the value of the file creation mask.
+?S:.
+?C:HAS_UMASK :
+?C: This symbol, if defined, indicates that the umask routine is
+?C: available to set and get the value of the file creation mask.
+?C:.
+?H:#$d_umask HAS_UMASK /**/
+?H:.
+?LINT:set d_umask
+: see if umask exists
+$cat >try.c <<EOC
+#include <sys/types.h>
+#$i_sysstat I_SYS_STAT
+#ifdef I_SYS_STAT
+#include <sys/stat.h>
+#endif
+int main(void)
+{
+ mode_t ret, mask;
+ ret |= umask(mask);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=umask
+set d_umask
+eval $trylink
+
diff --git a/mcon/U/d_unsetenv.U b/mcon/U/d_unsetenv.U
new file mode 100644
index 0000000..8fcd511
--- /dev/null
+++ b/mcon/U/d_unsetenv.U
@@ -0,0 +1,38 @@
+?RCS:
+?RCS: Copyright (c) 2015 Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:d_unsetenv: Trylink cat i_stdlib
+?MAKE: -pick add $@ %<
+?S:d_unsetenv:
+?S: This variable conditionally defines the HAS_UNSETENV
+?S: symbol, which indicates to the C program that unsetenv()
+?S: is available to delete an environment variable.
+?S:.
+?C:HAS_UNSETENV:
+?C: This symbol is defined when unsetenv() is available to delete
+?C: an environment variable.
+?C:.
+?H:#$d_unsetenv HAS_UNSETENV
+?H:.
+?LINT: set d_unsetenv
+: do we have unsetenv?
+$cat >try.c <<EOC
+#$i_stdlib I_STDLIB
+#ifdef I_STDLIB
+#include <stdlib.h>
+#endif
+int main(void)
+{
+ return unsetenv("foo");
+}
+EOC
+cyn=unsetenv
+set d_unsetenv
+eval $trylink
+
diff --git a/mcon/U/d_usendir.U b/mcon/U/d_usendir.U
new file mode 100644
index 0000000..4ebf021
--- /dev/null
+++ b/mcon/U/d_usendir.U
@@ -0,0 +1,79 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_usendir.U,v $
+?RCS: Revision 3.0.1.1 1997/02/28 15:47:34 ram
+?RCS: patch61: replaced .a with $_a all over the place
+?RCS: patch61: likewise for .o replaced by $_o
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:07:52 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_usendir i_ndir ndirlib: test Setvar Findhdr d_readdir _a
+?MAKE: -pick add $@ %<
+?S:d_usendir:
+?S: This variable conditionally defines the EMULATE_NDIR symbol, which
+?S: indicates to the C program that it should compile the ndir.c code
+?S: provided with the package.
+?S:.
+?S:i_ndir (d_libndir):
+?S: This variable conditionally defines the I_NDIR symbol, which
+?S: indicates to the C program that it should include the system's
+?S: version of ndir.h, rather than the one with this package.
+?S:.
+?S:ndirlib:
+?S: The name of the library to include at linking stage to resolve ndir
+?S: symbols. It is up to the makefile to use this value.
+?S:.
+?C:EMULATE_NDIR (USENDIR):
+?C: This symbol, if defined, indicates that the program should compile
+?C: the ndir.c code provided with the package.
+?C:.
+?C:I_NDIR (LIBNDIR):
+?C: This symbol, if defined, indicates that the program should include the
+?C: system's version of ndir.h, rather than the one with this package.
+?C:.
+?H:#$d_usendir EMULATE_NDIR /**/
+?H:#$i_ndir I_NDIR /**/
+?H:.
+?T:val2
+?LINT: set d_usendir i_ndir
+: see if there are directory access routines out there
+echo " "
+if $test `./findhdr ndir.h` && \
+ ( $test -r /usr/lib/libndir$_a || $test -r /usr/local/lib/libndir$_a ); then
+ echo "Ndir library found." >&4
+ if $test -r /usr/lib/libndir$_a; then
+ ndirlib='-lndir'
+ else
+ ndirlib="/usr/local/lib/libndir$_a"
+ fi
+ val2="$define"
+ val="$undef"
+else
+ ndirlib=''
+ val2="$undef"
+ case "$d_readdir" in
+ "$define")
+ echo "No ndir library found, but you have readdir() so we'll use that." >&4
+ val="$undef";
+ ;;
+ *)
+ echo "No ndir library found." >&4
+ val="$define"
+ ;;
+ esac
+fi
+set d_usendir
+eval $setvar
+val="$val2"
+set i_ndir
+eval $setvar
+
diff --git a/mcon/U/d_usleep.U b/mcon/U/d_usleep.U
new file mode 100644
index 0000000..f9052a5
--- /dev/null
+++ b/mcon/U/d_usleep.U
@@ -0,0 +1,44 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_usleep.U,v $
+?RCS: Revision 3.0 1993/08/18 12:07:53 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_usleep: Trylink cat i_unistd
+?MAKE: -pick add $@ %<
+?S:d_usleep:
+?S: This variable conditionally defines HAS_USLEEP if usleep() is
+?S: available to do high granularity sleeps.
+?S:.
+?C:HAS_USLEEP (USLEEP):
+?C: This symbol, if defined, indicates that the usleep routine is
+?C: available to let the process sleep on a sub-second accuracy.
+?C:.
+?H:#$d_usleep HAS_USLEEP /**/
+?H:.
+?LINT:set d_usleep
+: see if usleep exists
+$cat >try.c <<EOC
+#$i_unistd I_UNISTD
+#ifdef I_UNISTD
+#include <unistd.h>
+#endif
+int main(void)
+{
+ static unsigned ret;
+ ret |= usleep(1);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=usleep
+set d_usleep
+eval $trylink
+
diff --git a/mcon/U/d_uwait.U b/mcon/U/d_uwait.U
new file mode 100644
index 0000000..3890c3f
--- /dev/null
+++ b/mcon/U/d_uwait.U
@@ -0,0 +1,123 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_uwait.U,v $
+?RCS: Revision 3.0.1.1 1994/01/24 14:10:49 ram
+?RCS: patch16: added knowledge about wait3()
+?RCS: patch16: revised 'union wait' look-up algorithm
+?RCS: patch16: fixed make dependency line accordingly
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:07:54 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_uwait d_uwait3: cat contains cppstdin cppminus +cppflags rm \
+ Setvar Findhdr
+?MAKE: -pick add $@ %<
+?S:d_uwait:
+?S: This symbol conditionally defines UNION_WAIT which indicates to the C
+?S: program that argument for the wait() system call should be declared as
+?S: 'union wait status' instead of 'int status'.
+?S:.
+?S:d_uwait3:
+?S: This symbol conditionally defines UNION_WAIT3 which indicates to the C
+?S: program that the first argument for the wait3() system call should be
+?S: declared as 'union wait status' instead of 'int status'.
+?S:.
+?C:UNION_WAIT:
+?C: This symbol if defined indicates to the C program that the argument
+?C: for the wait() system call should be declared as 'union wait status'
+?C: instead of 'int status'. You probably need to include <sys/wait.h>
+?C: in the former case (see I_SYSWAIT).
+?C:.
+?C:UNION_WAIT3:
+?C: This symbol if defined indicates to the C program that the first argument
+?C: for the wait3() system call should be declared as 'union wait status'
+?C: instead of 'int status'. You probably need to include <sys/wait.h>
+?C: in the former case (see I_SYSWAIT). It seems safe to assume that the
+?C: same rule applies to the second parameter of wait4().
+?C:.
+?H:#$d_uwait UNION_WAIT /**/
+?H:#$d_uwait3 UNION_WAIT3 /**/
+?H:.
+?T:val2 flags f also
+?LINT:set d_uwait d_uwait3
+: see if union wait is available
+echo " "
+?X:
+?X: Unfortunately, we can't just grep <sys/wait.h> for "union wait" because
+?X: some weird systems (did I hear HP-UX?) define union wait only when _BSD
+?X: is defined. The same thing happens on OSF/1, who is pushing weirdness to
+?X: its limits by requiring wait() to use (int *) but wait3() to use
+?X: (union wait *), unless _BSD is defined and -lbsd is used, in which case
+?X: wait() also expects (union wait *). Aaargh!!--RAM
+?X:
+set X $cppflags
+shift
+flags=''
+also=''
+for f in $*; do
+ case "$f" in
+ *NO_PROTO*) ;;
+ *) flags="$flags $f";;
+ esac
+done
+$cat `./findhdr sys/wait.h` /dev/null | \
+ $cppstdin $flags $cppminus >wait.out 2>/dev/null
+if $contains 'union.*wait.*{' wait.out >/dev/null 2>&1 ; then
+ echo "Looks like your <sys/wait.h> knows about 'union wait'..." >&4
+ val="$define"
+@if UNION_WAIT
+ also='also '
+ if $contains 'extern.*wait[ ]*([ ]*int' wait.out >/dev/null 2>&1
+ then
+ echo "But wait() seems to expect an 'int' pointer (POSIX way)." >&4
+ val="$undef"
+ also=''
+ elif $contains 'extern.*wait[ ]*([ ]*union' wait.out >/dev/null 2>&1
+ then
+ echo "And indeed wait() expects an 'union wait' pointer (BSD way)." >&4
+ else
+ echo "So we'll use that for wait()." >&4
+ fi
+@end
+@if UNION_WAIT3 || d_uwait3
+ val2="$define"
+@end
+@if UNION_WAIT3
+ if $contains 'extern.*wait3[ ]*([ ]*int' wait.out >/dev/null 2>&1
+ then
+ echo "However wait3() seems to expect an 'int' pointer, weird." >&4
+ val2="$undef"
+ elif $contains 'extern.*wait3[ ]*([ ]*union' wait.out >/dev/null 2>&1
+ then
+ echo "And wait3() ${also}expects an 'union wait' pointer, fine." >&4
+ else
+ echo "As expected, wait3() ${also}uses an 'union wait' pointer." >&4
+ fi
+@end
+else
+ echo "No trace of 'union wait' in <sys/wait.h>..." >&4
+ val="$undef"
+@if UNION_WAIT && UNION_WAIT3
+ echo "Both wait() and wait3() will use a plain 'int' pointer then." >&4
+@elsif UNION_WAIT
+ echo "Your wait() should be happy with a plain 'int' pointer." >&4
+@elsif UNION_WAIT3
+ echo "Your wait3() should be happy with a plain 'int' pointer." >&4
+@end
+fi
+set d_uwait
+eval $setvar
+@if UNION_WAIT3 || d_uwait3
+val="$val2"; set d_uwait3
+eval $setvar
+@end
+$rm -f wait.out
+
diff --git a/mcon/U/d_vfork.U b/mcon/U/d_vfork.U
new file mode 100644
index 0000000..37b57c9
--- /dev/null
+++ b/mcon/U/d_vfork.U
@@ -0,0 +1,105 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_vfork.U,v $
+?RCS: Revision 3.0.1.6 1994/08/29 16:18:21 ram
+?RCS: patch32: set default to 'y' the first time
+?RCS:
+?RCS: Revision 3.0.1.5 1994/06/20 06:59:14 ram
+?RCS: patch30: usevfork was not always properly set
+?RCS:
+?RCS: Revision 3.0.1.4 1994/05/13 15:20:56 ram
+?RCS: patch27: modified to avoid spurious Whoa warnings (ADO)
+?RCS:
+?RCS: Revision 3.0.1.3 1994/05/06 14:59:09 ram
+?RCS: patch23: now explicitly ask whether vfork() should be used (ADO)
+?RCS:
+?RCS: Revision 3.0.1.2 1993/10/16 13:49:39 ram
+?RCS: patch12: added magic for vfork()
+?RCS:
+?RCS: Revision 3.0.1.1 1993/09/13 16:06:57 ram
+?RCS: patch10: removed automatic remapping of vfork on fork (WAD)
+?RCS: patch10: added compatibility code for older config.sh (WAD)
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:07:55 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_vfork usevfork: Trylink Myread Oldconfig Setvar cat i_unistd
+?MAKE: -pick add $@ %<
+?S:d_vfork:
+?S: This variable conditionally defines the HAS_VFORK symbol, which
+?S: indicates the vfork() routine is available.
+?S:.
+?S:usevfork:
+?S: This variable is set to true when the user accepts to use vfork.
+?S: It is set to false when no vfork is available or when the user
+?S: explicitly requests not to use vfork.
+?S:.
+?C:HAS_VFORK (VFORK):
+?C: This symbol, if defined, indicates that vfork() exists.
+?C:.
+?H:#$d_vfork HAS_VFORK /**/
+?H:.
+?M:vfork: HAS_VFORK
+?M:#ifndef HAS_VFORK
+?M:#define vfork fork
+?M:#endif
+?M:.
+?LINT:set d_vfork
+: see if there is a vfork
+$cat >try.c <<EOC
+#include <sys/types.h>
+#$i_unistd I_UNISTD
+#ifdef I_UNISTD
+#include <unistd.h>
+#endif
+int main(void)
+{
+ static pid_t ret;
+ ret |= vfork();
+ return ret ? 0 : 1;
+}
+EOC
+cyn=vfork
+set val
+eval $trylink
+
+
+: Ok, but do we want to use it. vfork is reportedly unreliable in
+: perl on Solaris 2.x, and probably elsewhere.
+case "$val" in
+$define)
+ echo " "
+ case "$usevfork" in
+ false) dflt='n';;
+ *) dflt='y';;
+ esac
+ rp="Some systems have problems with vfork(). Do you want to use it?"
+ . ./myread
+ case "$ans" in
+ y|Y) ;;
+ *)
+ echo "Ok, we won't use vfork()."
+ val="$undef"
+ ;;
+ esac
+ ;;
+esac
+?X:
+?X: Only set it when final value is known to avoid spurious Whoas
+?X: Then set usevfork accordingly to the current value, for next run
+?X:
+set d_vfork
+eval $setvar
+case "$d_vfork" in
+$define) usevfork='true';;
+*) usevfork='false';;
+esac
+
diff --git a/mcon/U/d_voidsig.U b/mcon/U/d_voidsig.U
new file mode 100644
index 0000000..d00cec1
--- /dev/null
+++ b/mcon/U/d_voidsig.U
@@ -0,0 +1,89 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_voidsig.U,v $
+?RCS: Revision 3.0.1.3 1995/05/12 12:12:46 ram
+?RCS: patch54: made cppflags dependency optional
+?RCS:
+?RCS: Revision 3.0.1.2 1994/08/29 16:20:35 ram
+?RCS: patch32: now sets signal_t only once d_voidsig is known (WED)
+?RCS:
+?RCS: Revision 3.0.1.1 1994/06/20 06:59:54 ram
+?RCS: patch30: now properly sets signal_t when re-using previous value
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:07:56 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_voidsig signal_t: rm contains cppstdin cppminus +cppflags test Myread \
+ Oldconfig Setvar Findhdr
+?MAKE: -pick add $@ %<
+?S:d_voidsig:
+?S: This variable conditionally defines VOIDSIG if this system
+?S: declares "void (*signal(...))()" in signal.h. The old way was to
+?S: declare it as "int (*signal(...))()".
+?S:.
+?S:signal_t:
+?S: This variable holds the type of the signal handler (void or int).
+?S:.
+?C:VOIDSIG:
+?C: This symbol is defined if this system declares "void (*signal(...))()" in
+?C: signal.h. The old way was to declare it as "int (*signal(...))()". It
+?C: is up to the package author to declare things correctly based on the
+?C: symbol.
+?C:.
+?C:Signal_t (SIGNAL_T):
+?C: This symbol's value is either "void" or "int", corresponding to the
+?C: appropriate return type of a signal handler. Thus, you can declare
+?C: a signal handler using "Signal_t (*handler)()", and define the
+?C: handler using "Signal_t handler(sig)".
+?C:.
+?H:#$d_voidsig VOIDSIG /**/
+?H:#define Signal_t $signal_t /* Signal handler's return type */
+?H:.
+?T:xxx
+?LINT:set d_voidsig
+: see if signal is declared as pointer to function returning int or void
+echo " "
+xxx=`./findhdr signal.h`
+$test "$xxx" && $cppstdin $cppminus $cppflags < $xxx >$$.tmp 2>/dev/null
+if $contains 'int.*\*[ ]*signal' $$.tmp >/dev/null 2>&1 ; then
+ echo "You have int (*signal())() instead of void." >&4
+ val="$undef"
+elif $contains 'void.*\*[ ]*signal' $$.tmp >/dev/null 2>&1 ; then
+ echo "You have void (*signal())() instead of int." >&4
+ val="$define"
+elif $contains 'extern[ ]*[(\*]*signal' $$.tmp >/dev/null 2>&1 ; then
+ echo "You have int (*signal())() instead of void." >&4
+ val="$undef"
+else
+ case "$d_voidsig" in
+ '')
+ echo "I can't determine whether signal handler returns void or int..." >&4
+ dflt=void
+ rp="What type does your signal handler return?"
+ . ./myread
+ case "$ans" in
+ v*) val="$define";;
+ *) val="$undef";;
+ esac;;
+ "$define")
+ echo "As you already told me, signal handler returns void." >&4;;
+ *)
+ echo "As you already told me, signal handler returns int." >&4;;
+ esac
+fi
+set d_voidsig
+eval $setvar
+case "$d_voidsig" in
+"$define") signal_t="void";;
+*) signal_t="int";;
+esac
+$rm -f $$.tmp
+
diff --git a/mcon/U/d_volatile.U b/mcon/U/d_volatile.U
new file mode 100644
index 0000000..542f512
--- /dev/null
+++ b/mcon/U/d_volatile.U
@@ -0,0 +1,79 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_volatile.U,v $
+?RCS: Revision 3.0.1.2 1995/07/25 14:08:49 ram
+?RCS: patch56: made cc and ccflags optional dependencies
+?RCS:
+?RCS: Revision 3.0.1.1 1993/09/09 11:49:51 ram
+?RCS: patch9: volatile definition was swapped over with undef
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:07:57 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_volatile: cat +cc +ccflags rm_try Setvar
+?MAKE: -pick add $@ %<
+?S:d_volatile:
+?S: This variable conditionally defines the HASVOLATILE symbol, which
+?S: indicates to the C program that this C compiler knows about the
+?S: volatile declaration.
+?S:.
+?C:HASVOLATILE ~ %<:
+?C: This symbol, if defined, indicates that this C compiler knows about
+?C: the volatile declaration.
+?C:.
+?H:?%<:#$d_volatile HASVOLATILE /**/
+?H:?%<:#ifndef HASVOLATILE
+?H:?%<:#define volatile
+?H:?%<:#endif
+?H:.
+?W:%<:volatile
+?LINT:set d_volatile
+?LINT:known volatile
+: check for volatile keyword
+echo " "
+echo 'Checking to see if your C compiler knows about "volatile"...' >&4
+$cat >try.c <<'EOCP'
+int main(void)
+{
+?X:
+?X: The following seven lines added by Bill Campbell <billc@sierra.com>
+?X: detect that MIPS compilers do not handle volatile in all situations.
+?X:
+ typedef struct _goo_struct goo_struct;
+ goo_struct * volatile goo = ((goo_struct *)0);
+ struct _goo_struct {
+ long long_int;
+ int reg_int;
+ char char_var;
+ };
+ typedef unsigned short foo_t;
+ static char *volatile foo;
+ static volatile int bar;
+ static volatile foo_t blech;
+ foo = foo;
+ (void) goo;
+ (void) foo;
+ (void) bar;
+ (void) blech;
+ return 0;
+}
+EOCP
+if $cc -c $ccflags try.c; then
+ val="$define"
+ echo "Yup, it does."
+else
+ val="$undef"
+ echo "Nope, it doesn't."
+fi
+set d_volatile
+eval $setvar
+$rm_try
+
diff --git a/mcon/U/d_vprintf.U b/mcon/U/d_vprintf.U
new file mode 100644
index 0000000..f7d8c73
--- /dev/null
+++ b/mcon/U/d_vprintf.U
@@ -0,0 +1,81 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_vprintf.U,v $
+?RCS: Revision 3.0 1993/08/18 12:07:59 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_vprintf d_charvspr: Guess cat +cc +ccflags Csym Setvar
+?MAKE: -pick add $@ %<
+?S:d_vprintf:
+?S: This variable conditionally defines the HAS_VPRINTF symbol, which
+?S: indicates to the C program that the vprintf() routine is available
+?S: to printf with a pointer to an argument list.
+?S:.
+?S:d_charvspr:
+?S: This variable conditionally defines CHARVSPRINTF if this system
+?S: has vsprintf returning type (char*). The trend seems to be to
+?S: declare it as "int vsprintf()".
+?S:.
+?C:HAS_VPRINTF (VPRINTF):
+?C: This symbol, if defined, indicates that the vprintf routine is available
+?C: to printf with a pointer to an argument list. If unavailable, you
+?C: may need to write your own, probably in terms of _doprnt().
+?C:.
+?C:USE_CHAR_VSPRINTF (CHARVSPRINTF):
+?C: This symbol is defined if this system has vsprintf() returning type
+?C: (char*). The trend seems to be to declare it as "int vsprintf()". It
+?C: is up to the package author to declare vsprintf correctly based on the
+?C: symbol.
+?C:.
+?H:#$d_vprintf HAS_VPRINTF /**/
+?H:#$d_charvspr USE_CHAR_VSPRINTF /**/
+?H:.
+?F:!vprintf !vprintf.c
+?T:val2
+?LINT:set d_vprintf d_charvspr
+: see if vprintf exists
+echo " "
+if set vprintf val -f d_vprintf; eval $csym; $val; then
+ echo 'vprintf() found.' >&4
+ val="$define"
+ $cat >vprintf.c <<'EOF'
+#include <varargs.h>
+
+int main() { xxx("foo"); }
+
+xxx(va_alist)
+va_dcl
+{
+ va_list args;
+ char buf[10];
+
+ va_start(args);
+ exit((unsigned long)vsprintf(buf,"%s",args) > 10L);
+}
+EOF
+ if $cc $ccflags -o vprintf vprintf.c >/dev/null 2>&1 && ./vprintf; then
+ echo "Your vsprintf() returns (int)." >&4
+ val2="$undef"
+ else
+ echo "Your vsprintf() returns (char*)." >&4
+ val2="$define"
+ fi
+else
+ echo 'vprintf() NOT found.' >&4
+ val="$undef"
+ val2="$undef"
+fi
+set d_vprintf
+eval $setvar
+val=$val2
+set d_charvspr
+eval $setvar
+
diff --git a/mcon/U/d_vsnprintf.U b/mcon/U/d_vsnprintf.U
new file mode 100644
index 0000000..56153d3
--- /dev/null
+++ b/mcon/U/d_vsnprintf.U
@@ -0,0 +1,47 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 2006, Christian Biere
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:d_vsnprintf: Trylink cat
+?MAKE: -pick add $@ %<
+?S:d_vsnprintf:
+?S: This variable conditionally defines the HAS_VSNPRINTF symbol, which
+?S: indicates to the C program that the vsnprintf() routine is available.
+?S:.
+?C:HAS_VSNPRINTF:
+?C: This symbol, if defined, indicates that the vsnprintf routine is
+?C: available.
+?C:.
+?H:#$d_vsnprintf HAS_VSNPRINTF /**/
+?H:.
+?LINT:set d_vsnprintf
+: see if vsnprintf exists
+$cat >try.c <<EOC
+#include <stdarg.h>
+#include <stdio.h>
+int func(char *s, ...)
+{
+ static int ret;
+ static char buf;
+ static size_t n;
+ va_list ap;
+ (void) s;
+ ret |= vsnprintf(&buf, n, "fmt", ap);
+ return ret;
+}
+
+int main(void)
+{
+ return func("xxx", 1);
+}
+EOC
+cyn=vsnprintf
+set d_vsnprintf
+eval $trylink
+
diff --git a/mcon/U/d_wait3.U b/mcon/U/d_wait3.U
new file mode 100644
index 0000000..db57bd2
--- /dev/null
+++ b/mcon/U/d_wait3.U
@@ -0,0 +1,53 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_wait3.U,v $
+?RCS: Revision 3.0 1993/08/18 12:08:01 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_wait3: Trylink cat i_sysresrc i_syswait
+?MAKE: -pick add $@ %<
+?S:d_wait3:
+?S: This variable conditionally defines the HAS_WAIT3 symbol, which
+?S: indicates to the C program that the wait3() subroutine exists.
+?S:.
+?C:HAS_WAIT3:
+?C: This symbol, if defined, indicates that the wait3() subroutine
+?C: exists.
+?C:.
+?H:#$d_wait3 HAS_WAIT3 /**/
+?H:.
+?LINT:set d_wait3
+: see if 'wait3()' exists
+$cat >try.c <<EOC
+#include <sys/types.h>
+#$i_syswait I_SYS_WAIT
+#ifdef I_SYS_WAIT
+#include <sys/wait.h>
+#endif
+#$i_sysresrc I_SYS_RESOURCE
+#ifdef I_SYS_RESOURCE
+#include <sys/resource.h>
+#endif
+int main(void)
+{
+ static pid_t ret;
+ static int status, options;
+ static struct rusage ru;
+ options |= WNOHANG;
+ options |= WUNTRACED;
+ ret |= wait3(&status, options, &ru);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=wait3
+set d_wait3
+eval $trylink
+
diff --git a/mcon/U/d_wait4.U b/mcon/U/d_wait4.U
new file mode 100644
index 0000000..64e1d02
--- /dev/null
+++ b/mcon/U/d_wait4.U
@@ -0,0 +1,52 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_wait4.U,v $
+?RCS: Revision 3.0 1993/08/18 12:08:01 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_wait4: Trylink cat i_sysresrc i_syswait
+?MAKE: -pick add $@ %<
+?S:d_wait4:
+?S: This variable conditionally defines the HAS_WAIT4 symbol, which
+?S: indicates the wait4() routine is available.
+?S:.
+?C:HAS_WAIT4 (WAIT4):
+?C: This symbol, if defined, indicates that wait4() exists.
+?C:.
+?H:#$d_wait4 HAS_WAIT4 /**/
+?H:.
+?LINT:set d_wait4
+: see if there is a wait4
+$cat >try.c <<EOC
+#include <sys/types.h>
+#$i_syswait I_SYS_WAIT
+#ifdef I_SYS_WAIT
+#include <sys/wait.h>
+#endif
+#$i_sysresrc I_SYS_RESOURCE
+#ifdef I_SYS_RESOURCE
+#include <sys/resource.h>
+#endif
+int main(void)
+{
+ static pid_t ret, pid;
+ static int status, options;
+ static struct rusage ru;
+ options |= WNOHANG;
+ options |= WUNTRACED;
+ ret |= wait4(pid, &status, options, &ru);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=wait4
+set d_wait4
+eval $trylink
+
diff --git a/mcon/U/d_waitpid.U b/mcon/U/d_waitpid.U
new file mode 100644
index 0000000..2b31e76
--- /dev/null
+++ b/mcon/U/d_waitpid.U
@@ -0,0 +1,48 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_waitpid.U,v $
+?RCS: Revision 3.0 1993/08/18 12:08:02 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_waitpid: Trylink cat i_syswait
+?MAKE: -pick add $@ %<
+?S:d_waitpid:
+?S: This variable conditionally defines HAS_WAITPID if waitpid() is
+?S: available to wait for child process.
+?S:.
+?C:HAS_WAITPID (WAITPID):
+?C: This symbol, if defined, indicates that the waitpid routine is
+?C: available to wait for child process.
+?C:.
+?H:#$d_waitpid HAS_WAITPID /**/
+?H:.
+?LINT:set d_waitpid
+: see if waitpid exists
+$cat >try.c <<EOC
+#include <sys/types.h>
+#$i_syswait I_SYS_WAIT
+#ifdef I_SYS_WAIT
+#include <sys/wait.h>
+#endif
+int main(void)
+{
+ static pid_t ret, pid;
+ static int status, options;
+ options |= WNOHANG;
+ options |= WUNTRACED;
+ ret |= waitpid(pid, &status, options);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=waitpid
+set d_waitpid
+eval $trylink
+
diff --git a/mcon/U/d_wcstombs.U b/mcon/U/d_wcstombs.U
new file mode 100644
index 0000000..516dbc2
--- /dev/null
+++ b/mcon/U/d_wcstombs.U
@@ -0,0 +1,47 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_wcstombs.U,v $
+?RCS: Revision 3.0 1993/08/18 12:08:03 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_wcstombs: Trylink cat i_stdlib
+?MAKE: -pick add $@ %<
+?S:d_wcstombs:
+?S: This variable conditionally defines the HAS_WCSTOMBS symbol, which
+?S: indicates to the C program that the wcstombs() routine is available
+?S: to convert wide character strings to multibyte strings.
+?S:.
+?C:HAS_WCSTOMBS:
+?C: This symbol, if defined, indicates that the wcstombs routine is
+?C: available to convert wide character strings to multibyte strings.
+?C:.
+?H:#$d_wcstombs HAS_WCSTOMBS /**/
+?H:.
+?LINT:set d_wcstombs
+: see if wcstombs exists
+$cat >try.c <<EOC
+#$i_stdlib I_STDLIB
+#ifdef I_STDLIB
+#include <stdlib.h>
+#endif
+int main(void)
+{
+ static size_t ret, n;
+ static wchar_t wcs;
+ static char buf[1];
+ ret |= wcstombs(buf, &wcs, n);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=wcstombs
+set d_wcstombs
+eval $trylink
+
diff --git a/mcon/U/d_wctomb.U b/mcon/U/d_wctomb.U
new file mode 100644
index 0000000..126bf87
--- /dev/null
+++ b/mcon/U/d_wctomb.U
@@ -0,0 +1,53 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu>
+?RCS:
+?RCS: $Log: d_wctomb.U,v $
+?RCS: Revision 3.0.1.1 1994/08/29 16:20:43 ram
+?RCS: patch32: created by ADO
+?RCS:
+?MAKE:d_wctomb: Trylink cat i_stdlib i_limits
+?MAKE: -pick add $@ %<
+?S:d_wctomb:
+?S: This variable conditionally defines the HAS_WCTOMB symbol, which
+?S: indicates to the C program that the wctomb() routine is available
+?S: to convert a wide character to a multibyte.
+?S:.
+?C:HAS_WCTOMB (WCTOMB):
+?C: This symbol, if defined, indicates that the wctomb routine is available
+?C: to covert a wide character to a multibyte.
+?C:.
+?H:#$d_wctomb HAS_WCTOMB /**/
+?H:.
+?LINT:set d_wctomb
+: see if wctomb exists
+$cat >try.c <<EOC
+#$i_stdlib I_STDLIB
+#ifdef I_STDLIB
+#include <stdlib.h>
+#endif
+#$i_limits I_LIMITS
+#ifdef I_LIMITS
+#include <limits.h>
+#endif
+int main(void)
+{
+ static int ret;
+ static char dst[MB_LEN_MAX];
+ static wchar_t wc;
+ ret |= wctomb(dst, wc);
+ return ret ? 0 : 1;
+}
+EOC
+cyn=wctomb
+set d_wctomb
+eval $trylink
+
diff --git a/mcon/U/d_wifstat.U b/mcon/U/d_wifstat.U
new file mode 100644
index 0000000..5522942
--- /dev/null
+++ b/mcon/U/d_wifstat.U
@@ -0,0 +1,87 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_wifstat.U,v $
+?RCS: Revision 3.0.1.3 1997/02/28 15:47:43 ram
+?RCS: patch61: added a ?F: metalint hint
+?RCS:
+?RCS: Revision 3.0.1.2 1995/07/25 14:09:10 ram
+?RCS: patch56: re-arranged compile line to include ldflags before objects
+?RCS:
+?RCS: Revision 3.0.1.1 1995/03/21 08:47:46 ram
+?RCS: patch52: created
+?RCS:
+?MAKE:d_wifstat: d_uwait +cc +ccflags +ldflags +libs Oldconfig cat rm
+?MAKE: -pick add $@ %<
+?S:d_wifstat:
+?S: This symbol conditionally defines USE_WIFSTAT if the C program can
+?S: safely use the WIFxxx macros with the kind of wait() parameter
+?S: declared in the program (see UNION_WAIT), or if it can't. Should
+?S: only matter on HP-UX, where the macros are incorrectly written and
+?S: therefore cause programs using them with an 'union wait' variable
+?S: to not compile properly.
+?S:.
+?C:USE_WIFSTAT:
+?C: This symbol, if defined, indicates to the C program that the argument
+?C: for the WIFxxx set of macros such as WIFSIGNALED or WIFEXITED can
+?C: be of the same kind as the one used to hold the wait() status. Should
+?C: only matter on HP-UX, where the macros are incorrectly written and
+?C: therefore cause programs using them with an 'union wait' variable
+?C: to not compile properly. See also UNION_WAIT.
+?C:.
+?H:#$d_wifstat USE_WIFSTAT /**/
+?H:.
+?T:type
+?F:!foo
+: see if we can use WIFxxx macros
+echo " "
+case "$d_wifstat" in
+"$define") echo "As before, you can safely use WIFEXITED and friends!" >&4;;
+"$undef") echo "You still can't use WIFEXITED and friends!" >&4;;
+*)
+ echo "Let's see whether you can use the WIFEXITED(status) macro and its"
+ case "$d_uwait" in
+ "$define") type='union wait';;
+ *) type='int';;
+ esac
+ echo "friends with status declared as '$type status'..."
+ $cat >foo.c <<EOCP
+#include <sys/types.h>
+#include <sys/wait.h>
+
+int main()
+{
+ $type status;
+ int e = 0;
+
+#ifdef WIFEXITED
+ if (WIFEXITED(status))
+ printf("\n");
+ exit(0);
+#else
+ exit(2);
+#endif
+}
+EOCP
+ d_wifstat="$undef"
+ if $cc $ccflags $ldflags -o foo foo.c $libs >/dev/null 2>&1; then
+ if ./foo >/dev/null; then
+ echo "Great! Looks like we can use the WIFxxx macros." >&4
+ d_wifstat="$define"
+ else
+ echo "You don't seem to have WIFxxx macros, but that's ok." >&4
+ fi
+ else
+ echo "Apparently you can't use WIFxxx macros properly." >&4
+ fi
+ $rm -f foo.* foo core
+ ;;
+esac
+
diff --git a/mcon/U/d_xdrs.U b/mcon/U/d_xdrs.U
new file mode 100644
index 0000000..bd727e8
--- /dev/null
+++ b/mcon/U/d_xdrs.U
@@ -0,0 +1,42 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_xdrs.U,v $
+?RCS: Revision 3.0 1993/08/18 12:08:04 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_xdrs: cat Csym Setvar
+?MAKE: -pick add $@ %<
+?S:d_xdrs:
+?S: This symbol conditionally defines HAS_XDRS which indicates to the C
+?S: program that XDR serialization routines are available.
+?S:.
+?C:HAS_XDRS (XDRS):
+?C: This symbol if defined indicates to the C program that the XDR
+?C: serialization routines are available to transfer data accross
+?C: various architectures.
+?C:.
+?H:#$d_xdrs HAS_XDRS /**/
+?H:.
+?LINT:set d_xdrs
+: see if XDR is available
+echo " "
+if set xdr_int val -f d_xdrs; eval $csym; $val; then
+ echo "Ahh! You have XDR routines for network communications." >&4
+ val="$define"
+else
+ $cat >&4 <<EOM
+Sigh! You do not have XDR routines -- Network communications may be hazardous.
+EOM
+ val="$undef"
+fi
+set d_xdrs
+eval $setvar
+
diff --git a/mcon/U/defeditor.U b/mcon/U/defeditor.U
new file mode 100644
index 0000000..d4a2dde
--- /dev/null
+++ b/mcon/U/defeditor.U
@@ -0,0 +1,45 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: defeditor.U,v $
+?RCS: Revision 3.0.1.1 1995/01/11 15:30:16 ram
+?RCS: patch45: can now use the 'vi' variable since path stripping is deferred
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:08:05 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:defeditor: Getfile Oldconfig Loc vi
+?MAKE: -pick add $@ %<
+?S:defeditor:
+?S: This variable contains the eventual value of the DEFEDITOR symbol,
+?S: which contains the name of the default editor.
+?S:.
+?C:DEFEDITOR:
+?C: This symbol contains the full pathname of the default editor.
+?C:.
+?H:#define DEFEDITOR "$defeditor" /**/
+?H:.
+: determine default editor
+echo " "
+case "$defeditor" in
+'')
+ case "$vi" in
+ */*) dflt="$vi";;
+ *) dflt=/usr/ucb/vi;;
+ esac
+ ;;
+*) dflt="$defeditor"
+ ;;
+esac
+fn=f/
+rp="What is the default editor on your system?"
+. ./getfile
+defeditor="$ans"
+
diff --git a/mcon/U/doublesize.U b/mcon/U/doublesize.U
new file mode 100644
index 0000000..2fc5724
--- /dev/null
+++ b/mcon/U/doublesize.U
@@ -0,0 +1,58 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: doublesize.U,v $
+?RCS: Revision 3.0.1.1 1994/10/29 16:17:06 ram
+?RCS: patch36: added ?F: line for metalint file checking
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:08:06 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:doublesize: cat rm_try Myread +cc +ccflags
+?MAKE: -pick add $@ %<
+?S:doublesize:
+?S: This variable contains the value of the DOUBLESIZE symbol, which
+?S: indicates to the C program how many bytes there are in a double.
+?S:.
+?C:DOUBLESIZE:
+?C: This symbol contains the size of a double, so that the C preprocessor
+?C: can make decisions based on it.
+?C:.
+?H:#define DOUBLESIZE $doublesize /**/
+?H:.
+?F:!try
+: check for length of double
+echo " "
+case "$doublesize" in
+'')
+ echo "Checking to see how big your double precision numbers are..." >&4
+ $cat >try.c <<'EOCP'
+#include <stdio.h>
+int main()
+{
+ printf("%d\n", sizeof(double));
+}
+EOCP
+ if $cc $ccflags -o try try.c >/dev/null 2>&1 ; then
+ dflt=`./try`
+ else
+ dflt='8'
+ echo "(I can't seem to compile the test program. Guessing...)"
+ fi
+ ;;
+*)
+ dflt="$doublesize"
+ ;;
+esac
+rp="What is the size of a double precision number (in bytes)?"
+. ./myread
+doublesize="$ans"
+$rm_try
+
diff --git a/mcon/U/ebcdic.U b/mcon/U/ebcdic.U
new file mode 100644
index 0000000..6a1dda3
--- /dev/null
+++ b/mcon/U/ebcdic.U
@@ -0,0 +1,58 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Copyright (c) 1998 Andy Dougherty
+?RCS:
+?RCS: Original author Jarkko Hietaniemi <jhi@iki.fi>
+?RCS: Merged into dist by Andy Dougherty July 13, 1998
+?RCS:
+?MAKE:ebcdic: Compile Setvar cat rm_try run
+?MAKE: -pick add $@ %<
+?S:ebcdic:
+?S: This variable conditionally defines EBCDIC if this
+?S: system uses EBCDIC encoding. Among other things, this
+?S: means that the character ranges are not contiguous.
+?S: See trnl.U
+?S:.
+?C:EBCDIC:
+?C: This symbol, if defined, indicates that this system uses
+?C: EBCDIC encoding.
+?C:.
+?H:#$ebcdic EBCDIC /**/
+?H:.
+?F:!try
+?LINT:set ebcdic
+: look whether system uses EBCDIC
+echo " "
+echo "Determining whether or not we are on an EBCDIC system..." >&4
+$cat >try.c <<'EOM'
+int main()
+{
+ if ('M'==0xd4) return 0;
+ return 1;
+}
+EOM
+val=$undef
+set try
+if eval $compile_ok; then
+ if $run ./try; then
+ echo "You seem to speak EBCDIC." >&4
+ val="$define"
+ else
+ echo "Nope, no EBCDIC, probably ASCII or some ISO Latin. Or UTF-8." >&4
+ fi
+else
+ echo "I'm unable to compile the test program." >&4
+ echo "I'll assume ASCII or some ISO Latin. Or UTF8." >&4
+fi
+$rm_try
+set ebcdic
+eval $setvar
+
diff --git a/mcon/U/enablenls.U b/mcon/U/enablenls.U
new file mode 100644
index 0000000..ca6bece
--- /dev/null
+++ b/mcon/U/enablenls.U
@@ -0,0 +1,61 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 2006, Christian Biere
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:enablenls d_enablenls: Myread Setvar cat package d_nls
+?MAKE: -pick add $@ %<
+?S:enablenls:
+?S: This variable holds 'true' or 'false' depending on whether we're
+?S: going to enable Native Language Support (NLS).
+?S:.
+?S:d_enablenls:
+?S: This variable conditionally defines ENABLE_NLS.
+?S:.
+?C:ENABLE_NLS:
+?C: This symbol, when defines, indicates that the program should enable
+?C: Native Language Support (NLS) for internationalization (I18N).
+?C:.
+?H:#$d_enablenls ENABLE_NLS /**/
+?H:.
+?LINT:set d_enablenls
+: determine whether to enable NLS
+echo " "
+case "$d_nls" in
+"$undef")
+ echo "I won't enable NLS since you don't have that feature." >&4
+ val="$undef"
+ ;;
+*)
+ $cat <<EOM
+I can compile $package with Native Language Support (NLS), which
+will enable internationalization of some messages, provided there is
+a suitable translation available.
+
+EOM
+ dflt=y
+ case "$d_enablenls" in
+ "$undef") dflt=n;;
+ esac
+ rp='Shall I enable NLS'
+ . ./myread
+ case "$ans" in
+ y) val="$define";;
+ *) val="$undef";;
+ esac
+ ;;
+esac
+set d_enablenls
+eval $setvar
+@if enablenls
+case "$d_enablenls" in
+"$define") enablenls=true;;
+"$undef") enablenls=false;;
+esac
+@end
+
diff --git a/mcon/U/errnolist.U b/mcon/U/errnolist.U
new file mode 100644
index 0000000..1e466b0
--- /dev/null
+++ b/mcon/U/errnolist.U
@@ -0,0 +1,106 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: errnolist.U,v $
+?RCS: Revision 3.0.1.2 1997/02/28 15:48:01 ram
+?RCS: patch61: replaced .a with $_a all over the place
+?RCS: patch61: likewise for .o replaced by $_o
+?RCS:
+?RCS: Revision 3.0.1.1 1994/01/24 14:10:54 ram
+?RCS: patch16: created
+?RCS:
+?MAKE:errnolist errnolist_SH errnolist_a errnolist_c errnolist_o: cat +cc \
+ +ccflags +libs +d_sysernlst _a _o
+?MAKE: -pick add $@ %<
+?S:errnolist:
+?S: This variable holds the base name of a file containing the
+?S: definition of the sys_errnolist array, if the C library
+?S: doesn't provide it already. Otherwise, its value is empty.
+?S: The following lines should be included in your Makefile.SH:
+?S:
+?S: case "$errnolist" in
+?S: '') ;;
+?S: *)
+?S: $spitshell >>Makefile <<!GROK!THIS!
+?S: $errnolist_c: $errnolist_SH $errnolist_a
+?S: sh ./$errnolist_SH
+?S:
+?S: !GROK!THIS!
+?S: ;;
+?S: esac
+?S:
+?S: You may define the 'errnolist' variable in your Myinit.U if you
+?S: wish to override its default value "errnolist".
+?S:.
+?S:errnolist_SH:
+?S: This is the name of a file which will generate errnolistc.
+?S:.
+?S:errnolist_a:
+?S: This is the name of the awk script called by errnolist_SH.
+?S:.
+?S:errnolist_c:
+?S: This is the name of a generated C file which provides the
+?S: definition of the sys_errnolist array.
+?S:.
+?S:errnolist_o:
+?S: This is the name of the object file which provides the
+?S: definition of the sys_errnolist array, if the C library
+?S: doesn't provide it already. Otherwise, its value is empty.
+?S:.
+?INIT:errnolist=errnolist
+: check for sys_errnolist
+@if d_sysernlst || HAS_SYS_ERRNOLIST
+case "$d_sysernlst" in
+"$define")
+ errnolist=''
+ errnolist_SH=''
+ errnolist_a=''
+ errnolist_c=''
+ errnolist_o=''
+ ;;
+*)
+ echo " "
+ echo "I'll make sure your Makefile provides sys_errnolist in $errnolist.c"
+ errnolist_SH=$errnolist.SH
+ errnolist_a=$errnolist$_a
+ errnolist_c=$errnolist.c
+ errnolist_o=$errnolist$_o
+ ;;
+esac
+@else
+echo " "
+$cat <<EOM
+Checking to see if your C library provides us with sys_errnolist[]...
+EOM
+$cat >errnolist.c <<'EOCP'
+extern char *sys_errnolist[];
+int main() {
+ char *p0 = sys_errnolist[0];
+ char *p1 = sys_errnolist[1];
+
+ return (p0 == p1); /* Make sure they're not optimized away */
+}
+EOCP
+if $cc $ccflags -o errnolist errnolist.c $libs >/dev/null 2>&1 ; then
+ echo "It does."
+ errnolist=''
+ errnolist_SH=''
+ errnolist_a=''
+ errnolist_c=''
+ errnolist_o=''
+else
+ echo "I'll make sure your Makefile provides sys_errnolist in $errnolist.c"
+ errnolist_SH=$errnolist.SH
+ errnolist_a=$errnolist$_a
+ errnolist_c=$errnolist.c
+ errnolist_o=$errnolist$_o
+fi
+@end
+
diff --git a/mcon/U/etc.U b/mcon/U/etc.U
new file mode 100644
index 0000000..a53c2f6
--- /dev/null
+++ b/mcon/U/etc.U
@@ -0,0 +1,42 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: etc.U,v $
+?RCS: Revision 3.0 1993/08/18 12:08:07 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:etc etcexp: Getfile Loc Oldconfig
+?MAKE: -pick add $@ %<
+?S:etc:
+?S: This variable holds the name of the directory in which the user wants
+?S: to put "administrative" executable images for the package in question.
+?S: It is most often a local directory such as /usr/local/etc. Programs
+?S: relying on this variable must be prepared to deal with ~name
+?S: substitutions.
+?S:.
+?S:etcexp:
+?S: This is the same as the etc variable, but is filename expanded at
+?S: configuration time, for convenient use in makefiles.
+?S:.
+: determine where administrative executables go
+case "$etc" in
+'')
+ dflt=`./loc . /local/etc /usr/local/etc /local/etc /usr/etc /etc`
+ ;;
+*)
+ dflt="$etc"
+ ;;
+esac
+fn=d~
+rp='Where should the administrative executables go?'
+. ./getfile
+etc="$ans"
+etcexp="$ansexp"
+
diff --git a/mcon/U/fieldn.U b/mcon/U/fieldn.U
new file mode 100644
index 0000000..0270a93
--- /dev/null
+++ b/mcon/U/fieldn.U
@@ -0,0 +1,82 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: Findhdr.U,v $
+?RCS: Revision 3.0.1.2 1994/10/29 15:53:08 ram
+?RCS: patch36: added ?F: line for metalint file checking
+?RCS:
+?RCS: Revision 3.0.1.1 1994/05/06 14:03:56 ram
+?RCS: patch23: cppminus must be after other cppflags, not before
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:04:54 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:fieldn cppfilter: grep test tr rm cat startsh \
+ cppstdin cppminus osname
+?MAKE: -pick add $@ %<
+?S:fieldn:
+?S: This variable is used internally by Configure. It contains the position
+?S: of the included file name in cpp output. That is to say, when cpp
+?S: pre-processes a #include <file> line, it replaces it by a # line which
+?S: contains the original position in the input file and the full name of
+?S: included file, between "quotes".
+?S:.
+?S:cppfilter:
+?S: This variable is used internally by Configure. It either contains
+?S: nothing or a shell piping stage to translate path components into "/".
+?S: It is meant to be used as "... | $cppfilter $grep ..." i.e. without any
+?S: explicit "|" character following it.
+?S:.
+?F:!fieldn
+?T:pos testaccess cline
+: determine filename position in cpp output
+echo " "
+echo "Computing filename position in cpp output for #include directives..." >&4
+echo '#include <stdio.h>' > foo.c
+case "$osname" in
+vos)
+ testaccess=-e
+?X: VOS: path component separator is >
+ cppfilter="tr '\\\\>' '/' |"
+ ;;
+*)
+ testaccess=-r
+ cppfilter=''
+ ;;
+esac
+$cat >fieldn <<EOF
+$startsh
+$cppstdin $cppminus <foo.c 2>/dev/null | \
+$grep '^[ ]*#.*stdio\.h' | \
+while read cline; do
+ pos=1
+ set \$cline
+ while $test \$# -gt 0; do
+ if $test $testaccess \`echo \$1 | $tr -d '"'\`; then
+ echo "\$pos"
+ exit 0
+ fi
+ shift
+ pos=\`expr \$pos + 1\`
+ done
+done
+EOF
+chmod +x fieldn
+fieldn=`./fieldn`
+$rm -f foo.c fieldn
+case $fieldn in
+'') pos='???';;
+1) pos=first;;
+2) pos=second;;
+3) pos=third;;
+*) pos="${fieldn}th";;
+esac
+echo "Your cpp writes the filename in the $pos field of the line."
+
diff --git a/mcon/U/filexp_path.U b/mcon/U/filexp_path.U
new file mode 100644
index 0000000..0524ae9
--- /dev/null
+++ b/mcon/U/filexp_path.U
@@ -0,0 +1,30 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: filexp.U,v $
+?RCS: Revision 3.0 1993/08/18 12:08:08 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:filexp: privlib
+?MAKE: -pick add $@ %<
+?S:filexp:
+?S: This symbol contains the full pathname of the filexp script, in case we
+?S: are saving the script for posterity.
+?S:.
+: must not allow self reference
+case "$privlib" in
+ /*)
+ filexp=$privlib/filexp
+ ;;
+ *)
+ filexp=`pwd`/filexp
+ ;;
+esac
+
diff --git a/mcon/U/floatsize.U b/mcon/U/floatsize.U
new file mode 100644
index 0000000..71e2d06
--- /dev/null
+++ b/mcon/U/floatsize.U
@@ -0,0 +1,58 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: floatsize.U,v $
+?RCS: Revision 3.0.1.1 1994/10/29 16:17:09 ram
+?RCS: patch36: added ?F: line for metalint file checking
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:08:09 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:floatsize: cat rm Myread +cc +ccflags
+?MAKE: -pick add $@ %<
+?S:floatsize:
+?S: This variable contains the value of the FLOATSIZE symbol, which
+?S: indicates to the C program how many bytes there are in a float.
+?S:.
+?C:FLOATSIZE:
+?C: This symbol contains the size of a float, so that the C preprocessor
+?C: can make decisions based on it.
+?C:.
+?H:#define FLOATSIZE $floatsize /**/
+?H:.
+?F:!try
+: check for length of float
+echo " "
+case "$floatsize" in
+'')
+ echo "Checking to see how big your floating point numbers are..." >&4
+ $cat >try.c <<'EOCP'
+#include <stdio.h>
+int main()
+{
+ printf("%d\n", sizeof(float));
+}
+EOCP
+ if $cc $ccflags -o try try.c >/dev/null 2>&1 ; then
+ dflt=`./try`
+ else
+ dflt='4'
+ echo "(I can't seem to compile the test program. Guessing...)"
+ fi
+ ;;
+*)
+ dflt="$floatsize"
+ ;;
+esac
+rp="What is the size of a floating point number (in bytes)?"
+. ./myread
+floatsize="$ans"
+$rm -f try.c try
+
diff --git a/mcon/U/fpostype.U b/mcon/U/fpostype.U
new file mode 100644
index 0000000..b23bda0
--- /dev/null
+++ b/mcon/U/fpostype.U
@@ -0,0 +1,39 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: fpostype.U,v $
+?RCS: Revision 3.0.1.2 1994/08/29 16:20:52 ram
+?RCS: patch32: now uses new Typedef unit to compute type information
+?RCS:
+?RCS: Revision 3.0.1.1 1994/06/20 06:59:59 ram
+?RCS: patch30: created
+?RCS:
+?MAKE:fpostype: Myread Typedef
+?MAKE: -pick add $@ %<
+?S:fpostype:
+?S: This variable defines Fpos_t to be something like fpost_t, long,
+?S: uint, or whatever type is used to declare file positions in libc.
+?S:.
+?C:Fpos_t:
+?C: This symbol holds the type used to declare file positions in libc.
+?C: It can be fpos_t, long, uint, etc... It may be necessary to include
+?C: <sys/types.h> to get any typedef'ed information.
+?C:.
+?H:#define Fpos_t $fpostype /* File position type */
+?H:.
+: see what type file positions are declared as in the library
+set fpos_t fpostype long stdio.h sys/types.h
+eval $typedef
+echo " "
+dflt="$fpostype"
+rp="What is the type for file position used by fsetpos()?"
+. ./myread
+fpostype="$ans"
+
diff --git a/mcon/U/fpu.U b/mcon/U/fpu.U
new file mode 100644
index 0000000..7c5f2c8
--- /dev/null
+++ b/mcon/U/fpu.U
@@ -0,0 +1,73 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: fpu.U,v $
+?RCS: Revision 3.0 1993/08/18 12:08:10 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:fpu: test cat cc Myread
+?MAKE: -pick add $@ %<
+?S:fpu (fpunit):
+?S: Set to be the compile flag for the local floating point unit.
+?S:.
+?C:FPU (FPUNIT):
+?C: String containing the flags for the local floating point unit.
+?C:.
+?H:#define FPU "$fpu" /**/
+?H:.
+: see what floating point compile flags should be used.
+fpu=''
+if $test -r /dev/fpa; then
+ $cat>fpa.c << GOOP
+ main(){return(1);}
+GOOP
+ $cc -ffpa -o fpa fpa.c
+ fpa > fpa.out 2>&1
+ if $test ! -s fpa.out; then
+ dflt='y'
+ $cat <<'EOM'
+
+You seem to have a sun fpa... I can compile the code to use the fpa but it will
+mean that the code can ONLY run on a machine with a fpa...
+
+EOM
+ rp="Should I compile for fpa?"
+ . ./myread
+ if $test $ans = "n"; then
+ fpu=''
+ else
+ fpu='-ffpa'
+ fi
+ else
+ $cat <<'EOM'
+
+You have the fpa device but I can't seem to use it. Maybe you should talk to
+your sysadmin about this. For now, I am not going to compile it in.
+
+EOM
+ fi
+fi
+if $test "$fpu" = ''; then
+ if $test -r /usr/etc/mc68881version; then
+ dflt='y'
+ $cat <<'EOM'
+
+There also seems to be the pieces for a 68881. If I compile this in, it will
+work on almost all Sun 3's except for a few Sun-3/50s without a 68881...
+
+EOM
+ rp="Should I compile for a 68881?"
+ . ./myread
+ if $test $ans = "y"; then
+ fpu='-f68881'
+ fi
+ fi
+fi
+
diff --git a/mcon/U/gccvers.U b/mcon/U/gccvers.U
new file mode 100644
index 0000000..702a5e9
--- /dev/null
+++ b/mcon/U/gccvers.U
@@ -0,0 +1,110 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Copyright (c) 2000, Jarkko Hietaniemi
+?RCS:
+?MAKE:gccversion gccosandvers: cat cpp rm +cc \
+ Myread Guess Options Oldconfig Loc osname osvers grep ccname
+?MAKE: -pick add $@ %<
+?S:gccversion:
+?S: If GNU cc (gcc) is used, this variable holds '1' or '3' (for instance)
+?S: to indicate whether the compiler is version 1 or 3. This is used in
+?S: setting some of the default cflags. It is set to '' if not gcc.
+?S:.
+?S:gccosandvers:
+?S: If GNU cc (gcc) is used, this variable the operating system and
+?S: version used to compile the gcc. It is set to '' if not gcc,
+?S: or if nothing useful can be parsed as the os version.
+?S:.
+?T:gccshortvers incdir d
+?F:!try.c !try
+?LINT:extern locincpth ccflags ldflags
+?LINT:change locincpth ccname cpp
+: Check whether they have gcc in any guise.
+echo " "
+echo "Checking for GNU cc in disguise and/or its version number..." >&4
+$cat >try.c <<EOM
+int main(void) {
+#ifdef __GNUC__
+gcc_version_major __GNUC__
+#ifdef __GNUC_MINOR__
+gcc_version_minor __GNUC__
+#endif
+#ifdef __GNUC_PATCHLEVEL__
+gcc_version_patchlevel __GNUC_PATCHLEVEL__
+#endif
+#endif
+}
+EOM
+if $cc -E try.c > try 2>&1
+then
+ gccversion=`$grep gcc_version_major try |
+ sed 's/^.*gcc_version_major[\t ]*//'`
+ case "$gccversion" in
+ '') echo "You are not using GNU cc." ;;
+ *) echo "You are using GNU cc $gccversion."
+ ccname=gcc
+ ;;
+ esac
+else
+ gccversion=''
+fi
+$rm -f try try.*
+case "$gccversion" in
+1*) cpp=`./loc gcc-cpp $cpp $pth` ;;
+esac
+case "$gccversion" in
+'') gccosandvers='' ;;
+*) gccshortvers=`echo "$gccversion"|sed 's/ .*//'`
+ gccosandvers=`$cc -v 2>&1 | \
+ $grep '/specs$'|sed "s!.*/[^-/]*-[^-/]*-\([^-/]*\)/$gccshortvers/specs!\1!"`
+ gccshortvers=''
+ case "$gccosandvers" in
+ $osname) gccosandvers='' ;; # linux gccs seem to have no linux osvers, grr
+ $osname$osvers) ;; # looking good
+ $osname*) cat <<EOM >&4
+
+*** WHOA THERE!!! ***
+
+ Your gcc has not been compiled for the exact release of
+ your operating system ($gccosandvers versus $osname$osvers).
+
+ In general it is a good idea to keep gcc synchronized with
+ the operating system because otherwise serious problems
+ may ensue when trying to compile software, like Perl.
+
+ I'm trying to be optimistic here, though, and will continue.
+ If later during the configuration and build icky compilation
+ problems appear (headerfile conflicts being the most common
+ manifestation), I suggest reinstalling the gcc to match
+ your operating system release.
+
+EOM
+ ;;
+ *) gccosandvers='' ;; # failed to parse, better be silent
+ esac
+ ;;
+esac
+case "$ccname" in
+'') ccname="$cc" ;;
+esac
+
+: gcc 3.1 complains about adding -Idirectories that it already knows about,
+: so we will take those off from locincpth.
+case "$gccversion" in
+3*)
+ echo "main(){}">try.c
+ for incdir in `$cc -v -c try.c 2>&1 | \
+ sed '1,/^#include <\.\.\.>/d;/^End of search list/,$d;s/^ //'` ; do
+ locincpth=`echo $locincpth | sed s!$incdir!!`
+ done
+ $rm -f try try.*
+esac
+
diff --git a/mcon/U/gidtype.U b/mcon/U/gidtype.U
new file mode 100644
index 0000000..c72d52c
--- /dev/null
+++ b/mcon/U/gidtype.U
@@ -0,0 +1,61 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: gidtype.U,v $
+?RCS: Revision 3.0.1.3 1994/08/29 16:21:44 ram
+?RCS: patch32: now uses new Typedef unit to compute type information
+?RCS: patch32: removed useless usage of Setvar (for now)
+?RCS:
+?RCS: Revision 3.0.1.2 1994/05/13 15:21:07 ram
+?RCS: patch27: added lint hint
+?RCS:
+?RCS: Revision 3.0.1.1 1994/05/06 15:01:51 ram
+?RCS: patch23: protected gidtype setting via setvar (ADO)
+?RCS: patch23: made Gid_t comment more explicit (ADO)
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:08:11 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:gidtype: Myread Typedef Findhdr
+?MAKE: -pick add $@ %<
+?S:gidtype:
+?S: This variable defines Gid_t to be something like gid_t, int,
+?S: ushort, or whatever type is used to declare the return type
+?S: of getgid(). Typically, it is the type of group ids in the kernel.
+?S:.
+?C:Gid_t (GIDTYPE):
+?C: This symbol holds the return type of getgid() and the type of
+?C: argument to setrgid() and related functions. Typically,
+?C: it is the type of group ids in the kernel. It can be int, ushort,
+?C: uid_t, etc... It may be necessary to include <sys/types.h> to get
+?C: any typedef'ed information.
+?C:.
+?H:#define Gid_t $gidtype /* Type for getgid(), etc... */
+?H:.
+?T:xxx
+: see what type gids are declared as in the kernel
+set gid_t gidtype xxx stdio.h sys/types.h
+eval $typedef
+case "$gidtype" in
+xxx)
+ xxx=`./findhdr sys/user.h`
+ set `grep 'groups\[NGROUPS\];' "$xxx" 2>/dev/null` unsigned short
+ case $1 in
+ unsigned) dflt="$1 $2" ;;
+ *) dflt="$1" ;;
+ esac
+ ;;
+*) dflt="$gidtype";;
+esac
+echo " "
+rp="What is the type for group ids returned by getgid()?"
+. ./myread
+gidtype="$ans"
+
diff --git a/mcon/U/groupstype.U b/mcon/U/groupstype.U
new file mode 100644
index 0000000..1a73af8
--- /dev/null
+++ b/mcon/U/groupstype.U
@@ -0,0 +1,63 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu>
+?RCS:
+?RCS: $Log: groupstype.U,v $
+?RCS: Revision 3.0.1.2 1994/10/29 16:18:08 ram
+?RCS: patch36: no longer uses Setvar to set 'groupstype' (ADO)
+?RCS: patch36: typo fix in the word 'argument' (ADO)
+?RCS:
+?RCS: Revision 3.0.1.1 1994/06/20 07:00:18 ram
+?RCS: patch30: created by ADO
+?RCS:
+?MAKE:groupstype: gidtype d_getgrps Myread Oldconfig Findhdr cat d_setgrps
+?MAKE: -pick add $@ %<
+?INIT:groupstype=''
+?S:groupstype:
+?S: This variable defines Groups_t to be something like gid_t, int,
+?S: ushort, or whatever type is used for the second argument to
+?S: getgroups() and setgroups(). Usually, this is the same as
+?S: gidtype (gid_t), but sometimes it isn't.
+?S:.
+?C:Groups_t (GROUPSTYPE):
+?C: This symbol holds the type used for the second argument to
+?C: getgroups() and setgroups(). Usually, this is the same as
+?C: gidtype (gid_t) , but sometimes it isn't.
+?C: It can be int, ushort, gid_t, etc...
+?C: It may be necessary to include <sys/types.h> to get any
+?C: typedef'ed information. This is only required if you have
+?C: getgroups() or setgroups()..
+?C:.
+?H:?%<:#if defined(HAS_GETGROUPS) || defined(HAS_SETGROUPS)
+?H:?%<:#define Groups_t $groupstype /* Type for 2nd arg to [sg]etgroups() */
+?H:?%<:#endif
+?H:.
+?W:%<:getgroups HAS_GETGROUPS setgroups HAS_SETGROUPS
+: Find type of 2nd arg to 'getgroups()' and 'setgroups()'
+echo " "
+case "$d_getgrps$d_setgrps" in
+*define*)
+ case "$groupstype" in
+ '') dflt="$gidtype" ;;
+ *) dflt="$groupstype" ;;
+ esac
+ $cat <<EOM
+What type of pointer is the second argument to getgroups() and setgroups()?
+Usually this is the same as group ids, $gidtype, but not always.
+
+EOM
+ rp='What type pointer is the second argument to getgroups() and setgroups()?'
+ . ./myread
+ groupstype="$ans"
+ ;;
+*) groupstype="$gidtype";;
+esac
+
diff --git a/mcon/U/h_fcntl.U b/mcon/U/h_fcntl.U
new file mode 100644
index 0000000..db958ea
--- /dev/null
+++ b/mcon/U/h_fcntl.U
@@ -0,0 +1,23 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: h_fcntl.U,v $
+?RCS: Revision 3.0 1993/08/18 12:08:12 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:h_fcntl: Nothing
+?MAKE: -pick add $@ %<
+?S:h_fcntl:
+?S: This is variable gets set in various places to tell i_fcntl that
+?S: <fcntl.h> should be included.
+?S:.
+: Initialize h_fcntl
+h_fcntl=false
+
diff --git a/mcon/U/h_sysfile.U b/mcon/U/h_sysfile.U
new file mode 100644
index 0000000..1466676
--- /dev/null
+++ b/mcon/U/h_sysfile.U
@@ -0,0 +1,23 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: h_sysfile.U,v $
+?RCS: Revision 3.0 1993/08/18 12:08:13 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:h_sysfile: Nothing
+?MAKE: -pick add $@ %<
+?S:h_sysfile:
+?S: This is variable gets set in various places to tell i_sys_file that
+?S: <sys/file.h> should be included.
+?S:.
+: Initialize h_sysfile
+h_sysfile=false
+
diff --git a/mcon/U/i_alloca.U b/mcon/U/i_alloca.U
new file mode 100644
index 0000000..038b087
--- /dev/null
+++ b/mcon/U/i_alloca.U
@@ -0,0 +1,36 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 2011, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:i_alloca: Trylink cat
+?MAKE: -pick add $@ %<
+?S:i_alloca:
+?S: This variable conditionally defines the I_ALLOCA symbol, which
+?S: indicates to the C program that <alloca.h> exists and should
+?S: be included.
+?S:.
+?C:I_ALLOCA:
+?C: This symbol, if defined, indicates that <alloca.h> exists and should
+?C: be included.
+?C:.
+?H:#$i_alloca I_ALLOCA /**/
+?H:.
+?LINT:set i_alloca
+: see if alloca.h is available
+$cat >try.c <<EOC
+#include <alloca.h>
+int main(void)
+{
+ void *ret = alloca(1);
+ return (unsigned long) ret & 0x1;
+}
+EOC
+set i_alloca
+eval $trylink
+
diff --git a/mcon/U/i_arpainet.U b/mcon/U/i_arpainet.U
new file mode 100644
index 0000000..f3a322e
--- /dev/null
+++ b/mcon/U/i_arpainet.U
@@ -0,0 +1,31 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: i_arpainet.U,v $
+?RCS: Revision 3.0 1993/08/18 12:08:15 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:i_arpainet: Inhdr
+?MAKE: -pick add $@ %<
+?S:i_arpainet:
+?S: This variable conditionally defines the I_ARPA_INET symbol,
+?S: and indicates whether a C program should include <arpa/inet.h>.
+?S:.
+?C:I_ARPA_INET:
+?C: This symbol, if defined, indicates to the C program that it should
+?C: include <arpa/inet.h> to get inet_addr and friends declarations.
+?C:.
+?H:#$i_arpainet I_ARPA_INET /**/
+?H:.
+?LINT:set i_arpainet
+: see if arpa/inet.h has to be included
+set arpa/inet.h i_arpainet
+eval $inhdr
+
diff --git a/mcon/U/i_db.U b/mcon/U/i_db.U
new file mode 100644
index 0000000..dad068e
--- /dev/null
+++ b/mcon/U/i_db.U
@@ -0,0 +1,146 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu>
+?RCS:
+?RCS: $Log: i_db.U,v $
+?RCS: Revision 3.0.1.3 1995/07/25 14:10:22 ram
+?RCS: patch56: conditionally use const in test programs (ADO)
+?RCS:
+?RCS: Revision 3.0.1.2 1995/05/12 12:14:42 ram
+?RCS: patch54: extended for more intimate DB probing (ADO)
+?RCS:
+?RCS: Revision 3.0.1.1 1994/08/29 16:21:50 ram
+?RCS: patch32: created by ADO
+?RCS:
+?MAKE:i_db db_hashtype db_prefixtype: Inhdr +cc +ccflags rm_try contains cat \
+ d_const
+?MAKE: -pick add $@ %<
+?S:i_db:
+?S: This variable conditionally defines the I_DB symbol, and indicates
+?S: whether a C program may include Berkeley's DB include file <db.h>.
+?S:.
+?S:db_hashtype:
+?S: This variable contains the type of the hash structure element
+?S: in the <db.h> header file. In older versions of DB, it was
+?S: int, while in newer ones it is u_int32_t.
+?S:.
+?S:db_prefixtype:
+?S: This variable contains the type of the prefix structure element
+?S: in the <db.h> header file. In older versions of DB, it was
+?S: int, while in newer ones it is size_t.
+?S:.
+?C:I_DB:
+?C: This symbol, if defined, indicates to the C program that it should
+?C: include Berkeley's DB include file <db.h>.
+?C:.
+?C:DB_Prefix_t:
+?C: This symbol contains the type of the prefix structure element
+?C: in the <db.h> header file. In older versions of DB, it was
+?C: int, while in newer ones it is u_int32_t.
+?C:.
+?C:DB_Hash_t:
+?C: This symbol contains the type of the prefix structure element
+?C: in the <db.h> header file. In older versions of DB, it was
+?C: int, while in newer ones it is size_t.
+?C:.
+?H:#$i_db I_DB /**/
+?H:#define DB_Hash_t $db_hashtype /**/
+?H:#define DB_Prefix_t $db_prefixtype /**/
+?H:.
+?LINT:set i_db
+: see if this is a db.h system
+set db.h i_db
+eval $inhdr
+
+@if DB_Hash_t
+case "$i_db" in
+define)
+ : Check the return type needed for hash
+ echo " "
+ echo "Checking return type needed for hash for Berkeley DB ..." >&4
+ $cat >try.c <<EOCP
+#$d_const HASCONST
+#ifndef HASCONST
+#define const
+#endif
+#include <sys/types.h>
+#include <db.h>
+u_int32_t hash_cb (ptr, size)
+const void *ptr;
+size_t size;
+{
+}
+HASHINFO info;
+int main()
+{
+ info.hash = hash_cb;
+}
+EOCP
+ if $cc $ccflags -c try.c >try.out 2>&1 ; then
+ if $contains warning try.out >>/dev/null 2>&1 ; then
+ db_hashtype='int'
+ else
+ db_hashtype='u_int32_t'
+ fi
+ else
+ echo "I can't seem to compile the test program." >&4
+ db_hashtype=int
+ fi
+ $rm_try
+ echo "Your version of Berkeley DB uses $db_hashtype for hash."
+ ;;
+*) db_hashtype=int
+ ;;
+esac
+
+@end
+@if DB_Prefix_t
+case "$i_db" in
+define)
+ : Check the return type needed for prefix
+ echo " "
+ echo "Checking return type needed for prefix for Berkeley DB ..." >&4
+ cat >try.c <<EOCP
+#$d_const HASCONST
+#ifndef HASCONST
+#define const
+#endif
+#include <sys/types.h>
+#include <db.h>
+size_t prefix_cb (key1, key2)
+const DBT *key1;
+const DBT *key2;
+{
+}
+BTREEINFO info;
+int main()
+{
+ info.prefix = prefix_cb;
+}
+EOCP
+ if $cc $ccflags -c try.c >try.out 2>&1 ; then
+ if $contains warning try.out >>/dev/null 2>&1 ; then
+ db_prefixtype='int'
+ else
+ db_prefixtype='size_t'
+ fi
+ else
+ echo "I can't seem to compile the test program." >&4
+ db_prefixtype='int'
+ fi
+ $rm_try
+ echo "Your version of Berkeley DB uses $db_prefixtype for prefix."
+ ;;
+*) db_prefixtype='int'
+ ;;
+esac
+
+@end
diff --git a/mcon/U/i_dbm.U b/mcon/U/i_dbm.U
new file mode 100644
index 0000000..e59737e
--- /dev/null
+++ b/mcon/U/i_dbm.U
@@ -0,0 +1,97 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: i_dbm.U,v $
+?RCS: Revision 3.0.1.2 1997/02/28 15:48:20 ram
+?RCS: patch61: added I_RPCSVC_DBM check
+?RCS:
+?RCS: Revision 3.0.1.1 1995/05/12 12:16:05 ram
+?RCS: patch54: made more robust by checking both header and lib (ADO)
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:08:15 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:i_dbm i_rpcsvcdbm: Inhdr Trylink Setvar cat
+?MAKE: -pick add $@ %<
+?S:i_dbm (d_odbm):
+?S: This variable conditionally defines the I_DBM symbol, which
+?S: indicates to the C program that <dbm.h> exists and should
+?S: be included.
+?S:.
+?S:i_rpcsvcdbm:
+?S: This variable conditionally defines the I_RPCSVC_DBM symbol, which
+?S: indicates to the C program that <rpcsvc/dbm.h> exists and should
+?S: be included. Some System V systems might need this instead of <dbm.h>.
+?S:.
+?C:I_DBM (HAS_ODBM ODBM):
+?C: This symbol, if defined, indicates that <dbm.h> exists and should
+?C: be included.
+?C:.
+?C:I_RPCSVC_DBM:
+?C: This symbol, if defined, indicates that <rpcsvc/dbm.h> exists and
+?C: should be included.
+?C:.
+?H:#$i_dbm I_DBM /**/
+?H:#$i_rpcsvcdbm I_RPCSVC_DBM /**/
+?H:.
+?T:d_dbmclose
+?LINT:set i_dbm i_rpcsvcdbm
+: see if dbm.h is available
+?X: We might just have the header, not the library.
+?X: We look for dbmclose() rather than dbminit() because
+?X: some versions of SCO Unix have -ldbm, but are missing dbmclose(). -- ADO
+?X: Some System V systems have <rpcsvc/dbm.h> instead of <dbm.h>.
+: see if dbmclose exists
+$cat >try.c <<EOC
+#include <dbm.h>
+int main(void)
+{
+ dbmclose();
+ return 0;
+}
+EOC
+set d_dbmclose
+eval $trylink
+
+case "$d_dbmclose" in
+$define)
+ val="$undef"
+ set i_rpcsvcdbm
+ eval $setvar
+
+ val="$define"
+ set i_dbm
+ eval $setvar
+ ;;
+*)
+ echo " "
+ echo "Hmm... trying to include <rpcsvc/dbm.h> to get dbmclose()..." >&4
+ $cat >try.c <<EOC
+#include <rpcsvc/dbm.h>
+int main(void)
+{
+ static int ret;
+ ret |= dbmclose();
+ return ret ? 0 : 1;
+}
+EOC
+ set d_dbmclose
+ eval $trylink
+
+ val="$d_dbmclose"
+ set i_rpcsvcdbm
+ eval $setvar
+
+ val="$undef"
+ set i_dbm
+ eval $setvar
+ ;;
+esac
+
diff --git a/mcon/U/i_dirent.U b/mcon/U/i_dirent.U
new file mode 100644
index 0000000..9a4b017
--- /dev/null
+++ b/mcon/U/i_dirent.U
@@ -0,0 +1,146 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: i_dirent.U,v $
+?RCS: Revision 3.0.1.4 1994/10/29 16:20:01 ram
+?RCS: patch36: failed scanning for 'd_namlen' with missing <dirent.h> (ADO)
+?RCS:
+?RCS: Revision 3.0.1.3 1994/06/20 07:01:25 ram
+?RCS: patch30: added direntrytype for hints, merely for NeXT (ADO)
+?RCS: patch30: now checks for both struct dirent and direct (ADO)
+?RCS:
+?RCS: Revision 3.0.1.2 1994/05/13 15:22:37 ram
+?RCS: patch27: new variable direntrytype for proper type setting (ADO)
+?RCS:
+?RCS: Revision 3.0.1.1 1994/01/24 14:11:15 ram
+?RCS: patch16: added new Direntry_t pseudo-type for directory entries
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:08:17 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: This unit looks whether there is a dirent system or not
+?X:
+?MAKE:i_dirent d_dirnamlen direntrytype: test contains Setvar \
+ Myread Findhdr cppstdin cppflags cppminus rm_try
+?MAKE: -pick add $@ %<
+?S:i_dirent:
+?S: This variable conditionally defines I_DIRENT, which indicates
+?S: to the C program that it should include <dirent.h>.
+?S:.
+?S:d_dirnamlen:
+?S: This variable conditionally defines DIRNAMLEN, which indicates
+?S: to the C program that the length of directory entry names is
+?S: provided by a d_namelen field.
+?S:.
+?S:direntrytype:
+?S: This symbol is set to 'struct direct' or 'struct dirent' depending on
+?S: whether dirent is available or not. You should use this pseudo type to
+?S: portably declare your directory entries.
+?S:.
+?C:I_DIRENT:
+?C: This symbol, if defined, indicates to the C program that it should
+?C: include <dirent.h>. Using this symbol also triggers the definition
+?C: of the Direntry_t define which ends up being 'struct dirent' or
+?C: 'struct direct' depending on the availability of <dirent.h>.
+?C:.
+?C:DIRNAMLEN:
+?C: This symbol, if defined, indicates to the C program that the length
+?C: of directory entry names is provided by a d_namlen field. Otherwise
+?C: you need to do strlen() on the d_name field.
+?C:.
+?C:Direntry_t:
+?C: This symbol is set to 'struct direct' or 'struct dirent' depending on
+?C: whether dirent is available or not. You should use this pseudo type to
+?C: portably declare your directory entries.
+?C:.
+?H:#$i_dirent I_DIRENT /**/
+?H:#$d_dirnamlen DIRNAMLEN /**/
+?H:?%<:@if I_DIRENT && Direntry_t
+?H:?%<:#define Direntry_t $direntrytype
+?H:?%<:@end
+?H:.
+?T:xinc guess1 guess2
+?LINT:set i_dirent d_dirnamlen
+: see if this is a dirent system
+echo " "
+if xinc=`./findhdr dirent.h`; $test "$xinc"; then
+ val="$define"
+ echo "<dirent.h> found." >&4
+else
+ val="$undef"
+ if xinc=`./findhdr sys/dir.h`; $test "$xinc"; then
+ echo "<sys/dir.h> found." >&4
+ echo " "
+ else
+ xinc=`./findhdr sys/ndir.h`
+ fi
+ echo "<dirent.h> NOT found." >&4
+fi
+set i_dirent
+eval $setvar
+
+?X: Use struct dirent or struct direct? If we're using dirent.h,
+?X: it's probably struct dirent, but apparently not always.
+?X: Assume $xinc still contains the name of the header file we're using.
+@if direntrytype || Direntry_t
+: Look for type of directory structure.
+echo " "
+$cppstdin $cppflags $cppminus < "$xinc" > try.c
+
+case "$direntrytype" in
+''|' ')
+ case "$i_dirent" in
+ $define) guess1='struct dirent' ;;
+ *) guess1='struct direct' ;;
+ esac
+ ;;
+*) guess1="$direntrytype"
+ ;;
+esac
+
+case "$guess1" in
+'struct dirent') guess2='struct direct' ;;
+*) guess2='struct dirent' ;;
+esac
+
+if $contains "$guess1" try.c >/dev/null 2>&1; then
+ direntrytype="$guess1"
+ echo "Your directory entries are $direntrytype." >&4
+elif $contains "$guess2" try.c >/dev/null 2>&1; then
+ direntrytype="$guess2"
+ echo "Your directory entries seem to be $direntrytype." >&4
+else
+ echo "I don't recognize your system's directory entries." >&4
+ rp="What type is used for directory entries on this system?"
+ dflt="$guess1"
+ . ./myread
+ direntrytype="$ans"
+fi
+$rm_try
+
+@end
+
+@if d_dirnamlen || DIRNAMLEN
+: see if the directory entry stores field length
+echo " "
+$cppstdin $cppflags $cppminus < "$xinc" > try.c
+if $contains 'd_namlen' try.c >/dev/null 2>&1; then
+ echo "Good, your directory entry keeps length information in d_namlen." >&4
+ val="$define"
+else
+ echo "Your directory entry does not know about the d_namlen field." >&4
+ val="$undef"
+fi
+set d_dirnamlen
+eval $setvar
+$rm_try
+
+@end
diff --git a/mcon/U/i_dld.U b/mcon/U/i_dld.U
new file mode 100644
index 0000000..cd2e3b1
--- /dev/null
+++ b/mcon/U/i_dld.U
@@ -0,0 +1,34 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu>
+?RCS:
+?RCS: $Log: i_dld.U,v $
+?RCS: Revision 3.0.1.1 1994/10/29 16:20:07 ram
+?RCS: patch36: created by ADO
+?RCS:
+?MAKE:i_dld: Inhdr
+?MAKE: -pick add $@ %<
+?S:i_dld:
+?S: This variable conditionally defines the I_DLD symbol, which
+?S: indicates to the C program that <dld.h> (GNU dynamic loading)
+?S: exists and should be included.
+?S:.
+?C:I_DLD:
+?C: This symbol, if defined, indicates that <dld.h> exists and should
+?C: be included before using GNU dynamic loading features.
+?C:.
+?H:#$i_dld I_DLD /**/
+?H:.
+?LINT:set i_dld
+: see if dld is available
+set dld.h i_dld
+eval $inhdr
+
diff --git a/mcon/U/i_dlfcn.U b/mcon/U/i_dlfcn.U
new file mode 100644
index 0000000..a378c7f
--- /dev/null
+++ b/mcon/U/i_dlfcn.U
@@ -0,0 +1,34 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu>
+?RCS:
+?RCS: $Log: i_dlfcn.U,v $
+?RCS: Revision 3.0.1.1 1994/08/29 16:21:53 ram
+?RCS: patch32: created by ADO
+?RCS:
+?MAKE:i_dlfcn: Inhdr
+?MAKE: -pick add $@ %<
+?S:i_dlfcn:
+?S: This variable conditionally defines the I_DLFCN symbol, which
+?S: indicates to the C program that <dlfcn.h> exists and should
+?S: be included.
+?S:.
+?C:I_DLFCN:
+?C: This symbol, if defined, indicates that <dlfcn.h> exists and should
+?C: be included.
+?C:.
+?H:#$i_dlfcn I_DLFCN /**/
+?H:.
+?LINT:set i_dlfcn
+: see if dlfcn is available
+set dlfcn.h i_dlfcn
+eval $inhdr
+
diff --git a/mcon/U/i_execinfo.U b/mcon/U/i_execinfo.U
new file mode 100644
index 0000000..e6322bc
--- /dev/null
+++ b/mcon/U/i_execinfo.U
@@ -0,0 +1,27 @@
+?RCS: $Id: i_execinfo.U 34 2010-11-27 11:55:39Z rmanfredi $
+?RCS:
+?RCS: Copyright (c) 2011, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:i_execinfo: Inhdr
+?MAKE: -pick add $@ %<
+?S:i_execinfo:
+?S: This variable conditionally defines the I_EXECINFO symbol, and indicates
+?S: whether a C program may include <execinfo.h>, for backtrace() support.
+?S:.
+?C:I_EXECINFO:
+?C: This symbol, if defined, indicates to the C program that it should
+?C: include <execinfo.h> for backtrace() support.
+?C:.
+?H:#$i_execinfo I_EXECINFO /**/
+?H:.
+?LINT:set i_execinfo
+: see if this is an execinfo.h system
+set execinfo.h i_execinfo
+eval $inhdr
+
diff --git a/mcon/U/i_fcntl.U b/mcon/U/i_fcntl.U
new file mode 100644
index 0000000..d7b3d24
--- /dev/null
+++ b/mcon/U/i_fcntl.U
@@ -0,0 +1,61 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: i_fcntl.U,v $
+?RCS: Revision 3.0 1993/08/18 12:08:18 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:i_fcntl: h_fcntl h_sysfile +i_sysfile Inhdr Setvar
+?MAKE: -pick add $@ %<
+?S:i_fcntl:
+?S: This variable controls the value of I_FCNTL (which tells
+?S: the C program to include <fcntl.h>).
+?S:.
+?C:I_FCNTL (HDR_O_STUFF FCNTL):
+?C: This manifest constant tells the C program to include <fcntl.h>.
+?C:.
+?H:#$i_fcntl I_FCNTL /**/
+?H:.
+?T:val
+?X: Make line lists +i_sysfile to ensure tests for <sys/file.h> will be
+?X: conducted prior tests for <fcntl.h>, hence making sure the h_sysfile
+?X: variable is correctly set when we reach that unit.
+?LINT:set i_fcntl
+?LINT:use i_sysfile
+?LINT:change h_fcntl
+: see if fcntl.h is there
+val=''
+set fcntl.h val
+eval $inhdr
+
+: see if we can include fcntl.h
+case "$val" in
+"$define")
+ echo " "
+ if $h_fcntl; then
+ val="$define"
+ echo "We'll be including <fcntl.h>." >&4
+ else
+ val="$undef"
+ if $h_sysfile; then
+ echo "We don't need to include <fcntl.h> if we include <sys/file.h>." >&4
+ else
+ echo "We won't be including <fcntl.h>." >&4
+ fi
+ fi
+ ;;
+*)
+ h_fcntl=false
+ val="$undef"
+ ;;
+esac
+set i_fcntl
+eval $setvar
+
diff --git a/mcon/U/i_float.U b/mcon/U/i_float.U
new file mode 100644
index 0000000..73951bb
--- /dev/null
+++ b/mcon/U/i_float.U
@@ -0,0 +1,35 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu>
+?RCS:
+?RCS: $Log: i_float.U,v $
+?RCS: Revision 3.0.1.1 1994/08/29 16:21:57 ram
+?RCS: patch32: created by ADO
+?RCS:
+?MAKE:i_float: Inhdr
+?MAKE: -pick add $@ %<
+?S:i_float:
+?S: This variable conditionally defines the I_FLOAT symbol, and indicates
+?S: whether a C program may include <float.h> to get symbols like DBL_MAX
+?S: or DBL_MIN, i.e. machine dependent floating point values.
+?S:.
+?C:I_FLOAT:
+?C: This symbol, if defined, indicates to the C program that it should
+?C: include <float.h> to get definition of symbols like DBL_MAX or
+?C: DBL_MIN, i.e. machine dependent floating point values.
+?C:.
+?H:#$i_float I_FLOAT /**/
+?H:.
+?LINT:set i_float
+: see if this is a float.h system
+set float.h i_float
+eval $inhdr
+
diff --git a/mcon/U/i_gdbm.U b/mcon/U/i_gdbm.U
new file mode 100644
index 0000000..69755ba
--- /dev/null
+++ b/mcon/U/i_gdbm.U
@@ -0,0 +1,46 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: i_gdbm.U,v $
+?RCS: Revision 3.0.1.1 1995/05/12 12:16:39 ram
+?RCS: patch54: made more robust by checking both header and lib (ADO)
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:08:19 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:i_gdbm: Trylink cat
+?MAKE: -pick add $@ %<
+?S:i_gdbm (d_gdbm):
+?S: This variable conditionally defines the I_GDBM symbol, which
+?S: indicates to the C program that <gdbm.h> exists and should
+?S: be included.
+?S:.
+?C:I_GDBM (HAS_GDBM):
+?C: This symbol, if defined, indicates that <gdbm.h> exists and should
+?C: be included.
+?C:.
+?H:#$i_gdbm I_GDBM /**/
+?H:.
+?LINT:set i_gdbm
+: see if gdbm.h is available
+$cat >try.c <<EOC
+#include <gdbm.h>
+void fatal_func(void) { return; };
+int main(void)
+{
+ GDBM_FILE ret;
+
+ ret = gdbm_open("name", 1, 2, 3, fatal_func);
+ return ret ? 0 : 1;
+}
+EOC
+set i_gdbm
+eval $trylink
+
diff --git a/mcon/U/i_grp.U b/mcon/U/i_grp.U
new file mode 100644
index 0000000..4d6ba4f
--- /dev/null
+++ b/mcon/U/i_grp.U
@@ -0,0 +1,31 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: i_grp.U,v $
+?RCS: Revision 3.0 1993/08/18 12:08:20 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:i_grp: Inhdr
+?MAKE: -pick add $@ %<
+?S:i_grp:
+?S: This variable conditionally defines the I_GRP symbol, and indicates
+?S: whether a C program should include <grp.h>.
+?S:.
+?C:I_GRP:
+?C: This symbol, if defined, indicates to the C program that it should
+?C: include <grp.h>.
+?C:.
+?H:#$i_grp I_GRP /**/
+?H:.
+?LINT:set i_grp
+: see if this is an grp system
+set grp.h i_grp
+eval $inhdr
+
diff --git a/mcon/U/i_iconv.U b/mcon/U/i_iconv.U
new file mode 100644
index 0000000..beb2356
--- /dev/null
+++ b/mcon/U/i_iconv.U
@@ -0,0 +1,31 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 2006, Christian Biere
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?X:
+?X: This unit looks whether <iconv.h> is available or not
+?X:
+?MAKE:i_iconv: Inhdr
+?MAKE: -pick add $@ %<
+?S:i_iconv:
+?S: This variable conditionally defines I_ICONV, which indicates
+?S: to the C program that it should include <iconv.h>.
+?S:.
+?C:I_ICONV:
+?C: This symbol, if defined, indicates to the C program that it should
+?C: include <iconv.h>.
+?C:.
+?H:#$i_iconv I_ICONV /**/
+?H:.
+?Y:BOTTOM
+?LINT:set i_iconv
+: see if this is a iconv.h system
+set iconv.h i_iconv
+eval $inhdr
+
diff --git a/mcon/U/i_ifaddrs.U b/mcon/U/i_ifaddrs.U
new file mode 100644
index 0000000..23ae0bd
--- /dev/null
+++ b/mcon/U/i_ifaddrs.U
@@ -0,0 +1,27 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 2006, Christian Biere
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:i_ifaddrs: Inhdr
+?MAKE: -pick add $@ %<
+?S:i_ifaddrs:
+?S: This variable conditionally defines the I_IFADDRS symbol, and indicates
+?S: whether a C program should include <ifaddrs.h>.
+?S:.
+?C:I_IFADDRS:
+?C: This symbol, if defined, indicates to the C program that it should
+?C: include <ifaddrs.h>.
+?C:.
+?H:#$i_ifaddrs I_IFADDRS /**/
+?H:.
+?LINT:set i_ifaddrs
+: see if this is a ifaddrs.h system
+set ifaddrs.h i_ifaddrs
+eval $inhdr
+
diff --git a/mcon/U/i_inttypes.U b/mcon/U/i_inttypes.U
new file mode 100644
index 0000000..fb02d0a
--- /dev/null
+++ b/mcon/U/i_inttypes.U
@@ -0,0 +1,35 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: i_sysun.U,v $
+?RCS: Revision 3.0 1993/08/18 12:08:42 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: This unit looks wether <inttypes.h> is available or not
+?X:
+?MAKE:i_inttypes: Inhdr
+?MAKE: -pick add $@ %<
+?S:i_inttypes:
+?S: This variable conditionally defines I_INTTYPES, which indicates
+?S: to the C program that it should include <inttypes.h> to get
+?S: format conversions of integer types.
+?S:.
+?C:I_INTTYPES:
+?C: This symbol, if defined, indicates to the C program that it should
+?C: include <inttypes.h> to get format conversions of integer types.
+?C:.
+?H:#$i_inttypes I_INTTYPES /**/
+?H:.
+?LINT:set i_inttypes
+: see if this is a inttypes.h system
+set inttypes.h i_inttypes
+eval $inhdr
+
diff --git a/mcon/U/i_invent.U b/mcon/U/i_invent.U
new file mode 100644
index 0000000..b60ab78
--- /dev/null
+++ b/mcon/U/i_invent.U
@@ -0,0 +1,27 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 2006, Christian Biere
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:i_invent: Inhdr
+?MAKE: -pick add $@ %<
+?S:i_invent:
+?S: This variable conditionally defines the I_INVENT symbol, and indicates
+?S: whether a C program should include <invent.h>.
+?S:.
+?C:I_INVENT:
+?C: This symbol, if defined, indicates to the C program that it should
+?C: include <invent.h>.
+?C:.
+?H:#$i_invent I_INVENT /**/
+?H:.
+?LINT:set i_invent
+: see if this is a invent.h system
+set invent.h i_invent
+eval $inhdr
+
diff --git a/mcon/U/i_langinfo.U b/mcon/U/i_langinfo.U
new file mode 100644
index 0000000..abc198d
--- /dev/null
+++ b/mcon/U/i_langinfo.U
@@ -0,0 +1,27 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 2006, Christian Biere
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:i_langinfo: Inhdr
+?MAKE: -pick add $@ %<
+?S:i_langinfo:
+?S: This variable conditionally defines the I_LANGINFO symbol, and indicates
+?S: whether a C program should include <langinfo.h>.
+?S:.
+?C:I_LANGINFO:
+?C: This symbol, if defined, indicates to the C program that it should
+?C: include <langinfo.h>.
+?C:.
+?H:#$i_langinfo I_LANGINFO /**/
+?H:.
+?LINT:set i_langinfo
+: see if this is a langinfo system
+set langinfo.h i_langinfo
+eval $inhdr
+
diff --git a/mcon/U/i_libcharset.U b/mcon/U/i_libcharset.U
new file mode 100644
index 0000000..01109f7
--- /dev/null
+++ b/mcon/U/i_libcharset.U
@@ -0,0 +1,27 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 2006, Christian Biere
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:i_libcharset: Inhdr
+?MAKE: -pick add $@ %<
+?S:i_libcharset:
+?S: This variable conditionally defines the I_LIBCHARSET symbol, and indicates
+?S: whether a C program should include <libcharset.h>.
+?S:.
+?C:I_LIBCHARSET:
+?C: This symbol, if defined, indicates to the C program that it should
+?C: include <libcharset.h>.
+?C:.
+?H:#$i_libcharset I_LIBCHARSET /**/
+?H:.
+?LINT:set i_libcharset
+: see if this is a libcharset system
+set libcharset.h i_libcharset
+eval $inhdr
+
diff --git a/mcon/U/i_libintl.U b/mcon/U/i_libintl.U
new file mode 100644
index 0000000..6df2988
--- /dev/null
+++ b/mcon/U/i_libintl.U
@@ -0,0 +1,27 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 2006, Christian Biere
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:i_libintl: Inhdr
+?MAKE: -pick add $@ %<
+?S:i_libintl:
+?S: This variable conditionally defines the I_LIBINTL symbol, and indicates
+?S: whether a C program should include <libintl.h>.
+?S:.
+?C:I_LIBINTL:
+?C: This symbol, if defined, indicates to the C program that it should
+?C: include <libintl.h>.
+?C:.
+?H:#$i_libintl I_LIBINTL /**/
+?H:.
+?LINT:set i_libintl
+: see if this is a libintl system
+set libintl.h i_libintl
+eval $inhdr
+
diff --git a/mcon/U/i_limits.U b/mcon/U/i_limits.U
new file mode 100644
index 0000000..2b9a998
--- /dev/null
+++ b/mcon/U/i_limits.U
@@ -0,0 +1,33 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: i_limits.U,v $
+?RCS: Revision 3.0 1993/08/18 12:08:20 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:i_limits: Inhdr
+?MAKE: -pick add $@ %<
+?S:i_limits:
+?S: This variable conditionally defines the I_LIMITS symbol, and indicates
+?S: whether a C program may include <limits.h> to get symbols like WORD_BIT
+?S: and friends.
+?S:.
+?C:I_LIMITS:
+?C: This symbol, if defined, indicates to the C program that it should
+?C: include <limits.h> to get definition of symbols like WORD_BIT or
+?C: LONG_MAX, i.e. machine dependant limitations.
+?C:.
+?H:#$i_limits I_LIMITS /**/
+?H:.
+?LINT:set i_limits
+: see if this is a limits.h system
+set limits.h i_limits
+eval $inhdr
+
diff --git a/mcon/U/i_linux_netlink.U b/mcon/U/i_linux_netlink.U
new file mode 100644
index 0000000..37a4790
--- /dev/null
+++ b/mcon/U/i_linux_netlink.U
@@ -0,0 +1,29 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 2011, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:i_linux_netlink: Inhdr
+?MAKE: -pick add $@ %<
+?S:i_linux_netlink:
+?S: This variable conditionally defines the I_LINUX_NETLINK symbol, and
+?S: indicates whether a C program may include <linux/netlink.h> to define
+?S: the NLMSG_DATA() and other NLMSG_NEXT() macros.
+?S:.
+?C:I_LINUX_NETLINK:
+?C: This symbol, if defined, indicates to the C program that it should
+?C: include <linux/netlink.h> to get definitions for the NLMSG_DATA() and
+?C: other NLMSG_NEXT() macros.
+?C:.
+?H:#$i_linux_netlink I_LINUX_NETLINK /**/
+?H:.
+?LINT:set i_linux_netlink
+: see if this is a linux/netlink.h system
+set linux/netlink.h i_linux_netlink
+eval $inhdr
+
diff --git a/mcon/U/i_linux_rtnetlink.U b/mcon/U/i_linux_rtnetlink.U
new file mode 100644
index 0000000..8d57ced
--- /dev/null
+++ b/mcon/U/i_linux_rtnetlink.U
@@ -0,0 +1,29 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 2011, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:i_linux_rtnetlink: Inhdr
+?MAKE: -pick add $@ %<
+?S:i_linux_rtnetlink:
+?S: This variable conditionally defines the I_LINUX_RTNETLINK symbol, and
+?S: indicates whether a C program may include <linux/rtnetlink.h> to define
+?S: the RTA_DATA() and other RTA_NEXT() macros.
+?S:.
+?C:I_LINUX_RTNETLINK:
+?C: This symbol, if defined, indicates to the C program that it should
+?C: include <linux/rtnetlink.h> to get definitions for the RTA_DATA() and
+?C: other RTA_NEXT() macros.
+?C:.
+?H:#$i_linux_rtnetlink I_LINUX_RTNETLINK /**/
+?H:.
+?LINT:set i_linux_rtnetlink
+: see if this is a linux/rtnetlink.h system
+set linux/rtnetlink.h i_linux_rtnetlink
+eval $inhdr
+
diff --git a/mcon/U/i_locale.U b/mcon/U/i_locale.U
new file mode 100644
index 0000000..deeeb44
--- /dev/null
+++ b/mcon/U/i_locale.U
@@ -0,0 +1,32 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1996, Andy Dougherty
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: i_locale.U,v $
+?RCS: Revision 3.0.1.1 1997/02/28 15:48:23 ram
+?RCS: patch61: created
+?RCS:
+?MAKE:i_locale: Inhdr
+?MAKE: -pick add $@ %<
+?S:i_locale:
+?S: This variable conditionally defines the I_LOCALE symbol,
+?S: and indicates whether a C program should include <locale.h>.
+?S:.
+?C:I_LOCALE:
+?C: This symbol, if defined, indicates to the C program that it should
+?C: include <locale.h>.
+?C:.
+?H:#$i_locale I_LOCALE /**/
+?H:.
+?LINT:set i_locale
+: see if locale.h is available
+set locale.h i_locale
+eval $inhdr
+
diff --git a/mcon/U/i_malloc.U b/mcon/U/i_malloc.U
new file mode 100644
index 0000000..0948c17
--- /dev/null
+++ b/mcon/U/i_malloc.U
@@ -0,0 +1,31 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: i_malloc.U,v $
+?RCS: Revision 3.0 1993/08/18 12:08:21 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:i_malloc: Inhdr
+?MAKE: -pick add $@ %<
+?S:i_malloc:
+?S: This variable conditionally defines the I_MALLOC symbol, and indicates
+?S: whether a C program should include <malloc.h>.
+?S:.
+?C:I_MALLOC:
+?C: This symbol, if defined, indicates to the C program that it should
+?C: include <malloc.h>.
+?C:.
+?H:#$i_malloc I_MALLOC /**/
+?H:.
+?LINT:set i_malloc
+: see if this is a malloc.h system
+set malloc.h i_malloc
+eval $inhdr
+
diff --git a/mcon/U/i_math.U b/mcon/U/i_math.U
new file mode 100644
index 0000000..057c3e9
--- /dev/null
+++ b/mcon/U/i_math.U
@@ -0,0 +1,52 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu>
+?RCS:
+?RCS: $Log: i_math.U,v $
+?RCS: Revision 3.0.1.1 1994/08/29 16:21:59 ram
+?RCS: patch32: created by ADO
+?RCS:
+?MAKE:i_math: Inhdr Trylink cat
+?MAKE: -pick add $@ %<
+?X: Are there really systems that *DON'T* have math.h?
+?S:i_math:
+?S: This variable conditionally defines the I_MATH symbol, and indicates
+?S: whether a C program may include <math.h>.
+?S:.
+?C:I_MATH:
+?C: This symbol, if defined, indicates to the C program that it should
+?C: include <math.h>.
+?C:.
+?H:#$i_math I_MATH /**/
+?H:.
+?LINT:set i_math
+: see if this is a math.h system
+set math.h i_math
+eval $inhdr
+
+: see whether we need libm
+$cat >try.c <<EOC
+#$i_math I_MATH
+#ifdef I_MATH
+#include <math.h>
+#endif
+int main(void)
+{
+ static double ret;
+
+ ret += 1.2 * pow(1.2, 1.2);
+ ret += 1.2 * sqrt(ret);
+ return 0 != ret;
+}
+EOC
+set val '-lm'
+eval $trylink
+
diff --git a/mcon/U/i_memory.U b/mcon/U/i_memory.U
new file mode 100644
index 0000000..952e311
--- /dev/null
+++ b/mcon/U/i_memory.U
@@ -0,0 +1,65 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: i_memory.U,v $
+?RCS: Revision 3.0.1.3 1994/06/20 07:01:55 ram
+?RCS: patch30: cosmetic changes
+?RCS:
+?RCS: Revision 3.0.1.2 1994/05/13 15:23:56 ram
+?RCS: patch27: modified to avoid spurious Whoa warnings (ADO)
+?RCS:
+?RCS: Revision 3.0.1.1 1994/05/06 15:02:25 ram
+?RCS: patch23: avoid conflicts with <string.h>
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:08:22 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:i_memory: Inhdr strings cppstdin cppflags cppminus contains rm Setvar
+?MAKE: -pick add $@ %<
+?S:i_memory:
+?S: This variable conditionally defines the I_MEMORY symbol, and indicates
+?S: whether a C program should include <memory.h>.
+?S:.
+?C:I_MEMORY:
+?C: This symbol, if defined, indicates to the C program that it should
+?C: include <memory.h>.
+?C:.
+?H:#$i_memory I_MEMORY /**/
+?H:.
+?LINT:set i_memory
+?X:
+?X: Unfortunately, the definitions of memory functions sometimes
+?X: conflict with those in <string.h>. We'll assume that if
+?X: <string.h> contains memcpy, then we don't need memory.h
+?X:
+: see if memory.h is available.
+val=''
+set memory.h val
+eval $inhdr
+
+: See if it conflicts with string.h
+case "$val" in
+$define)
+ case "$strings" in
+ '') ;;
+ *)
+ $cppstdin $cppflags $cppminus < $strings > mem.h
+ if $contains 'memcpy' mem.h >/dev/null 2>&1; then
+ echo " "
+ echo "We won't be including <memory.h>."
+ val="$undef"
+ fi
+ $rm -f mem.h
+ ;;
+ esac
+esac
+set i_memory
+eval $setvar
+
diff --git a/mcon/U/i_mswsock.U b/mcon/U/i_mswsock.U
new file mode 100644
index 0000000..2622f32
--- /dev/null
+++ b/mcon/U/i_mswsock.U
@@ -0,0 +1,27 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, 2010 Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:i_mswsock: Inhdr
+?MAKE: -pick add $@ %<
+?S:i_mswsock:
+?S: This variable conditionally defines the I_MSWSOCK symbol, and indicates
+?S: whether a C program may include <Mswsock.h>.
+?S:.
+?C:I_MSWSOCK:
+?C: This symbol, if defined, indicates to the C program that it should
+?C: include <Mswsock.h>.
+?C:.
+?H:#$i_mswsock I_MSWSOCK /**/
+?H:.
+?LINT:set i_mswsock
+: see if this is a mswsock.h system
+set mswsock.h i_mswsock
+eval $inhdr
+
diff --git a/mcon/U/i_ndbm.U b/mcon/U/i_ndbm.U
new file mode 100644
index 0000000..ac8f8e9
--- /dev/null
+++ b/mcon/U/i_ndbm.U
@@ -0,0 +1,49 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: i_ndbm.U,v $
+?RCS: Revision 3.0.1.1 1995/05/12 12:16:53 ram
+?RCS: patch54: made more robust by checking both header and lib (ADO)
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:08:23 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:i_ndbm: Inhdr Trylink Setvar cat
+?MAKE: -pick add $@ %<
+?S:i_ndbm (d_ndbm):
+?S: This variable conditionally defines the I_NDBM symbol, which
+?S: indicates to the C program that <ndbm.h> exists and should
+?S: be included.
+?S:.
+?C:I_NDBM (HAS_NDBM NDBM):
+?C: This symbol, if defined, indicates that <ndbm.h> exists and should
+?C: be included.
+?C:.
+?H:#$i_ndbm I_NDBM /**/
+?H:.
+?T:d_dbm_open
+?LINT:set i_ndbm
+: see if ndbm.h is available
+$cat >try.c <<EOC
+#include <ndbm.h>
+int main(void)
+{
+ static DBM *dbm;
+ dbm = dbm_open("file", 1, 2);
+ return dbm ? 0 : 1;
+}
+EOC
+set d_dbm_open
+eval $trylink
+
+val="$d_dbm_open"
+set i_ndbm
+eval $setvar
+
diff --git a/mcon/U/i_netdb.U b/mcon/U/i_netdb.U
new file mode 100644
index 0000000..a4ec000
--- /dev/null
+++ b/mcon/U/i_netdb.U
@@ -0,0 +1,27 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 2006, Christian Biere
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:i_netdb: Inhdr
+?MAKE: -pick add $@ %<
+?S:i_netdb:
+?S: This variable conditionally defines the I_NETDB symbol, and indicates
+?S: whether a C program should include <netdb.h>.
+?S:.
+?C:I_NETDB:
+?C: This symbol, if defined, indicates to the C program that it should
+?C: include <netdb.h>.
+?C:.
+?H:#$i_netdb I_NETDB /**/
+?H:.
+?LINT:set i_netdb
+: see if this is a netdb.h system
+set netdb.h i_netdb
+eval $inhdr
+
diff --git a/mcon/U/i_neterrno.U b/mcon/U/i_neterrno.U
new file mode 100644
index 0000000..7bc231d
--- /dev/null
+++ b/mcon/U/i_neterrno.U
@@ -0,0 +1,65 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu>
+?RCS:
+?RCS: $Log: i_neterrno.U,v $
+?RCS: Revision 3.0.1.3 1994/10/29 16:20:29 ram
+?RCS: patch36: forgot to initialize 'val' to an empty value (ADO)
+?RCS:
+?RCS: Revision 3.0.1.2 1994/08/29 16:22:10 ram
+?RCS: patch32: removed spurious echo
+?RCS:
+?RCS: Revision 3.0.1.1 1994/06/20 07:02:05 ram
+?RCS: patch30: created by ADO
+?RCS:
+?MAKE:i_neterrno: Inhdr +cc +ccflags rm_try Setvar
+?MAKE: -pick add $@ %<
+?S:i_neterrno:
+?S: This variable conditionally defines the I_NET_ERRNO symbol, which
+?S: indicates to the C program that <net/errno.h> exists and should
+?S: be included.
+?S:.
+?C:I_NET_ERRNO:
+?C: This symbol, if defined, indicates that <net/errno.h> exists and
+?C: should be included.
+?C:.
+?H:#$i_neterrno I_NET_ERRNO /**/
+?H:.
+?LINT:set i_neterrno
+: see if net/errno.h is available
+val=''
+set net/errno.h val
+eval $inhdr
+
+: Unfortunately, it causes problems on some systems. Arrgh.
+case "$val" in
+$define)
+ cat > try.c <<'EOM'
+#include <stdio.h>
+#include <errno.h>
+#include <net/errno.h>
+int func()
+{
+ return ENOTSOCK;
+}
+EOM
+ if $cc $ccflags -c try.c >/dev/null 2>&1; then
+ echo "We'll be including <net/errno.h>." >&4
+ else
+ echo "We won't be including <net/errno.h>." >&4
+ val="$undef"
+ fi
+ $rm_try
+ ;;
+esac
+set i_neterrno
+eval $setvar
+
diff --git a/mcon/U/i_netif.U b/mcon/U/i_netif.U
new file mode 100644
index 0000000..460daf1
--- /dev/null
+++ b/mcon/U/i_netif.U
@@ -0,0 +1,27 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 2006, Christian Biere
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:i_netif: Inhdr
+?MAKE: -pick add $@ %<
+?S:i_netif:
+?S: This variable conditionally defines the I_NET_IF symbol, and indicates
+?S: whether a C program should include <net/if.h>.
+?S:.
+?C:I_NET_IF:
+?C: This symbol, if defined, indicates to the C program that it should
+?C: include <net/if.h>.
+?C:.
+?H:#$i_netif I_NET_IF /**/
+?H:.
+?LINT:set i_netif
+: see if this is a net/if.h system
+set net/if.h i_netif
+eval $inhdr
+
diff --git a/mcon/U/i_netroute.U b/mcon/U/i_netroute.U
new file mode 100644
index 0000000..8c00e5a
--- /dev/null
+++ b/mcon/U/i_netroute.U
@@ -0,0 +1,30 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 2011, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?X:
+?X: This unit looks whether <net/route.h> is available or not
+?X:
+?MAKE:i_netroute: Inhdr
+?MAKE: -pick add $@ %<
+?S:i_netroute:
+?S: This variable conditionally defines I_NET_ROUTE, which indicates
+?S: to the C program that it can include <net/route.h>.
+?S:.
+?C:I_NET_ROUTE:
+?C: This symbol, if defined, indicates to the C program that it can
+?C: include <net/route.h>.
+?C:.
+?H:#$i_netroute I_NET_ROUTE /**/
+?H:.
+?LINT:set i_netroute
+: see if this is a net/route.h system
+set net/route.h i_netroute
+eval $inhdr
+
diff --git a/mcon/U/i_niin.U b/mcon/U/i_niin.U
new file mode 100644
index 0000000..e24cc4a
--- /dev/null
+++ b/mcon/U/i_niin.U
@@ -0,0 +1,45 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: i_niin.U,v $
+?RCS: Revision 3.0 1993/08/18 12:08:24 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: This unit looks wether <netinet/in.h> is available or not
+?X:
+?MAKE:i_niin i_sysin: Inhdr
+?MAKE: -pick add $@ %<
+?S:i_niin:
+?S: This variable conditionally defines I_NETINET_IN, which indicates
+?S: to the C program that it should include <netinet/in.h>. Otherwise,
+?S: you may try <sys/in.h>.
+?S:.
+?S:i_sysin:
+?S: This variable conditionally defines I_SYS_IN, which indicates
+?S: to the C program that it should include <sys/in.h> instead of
+?S: <netinet/in.h>.
+?S:.
+?C:I_NETINET_IN:
+?C: This symbol, if defined, indicates to the C program that it should
+?C: include <netinet/in.h>. Otherwise, you may try <sys/in.h>.
+?C:.
+?C:I_SYS_IN (I_SYSIN):
+?C: This symbol, if defined, indicates to the C program that it should
+?C: include <sys/in.h> instead of <netinet/in.h>.
+?C:.
+?H:#$i_niin I_NETINET_IN /**/
+?H:#$i_sysin I_SYS_IN /**/
+?H:.
+?LINT:set i_niin i_sysin
+: see if this is a netinet/in.h or sys/in.h system
+set netinet/in.h i_niin sys/in.h i_sysin
+eval $inhdr
+
diff --git a/mcon/U/i_niip.U b/mcon/U/i_niip.U
new file mode 100644
index 0000000..b04edf1
--- /dev/null
+++ b/mcon/U/i_niip.U
@@ -0,0 +1,30 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 2006, Christian Biere
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?X:
+?X: This unit looks whether <netinet/ip.h> is available or not
+?X:
+?MAKE:i_niip: Inhdr
+?MAKE: -pick add $@ %<
+?S:i_niip:
+?S: This variable conditionally defines I_NETINET_IP, which indicates
+?S: to the C program that it should include <netinet/ip.h>.
+?S:.
+?C:I_NETINET_IP:
+?C: This symbol, if defined, indicates to the C program that it should
+?C: include <netinet/ip.h>.
+?C:.
+?H:#$i_niip I_NETINET_IP /**/
+?H:.
+?LINT:set i_niip
+: see if this is a netinet/ip.h system
+set netinet/ip.h i_niip
+eval $inhdr
+
diff --git a/mcon/U/i_poll.U b/mcon/U/i_poll.U
new file mode 100644
index 0000000..90a2c7a
--- /dev/null
+++ b/mcon/U/i_poll.U
@@ -0,0 +1,28 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:i_poll: Inhdr
+?MAKE: -pick add $@ %<
+?S:i_poll:
+?S: This variable conditionally defines the I_POLL symbol, which
+?S: indicates to the C program that it should include <poll.h>.
+?S:.
+?C:I_POLL:
+?C: This symbol, if defined, indicates that the program may include
+?C: <poll.h>. If there is no <poll.h>, then you may check I_SYS_POLL
+?C: instead to see whether there is a <sys/poll.h> to include.
+?C:.
+?H:#$i_poll I_POLL /**/
+?H:.
+?LINT:set i_poll
+: see if there is a poll.h file
+set poll.h i_poll
+eval $inhdr
+
diff --git a/mcon/U/i_pthread.U b/mcon/U/i_pthread.U
new file mode 100644
index 0000000..8f14696
--- /dev/null
+++ b/mcon/U/i_pthread.U
@@ -0,0 +1,26 @@
+?RCS:
+?RCS: Copyright (c) 2011, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:i_pthread: Inhdr
+?MAKE: -pick add $@ %<
+?S:i_pthread:
+?S: This variable conditionally defines the I_PTHREAD symbol, and indicates
+?S: whether a C program may include <pthread.h>, for POSIX threads.
+?S:.
+?C:I_PTHREAD:
+?C: This symbol, if defined, indicates to the C program that it should
+?C: include <pthread.h> for POSIX threads.
+?C:.
+?H:#$i_pthread I_PTHREAD /**/
+?H:.
+?LINT:set i_pthread
+: see if this is a pthread.h system
+set pthread.h i_pthread
+eval $inhdr
+
diff --git a/mcon/U/i_pwd.U b/mcon/U/i_pwd.U
new file mode 100644
index 0000000..8ee4156
--- /dev/null
+++ b/mcon/U/i_pwd.U
@@ -0,0 +1,162 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: i_pwd.U,v $
+?RCS: Revision 3.0.1.2 1995/07/25 14:10:57 ram
+?RCS: patch56: use setvar so hint file values can override our guesses (ADO)
+?RCS:
+?RCS: Revision 3.0.1.1 1994/05/06 15:03:27 ram
+?RCS: patch23: had forgotten cppminus in cppstdin test (ADO)
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:08:25 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: This unit checks whether there is a pwd system or not
+?X:
+?MAKE:i_pwd d_pwquota d_pwage d_pwchange d_pwclass d_pwexpire d_pwcomment: \
+ contains rm cppstdin cppflags cppminus Inhdr Findhdr Setvar
+?MAKE: -pick add $@ %<
+?S:i_pwd:
+?S: This variable conditionally defines I_PWD, which indicates
+?S: to the C program that it should include <pwd.h>.
+?S:.
+?S:d_pwquota:
+?S: This varaible conditionally defines PWQUOTA, which indicates
+?S: that struct passwd contains pw_quota.
+?S:.
+?S:d_pwage:
+?S: This varaible conditionally defines PWAGE, which indicates
+?S: that struct passwd contains pw_age.
+?S:.
+?S:d_pwchange:
+?S: This varaible conditionally defines PWCHANGE, which indicates
+?S: that struct passwd contains pw_change.
+?S:.
+?S:d_pwclass:
+?S: This varaible conditionally defines PWCLASS, which indicates
+?S: that struct passwd contains pw_class.
+?S:.
+?S:d_pwexpire:
+?S: This varaible conditionally defines PWEXPIRE, which indicates
+?S: that struct passwd contains pw_expire.
+?S:.
+?S:d_pwcomment:
+?S: This varaible conditionally defines PWCOMMENT, which indicates
+?S: that struct passwd contains pw_comment.
+?S:.
+?C:I_PWD:
+?C: This symbol, if defined, indicates to the C program that it should
+?C: include <pwd.h>.
+?C:.
+?C:PWQUOTA:
+?C: This symbol, if defined, indicates to the C program that struct passwd
+?C: contains pw_quota.
+?C:.
+?C:PWAGE:
+?C: This symbol, if defined, indicates to the C program that struct passwd
+?C: contains pw_age.
+?C:.
+?C:PWCHANGE:
+?C: This symbol, if defined, indicates to the C program that struct passwd
+?C: contains pw_change.
+?C:.
+?C:PWCLASS:
+?C: This symbol, if defined, indicates to the C program that struct passwd
+?C: contains pw_class.
+?C:.
+?C:PWEXPIRE:
+?C: This symbol, if defined, indicates to the C program that struct passwd
+?C: contains pw_expire.
+?C:.
+?C:PWCOMMENT:
+?C: This symbol, if defined, indicates to the C program that struct passwd
+?C: contains pw_comment.
+?C:.
+?H:#$i_pwd I_PWD /**/
+?H:#$d_pwquota PWQUOTA /**/
+?H:#$d_pwage PWAGE /**/
+?H:#$d_pwchange PWCHANGE /**/
+?H:#$d_pwclass PWCLASS /**/
+?H:#$d_pwexpire PWEXPIRE /**/
+?H:#$d_pwcomment PWCOMMENT /**/
+?H:.
+?LINT: set i_pwd d_pwquota d_pwage d_pwchange d_pwclass d_pwexpire d_pwcomment
+?T:xxx
+: see if this is a pwd.h system
+set pwd.h i_pwd
+eval $inhdr
+
+case "$i_pwd" in
+$define)
+ xxx=`./findhdr pwd.h`
+ $cppstdin $cppflags $cppminus < $xxx >$$.h
+
+ if $contains 'pw_quota' $$.h >/dev/null 2>&1; then
+ val="$define"
+ else
+ val="$undef"
+ fi
+ set d_pwquota
+ eval $setvar
+
+ if $contains 'pw_age' $$.h >/dev/null 2>&1; then
+ val="$define"
+ else
+ val="$undef"
+ fi
+ set d_pwage
+ eval $setvar
+
+ if $contains 'pw_change' $$.h >/dev/null 2>&1; then
+ val="$define"
+ else
+ val="$undef"
+ fi
+ set d_pwchange
+ eval $setvar
+
+ if $contains 'pw_class' $$.h >/dev/null 2>&1; then
+ val="$define"
+ else
+ val="$undef"
+ fi
+ set d_pwclass
+ eval $setvar
+
+ if $contains 'pw_expire' $$.h >/dev/null 2>&1; then
+ val="$define"
+ else
+ val="$undef"
+ fi
+ set d_pwexpire
+ eval $setvar
+
+ if $contains 'pw_comment' $$.h >/dev/null 2>&1; then
+ val="$define"
+ else
+ val="$undef"
+ fi
+ set d_pwcomment
+ eval $setvar
+
+ $rm -f $$.h
+ ;;
+*)
+ val="$undef";
+ set d_pwquota; eval $setvar
+ set d_pwage; eval $setvar
+ set d_pwchange; eval $setvar
+ set d_pwclass; eval $setvar
+ set d_pwexpire; eval $setvar
+ set d_pwcomment; eval $setvar
+ ;;
+esac
+
diff --git a/mcon/U/i_regex.U b/mcon/U/i_regex.U
new file mode 100644
index 0000000..81f2311
--- /dev/null
+++ b/mcon/U/i_regex.U
@@ -0,0 +1,35 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Sidney C. Smith <scsmith@cbda9.apgea.army.mil>
+?RCS:
+?RCS: $Log: i_regex.U,v $
+?RCS: Revision 3.0.1.1 1995/01/30 14:35:45 ram
+?RCS: patch49: created
+?RCS:
+?RCS:
+?MAKE:i_regex: Inhdr
+?MAKE: -pick add $@ %<
+?S:i_regex:
+?S: This variable conditionally defines the I_REGEX symbol, which
+?S: indicates to the C program that <regex.h> exists and should
+?S: be included.
+?S:.
+?C:I_REGEX:
+?C: This symbol, if defined, indicates that <regex.h> exists and should
+?C: be included.
+?C:.
+?H:#$i_regex I_REGEX /**/
+?H:.
+?LINT:set i_regex
+: see if regex is available
+set regex.h i_regex
+eval $inhdr
+
diff --git a/mcon/U/i_sched.U b/mcon/U/i_sched.U
new file mode 100644
index 0000000..de5cfa4
--- /dev/null
+++ b/mcon/U/i_sched.U
@@ -0,0 +1,25 @@
+?RCS: Copyright (c) 2012, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:i_sched: Inhdr
+?MAKE: -pick add $@ %<
+?S:i_sched:
+?S: This variable conditionally defines the I_SCHED symbol, and indicates
+?S: whether a C program may include <sched.h> to get sched_yield().
+?S:.
+?C:I_SCHED:
+?C: This symbol, if defined, indicates to the C program that it should
+?C: include <sched.h> to get the definition of sched_yield().
+?C:.
+?H:#$i_sched I_SCHED /**/
+?H:.
+?LINT:set i_sched
+: see if this is a sched.h system
+set sched.h i_sched
+eval $inhdr
+
diff --git a/mcon/U/i_sfio.U b/mcon/U/i_sfio.U
new file mode 100644
index 0000000..84730de
--- /dev/null
+++ b/mcon/U/i_sfio.U
@@ -0,0 +1,32 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1996, Andy Dougherty
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: i_sfio.U,v $
+?RCS: Revision 3.0.1.1 1997/02/28 15:48:27 ram
+?RCS: patch61: created
+?RCS:
+?MAKE:i_sfio: Inhdr Setvar
+?MAKE: -pick add $@ %<
+?S:i_sfio:
+?S: This variable conditionally defines the I_SFIO symbol,
+?S: and indicates whether a C program should include <sfio.h>.
+?S:.
+?C:I_SFIO:
+?C: This symbol, if defined, indicates to the C program that it should
+?C: include <sfio.h>.
+?C:.
+?H:#$i_sfio I_SFIO /**/
+?H:.
+?LINT:set i_sfio
+: see if sfio.h is available
+set sfio.h i_sfio
+eval $inhdr
+
diff --git a/mcon/U/i_stddef.U b/mcon/U/i_stddef.U
new file mode 100644
index 0000000..0d9f1d3
--- /dev/null
+++ b/mcon/U/i_stddef.U
@@ -0,0 +1,32 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: i_stddef.U,v $
+?RCS: Revision 3.0 1993/08/18 12:08:27 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:i_stddef: Inhdr
+?MAKE: -pick add $@ %<
+?S:i_stddef:
+?S: This variable conditionally defines the I_STDDEF symbol, which
+?S: indicates to the C program that <stddef.h> exists and should
+?S: be included.
+?S:.
+?C:I_STDDEF:
+?C: This symbol, if defined, indicates that <stddef.h> exists and should
+?C: be included.
+?C:.
+?H:#$i_stddef I_STDDEF /**/
+?H:.
+?LINT:set i_stddef
+: see if stddef is available
+set stddef.h i_stddef
+eval $inhdr
+
diff --git a/mcon/U/i_stdlib.U b/mcon/U/i_stdlib.U
new file mode 100644
index 0000000..0e41f5e
--- /dev/null
+++ b/mcon/U/i_stdlib.U
@@ -0,0 +1,32 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: i_stdlib.U,v $
+?RCS: Revision 3.0 1993/08/18 12:08:27 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:i_stdlib: Inhdr
+?MAKE: -pick add $@ %<
+?S:i_stdlib:
+?S: This variable conditionally defines the I_STDLIB symbol, which
+?S: indicates to the C program that <stdlib.h> exists and should
+?S: be included.
+?S:.
+?C:I_STDLIB:
+?C: This symbol, if defined, indicates that <stdlib.h> exists and should
+?C: be included.
+?C:.
+?H:#$i_stdlib I_STDLIB /**/
+?H:.
+?LINT:set i_stdlib
+: see if stdlib is available
+set stdlib.h i_stdlib
+eval $inhdr
+
diff --git a/mcon/U/i_string.U b/mcon/U/i_string.U
new file mode 100644
index 0000000..e43a62a
--- /dev/null
+++ b/mcon/U/i_string.U
@@ -0,0 +1,62 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: i_string.U,v $
+?RCS: Revision 3.0.1.2 1993/10/16 13:50:12 ram
+?RCS: patch12: special units Loc and Guess were missing from dependencies
+?RCS:
+?RCS: Revision 3.0.1.1 1993/09/13 16:07:26 ram
+?RCS: patch10: removed "(Actually, this looks more like...)" messages (WAD)
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:08:28 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: See if we should include <string.h> or <strings.h>
+?X:
+?MAKE:i_string strings: test Setvar Findhdr Warn
+?MAKE: -pick add $@ %<
+?S:i_string:
+?S: This variable conditionally defines the I_STRING symbol, which
+?S: indicates that <string.h> should be included rather than <strings.h>.
+?S:.
+?S:strings:
+?S: This variable holds the full path of the string header that will be
+?S: used. Typically /usr/include/string.h or /usr/include/strings.h.
+?S:.
+?C:I_STRING:
+?C: This symbol, if defined, indicates to the C program that it should
+?C: include <string.h> (USG systems) instead of <strings.h> (BSD systems).
+?C:.
+?H:#$i_string I_STRING /**/
+?H:.
+?LINT:set i_string
+: see which of string.h or strings.h is needed
+echo " "
+strings=`./findhdr string.h`
+if $test "$strings" && $test -r "$strings"; then
+ echo "Using <string.h> instead of <strings.h>." >&4
+ val="$define"
+else
+ val="$undef"
+ strings=`./findhdr strings.h`
+ if $test "$strings" && $test -r "$strings"; then
+ echo "Using <strings.h> instead of <string.h>." >&4
+ else
+ ./warn "No string header found -- You'll surely have problems." 4>&4
+ fi
+fi
+set i_string
+eval $setvar
+case "$i_string" in
+"$undef") strings=`./findhdr strings.h`;;
+*) strings=`./findhdr string.h`;;
+esac
+
diff --git a/mcon/U/i_sysdir.U b/mcon/U/i_sysdir.U
new file mode 100644
index 0000000..529bf15
--- /dev/null
+++ b/mcon/U/i_sysdir.U
@@ -0,0 +1,34 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: i_sysdir.U,v $
+?RCS: Revision 3.0.1.1 1994/08/29 16:22:30 ram
+?RCS: patch32: fixed typo in I_SYS_DIR symbol name
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:08:30 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:i_sysdir: Inhdr
+?MAKE: -pick add $@ %<
+?S:i_sysdir:
+?S: This variable conditionally defines the I_SYS_DIR symbol, and indicates
+?S: whether a C program should include <sys/dir.h>.
+?S:.
+?C:I_SYS_DIR (I_SYSDIR):
+?C: This symbol, if defined, indicates to the C program that it should
+?C: include <sys/dir.h>.
+?C:.
+?H:#$i_sysdir I_SYS_DIR /**/
+?H:.
+?LINT:set i_sysdir
+: see if this is an sysdir system
+set sys/dir.h i_sysdir
+eval $inhdr
+
diff --git a/mcon/U/i_sysfile.U b/mcon/U/i_sysfile.U
new file mode 100644
index 0000000..62ea1e8
--- /dev/null
+++ b/mcon/U/i_sysfile.U
@@ -0,0 +1,60 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: i_sysfile.U,v $
+?RCS: Revision 3.0.1.2 1995/07/25 14:11:36 ram
+?RCS: patch56: removed <> characters from comment, per metalint suggestion
+?RCS:
+?RCS: Revision 3.0.1.1 1993/08/25 14:01:23 ram
+?RCS: patch6: added default for i_sysfile
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:08:31 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:i_sysfile: h_sysfile Inhdr Setvar
+?MAKE: -pick add $@ %<
+?S:i_sysfile:
+?S: This variable conditionally defines the I_SYS_FILE symbol, and indicates
+?S: whether a C program should include <sys/file.h> to get R_OK and friends.
+?S:.
+?C:I_SYS_FILE (I_SYSFILE):
+?C: This symbol, if defined, indicates to the C program that it should
+?C: include <sys/file.h> to get definition of R_OK and friends.
+?C:.
+?H:#$i_sysfile I_SYS_FILE /**/
+?H:.
+?T:val
+?D:i_sysfile=''
+?LINT:change h_sysfile
+?LINT:set i_sysfile
+: see if this is a sys/file.h system
+val=''
+set sys/file.h val
+eval $inhdr
+
+: do we need to include sys/file.h ?
+case "$val" in
+"$define")
+ echo " "
+ if $h_sysfile; then
+ val="$define"
+ echo "We'll be including <sys/file.h>." >&4
+ else
+ val="$undef"
+ echo "We won't be including <sys/file.h>." >&4
+ fi
+ ;;
+*)
+ h_sysfile=false
+ ;;
+esac
+set i_sysfile
+eval $setvar
+
diff --git a/mcon/U/i_sysioctl.U b/mcon/U/i_sysioctl.U
new file mode 100644
index 0000000..2b9fcbb
--- /dev/null
+++ b/mcon/U/i_sysioctl.U
@@ -0,0 +1,202 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: i_sysioctl.U,v $
+?RCS: Revision 3.0.1.2 1994/05/06 15:04:57 ram
+?RCS: patch23: added knowledge for <sys/filio.h> (WED)
+?RCS: patch23: optimized amount of findhdr calls
+?RCS:
+?RCS: Revision 3.0.1.1 1993/11/10 17:36:09 ram
+?RCS: patch14: now use a compiler check for TIOCNOTTY because of HP-UX 9.x
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:08:32 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:i_sysioctl i_bsdioctl i_sysfilio i_syssockio d_voidtty: test contains \
+ cat i_termio i_termios i_sgtty Setvar Findhdr +cc rm Inhdr
+?MAKE: -pick add $@ %<
+?S:i_sysioctl:
+?S: This variable conditionally defines the I_SYS_IOCTL symbol, which
+?S: indicates to the C program that <sys/ioctl.h> exists and should
+?S: be included.
+?S:.
+?S:i_sysfilio:
+?S: This variable conditionally defines the I_SYS_FILIO symbol, which
+?S: indicates to the C program that <sys/filio.h> exists and should
+?S: be included in preference to <sys/ioctl.h>.
+?S:.
+?S:i_bsdioctl:
+?S: This variable conditionally defines the I_SYS_BSDIOCTL symbol, which
+?S: indicates to the C program that <sys/bsdioctl.h> exists and should
+?S: be included.
+?S:.
+?S:i_syssockio:
+?S: This variable conditionally defines I_SYS_SOCKIO to indicate to the
+?S: C program that socket ioctl codes may be found in <sys/sockio.h>
+?S: instead of <sys/ioctl.h>.
+?S:.
+?S:d_voidtty:
+?S: This variable conditionally defines USE_IOCNOTTY to indicate that the
+?S: ioctl() call with TIOCNOTTY should be used to void tty association.
+?S: Otherwise (on USG probably), it is enough to close the standard file
+?S: descriptors and do a setpgrp().
+?S:.
+?C:I_SYS_IOCTL (I_SYSIOCTL):
+?C: This symbol, if defined, indicates that <sys/ioctl.h> exists and should
+?C: be included. Otherwise, include <sgtty.h> or <termio.h>.
+?C:.
+?C:I_SYS_FILIO:
+?C: This symbol, if defined, indicates that <sys/filio.h> exists and
+?C: should be included instead of <sys/ioctl.h>.
+?C:.
+?C:I_SYS_BSDIOCTL (I_BSDIOCTL):
+?C: This symbol, if defined, indicates that <sys/bsdioctl.h> exists and should
+?C: be included. Otherwise, try <sys/ioctl.h>. This is primarly intended for
+?C: definitions of sockets options, like SIOCATMARK.
+?C:.
+?C:I_SYS_SOCKIO (I_SYSSOCKIO):
+?C: This symbol, if defined, indicates the <sys/sockio.h> should be included
+?C: to get socket ioctl options, like SIOCATMARK.
+?C:.
+?C:USE_TIOCNOTTY (VOIDTTY):
+?C: This symbol, if defined indicate to the C program that the ioctl()
+?C: call with TIOCNOTTY should be used to void tty association.
+?C: Otherwise (on USG probably), it is enough to close the standard file
+?C: decriptors and do a setpgrp().
+?C:.
+?H:#$i_sysioctl I_SYS_IOCTL /**/
+?H:#$i_sysfilio I_SYS_FILIO /**/
+?H:#$i_bsdioctl I_SYS_BSDIOCTL /**/
+?H:#$i_syssockio I_SYS_SOCKIO /**/
+?H:#$d_voidtty USE_TIOCNOTTY /**/
+?H:.
+?T:xxx
+: see if ioctl defs are in sgtty, termio, sys/filio or sys/ioctl
+?LINT:set i_sysfilio
+set sys/filio.h i_sysfilio
+eval $inhdr
+echo " "
+if $test `./findhdr sys/ioctl.h`; then
+ val="$define"
+ echo '<sys/ioctl.h> found.' >&4
+else
+ val="$undef"
+ if $test $i_sysfilio = "$define"; then
+ echo '<sys/ioctl.h> NOT found.' >&4
+ else
+ $test $i_sgtty = "$define" && xxx="sgtty.h"
+ $test $i_termio = "$define" && xxx="termio.h"
+ $test $i_termios = "$define" && xxx="termios.h"
+echo "No <sys/ioctl.h> found, assuming ioctl args are defined in <$xxx>." >&4
+ fi
+fi
+?LINT:set i_sysioctl
+set i_sysioctl
+eval $setvar
+
+@if I_BSDIOCTL || i_bsdioctl
+?X:
+?X: The only machine I know where this inclusion was necessary is a
+?X: BULL DPX 5000 (a French machine).
+?X:
+: see if socket ioctl defs are in sys/bsdioctl or sys/ioctl
+echo " "
+xxx=`./findhdr sys/bsdioctl.h`
+if $test "$xxx"; then
+ if $contains SIOCATMARK $xxx >/dev/null 2>&1; then
+ val="$define"
+ echo "You have socket ioctls defined in <sys/bsdioctl.h>." >&4
+ else
+ val="$undef"
+ echo "No socket ioctls found in <sys/bsdioctl.h>." >&4
+ fi
+else
+ val="$undef"
+ echo "<sys/bsdioctl.h> not found, but that's ok." >&4
+fi
+?LINT:set i_bsdioctl
+set i_bsdioctl
+eval $setvar
+
+@end
+@if I_SYSSOCKIO || i_syssockio
+: see if socket ioctl defs are in sys/sockio.h
+echo " "
+xxx=`./findhdr sys/sockio.h`
+if $test "$xxx"; then
+ if $contains SIOCATMARK $xxx >/dev/null 2>&1; then
+ val="$define"
+ echo "You have socket ioctls defined in <sys/sockio.h>." >&4
+ else
+ val="$undef"
+ echo "No socket ioctls found in <sys/sockio.h>." >&4
+ fi
+else
+ val="$undef"
+@if I_BSDIOCTL
+ case "$i_bsdioctl" in
+ "$define") $cat <<EOM
+<sys/sockio.h> not found, using ioctls from <sys/bsdioctl.h>.
+EOM
+ ;;
+ *) $cat <<EOM
+<sys/sockio.h> not found, assuming socket ioctls are in <sys/ioctl.h>.
+EOM
+ ;;
+ esac
+@else
+ $cat <<EOM
+<sys/sockio.h> not found, assuming socket ioctls are in <sys/ioctl.h>.
+EOM
+@end
+fi
+?LINT:set i_syssockio
+set i_syssockio
+eval $setvar
+
+@end
+@if VOIDTTY || d_voidtty
+: check how to void tty association
+echo " "
+case "$i_sysioctl" in
+"$define") xxx='sys/ioctl.h';;
+?X: otherwise $xxx was set during the determination of i_sysioctl, above.
+esac
+?X:
+?X: Can't use $contains here since HP-UX 9.x has TIOCNOTTY between a pair
+?X: of #ifdef/#endif and is never actually defined. Oh well...
+?X:
+$cat > tcio.c <<EOM
+#include <sys/types.h> /* Just in case */
+#include <$xxx>
+
+int main()
+{
+#ifdef TIOCNOTTY
+ exit(0);
+#else
+ exit(1);
+#endif
+}
+EOM
+if ($cc -o tcio tcio.c && ./tcio) >/dev/null 2>&1; then
+ val="$define"
+ echo "TIOCNOTTY found in <$xxx>." >&4
+ echo "Using ioctl() call on /dev/tty to void tty association." >&4
+else
+ val="$undef"
+ echo "Closing standard file descriptors should void tty association." >&4
+fi
+?LINT:set d_voidtty
+set d_voidtty
+eval $setvar
+$rm -f tcio tcio.? core
+
+@end
diff --git a/mcon/U/i_sysipc.U b/mcon/U/i_sysipc.U
new file mode 100644
index 0000000..5c86815
--- /dev/null
+++ b/mcon/U/i_sysipc.U
@@ -0,0 +1,28 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 2012, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:i_sysipc: Inhdr
+?MAKE: -pick add $@ %<
+?S:i_sysipc:
+?S: This variable conditionally defines the I_SYS_IPC symbol, and indicates
+?S: whether a C program should include <sys/ipc.h> to be able to get defines
+?S: for SysV IPCs.
+?S:.
+?C:I_SYS_IPC:
+?C: This symbol, if defined, indicates to the C program that it should
+?C: include <sys/ipc.h> to get the defines for SysV IPCs.
+?C:.
+?H:#$i_sysipc I_SYS_IPC /**/
+?H:.
+?LINT:set i_sysipc
+: see if this is a sys/ipc system
+set sys/ipc.h i_sysipc
+eval $inhdr
+
diff --git a/mcon/U/i_sysmman.U b/mcon/U/i_sysmman.U
new file mode 100644
index 0000000..4b3c9db
--- /dev/null
+++ b/mcon/U/i_sysmman.U
@@ -0,0 +1,34 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: i_sysmman.U,v $
+?RCS: Revision 3.0.1.1 1994/01/24 14:11:20 ram
+?RCS: patch16: created
+?RCS:
+?X:
+?X: Look wether <sys/mman.h> needs to be included.
+?X:
+?MAKE:i_sysmman: Inhdr
+?MAKE: -pick add $@ %<
+?S:i_sysmman:
+?S: This variable conditionally defines the I_SYS_MMAN symbol,
+?S: and indicates whether a C program should include <sys/mman.h>.
+?S:.
+?C:I_SYS_MMAN:
+?C: This symbol, if defined, indicates to the C program that it should
+?C: include <sys/mman.h>.
+?C:.
+?H:#$i_sysmman I_SYS_MMAN /**/
+?H:.
+?LINT:set i_sysmman
+: see if sys/mman.h has to be included
+set sys/mman.h i_sysmman
+eval $inhdr
+
diff --git a/mcon/U/i_sysmount.U b/mcon/U/i_sysmount.U
new file mode 100644
index 0000000..5bb10c8
--- /dev/null
+++ b/mcon/U/i_sysmount.U
@@ -0,0 +1,29 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 2006, Christian Biere
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:i_sysmount: Inhdr
+?MAKE: -pick add $@ %<
+?S:i_sysmount:
+?S: This variable conditionally defines the I_SYS_MOUNT symbol, and
+?S: indicates whether a C program should include <sys/mount.h> to be able
+?S: to issue the statfs() call to get filesystem statistics.
+?S:.
+?C:I_SYS_MOUNT:
+?C: This symbol, if defined, indicates to the C program that it should
+?C: include <sys/mount.h> to get the struct statfs definition for the
+?C: statfs() system call.
+?C:.
+?H:#$i_sysmount I_SYS_MOUNT /**/
+?H:.
+?LINT:set i_sysmount
+: see if this is a sys/mount system
+set sys/mount.h i_sysmount
+eval $inhdr
+
diff --git a/mcon/U/i_sysndir.U b/mcon/U/i_sysndir.U
new file mode 100644
index 0000000..7521bd0
--- /dev/null
+++ b/mcon/U/i_sysndir.U
@@ -0,0 +1,31 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: i_sysndir.U,v $
+?RCS: Revision 3.0 1993/08/18 12:08:33 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:i_sysndir: Inhdr
+?MAKE: -pick add $@ %<
+?S:i_sysndir:
+?S: This variable conditionally defines the I_SYS_NDIR symbol, and indicates
+?S: whether a C program should include <sys/ndir.h>.
+?S:.
+?C:I_SYS_NDIR (I_SYSNDIR):
+?C: This symbol, if defined, indicates to the C program that it should
+?C: include <sys/ndir.h>.
+?C:.
+?H:#$i_sysndir I_SYS_NDIR /**/
+?H:.
+?LINT:set i_sysndir
+: see if this is an sysndir system
+set sys/ndir.h i_sysndir
+eval $inhdr
+
diff --git a/mcon/U/i_sysparam.U b/mcon/U/i_sysparam.U
new file mode 100644
index 0000000..5ef21dd
--- /dev/null
+++ b/mcon/U/i_sysparam.U
@@ -0,0 +1,31 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: i_sysparam.U,v $
+?RCS: Revision 3.0.1.1 1994/08/29 16:22:43 ram
+?RCS: patch32: created
+?RCS:
+?MAKE:i_sysparam: Inhdr
+?MAKE: -pick add $@ %<
+?S:i_sysparam:
+?S: This variable conditionally defines the I_SYS_PARAM symbol, and indicates
+?S: whether a C program should include <sys/param.h>.
+?S:.
+?C:I_SYS_PARAM:
+?C: This symbol, if defined, indicates to the C program that it should
+?C: include <sys/param.h>.
+?C:.
+?H:#$i_sysparam I_SYS_PARAM /**/
+?H:.
+?LINT:set i_sysparam
+: see if this is a sys/param system
+set sys/param.h i_sysparam
+eval $inhdr
+
diff --git a/mcon/U/i_syspoll.U b/mcon/U/i_syspoll.U
new file mode 100644
index 0000000..7d7c86b
--- /dev/null
+++ b/mcon/U/i_syspoll.U
@@ -0,0 +1,28 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:i_syspoll: Inhdr
+?MAKE: -pick add $@ %<
+?S:i_syspoll:
+?S: This variable conditionally defines the I_SYS_POLL symbol, which
+?S: indicates to the C program that it should include <sys/poll.h>.
+?S:.
+?C:I_SYS_POLL:
+?C: This symbol, if defined, indicates that the program may include
+?C: <sys/poll.h>. When I_POLL is also defined, it's probably safest
+?C: to only include <poll.h>.
+?C:.
+?H:#$i_syspoll I_SYS_POLL /**/
+?H:.
+?LINT:set i_syspoll
+: see if there is a sys/poll.h file
+set sys/poll.h i_syspoll
+eval $inhdr
+
diff --git a/mcon/U/i_sysresrc.U b/mcon/U/i_sysresrc.U
new file mode 100644
index 0000000..69f85f1
--- /dev/null
+++ b/mcon/U/i_sysresrc.U
@@ -0,0 +1,34 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: i_sysresrc.U,v $
+?RCS: Revision 3.0 1993/08/18 12:08:34 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: Look wether <sys/resource.h> needs to be included
+?X:
+?MAKE:i_sysresrc: Inhdr
+?MAKE: -pick add $@ %<
+?S:i_sysresrc:
+?S: This variable conditionally defines the I_SYS_RESOURCE symbol,
+?S: and indicates whether a C program should include <sys/resource.h>.
+?S:.
+?C:I_SYS_RESOURCE (I_SYSRESOURCE):
+?C: This symbol, if defined, indicates to the C program that it should
+?C: include <sys/resource.h>.
+?C:.
+?H:#$i_sysresrc I_SYS_RESOURCE /**/
+?H:.
+?LINT:set i_sysresrc
+: see if sys/resource.h has to be included
+set sys/resource.h i_sysresrc
+eval $inhdr
+
diff --git a/mcon/U/i_sysselct.U b/mcon/U/i_sysselct.U
new file mode 100644
index 0000000..7ff37a5
--- /dev/null
+++ b/mcon/U/i_sysselct.U
@@ -0,0 +1,39 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: i_sysselct.U,v $
+?RCS: Revision 3.0.1.1 1993/08/25 14:01:33 ram
+?RCS: patch6: added default for i_sysselct
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:08:35 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: Look wether <sys/select.h> exists
+?X:
+?MAKE:i_sysselct: Inhdr
+?MAKE: -pick add $@ %<
+?S:i_sysselct:
+?S: This variable conditionally defines I_SYS_SELECT, which indicates
+?S: to the C program that it should include <sys/select.h> in order to
+?S: get the definition of struct timeval.
+?S:.
+?C:I_SYS_SELECT (I_SYSSELECT):
+?C: This symbol, if defined, indicates to the C program that it should
+?C: include <sys/select.h> in order to get definition of struct timeval.
+?C:.
+?H:#$i_sysselct I_SYS_SELECT /**/
+?H:.
+?D:i_sysselct=''
+?LINT:set i_sysselct
+: see if sys/select.h has to be included
+set sys/select.h i_sysselct
+eval $inhdr
+
diff --git a/mcon/U/i_syssem.U b/mcon/U/i_syssem.U
new file mode 100644
index 0000000..3e5d68a
--- /dev/null
+++ b/mcon/U/i_syssem.U
@@ -0,0 +1,28 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 2012, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:i_syssem: Inhdr
+?MAKE: -pick add $@ %<
+?S:i_syssem:
+?S: This variable conditionally defines the I_SYS_SEM symbol, and indicates
+?S: whether a C program should include <sys/sem.h> to be able to use SysV
+?S: semaphores.
+?S:.
+?C:I_SYS_SEM:
+?C: This symbol, if defined, indicates to the C program that it should
+?C: include <sys/sem.h> to use SysV semaphores.
+?C:.
+?H:#$i_syssem I_SYS_SEM /**/
+?H:.
+?LINT:set i_syssem
+: see if this is a sys/sem system
+set sys/sem.h i_syssem
+eval $inhdr
+
diff --git a/mcon/U/i_syssendfile.U b/mcon/U/i_syssendfile.U
new file mode 100644
index 0000000..24a926e
--- /dev/null
+++ b/mcon/U/i_syssendfile.U
@@ -0,0 +1,27 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 2006, Christian Biere
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:i_syssendfile: Inhdr
+?MAKE: -pick add $@ %<
+?S:i_syssendfile:
+?S: This variable conditionally defines the I_SYS_SENDFILE symbol, and indicates
+?S: whether a C program should include <sys/sendfile.h>.
+?S:.
+?C:I_SYS_SENDFILE:
+?C: This symbol, if defined, indicates to the C program that it should
+?C: include <sys/sendfile.h>.
+?C:.
+?H:#$i_syssendfile I_SYS_SENDFILE /**/
+?H:.
+?LINT:set i_syssendfile
+: see if this is a sys/sendfile system
+set sys/sendfile.h i_syssendfile
+eval $inhdr
+
diff --git a/mcon/U/i_syssock.U b/mcon/U/i_syssock.U
new file mode 100644
index 0000000..357e406
--- /dev/null
+++ b/mcon/U/i_syssock.U
@@ -0,0 +1,32 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: i_syssock.U,v $
+?RCS: Revision 3.0 1993/08/18 12:08:36 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:i_syssock: Inhdr
+?MAKE: -pick add $@ %<
+?S:i_syssock:
+?S: This variable conditionally defines the I_SYS_SOCKET symbol, and indicates
+?S: whether a C program should include <sys/socket.h> before performing socket
+?S: operations.
+?S:.
+?C:I_SYS_SOCKET:
+?C: This symbol, if defined, indicates to the C program that it should
+?C: include <sys/socket.h> before performing socket calls.
+?C:.
+?H:#$i_syssock I_SYS_SOCKET /**/
+?H:.
+?LINT:set i_syssock
+: see if this is a sys/socket.h system
+set sys/socket.h i_syssock
+eval $inhdr
+
diff --git a/mcon/U/i_sysstat.U b/mcon/U/i_sysstat.U
new file mode 100644
index 0000000..92f9691
--- /dev/null
+++ b/mcon/U/i_sysstat.U
@@ -0,0 +1,32 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1996, Andy Dougherty
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: i_sysstat.U,v $
+?RCS: Revision 3.0.1.1 1997/02/28 15:48:30 ram
+?RCS: patch61: created
+?RCS:
+?MAKE:i_sysstat: Inhdr
+?MAKE: -pick add $@ %<
+?S:i_sysstat:
+?S: This variable conditionally defines the I_SYS_STAT symbol,
+?S: and indicates whether a C program should include <sys/stat.h>.
+?S:.
+?C:I_SYS_STAT (I_SYSSTAT):
+?C: This symbol, if defined, indicates to the C program that it should
+?C: include <sys/stat.h>.
+?C:.
+?H:#$i_sysstat I_SYS_STAT /**/
+?H:.
+?LINT:set i_sysstat
+: see if sys/stat.h is available
+set sys/stat.h i_sysstat
+eval $inhdr
+
diff --git a/mcon/U/i_sysstatvfs.U b/mcon/U/i_sysstatvfs.U
new file mode 100644
index 0000000..e1d0859
--- /dev/null
+++ b/mcon/U/i_sysstatvfs.U
@@ -0,0 +1,29 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 2006, Christian Biere
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:i_sysstatvfs: Inhdr
+?MAKE: -pick add $@ %<
+?S:i_sysstatvfs:
+?S: This variable conditionally defines the I_SYS_STATVFS symbol, and indicates
+?S: whether a C program should include <sys/statvfs.h> to be able to issue
+?S: the statvfs() call to get filesystem statistics.
+?S:.
+?C:I_SYS_STATVFS:
+?C: This symbol, if defined, indicates to the C program that it should
+?C: include <sys/statvfs.h> to get the struct statvfs definition for the
+?C: statvfs() system call.
+?C:.
+?H:#$i_sysstatvfs I_SYS_STATVFS /**/
+?H:.
+?LINT:set i_sysstatvfs
+: see if this is a sys/statvfs system
+set sys/statvfs.h i_sysstatvfs
+eval $inhdr
+
diff --git a/mcon/U/i_syssysctl.U b/mcon/U/i_syssysctl.U
new file mode 100644
index 0000000..a732d2a
--- /dev/null
+++ b/mcon/U/i_syssysctl.U
@@ -0,0 +1,27 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 2006, Christian Biere
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:i_syssysctl: Inhdr
+?MAKE: -pick add $@ %<
+?S:i_syssysctl:
+?S: This variable conditionally defines the I_SYS_SYSCTL symbol, and indicates
+?S: whether a C program should include <sys/sysctl.h>.
+?S:.
+?C:I_SYS_SYSCTL:
+?C: This symbol, if defined, indicates to the C program that it should
+?C: include <sys/sysctl.h>.
+?C:.
+?H:#$i_syssysctl I_SYS_SYSCTL /**/
+?H:.
+?LINT:set i_syssysctl
+: see if this is a sys/sysctl system
+set sys/sysctl.h i_syssysctl
+eval $inhdr
+
diff --git a/mcon/U/i_systable.U b/mcon/U/i_systable.U
new file mode 100644
index 0000000..20c086c
--- /dev/null
+++ b/mcon/U/i_systable.U
@@ -0,0 +1,32 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: i_systable.U,v $
+?RCS: Revision 3.0.1.1 1993/10/16 13:50:20 ram
+?RCS: patch12: created
+?RCS:
+?RCS:
+?MAKE:i_systable: Inhdr
+?MAKE: -pick add $@ %<
+?S:i_systable:
+?S: This variable conditionally defines the I_SYS_TABLE symbol, and
+?S: indicates whether a C program should include <sys/table.h>.
+?S:.
+?C:I_SYS_TABLE:
+?C: This symbol, if defined, indicates to the C program that it should
+?C: include <sys/table.h> for the OSF/1 table() system call.
+?C:.
+?H:#$i_systable I_SYS_TABLE /**/
+?H:.
+?LINT:set i_systable
+: see if this is an OSF sys/table system
+set sys/table.h i_systable
+eval $inhdr
+
diff --git a/mcon/U/i_systimeb.U b/mcon/U/i_systimeb.U
new file mode 100644
index 0000000..38f7853
--- /dev/null
+++ b/mcon/U/i_systimeb.U
@@ -0,0 +1,55 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: i_systimeb.U,v $
+?RCS: Revision 3.0 1993/08/18 12:08:37 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: This unit looks wether <sys/timeb.h> should be included
+?X: or not when using ftime() (for struct timeb definition).
+?X:
+?X: Force looking for <sys/time.h> for struct timeb.
+?X:INC: i_systime
+?MAKE:i_systimeb: test contains Loc Setvar Findhdr
+?MAKE: -pick add $@ %<
+?S:i_systimeb:
+?S: This variable conditionally defines I_SYS_TIMEB, which indicates
+?S: to the C program that it should include <sys/timeb.h>.
+?S:.
+?C:I_SYS_TIMEB (I_SYSTIMEB):
+?C: This symbol, if defined, indicates to the C program that it should
+?C: include <sys/timeb.h>, in order to define struct timeb (some systems
+?C: define this in <sys/time.h>). This is useful when using ftime().
+?C: You should include <sys/time.h> if I_SYS_TIMEB is not defined,
+?C: nor is I_SYS_TIME.
+?C:.
+?H:#$i_systimeb I_SYS_TIMEB /**/
+?H:.
+?T:xxx
+?LINT:set i_systimeb
+: see where struct timeb is defined
+echo " "
+xxx=`./findhdr sys/timeb.h`
+if $test "$xxx"; then
+ if $contains 'struct timeb' $xxx >/dev/null 2>&1; then
+ val="$define"
+ echo "You have struct timeb defined in <sys/timeb.h>." >&4
+ else
+ val="$undef"
+ echo "Assuming struct timeb is defined in <sys/time.h>." >&4
+ fi
+else
+ val="$undef"
+echo "No <sys/timeb.h> -- Assuming struct timeb is defined in <sys/time.h>." >&4
+fi
+set i_systimeb
+eval $setvar
+
diff --git a/mcon/U/i_systimes.U b/mcon/U/i_systimes.U
new file mode 100644
index 0000000..c352d6d
--- /dev/null
+++ b/mcon/U/i_systimes.U
@@ -0,0 +1,31 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: i_systimes.U,v $
+?RCS: Revision 3.0 1993/08/18 12:08:39 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:i_systimes: Inhdr
+?MAKE: -pick add $@ %<
+?S:i_systimes:
+?S: This variable conditionally defines the I_SYS_TIMES symbol, and indicates
+?S: whether a C program should include <sys/times.h>.
+?S:.
+?C:I_SYS_TIMES (I_SYSTIMES):
+?C: This symbol, if defined, indicates to the C program that it should
+?C: include <sys/times.h>.
+?C:.
+?H:#$i_systimes I_SYS_TIMES /**/
+?H:.
+?LINT:set i_systimes
+: see if this is a sys/times.h system
+set sys/times.h i_systimes
+eval $inhdr
+
diff --git a/mcon/U/i_systwgcf.U b/mcon/U/i_systwgcf.U
new file mode 100644
index 0000000..2edeebb
--- /dev/null
+++ b/mcon/U/i_systwgcf.U
@@ -0,0 +1,31 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: i_systwgcf.U,v $
+?RCS: Revision 3.0 1993/08/18 12:08:39 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:i_systwgcf: Inhdr
+?MAKE: -pick add $@ %<
+?S:i_systwgcf:
+?S: This variable conditionally defines the I_SYS_TWG_CF symbol, and
+?S: indicates whether a C program should include sys/twg_config.h.
+?S:.
+?C:I_SYS_TWG_CF:
+?C: This symbol, if defined, indicates to the C program that it should
+?C: include sys/twg_config.h.
+?C:.
+?H:#$i_systwgcf I_SYS_TWG_CF /**/
+?H:.
+?LINT:set i_systwgcf
+: see if this is a sys/twg_config.h system
+set sys/twg_config.h i_systwgcf
+eval $inhdr
+
diff --git a/mcon/U/i_systypes.U b/mcon/U/i_systypes.U
new file mode 100644
index 0000000..3d7fddb
--- /dev/null
+++ b/mcon/U/i_systypes.U
@@ -0,0 +1,34 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: i_systypes.U,v $
+?RCS: Revision 3.0 1993/08/18 12:08:41 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: Look wether <sys/types.h> needs to be included.
+?X:
+?MAKE:i_systypes: Inhdr
+?MAKE: -pick add $@ %<
+?S:i_systypes:
+?S: This variable conditionally defines the I_SYS_TYPES symbol,
+?S: and indicates whether a C program should include <sys/types.h>.
+?S:.
+?C:I_SYS_TYPES (I_SYSTYPES):
+?C: This symbol, if defined, indicates to the C program that it should
+?C: include <sys/types.h>.
+?C:.
+?H:#$i_systypes I_SYS_TYPES /**/
+?H:.
+?LINT:set i_systypes
+: see if sys/types.h has to be included
+set sys/types.h i_systypes
+eval $inhdr
+
diff --git a/mcon/U/i_sysun.U b/mcon/U/i_sysun.U
new file mode 100644
index 0000000..b99f736
--- /dev/null
+++ b/mcon/U/i_sysun.U
@@ -0,0 +1,35 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: i_sysun.U,v $
+?RCS: Revision 3.0 1993/08/18 12:08:42 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: This unit looks wether <sys/un.h> is available or not
+?X:
+?MAKE:i_sysun: Inhdr
+?MAKE: -pick add $@ %<
+?S:i_sysun:
+?S: This variable conditionally defines I_SYS_UN, which indicates
+?S: to the C program that it should include <sys/un.h> to get UNIX
+?S: domain socket definitions.
+?S:.
+?C:I_SYS_UN:
+?C: This symbol, if defined, indicates to the C program that it should
+?C: include <sys/un.h> to get UNIX domain socket definitions.
+?C:.
+?H:#$i_sysun I_SYS_UN /**/
+?H:.
+?LINT:set i_sysun
+: see if this is a sys/un.h system
+set sys/un.h i_sysun
+eval $inhdr
+
diff --git a/mcon/U/i_sysutsname.U b/mcon/U/i_sysutsname.U
new file mode 100644
index 0000000..96024be
--- /dev/null
+++ b/mcon/U/i_sysutsname.U
@@ -0,0 +1,27 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 2006, Christian Biere
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:i_sysutsname: Inhdr
+?MAKE: -pick add $@ %<
+?S:i_sysutsname:
+?S: This variable conditionally defines the I_SYS_UTSNAME symbol, and
+?S: indicates whether a C program should include <sys/utsname.h>.
+?S:.
+?C:I_SYS_UTSNAME:
+?C: This symbol, if defined, indicates to the C program that it should
+?C: include <sys/utsname.h>.
+?C:.
+?H:#$i_sysutsname I_SYS_UTSNAME /**/
+?H:.
+?LINT:set i_sysutsname
+: see if this is a sys/utsname system
+set sys/utsname.h i_sysutsname
+eval $inhdr
+
diff --git a/mcon/U/i_sysvfs.U b/mcon/U/i_sysvfs.U
new file mode 100644
index 0000000..c623528
--- /dev/null
+++ b/mcon/U/i_sysvfs.U
@@ -0,0 +1,29 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 2006, Christian Biere
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:i_sysvfs: Inhdr
+?MAKE: -pick add $@ %<
+?S:i_sysvfs:
+?S: This variable conditionally defines the I_SYS_VFS symbol, and indicates
+?S: whether a C program should include <sys/vfs.h> to be able to issue
+?S: the statfs() call to get filesystem statistics.
+?S:.
+?C:I_SYS_VFS:
+?C: This symbol, if defined, indicates to the C program that it should
+?C: include <sys/vfs.h> to get the struct statfs definition for the
+?C: statfs() system call.
+?C:.
+?H:#$i_sysvfs I_SYS_VFS /**/
+?H:.
+?LINT:set i_sysvfs
+: see if this is a sys/vfs system
+set sys/vfs.h i_sysvfs
+eval $inhdr
+
diff --git a/mcon/U/i_syswait.U b/mcon/U/i_syswait.U
new file mode 100644
index 0000000..20ff974
--- /dev/null
+++ b/mcon/U/i_syswait.U
@@ -0,0 +1,34 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: i_syswait.U,v $
+?RCS: Revision 3.0 1993/08/18 12:08:42 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: This unit looks wether <sys/wait.h> is available or not
+?X:
+?MAKE:i_syswait: Inhdr
+?MAKE: -pick add $@ %<
+?S:i_syswait:
+?S: This variable conditionally defines I_SYS_WAIT, which indicates
+?S: to the C program that it should include <sys/wait.h>.
+?S:.
+?C:I_SYS_WAIT (I_SYSWAIT):
+?C: This symbol, if defined, indicates to the C program that it should
+?C: include <sys/wait.h>.
+?C:.
+?H:#$i_syswait I_SYS_WAIT /**/
+?H:.
+?LINT:set i_syswait
+: see if this is a syswait system
+set sys/wait.h i_syswait
+eval $inhdr
+
diff --git a/mcon/U/i_termio.U b/mcon/U/i_termio.U
new file mode 100644
index 0000000..b4a229e
--- /dev/null
+++ b/mcon/U/i_termio.U
@@ -0,0 +1,134 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: i_termio.U,v $
+?RCS: Revision 3.0.1.4 1994/10/29 16:20:54 ram
+?RCS: patch36: call ./usg and ./Cppsym explicitly instead of relying on PATH
+?RCS:
+?RCS: Revision 3.0.1.3 1994/08/29 16:26:38 ram
+?RCS: patch32: don't include all three I_* symbols in config.h
+?RCS: patch32: (had forgotten to undo this part last time)
+?RCS:
+?RCS: Revision 3.0.1.2 1994/05/13 15:25:03 ram
+?RCS: patch27: undone ADO's fix in previous patch since it was useless
+?RCS:
+?RCS: Revision 3.0.1.1 1994/05/06 15:05:23 ram
+?RCS: patch23: now include all three defines in config.h (ADO)
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:08:44 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:i_termio i_sgtty i_termios: Trylink Cppsym Guess Setvar Findhdr Warn \
+ test cat
+?MAKE: -pick add $@ %<
+?S:i_termio:
+?S: This variable conditionally defines the I_TERMIO symbol, which
+?S: indicates to the C program that it should include <termio.h> rather
+?S: than <sgtty.h>.
+?S:.
+?S:i_termios:
+?S: This variable conditionally defines the I_TERMIOS symbol, which
+?S: indicates to the C program that the POSIX <termios.h> file is
+?S: to be included.
+?S:.
+?S:i_sgtty:
+?S: This variable conditionally defines the I_SGTTY symbol, which
+?S: indicates to the C program that it should include <sgtty.h> rather
+?S: than <termio.h>.
+?S:.
+?C:I_TERMIO:
+?C: This symbol, if defined, indicates that the program should include
+?C: <termio.h> rather than <sgtty.h>. There are also differences in
+?C: the ioctl() calls that depend on the value of this symbol.
+?C:.
+?C:I_TERMIOS:
+?C: This symbol, if defined, indicates that the program should include
+?C: the POSIX termios.h rather than sgtty.h or termio.h.
+?C: There are also differences in the ioctl() calls that depend on the
+?C: value of this symbol.
+?C:.
+?C:I_SGTTY:
+?C: This symbol, if defined, indicates that the program should include
+?C: <sgtty.h> rather than <termio.h>. There are also differences in
+?C: the ioctl() calls that depend on the value of this symbol.
+?C:.
+?H:#$i_termio I_TERMIO /**/
+?H:#$i_termios I_TERMIOS /**/
+?H:#$i_sgtty I_SGTTY /**/
+?H:.
+?T:val2 val3
+?LINT:set i_termio i_sgtty i_termios
+: see if this is a termio system
+val="$undef"
+val2="$undef"
+val3="$undef"
+?X: Prefer POSIX-approved termios.h over all else
+$cat >try.c <<EOC
+#include <termios.h>
+int main(void)
+{
+ static struct termios t;
+ static int ret;
+ ret |= tcsetattr(1, 2, &t);
+ return ret ? 0 : 1;
+}
+EOC
+set i_termios
+eval $trylink
+set tcsetattr i_termios
+val3="$i_termios"
+
+echo " "
+case "$val3" in
+"$define") echo "You have POSIX termios.h... good!" >&4;;
+*) if ./Cppsym pyr; then
+ case "`/bin/universe`" in
+ ucb) if $test `./findhdr sgtty.h`; then
+ val2="$define"
+ echo "<sgtty.h> found." >&4
+ else
+ echo "System is pyramid with BSD universe."
+ ./warn "<sgtty.h> not found--you could have problems." 4>&4
+ fi;;
+ *) if $test `./findhdr termio.h`; then
+ val="$define"
+ echo "<termio.h> found." >&4
+ else
+ echo "System is pyramid with USG universe."
+ ./warn "<termio.h> not found--you could have problems." 4>&4
+ fi;;
+ esac
+?X: Start with USG to avoid problems if both usg/bsd was guessed
+ elif ./usg; then
+ if $test `./findhdr termio.h`; then
+ echo "<termio.h> found." >&4
+ val="$define"
+ elif $test `./findhdr sgtty.h`; then
+ echo "<sgtty.h> found." >&4
+ val2="$define"
+ else
+ ./warn "Neither <termio.h> nor <sgtty.h> found--cross fingers!" 4>&4
+ fi
+ else
+ if $test `./findhdr sgtty.h`; then
+ echo "<sgtty.h> found." >&4
+ val2="$define"
+ elif $test `./findhdr termio.h`; then
+ echo "<termio.h> found." >&4
+ val="$define"
+ else
+ ./warn "Neither <sgtty.h> nor <termio.h> found--cross fingers!" 4>&4
+ fi
+ fi;;
+esac
+set i_termio; eval $setvar
+val=$val2; set i_sgtty; eval $setvar
+val=$val3; set i_termios; eval $setvar
+
diff --git a/mcon/U/i_time.U b/mcon/U/i_time.U
new file mode 100644
index 0000000..cd7ec6d
--- /dev/null
+++ b/mcon/U/i_time.U
@@ -0,0 +1,171 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: i_time.U,v $
+?RCS: Revision 3.0 1993/08/18 12:08:45 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: This unit finds which "time" include to use. If 'timezone' is used by the
+?X: program, we also try to find which header should be included. Eventually,
+?X: we look for <sys/select.h> if I_SYSSELECT is used, to get struct timeval.
+?X:
+?MAKE:i_time i_systime i_systimek timeincl: cat cc ccflags contains rm_try \
+ echo n c +i_sysselct Findhdr
+?MAKE: -pick add $@ %<
+?S:i_time:
+?S: This variable conditionally defines I_TIME, which indicates
+?S: to the C program that it should include <time.h>.
+?S:.
+?S:i_systime:
+?S: This variable conditionally defines I_SYS_TIME, which indicates
+?S: to the C program that it should include <sys/time.h>.
+?S:.
+?S:i_systimek:
+?S: This variable conditionally defines I_SYS_TIME_KERNEL, which
+?S: indicates to the C program that it should include <sys/time.h>
+?S: with KERNEL defined.
+?S:.
+?S:timeincl:
+?S: This variable holds the full path of the included time header(s).
+?S:.
+?C:I_TIME (USE_TIME_H):
+?C: This symbol, if defined, indicates to the C program that it should
+?C: include <time.h>.
+?C:.
+?C:I_SYS_TIME (I_SYSTIME USE_SYS_TIME_H NO_TIME_WITH_SYS_TIME):
+?C: This symbol, if defined, indicates to the C program that it should
+?C: include <sys/time.h>.
+?C:.
+?C:I_SYS_TIME_KERNEL (I_SYSTIMEKERNEL):
+?C: This symbol, if defined, indicates to the C program that it should
+?C: include <sys/time.h> with KERNEL defined.
+?C:.
+?H:#$i_time I_TIME /**/
+?H:#$i_systime I_SYS_TIME /**/
+?H:#$i_systimek I_SYS_TIME_KERNEL /**/
+?H:.
+?W::timezone
+?T:xselect flags sysselect s_timeval s_timezone
+?LINT:change i_sysselct
+: see if we should include time.h, sys/time.h, or both
+echo " "
+echo "Testing to see if we should include <time.h>, <sys/time.h> or both." >&4
+$echo $n "I'm now running the test program...$c"
+$cat >try.c <<'EOCP'
+#include <sys/types.h>
+#ifdef I_TIME
+#include <time.h>
+#endif
+#ifdef I_SYSTIME
+#ifdef SYSTIMEKERNEL
+#define KERNEL
+#endif
+#include <sys/time.h>
+#endif
+#ifdef I_SYSSELECT
+#include <sys/select.h>
+#endif
+int main(void)
+{
+ struct tm foo;
+#ifdef S_TIMEVAL
+ struct timeval bar;
+#endif
+#ifdef S_TIMEZONE
+ struct timezone tzp;
+#endif
+ if (foo.tm_sec == foo.tm_sec)
+ return 0;
+#ifdef S_TIMEVAL
+ if (bar.tv_sec == bar.tv_sec)
+ return 0;
+#endif
+ return 1;
+}
+EOCP
+flags=''
+@if I_SYSSELECT
+if $contains 'timeval.*{' `./findhdr sys/select.h` >/dev/null 2>&1; then
+ xselect='-DI_SYSSELECT'
+else
+ xselect=''
+fi
+@end
+@if timezone
+for s_timezone in '-DS_TIMEZONE' ''; do
+@else
+s_timezone=''
+@end
+?X: Every package is given a try with 'struct timeval'
+@if I_SYSSELECT
+for sysselect in $xselect ''; do
+@else
+sysselect=''
+@end
+for s_timeval in '-DS_TIMEVAL' ''; do
+for i_systimek in '' '-DSYSTIMEKERNEL'; do
+for i_time in '' '-DI_TIME'; do
+for i_systime in '-DI_SYSTIME' ''; do
+ case "$flags" in
+ '') $echo $n ".$c"
+ if $cc $ccflags \
+ $i_time $i_systime $i_systimek $sysselect $s_timeval $s_timezone \
+ -o try try.c >/dev/null 2>&1 ; then
+ set X $i_time $i_systime $i_systimek $sysselect $s_timeval
+ shift
+ flags="$*"
+ echo " "
+ $echo $n "Succeeded with $flags$c"
+ fi
+ ;;
+ esac
+done
+done
+done
+done
+@if I_SYSSELECT
+done
+@end
+@if timezone
+done
+@end
+timeincl=''
+echo " "
+case "$flags" in
+*SYSTIMEKERNEL*) i_systimek="$define"
+ timeincl=`./findhdr sys/time.h`
+ echo "We'll include <sys/time.h> with KERNEL defined." >&4;;
+*) i_systimek="$undef";;
+esac
+case "$flags" in
+*I_TIME*) i_time="$define"
+ timeincl=`./findhdr time.h`" $timeincl"
+ echo "We'll include <time.h>." >&4;;
+*) i_time="$undef";;
+esac
+case "$flags" in
+*I_SYSTIME*) i_systime="$define"
+ timeincl=`./findhdr sys/time.h`" $timeincl"
+ echo "We'll include <sys/time.h>." >&4;;
+*) i_systime="$undef";;
+esac
+@if I_SYSSELECT
+case "$flags" in
+*I_SYSSELECT*) i_sysselct="$define"
+ timeincl=`./findhdr sys/select.h`" $timeincl"
+ echo "We'll also include <sys/select.h> to get struct timeval." >&4;;
+*) case "$i_sysselct" in
+ '') i_sysselct="$undef";;
+ esac
+esac
+@end
+$rm_try
+
diff --git a/mcon/U/i_ucontext.U b/mcon/U/i_ucontext.U
new file mode 100644
index 0000000..8de1d97
--- /dev/null
+++ b/mcon/U/i_ucontext.U
@@ -0,0 +1,96 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 2012 Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:i_ucontext i_sys_ucontext: Inhdr cat echo n c rm \
+ +cc +ccflags +ldflags
+?MAKE: -pick add $@ %<
+?S:i_ucontext:
+?S: This variable conditionally defines the I_UCONTEXT symbol, and indicates
+?S: whether a C program may include <ucontext.h> to get ucontext_t.
+?S:.
+?S:i_sys_ucontext:
+?S: This variable conditionally defines the I_SYS_UCONTEXT symbol, and
+?S: indicates whether a C program may include <sys/ucontext.h> to get
+?S: ucontext_t.
+?S:.
+?C:I_UCONTEXT:
+?C: This symbol, if defined, indicates to the C program that it should
+?C: include <ucontext.h> to get at the user thread context. A portable
+?C: program must also check I_SYS_UCONTEXT for <sys/ucontex.h> inclusion,
+?C: especially on OSX.
+?C:.
+?C:I_SYS_UCONTEXT:
+?C: This symbol, if defined, indicates to the C program that it should
+?C: include <sys/ucontext.h> to get at the user thread context. A portable
+?C: program must also check I_UCONTEXT for <ucontex.h> inclusion.
+?C:.
+?H:#$i_ucontext I_UCONTEXT /**/
+?H:#$i_sys_ucontext I_SYS_UCONTEXT /**/
+?H:.
+?T:working
+: see if this is a ucontext.h system
+set ucontext.h i_ucontext
+eval $inhdr
+
+: see if this is a sys/ucontext.h system
+set sys/ucontext.h i_sys_ucontext
+eval $inhdr
+
+: when both ucontext.h and sys/ucontext.h are available, check which one works
+case "$i_ucontext$i_sys_ucontext" in
+"$define$define")
+ echo " "
+ $cat >try.c <<'EOC'
+#ifdef I_UCONTEXT
+#include <ucontext.h>
+#endif
+#ifdef I_SYS_UCONTEXT
+#include <sys/ucontext.h>
+#endif
+
+int main(void)
+{
+ static ucontext_t u;
+ return (int) sizeof(u) & 0xff;
+}
+EOC
+ $echo $n "Checking whether including <ucontext.h> alone works...$c" >&4
+ working=
+ if $cc $ccflags -DI_UCONTEXT -o try try.c $ldflags >/dev/null 2>&1; then
+ working="$define"
+ fi
+ case "$working" in
+ "$define")
+ echo " yes." >&4
+ i_sys_ucontext="$undef"
+ ;;
+ *)
+ echo "no." >&4
+ echo " "
+ $echo $n "Checking whether including <sys/ucontext.h> works...$c" >&4
+ working=
+ if $cc $ccflags -DI_SYS_UCONTEXT \
+ -o try try.c $ldflags >/dev/null 2>&1
+ then
+ working="$define"
+ fi
+ case "$working" in
+ "$define")
+ echo " yes, ignoring <ucontext.h>." >&4
+ i_ucontext="$undef"
+ ;;
+ *) echo " no, we'll include both then." >&4;;
+ esac
+ ;;
+ esac
+ ;;
+esac
+$rm -f try.*
+
diff --git a/mcon/U/i_unistd.U b/mcon/U/i_unistd.U
new file mode 100644
index 0000000..093d1b6
--- /dev/null
+++ b/mcon/U/i_unistd.U
@@ -0,0 +1,31 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: i_unistd.U,v $
+?RCS: Revision 3.0 1993/08/18 12:08:46 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:i_unistd: Inhdr
+?MAKE: -pick add $@ %<
+?S:i_unistd:
+?S: This variable conditionally defines the I_UNISTD symbol, and indicates
+?S: whether a C program should include <unistd.h>.
+?S:.
+?C:I_UNISTD:
+?C: This symbol, if defined, indicates to the C program that it should
+?C: include <unistd.h>.
+?C:.
+?H:#$i_unistd I_UNISTD /**/
+?H:.
+?LINT:set i_unistd
+: see if this is a unistd.h system
+set unistd.h i_unistd
+eval $inhdr
+
diff --git a/mcon/U/i_utime.U b/mcon/U/i_utime.U
new file mode 100644
index 0000000..7510b3d
--- /dev/null
+++ b/mcon/U/i_utime.U
@@ -0,0 +1,31 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: i_utime.U,v $
+?RCS: Revision 3.0 1993/08/18 12:08:47 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:i_utime: Inhdr
+?MAKE: -pick add $@ %<
+?S:i_utime:
+?S: This variable conditionally defines the I_UTIME symbol, and indicates
+?S: whether a C program should include <utime.h>.
+?S:.
+?C:I_UTIME:
+?C: This symbol, if defined, indicates to the C program that it should
+?C: include <utime.h>.
+?C:.
+?H:#$i_utime I_UTIME /**/
+?H:.
+?LINT:set i_utime
+: see if this is an utime system
+set utime.h i_utime
+eval $inhdr
+
diff --git a/mcon/U/i_values.U b/mcon/U/i_values.U
new file mode 100644
index 0000000..6ab704b
--- /dev/null
+++ b/mcon/U/i_values.U
@@ -0,0 +1,35 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1996, Andy Dougherty
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: i_values.U,v $
+?RCS: Revision 3.0.1.1 1997/02/28 15:48:34 ram
+?RCS: patch61: created
+?RCS:
+?MAKE:i_values: Inhdr
+?MAKE: -pick add $@ %<
+?S:i_values:
+?S: This variable conditionally defines the I_VALUES symbol, and indicates
+?S: whether a C program may include <values.h> to get symbols like MAXLONG
+?S: and friends.
+?S:.
+?C:I_VALUES:
+?C: This symbol, if defined, indicates to the C program that it should
+?C: include <values.h> to get definition of symbols like MINFLOAT or
+?C: MAXLONG, i.e. machine dependant limitations. Probably, you
+?C: should use <limits.h> instead, if it is available.
+?C:.
+?H:#$i_values I_VALUES /**/
+?H:.
+?LINT:set i_values
+: see if this is a values.h system
+set values.h i_values
+eval $inhdr
+
diff --git a/mcon/U/i_varhdr.U b/mcon/U/i_varhdr.U
new file mode 100644
index 0000000..9e1e3ee
--- /dev/null
+++ b/mcon/U/i_varhdr.U
@@ -0,0 +1,165 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: i_varhdr.U,v $
+?RCS: Revision 3.0.1.3 1997/02/28 15:54:42 ram
+?RCS: patch61: varargs script now starts with leading "startsh"
+?RCS:
+?RCS: Revision 3.0.1.2 1994/10/29 16:21:02 ram
+?RCS: patch36: added ?F: line for metalint file checking
+?RCS:
+?RCS: Revision 3.0.1.1 1994/05/13 15:26:05 ram
+?RCS: patch27: this unit now supersedes old i_stdarg.U and i_varargs.U
+?RCS: patch27: modified to avoid spurious Whoa warnings (ADO)
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:08:49 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:i_stdarg i_varargs i_varhdr: cat +cc +ccflags rm test Setvar \
+ Findhdr Warn startsh _o
+?MAKE: -pick add $@ %<
+?S:i_stdarg:
+?S: This variable conditionally defines the I_STDARG symbol, which
+?S: indicates to the C program that <stdarg.h> exists and should
+?S: be included.
+?S:.
+?S:i_varargs:
+?S: This variable conditionally defines I_VARARGS, which indicates
+?S: to the C program that it should include <varargs.h>.
+?S:.
+?S:i_varhdr:
+?S: Contains the name of the header to be included to get va_dcl definition.
+?S: Typically one of varargs.h or stdarg.h.
+?S:.
+?C:I_STDARG:
+?C: This symbol, if defined, indicates that <stdarg.h> exists and should
+?C: be included.
+?C:.
+?C:I_VARARGS:
+?C: This symbol, if defined, indicates to the C program that it should
+?C: include <varargs.h>.
+?C:.
+?H:#$i_stdarg I_STDARG /**/
+?H:#$i_varargs I_VARARGS /**/
+?H:.
+?W:%<:va_dcl
+?F:!varargs
+?T:valstd
+?LINT:set i_stdarg i_varargs
+?X:
+?X: Don't use setvar because the varags test below might override these.
+?X: Actually, the messages here are just informative. We don't wish to set
+?X: i_varargs or i_stdarg to their final value before knowing which of the
+?X: two we'll include.
+?X:
+: see if stdarg is available
+echo " "
+if $test `./findhdr stdarg.h`; then
+ echo "<stdarg.h> found." >&4
+ valstd="$define"
+else
+ echo "<stdarg.h> NOT found." >&4
+ valstd="$undef"
+fi
+
+: see if varags is available
+echo " "
+if $test `./findhdr varargs.h`; then
+ echo "<varargs.h> found." >&4
+else
+ echo "<varargs.h> NOT found, but that's ok (I hope)." >&4
+fi
+
+?X:
+?X: if you have stdarg.h, you need to support prototypes to actually use it;
+?X: but if stdarg.h exists and the compiler doesn't support prototypes (for some
+?X: bizarre reason), we'll fall back to varargs.h anyway so it's not so bad.
+?X:
+: set up the varargs testing programs
+$cat > varargs.c <<EOP
+#ifdef I_STDARG
+#include <stdarg.h>
+#endif
+#ifdef I_VARARGS
+#include <varargs.h>
+#endif
+
+#ifdef I_STDARG
+int f(char *p, ...)
+#else
+int f(va_alist)
+va_dcl
+#endif
+{
+ va_list ap;
+#ifndef I_STDARG
+ char *p;
+#endif
+#ifdef I_STDARG
+ va_start(ap,p);
+#else
+ va_start(ap);
+ p = va_arg(ap, char *);
+#endif
+ va_end(ap);
+ return 0;
+}
+EOP
+$cat > varargs <<EOP
+$startsh
+if $cc -c $ccflags -D\$1 varargs.c; then
+ echo "true"
+else
+ echo "false"
+fi
+$rm -f varargs$_o
+EOP
+chmod +x varargs
+
+: now check which varargs header should be included
+echo " "
+i_varhdr=''
+case "$valstd" in
+"$define")
+ if `./varargs I_STDARG`; then
+ val='stdarg.h'
+ elif `./varargs I_VARARGS`; then
+ val='varargs.h'
+ fi
+ ;;
+*)
+ if `./varargs I_VARARGS`; then
+ val='varargs.h'
+ fi
+ ;;
+esac
+case "$val" in
+'')
+ ./warn "I could not find the definition for va_dcl... You have problems..." 4>&4
+ val="$undef"; set i_stdarg; eval $setvar
+ val="$undef"; set i_varargs; eval $setvar
+ ;;
+*)
+ set i_varhdr
+ eval $setvar
+ case "$i_varhdr" in
+ stdarg.h)
+ val="$define"; set i_stdarg; eval $setvar
+ val="$undef"; set i_varargs; eval $setvar
+ ;;
+ varargs.h)
+ val="$undef"; set i_stdarg; eval $setvar
+ val="$define"; set i_varargs; eval $setvar
+ ;;
+ esac
+ echo "We'll include <$i_varhdr> to get va_dcl definition." >&4;;
+esac
+$rm -f varargs*
+
diff --git a/mcon/U/i_vfork.U b/mcon/U/i_vfork.U
new file mode 100644
index 0000000..b32a21f
--- /dev/null
+++ b/mcon/U/i_vfork.U
@@ -0,0 +1,40 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: i_vfork.U,v $
+?RCS: Revision 3.0.1.1 1994/05/06 15:05:44 ram
+?RCS: patch23: avoid inclusion of <vfork.h> if no vfork() used (ADO)
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:08:50 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:i_vfork: Inhdr d_vfork
+?MAKE: -pick add $@ %<
+?S:i_vfork:
+?S: This variable conditionally defines the I_VFORK symbol, and indicates
+?S: whether a C program should include vfork.h.
+?S:.
+?C:I_VFORK:
+?C: This symbol, if defined, indicates to the C program that it should
+?C: include vfork.h.
+?C:.
+?H:#$i_vfork I_VFORK /**/
+?H:.
+: see if this is a vfork system
+case "$d_vfork" in
+"$define")
+ set vfork.h i_vfork
+ eval $inhdr
+ ;;
+*)
+ i_vfork="$undef"
+ ;;
+esac
+
diff --git a/mcon/U/i_whoami.U b/mcon/U/i_whoami.U
new file mode 100644
index 0000000..d1cd36d
--- /dev/null
+++ b/mcon/U/i_whoami.U
@@ -0,0 +1,35 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: i_whoami.U,v $
+?RCS: Revision 3.0.1.1 1993/08/25 14:02:21 ram
+?RCS: patch6: added default for i_whoami
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:08:50 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:i_whoami: Inhdr
+?MAKE: -pick add $@ %<
+?S:i_whoami (d_whoami):
+?S: This variable conditionally defines the I_WHOAMI symbol, which
+?S: indicates to the C program that it should include <whoami.h>.
+?S:.
+?C:I_WHOAMI (WHOAMI):
+?C: This symbol, if defined, indicates that the program may include
+?C: <whoami.h>.
+?C:.
+?H:#$i_whoami I_WHOAMI /**/
+?H:.
+?D:i_whoami=''
+?LINT:set i_whoami
+: see if there is a whoami.h file
+set whoami.h i_whoami
+eval $inhdr
+
diff --git a/mcon/U/i_winsock2.U b/mcon/U/i_winsock2.U
new file mode 100644
index 0000000..bb93726
--- /dev/null
+++ b/mcon/U/i_winsock2.U
@@ -0,0 +1,27 @@
+?RCS: $Id: i_limits.U 1 2006-08-24 12:32:52Z rmanfredi $
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:i_winsock2: Inhdr
+?MAKE: -pick add $@ %<
+?S:i_winsock2:
+?S: This variable conditionally defines the I_WINSOCK2 symbol, and indicates
+?S: whether a C program may include <Winsock2.h>.
+?S:.
+?C:I_WINSOCK2:
+?C: This symbol, if defined, indicates to the C program that it should
+?C: include <Winsock2.h>.
+?C:.
+?H:#$i_winsock2 I_WINSOCK2 /**/
+?H:.
+?LINT:set i_winsock2
+: see if this is a winsock2.h system
+set winsock2.h i_winsock2
+eval $inhdr
+
diff --git a/mcon/U/i_ws2tcpip.U b/mcon/U/i_ws2tcpip.U
new file mode 100644
index 0000000..8c1c079
--- /dev/null
+++ b/mcon/U/i_ws2tcpip.U
@@ -0,0 +1,27 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, 2010, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:i_ws2tcpip: Inhdr
+?MAKE: -pick add $@ %<
+?S:i_ws2tcpip:
+?S: This variable conditionally defines the I_WS2TCPIP symbol, and indicates
+?S: whether a C program may include <Ws2tcpip.h>.
+?S:.
+?C:I_WS2TCPIP:
+?C: This symbol, if defined, indicates to the C program that it should
+?C: include <Ws2tcpip.h>.
+?C:.
+?H:#$i_ws2tcpip I_WS2TCPIP /**/
+?H:.
+?LINT:set i_ws2tcpip
+: see if this is a ws2tcpip.h system
+set ws2tcpip.h i_ws2tcpip
+eval $inhdr
+
diff --git a/mcon/U/i_zlib.U b/mcon/U/i_zlib.U
new file mode 100644
index 0000000..bb4577a
--- /dev/null
+++ b/mcon/U/i_zlib.U
@@ -0,0 +1,31 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 2006, Christian Biere
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?X:
+?X: This unit looks whether <zlib.h> is available or not
+?X:
+?MAKE:i_zlib: Inhdr
+?MAKE: -pick add $@ %<
+?S:i_zlib:
+?S: This variable conditionally defines I_ZLIB, which indicates
+?S: to the C program that it should include <zlib.h>.
+?S:.
+?C:I_ZLIB:
+?C: This symbol, if defined, indicates to the C program that it should
+?C: include <zlib.h>.
+?C:.
+?H:#$i_zlib I_ZLIB /**/
+?H:.
+?Y:BOTTOM
+?LINT:set i_zlib
+: see if this is a zlib.h system
+set zlib.h i_zlib
+eval $inhdr
+
diff --git a/mcon/U/ilp.U b/mcon/U/ilp.U
new file mode 100644
index 0000000..7d55ced
--- /dev/null
+++ b/mcon/U/ilp.U
@@ -0,0 +1,116 @@
+?RCS:
+?RCS: Copyright (c) 2012 Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:ilp d_ilp32 d_ilp64 d_lp64 d_can64: Assert Myread Setvar \
+ cat rm +cc +ccflags echo n c intsize longsize ptrsize
+?MAKE: -pick add $@ %<
+?S:ilp:
+?S: This variable contains the largest amount of bits that the CPU supports,
+?S: from the compiler's point of view. Typically 32 or 64.
+?S:.
+?S:d_ilp32:
+?S: This variable conditionally defines the CPU_IS_ILP32.
+?S:.
+?S:d_ilp64:
+?S: This variable conditionally defines the CPU_IS_ILP64.
+?S:.
+?S:d_lp64:
+?S: This variable conditionally defines the CPU_IS_LP64.
+?S:.
+?S:d_can64:
+?S: This variable conditionally defines CAN_HANDLE_64BITS.
+?S:.
+?C:CPU_ILP_MAXBITS:
+?C: This symbol contains the largest amount of bits that the CPU natively
+?C: supports from the compiler's point of view. Typically 32 or 64.
+?C:.
+?C:CPU_IS_ILP32:
+?C: When defined, this indicates that the integer, long and pointer variables
+?C: hold 32-bit values.
+?C:.
+?C:CPU_IS_ILP64:
+?C: When defined, this indicates that the integer, long and pointer variables
+?C: hold 64-bit values.
+?C:.
+?C:CPU_IS_LP64:
+?C: When defined, this indicates that the long and pointer variables hold
+?C: 64-bit values but integers are smaller (probably only 32-bit wide).
+?C:.
+?C:CAN_HANDLE_64BITS:
+?C: When defined, this indicates that the compiler can handle 64-bit values
+?C: despite the CPU having only 32-bit registers. These are available using
+?C: the "long long" C type. It is only defined for ILP32 machines, since
+?C: 64-bit support is naturally available on ILP64 and LP64 machines.
+?C:.
+?H:#define CPU_ILP_MAXBITS $ilp
+?H:#$d_ilp32 CPU_IS_ILP32 /**/
+?H:#$d_ilp64 CPU_IS_ILP64 /**/
+?H:#$d_lp64 CPU_IS_LP64 /**/
+?H:#$d_can64 CAN_HANDLE_64BITS /**/
+?H:.
+?LINT: set d_ilp32 d_ilp64 d_lp64 d_can64
+: check for architecture type
+echo " "
+$echo $n "Computing CPU architecture type...$c" >&4
+ilp=`expr $longsize \* 8`
+case "$ptrsize" in
+8)
+ val=$undef; set d_ilp32; eval $setvar
+ case "$intsize" in
+ 8)
+ echo " ILP64." >&4
+ val=$define; set d_ilp64; eval $setvar
+ val=$undef; set d_lp64; eval $setvar
+ ;;
+ *)
+ echo " LP64." >&4
+ val=$define; set d_lp64; eval $setvar
+ val=$undef; set d_ilp64; eval $setvar
+ ;;
+ esac
+ ;;
+*)
+ echo " ILP${ilp}." >&4
+ case "$ilp" in
+ 32) val=$define;;
+ *) val=$undef;;
+ esac
+ set d_ilp32; eval $setvar
+ val=$undef; set d_ilp64; eval $setvar
+ val=$undef; set d_lp64; eval $setvar
+ ;;
+esac
+
+@if CAN_HANDLE_64BITS || d_can64
+: see whether compiler supports 64-bit emulation
+val=$undef
+case "$ilp" in
+64) val=$define;;
+*)
+ $cat >try.c <<EOCP
+#include "static_assert.h"
+long long foo;
+int main()
+{
+ STATIC_ASSERT(8 == sizeof(foo));
+ return 0;
+}
+EOCP
+ if $cc -c $ccflags try.c >/dev/null 2>&1; then
+ echo " "
+ echo "Your compiler also supports 64-bit emulation." >&4
+ val=$define
+ fi
+ $rm -f try.*
+ ;;
+esac
+set d_can64
+eval $setvar
+
+@end
diff --git a/mcon/U/inc.U b/mcon/U/inc.U
new file mode 100644
index 0000000..7fbb44e
--- /dev/null
+++ b/mcon/U/inc.U
@@ -0,0 +1,39 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: inc.U,v $
+?RCS: Revision 3.0 1993/08/18 12:08:51 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:inc incexp: Loc Oldconfig Getfile usrinc
+?MAKE: -pick add $@ %<
+?S:inc:
+?S: This variable holds the name of the directory in which the user wants
+?S: to put public header files for the package in question. It is most
+?S: often a local directory such as /usr/local/include.
+?S:.
+?S:incexp:
+?S: This is the same as the inc variable, but is filename-expanded
+?S: at configuration time for convenient use in your makefiles.
+?S:.
+: determine where public header files go
+case "$inc" in
+'')
+ dflt=`./loc . "." /usr/local/include /usr/include/local $usrinc`
+ ;;
+*) dflt="$inc"
+ ;;
+esac
+fn=d~
+rp='Where do you want to put the public header files?'
+. ./getfile
+inc="$ans"
+incexp="$ansexp"
+
diff --git a/mcon/U/install.U b/mcon/U/install.U
new file mode 100644
index 0000000..dde9376
--- /dev/null
+++ b/mcon/U/install.U
@@ -0,0 +1,199 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: install.U,v $
+?RCS: Revision 3.0.1.2 1995/09/25 09:16:37 ram
+?RCS: patch59: all possible install programs are now looked for
+?RCS:
+?RCS: Revision 3.0.1.1 1995/01/11 15:30:41 ram
+?RCS: patch45: created
+?RCS:
+?MAKE:install installdir: Loc Oldconfig Getfile cat test startsh rm +cc \
+ eunicefix package contains mkdir echo n c awk wc
+?MAKE: -pick add $@ %<
+?S:install:
+?S: This variable contains the name of an install program that can accept
+?S: BSD-style arguments. It must correctly support -c, -s, and -m at least.
+?S: It is a fully qualified pathname when found. If you have a local
+?S: install.SH file at the root directory of your package, it is assumed to
+?S: be the default script emulating a BSD install and the variable will be
+?S: set to ./install. Otherwise, it is set to plain 'install', relying on
+?S: the user's PATH to perform miracles.
+?S:.
+?S:installdir:
+?S: This variable contains the name of a program that can install nested
+?S: directories. Often set to 'mkdir -p', it can also be 'install -d' if
+?S: you have such a beast and lack the former. If you have an install.SH
+?S: file at the root directory of your package, it will be used in last
+?S: resort, setting the variable to './install -d'. Otherwise, it is set to
+?S: plain 'mkdir', and cross your fingers!
+?S:.
+?T:dir file tryit prog creatdir either try_wc d_try_wc tryns_wc d_tryns_wc
+?F:!tryinst
+: locate a BSD compatible install program
+echo " "
+echo "Looking for a BSD-compatible install program..." >&4
+@if installdir
+creatdir=''
+@end
+case "$install" in
+'')
+ tryit=''
+ for dir in $pth; do
+ for file in ginstall installbsd scoinst install; do
+ if $test -f $dir/$file; then
+ tryit="$tryit $dir/$file"
+ fi
+ done
+ done
+ $cat >try.c <<EOC
+int main()
+{
+ printf("OK\n");
+ exit(0);
+}
+EOC
+ if $cc -o try try.c >/dev/null 2>&1; then
+ cp try try.ns
+ strip try >/dev/null 2>&1
+ else
+ echo "(I can't seem to compile a trivial C program -- bypassing.)"
+ echo "try" >try
+ cp try try.ns
+ fi
+ $cat >tryinst <<EOS
+$startsh
+$rm -rf foo d
+@if installdir
+\$1 -d foo/bar
+@end
+$mkdir d
+\$1 -c -m 764 try.ns d
+\$1 -c -s -m 642 try.ns d/try
+EOS
+ chmod +x tryinst
+ $eunicefix tryinst
+ dflt=''
+ either=''
+ for prog in $tryit; do
+ $echo $n "Checking $prog... $c"
+ ./tryinst $prog >/dev/null 2>&1
+@if installdir
+ if $test -d foo/bar; then
+ creatdir="$prog -d"
+ fi
+@end
+ (ls -l d/try >try.ls; ls -l d/try.ns >tryno.ls) 2>/dev/null
+ try_wc=`($wc -c try | $awk '{ print $1}') 2>/dev/null`
+ tryns_wc=`($wc -c try.ns | $awk '{ print $1}') 2>/dev/null`
+ d_try_wc=`($wc -c d/try | $awk '{ print $1}') 2>/dev/null`
+ d_tryns_wc=`($wc -c d/try.ns | $awk '{ print $1}') 2>/dev/null`
+ if ($test "X$try_wc" = "X$d_try_wc" && \
+ $test "X$tryns_wc" = "X$d_tryns_wc" && \
+ $contains 'rwxrw-r--' tryno.ls && \
+ $contains 'rw-r---w-' try.ls) >/dev/null 2>&1
+ then
+ dflt="$prog"
+ echo "ok, that will do."
+ break
+ fi
+ echo "not good$either."
+ either=' either'
+ $rm -f try*.ls
+ done
+ $rm -rf foo d tryinst try try*.ls try.*
+ case "$dflt" in
+ '')
+@if {test -f ../install.SH}
+ echo "Hopefully, $package comes with its own install script!"
+ dflt='./install'
+@else
+ dflt='install'
+@end
+ ;;
+ esac
+ ;;
+*) dflt="$install";;
+esac
+$cat <<EOM
+
+I will be requiring a BSD-compatible install program (one that allows
+options like -s to strip executables or -m to specify a file mode) to
+install $package.
+
+If the question below contains a fully qualified default path, then it
+is probably ok. If it is an unqualified name such as 'install', then it
+means I was unable to find out a good install program I could use. If
+@if {test -f ../install.SH}
+you know of one, please tell me about it. If the default is './install',
+then I shall be using the install script supplied with $package.
+@else
+you know of one, please tell me about it.
+@end
+
+EOM
+@if {test -f ../install.SH}
+fn='/fe~(install,./install)'
+@else
+fn='/fe~(install)'
+@end
+rp='Which install program shall I use?'
+. ./getfile
+install="$ans"
+
+@if installdir
+: how can we create nested directories?
+echo " "
+echo "Ok, let's see how we can create nested directories..." >&4
+case "$installdir" in
+'')
+?X: First time, maybe we already found out a working one in $creatdir above...
+?X: Prefer "mkdir -p" because of bugs in GNU install when not running as root
+ $mkdir -p foo/bar >/dev/null 2>&1
+ if $test -d foo/bar; then
+ echo "Great, we can build them using 'mkdir -p'."
+ creatdir='mkdir -p'
+ else
+ case "$creatdir" in
+ '')
+ if eval "$install -d foo/bar"; $test -d foo/bar; then
+ creatdir="install -d"
+ echo "It looks like '$creatdir' will do it for us."
+ fi
+ ;;
+ *)
+ eval "$creatdir foo/bar" >/dev/null 2>&1
+ if $test -d foo/bar; then
+ echo "Ah! We can use '$creatdir' to do just that."
+ else
+ creatdir=''
+ fi
+ ;;
+ esac
+ fi
+ $rm -rf foo
+ case "$creatdir" in
+ '')
+ echo "Heck! Another ancient system lacking the comfort of modern ones!"
+@if {test -f ../install.SH}
+ echo "You can thank $package for bringing you its own install script!"
+ installdir='./install -d'
+@else
+ echo "We have no choice but to use plain old 'mkdir' -- wish me luck!"
+ installdir=mkdir
+@end
+ ;;
+ *) installdir="$creatdir";;
+ esac
+ ;;
+*) echo "As you already told me, '$installdir' should work.";;
+esac
+
+@end
diff --git a/mcon/U/intsize.U b/mcon/U/intsize.U
new file mode 100644
index 0000000..d5135db
--- /dev/null
+++ b/mcon/U/intsize.U
@@ -0,0 +1,89 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, 2012 Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:intsize longsize shortsize: Assert Myread cat rm_try +cc +ccflags echo n c
+?MAKE: -pick add $@ %<
+?S:intsize:
+?S: This variable contains the value of the INTSIZE symbol, which
+?S: indicates to the C program how many bytes there are in an int.
+?S:.
+?S:longsize:
+?S: This variable contains the value of the LONGSIZE symbol, which
+?S: indicates to the C program how many bytes there are in a long.
+?S:.
+?S:shortsize:
+?S: This variable contains the value of the SHORTSIZE symbol which
+?S: indicates to the C program how many bytes there are in a short.
+?S:.
+?C:INTSIZE:
+?C: This symbol contains the value of sizeof(int) so that the C
+?C: preprocessor can make decisions based on it.
+?C:.
+?C:LONGSIZE:
+?C: This symbol contains the value of sizeof(long) so that the C
+?C: preprocessor can make decisions based on it.
+?C:.
+?C:SHORTSIZE:
+?C: This symbol contains the value of sizeof(short) so that the C
+?C: preprocessor can make decisions based on it.
+?C:.
+?H:#define INTSIZE $intsize
+?H:#define LONGSIZE $longsize
+?H:#define SHORTSIZE $shortsize
+?H:.
+?T:types t size var
+?LINT: set shortsize intsize longsize
+: check for lengths of integral types
+echo " "
+types=''
+@if SHORTSIZE || shortsize
+types="$types short"
+@end
+@if INTSIZE || intsize
+types="$types int"
+@end
+@if LONGSIZE || longsize
+types="$types long"
+@end
+for t in $types; do
+ $echo $n "Checking to see how big your ${t}s are...$c" >&4
+ for size in 2 4 8 16 error; do
+ $cat >try.c <<EOCP
+#include "static_assert.h"
+$t foo;
+int main()
+{
+ STATIC_ASSERT($size == sizeof(foo));
+ return 0;
+}
+EOCP
+ if $cc -c $ccflags try.c >/dev/null 2>&1; then break; fi
+ done
+ var=${t}size
+ case "$size" in
+ error)
+ echo " cannot compute it." >&4
+ case $t in
+ short) dflt=2;;
+ int) dflt=4;;
+ long) dflt=4;;
+ esac
+ rp="What is the size of the \"$t\" type (in bytes)?"
+ . ./myread
+ eval $var="$ans"
+ ;;
+ *)
+ echo " $size bytes." >&4
+ eval $var=$size
+ ;;
+ esac
+done
+$rm_try
+
diff --git a/mcon/U/ipc.U b/mcon/U/ipc.U
new file mode 100644
index 0000000..c1f8539
--- /dev/null
+++ b/mcon/U/ipc.U
@@ -0,0 +1,171 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: ipc.U,v $
+?RCS: Revision 3.0 1993/08/18 12:08:53 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:ipc serve_shm serve_msg serve_inet_udp serve_inet_tcp serve_unix_udp \
+ serve_unix_tcp: test Myread Oldconfig d_socket d_msg d_shm d_sem
+?MAKE: -pick add $@ %<
+?LINT:use d_msg d_sem
+?S:ipc:
+?S: This variable holds the type of IPC service we'll be using. Values
+?S: include "ip", "shm", "msg", "cms" and "os9". We don't worry about
+?S: cms or os9 here, because Configure doesn't run in those places--HMS.
+?S:.
+?S:serve_shm:
+?S: This variable controls the definition of SERVE_SHM, which tells the
+?S: C program to use USG shared memory for IPC.
+?S:.
+?S:serve_msg:
+?S: This variable controls the definition of SERVE_MSG, which tells the
+?S: C program to use USG message queues for IPC.
+?S:.
+?S:serve_inet_udp:
+?S: This variable controls the definition of SERVE_INET_UDP, which tells
+?S: the C program to enable InterNet-domain UDP support for IPC.
+?S:.
+?S:serve_inet_tcp:
+?S: This variable controls the definition of SERVE_INET_TCP, which tells
+?S: the C program to enable InterNet-domain TCP support for IPC.
+?S:.
+?S:serve_unix_udp:
+?S: This variable controls the definition of SERVE_UNIX_UDP, which tells
+?S: the C program to enable Unix-domain UDP support for IPC.
+?S:.
+?S:serve_unix_tcp:
+?S: This variable controls the definition of SERVE_UNIX_TCP, which tells
+?S: the C program to enable Unix-domain TCP support for IPC.
+?S:.
+?C:SERVE_SHM:
+?C: If defined, tells the C program to use USG shared memory for IPC.
+?C:.
+?C:SERVE_MSG:
+?C: If defined, tells the C program to use USG message queues for IPC.
+?C:.
+?C:SERVE_INET_UDP:
+?C: If defined, tells the C program to enable InterNet-domain UDP
+?C: support for IPC.
+?C:.
+?C:SERVE_INET_TCP:
+?C: If defined, tells the C program to enable InterNet-domain TCP
+?C: support for IPC.
+?C:.
+?C:SERVE_UNIX_UDP:
+?C: If defined, tells the C program to enable Unix-domain UDP
+?C: support for IPC.
+?C:.
+?C:SERVE_UNIX_TCP:
+?C: If defined, tells the C program to enable Unix-domain TCP
+?C: support for IPC.
+?C:.
+?H:#$serve_shm SERVE_SHM /**/
+?H:#$serve_msg SERVE_MSG /**/
+?H:#$serve_inet_udp SERVE_INET_UDP /**/
+?H:#$serve_inet_tcp SERVE_INET_TCP /**/
+?H:#$serve_unix_udp SERVE_UNIX_UDP /**/
+?H:#$serve_unix_tcp SERVE_UNIX_TCP /**/
+?H:.
+?X: FIXME -- RAM
+?INIT:serve_shm=''
+?INIT:serve_msg="$undef"
+?INIT:serve_inet_udp=''
+?INIT:serve_inet_tcp=''
+?INIT:serve_unix_udp=''
+?INIT:serve_unix_tcp=''
+: get IPC mechanism
+echo " "
+ipc=''
+while $test -z "$ipc"
+do
+ if $test "$ipc" != "shm" -a "$d_socket" = "$define"; then
+ ipc=''
+ if $test "$serve_inet_udp" = "$undef"; then
+ dflt=n
+ else
+ dflt=y
+ fi
+ rp='Provide InterNet-domain UDP service?'
+ . ./myread
+ dflt=''
+ case "$ans" in
+ n*) serve_inet_udp="$undef";;
+ *)
+ serve_inet_udp="$define"
+ ipc='ip'
+ ;;
+ esac
+
+ if $test "$serve_inet_tcp" = "$define"; then
+ dflt=y
+ else
+ dflt=n
+ fi
+ rp='Provide InterNet-domain TCP service?'
+ . ./myread
+ dflt=''
+ case "$ans" in
+ n*) serve_inet_tcp="$undef";;
+ *)
+ serve_inet_tcp="$define"
+ ipc='ip'
+ ;;
+ esac
+
+ if $test "$serve_unix_udp" = "$define"; then
+ dflt=y
+ else
+ dflt=n
+ fi
+ rp='Provide Unix-domain UDP service?'
+ . ./myread
+ dflt=''
+ case "$ans" in
+ n*) serve_unix_udp="$undef";;
+ *)
+ serve_unix_udp="$define"
+ ipc='ip'
+ ;;
+ esac
+
+ if $test "$serve_unix_tcp" = "$define"; then
+ dflt=y
+ else
+ dflt=n
+ fi
+ rp='Provide Unix-domain TCP service?'
+ . ./myread
+ dflt=''
+ case "$ans" in
+ n*) serve_unix_tcp="$undef";;
+ *)
+ serve_unix_tcp="$define"
+ ipc='ip'
+ ;;
+ esac
+ else
+ serve_inet_udp="$undef"
+ serve_inet_tcp="$undef"
+ serve_unix_udp="$undef"
+ serve_unix_tcp="$undef"
+ fi
+ if $test "$ipc" != "ip" -a "$d_shm" = "$define"; then
+ echo "Providing USG shared memory IPC support." >&4
+ serve_shm="$define"
+ ipc='shm'
+ else
+ serve_shm="$undef"
+ fi
+ if $test -z "$ipc"; then
+ echo "You must select an IPC mechanism." >&4
+ fi
+done
+
diff --git a/mcon/U/issymlink.U b/mcon/U/issymlink.U
new file mode 100644
index 0000000..f1a159f
--- /dev/null
+++ b/mcon/U/issymlink.U
@@ -0,0 +1,86 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu>
+?RCS:
+?RCS: $Log: lns.U,v $
+?RCS: Revision 3.0.1.1 1994/06/20 07:05:52 ram
+?RCS: patch30: created by ADO
+?RCS:
+?MAKE:issymlink: lns test rm
+?MAKE: -pick add $@ %<
+?S:issymlink:
+?S: This variable holds the test command to test for a symbolic link
+?S: (if they are supported). Typical values include 'test -h' and
+?S: 'test -L'.
+?S:.
+?T:pth p
+?LINT:change PATH test
+?LINT:extern newsh
+: determine whether symbolic links are supported
+echo " "
+case "$lns" in
+*"ln"*" -s")
+ echo "Checking how to test for symbolic links..." >&4
+ $lns blurfl sym
+ if $test "X$issymlink" = X; then
+?X:
+?X: In some AIX 4 versions the (ksh) builtin test (-h) is broken.
+?X:
+ case "$newsh" in
+ '') sh -c "PATH= test -h sym" >/dev/null 2>&1 ;;
+ *) $newsh -c "PATH= test -h sym" >/dev/null 2>&1 ;;
+ esac
+ if test $? = 0; then
+ issymlink="test -h"
+ else
+ echo "Your builtin 'test -h' may be broken." >&4
+ case "$test" in
+ /*) ;;
+ *) pth=`echo $PATH | sed -e "s/$p_/ /g"`
+ for p in $pth
+ do
+ if test -f "$p/$test"; then
+ test="$p/$test"
+ break
+ fi
+ done
+ ;;
+ esac
+ case "$test" in
+ /*)
+ echo "Trying external '$test -h'." >&4
+ issymlink="$test -h"
+ if $test ! -h sym >/dev/null 2>&1; then
+ echo "External '$test -h' is broken, too." >&4
+ issymlink=''
+ fi
+ ;;
+ *) issymlink='' ;;
+ esac
+ fi
+ fi
+ if $test "X$issymlink" = X; then
+ if $test -L sym 2>/dev/null; then
+ issymlink="$test -L"
+ echo "The builtin '$test -L' worked." >&4
+ fi
+ fi
+ if $test "X$issymlink" != X; then
+ echo "You can test for symbolic links with '$issymlink'." >&4
+ else
+ echo "I do not know how you can test for symbolic links." >&4
+ fi
+ $rm -f blurfl sym
+ ;;
+*) echo "No symbolic links, so not testing for their testing..." >&4
+ ;;
+esac
+
diff --git a/mcon/U/kernel.U b/mcon/U/kernel.U
new file mode 100644
index 0000000..a89753b
--- /dev/null
+++ b/mcon/U/kernel.U
@@ -0,0 +1,63 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: kernel.U,v $
+?RCS: Revision 3.0 1993/08/18 12:08:54 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:kernel: Getfile test
+?MAKE: -pick add $@ %<
+?S:kernel:
+?S: This variable becomes the (fully rooted) path name of the kernel.
+?S:.
+: find the name of the kernel.
+echo " "
+case "$kernel" in
+'')
+ if $test -r /unix; then
+ dflt=/unix
+ elif $test -r /vmunix; then
+ dflt=/vmunix
+ elif $test -r /xenix; then
+ dflt=/xenix
+ elif $test -r /mach; then
+ dflt=/mach
+ elif $test -r /dgux; then
+ dflt=/dgux
+ elif $test -r /hp-ux; then
+ dflt=/hp-ux
+ elif $test -r /syst; then
+ dflt=/syst
+ elif $test -r /arix; then
+ dflt=/arix
+ elif $test -r /irix; then
+ dflt=/arix
+ else
+ dflt='unknown'
+ set X /*x
+ shift
+ case $# in
+ 1)
+ if $test -r "$1"; then
+ dflt="$1"
+ fi
+ ;;
+ esac
+ fi
+ ;;
+*)
+ dflt="$kernel"
+ ;;
+esac
+fn=f
+rp='What is the name of your kernel?'
+. ./getfile
+kernel="$ans"
+
diff --git a/mcon/U/lex.U b/mcon/U/lex.U
new file mode 100644
index 0000000..3ccfc2f
--- /dev/null
+++ b/mcon/U/lex.U
@@ -0,0 +1,67 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Graham Stoney <greyham@research.canon.oz.au>
+?RCS:
+?RCS: $Log: lex.U,v $
+?RCS: Revision 3.0.1.3 1994/10/29 16:22:50 ram
+?RCS: patch36: spurious single quote could cause Configure to crash
+?RCS: patch36: (reported by Xavier Le Vourch <xavierl@eiffel.com>.)
+?RCS:
+?RCS: Revision 3.0.1.2 1994/08/29 16:27:09 ram
+?RCS: patch32: added lexflags variable for lex flags setting
+?RCS:
+?RCS: Revision 3.0.1.1 1994/05/06 15:06:01 ram
+?RCS: patch23: added trailing blank line for metalint
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:08:55 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:lex lexflags: Guess Myread Oldconfig flex test
+?MAKE: -pick add $@ %<
+?S:lex:
+?S: This variable holds the name of the lexical analyser generator we
+?S: want to use in the Makefile. It can be lex or flex.
+?S:.
+?S:lexflags:
+?S: This variable holds any flags that should be passed to the lexical
+?S: analyzer. It is up to the Makefile to use it.
+?S:.
+: determine lexical analyser generator
+case "$lex" in
+'')
+ dflt=lex;;
+*)
+ dflt="$lex";;
+esac
+echo " "
+if $test -f "$flex"; then
+ rp='Which lexical analyser generator (lex or flex) shall I use?'
+else
+ rp='Which lexical analyser generator shall I use?'
+fi
+. ./myread
+lex="$ans"
+
+@if lexflags
+: if using lex this will normally be useless, but flex frequently takes args
+echo " "
+case "$lexflags" in
+'') dflt='none';;
+*) dflt="$lexflags";;
+esac
+rp="What flags should be given to $lex?"
+. ./myread
+case "$ans" in
+none) lexflags='';;
+*) lexflags="$ans";;
+esac
+
+@end
diff --git a/mcon/U/lib.U b/mcon/U/lib.U
new file mode 100644
index 0000000..92d7751
--- /dev/null
+++ b/mcon/U/lib.U
@@ -0,0 +1,54 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: lib.U,v $
+?RCS: Revision 3.0.1.3 1995/09/25 09:16:47 ram
+?RCS: patch59: unit is now forced to the top of Configure, if possible
+?RCS:
+?RCS: Revision 3.0.1.2 1995/01/30 14:38:08 ram
+?RCS: patch49: can now handle installation prefix changes (from WED)
+?RCS:
+?RCS: Revision 3.0.1.1 1994/08/29 16:27:40 ram
+?RCS: patch32: now uses installation prefix to set the default
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:08:56 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:lib libexp: Getfile Loc Oldconfig Prefixit Prefixup prefixexp
+?MAKE: -pick add $@ %<
+?Y:TOP
+?S:lib:
+?S: This variable holds the name of the directory in which the user wants
+?S: to put public library files for the package in question. It is most
+?S: often a local directory such as /usr/local/lib. Programs using this
+?S: variable must be prepared to deal with filename expansion.
+?S:.
+?S:libexp:
+?S: This variable is the same as the lib variable, but is filename expanded
+?S: at configuration time, for convenient use in your makefiles.
+?S:.
+: determine where public libraries go
+set lib lib
+eval $prefixit
+case "$lib" in
+'')
+ dflt=`./loc . "." $prefixexp/lib /usr/local/lib /usr/lib /lib`
+ set dflt
+ eval $prefixup
+ ;;
+*) dflt="$lib";;
+esac
+echo " "
+fn=d~
+rp='Where do you want to put the public libraries?'
+. ./getfile
+lib="$ans"
+libexp="$ansexp"
+
diff --git a/mcon/U/libc.U b/mcon/U/libc.U
new file mode 100644
index 0000000..37bdcc9
--- /dev/null
+++ b/mcon/U/libc.U
@@ -0,0 +1,405 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: libc.U,v $
+?RCS: Revision 3.0.1.10 1997/02/28 15:56:48 ram
+?RCS: patch61: replaced .a with $_a all over the place
+?RCS: patch61: added support for HPUX-10 nm output
+?RCS:
+?RCS: Revision 3.0.1.9 1995/07/25 14:11:56 ram
+?RCS: patch56: now knows about OS/2 platforms
+?RCS:
+?RCS: Revision 3.0.1.8 1995/05/12 12:20:47 ram
+?RCS: patch54: made sure only most recent version of shared lib is picked
+?RCS: patch54: final "nm -p" check now uses xscan and xrun like everybody
+?RCS: patch54: can now grok linux nm output with lead __IO (ADO)
+?RCS: patch54: added support for linux ELF output, using 'W' for alias (ADO)
+?RCS:
+?RCS: Revision 3.0.1.7 1994/10/29 16:23:40 ram
+?RCS: patch36: now looks for shared libraries before anything else (ADO)
+?RCS: patch36: added new nm output format (ADO)
+?RCS:
+?RCS: Revision 3.0.1.6 1994/08/29 16:28:10 ram
+?RCS: patch32: added I-type symbols for nm output parsing on Linux
+?RCS:
+?RCS: Revision 3.0.1.5 1994/06/20 07:03:24 ram
+?RCS: patch30: checks are now presented by succession of if/elif
+?RCS: patch30: uniformized checks for shared objects with new so symbol
+?RCS:
+?RCS: Revision 3.0.1.4 1994/05/06 15:06:33 ram
+?RCS: patch23: added shared library knowledge (ADO and WED)
+?RCS:
+?RCS: Revision 3.0.1.3 1994/01/24 14:12:17 ram
+?RCS: patch16: can now export nm_extract as an internal-use only variable
+?RCS:
+?RCS: Revision 3.0.1.2 1993/09/13 16:09:03 ram
+?RCS: patch10: added special handling for Apollo systems (WAD)
+?RCS:
+?RCS: Revision 3.0.1.1 1993/08/27 14:40:03 ram
+?RCS: patch7: added entry for /usr/shlib/libc.so (OSF/1 machines)
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:08:57 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:libc libnames +nm_extract: echo n c rm test grep Getfile Myread \
+ Oldconfig Loc sed libs incpath libpth ar runnm nm nm_opt nm_so_opt \
+ contains xlibpth so osname trnl tr sort uniq _o _a
+?MAKE: -pick add $@ %<
+?S:libc:
+?S: This variable contains the location of the C library.
+?S:.
+?S:libnames:
+?S: The constructed list of library names. Normally empty, but hint files
+?S: may set this for later perusal by Configure.
+?S:.
+?S:nm_extract:
+?S: This variable holds the name of the extraction command used to process
+?S: the output of nm and yield the list of defined symbols. It is used
+?S: internally by Configure.
+?S:.
+?T:thislib try libnames xxx xscan xrun thisname com tans file
+?F:!libnames !libc.tmp !tmp.imp
+?LINT:change nm_opt runnm
+?INIT:libnames=''
+: Figure out where the libc is located
+case "$runnm" in
+true)
+?X: indentation is wrong on purpose--RAM
+: get list of predefined functions in a handy place
+echo " "
+case "$libc" in
+'') libc=unknown
+ case "$libs" in
+ *-lc_s*) libc=`./loc libc_s$_a $libc $libpth`
+ esac
+ ;;
+esac
+case "$libs" in
+'') ;;
+*) for thislib in $libs; do
+ case "$thislib" in
+ -lc|-lc_s)
+ : Handle C library specially below.
+ ;;
+ -l*)
+ thislib=`echo $thislib | $sed -e 's/^-l//'`
+ if try=`./loc lib$thislib.$so.'*' X $libpth`; $test -f "$try"; then
+ :
+ elif try=`./loc lib$thislib.$so X $libpth`; $test -f "$try"; then
+ :
+ elif try=`./loc lib$thislib$_a X $libpth`; $test -f "$try"; then
+ :
+ elif try=`./loc $thislib$_a X $libpth`; $test -f "$try"; then
+ :
+ elif try=`./loc lib$thislib X $libpth`; $test -f "$try"; then
+ :
+ elif try=`./loc $thislib X $libpth`; $test -f "$try"; then
+ :
+ elif try=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$try"; then
+ :
+ else
+ try=''
+ fi
+ libnames="$libnames $try"
+ ;;
+ *) libnames="$libnames $thislib" ;;
+ esac
+ done
+ ;;
+esac
+?X:
+?X: Some systems (e.g. DG/UX) use "environmental" links, which make the test
+?X: -f fail. Ditto for symbolic links. So in order to reliably check the
+?X: existence of a file, we use test -r. It will still fail with DG/UX links
+?X: though, but at least it will detect symbolic links. At some strategic
+?X: points, we make use of (test -h), using a sub-shell in case builtin test
+?X: does not implement the -h check for symbolic links. This makes it
+?X: possible to preset libc in a hint file for instance and have it show up
+?X: as-is in the question.
+?X:
+xxx=normal
+case "$libc" in
+unknown)
+?X:
+?X: The sed below transforms .so.9 .so.12 into something like .so.0009 .so.0012,
+?X: then sorts on it to allow keeping .so.12 instead of .so.9 as the latest
+?X: up-to-date library. The initial filename (before sed munging, saved in hold
+?X: space via 'h') is appended via 'G' before sorting, then the leading munged
+?X: part is removed after sorting. Nice efficient work from Tye McQueen.
+?X: The initial blurfl is here to prevent the trailing pipe from producing an
+?X: empty string, causing Configure to output all its set variables!
+?X:
+ set /lib/libc.$so
+ for xxx in $libpth; do
+ $test -r $1 || set $xxx/libc.$so
+ : The messy sed command sorts on library version numbers.
+ $test -r $1 || \
+ set `echo blurfl; echo $xxx/libc.$so.[0-9]* | \
+ tr ' ' $trnl | egrep -v '\.[A-Za-z]*$' | $sed -e '
+ h
+ s/[0-9][0-9]*/0000&/g
+ s/0*\([0-9][0-9][0-9][0-9][0-9]\)/\1/g
+ G
+ s/\n/ /' | \
+ $sort | $sed -e 's/^.* //'`
+ eval set \$$#
+ done
+ $test -r $1 || set /usr/ccs/lib/libc.$so
+ $test -r $1 || set /lib/libsys_s$_a
+ ;;
+*)
+?X: ensure the test below for the (shared) C library will fail
+ set blurfl
+ ;;
+esac
+if $test -r "$1"; then
+ echo "Your (shared) C library seems to be in $1."
+ libc="$1"
+elif $test -r /lib/libc && $test -r /lib/clib; then
+?X:
+?X: Apollo has its C library in /lib/clib AND /lib/libc
+?X: not to mention its math library in /lib/syslib...
+?X:
+ echo "Your C library seems to be in both /lib/clib and /lib/libc."
+ xxx=apollo
+ libc='/lib/clib /lib/libc'
+ if $test -r /lib/syslib; then
+ echo "(Your math library is in /lib/syslib.)"
+?X: Put syslib in libc -- not quite right, but won't hurt
+ libc="$libc /lib/syslib"
+ fi
+elif $test -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
+ echo "Your C library seems to be in $libc, as you said before."
+?X: For mips, and...
+elif $test -r $incpath/usr/lib/libc$_a; then
+ libc=$incpath/usr/lib/libc$_a;
+ echo "Your C library seems to be in $libc. That's fine."
+elif $test -r /lib/libc$_a; then
+ libc=/lib/libc$_a;
+ echo "Your C library seems to be in $libc. You're normal."
+else
+ if tans=`./loc libc$_a blurfl/dyick $libpth`; $test -r "$tans"; then
+ :
+ elif tans=`./loc libc blurfl/dyick $libpth`; $test -r "$tans"; then
+ libnames="$libnames "`./loc clib blurfl/dyick $libpth`
+ elif tans=`./loc clib blurfl/dyick $libpth`; $test -r "$tans"; then
+ :
+ elif tans=`./loc Slibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
+ :
+ elif tans=`./loc Mlibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
+ :
+ else
+ tans=`./loc Llibc$_a blurfl/dyick $xlibpth`
+ fi
+ if $test -r "$tans"; then
+ echo "Your C library seems to be in $tans, of all places."
+ libc=$tans
+ else
+ libc='blurfl'
+ fi
+fi
+if $test $xxx = apollo -o -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
+ dflt="$libc"
+ cat <<EOM
+
+If the guess above is wrong (which it might be if you're using a strange
+compiler, or your machine supports multiple models), you can override it here.
+
+EOM
+else
+ dflt=''
+ echo $libpth | $tr ' ' $trnl | $sort | $uniq > libpath
+ cat >&4 <<EOM
+I can't seem to find your C library. I've looked in the following places:
+
+EOM
+ $sed 's/^/ /' libpath
+ cat <<EOM
+
+None of these seems to contain your C library. I need to get its name...
+
+EOM
+fi
+fn=f
+rp='Where is your C library?'
+. ./getfile
+libc="$ans"
+
+echo " "
+echo $libc $libnames | $tr ' ' $trnl | $sort | $uniq > libnames
+set X `cat libnames`
+shift
+xxx=files
+case $# in 1) xxx=file; esac
+echo "Extracting names from the following $xxx for later perusal:" >&4
+echo " "
+$sed 's/^/ /' libnames >&4
+echo " "
+$echo $n "This may take a while...$c" >&4
+
+?X:
+?X: Linux may need the special Dynamic option to nm for shared libraries.
+?X: In general, this is stored in the nm_so_opt variable.
+?X: Unfortunately, that option may be fatal on non-shared libraries.
+?X:
+for file in $*; do
+ case $file in
+ *$so*) $nm $nm_so_opt $nm_opt $file 2>/dev/null;;
+ *) $nm $nm_opt $file 2>/dev/null;;
+ esac
+done >libc.tmp
+
+$echo $n ".$c"
+?X:
+?X: To accelerate processing, we look at the correct 'sed' command
+?X: by using a small subset of libc.tmp, i.e. fprintf function.
+?X: When we know which sed command to use, do the name extraction
+?X:
+$grep fprintf libc.tmp > libc.ptf
+?X:
+?X: In order to enhance readability and save some space, we define
+?X: some variables that will be "eval"ed.
+?X:
+xscan='eval "<libc.ptf $com >libc.list"; $echo $n ".$c" >&4'
+xrun='eval "<libc.tmp $com >libc.list"; echo "done." >&4'
+?X: BSD-like output, I and W types added for Linux
+?X: Some versions of Linux include a leading __IO in the symbol name.
+?X: HPUX10 reportedly has trailing spaces, though I'm surprised it has
+?X: BSD-like output. (AD).
+xxx='[ADTSIW]'
+if com="$sed -n -e 's/__IO//' -e 's/^.* $xxx *_[_.]*//p' -e 's/^.* $xxx *//p'";\
+ eval $xscan;\
+ $contains '^fprintf$' libc.list >/dev/null 2>&1; then
+ eval $xrun
+?X: SYSV-like output
+elif com="$sed -n -e 's/^__*//' -e 's/^\([a-zA-Z_0-9$]*\).*xtern.*/\1/p'";\
+ eval $xscan;\
+ $contains '^fprintf$' libc.list >/dev/null 2>&1; then
+ eval $xrun
+elif com="$sed -n -e '/|UNDEF/d' -e '/FUNC..GL/s/^.*|__*//p'";\
+ eval $xscan;\
+ $contains '^fprintf$' libc.list >/dev/null 2>&1; then
+ eval $xrun
+elif com="$sed -n -e 's/^.* D __*//p' -e 's/^.* D //p'";\
+ eval $xscan;\
+ $contains '^fprintf$' libc.list >/dev/null 2>&1; then
+ eval $xrun
+elif com="$sed -n -e 's/^_//' -e 's/^\([a-zA-Z_0-9]*\).*xtern.*text.*/\1/p'";\
+ eval $xscan;\
+ $contains '^fprintf$' libc.list >/dev/null 2>&1; then
+ eval $xrun
+elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p'";\
+ eval $xscan;\
+ $contains '^fprintf$' libc.list >/dev/null 2>&1; then
+ eval $xrun
+elif com="$grep '|' | $sed -n -e '/|COMMON/d' -e '/|DATA/d' \
+ -e '/ file/d' -e 's/^\([^ ]*\).*/\1/p'";\
+ eval $xscan;\
+ $contains '^fprintf$' libc.list >/dev/null 2>&1; then
+ eval $xrun
+elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p' -e 's/^.*|FUNC |WEAK .*|//p'";\
+ eval $xscan;\
+ $contains '^fprintf$' libc.list >/dev/null 2>&1; then
+ eval $xrun
+?X: mips nm output (sysV)
+elif com="$sed -n -e 's/^__//' -e '/|Undef/d' -e '/|Proc/s/ .*//p'";\
+ eval $xscan;\
+ $contains '^fprintf$' libc.list >/dev/null 2>&1; then
+ eval $xrun
+elif com="$sed -n -e 's/^.*|Proc .*|Text *| *//p'";\
+ eval $xscan;\
+ $contains '^fprintf$' libc.list >/dev/null 2>&1; then
+ eval $xrun
+elif com="$sed -n -e '/Def. Text/s/.* \([^ ]*\)\$/\1/p'";\
+ eval $xscan;\
+ $contains '^fprintf$' libc.list >/dev/null 2>&1; then
+ eval $xrun
+?X: OS/2 nm output
+elif com="$sed -n -e 's/^[-0-9a-f ]*_\(.*\)=.*/\1/p'";\
+ eval $xscan;\
+ $contains '^fprintf$' libc.list >/dev/null 2>&1; then
+ eval $xrun
+elif com="$sed -n -e 's/.*\.text n\ \ \ \.//p'";\
+ eval $xscan;\
+ $contains '^fprintf$' libc.list >/dev/null 2>&1; then
+ eval $xrun
+?X: AIX nm output
+elif com="sed -n -e 's/^__.*//' -e 's/[ ]*D[ ]*[0-9]*.*//p'";\
+ eval $xscan;\
+ $contains '^fprintf$' libc.list >/dev/null 2>&1; then
+ eval $xrun
+else
+ $nm -p $* 2>/dev/null >libc.tmp
+ $grep fprintf libc.tmp > libc.ptf
+ if com="$sed -n -e 's/^.* [ADTSIW] *_[_.]*//p' -e 's/^.* [ADTSIW] //p'";\
+ eval $xscan; $contains '^fprintf$' libc.list >/dev/null 2>&1
+ then
+ nm_opt='-p'
+ eval $xrun
+ else
+ echo " "
+ echo "$nm didn't seem to work right. Trying $ar instead..." >&4
+ com=''
+ if $ar t $libc > libc.tmp && \
+ $contains '^fprintf$' libc.tmp >/dev/null 2>&1
+ then
+ for thisname in $libnames $libc; do
+ $ar t $thisname >>libc.tmp
+ done
+ $sed -e "s/\\$_o\$//" < libc.tmp > libc.list
+ echo "Ok." >&4
+ elif test "X$osname" = "Xos2" && $ar tv $libc > libc.tmp; then
+?X: Repeat libc to extract forwarders to DLL entries too
+ for thisname in $libnames $libc; do
+ $ar tv $thisname >>libc.tmp
+?X: Revision 50 of EMX has bug in ar: it will not extract forwarders
+?X: to DLL entries. Use emximp which will extract exactly them.
+ emximp -o tmp.imp $thisname \
+ 2>/dev/null && \
+ $sed -e 's/^\([_a-zA-Z0-9]*\) .*$/\1/p' \
+ < tmp.imp >>libc.tmp
+ $rm -f tmp.imp
+ done
+ $sed -e "s/\\$_o\$//" -e 's/^ \+//' < libc.tmp > libc.list
+ echo "Ok." >&4
+ else
+ echo "$ar didn't seem to work right." >&4
+ echo "Maybe this is a Cray...trying bld instead..." >&4
+ if
+ bld t $libc | \
+ $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" > libc.list &&
+ $test -s libc.list
+ then
+ for thisname in $libnames; do
+ bld t $libnames | \
+ $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" >>libc.list
+ $ar t $thisname >>libc.tmp
+ done
+ echo "Ok." >&4
+ else
+ echo "That didn't work either." >&4
+ echo "No problem, I'll be compiling test programs then..." >&4
+ runnm=false
+ fi
+ fi
+ fi
+fi
+nm_extract="$com"
+if $test -f /lib/syscalls.exp; then
+ echo " "
+ echo "Also extracting names from /lib/syscalls.exp for good ole AIX..." >&4
+ $sed -n 's/^\([^ ]*\)[ ]*syscall[0-9]*[ ]*$/\1/p' \
+ /lib/syscalls.exp >>libc.list
+fi
+?X: remember, indentation is wrong on purpose--RAM
+;;
+esac
+$rm -f libnames libpath
+
diff --git a/mcon/U/libdbm.U b/mcon/U/libdbm.U
new file mode 100644
index 0000000..239b1db
--- /dev/null
+++ b/mcon/U/libdbm.U
@@ -0,0 +1,47 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: libdbm.U,v $
+?RCS: Revision 3.0.1.1 1997/02/28 15:56:57 ram
+?RCS: patch61: replaced .a with $_a all over the place
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:08:58 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:libdbm: test Loc libpth _a
+?MAKE: -pick add $@ %<
+?S:libdbm:
+?S: This variable contains the argument to pass to the loader in order
+?S: to get the dbm library routines. If there is no dbm or ndbm
+?S: library, it is null.
+?S:.
+?T:xxx
+: see if we should include -ldbm
+echo " "
+if $test -r /usr/lib/libndbm$_a || $test -r /usr/local/lib/libndbm$_a ; then
+ echo "-lndbm found." >&4
+ libdbm='-lndbm'
+elif $test -r /usr/lib/libdbm$_a || $test -r /usr/local/lib/libdbm$_a ; then
+ echo "-ldbm found." >&4
+ libdbm='-ldbm'
+else
+ xxx=`./loc libdbm$_a x $libpth`
+ case "$xxx" in
+ x)
+ echo "No dbm library found." >&4
+ libdbm=''
+ ;;
+ *)
+ echo "DBM library found in $xxx." >&4
+ libdbm="$xxx"
+ ;;
+ esac
+fi
+
diff --git a/mcon/U/libflex.U b/mcon/U/libflex.U
new file mode 100644
index 0000000..9717d48
--- /dev/null
+++ b/mcon/U/libflex.U
@@ -0,0 +1,65 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: libflex.U,v $
+?RCS: Revision 3.0.1.3 1997/02/28 15:57:48 ram
+?RCS: patch61: replaced .a with $_a all over the place
+?RCS:
+?RCS: Revision 3.0.1.2 1994/05/06 15:07:02 ram
+?RCS: patch23: now uses full library path instead of -l notation
+?RCS:
+?RCS: Revision 3.0.1.1 1994/01/24 14:13:25 ram
+?RCS: patch16: un-obsoleted this unit to allow smooth lex/flex compilations
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:08:59 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:libflex: Loc lex libpth _a
+?MAKE: -pick add $@ %<
+?S:libflex:
+?S: This variable contains the argument to pass to the loader in order
+?S: to get the flex/lex library routines. If there is no flex or flex
+?S: library, it is null.
+?S:.
+?T:xxx
+: see if we should include -lfl
+echo " "
+case "$lex" in
+*flex)
+ xxx=`./loc libfl$_a x $libpth`
+ case "$xxx" in
+ x)
+ echo "No flex library found." >&4
+ libflex=''
+ ;;
+ *)
+ echo "flex library found in $xxx." >&4
+ libflex="$xxx"
+ ;;
+ esac
+ ;;
+*lex)
+ xxx=`./loc libl$_a x $libpth`
+ case "$xxx" in
+ x)
+ echo "No lex library found." >&4
+ libflex=''
+ ;;
+ *)
+ echo "lex library found in $xxx." >&4
+ libflex="$xxx"
+ ;;
+ esac
+ ;;
+*)
+echo "You don't seem to have lex or flex, so I won't look for libraries." >&4
+ ;;
+esac
+
diff --git a/mcon/U/libnlist.U b/mcon/U/libnlist.U
new file mode 100644
index 0000000..70c52ad
--- /dev/null
+++ b/mcon/U/libnlist.U
@@ -0,0 +1,49 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: libnlist.U,v $
+?RCS: Revision 3.0.1.1 1997/02/28 16:08:02 ram
+?RCS: patch61: added usrinc and mips on the dependency line
+?RCS: patch61: make sure we call ./mips
+?RCS: patch61: added a ?LINT: hint
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:09:00 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:libnlist: Loc libpth Guess Mips usrinc _a
+?MAKE: -pick add $@ %<
+?S:libnlist (libmld):
+?S: This variable contains the name of the library required to get the
+?S: definition of the nlist() function. On a MIPS RISC/OS box, it is -lmld.
+?S: Under Sys Vr4, it is -lelf. Otherwise, its value is empty.
+?S:.
+?T:xxx
+?LINT:use usrinc
+: see if we need a special library for 'nlist()'
+echo " "
+: How about doing this if nlist is not in libc...
+if ./mips ; then
+ libnlist='-lmld'
+else
+ xxx=`./loc libelf$_a x $libpth`
+ case "$xxx" in
+ x) ;;
+ *)
+ libnlist="$xxx"
+ ;;
+ esac
+fi
+case "$libnlist" in
+'') echo "No special library for nlist() seems necessary." >&4
+ ;;
+*) echo "nlist() can be found in $libnlist." >&4
+ ;;
+esac
+
diff --git a/mcon/U/libnm.U b/mcon/U/libnm.U
new file mode 100644
index 0000000..70045ba
--- /dev/null
+++ b/mcon/U/libnm.U
@@ -0,0 +1,45 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: libnm.U,v $
+?RCS: Revision 3.0.1.1 1997/02/28 16:08:26 ram
+?RCS: patch61: replaced .a with $_a all over the place
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:09:01 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:libnm: test Loc libpth _a
+?MAKE: -pick add $@ %<
+?S:libnm:
+?S: This variable contains the argument to pass to the loader in order
+?S: to get the new math library routines. If there is no new math
+?S: library, it is null.
+?S:.
+?T:ans
+?O: use libswanted='-lnm' instead (see libs.U).
+: see if we should include -lnm
+echo " "
+if $test -r /usr/lib/libnm$_a || $test -r /usr/local/lib/libnm$_a ; then
+ echo "New math library found." >&4
+ libnm='-lnm'
+else
+ ans=`./loc libnm$_a x $libpth`
+ case "$ans" in
+ x)
+ echo "No nm library found--the normal math library will have to do." >&4
+ libnm=''
+ ;;
+ *)
+ echo "New math library found in $ans." >&4
+ libnm="$ans"
+ ;;
+ esac
+fi
+
diff --git a/mcon/U/libpth.U b/mcon/U/libpth.U
new file mode 100644
index 0000000..85fe159
--- /dev/null
+++ b/mcon/U/libpth.U
@@ -0,0 +1,133 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: libpth.U,v $
+?RCS: Revision 3.0.1.6 1997/02/28 16:08:49 ram
+?RCS: patch61: new loclibpth variable
+?RCS:
+?RCS: Revision 3.0.1.5 1995/01/11 15:31:30 ram
+?RCS: patch45: call ./mips instead of just mips (WED)
+?RCS:
+?RCS: Revision 3.0.1.4 1994/08/29 16:29:15 ram
+?RCS: patch32: added /lib/pa1.1 for HP-UX specially tuned PA-RISC libs (ADO)
+?RCS: patch32: fixed information message, making it clearer (ADO)
+?RCS:
+?RCS: Revision 3.0.1.3 1994/06/20 07:03:54 ram
+?RCS: patch30: added /usr/shlib to glibpth for shared-only libraries
+?RCS:
+?RCS: Revision 3.0.1.2 1994/05/13 15:26:57 ram
+?RCS: patch27: fixed a typo (libpth -> glibpth)
+?RCS:
+?RCS: Revision 3.0.1.1 1994/05/06 15:07:53 ram
+?RCS: patch23: now asks for library directories to be searched (ADO)
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:09:02 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: This unit initializes the path for C library lookup.
+?X:
+?MAKE:libpth glibpth xlibpth plibpth loclibpth: \
+ usrinc incpath test cat Myread Oldconfig Mips
+?MAKE: -pick add $@ %<
+?S:libpth:
+?S: This variable holds the general path (space-separated) used to find
+?S: libraries. It is intended to be used by other units.
+?S:.
+?S:glibpth:
+?S: This variable holds the general path (space-separated) used to
+?S: find libraries. It may contain directories that do not exist on
+?S: this platform, libpth is the cleaned-up version.
+?S:.
+?S:xlibpth:
+?S: This variable holds extra path (space-separated) used to find
+?S: libraries on this platform, for example CPU-specific libraries
+?S: (on multi-CPU platforms) may be listed here.
+?S:.
+?S:loclibpth:
+?S: This variable holds the paths (space-separated) used to find local
+?S: libraries. It is prepended to libpth, and is intended to be easily
+?S: set from the command line.
+?S:.
+?S:plibpth:
+?S: Holds the private path used by Configure to find out the libraries.
+?S: Its value is prepend to libpth. This variable takes care of special
+?S: machines, like the mips. Usually, it should be empty.
+?S:.
+?T: xxx dlist
+?LINT:use usrinc
+?INIT:: change the next line if compiling for Xenix/286 on Xenix/386
+?INIT:xlibpth='/usr/lib/386 /lib/386'
+?INIT:: Possible local library directories to search.
+?INIT:loclibpth=""
+?INIT:
+?INIT:: general looking path for locating libraries
+?INIT:glibpth="/lib /usr/lib $xlibpth"
+?INIT:glibpth="$glibpth /usr/ccs/lib /usr/ucblib /usr/local/lib"
+?X: /shlib is for Digital Unix 4.0
+?X: /usr/shlib is for OSF/1 systems.
+?INIT:test -f /usr/shlib/libc.so && glibpth="/usr/shlib $glibpth"
+?INIT:test -f /shlib/libc.so && glibpth="/shlib $glibpth"
+?X: /lib32 and /lib64 are for Linux systems running both 32- and 64-bit programs
+?X: /usr/lib/i386-linux-gnu/ is used on Debian by the libc6-dev package
+?INIT:glibpth="$glibpth /lib32 /lib64 "`ls -1d /usr/lib/*-gnu 2>/dev/null`
+?INIT:: Private path used by Configure to find libraries. Its value
+?INIT:: is prepended to libpth. This variable takes care of special
+?INIT:: machines, like the mips. Usually, it should be empty.
+?INIT:plibpth=''
+?INIT:
+: Set private lib path
+case "$plibpth" in
+'') if ./mips; then
+?X: on mips, we DO NOT want /lib, and we want $incpath/usr/lib
+ plibpth="$incpath/usr/lib /usr/local/lib /usr/ccs/lib"
+ fi;;
+esac
+case "$libpth" in
+' ') dlist='';;
+'') dlist="$loclibpth $plibpth $glibpth";;
+*) dlist="$libpth";;
+esac
+
+: Now check and see which directories actually exist, avoiding duplicates
+libpth=''
+for xxx in $dlist
+do
+ if $test -d $xxx; then
+ case " $libpth " in
+ *" $xxx "*) ;;
+ *) libpth="$libpth $xxx";;
+ esac
+ fi
+done
+$cat <<'EOM'
+
+Some systems have incompatible or broken versions of libraries. Among
+the directories listed in the question below, please remove any you
+know not to be holding relevant libraries, and add any that are needed.
+Say "none" for none.
+
+EOM
+case "$libpth" in
+'') dflt='none';;
+*)
+?X: strip leading space
+ set X $libpth
+ shift
+ dflt=${1+"$@"}
+ ;;
+esac
+rp="Directories to use for library searches?"
+. ./myread
+case "$ans" in
+none) libpth=' ';;
+*) libpth="$ans";;
+esac
+
diff --git a/mcon/U/libs.U b/mcon/U/libs.U
new file mode 100644
index 0000000..d58a15e
--- /dev/null
+++ b/mcon/U/libs.U
@@ -0,0 +1,256 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: libs.U,v $
+?RCS: Revision 3.0.1.6 1997/02/28 16:09:11 ram
+?RCS: patch61: replaced .a with $_a all over the place
+?RCS:
+?RCS: Revision 3.0.1.5 1995/07/25 14:12:05 ram
+?RCS: patch56: now knows about OS/2 platforms
+?RCS:
+?RCS: Revision 3.0.1.4 1994/10/29 16:24:22 ram
+?RCS: patch36: removed old broken thislib/thatlib processing (ADO)
+?RCS:
+?RCS: Revision 3.0.1.3 1994/06/20 07:05:44 ram
+?RCS: patch30: code cleanup with if/elif by ADO and RAM
+?RCS: patch30: undone patch23 for libswanted default setting
+?RCS:
+?RCS: Revision 3.0.1.2 1994/05/06 15:08:45 ram
+?RCS: patch23: now includes ordered default libswanted variable (ADO)
+?RCS: patch23: major cleanup for library lookups (ADO)
+?RCS:
+?RCS: Revision 3.0.1.1 1993/08/25 14:02:31 ram
+?RCS: patch6: added default for libs
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:09:03 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:libs libsfound libsfiles libsdirs libspath libscheck: \
+ test cat Myread Oldconfig Loc libpth package xlibpth so _a \
+ +usesocks sed +cc +ccflags +ldflags rm
+?MAKE: -pick add $@ %<
+?S:libs:
+?S: This variable holds the additional libraries we want to use.
+?S: It is up to the Makefile to deal with it. The list can be empty.
+?S:.
+?S:libsfound:
+?S: This variable holds the full pathnames of the libraries
+?S: we found and accepted.
+?S:.
+?S:libsfiles:
+?S: This variable holds the filenames aka basenames of the libraries
+?S: we found and accepted.
+?S:.
+?S:libsdirs:
+?S: This variable holds the directory names aka dirnames of the libraries
+?S: we found and accepted, duplicates are removed.
+?S:.
+?S:libspath:
+?S: This variable holds the directory names probed for libraries.
+?S:.
+?S:libscheck:
+?S: This variable is intended to be set by hint files, if needed.
+?S: It should contain shell code that will be eval'ed with $xxx holding
+?S: some library file. It may change $xxx if needed.
+?S: For instance, on an Irix platform, you may make sure the right
+?S: library file is used depending on the cc command line, so that the
+?S: correct library is used depending on the selected ABI (for 32 and
+?S: 64-bit compilations).
+?S:
+?S: Here is an example of code that could be found in a hint file on Irix
+?S: when the selected compiler was for 32-bit -- that code is put in the
+?S: cc.cbu call-back unit to be invoked AFTER the C compiler and its
+?S: flags have been chosen:
+?S:
+?S: libscheck='case "$xxx" in
+?S: *.a) /bin/ar p $xxx `/bin/ar t $xxx | sed q` >$$.o;
+?S: case "`/usr/bin/file $$.o`" in
+?S: *N32*) rm -f $$.o ;;
+?S: *) rm -f $$.o; xxx=/no/n32$xxx ;;
+?S: esac ;;
+?S: *) case "`/usr/bin/file $xxx`" in
+?S: *N32*) ;;
+?S: *) xxx=/no/n32$xxx ;;
+?S: esac ;;
+?S: esac'
+?S:.
+?D:libs=''
+?LINT:extern libswanted
+?LINT:change libswanted
+?INIT:: default library list
+?INIT:libswanted=''
+?X: This order is chosen so that libraries -lndir, -ldir, -lucb, -lbsd,
+?X: -lBSD, -lPW, and -lx only get used if there are unresolved
+?X: routines at link time. Usually, these are backwards compatibility
+?X: libraries, and may not be as reliable as the standard c library.
+?X:
+?X: The -lsocket -linet -lnsl order has been reported to be necessary
+?X: for at least one SVR4 implementation.
+?X: -lc must proceed -lucb or -lbsd for most Solaris applications.
+?X: -lc_s proceeds -lc so we pick up the shared library version, if
+?X: it is available.
+?X:
+?X: The ordering of c, posix, and cposix is a guess and almost
+?X: certainly wrong on about half of all systems.
+?X:
+?X: Set proper libswanted in your private Myinit.U if needed.
+?X:
+?X:: default ordered library list
+?X:libswanted='net socket inet bind nsl nm sdbm gdbm ndbm dbm malloc dl'
+?X:libswanted="$libswanted dld sun m c_s c posix cposix ndir dir ucb"
+?X:libswanted="$libswanted bsd BSD PW x"
+?X:
+?INIT:: should be set by hint files if needed
+?INIT:libscheck=''
+?T:xxx yyy thislib thisdir libstyle linkmsg
+?F:lt.c lt
+: Looking for optional libraries
+echo " "
+echo "Checking for optional libraries..." >&4
+case "$libs" in
+' '|'') dflt='';;
+*) dflt="$libs";;
+esac
+case "$libswanted" in
+'') libswanted='c_s';;
+esac
+?X: libsocks has nasty naming scheme.
+?X: This does not work if somebody wants SOCKS 4.
+case "$usesocks" in
+"$define") libswanted="$libswanted socks5 socks5_sh" ;;
+esac
+?X: Used later for link checks
+echo "extern void abort(void); int main(void) { abort(); return 0; }" > lt.c
+libsfound=''
+libsfiles=''
+libsdirs=''
+libspath=''
+for thisdir in $libpth $xlibpth; do
+ test -d $thisdir && libspath="$libspath $thisdir"
+done
+for thislib in $libswanted; do
+ for thisdir in $libspath; do
+ xxx=''
+ if $test ! -f "$xxx" ; then
+ xxx=`ls $thisdir/lib$thislib.$so.[0-9]* 2>/dev/null | $sed -n '1p'`
+ $test -f "$xxx" && eval $libscheck
+ $test -f "$xxx" && libstyle=shared
+ fi
+ if test ! -f "$xxx"; then
+ xxx=$thisdir/lib$thislib.$so
+ $test -f "$xxx" && eval $libscheck
+ $test -f "$xxx" && libstyle=shared
+ fi
+ if test ! -f "$xxx"; then
+ xxx=$thisdir/lib$thislib$_a
+ $test -f "$xxx" && eval $libscheck
+ $test -f "$xxx" && libstyle=static
+ fi
+ if test ! -f "$xxx"; then
+ xxx=$thisdir/$thislib$_a
+ $test -f "$xxx" && eval $libscheck
+ $test -f "$xxx" && libstyle=static
+ fi
+ if test ! -f "$xxx"; then
+ xxx=$thisdir/lib${thislib}_s$_a
+ $test -f "$xxx" && eval $libscheck
+ $test -f "$xxx" && libstyle=static
+ $test -f "$xxx" && thislib=${thislib}_s
+ fi
+ if test ! -f "$xxx"; then
+ xxx=$thisdir/Slib$thislib$_a
+ $test -f "$xxx" && eval $libscheck
+ $test -f "$xxx" && libstyle=static
+ fi
+ if $test -f "$xxx"; then
+?X:
+?X: It is not sufficient to find a .so on the disk. We must make sure
+?X: that we can indeed supply the -lfoo line on the cc line to link against
+?X: that library. On Linux for instance, a versioned .so will not be
+?X: implicitly linked against, whereas it will work fine on Solaris 2.6.
+?X: --RAM, 10/10/2003
+?X:
+ if $cc -o lt $ccflags $ldflags lt.c -l$thislib >/dev/null 2>&1;
+ then
+ linkmsg=""
+ else
+ linkmsg=" but I can't link against it"
+ fi
+ case "$libstyle" in
+ shared) echo "Found -l$thislib (shared)$linkmsg." ;;
+ static) echo "Found -l$thislib$linkmsg." ;;
+ *) echo "Found -l$thislib ($libstyle)$linkmsg." ;;
+ esac
+ case " $dflt " in
+ *"-l$thislib "*) ;;
+ *)
+ case "$linkmsg" in
+ '')
+ dflt="$dflt -l$thislib"
+ libsfound="$libsfound $xxx"
+ yyy=`basename $xxx`
+ libsfiles="$libsfiles $yyy"
+ yyy=`echo $xxx|$sed -e "s%/$yyy\\$%%"`
+ case " $libsdirs " in
+ *" $yyy "*) ;;
+ *) libsdirs="$libsdirs $yyy" ;;
+ esac
+ ;;
+ esac
+ ;;
+ esac
+ break
+ fi
+ done
+ if $test ! -f "$xxx"; then
+?X:
+?X: Try linking against the library: gcc on linux platforms is notorious for
+?X: using complex library search logic, especially on systems mixing 32-bit
+?X: and 64-bit versions.
+?X:
+ if $cc -o lt $ccflags $ldflags lt.c -l$thislib >/dev/null 2>&1
+ then
+ echo "Found -l$thislib (via $cc)."
+ case " $dflt " in
+ *"-l$thislib "*) ;;
+ *) dflt="$dflt -l$thislib";;
+ esac
+ else
+ echo "No -l$thislib."
+ fi
+ fi
+done
+set X $dflt
+shift
+dflt="$*"
+case "$libs" in
+'') dflt="$dflt";;
+*) dflt="$libs";;
+esac
+case "$dflt" in
+' '|'') dflt='none';;
+esac
+$rm -f lt.c lt
+
+$cat <<EOM
+
+In order to compile $package on your machine, a number of libraries
+are usually needed. Include any other special libraries here as well.
+Say "none" for none. The default list is almost always right.
+EOM
+
+echo " "
+rp="Which libraries to use?"
+. ./myread
+case "$ans" in
+none) libs=' ';;
+*) libs="$ans";;
+esac
+
diff --git a/mcon/U/libyacc.U b/mcon/U/libyacc.U
new file mode 100644
index 0000000..cc7a3f3
--- /dev/null
+++ b/mcon/U/libyacc.U
@@ -0,0 +1,64 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: libyacc.U,v $
+?RCS: Revision 3.0.1.4 1997/02/28 16:09:19 ram
+?RCS: patch61: replaced .a with $_a all over the place
+?RCS:
+?RCS: Revision 3.0.1.3 1994/05/13 15:27:12 ram
+?RCS: patch27: added byacc case (ADO)
+?RCS:
+?RCS: Revision 3.0.1.2 1994/05/06 15:09:01 ram
+?RCS: patch23: now uses full library path instead of -l notation
+?RCS:
+?RCS: Revision 3.0.1.1 1994/01/24 14:13:49 ram
+?RCS: patch16: un-obsoleted this unit for smooth yacc compilations
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:09:04 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:libyacc: Loc yacc libpth _a
+?MAKE: -pick add $@ %<
+?S:libyacc:
+?S: This variable contains the argument to pass to the loader in order
+?S: to get the yacc library routines. If there is no yacc or yacc
+?S: library, it is null.
+?S:.
+?T:xxx
+: see if we should include -ly
+echo " "
+case "$yacc" in
+*byacc*)
+ echo "You are using byacc, so I won't look for a yacc library." >&4
+ libyacc=''
+ ;;
+*yacc)
+ xxx=`./loc liby$_a x $libpth`
+ case "$xxx" in
+ x)
+ echo "No yacc library found." >&4
+ libyacc=''
+ ;;
+ *)
+ echo "yacc library found in $xxx." >&4
+ libyacc="$xxx"
+ ;;
+ esac
+ ;;
+*bison*)
+ echo "You are using bison, so I won't look for a yacc library." >&4
+ libyacc=''
+ ;;
+*)
+echo "You don't seem to have yacc, so I won't look for the yacc library." >&4
+ libyacc=''
+ ;;
+esac
+
diff --git a/mcon/U/lintlib.U b/mcon/U/lintlib.U
new file mode 100644
index 0000000..a93fd30
--- /dev/null
+++ b/mcon/U/lintlib.U
@@ -0,0 +1,38 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: lintlib.U,v $
+?RCS: Revision 3.0 1993/08/18 12:09:05 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:lintlib lintlibexp: Getfile Loc Oldconfig
+?MAKE: -pick add $@ %<
+?S:lintlib:
+?S: This variable holds the name of the directory in which the user wants
+?S: to put public lint-library files for the package in question. It is
+?S: most often a local directory such as /usr/local/lib/lint. Programs using
+?S: this variable must be prepared to deal with ~name expansion.
+?S:.
+?S:lintlibexp:
+?S: This variable is the same as the lintlib variable, but is filename
+?S: expanded at configuration time, for convenient use in your makefiles.
+?S:.
+: determine where public lint libraries go
+case "$lintlib" in
+'') dflt=`./loc . "." /usr/local/lib/lint /usr/lib/lint /usr/lib`;;
+*) dflt="$lintlib" ;;
+esac
+echo " "
+fn=d~
+rp='Where do you want to put the public lint libraries?'
+. ./getfile
+lintlib="$ans"
+lintlibexp="$ansexp"
+
diff --git a/mcon/U/lns.U b/mcon/U/lns.U
new file mode 100644
index 0000000..d3cf5aa
--- /dev/null
+++ b/mcon/U/lns.U
@@ -0,0 +1,41 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu>
+?RCS:
+?RCS: $Log: lns.U,v $
+?RCS: Revision 3.0.1.1 1994/06/20 07:05:52 ram
+?RCS: patch30: created by ADO
+?RCS:
+?X:
+?X: This unit checks whether symbolic links are really supported.
+?X: We can't rely on d_symlink because that may be listed in the
+?X: C library but unimplemented.
+?X:
+?MAKE:lns: ln rm touch test
+?MAKE: -pick add $@ %<
+?S:lns:
+?S: This variable holds the name of the command to make
+?S: symbolic links (if they are supported). It can be used
+?S: in the Makefile. It is either 'ln -s' or 'ln'
+?S:.
+: determine whether symbolic links are supported
+echo " "
+$rm -f blurfl sym
+$touch blurfl
+if $ln -s blurfl sym > /dev/null 2>&1 && $test -f sym; then
+ echo "Symbolic links are supported." >&4
+ lns="$ln -s"
+else
+ echo "Symbolic links are NOT supported." >&4
+ lns="$ln"
+fi
+$rm -f blurfl sym
+
diff --git a/mcon/U/locale.U b/mcon/U/locale.U
new file mode 100644
index 0000000..659c827
--- /dev/null
+++ b/mcon/U/locale.U
@@ -0,0 +1,70 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 2006, Christian Biere
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:locale localeexp: Getfile Loc Oldconfig Prefixit Prefixup \
+ cat prefixexp package spackage enablenls
+?MAKE: -pick add $@ %<
+?Y:TOP
+?S:locale:
+?S: This variable holds the name of the directory in which the user wants
+?S: to put locale library files for the package in question. It is most
+?S: often a local directory such as /usr/share/locale. Programs using this
+?S: variable must be prepared to deal with filename expansion.
+?S: Only meaningful when $enablenls holds true.
+?S:.
+?S:localeexp:
+?S: This variable is the same as the locale variable, but is filename expanded
+?S: at configuration time, for convenient use in your makefiles.
+?S: Only meaningful when $enablenls holds true.
+?S:.
+?C:LOCALE:
+?C: This symbol holds the place where localization files for the package
+?C: are expected to be found. Be prepared to use ~name expansion, or rely
+?C: on LOCALE_EXP to have an expanded value computed at configuration time.
+?C: Only meaningful when ENABLE_NLS is defined.
+?C:.
+?C:LOCALE_EXP:
+?C: This symbol holds the possibly ~name expanded place where localization
+?C: files for the package are expected to be found.
+?C: Only meaningful when ENABLE_NLS is defined.
+?C:.
+?H:#define LOCALE "$locale"
+?H:#define LOCALE_EXP "$localeexp"
+?H:.
+: determine where locale files go
+case "$enablenls" in
+false) ;;
+*)
+ set locale locale
+ eval $prefixit
+ case "$locale" in
+ '')
+ dflt=`./loc . "." $prefixexp/share/locale \
+ /usr/share/locale /usr/local/share/locale`
+ set dflt
+ eval $prefixup
+ ;;
+ *) dflt="$locale";;
+ esac
+ fn=d~
+ $cat <<EOM
+
+$spackage comes with a set of files holding translations for various
+languages. Those need to be installed in order for you to benefit
+from those translations and have $package localized.
+
+EOM
+ rp='Where do you want to put the localization files?'
+ . ./getfile
+ locale="$ans"
+ localeexp="$ansexp"
+ ;;
+esac
+
diff --git a/mcon/U/locdist.U b/mcon/U/locdist.U
new file mode 100644
index 0000000..dc6299c
--- /dev/null
+++ b/mcon/U/locdist.U
@@ -0,0 +1,174 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: locdist.U,v $
+?RCS: Revision 3.0.1.1 1994/05/06 15:09:20 ram
+?RCS: patch23: added support for multi-state regions (WED)
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:09:06 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:locdist orgdist citydist statedist multistatedist cntrydist contdist: \
+ test newslibexp cat Myread Oldconfig
+?MAKE: -pick add $@ %<
+?S:locdist:
+?S: This variable contains the eventual value of the LOCDIST symbol,
+?S: which is the local organization's distribution name for news.
+?S:.
+?S:orgdist:
+?S: This variable contains the eventual value of the ORGDIST symbol,
+?S: which is the organization's distribution name for news.
+?S:.
+?S:citydist:
+?S: This variable contains the eventual value of the CITYDIST symbol,
+?S: which is the city's distribution name for news.
+?S:.
+?S:statedist:
+?S: This variable contains the eventual value of the STATEDIST symbol,
+?S: which is the state's or province's distribution name for news.
+?S:.
+?S:multistatedist:
+?S: This variable contains the eventual value of the MULTISTATEDIST symbol,
+?S: which is the news distribution code for multi-state region.
+?S:.
+?S:cntrydist:
+?S: This variable contains the eventual value of the CNTRYDIST symbol,
+?S: which is the country's distribution name for news.
+?S:.
+?S:contdist:
+?S: This variable contains the eventual value of the CONTDIST symbol,
+?S: which is the continent's distribution name for news.
+?S:.
+?C:LOCDIST:
+?C: This symbol contains the distribution name for the news system that
+?C: restricts article distribution to the local organization.
+?C:.
+?C:ORGDIST:
+?C: This symbol contains the distribution name for the news system that
+?C: restricts article distribution to the organization.
+?C:.
+?C:CITYDIST:
+?C: This symbol contains the distribution name for the news system that
+?C: restricts article distribution to the city.
+?C:.
+?C:STATEDIST:
+?C: This symbol contains the distribution name for the news system that
+?C: restricts article distribution to the state or province.
+?C:.
+?C:MULTISTATEDIST:
+?C: This symbol contains the distribution name for the news system that
+?C: restricts article distribution to a multi-state region.
+?C:.
+?C:CNTRYDIST:
+?C: This symbol contains the distribution name for the news system that
+?C: restricts article distribution to the country.
+?C:.
+?C:CONTDIST:
+?C: This symbol contains the distribution name for the news system that
+?C: restricts article distribution to the continent.
+?C:.
+?H:#define LOCDIST "$locdist" /**/
+?H:#define ORGDIST "$orgdist" /**/
+?H:#define CITYDIST "$citydist" /**/
+?H:#define MULTISTATEDIST "$multistatedist" /**/
+?H:#define STATEDIST "$statedist" /**/
+?H:#define CNTRYDIST "$cntrydist" /**/
+?H:#define CONTDIST "$contdist" /**/
+?H:.
+: get the local distributions
+$cat <<'EOH'
+
+Distribution groups are the things you use on the Distribution line to limit
+where an article will go to. You are likely to be a member of several
+distribution groups, such as organization, city, state, province, country,
+continent, etc. For example, Los Angeles has the distribution code "la",
+New Jersey has the code "nj", and Europe has the code "eunet".
+
+The categories you will be asked are:
+
+local organization (Could be just one machine or a cluster or an office)
+organization att, dec, kgb, ...
+city la, ny, mosc, ...
+state/province ca, nj, bc, ...
+multi-state region pnw, ne, ...
+country usa, can, rok, whatever
+continent na (North America), asia, etc.
+
+EOH
+if $test -f $newslibexp/distributions; then
+ case "$silent" in
+ true) ;;
+ *) dflt='Hit return to continue'
+ rp=''
+ . ./myread
+ ;;
+ esac
+ echo "Here is your distributions file:" >&4
+ echo " " >&4
+ $cat >&4 $newslibexp/distributions
+ echo " " >&4
+fi
+echo "Use 'none' for any distributions you don't have."
+echo " "
+case "$locdist" in
+'') dflt="none";;
+*) dflt="$locdist";;
+esac
+rp="What is the distribution code for your local organization?"
+. ./myread
+locdist="$ans"
+case "$orgdist" in
+'') dflt="none";;
+*) dflt="$orgdist";;
+esac
+rp="What is the distribution code for your organization?"
+. ./myread
+orgdist="$ans"
+case "$citydist" in
+'') dflt="none";;
+*) dflt="$citydist";;
+esac
+rp="What is the distribution code for your city?"
+. ./myread
+citydist="$ans"
+case "$statedist" in
+'') dflt="none";;
+*) dflt="$statedist";;
+esac
+rp="What is the distribution code for your state/province?"
+. ./myread
+statedist="$ans"
+case "$multistatedist" in
+'') dflt="none";;
+*) dflt="$multistatedist";;
+esac
+rp="What is the distribution code for your multi-state region?"
+. ./myread
+multistatedist="$ans"
+case "$cntrydist" in
+'') dflt="none";;
+*) dflt="$cntrydist";;
+esac
+rp="What is the distribution code for your country?"
+. ./myread
+cntrydist="$ans"
+case "$contdist" in
+'') dflt="none";;
+*) dflt="$contdist";;
+esac
+rp="What is the distribution code for your continent?"
+. ./myread
+contdist="$ans"
+$cat <<'EOM'
+
+If you have any other distribution groups you will need to edit Pnews
+and newsetup to add them.
+EOM
+
diff --git a/mcon/U/longsize.U b/mcon/U/longsize.U
new file mode 100644
index 0000000..5ec0dc3
--- /dev/null
+++ b/mcon/U/longsize.U
@@ -0,0 +1,24 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: longsize.U,v $
+?RCS: Revision 3.0.1.2 1997/02/28 16:09:35 ram
+?RCS: patch61: code moved to intsize.U
+?RCS:
+?RCS: Revision 3.0.1.1 1994/10/29 16:24:31 ram
+?RCS: patch36: added ?F: line for metalint file checking
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:09:07 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: 'longsize' is now defined within intsize.U
+?X:
+?LINT: empty
diff --git a/mcon/U/lseektype.U b/mcon/U/lseektype.U
new file mode 100644
index 0000000..0223930
--- /dev/null
+++ b/mcon/U/lseektype.U
@@ -0,0 +1,40 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: lseektype.U,v $
+?RCS: Revision 3.0.1.1 1994/08/29 16:30:10 ram
+?RCS: patch32: now uses new Typedef unit to compute type information
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:09:08 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:lseektype: Myread Typedef
+?MAKE: -pick add $@ %<
+?S:lseektype:
+?S: This variable defines lseektype to be something like off_t, long,
+?S: or whatever type is used to declare lseek offset's type in the
+?S: kernel (which also appears to be lseek's return type).
+?S:.
+?C:Off_t (LSEEKTYPE):
+?C: This symbol holds the type used to declare offsets in the kernel.
+?C: It can be int, long, off_t, etc... It may be necessary to include
+?C: <sys/types.h> to get any typedef'ed information.
+?C:.
+?H:#define Off_t $lseektype /* <offset> type */
+?H:.
+: see what type lseek is declared as in the kernel
+set off_t lseektype long stdio.h sys/types.h
+eval $typedef
+echo " "
+dflt="$lseektype"
+rp="What type is lseek's offset on this system declared as?"
+. ./myread
+lseektype="$ans"
+
diff --git a/mcon/U/maildir.U b/mcon/U/maildir.U
new file mode 100644
index 0000000..cd07290
--- /dev/null
+++ b/mcon/U/maildir.U
@@ -0,0 +1,41 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: maildir.U,v $
+?RCS: Revision 3.0.1.1 1993/12/15 08:21:56 ram
+?RCS: patch15: now also looks under /var/mail for BSD/386
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:09:09 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:maildir maildirexp: Getfile Loc Oldconfig
+?MAKE: -pick add $@ %<
+?S:maildir:
+?S: This variable contains the name of the directory in which mail is
+?S: spooled. Programs using this variable must be prepared to deal with
+?S: ~name substitutions.
+?S:.
+?S:maildirexp:
+?S: This is the same as the maildir variable, but is filename expanded
+?S: at configuration time, for programs not willing to deal with it at
+?S: run-time.
+?S:.
+: determine where mail is spooled
+case "$maildir" in
+'') dflt=`./loc . /usr/spool/mail /usr/spool/mail /usr/mail /var/mail`;;
+*) dflt="$maildir";;
+esac
+echo " "
+fn=d~
+rp='Where is yet-to-be-read mail spooled?'
+. ./getfile
+maildir="$ans"
+maildirexp="$ansexp"
+
diff --git a/mcon/U/mailer.U b/mcon/U/mailer.U
new file mode 100644
index 0000000..c9ef5e6
--- /dev/null
+++ b/mcon/U/mailer.U
@@ -0,0 +1,61 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: mailer.U,v $
+?RCS: Revision 3.0.1.3 1995/01/11 15:32:11 ram
+?RCS: patch45: can now use Loc variables since path stripping is deferred
+?RCS:
+?RCS: Revision 3.0.1.2 1994/05/06 15:10:04 ram
+?RCS: patch23: ensure full path value is used for rmail also
+?RCS:
+?RCS: Revision 3.0.1.1 1994/01/24 14:14:18 ram
+?RCS: patch16: now use _sendmail vars and friends for portability issues
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:09:10 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:mailer: test cat rmail mail smail sendmail Getfile Oldconfig
+?MAKE: -pick add $@ %<
+?S:mailer:
+?S: This variable contains the full pathname of a reasonable mailer.
+?S: By reasonable, we mean some program which can understand internet
+?S: addresses or at least forward them to some internet router. This
+?S: mailer should be invoked as "mailer [options] recipients <mail".
+?S:.
+: determine the name of a reasonable mailer
+case "$mailer" in
+'')
+ if $test -f "$sendmail"; then
+ dflt="$sendmail"
+ elif $test -f "$smail"; then
+ dflt="$smail"
+ elif $test -f "$rmail"; then
+ dflt="$rmail"
+ elif $test -f /bin/mail; then
+ dflt=/bin/mail
+ else
+ dflt=$mail
+ fi
+ ;;
+*) dflt="$mailer";;
+esac
+$cat <<EOM
+
+I need the full pathname of the program used to deliver mail on your system.
+A typical answer would be /usr/lib/sendmail or /bin/rmail, but you may choose
+any other program, as long as it can be fed from standard input and will
+honour any user-supplied headers.
+
+EOM
+fn=f
+rp='Mail transport agent to be used?'
+. ./getfile
+mailer="$ans"
+
diff --git a/mcon/U/mailfile.U b/mcon/U/mailfile.U
new file mode 100644
index 0000000..64cd1e0
--- /dev/null
+++ b/mcon/U/mailfile.U
@@ -0,0 +1,56 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: mailfile.U,v $
+?RCS: Revision 3.0.1.2 1994/10/29 16:24:57 ram
+?RCS: patch36: the Loc unit was missing from the dependency line
+?RCS:
+?RCS: Revision 3.0.1.1 1993/12/15 08:22:08 ram
+?RCS: patch15: now also looks under /var/mail for BSD/386
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:09:11 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:mailfile: Myread Oldconfig Filexp Loc
+?MAKE: -pick add $@ %<
+?S:mailfile:
+?S: This variable contains the eventual value of the MAILFILE symbol,
+?S: which contains an interpretable name of the mail spool file for the
+?S: current user.
+?S:.
+?C:MAILFILE:
+?C: This symbol contains the interpretable name of the mail spool file
+?C: for the current user. The program must be prepared to substitute
+?C: the HOME directory for %~, and the login id for %L.
+?C:.
+?H:#define MAILFILE "$mailfile" /**/
+?H:.
+: determine where mail is spooled
+case "$mailfile" in
+'')
+ dflt=`./loc . XXX /usr/spool/mail /usr/mail /var/mail`
+ case "$dflt" in
+ XXX) dflt='%~/mailbox';;
+ *) dflt="$dflt/%L";;
+ esac
+ ;;
+*) dflt="$mailfile"
+ ;;
+esac
+cat <<'EOM'
+
+In the following question, you may use %~ to represent the user's home
+directory, and %L to represent a users name.
+
+EOM
+rp='In which file is yet-to-be-read mail spooled? (~name ok)'
+. ./myread
+mailfile=`./filexp "$ans"`
+
diff --git a/mcon/U/make.U b/mcon/U/make.U
new file mode 100644
index 0000000..f9191b4
--- /dev/null
+++ b/mcon/U/make.U
@@ -0,0 +1,60 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1996, Andy Dougherty
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: make.U,v $
+?RCS: Revision 3.0.1.1 1997/02/28 16:09:40 ram
+?RCS: patch61: created
+?RCS:
+?MAKE:make_set_make : Loc rm sed make
+?MAKE: -pick add $@ %<
+?S:make_set_make:
+?S: Some versions of 'make' set the variable MAKE. Others do not.
+?S: This variable contains the string to be included in Makefile.SH
+?S: so that MAKE is set if needed, and not if not needed.
+?S: Possible values are:
+?S:
+?S: make_set_make='#' # If your make program handles this for you,
+?S:
+?S: make_set_make="MAKE=$make" # if it doesn't.
+?S:
+?S: This uses a comment character so that we can distinguish a
+?S: 'set' value (from a previous config.sh or Configure -D option)
+?S: from an uncomputed value.
+?S:.
+?LINT: extern MAKE
+?LINT: change MAKE
+?X: This test is based on one from an autoconf-generated configure
+?X: script. Autoconf stole a lot from Configure, but now it's our
+?X: turn to do so... ;-) -- RAM, 21/02/97
+: check whether make sets MAKE
+echo " "
+echo "Checking if your $make program sets \$(MAKE)..." >&4
+case "$make_set_make" in
+'')
+?X: Use sed so we don't have a line beginning with @echo. Metaconfig
+?X: will think that's a command like @if or @end.
+ $sed 's/^X //' > testmake.mak << 'EOF'
+Xall:
+X @echo 'maketemp="$(MAKE)"'
+EOF
+?X: GNU make sometimes prints "make[1]: Entering...", which would confuse us
+ case "`$make -f testmake.mak 2>/dev/null`" in
+ *maketemp=*) make_set_make='#' ;;
+ *) make_set_make="MAKE=$make" ;;
+ esac
+ $rm -f testmake.mak
+ ;;
+esac
+case "$make_set_make" in
+'#') echo "Yup, it does.";;
+*) echo "Nope, it doesn't.";;
+esac
+
diff --git a/mcon/U/mallocsrc.U b/mcon/U/mallocsrc.U
new file mode 100644
index 0000000..233fc03
--- /dev/null
+++ b/mcon/U/mallocsrc.U
@@ -0,0 +1,181 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: mallocsrc.U,v $
+?RCS: Revision 3.0.1.2 1997/02/28 16:10:26 ram
+?RCS: patch61: added support for Free_t, the type of free()
+?RCS: patch61: replaced .o with $_o all over the place
+?RCS:
+?RCS: Revision 3.0.1.1 1994/05/06 15:10:46 ram
+?RCS: patch23: added support for MYMALLOC, mainly for perl5 (ADO)
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:09:12 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:mallocsrc mallocobj usemymalloc malloctype d_mymalloc \
+ freetype: Myread \
+ Oldconfig package spackage Guess Setvar rm cat +cc +ccflags Findhdr \
+ i_malloc i_stdlib sed libs _o ptrsize
+?MAKE: -pick add $@ %<
+?X: Put near top so that other tests don't erroneously include
+?X: -lmalloc. --AD 22 June 1998
+?Y:TOP
+?S:usemymalloc:
+?S: This variable contains y if the malloc that comes with this package
+?S: is desired over the system's version of malloc. People often include
+?S: special versions of malloc for efficiency, but such versions are often
+?S: less portable. See also mallocsrc and mallocobj.
+?S: If this is 'y', then -lmalloc is removed from $libs.
+?S:.
+?S:mallocsrc:
+?S: This variable contains the name of the malloc.c that comes with
+?S: the package, if that malloc.c is preferred over the system malloc.
+?S: Otherwise the value is null. This variable is intended for generating
+?S: Makefiles.
+?S:.
+?S:d_mymalloc:
+?S: This variable conditionally defines MYMALLOC in case other parts
+?S: of the source want to take special action if MYMALLOC is used.
+?S: This may include different sorts of profiling or error detection.
+?S:.
+?S:mallocobj:
+?S: This variable contains the name of the malloc.o that this package
+?S: generates, if that malloc.o is preferred over the system malloc.
+?S: Otherwise the value is null. This variable is intended for generating
+?S: Makefiles. See mallocsrc.
+?S:.
+?S:freetype:
+?S: This variable contains the return type of free(). It is usually
+?S: void, but occasionally int.
+?S:.
+?S:malloctype:
+?S: This variable contains the kind of ptr returned by malloc and realloc.
+?S:.
+?C:Free_t:
+?C: This variable contains the return type of free(). It is usually
+?C: void, but occasionally int.
+?C:.
+?C:Malloc_t (MALLOCPTRTYPE):
+?C: This symbol is the type of pointer returned by malloc and realloc.
+?C:.
+?H:#define Malloc_t $malloctype /**/
+?H:#define Free_t $freetype /**/
+?H:.
+?C:USE_MY_MALLOC (MYMALLOC):
+?C: This symbol, if defined, indicates that we're using our own malloc.
+?C:.
+?H:#$d_mymalloc USE_MY_MALLOC /**/
+?H:.
+?LINT:change libs
+?X: Cannot test for mallocsrc; it is the unit's name and there is a bug in
+?X: the interpreter which defines all the names, even though they are not used.
+@if mallocobj || USE_MY_MALLOC
+: determine which malloc to compile in
+echo " "
+case "$usemymalloc" in
+[yY]*|true|$define) dflt='y' ;;
+[nN]*|false|$undef) dflt='n' ;;
+*)
+ case "$ptrsize" in
+ 4) dflt='y' ;;
+ *) dflt='n' ;;
+ esac
+ ;;
+esac
+$cat <<EOM
+$spackage comes with its own malloc() implementation that will supersede
+the version included in your C library. Since proper memory allocation is
+critical, you may choose to opt out from this specific implementation and
+rely on the (hopefully) more thoroughly tested version in the C library.
+
+If you change your mind later, you can always re-run this configuration
+script and recompile $package from scratch.
+
+EOM
+rp="Do you wish to attempt to use the malloc() that comes with $package?"
+. ./myread
+usemymalloc="$ans"
+case "$ans" in
+y*|true)
+ usemymalloc='y'
+ mallocsrc='malloc.c'
+ mallocobj="malloc$_o"
+ d_mymalloc="$define"
+?X: Maybe libs.U should be dependent on mallocsrc.U, but then
+?X: most packages that use dist probably don't supply their own
+?X: malloc, so this is probably an o.k. compromise
+ case "$libs" in
+ *-lmalloc*)
+ : Remove malloc from list of libraries to use
+ echo "Removing unneeded -lmalloc from library list" >&4
+ set `echo X $libs | $sed -e 's/-lmalloc / /' -e 's/-lmalloc$//'`
+ shift
+ libs="$*"
+ echo "libs = $libs" >&4
+ ;;
+ esac
+ ;;
+*)
+ usemymalloc='n'
+ mallocsrc=''
+ mallocobj=''
+ d_mymalloc="$undef"
+ ;;
+esac
+
+@end
+@if MALLOCPTRTYPE || Malloc_t || Free_t
+: compute the return types of malloc and free
+echo " "
+$cat >malloc.c <<END
+#$i_malloc I_MALLOC
+#$i_stdlib I_STDLIB
+#include <stdio.h>
+#include <sys/types.h>
+#ifdef I_MALLOC
+#include <malloc.h>
+#endif
+#ifdef I_STDLIB
+#include <stdlib.h>
+#endif
+#ifdef TRY_MALLOC
+void *malloc();
+#endif
+#ifdef TRY_FREE
+void free();
+#endif
+END
+@if MALLOCPTRTYPE || Malloc_t
+case "$malloctype" in
+'')
+ if $cc $ccflags -c -DTRY_MALLOC malloc.c >/dev/null 2>&1; then
+ malloctype='void *'
+ else
+ malloctype='char *'
+ fi
+ ;;
+esac
+echo "Your system wants malloc to return '$malloctype', it would seem." >&4
+@end
+
+@if Free_t
+case "$freetype" in
+'')
+ if $cc $ccflags -c -DTRY_FREE malloc.c >/dev/null 2>&1; then
+ freetype='void'
+ else
+ freetype='int'
+ fi
+ ;;
+esac
+echo "Your system uses $freetype free(), it would seem." >&4
+@end
+$rm -f malloc.[co]
+@end
diff --git a/mcon/U/man1dir.U b/mcon/U/man1dir.U
new file mode 100644
index 0000000..b503690
--- /dev/null
+++ b/mcon/U/man1dir.U
@@ -0,0 +1,147 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1996, Andy Dougherty
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: man1dir.U,v $
+?RCS: Revision 3.0.1.1 1997/02/28 16:10:29 ram
+?RCS: patch61: created
+?RCS:
+?X:
+?X: This was originally specific to perl5. Since perl5 has man pages that
+?X: go in both man1/ and man3/ directories, we need both man1dir
+?X: and man3dir. This unit is basically dist's mansrc.U with
+?X: man1 used instead of man everywhere.
+?X:
+?MAKE:man1dir man1direxp man1ext installman1dir: afs cat nroff Loc Oldconfig \
+ spackage test Getfile Prefixit prefixexp Prefixup sysman Myread
+?MAKE: -pick add $@ %<
+?Y:TOP
+?S:man1dir:
+?S: This variable contains the name of the directory in which manual
+?S: source pages are to be put. It is the responsibility of the
+?S: Makefile.SH to get the value of this into the proper command.
+?S: You must be prepared to do the ~name expansion yourself.
+?S:.
+?S:man1direxp:
+?S: This variable is the same as the man1dir variable, but is filename
+?S: expanded at configuration time, for convenient use in makefiles.
+?S:.
+?S:installman1dir:
+?S: This variable is really the same as man1direxp, unless you are using
+?S: AFS in which case it points to the read/write location whereas
+?S: man1direxp only points to the read-only access location. For extra
+?S: portability, you should only use this variable within your makefiles.
+?S:.
+?S:man1ext:
+?S: This variable contains the extension that the manual page should
+?S: have: one of 'n', 'l', or '1'. The Makefile must supply the '.'.
+?S: See man1dir.
+?S:.
+?T:lookpath
+: determine where manual pages go
+set man1dir man1dir none
+eval $prefixit
+$cat <<EOM
+
+$spackage has manual pages available in source form.
+EOM
+case "$nroff" in
+nroff)
+ echo "However, you don't have nroff, so they're probably useless to you."
+ case "$man1dir" in
+ '') man1dir="none";;
+ esac;;
+esac
+echo "If you don't want the manual sources installed, answer 'none'."
+case "$man1dir" in
+' ') dflt=none
+ ;;
+'')
+ lookpath="$prefixexp/man/man1 $prefixexp/man/l_man/man1"
+ lookpath="$lookpath $prefixexp/man/p_man/man1"
+ lookpath="$lookpath $prefixexp/man/u_man/man1"
+ lookpath="$lookpath $prefixexp/man/man.1"
+?X: Experience has shown people expect man1dir to be under prefix,
+?X: so we now always put it there. Users who want other behavior
+?X: can answer interactively or use a command line option.
+?X: Does user have System V-style man paths.
+ case "$sysman" in
+ */?_man*) dflt=`./loc . $prefixexp/l_man/man1 $lookpath` ;;
+ *) dflt=`./loc . $prefixexp/man/man1 $lookpath` ;;
+ esac
+ set dflt
+ eval $prefixup
+ ;;
+*) dflt="$man1dir"
+ ;;
+esac
+echo " "
+fn=dn+~
+rp="Where do the main $spackage manual pages (source) go?"
+. ./getfile
+if $test "X$man1direxp" != "X$ansexp"; then
+ installman1dir=''
+fi
+man1dir="$ans"
+man1direxp="$ansexp"
+case "$man1dir" in
+'') man1dir=' '
+ installman1dir='';;
+esac
+if $afs; then
+ $cat <<EOM
+
+Since you are running AFS, I need to distinguish the directory in which
+manual pages reside from the directory in which they are installed (and from
+which they are presumably copied to the former directory by occult means).
+
+EOM
+ case "$installman1dir" in
+ '') dflt=`echo $man1direxp | sed 's#^/afs/#/afs/.#'`;;
+ *) dflt="$installman1dir";;
+ esac
+ fn=de~
+ rp='Where will man pages be installed?'
+ . ./getfile
+ installman1dir="$ans"
+else
+ installman1dir="$man1direxp"
+fi
+
+: What suffix to use on installed man pages
+
+case "$man1dir" in
+' ')
+ man1ext='0'
+ ;;
+*)
+ rp="What suffix should be used for the main $spackage man pages?"
+ case "$man1ext" in
+ '') case "$man1dir" in
+ *1) dflt=1 ;;
+ *1p) dflt=1p ;;
+ *1pm) dflt=1pm ;;
+ *l) dflt=l;;
+ *n) dflt=n;;
+ *o) dflt=o;;
+ *p) dflt=p;;
+ *C) dflt=C;;
+ *L) dflt=L;;
+ *L1) dflt=L1;;
+ *) dflt=1;;
+ esac
+ ;;
+ *) dflt="$man1ext";;
+ esac
+ . ./myread
+ man1ext="$ans"
+ ;;
+esac
+
diff --git a/mcon/U/man3dir.U b/mcon/U/man3dir.U
new file mode 100644
index 0000000..3aad1b8
--- /dev/null
+++ b/mcon/U/man3dir.U
@@ -0,0 +1,158 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1996, Andy Dougherty
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: man3dir.U,v $
+?RCS: Revision 3.0.1.1 1997/02/28 16:10:34 ram
+?RCS: patch61: created
+?RCS:
+?X:
+?X: This was originally specific to perl5. Since perl5 has man pages that
+?X: go in both man1/ and man3/ directories, we need both man1dir
+?X: and man3dir. This unit is basically dist's mansrc.U with
+?X: man3 used instead of man everywhere.
+?X: I then added various tests because perl5 has *lots* of man3
+?X: pages with long file names. -- ADO
+?X:
+?MAKE:man3dir man3direxp man3ext installman3dir: afs cat nroff Loc Oldconfig \
+ sed man1dir spackage package Getfile prefix Prefixit Prefixup \
+ d_flexfnam privlib Myread
+?MAKE: -pick add $@ %<
+?Y:TOP
+?S:man3dir:
+?S: This variable contains the name of the directory in which manual
+?S: source pages are to be put. It is the responsibility of the
+?S: Makefile.SH to get the value of this into the proper command.
+?S: You must be prepared to do the ~name expansion yourself.
+?S:.
+?S:man3direxp:
+?S: This variable is the same as the man3dir variable, but is filename
+?S: expanded at configuration time, for convenient use in makefiles.
+?S:.
+?S:installman3dir:
+?S: This variable is really the same as man3direxp, unless you are using
+?S: AFS in which case it points to the read/write location whereas
+?S: man3direxp only points to the read-only access location. For extra
+?S: portability, you should only use this variable within your makefiles.
+?S:.
+?S:man3ext:
+?S: This variable contains the extension that the manual page should
+?S: have: one of 'n', 'l', or '3'. The Makefile must supply the '.'.
+?S: See man3dir.
+?S:.
+: determine where library module manual pages go
+set man3dir man3dir none
+eval $prefixit
+$cat <<EOM
+
+$spackage has manual pages for many of the library modules.
+EOM
+
+case "$nroff" in
+nroff)
+ $cat <<'EOM'
+However, you don't have nroff, so they're probably useless to you.
+EOM
+ case "$man3dir" in
+ '') man3dir="none";;
+ esac;;
+esac
+
+case "$d_flexfnam" in
+undef)
+ $cat <<'EOM'
+However, your system can't handle the long file names like File::Basename.3.
+EOM
+ case "$man3dir" in
+ '') man3dir="none";;
+ esac;;
+esac
+
+echo "If you don't want the manual sources installed, answer 'none'."
+?X: We dont use /usr/local/man/man3 because some man programs will
+?X: only show the /usr/local/man/man3 contents, and not the system ones,
+?X: thus man less will show the perl module less.pm, but not the system
+?X: less command. We might also conflict with TCL man pages.
+?X: However, something like /opt/perl/man/man3 is fine.
+case "$man3dir" in
+'') case "$prefix" in
+ *$package*) dflt=`echo $man1dir |
+ $sed -e 's/man1/man3/g' -e 's/man\.1/man\.3/g'` ;;
+ *) dflt="$privlib/man/man3" ;;
+ esac
+ ;;
+' ') dflt=none;;
+*) dflt="$man3dir" ;;
+esac
+echo " "
+
+fn=dn+~
+rp="Where do the $package library man pages (source) go?"
+. ./getfile
+if test "X$man3direxp" != "X$ansexp"; then
+ installman3dir=''
+fi
+
+man3dir="$ans"
+man3direxp="$ansexp"
+case "$man3dir" in
+'') man3dir=' '
+ installman3dir='';;
+esac
+if $afs; then
+ $cat <<EOM
+
+Since you are running AFS, I need to distinguish the directory in which
+manual pages reside from the directory in which they are installed (and from
+which they are presumably copied to the former directory by occult means).
+
+EOM
+ case "$installman3dir" in
+ '') dflt=`echo $man3direxp | sed 's#^/afs/#/afs/.#'`;;
+ *) dflt="$installman3dir";;
+ esac
+ fn=de~
+ rp='Where will man pages be installed?'
+ . ./getfile
+ installman3dir="$ans"
+else
+ installman3dir="$man3direxp"
+fi
+
+: What suffix to use on installed man pages
+
+case "$man3dir" in
+' ')
+ man3ext='0'
+ ;;
+*)
+ rp="What suffix should be used for the $package library man pages?"
+ case "$man3ext" in
+ '') case "$man3dir" in
+ *3) dflt=3 ;;
+ *3p) dflt=3p ;;
+ *3pm) dflt=3pm ;;
+ *l) dflt=l;;
+ *n) dflt=n;;
+ *o) dflt=o;;
+ *p) dflt=p;;
+ *C) dflt=C;;
+ *L) dflt=L;;
+ *L3) dflt=L3;;
+ *) dflt=3;;
+ esac
+ ;;
+ *) dflt="$man3ext";;
+ esac
+ . ./myread
+ man3ext="$ans"
+ ;;
+esac
+
diff --git a/mcon/U/manfmt.U b/mcon/U/manfmt.U
new file mode 100644
index 0000000..aac906e
--- /dev/null
+++ b/mcon/U/manfmt.U
@@ -0,0 +1,118 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: manfmt.U,v $
+?RCS: Revision 3.0.1.5 1997/02/28 16:11:57 ram
+?RCS: patch61: don't ask for AFS when they choose to not install pages
+?RCS:
+?RCS: Revision 3.0.1.4 1995/09/25 09:16:52 ram
+?RCS: patch59: unit is now forced to the top of Configure, if possible
+?RCS:
+?RCS: Revision 3.0.1.3 1995/01/30 14:39:20 ram
+?RCS: patch49: new installmanfmt and AFS-lookup for formatted man pages
+?RCS: patch49: can now handle installation prefix changes (from WED)
+?RCS:
+?RCS: Revision 3.0.1.2 1994/08/29 16:30:31 ram
+?RCS: patch32: now uses installation prefix for default setting
+?RCS:
+?RCS: Revision 3.0.1.1 1993/09/13 16:09:22 ram
+?RCS: patch10: allows for L1 man page extension (WAD)
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:09:13 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:manfmt manfmtexp installmanfmt: Getfile Loc Oldconfig cat manext \
+ spackage Prefixit prefixexp Prefixup afs test
+?MAKE: -pick add $@ %<
+?Y:TOP
+?S:manfmt:
+?S: This variable contains the name of the directory in which formatted
+?S: manual pages are to be put. It is the responsibility of the
+?S: Makefile.SH to get the value of this into the proper command. Note
+?S: that you may have to do ~name substitution. Use manfmtexp otherwise.
+?S:.
+?S:manfmtexp:
+?S: This is the same as the manfmt variable, but is filename expanded
+?S: at configuration time, for programs not willing to deal with it at
+?S: run-time.
+?S:.
+?S:installmanfmt:
+?S: This variable is really the same as manfmtexp, unless you are using
+?S: AFS in which case it points to the read/write location whereas
+?S: mansrcexp only points to the read-only access location. For extra
+?S: portability, you should only use this variable within your makefiles.
+?S:.
+?LINT:change manext
+?T:lookpath
+: determine where manual pages go
+set manfmt manfmt
+eval $prefixit
+$cat <<EOM
+
+$spackage has pre-formatted manual pages. If you don't want these installed,
+answer 'none' to the next question.
+
+EOM
+case "$manfmt" in
+'')
+ lookpath="$prefixexp/catman/man1 $prefixexp/man/cat1"
+ lookpath="$lookpath $prefixexp/catman/u_man/man1"
+ lookpath="$lookpath $prefixexp/catman/l_man/man1"
+ lookpath="$lookpath $prefixexp/catman/cat1 /usr/catman/local/man1"
+ lookpath="$lookpath /usr/catman/manl /usr/man/cat1"
+ lookpath="$lookpath /usr/catman/mann /usr/catman/l_man/man1"
+ lookpath="$lookpath /usr/catman/u_man/man1 /usr/catman/man1"
+ dflt=`./loc . none $lookpath`
+ set dflt
+ eval $prefixup
+ ;;
+*) dflt="$manfmt"
+ ;;
+esac
+fn=dn~
+rp='Where do pre-formatted manual pages go?'
+. ./getfile
+if test "X$manfmtexp" != "X$ansexp"; then
+ installmanfmt=''
+fi
+manfmt="$ans"
+manfmtexp="$ansexp"
+if $afs && $test "$manfmt"; then
+ $cat <<EOM
+
+Since you are running AFS, I need to distinguish the directory in which
+manual pages reside from the directory in which they are installed (and from
+which they are presumably copied to the former directory by occult means).
+
+EOM
+ case "$installmanfmt" in
+ '') dflt=`echo $manfmtexp | sed 's#^/afs/#/afs/.#'`;;
+ *) dflt="$installmanfmt";;
+ esac
+ fn=de~
+ rp='Where will pre-formatted man pages be installed?'
+ . ./getfile
+ installmanfmt="$ans"
+else
+ installmanfmt="$manfmtexp"
+fi
+
+case "$manfmt" in
+'') manext='0';;
+*l) manext=l;;
+*n) manext=n;;
+*o) manext=l;;
+*p) manext=n;;
+*C) manext=C;;
+*L) manext=L;;
+*L1) manext=L1;;
+*) manext=1;;
+esac
+
diff --git a/mcon/U/mansrc.U b/mcon/U/mansrc.U
new file mode 100644
index 0000000..bfca6a1
--- /dev/null
+++ b/mcon/U/mansrc.U
@@ -0,0 +1,150 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: mansrc.U,v $
+?RCS: Revision 3.0.1.9 1997/02/28 16:12:03 ram
+?RCS: patch61: don't ask for AFS when they choose to not install pages
+?RCS:
+?RCS: Revision 3.0.1.8 1995/09/25 09:16:58 ram
+?RCS: patch59: unit is now forced to the top of Configure, if possible
+?RCS:
+?RCS: Revision 3.0.1.7 1995/02/15 14:15:31 ram
+?RCS: patch51: was mistakenly duplicating /usr/local/man/man1 (ADO)
+?RCS: patch51: added /opt/man/man1 to the lookpath (ADO)
+?RCS:
+?RCS: Revision 3.0.1.6 1995/01/30 14:39:34 ram
+?RCS: patch49: can now handle installation prefix changes (from WED)
+?RCS:
+?RCS: Revision 3.0.1.5 1995/01/11 15:32:25 ram
+?RCS: patch45: can now use Loc variables since path stripping is deferred
+?RCS:
+?RCS: Revision 3.0.1.4 1994/08/29 16:30:38 ram
+?RCS: patch32: now uses installation prefix for default setting
+?RCS:
+?RCS: Revision 3.0.1.3 1994/05/06 15:11:10 ram
+?RCS: patch23: added lint hint, assuring that nroff is used
+?RCS:
+?RCS: Revision 3.0.1.2 1994/01/24 14:14:39 ram
+?RCS: patch16: now uses _nroff in case user asked for portability
+?RCS:
+?RCS: Revision 3.0.1.1 1993/09/13 16:09:31 ram
+?RCS: patch10: allows for L1 man page extension (WAD)
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:09:14 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:mansrc mansrcexp manext installmansrc: afs cat nroff Loc Oldconfig \
+ sysman spackage test Getfile Prefixit prefixexp Prefixup
+?MAKE: -pick add $@ %<
+?Y:TOP
+?S:mansrc:
+?S: This variable contains the name of the directory in which manual
+?S: source pages are to be put. It is the responsibility of the
+?S: Makefile.SH to get the value of this into the proper command.
+?S: You must be prepared to do the ~name expansion yourself.
+?S:.
+?S:mansrcexp:
+?S: This variable is the same as the mansrc variable, but is filename
+?S: expanded at configuration time, for convenient use in makefiles.
+?S:.
+?S:installmansrc:
+?S: This variable is really the same as mansrcexp, unless you are using
+?S: AFS in which case it points to the read/write location whereas
+?S: mansrcexp only points to the read-only access location. For extra
+?S: portability, you should only use this variable within your makefiles.
+?S:.
+?S:manext:
+?S: This variable contains the extension that the manual page should
+?S: have: one of 'n', 'l', or '1'. The Makefile must supply the '.'.
+?S: See mansrc.
+?S:.
+?T:lookpath
+: determine where manual pages go
+set mansrc mansrc none
+eval $prefixit
+$cat <<EOM
+
+$spackage has manual pages available in source form.
+EOM
+case "$nroff" in
+nroff)
+ echo "However, you don't have nroff, so they're probably useless to you."
+ case "$mansrc" in
+ '') mansrc="none";;
+ esac;;
+esac
+echo "If you don't want the manual sources installed, answer 'none'."
+case "$mansrc" in
+'')
+ lookpath="$prefixexp/share/man/man1 $prefixexp/man/man1"
+ lookpath="$lookpath $prefixexp/man/u_man/man1 $prefixexp/man/l_man/man1"
+ lookpath="$lookpath /usr/local/man/man1 /opt/man/man1 /usr/man/manl"
+ lookpath="$lookpath /usr/share/man/man1 /usr/local/share/man/man1"
+ lookpath="$lookpath /usr/man/local/man1 /usr/man/l_man/man1"
+ lookpath="$lookpath /usr/local/man/u_man/man1 /usr/local/man/l_man/man1"
+ lookpath="$lookpath /usr/man/man.L"
+ mansrc=`./loc . $prefixexp/man/man1 $lookpath`
+ if $test -d "$mansrc"; then
+ dflt="$mansrc"
+ else
+ dflt="$sysman"
+ fi
+ set dflt
+ eval $prefixup
+ ;;
+' ') dflt=none;;
+*) dflt="$mansrc"
+ ;;
+esac
+echo " "
+fn=dn~
+rp='Where do the manual pages (source) go?'
+. ./getfile
+if test "X$mansrcexp" != "X$ansexp"; then
+ installmansrc=''
+fi
+mansrc="$ans"
+mansrcexp="$ansexp"
+case "$mansrc" in
+'') mansrc=' '
+ installmansrc='';;
+esac
+if $afs && $test "$mansrc"; then
+ $cat <<EOM
+
+Since you are running AFS, I need to distinguish the directory in which
+manual pages reside from the directory in which they are installed (and from
+which they are presumably copied to the former directory by occult means).
+
+EOM
+ case "$installmansrc" in
+ '') dflt=`echo $mansrcexp | sed 's#^/afs/#/afs/.#'`;;
+ *) dflt="$installmansrc";;
+ esac
+ fn=de~
+ rp='Where will man pages be installed?'
+ . ./getfile
+ installmansrc="$ans"
+else
+ installmansrc="$mansrcexp"
+fi
+
+case "$mansrc" in
+' ') manext='0';;
+*l) manext=l;;
+*n) manext=n;;
+*o) manext=l;;
+*p) manext=n;;
+*C) manext=C;;
+*L) manext=L;;
+*L1) manext=L1;;
+*) manext=1;;
+esac
+
diff --git a/mcon/U/mboxchar.U b/mcon/U/mboxchar.U
new file mode 100644
index 0000000..c837b1b
--- /dev/null
+++ b/mcon/U/mboxchar.U
@@ -0,0 +1,70 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: mboxchar.U,v $
+?RCS: Revision 3.0.1.2 1995/07/25 14:13:12 ram
+?RCS: patch56: ensure ctrl-A characters are visible in prompt (WED)
+?RCS:
+?RCS: Revision 3.0.1.1 1994/05/06 15:11:22 ram
+?RCS: patch23: added support for MMDF mailboxes (WED)
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:09:15 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:mboxchar: cat package shsharp Myread Oldconfig
+?MAKE: -pick add $@ %<
+?S:mboxchar:
+?S: This variable contains the eventual value of the MBOXCHAR symbol,
+?S: which is how a C program can identify a file as a mailbox.
+?S:.
+?C:MBOXCHAR:
+?C: This symbol contains a character which will match the beginning
+?C: of a mailbox file.
+?C:.
+?H:#define MBOXCHAR '$mboxchar' /**/
+?H:.
+?T:CTRLA
+?INIT:CTRLA=`echo a | tr a '\001'`
+: determine how to determine when a file is a mailbox
+case "$mboxchar" in
+'') dflt=F;;
+?X: The following ^A is two-chars to ensure it will print out -- WED
+"$CTRLA") dflt='^A';;
+*) dflt="$mboxchar";;
+esac
+$cat <<EOM
+
+In saving articles, $package wants to differentiate between saving to
+mailbox format files and normal files. It does this by examining the
+first character of the file in question. On most systems the first line
+starts with "From ...", so the first character is an F. Other systems
+use magic cookies like control codes between articles, so one of those
+would be first. For example, MMDF messages are separated with lines of
+four control-A's (you may specify one as ^A, i.e. caret A).
+
+EOM
+rp="What's the first character of a mailbox file?"
+. ./myread
+mboxchar="$ans"
+case "$mboxchar" in
+'F') ;;
+"$CTRLA") ;;
+'^A'|'^a') mboxchar="$CTRLA";;
+*) cat <<'EOM'
+
+You will need to edit the shell script mbox.saver to properly append an
+article to a mailbox. The arguments to the script are documented in
+EOM
+ case "$shsharp" in
+ false) echo "comments in mbox.saver.std.";;
+ true) echo "comments in the shell script itself.";;
+ esac
+esac
+
diff --git a/mcon/U/mkdep.U b/mcon/U/mkdep.U
new file mode 100644
index 0000000..1bfd974
--- /dev/null
+++ b/mcon/U/mkdep.U
@@ -0,0 +1,271 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: mkdep.U,v $
+?RCS: Revision 3.0.1.4 1997/02/28 16:13:07 ram
+?RCS: patch61: replaced .o with $_o all over the place
+?RCS:
+?RCS: Revision 3.0.1.3 1994/10/29 16:25:02 ram
+?RCS: patch36: added ?F: line for metalint file checking
+?RCS:
+?RCS: Revision 3.0.1.2 1994/01/24 14:15:12 ram
+?RCS: patch16: cppflags is now an optional dependency
+?RCS:
+?RCS: Revision 3.0.1.1 1993/12/15 08:22:39 ram
+?RCS: patch15: force zero exit status in all mkdep scripts
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:09:16 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: This unit generates the script 'mkdep' in the top-level directory.
+?X: It is up to the makefile to use it for automatic dependencies
+?X: generation (usage: 'mkdep [cppflags] -- *.c').
+?X:
+?MAKE:mkdep: spitshell startsh cpp +cppflags grep contains rm sed sort uniq \
+ Getfile Oldconfig eunicefix cat +cc cppminus test pkgsrc _o
+?MAKE: -pick add $@ %<
+?S:mkdep:
+?S: This variable holds the name of a command to generate makefile
+?S: dependencies on the standard output. It is the pathname of the
+?S: generated mkdep script.
+?S:.
+?F:mkdep
+?T:IFS arg flags takeflags srcfile toplev filebase inc dir files file dep c
+?T:tmpdir
+?LINT:extern TMPDIR
+: find out how to generate dependencies
+echo " "
+echo "Checking how to generate makefile dependencies on your machine..." >&4
+?X: We are in the UU directory
+toplev=`cd ..;pwd`
+$cat >dep.c <<'EOCP'
+#include "dep.h"
+EOCP
+?X: Empty dep.h causes RIOS to barf
+$cat >dep.h <<'EOCP'
+
+EOCP
+takeflags='flags=""
+case "$@" in
+*--*)
+ for arg
+ do
+ shift
+ case "$arg" in
+ --) break;;
+ *) flags="$flags $arg";;
+ esac
+ done;;
+esac'
+case "$mkdep" in
+'')
+ ;;
+*)
+ if test -f "$mkdep" &&
+ $mkdep dep.c >dep.out 2>/dev/null &&
+ $contains "dep$_o:.*dep\.h" dep.out >/dev/null 2>&1
+ then
+ echo "$mkdep works."
+?X: If they copied a config.sh from some other place, they'll have a working
+?X: mkdep script probably, but not located at the top of the sources. And
+?X: the Makefiles generated by jmake expect an mkdep script in the top dir.
+ case "$mkdep" in
+ "$pkgsrc/mkdep");;
+ *) echo "(copying it to $pkgsrc)"
+ cp $mkdep $pkgsrc/mkdep 2>/dev/null
+ if $pkgsrc/mkdep dep.c >dep.out 2>/dev/null &&
+ $contains "dep$_o:.*dep\.h" dep.out >/dev/null 2>&1; then
+ mkdep=$pkgsrc/mkdep
+ else
+ echo "Hmm... The copy failed or something... Guessing again..."
+ mkdep=
+ fi
+ ;;
+ esac
+ else
+ mkdep=
+ fi
+esac
+
+case "$mkdep" in
+'')
+?X: have to figure something out: Try cpp
+?X: have to pass source names one by one to cpp...
+ $spitshell > ../mkdep <<EOM
+$startsh
+$takeflags
+for srcfile
+do
+ $cpp -M $cppflags \$flags \$srcfile 2>/dev/null
+done
+exit 0
+EOM
+ mkdep=$toplev/mkdep
+ chmod +x $mkdep
+ $eunicefix $mkdep
+ if $mkdep dep.c >dep.out 2>/dev/null &&
+ $contains "dep$_o:.*dep\.h" dep.out >/dev/null 2>&1
+ then
+ echo "Looks like we can use $cpp -M."
+ else
+ mkdep=
+ fi
+ ;;
+esac
+
+case "$mkdep" in
+'')
+?X: have to figure something out: on NeXT, use cc -MM
+?X: have to pass source names one by one to cc...
+ $spitshell > ../mkdep <<EOM
+$startsh
+$takeflags
+for srcfile
+do
+ $cc -MM $cppflags \$flags \$srcfile 2>/dev/null
+done
+exit 0
+EOM
+ mkdep=$toplev/mkdep
+ chmod +x $mkdep
+ $eunicefix $mkdep
+ if $mkdep dep.c >dep.out 2>/dev/null &&
+ $contains "dep$_o:.*dep\.h" dep.out >/dev/null 2>&1
+ then
+ echo "Looks like we can use $cc -MM."
+ else
+ mkdep=
+ fi
+ ;;
+esac
+
+case "$mkdep" in
+'')
+?X: still no luck -- try something fancier.
+ $spitshell >../mkdep <<EOS
+$startsh
+$takeflags
+for srcfile
+do
+ case "\$srcfile" in
+ *.c) c='.c';;
+ *.y) c='.y';;
+ *.l) c='.l';;
+ esac
+ filebase=\`basename \$srcfile \$c\`
+ <\$srcfile $cpp $cppminus $cppflags \$flags 2>/dev/null | \\
+ $sed -e '/^# *[0-9]/!d' \\
+ -e 's/^.*"\(.*\)".*\$/'\$filebase'$_o: \1/' \\
+ -e 's|: \./|: |' \\
+ -e 's|: *$|: '\$srcfile'|' | \\
+ $grep -v '^#' | $sort | $uniq
+done
+exit 0
+EOS
+ mkdep=$toplev/mkdep
+ chmod +x $mkdep
+ $eunicefix $mkdep
+ if $mkdep dep.c >dep.out 2>/dev/null &&
+ $contains "dep$_o:.*dep\.h" dep.out >/dev/null 2>&1
+ then
+ echo "A shell script using $cpp does the trick."
+ else
+ echo "$cpp doesn't seem to be any use at all."
+ $spitshell >../mkdep <<EOS
+$startsh
+$takeflags
+files="\$@"
+set X \$flags
+shift
+inc='.'
+while test \$# -gt 0
+do
+ case "\$1" in
+ -I)
+ shift
+ inc="\$inc:\$1"
+ ;;
+ -I*)
+ dir=\`echo \$1 | sed -e 's/^-I//'\`
+ inc="\$inc:\$dir"
+ ;;
+ esac
+ shift
+done
+set X \$files
+shift
+tmpdir="${TMPDIR:-/tmp}"
+trap "$rm -f "$tmpdir/mkdep\$\$"; exit 1" 1 2 3 15
+for srcfile
+do
+ case "\$srcfile" in
+ *.c) c='.c';;
+ *.y) c='.y';;
+ *.l) c='.l';;
+ esac
+ filebase=\`basename \$srcfile \$c\`
+ echo \$filebase$_o: \$srcfile
+ $grep '^#[ ]*include' \$srcfile /dev/null | \
+ $sed -n -e 's/#[ ]*include[ ]*//' \\
+ -e '/<\(.*\)>/ d' \\
+ -e 's/:[^"]*"\([^"]*\)".*/: \1/' \\
+ -e "s/\\.c:/$_o:/p" > "$tmpdir/mkdep\$\$"
+?X: Deal with directories specified via -I requests to locate files
+ IFS=': '
+ while read file dep; do
+ for dir in \$inc; do
+ if $test -f "\$dir/\$dep"; then
+ dep="\$dir/\$dep"
+ break
+ fi
+ done
+ echo "\$file: \$dep" | $sed -e 's,: \./,: ,'
+ done <"$tmpdir/mkdep\$\$"
+ IFS=' '
+ $rm -f "$tmpdir/mkdep\$\$"
+done
+exit 0
+EOS
+ mkdep=$toplev/mkdep
+ chmod +x $mkdep
+ $eunicefix $mkdep
+ if $mkdep dep.c >dep.out 2>/dev/null &&
+ $contains "dep$_o:.*dep\.h" dep.out >/dev/null 2>&1
+ then
+ cat << EOM
+
+I can use a script with grep instead, but it will make some incorrect
+dependencies, since it doesn't understand about conditional compilation.
+Moreover, some dependencies may be missing, because scanning won't be
+a recursive process.
+If you have a program which generates makefile dependencies, you may want
+to use it. If not, you can use the script and edit the Makefile by hand
+if you need to.
+EOM
+ else
+ mkdep=
+ cat << EOM
+
+I can't seem to generate makefile dependencies at all! Perhaps you have a
+program that does? If you don't, you might look at the mkdep script to
+see if you can create one which works.
+EOM
+ fi
+ fi
+esac
+echo " "
+dflt="$mkdep"
+fn=f~/
+rp="Name of program to make makefile dependencies?"
+. ./getfile
+mkdep="$ans"
+$rm -f dep.c dep.h dep$_o dep.out
+
diff --git a/mcon/U/models.U b/mcon/U/models.U
new file mode 100644
index 0000000..77f955d
--- /dev/null
+++ b/mcon/U/models.U
@@ -0,0 +1,214 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: models.U,v $
+?RCS: Revision 3.0.1.2 1997/02/28 16:13:17 ram
+?RCS: patch61: added ?F: metalint hint
+?RCS:
+?RCS: Revision 3.0.1.1 1993/08/25 14:02:39 ram
+?RCS: patch6: added default for large
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:09:17 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:models split small medium large huge: test cat Myread sysman Oldconfig \
+ Loc Warn contains rm
+?MAKE: -pick add $@ %<
+?S:models:
+?S: This variable contains the list of memory models supported by this
+?S: system. Possible component values are none, split, unsplit, small,
+?S: medium, large, and huge. The component values are space separated.
+?S:.
+?S:split:
+?S: This variable contains a flag which will tell the C compiler and loader
+?S: to produce a program that will run in separate I and D space, for those
+?S: machines that support separation of instruction and data space. It is
+?S: up to the Makefile to use this.
+?S:.
+?S:small:
+?S: This variable contains a flag which will tell the C compiler and loader
+?S: to produce a program running with a small memory model. It is up to
+?S: the Makefile to use this.
+?S:.
+?S:medium:
+?S: This variable contains a flag which will tell the C compiler and loader
+?S: to produce a program running with a medium memory model. If the
+?S: medium model is not supported, contains the flag to produce large
+?S: model programs. It is up to the Makefile to use this.
+?S:.
+?S:large:
+?S: This variable contains a flag which will tell the C compiler and loader
+?S: to produce a program running with a large memory model. It is up to
+?S: the Makefile to use this.
+?S:.
+?S:huge:
+?S: This variable contains a flag which will tell the C compiler and loader
+?S: to produce a program running with a huge memory model. If the
+?S: huge model is not supported, contains the flag to produce large
+?S: model programs. It is up to the Makefile to use this.
+?S:.
+?T:unsplit tans modelcc
+?F:!pdp11
+?D:large=''
+?LINT:extern cc
+: see what memory models we can support
+case "$models" in
+'')
+?X: We may not use Cppsym or we get a circular dependency through cc.
+?X: But this should work regardless of which cc we eventually use.
+ $cat >pdp11.c <<'EOP'
+int main(void) {
+#ifdef pdp11
+ return 0;
+#else
+ return 1;
+#endif
+}
+EOP
+?X: Run cc in a subshell in case they don't have a 'cc' command.
+?X: Presumably they do have gcc or something.
+ case "$cc" in
+ '') modelcc="$cc" ;;
+ *) modelcc="cc" ;;
+ esac
+ ( $modelcc -o pdp11 pdp11.c ) >/dev/null 2>&1
+ if $test -f pdp11 && ./pdp11 2>/dev/null; then
+ dflt='unsplit split'
+ else
+ tans=`./loc . X /lib/small /lib/large /usr/lib/small /usr/lib/large /lib/medium /usr/lib/medium /lib/huge`
+ case "$tans" in
+ X) dflt='none';;
+ *) if $test -d /lib/small || $test -d /usr/lib/small; then
+ dflt='small'
+ else
+ dflt=''
+ fi
+ if $test -d /lib/medium || $test -d /usr/lib/medium; then
+ dflt="$dflt medium"
+ fi
+ if $test -d /lib/large || $test -d /usr/lib/large; then
+ dflt="$dflt large"
+ fi
+ if $test -d /lib/huge || $test -d /usr/lib/huge; then
+ dflt="$dflt huge"
+ fi
+ esac
+ fi;;
+*) dflt="$models";;
+esac
+$cat <<EOM
+
+Some systems have different model sizes. On most systems they are called
+small, medium, large, and huge. On the PDP11 they are called unsplit and
+split. If your system doesn't support different memory models, say "none".
+If you wish to force everything to one memory model, say "none" here and
+put the appropriate flags later when it asks you for other cc and ld flags.
+Venix systems may wish to put "none" and let the compiler figure things out.
+(In the following question multiple model names should be space separated.)
+
+The default for most systems is "none".
+
+EOM
+rp="Which memory models are supported?"
+. ./myread
+models="$ans"
+
+case "$models" in
+none)
+ small=''
+ medium=''
+ large=''
+ huge=''
+ unsplit=''
+ split=''
+ ;;
+*split)
+ case "$split" in
+ '') if $contains '\-i' $sysman/ld.1 >/dev/null 2>&1 || \
+ $contains '\-i' $sysman/cc.1 >/dev/null 2>&1; then
+ dflt='-i'
+ else
+ dflt='none'
+ fi;;
+ *) dflt="$split";;
+ esac
+ rp="What flag indicates separate I and D space?"
+ . ./myread
+ tans="$ans"
+ case "$tans" in
+ none) tans='';;
+ esac
+ split="$tans"
+ unsplit='';;
+*large*|*small*|*medium*|*huge*)
+ case "$models" in
+ *large*)
+ case "$large" in
+ '') dflt='-Ml';;
+ *) dflt="$large";;
+ esac
+ rp="What flag indicates large model?"
+ . ./myread
+ tans="$ans"
+ case "$tans" in
+ none) tans='';
+ esac
+ large="$tans";;
+ *) large='';;
+ esac
+ case "$models" in
+ *huge*) case "$huge" in
+ '') dflt='-Mh';;
+ *) dflt="$huge";;
+ esac
+ rp="What flag indicates huge model?"
+ . ./myread
+ tans="$ans"
+ case "$tans" in
+ none) tans='';
+ esac
+ huge="$tans";;
+ *) huge="$large";;
+ esac
+ case "$models" in
+ *medium*) case "$medium" in
+ '') dflt='-Mm';;
+ *) dflt="$medium";;
+ esac
+ rp="What flag indicates medium model?"
+ . ./myread
+ tans="$ans"
+ case "$tans" in
+ none) tans='';
+ esac
+ medium="$tans";;
+ *) medium="$large";;
+ esac
+ case "$models" in
+ *small*) case "$small" in
+ '') dflt='none';;
+ *) dflt="$small";;
+ esac
+ rp="What flag indicates small model?"
+ . ./myread
+ tans="$ans"
+ case "$tans" in
+ none) tans='';
+ esac
+ small="$tans";;
+ *) small='';;
+ esac
+ ;;
+*)
+ ./warn "Unrecognized memory models--you may have to edit Makefile.SH" 4>&4
+ ;;
+esac
+$rm -f pdp11.* pdp11
+
diff --git a/mcon/U/modetype.U b/mcon/U/modetype.U
new file mode 100644
index 0000000..f048978
--- /dev/null
+++ b/mcon/U/modetype.U
@@ -0,0 +1,40 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu>
+?RCS:
+?RCS: $Log: modetype.U,v $
+?RCS: Revision 3.0.1.1 1994/10/29 16:25:07 ram
+?RCS: patch36: created by ADO
+?RCS:
+?MAKE:modetype: Myread Typedef
+?MAKE: -pick add $@ %<
+?S:modetype:
+?S: This variable defines modetype to be something like mode_t,
+?S: int, unsigned short, or whatever type is used to declare file
+?S: modes for system calls.
+?S:.
+?C:Mode_t:
+?C: This symbol holds the type used to declare file modes
+?C: for systems calls. It is usually mode_t, but may be
+?C: int or unsigned short. It may be necessary to include <sys/types.h>
+?C: to get any typedef'ed information.
+?C:.
+?H:#define Mode_t $modetype /* file mode parameter for system calls */
+?H:.
+: see what type is used for mode_t
+set mode_t modetype int stdio.h sys/types.h
+eval $typedef
+dflt="$modetype"
+echo " "
+rp="What type is used for file modes?"
+. ./myread
+modetype="$ans"
+
diff --git a/mcon/U/msgmerge_update.U b/mcon/U/msgmerge_update.U
new file mode 100644
index 0000000..9d7c293
--- /dev/null
+++ b/mcon/U/msgmerge_update.U
@@ -0,0 +1,29 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 2006, Christian Biere
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:msgmerge_update: msgmerge grep contains rm
+?MAKE: -pick add $@ %<
+?S:msgmerge_update:
+?S: The command "msgmerge --update" if supported on your system, else ":".
+?S:.
+?F:!msghelp
+: check whether msgmerge supports --update
+echo " "
+echo "Let's see whether your $msgmerge supports the --update flag..." >&4
+$msgmerge --help | $grep -- --update >msghelp
+if $contains update msghelp >/dev/null 2>&1; then
+ echo "Good, it does."
+ msgmerge_update="$msgmerge --update"
+else
+ echo "Sorry, it does not: we'll try to do without it."
+ msgmerge_update=":"
+fi
+$rm -f msghelp
+
diff --git a/mcon/U/myhostname.U b/mcon/U/myhostname.U
new file mode 100644
index 0000000..abbf351
--- /dev/null
+++ b/mcon/U/myhostname.U
@@ -0,0 +1,284 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: myhostname.U,v $
+?RCS: Revision 3.0.1.3 1997/02/28 16:15:55 ram
+?RCS: patch61: improved hostname lookup by using ypmatch when NIS is used
+?RCS:
+?RCS: Revision 3.0.1.2 1994/10/29 16:25:43 ram
+?RCS: patch36: call ./xenix explicitly instead of relying on PATH
+?RCS: patch36: now uses new Tr unit to convert to/from lowercase
+?RCS:
+?RCS: Revision 3.0.1.1 1994/06/20 07:06:20 ram
+?RCS: patch30: now a little more clever for domain name guessing
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:09:18 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:myhostname phostname mydomain: contains sed test Myread Oldconfig \
+ Guess Loc awk echo sort uniq +usrinc rm hostcat Tr osname
+?MAKE: -pick add $@ %<
+?S:myhostname (hostname):
+?S: This variable contains the eventual value of the MYHOSTNAME symbol,
+?S: which is the name of the host the program is going to run on.
+?S: The domain is not kept with hostname, but must be gotten from mydomain.
+?S: The dot comes with mydomain, and need not be supplied by the program.
+?S:.
+?S:mydomain:
+?S: This variable contains the eventual value of the MYDOMAIN symbol,
+?S: which is the domain of the host the program is going to run on.
+?S: The domain must be appended to myhostname to form a complete host name.
+?S: The dot comes with mydomain, and need not be supplied by the program.
+?S:.
+?S:phostname:
+?S: This variable contains the eventual value of the PHOSTNAME symbol,
+?S: which is a command that can be fed to popen() to get the host name.
+?S: The program should probably not presume that the domain is or isn't
+?S: there already.
+?S:.
+?C:MYHOSTNAME (HOSTNAME):
+?C: This symbol contains name of the host the program is going to run on.
+?C: The domain is not kept with hostname, but must be gotten from MYDOMAIN.
+?C: The dot comes with MYDOMAIN, and need not be supplied by the program.
+?C: If gethostname() or uname() exist, MYHOSTNAME may be ignored. If MYDOMAIN
+?C: is not used, MYHOSTNAME will hold the name derived from PHOSTNAME.
+?C:.
+?C:MYDOMAIN:
+?C: This symbol contains the domain of the host the program is going to
+?C: run on. The domain must be appended to HOSTNAME to form a complete
+?C: host name. The dot comes with MYDOMAIN, and need not be supplied by
+?C: the program. If the host name is derived from PHOSTNAME, the domain
+?C: may or may not already be there, and the program should check.
+?C:.
+?H:#define MYHOSTNAME "$myhostname" /**/
+?H:#define MYDOMAIN "$mydomain" /**/
+?H:.
+?T:cont i tans tmp_re file
+: now get the host name
+echo " "
+echo "Figuring out host name..." >&4
+case "$myhostname" in
+'') cont=true
+ echo 'Maybe "hostname" will work...'
+ if tans=`sh -c hostname 2>&1` ; then
+ myhostname=$tans
+ phostname=hostname
+ cont=''
+ fi
+ ;;
+*) cont='';;
+esac
+if $test "$cont"; then
+ if ./xenix; then
+ echo 'Oh, dear. Maybe "/etc/systemid" is the key...'
+ if tans=`cat /etc/systemid 2>&1` ; then
+ myhostname=$tans
+ phostname='cat /etc/systemid'
+ echo "Whadyaknow. Xenix always was a bit strange..."
+ cont=''
+ fi
+ elif $test -r /etc/systemid; then
+ echo "(What is a non-Xenix system doing with /etc/systemid?)"
+ fi
+fi
+if $test "$cont"; then
+ echo 'No, maybe "uuname -l" will work...'
+ if tans=`sh -c 'uuname -l' 2>&1` ; then
+ myhostname=$tans
+ phostname='uuname -l'
+ else
+ echo 'Strange. Maybe "uname -n" will work...'
+ if tans=`sh -c 'uname -n' 2>&1` ; then
+ myhostname=$tans
+ phostname='uname -n'
+ else
+ echo 'Oh well, maybe I can mine it out of whoami.h...'
+ if tans=`sh -c $contains' sysname $usrinc/whoami.h' 2>&1` ; then
+ myhostname=`echo "$tans" | $sed 's/^.*"\(.*\)"/\1/'`
+ phostname="sed -n -e '"'/sysname/s/^.*\"\\(.*\\)\"/\1/{'"' -e p -e q -e '}' <$usrinc/whoami.h"
+ else
+ case "$myhostname" in
+ '') echo "Does this machine have an identity crisis or something?"
+ phostname='';;
+ *)
+ echo "Well, you said $myhostname before..."
+ phostname='echo $myhostname';;
+ esac
+ fi
+ fi
+ fi
+fi
+case "$myhostname" in
+'') myhostname=noname ;;
+esac
+: you do not want to know about this
+set $myhostname
+myhostname=$1
+
+: verify guess
+if $test "$myhostname" ; then
+ dflt=y
+ rp='Your host name appears to be "'$myhostname'".'" Right?"
+ . ./myread
+ case "$ans" in
+ y*) ;;
+ *) myhostname='';;
+ esac
+fi
+
+: bad guess or no guess
+while $test "X$myhostname" = X ; do
+ dflt=''
+ rp="Please type the (one word) name of your host:"
+ . ./myread
+ myhostname="$ans"
+done
+
+: translate upper to lower if necessary
+case "$myhostname" in
+*[A-Z]*)
+ echo "(Normalizing case in your host name)"
+ myhostname=`echo $myhostname | ./tr '[A-Z]' '[a-z]'`
+ ;;
+esac
+
+?X: Do not ask for domain name if this is not used later on. In that
+?X: case, the hostname may keep its domain name, but it doesn't matter.
+@if MYDOMAIN || mydomain
+case "$myhostname" in
+*.*)
+ dflt=`expr "X$myhostname" : "X[^.]*\(\..*\)"`
+ myhostname=`expr "X$myhostname" : "X\([^.]*\)\."`
+ echo "(Trimming domain name from host name--host name is now $myhostname)"
+ ;;
+*) case "$mydomain" in
+ '')
+?X:
+?X: There is currently no way to say we do not want hostcat if mydomain is not
+?X: used. One way to achieve that would be to put that code in a mydomain.U
+?X: unit. However, we want to stick the sanity checks right after the domain
+?X: name computation, or if none is done, right after the hostname computation.
+?X:
+ {
+?X: If we use NIS, try ypmatch.
+ test "X$hostcat" = "Xypcat hosts" &&
+ ypmatch "$myhostname" hosts 2>/dev/null |\
+ $sed -e 's/[ ]*#.*//; s/$/ /' > hosts && \
+ $test -s hosts
+ } || {
+?X: Extract only the relevant hosts, reducing file size,
+?X: remove comments, insert trailing space for later use.
+ $hostcat | $sed -n -e "s/[ ]*#.*//; s/\$/ /
+ /[ ]$myhostname[ . ]/p" > hosts
+ }
+ tmp_re="[ . ]"
+ $test x`$awk "/[0-9].*[ ]$myhostname$tmp_re/ { sum++ }
+ END { print sum }" hosts` = x1 || tmp_re="[ ]"
+ dflt=.`$awk \
+ "/[0-9].*[ ]$myhostname$tmp_re/ {for(i=2; i<=NF;i++) print \\\$i}" \
+ hosts | $sort | $uniq | \
+ $sed -n -e "s/$myhostname\.\([-a-zA-Z0-9_.]\)/\1/p"`
+ case `$echo X$dflt` in
+ X*\ *) echo "(Several hosts in /etc/hosts matched hostname)"
+ dflt=.
+ ;;
+?X: There is no /etc/hosts on os390
+ X.)
+ if $test -f /etc/hosts; then
+ echo "(You do not have fully-qualified names in /etc/hosts)"
+ else
+ echo "(I cannot locate a hosts database anywhere)"
+ fi
+ ;;
+ esac
+ case "$dflt" in
+ .)
+ tans=`./loc resolv.conf X /etc /usr/etc`
+ if $test -f "$tans"; then
+ echo "(Attempting domain name extraction from $tans)"
+?X: Look for either a search or a domain directive.
+ dflt=.`$sed -n -e 's/ / /g' \
+ -e 's/^search *\([^ ]*\).*/\1/p' $tans \
+ | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
+ case "$dflt" in
+ .) dflt=.`$sed -n -e 's/ / /g' \
+ -e 's/^domain *\([^ ]*\).*/\1/p' $tans \
+ | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
+ ;;
+ esac
+ fi
+ ;;
+ esac
+ case "$dflt" in
+ .) echo "(No help from resolv.conf either -- attempting clever guess)"
+ dflt=.`sh -c domainname 2>/dev/null`
+ case "$dflt" in
+ '') dflt='.';;
+ .nis.*|.yp.*|.main.*) dflt=`echo $dflt | $sed -e 's/^\.[^.]*//'`;;
+ esac
+ ;;
+ esac
+ case "$dflt$osname" in
+ .os390)
+ file="//'SYS1.TCPPARMS(TCPDATA)'"
+ echo "(Attempting domain name extraction from $file)"
+ dflt=.`awk '/^DOMAINORIGIN/ {print $2}' "$file" 2>/dev/null`
+ ;;
+ esac
+ case "$dflt" in
+ .) echo "(Lost all hope -- silly guess then)"
+ dflt='.nonet'
+ ;;
+ esac
+ $rm -f hosts
+ ;;
+ *) dflt="$mydomain";;
+ esac;;
+esac
+echo " "
+rp="What is your domain name?"
+. ./myread
+tans="$ans"
+case "$ans" in
+'') ;;
+.*) ;;
+*) tans=".$tans";;
+esac
+mydomain="$tans"
+
+: translate upper to lower if necessary
+case "$mydomain" in
+*[A-Z]*)
+ echo "(Normalizing case in your domain name)"
+ mydomain=`echo $mydomain | ./tr '[A-Z]' '[a-z]'`
+ ;;
+esac
+
+@end
+: a little sanity check here
+case "$phostname" in
+'') ;;
+*)
+ case `$phostname | ./tr '[A-Z]' '[a-z]'` in
+ $myhostname$mydomain|$myhostname) ;;
+ *)
+ case "$phostname" in
+ sed*)
+ echo "(That doesn't agree with your whoami.h file, by the way.)"
+ ;;
+ *)
+ echo "(That doesn't agree with your $phostname command, by the way.)"
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+esac
+
diff --git a/mcon/U/n.U b/mcon/U/n.U
new file mode 100644
index 0000000..373a9dc
--- /dev/null
+++ b/mcon/U/n.U
@@ -0,0 +1,45 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: n.U,v $
+?RCS: Revision 3.0 1993/08/18 12:09:19 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:n c: contains
+?MAKE: -pick add $@ %<
+?S:n:
+?S: This variable contains the -n flag if that is what causes the echo
+?S: command to suppress newline. Otherwise it is null. Correct usage is
+?S: $echo $n "prompt for a question: $c".
+?S:.
+?S:c:
+?S: This variable contains the \c string if that is what causes the echo
+?S: command to suppress newline. Otherwise it is null. Correct usage is
+?S: $echo $n "prompt for a question: $c".
+?S:.
+: first determine how to suppress newline on echo command
+echo " "
+echo "Checking echo to see how to suppress newlines..."
+(echo "hi there\c" ; echo " ") >.echotmp
+if $contains c .echotmp >/dev/null 2>&1 ; then
+ echo "...using -n."
+ n='-n'
+ c=''
+else
+ cat <<'EOM'
+...using \c
+EOM
+ n=''
+ c='\c'
+fi
+echo $n "The star should be here-->$c"
+echo '*'
+rm -f .echotmp
+
diff --git a/mcon/U/nametype.U b/mcon/U/nametype.U
new file mode 100644
index 0000000..1a82ffb
--- /dev/null
+++ b/mcon/U/nametype.U
@@ -0,0 +1,134 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: nametype.U,v $
+?RCS: Revision 3.0.1.3 1994/10/29 16:26:09 ram
+?RCS: patch36: call ./usg and ./bsd explicitly instead of relying on PATH
+?RCS:
+?RCS: Revision 3.0.1.2 1994/08/29 16:36:48 ram
+?RCS: patch32: fixed typo: /etc/password -> /etc/passwd (WED)
+?RCS:
+?RCS: Revision 3.0.1.1 1993/09/13 16:10:09 ram
+?RCS: patch10: made questions more explicit for 'Configure -s' prompting (WAD)
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:09:20 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:nametype d_passnames d_berknames d_usgnames: Myread Guess Oldconfig cat
+?MAKE: -pick add $@ %<
+?S:nametype:
+?S: This variable indicates how full names are stored on this system.
+?S: Values are bsd, usg, and other.
+?S:.
+?S:d_passnames:
+?S: This variable conditionally defines the PASSNAMES symbol,
+?S: which indicates to the C program that full names are stored in
+?S: the /etc/passwd file.
+?S:.
+?S:d_berknames:
+?S: This variable conditionally defines the PASSNAMES symbol,
+?S: which indicates to the C program that full names are stored in
+?S: the /etc/passwd file in Berkeley format.
+?S:.
+?S:d_usgnames:
+?S: This variable conditionally defines the PASSNAMES symbol,
+?S: which indicates to the C program that full names are stored in
+?S: the /etc/passwd file in USG format.
+?S:.
+?C:PASSNAMES:
+?C: This symbol, if defined, indicates that full names are stored in
+?C: the /etc/passwd file.
+?C:.
+?C:BERKNAMES:
+?C: This symbol, if defined, indicates that full names are stored in
+?C: the /etc/passwd file in Berkeley format (name first thing, everything
+?C: up to first comma, with & replaced by capitalized login id, yuck).
+?C:.
+?C:USGNAMES:
+?C: This symbol, if defined, indicates that full names are stored in
+?C: the /etc/passwd file in USG format (everything after - and before ( is
+?C: the name).
+?C:.
+?H:#$d_passnames PASSNAMES /* (undef to take name from ~/.fullname) */
+?H:#$d_berknames BERKNAMES /* (that is, ":name,stuff:") */
+?H:#$d_usgnames USGNAMES /* (that is, ":stuff-name(stuff):") */
+?H:.
+: find out how to find out full name
+case "$d_berknames" in
+"$define")
+ dflt=y;;
+"$undef")
+ dflt=n;;
+*)
+ if ./bsd; then
+ dflt=y
+ elif ./xenix; then
+ dflt=y
+ else
+ dflt=n
+ fi
+ ;;
+esac
+$cat <<'EOM'
+
+Does your /etc/passwd file keep full names in Berkeley/V7 format (name first
+thing after ':' in GCOS field)? In that case, a typical entry in the password
+file looks like this:
+
+ guest:**paswword**:10:100:Mister Guest User:/usr/users:/bin/sh
+ ^^^^^^^^^^^^^^^^^
+EOM
+rp="Berkeley/V7 format for full name in /etc/passwd?"
+. ./myread
+case "$ans" in
+y*) d_passnames="$define"
+ d_berknames="$define"
+ d_usgnames="$undef"
+ nametype=bsd
+ ;;
+*)
+ case "$d_usgnames" in
+ "$define") dflt=y;;
+ "$undef") dflt=n;;
+ *)
+ if ./usg; then
+ dflt=y
+ else
+ dflt=n
+ fi
+ ;;
+ esac
+$cat <<'EOM'
+
+Does your passwd file keep full names in USG format (name sandwiched between a
+'-' and a '(')? In that case, a typical entry in the password file looks like
+this:
+
+ guest:**paswword**:10:100:000-Mister Guest User(000):/usr/users:/bin/sh
+ ^^^^^^^^^^^^^^^^^
+EOM
+ rp="USG format for full name in /etc/passwd?"
+ . ./myread
+ case "$ans" in
+ n*) echo "Full name will be taken from ~/.fullname"
+ d_passnames="$undef"
+ d_berknames="$undef"
+ d_usgnames="$undef"
+ nametype=other
+ ;;
+ *)
+ d_passnames="$define"
+ d_berknames="$undef"
+ d_usgnames="$define"
+ nametype=usg
+ ;;
+ esac;;
+esac
+
diff --git a/mcon/U/nblock_io.U b/mcon/U/nblock_io.U
new file mode 100644
index 0000000..58dd845
--- /dev/null
+++ b/mcon/U/nblock_io.U
@@ -0,0 +1,261 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: nblock_io.U,v $
+?RCS: Revision 3.0.1.2 1997/02/28 16:17:14 ram
+?RCS: patch61: simplify here document for shells that can't handle them well
+?RCS: patch61: force use of "startsh" at the head of the generated script
+?RCS: patch61: added new files to the ?F: metalint hint
+?RCS:
+?RCS: Revision 3.0.1.1 1995/07/25 14:13:22 ram
+?RCS: patch56: created
+?RCS:
+?X:
+?X: Simplify here document for shells that can't handle them well.
+?X: (Problem reported on FreeBSD; it's unclear if this helps.) --AD
+?X:
+?MAKE:o_nonblock eagain rd_nodata d_eofnblk: cat rm_try +cc +ccflags +ldflags \
+ d_open3 h_sysfile h_fcntl signal_t hint Oldconfig Setvar startsh Warn
+?MAKE: -pick add $@ %<
+?S:o_nonblock:
+?S: This variable bears the symbol value to be used during open() or fcntl()
+?S: to turn on non-blocking I/O for a file descriptor. If you wish to switch
+?S: between blocking and non-blocking, you may try ioctl(FIOSNBIO) instead,
+?S: but that is only supported by some devices.
+?S:.
+?S:eagain:
+?S: This variable bears the symbolic errno code set by read() when no
+?S: data is present on the file and non-blocking I/O was enabled (otherwise,
+?S: read() blocks naturally).
+?S:.
+?S:rd_nodata:
+?S: This variable holds the return code from read() when no data is
+?S: present. It should be -1, but some systems return 0 when O_NDELAY is
+?S: used, which is a shame because you cannot make the difference between
+?S: no data and an EOF.. Sigh!
+?S:.
+?S:d_eofnblk:
+?S: This variable conditionally defines EOF_NONBLOCK if EOF can be seen
+?S: when reading from a non-blocking I/O source.
+?S:.
+?C:VAL_O_NONBLOCK:
+?C: This symbol is to be used during open() or fcntl(F_SETFL) to turn on
+?C: non-blocking I/O for the file descriptor. Note that there is no way
+?C: back, i.e. you cannot turn it blocking again this way. If you wish to
+?C: alternatively switch between blocking and non-blocking, use the
+?C: ioctl(FIOSNBIO) call instead, but that is not supported by all devices.
+?C:.
+?C:VAL_EAGAIN:
+?C: This symbol holds the errno error code set by read() when no data was
+?C: present on the non-blocking file descriptor.
+?C:
+?C: FIXME: And who guarantees this isn't e.g. device-dependent?
+?C: If EAGAIN is defined one should expect it.
+?C: If EWOULDBLOCK is defined one should expect it.
+?C: If both are defined one should expect both.
+?C: -- cbiere, 2011-01-18
+?C:.
+?C:RD_NODATA:
+?C: This symbol holds the return code from read() when no data is present
+?C: on the non-blocking file descriptor. Be careful! If EOF_NONBLOCK is
+?C: not defined, then you can't distinguish between no data and EOF by
+?C: issuing a read(). You'll have to find another way to tell for sure!
+?C:.
+?C:EOF_NONBLOCK:
+?C: This symbol, if defined, indicates to the C program that a read() on
+?C: a non-blocking file descriptor will return 0 on EOF, and not the value
+?C: held in RD_NODATA (-1 usually, in that case!).
+?C:.
+?H:#define VAL_O_NONBLOCK $o_nonblock
+?H:#define VAL_EAGAIN $eagain
+?H:#define RD_NODATA $rd_nodata
+?H:#$d_eofnblk EOF_NONBLOCK
+?H:.
+?F:!try !try.out !try.ret !try.err !mtry
+?T:status
+?LINT:use d_open3
+: check for non-blocking I/O stuff
+case "$h_sysfile" in
+true) echo "#include <sys/file.h>" > head.c;;
+*)
+ case "$h_fcntl" in
+ true) echo "#include <fcntl.h>" > head.c;;
+ *) echo "#include <sys/fcntl.h>" > head.c;;
+ esac
+ ;;
+esac
+echo " "
+echo "Figuring out the flag used by open() for non-blocking I/O..." >&4
+case "$o_nonblock" in
+'')
+ $cat head.c > try.c
+ $cat >>try.c <<'EOCP'
+#include <stdio.h>
+int main(void) {
+#ifdef O_NONBLOCK
+ printf("O_NONBLOCK\n");
+ return 0;
+#endif
+#ifdef O_NDELAY
+ printf("O_NDELAY\n");
+ return 0;
+#endif
+?X: Stevens "Advanced Programming in the UNIX Environment" page 364 mentions
+?X: the FNDELAY symbol, used in 4.33BSD (source: Paul Marquess).
+#ifdef FNDELAY
+ printf("FNDELAY\n");
+#endif
+ return 0;
+}
+EOCP
+ if $cc $ccflags $ldflags -o try try.c >/dev/null 2>&1; then
+ o_nonblock=`./try`
+ case "$o_nonblock" in
+ '') echo "I can't figure it out, assuming O_NONBLOCK will do.";;
+ *) echo "Seems like we can use $o_nonblock.";;
+ esac
+ else
+ echo "(I can't compile the test program; pray O_NONBLOCK is right!)"
+ fi
+ ;;
+*) echo "Using $hint value $o_nonblock.";;
+esac
+$rm_try
+
+echo " "
+echo "Let's see what value errno gets from read() on a $o_nonblock file..." >&4
+case "$eagain" in
+'')
+ $cat head.c > try.c
+ $cat >>try.c <<EOCP
+#include <errno.h>
+#include <sys/types.h>
+#include <signal.h>
+#include <stdlib.h>
+#define MY_O_NONBLOCK $o_nonblock
+extern int errno;
+$signal_t blech(x) int x; { exit(3); }
+EOCP
+ $cat >> try.c <<'EOCP'
+int main()
+{
+ int pd[2];
+ int pu[2];
+ char buf[1];
+ char string[100];
+
+ pipe(pd); /* Down: child -> parent */
+ pipe(pu); /* Up: parent -> child */
+ if (0 != fork()) {
+ int ret;
+ close(pd[1]); /* Parent reads from pd[0] */
+ close(pu[0]); /* Parent writes (blocking) to pu[1] */
+ if (-1 == fcntl(pd[0], F_SETFL, MY_O_NONBLOCK))
+ exit(1);
+ signal(SIGALRM, blech);
+ alarm(5);
+ if ((ret = read(pd[0], buf, 1)) > 0) /* Nothing to read! */
+ exit(2);
+ sprintf(string, "%d\n", ret);
+ write(2, string, strlen(string));
+ alarm(0);
+#ifdef EAGAIN
+ if (errno == EAGAIN) {
+ printf("EAGAIN\n");
+ goto ok;
+ }
+#endif
+#ifdef EWOULDBLOCK
+ if (errno == EWOULDBLOCK)
+ printf("EWOULDBLOCK\n");
+#endif
+ ok:
+ write(pu[1], buf, 1); /* Unblocks child, tell it to close our pipe */
+ sleep(2); /* Give it time to close our pipe */
+ alarm(5);
+ ret = read(pd[0], buf, 1); /* Should read EOF */
+ alarm(0);
+ sprintf(string, "%d\n", ret);
+ write(3, string, strlen(string));
+ exit(0);
+ }
+
+ close(pd[0]); /* We write to pd[1] */
+ close(pu[1]); /* We read from pu[0] */
+ read(pu[0], buf, 1); /* Wait for parent to signal us we may continue */
+ close(pd[1]); /* Pipe pd is now fully closed! */
+ return 0; /* Bye bye, thank you for playing! */
+}
+EOCP
+ if $cc $ccflags $ldflags -o try try.c >/dev/null 2>&1; then
+?X: Use script to avoid the possible 'alarm call' message
+ echo "$startsh" >mtry
+ echo "./try >try.out 2>try.ret 3>try.err || exit 4" >>mtry
+ chmod +x mtry
+ ./mtry >/dev/null 2>&1
+ case $? in
+ 0) eagain=`$cat try.out`;;
+ 1) echo "Could not perform non-blocking setting!";;
+ 2) echo "I did a successful read() for something that was not there!";;
+ 3) echo "Hmm... non-blocking I/O does not seem to be working!";;
+ *) echo "Something terribly wrong happened during testing.";;
+ esac
+ rd_nodata=`$cat try.ret`
+ echo "A read() system call with no data present returns $rd_nodata."
+ case "$rd_nodata" in
+ 0|-1) ;;
+ *)
+ echo "(That's peculiar, fixing that to be -1.)"
+ rd_nodata=-1
+ ;;
+ esac
+ case "$eagain" in
+ '')
+ echo "Forcing errno EAGAIN on read() with no data available."
+ eagain=EAGAIN
+ ;;
+ *)
+ echo "Your read() sets errno to $eagain when no data is available."
+ ;;
+ esac
+ status=`$cat try.err`
+ case "$status" in
+ 0) echo "And it correctly returns 0 to signal EOF.";;
+ -1) echo "But it also returns -1 to signal EOF, so be careful!";;
+ *) echo "However, your read() returns '$status' on EOF??";;
+ esac
+ val="$define"
+ if test "$status" = "$rd_nodata"; then
+ ./warn "your read() can't distinguish between EOF and no data!" 4>&4
+ val="$undef"
+ fi
+ else
+ echo "I can't compile the test program--assuming errno EAGAIN will do."
+ eagain=EAGAIN
+ fi
+ set d_eofnblk
+ eval $setvar
+ ;;
+*)
+ echo "Using $hint value $eagain."
+ echo "Your read() returns $rd_nodata when no data is present."
+ case "$d_eofnblk" in
+ "$define") echo "And you can see EOF because read() returns 0.";;
+ "$undef") echo "But you can't see EOF status from read() returned value.";;
+ *)
+?X: Should not happen, but if it does, assume the worst!
+ echo "(Assuming you can't see EOF status from read anyway.)"
+ d_eofnblk=$undef
+ ;;
+ esac
+ ;;
+esac
+$rm_try head.c mtry
+
diff --git a/mcon/U/newslevel.U b/mcon/U/newslevel.U
new file mode 100644
index 0000000..09bab23
--- /dev/null
+++ b/mcon/U/newslevel.U
@@ -0,0 +1,53 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: newslevel.U,v $
+?RCS: Revision 3.0 1993/08/18 12:09:21 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:newslevel: cat contains test activeexp newslib Myread Oldconfig
+?MAKE: -pick add $@ %<
+?S:newslevel:
+?S: The current revision level of the Usenet news system, encoded
+?S: as 1000 * major rev + 10 * minor rev + sub rev. For instance,
+?S: news 2.10.3 is encode as 2103, and 2.11 as 2110.
+?S:.
+?C:NEWSLEVEL:
+?C: The current revision level of the Usenet news system, encoded
+?C: as 1000 * major rev + 10 * minor rev + sub rev. For instance,
+?C: news 2.10.3 is encode as 2103, and 2.11 as 2110.
+?C:.
+?H:#define NEWSLEVEL $newslevel /**/
+?H:.
+: check for news version
+if $test -f $activeexp; then
+ if ??? >/dev/null 2>&1; then
+ dflt=2110
+ elif $test -f $newslib/cunbatch; then
+ dflt=2103
+ elif $contains ' [0-9][0-9]* [0-9]' "$activeexp" >/dev/null 2>&1; then
+ dflt=2102
+ else
+ dflt=2101
+ fi
+else
+ dflt=$newslevel
+fi
+$cat <<EOM
+
+The following news version number is a multiplexed integer:
+ 1000 * major rev + 10 * minor rev + sub rev.
+News 2.10.3 would be 2103. 2.11 comes out as 2110.
+
+EOM
+rp="What version of news are you going to be running?"
+. ./myread
+newslevel="$ans"
+
diff --git a/mcon/U/newslib.U b/mcon/U/newslib.U
new file mode 100644
index 0000000..4414039
--- /dev/null
+++ b/mcon/U/newslib.U
@@ -0,0 +1,61 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: newslib.U,v $
+?RCS: Revision 3.0 1993/08/18 12:09:23 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:newslib newslibexp: test inews Oldconfig Getfile
+?MAKE: -pick add $@ %<
+?S:newslib:
+?S: This variable contains the eventual value of the NEWSLIB symbol,
+?S: which holds the name of the directory serving as the news library.
+?S: It may have a ~ on the front. See newslibexp for expanded version.
+?S:.
+?S:newslibexp:
+?S: This variable contains the ~ expanded name of the news library
+?S: directory. See newslib.
+?S:.
+?C:NEWSLIB:
+?C: This symbol contains the name of the directory serving as the news
+?C: library. The program must be prepared to do ~ expansion on it.
+?C:.
+?C:NEWSLIB_EXP:
+?C: This symbol is the ~ expanded version of NEWSLIB, for programs that
+?C: do not wish to deal with it at run-time.
+?C:.
+?H:#define NEWSLIB "$newslib" /**/
+?H:#define NEWSLIB_EXP "$newslibexp" /**/
+?H:.
+?LINT:change inews
+: figure out news library
+case "$newslib" in
+'')
+ dflt=/usr/lib/news
+ ;;
+*) dflt=$newslib ;;
+esac
+echo " "
+fn=d~
+rp='Where is your news library?'
+. ./getfile
+newslib="$ans"
+newslibexp="$ansexp"
+if $test -f $newslibexp/inews; then
+ echo "Aha! Inews is really in $newslibexp! Maybe this is 2.10.2..." >&4
+ case "$inews" in
+ inews)
+ : null
+ ;;
+ *) echo "(Make sure $inews isn't an old version.)";;
+ esac
+ inews=$newslibexp/inews
+fi
+
diff --git a/mcon/U/newsspool.U b/mcon/U/newsspool.U
new file mode 100644
index 0000000..82467b2
--- /dev/null
+++ b/mcon/U/newsspool.U
@@ -0,0 +1,52 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: newsspool.U,v $
+?RCS: Revision 3.0 1993/08/18 12:09:24 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:newsspool newsspoolexp: Getfile Oldconfig
+?MAKE: -pick add $@ %<
+?S:newsspool:
+?S: This variable contains the eventual value of the NEWSSPOOL symbol,
+?S: which is the directory name where news articles are spooled. It
+?S: may have a ~ on the front of it.
+?S:.
+?S:newsspoolexp:
+?S: This is the same as the newsspool variable, but is filename expanded
+?S: at configuration time, for programs not wanting to deal with it at
+?S: run-time.
+?S:.
+?C:NEWSSPOOL:
+?C: This symbol contains the directory name where news articles are
+?C: spooled. The program must be prepared to do ~ expansion on it.
+?C:.
+?C:NEWSSPOOL_EXP:
+?C: This is the same as NEWSSPOOL, but is filename expanded at
+?C: configuration time, for use in programs not willing to do so
+?C: at run-time.
+?C:.
+?H:#define NEWSSPOOL "$newsspool" /**/
+?H:#define NEWSSPOOL_EXP "$newsspoolexp" /**/
+?H:.
+: locate news spool directory
+case "$newsspool" in
+'')
+ dflt=/usr/spool/news
+ ;;
+*) dflt="$newsspool";;
+esac
+echo " "
+fn=d~
+rp='Where are news spooled?'
+. ./getfile
+newsspool="$ans"
+newsspoolexp="$ansexp"
+
diff --git a/mcon/U/nis.U b/mcon/U/nis.U
new file mode 100644
index 0000000..06e4c47
--- /dev/null
+++ b/mcon/U/nis.U
@@ -0,0 +1,168 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: nis.U,v $
+?RCS: Revision 3.0.1.3 1997/02/28 16:17:38 ram
+?RCS: patch61: ensure suitable defaults for hostcat and friends
+?RCS:
+?RCS: Revision 3.0.1.2 1995/03/21 08:48:34 ram
+?RCS: patch52: continued fix for NeXT NIS/NetInfo handling
+?RCS:
+?RCS: Revision 3.0.1.1 1995/02/15 14:16:23 ram
+?RCS: patch51: now correctly handles NeXT using NIS rather than NetInfo
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:09:24 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:passcat groupcat hostcat: Myread Oldconfig test contains
+?MAKE: -pick add $@ %<
+?S:passcat:
+?S: This variable contains a command that produces the text of the
+?S: /etc/passwd file. This is normally "cat /etc/passwd", but can be
+?S: "ypcat passwd" when NIS is used.
+?S:.
+?S:groupcat:
+?S: This variable contains a command that produces the text of the
+?S: /etc/group file. This is normally "cat /etc/group", but can be
+?S: "ypcat group" when NIS is used.
+?S:.
+?S:hostcat:
+?S: This variable contains a command that produces the text of the
+?S: /etc/hosts file. This is normally "cat /etc/hosts", but can be
+?S: "ypcat hosts" when NIS is used.
+?S:.
+: see if we have to deal with yellow pages, now NIS.
+?X: NeXT gives us some fun here, as always, by having both NIS (former YP)
+?X: and NetInfo. But since it has both, it's ok to put the test inside the if.
+?X: Contributed by Thomas Neumann <tom@smart.bo.open.de>.
+if $test -d /usr/etc/yp || $test -d /etc/yp || $test -d /usr/lib/yp; then
+ if $test -f /usr/etc/nibindd; then
+ echo " "
+ echo "I'm fairly confident you're on a NeXT."
+@if passcat || groupcat
+ echo " "
+ rp='Do you get the passwd file via NetInfo?'
+ dflt=y
+ case "$passcat" in
+ nidump*) ;;
+ '') ;;
+ *) dflt=n;;
+ esac
+ . ./myread
+ case "$ans" in
+ y*) passcat='nidump passwd .'
+@if groupcat
+ echo "(Assuming /etc/group is also distributed.)"
+ groupcat='nidump group .'
+@end
+ ;;
+ *) echo "You told me, so don't blame me."
+ case "$passcat" in
+ nidump*) passcat=''
+@if groupcat
+ groupcat='';;
+@end
+ esac
+@if groupcat
+ echo "(Assuming /etc/group is handled the same way.)"
+@end
+ ;;
+ esac
+@end
+@if hostcat
+ echo " "
+ rp='Do you get the hosts file via NetInfo?'
+ dflt=y
+ case "$hostcat" in
+ nidump*) ;;
+ '') ;;
+ *) dflt=n;;
+ esac
+ . ./myread
+ case "$ans" in
+ y*) hostcat='nidump hosts .';;
+ *) case "$hostcat" in
+ nidump*) hostcat='';;
+ esac
+ ;;
+ esac
+@end
+ fi
+@if passcat || groupcat
+ case "$passcat" in
+ nidump*) ;;
+ *)
+ case "$passcat" in
+ *ypcat*) dflt=y;;
+ '') if $contains '^\+' /etc/passwd >/dev/null 2>&1; then
+ dflt=y
+ else
+ dflt=n
+ fi;;
+ *) dflt=n;;
+ esac
+ echo " "
+ rp='Are you getting the passwd file via yellow pages?'
+ . ./myread
+ case "$ans" in
+ y*) passcat='ypcat passwd'
+@if groupcat
+ echo "(Assuming /etc/group is also distributed.)"
+ groupcat='ypcat group'
+@end
+ ;;
+ *) passcat='cat /etc/passwd'
+@if groupcat
+ echo "(Assuming /etc/group is also local.)"
+ groupcat='cat /etc/group'
+@end
+ ;;
+ esac
+ ;;
+ esac
+@end
+@if hostcat
+ case "$hostcat" in
+ nidump*) ;;
+ *)
+ case "$hostcat" in
+ *ypcat*) dflt=y;;
+ '') if $contains '^\+' /etc/passwd >/dev/null 2>&1; then
+ dflt=y
+ else
+ dflt=n
+ fi;;
+ *) dflt=n;;
+ esac
+ echo " "
+ rp='Are you getting the hosts file via yellow pages?'
+ . ./myread
+ case "$ans" in
+ y*) hostcat='ypcat hosts';;
+ *) hostcat='cat /etc/hosts';;
+ esac
+ ;;
+ esac
+@end
+fi
+?X: Ensure suitable default -- Manoj Srivastava
+case "$hostcat" in
+'') hostcat=':'
+ $test -f /etc/hosts && hostcat='cat /etc/hosts';;
+esac
+case "$groupcat" in
+'') groupcat=':'
+ $test -f /etc/group && groupcat='cat /etc/group';;
+esac
+case "$passcat" in
+'') passcat=':'
+ $test -f /etc/passwd && passcat='cat /etc/passwd';;
+esac
+
diff --git a/mcon/U/nlist_pfx.U b/mcon/U/nlist_pfx.U
new file mode 100644
index 0000000..20bca8e
--- /dev/null
+++ b/mcon/U/nlist_pfx.U
@@ -0,0 +1,135 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: nlist_pfx.U,v $
+?RCS: Revision 3.0.1.1 1994/10/29 16:26:18 ram
+?RCS: patch36: added ?F: line for metalint file checking
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:09:25 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:nlist_pfx nlist_fnd: cat test Myread Oldconfig libnlist \
+ +cc +ccflags
+?MAKE: -pick add $@ %<
+?S:nlist_pfx:
+?S: This variable holds any characters which precede the symbol name
+?S: when doing an nlist search.
+?S:.
+?S:nlist_fnd:
+?S: This variable holds the member of the nlist structure which is
+?S: nonzero if an nlist search succeeds. Presently, it is always "n_value".
+?S:.
+?C:NLIST_PREFIX:
+?C: This manifest constant holds the string of characters which should
+?C: preceed the symbol name when doing an nlist search.
+?C:.
+?C:NLIST_FOUND:
+?C: This manifest constant holds the member of the nlist structure which
+?C: is nonzero if an nlist search succeeds.
+?C:.
+?H:#define NLIST_PREFIX $nlist_pfx /**/
+?H:#define NLIST_FOUND $nlist_fnd /**/
+?H:.
+?F:!nlisttest
+?T:nlist_loc
+: Nose around for nlist stuff
+echo " "
+echo "Checking out nlist stuff..." >&4
+$cat >nlisttest.c <<'EOCP'
+#include <stdio.h>
+#include <nlist.h>
+
+main(argc, argv)
+int argc;
+char **argv;
+{
+ int (*loc)();
+ extern int hereIam();
+ static struct nlist nl[] = {
+ { "IamNotFound", 0 },
+ { "hereIam", 0 },
+ { "_hereIam", 0 },
+ { ".hereIam", 0 },
+ { "", 0 }
+ };
+
+ loc = hereIam;
+
+ if(argc == 1) {
+ printf("%ld\n", loc);}
+ else {
+ int i;
+ int rc;
+
+ if(nlist("./nlisttest", nl) == -1) exit(-1);
+ i = argv[1][0] - '0';
+ printf("%d %d %d\n", nl[i].n_name, nl[i].n_type, nl[i].n_value);
+ }
+ exit(0);}
+
+int hereIam() {
+
+ return;}
+EOCP
+nlist_fnd=n_value
+if $cc $ccflags -o nlisttest nlisttest.c $libnlist >/dev/null 2>&1 ; then
+ set `./nlisttest`
+ nlist_loc=$1
+
+ set `./nlisttest 0`
+ if $test "$3" = "0" ; then
+ echo "$nlist_fnd is 0 if nlist() fails, as I expected."
+ else
+ $cat <<EOM
+Hello, Jim. We have just discovered that $nlist_fnd was nonzero on an
+nlist() lookup failure! Your mission, should you choose to accept it, is to
+edit either config.sh (to provide a Good value for nlist_fnd) or The Code
+(to find an alternative to NLIST_FOUND), and reporting the full details of
+your success to the MetaConfig Police. Of course, should you fail...
+EOM
+ nlist_fnd="/* Bletch! */ */"
+ fi
+
+ set `./nlisttest 1`
+ if $test "$nlist_loc" = "$3" ; then
+ echo "Symbols are stored with no initial characters."
+ nlist_pfx=
+ else
+ set `./nlisttest 2`
+ if $test "$nlist_loc" = "$3" ; then
+ echo "Symbols are stored with an initial underscore."
+ nlist_pfx=_
+ else
+ set `./nlisttest 3`
+ if $test "$nlist_loc" = "$3" ; then
+ echo "Symbols are stored with an initial dot."
+ nlist_pfx=.
+ else
+ $cat <<EOM
+I can't figure out the symbol prefix!
+You get to edit config.sh and fix 'nlist_pfx' (Configure will let you do this
+at the end of its configuration questions), or config.h and fix the value of
+the NLIST_PREFIX symbol.
+EOM
+ nlist_pfx="/* Bletch! */ */"
+ fi
+ fi
+ fi
+else
+ $cat <<EOM
+I can't get the nlist test program working!
+You get to edit config.sh and fix 'nlist_pfx' (Configure will let you do this
+at the end of its configuration questions) and 'nlist_fnd', or config.h and
+fix the value of the NLIST_PREFIX and NLIST_FOUND symbols.
+EOM
+ nlist_pfx="/* Bletch! */ */"
+ nlist_fnd="/* Bletch! */ */"
+fi
+
diff --git a/mcon/U/official.U b/mcon/U/official.U
new file mode 100644
index 0000000..cf372d1
--- /dev/null
+++ b/mcon/U/official.U
@@ -0,0 +1,47 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 2006, Christian Biere
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:official d_official: Myread Setvar Warn
+?MAKE: -pick add $@ %<
+?S:official:
+?S: This variable holds 'true' or 'false' depending on whether we're making
+?S: an "official" build. When not official, generated programs may choose
+?S: to peek within the source directory, for instance via $pkgsrc in the
+?S: shell and PACKAGE_SOURCE_DIR in C programs.
+?S:.
+?S:d_official:
+?S: This variable conditionally defines OFFICIAL_BUILD.
+?S:.
+?C:OFFICIAL_BUILD:
+?C: When defined, the build is "official". Programs generated for an
+?C: official build MUST NOT peek into the place where the sources lie, via
+?C: PACKAGE_SOURCE_DIR or any other means.
+?C:.
+?H:#$d_official OFFICIAL_BUILD /**/
+?H:.
+?Y:TOP
+?LINT:set d_official
+: determine whether this is an official build
+case "$official" in
+false)
+ official=false
+ val="$undef"
+ echo " "
+ ./warn 'This build will not be suitable for distribution.' 4>&4
+
+;;
+*)
+ val="$define"
+ official=true
+ ;;
+esac
+set d_official
+eval $setvar
+
diff --git a/mcon/U/orderlib.U b/mcon/U/orderlib.U
new file mode 100644
index 0000000..b61bf16
--- /dev/null
+++ b/mcon/U/orderlib.U
@@ -0,0 +1,95 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: orderlib.U,v $
+?RCS: Revision 3.0.1.4 1997/02/28 16:18:18 ram
+?RCS: patch61: replaced .a with $_a all over the place
+?RCS: patch61: likewise for .o replaced by $_o
+?RCS: patch61: now uses the ar located by Loc.U
+?RCS:
+?RCS: Revision 3.0.1.3 1995/01/11 15:33:04 ram
+?RCS: patch45: allows hint files to specify their own value for 'ranlib'
+?RCS:
+?RCS: Revision 3.0.1.2 1994/10/29 16:26:48 ram
+?RCS: patch36: now performs a real small compile for accurate checks (ADO)
+?RCS:
+?RCS: Revision 3.0.1.1 1994/08/29 16:31:17 ram
+?RCS: patch32: use cc variable instead of hardwired 'cc' in 1st compile
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:09:26 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:orderlib ranlib: Loc ar cat test rm +cc +ccflags +ldflags +libs _a _o
+?MAKE: -pick add $@ %<
+?S:orderlib:
+?S: This variable is "true" if the components of libraries must be ordered
+?S: (with `lorder $* | tsort`) before placing them in an archive. Set to
+?S: "false" if ranlib or ar can generate random libraries.
+?S:.
+?S:ranlib:
+?S: This variable is set to the pathname of the ranlib program, if it is
+?S: needed to generate random libraries. Set to ":" if ar can generate
+?S: random libraries or if random libraries are not supported
+?S:.
+?F:!foobar
+: see if ar generates random libraries by itself
+echo " "
+echo "Checking how to generate random libraries on your machine..." >&4
+?X: Some systems (like MIPS) complain when running ar... Others like Ultrix
+?X: need an explicit 'ar ts' to add the table of contents.
+?X: Still others like Linux run ar ts successfully, but still need ranlib.
+?X: This set of tests seems the minimum necessary to check out Linux.
+?X: We need to explicitly put the entries in out-of-order so that Sun's ld
+?X: will fail. (Otherwise it complains, but gives an exit status of 0.)
+echo 'int bar1() { return bar2(); }' > bar1.c
+echo 'int bar2() { return 2; }' > bar2.c
+$cat > foo.c <<'EOP'
+int main() { printf("%d\n", bar1()); return 0; }
+EOP
+$cc $ccflags -c bar1.c >/dev/null 2>&1
+$cc $ccflags -c bar2.c >/dev/null 2>&1
+$cc $ccflags -c foo.c >/dev/null 2>&1
+$ar rc bar$_a bar2$_o bar1$_o >/dev/null 2>&1
+if $cc $ccflags $ldflags -o foobar foo$_o bar$_a $libs > /dev/null 2>&1 &&
+ ./foobar >/dev/null 2>&1; then
+ echo "ar appears to generate random libraries itself."
+ orderlib=false
+ ranlib=":"
+elif $ar ts bar$_a >/dev/null 2>&1 &&
+ $cc $ccflags $ldflags -o foobar foo$_o bar$_a $libs > /dev/null 2>&1 &&
+ ./foobar >/dev/null 2>&1; then
+ echo "a table of contents needs to be added with 'ar ts'."
+ orderlib=false
+ ranlib="$ar ts"
+else
+?X: Allow hints to specify their own ranlib "script". For instance, on
+?X: some NeXT machines, the timestamp put by ranlib is not correct, and this
+?X: may raise tedious recompiles for nothing. Therefore, NeXT may add the
+?X: ranlib='sleep 5; /bin/ranlib' line in their hints to "fix" that.
+?X: (reported by Andreas Koenig <k@franz.ww.tu-berlin.de>)
+ case "$ranlib" in
+ :) ranlib='';;
+ '')
+ ranlib=`./loc ranlib X /usr/bin /bin /usr/local/bin`
+ $test -f $ranlib || ranlib=''
+ ;;
+ esac
+ if $test -n "$ranlib"; then
+ echo "your system has '$ranlib'; we'll use that."
+ orderlib=false
+ else
+ echo "your system doesn't seem to support random libraries"
+ echo "so we'll use lorder and tsort to order the libraries."
+ orderlib=true
+ ranlib=":"
+ fi
+fi
+$rm -f foo* bar*
+
diff --git a/mcon/U/orgname.U b/mcon/U/orgname.U
new file mode 100644
index 0000000..45a51b4
--- /dev/null
+++ b/mcon/U/orgname.U
@@ -0,0 +1,65 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: orgname.U,v $
+?RCS: Revision 3.0.1.1 1993/09/13 16:10:25 ram
+?RCS: patch10: added support for /local/src to the search (WAD)
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:09:27 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:orgname: sed cat Myread Loc Oldconfig
+?MAKE: -pick add $@ %<
+?S:orgname:
+?S: This variable contains the eventual value of the ORGNAME symbol,
+?S: which contains either the organizaton name or the full pathname
+?S: of a file containing the organization name.
+?S:.
+?C:ORGNAME:
+?C: This symbol contains either the organizaton name or the full pathname
+?C: of a file containing the organization name, which the program must
+?C: be prepared to open and substitute the contents of.
+?C:.
+?H:#define ORGNAME "$orgname" /**/
+?H:.
+?T:longshots xxx
+: get organization name
+longshots='/local/src /usr/src/new /usr/src/local /usr/local/src'
+case "$orgname" in
+'') if xxx=`./loc news/src/defs.h x $longshots`; then
+ dflt=`$sed -n 's/^.*MYORG[ ]*"\(.*\)".*$/\1/p' $xxx`
+ else
+ dflt=''
+ fi
+ ;;
+*) dflt="$orgname";;
+esac
+$cat << 'EOH'
+
+Please type the name of your organization as you want it to appear on the
+Organization line of outgoing articles. (It's nice if this also specifies
+your location. Your city name is probably sufficient if well known.)
+For example:
+
+ University of Southern North Dakota, Hoople
+
+You may also put the name of a file, as long as it begins with a slash.
+For example:
+
+ /etc/organization
+
+EOH
+orgname=""
+while test "X$orgname" = "X"; do
+ rp='Organization:'
+ . ./myread
+ orgname="$ans"
+done
+
diff --git a/mcon/U/packadmin.U b/mcon/U/packadmin.U
new file mode 100644
index 0000000..921c8d1
--- /dev/null
+++ b/mcon/U/packadmin.U
@@ -0,0 +1,33 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1996, Andy Dougherty
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:packadmin: cf_email Oldconfig Myread cat spackage package
+?MAKE: -pick add $@ %<
+?Y:TOP
+?S:packadmin:
+?S: Electronic mail address of the package administrator.
+?S:.
+: check wehther they will act as local admin for the package
+$cat <<EOM
+
+If you or somebody else will be maintaining $package at your site, please
+fill in the correct e-mail address here so that they may be contacted
+if necessary. You may enter "none" for no administrator.
+
+EOM
+case "$packadmin" in
+'') dflt="$cf_email";;
+*) dflt="$packadmin";;
+esac
+rp="$spackage administrator e-mail address"
+. ./myread
+packadmin="$ans"
+
diff --git a/mcon/U/package.U b/mcon/U/package.U
new file mode 100644
index 0000000..7dd97e3
--- /dev/null
+++ b/mcon/U/package.U
@@ -0,0 +1,56 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: package.U,v $
+?RCS: Revision 3.0.1.3 1994/10/29 16:27:21 ram
+?RCS: patch36: beware of non-ascii character sets when translating case
+?RCS:
+?RCS: Revision 3.0.1.2 1993/11/10 17:37:02 ram
+?RCS: patch14: skip definition of spackage if not otherwise used
+?RCS:
+?RCS: Revision 3.0.1.1 1993/09/13 16:11:10 ram
+?RCS: patch10: added spackage, suitable for starting sentences
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:09:28 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:package spackage: Nothing
+?MAKE: -pick wipe $@ %<
+?S:package:
+?S: This variable contains the name of the package being constructed.
+?S: It is primarily intended for the use of later Configure units.
+?S:.
+?S:spackage:
+?S: This variable contains the name of the package being constructed,
+?S: with the first letter uppercased, i.e. suitable for starting
+?S: sentences.
+?S:.
+?C:PACKAGE:
+?C: This variable contains the name of the package being built.
+?C:.
+?H:#define PACKAGE "$package"
+?H:.
+?T:first last
+: set package name
+package='<PACKAGENAME>'
+@if spackage
+first=`echo $package | sed -e 's/^\(.\).*/\1/'`
+last=`echo $package | sed -e 's/^.\(.*\)/\1/'`
+?X:
+?X: So early in the Configure script, we don't have ./tr set up and can't
+?X: include Tr in our dependency or that would create a cycle. Therefore,
+?X: we have to somehow duplicate the work done in Tr. That's life.
+?X:
+case "`echo AbyZ | tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
+ABYZ) spackage=`echo $first | tr '[:lower:]' '[:upper:]'`$last;;
+*) spackage=`echo $first | tr '[a-z]' '[A-Z]'`$last;;
+esac
+@end
+
diff --git a/mcon/U/pager.U b/mcon/U/pager.U
new file mode 100644
index 0000000..e68cf8c
--- /dev/null
+++ b/mcon/U/pager.U
@@ -0,0 +1,62 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: pager.U,v $
+?RCS: Revision 3.0.1.2 1995/01/30 14:41:26 ram
+?RCS: patch49: ensure dflt gets initialized in case no pagers are found (WED)
+?RCS:
+?RCS: Revision 3.0.1.1 1994/10/29 16:27:45 ram
+?RCS: patch36: replaced Myread by Getfile in the dependency line
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:09:30 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:pager: pg more less Getfile Oldconfig
+?MAKE: -pick add $@ %<
+?S:pager:
+?S: This variable contains the name of the preferred pager on the system.
+?S: Usual values are (the full pathnames of) more, less, pg, or cat.
+?S:.
+: locate the preferred pager for this system
+fn=f/
+case "$pager" in
+'')
+ dflt=''
+ case "$pg" in
+ /*) dflt=$pg;;
+ [a-zA-Z]:/*) dflt=$pg;;
+ esac
+ case "$more" in
+ /*) dflt=$more;;
+ [a-zA-Z]:/*) dflt=$more;;
+ esac
+ case "$less" in
+ /*) dflt=$less;;
+ [a-zA-Z]:/*) dflt=$less;;
+ esac
+ case "$dflt" in
+ '') dflt=/usr/ucb/more;;
+ esac
+ ;;
+*) dflt="$pager"
+ ;;
+esac
+?X: Instruct ./getfile to trust the default pager value,
+?X: even if it does not begin with a slash. For example, on os2,
+?X: pager might be cmd /c more. Also, it might include some options,
+?X: such as '/usr/bin/less -R'. ./getfile would report that
+?X: "/usr/bin/less -R" doesn't exist.
+?X: See comments in Getfile.U.
+fn="f/($dflt)"
+echo " "
+rp='What pager is used on your system?'
+. ./getfile
+pager="$ans"
+
diff --git a/mcon/U/patchlevel.U b/mcon/U/patchlevel.U
new file mode 100644
index 0000000..3da3183
--- /dev/null
+++ b/mcon/U/patchlevel.U
@@ -0,0 +1,69 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: patchlevel.U,v $
+?RCS: Revision 3.0.1.1 1997/02/28 16:18:41 ram
+?RCS: patch61: added support for src.U
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:09:31 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:patchlevel revision: package baserev test rsrc
+?MAKE: -pick add $@ %<
+?T:Revision
+?S:patchlevel:
+?S: The patchlevel level of this package.
+?S: The value of patchlevel comes from the patchlevel.h file.
+?S:.
+?S:revision:
+?S: The revision / build of this package.
+?S: The value is derived from the REVISION define in the revision.h file.
+?S: When revision is defined, the patch level should be ignored if 0.
+?S:.
+: get the patchlevel / revision
+echo " "
+echo "Getting the current patchlevel / revision..." >&4
+if $test -r $rsrc/patchlevel.h;then
+ patchlevel=`awk \
+ '/^#[ ]*define[ ][ ]*PATCHLEVEL/ {print $3}' \
+ < $rsrc/patchlevel.h`
+else
+ patchlevel=0
+fi
+?X:
+?X: Can handle either one of:
+?X:
+?X: #define REVISION word
+?X: #define REVISION "$Revision$"
+?X:
+if $test -r $rsrc/revision.h;then
+ revision=`awk \
+ '/^#[ ]*define[ ][ ]*REVISION/ {print $3}' \
+ < $rsrc/revision.h`
+ case "$revision" in
+ '"$Revision:')
+ revision=`awk \
+ '/^#[ ]*define[ ][ ]*REVISION/ {print $4}' \
+ < $rsrc/revision.h`
+ ;;
+ esac
+else
+ revision=0
+fi
+case "$revision" in
+0) echo "(You have $package $baserev PL$patchlevel.)" ;;
+*)
+ case "$patchlevel" in
+ 0) echo "(You have $package $baserev-$revision)";;
+ *) echo "(You have $package $baserev-$revision PL$patchlevel)";;
+ esac
+ ;;
+esac
+
diff --git a/mcon/U/perlpath.U b/mcon/U/perlpath.U
new file mode 100644
index 0000000..08a85aa
--- /dev/null
+++ b/mcon/U/perlpath.U
@@ -0,0 +1,56 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: perlpath.U,v $
+?RCS: Revision 3.0.1.2 1995/09/25 09:17:04 ram
+?RCS: patch59: unit is now forced to the top of Configure, if possible
+?RCS:
+?RCS: Revision 3.0.1.1 1995/01/11 15:33:53 ram
+?RCS: patch45: can now use Loc variables since path stripping is deferred
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:09:32 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: The purpose of this unit is to locate perl good enough to construct a #!
+?X:
+?MAKE:perlpath: Getfile Oldconfig Loc perl
+?MAKE: -pick add $@ %<
+?Y:TOP
+?S:perlpath:
+?S: This variable contains the eventual value of the PERLPATH symbol,
+?S: which contains the absolute location of the perl interpreter.
+?S:.
+?C:PERLPATH:
+?C: This symbol contains the absolute location of the perl interpreter.
+?C:.
+?H:#define PERLPATH "$perlpath" /**/
+?H:.
+: determine perl absolute location
+case "$perlpath" in
+'')
+ if test -f /usr/bin/perl; then
+ dflt=/usr/bin/perl
+ else
+ case "$perl" in
+ */*) dflt="$perl";;
+ *) dflt=/usr/bin/perl;;
+ esac
+ fi
+ ;;
+*) dflt="$perlpath"
+ ;;
+esac
+echo " "
+fn=f~/
+rp="Where is perl located on your system?"
+. ./getfile
+perlpath="$ans"
+
diff --git a/mcon/U/pidtype.U b/mcon/U/pidtype.U
new file mode 100644
index 0000000..22ed2de
--- /dev/null
+++ b/mcon/U/pidtype.U
@@ -0,0 +1,39 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: pidtype.U,v $
+?RCS: Revision 3.0.1.1 1994/08/29 16:31:27 ram
+?RCS: patch32: now uses new Typedef unit to compute type information
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:09:33 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:pidtype: Myread Typedef
+?MAKE: -pick add $@ %<
+?S:pidtype:
+?S: This variable defines PIDTYPE to be something like pid_t, int,
+?S: ushort, or whatever type is used to declare process ids in the kernel.
+?S:.
+?C:Pid_t (PIDTYPE):
+?C: This symbol holds the type used to declare process ids in the kernel.
+?C: It can be int, uint, pid_t, etc... It may be necessary to include
+?C: <sys/types.h> to get any typedef'ed information.
+?C:.
+?H:#define Pid_t $pidtype /* PID type */
+?H:.
+: see what type pids are declared as in the kernel
+set pid_t pidtype int stdio.h sys/types.h
+eval $typedef
+dflt="$pidtype"
+echo " "
+rp="What type are process ids on this system declared as?"
+. ./myread
+pidtype="$ans"
+
diff --git a/mcon/U/pkgsrc.U b/mcon/U/pkgsrc.U
new file mode 100644
index 0000000..f69c195
--- /dev/null
+++ b/mcon/U/pkgsrc.U
@@ -0,0 +1,26 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:pkgsrc: src rsrc
+?MAKE: -pick add $@ %<
+?S:pkgsrc:
+?S: This variable holds the absolute path of the package source.
+?S:.
+?C:PACKAGE_SOURCE_DIR:
+?C: Holds the directory name holding the package source.
+?C:.
+?H:#define PACKAGE_SOURCE_DIR "$pkgsrc"
+?H:.
+: define absolute package source directory
+case "$src" in
+/*) pkgsrc=$src;;
+*) pkgsrc=`cd $rsrc; pwd`;;
+esac
+
diff --git a/mcon/U/prefix.U b/mcon/U/prefix.U
new file mode 100644
index 0000000..ded5729
--- /dev/null
+++ b/mcon/U/prefix.U
@@ -0,0 +1,80 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu>
+?RCS:
+?RCS: $Log: prefix.U,v $
+?RCS: Revision 3.0.1.2 1995/01/30 14:44:05 ram
+?RCS: patch49: new prefixexp variable holding a fully expanded prefix
+?RCS: patch49: save off previous prefix value in oldprefix if changed (WED)
+?RCS: patch49: added the INSTALLPREFIX define for C programs to use (WED)
+?RCS:
+?RCS: Revision 3.0.1.1 1994/08/29 16:31:34 ram
+?RCS: patch32: created by ADO
+?RCS:
+?MAKE:prefix prefixexp +oldprefix: Getfile Loc Oldconfig cat package
+?MAKE: -pick add $@ %<
+?S:prefix:
+?S: This variable holds the name of the directory below which the
+?S: user will install the package. Usually, this is /usr/local, and
+?S: executables go in /usr/local/bin, library stuff in /usr/local/lib,
+?S: man pages in /usr/local/man, etc. It is only used to set defaults
+?S: for things in bin.U, mansrc.U, privlib.U, or scriptdir.U.
+?S:.
+?S:prefixexp:
+?S: This variable holds the full absolute path of the directory below
+?S: which the user will install the package. Derived from prefix.
+?S:.
+?S:oldprefix:
+?S: This variable is set non-null if the prefix was previously defined
+?S: and gets set to a new value. Used internally by Configure only.
+?S:.
+?C:INSTALLPREFIX:
+?C: This symbol contains the name of the install prefix for this package.
+?C:.
+?H:#define INSTALLPREFIX "$prefix" /**/
+?H:.
+: determine root of directory hierarchy where package will be installed.
+case "$prefix" in
+'')
+ dflt=`./loc . /usr/local /usr/local /local /opt /usr`
+ ;;
+*)
+ dflt="$prefix"
+ ;;
+esac
+$cat <<EOM
+
+By default, $package will be installed in $dflt/bin, manual
+pages under $dflt/man, etc..., i.e. with $dflt as prefix for
+all installation directories. Typically set to /usr/local, but you
+may choose /usr if you wish to install $package among your system
+binaries. If you wish to have binaries under /bin but manual pages
+under /usr/local/man, that's ok: you will be prompted separately
+for each of the installation directories, the prefix being only used
+to set the defaults.
+
+EOM
+fn=d~
+rp='Installation prefix to use?'
+. ./getfile
+oldprefix=''
+case "$prefix" in
+'') ;;
+*)
+ case "$ans" in
+ "$prefix") ;;
+ *) oldprefix="$prefix";;
+ esac
+ ;;
+esac
+prefix="$ans"
+prefixexp="$ansexp"
+
diff --git a/mcon/U/prefshell.U b/mcon/U/prefshell.U
new file mode 100644
index 0000000..315f689
--- /dev/null
+++ b/mcon/U/prefshell.U
@@ -0,0 +1,60 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: prefshell.U,v $
+?RCS: Revision 3.0.1.2 1994/10/29 16:28:13 ram
+?RCS: patch36: added SHELL temporary since metalint now sees ${SHELL}
+?RCS:
+?RCS: Revision 3.0.1.1 1993/09/13 16:11:47 ram
+?RCS: patch10: non-portable var substitution was used (WAD)
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:09:34 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:prefshell: cat package Getfile Oldconfig ksh csh bash
+?MAKE: -pick add $@ %<
+?S:prefshell:
+?S: This variable contains the eventual value of the PREFSHELL symbol,
+?S: which contains the full name of the preferred user shell on this
+?S: system. Usual values are /bin/csh, /bin/ksh, /bin/sh.
+?S:.
+?C:PREFSHELL:
+?C: This symbol contains the full name of the preferred user shell on this
+?C: system. Usual values are /bin/csh, /bin/ksh, /bin/sh.
+?C:.
+?H:#define PREFSHELL "$prefshell" /**/
+?H:.
+?T:SHELL
+: find out which shell people like to use most
+case "$prefshell" in
+'')
+ case "$ksh $bash $csh" in
+ */ksh*) dflt="$ksh" ;;
+ */bash*) dflt="$bash" ;;
+ */csh*) dflt="$csh" ;;
+ *) dflt='/bin/sh' ;;
+ esac
+ ;;
+*) dflt="$prefshell";;
+esac
+?X: Some shells (Ultrix) do not understand ${SHELL:-/bin/sh}, sigh!
+$cat <<EOM
+
+Give the full path name of the shell most people like to use on your system.
+This will be used by $package whenever the user wants to get a shell
+escape (for instance) and is not necessarily the same as the shell you are
+currently using (${SHELL-/bin/sh}).
+
+EOM
+fn=f/~
+rp='Preferred shell to be used?'
+. ./getfile
+prefshell=$ans
+
diff --git a/mcon/U/privlib.U b/mcon/U/privlib.U
new file mode 100644
index 0000000..ce166aa
--- /dev/null
+++ b/mcon/U/privlib.U
@@ -0,0 +1,96 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: privlib.U,v $
+?RCS: Revision 3.0.1.4 1995/09/25 09:17:09 ram
+?RCS: patch59: unit is now forced to the top of Configure, if possible
+?RCS:
+?RCS: Revision 3.0.1.3 1995/01/30 14:44:23 ram
+?RCS: patch49: can now handle installation prefix changes (from WED)
+?RCS:
+?RCS: Revision 3.0.1.2 1994/08/29 16:31:52 ram
+?RCS: patch32: now uses installation prefix
+?RCS:
+?RCS: Revision 3.0.1.1 1993/09/13 16:12:34 ram
+?RCS: patch10: added support for /local/lib (WED)
+?RCS: patch10: prompt phrasing made more explicit (WED)
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:09:35 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:privlib privlibexp installprivlib: afs package cat Getfile \
+ Oldconfig Prefixit test
+?MAKE: -pick add $@ %<
+?Y:TOP
+?S:privlib:
+?S: This variable contains the eventual value of the PRIVLIB symbol,
+?S: which is the name of the private library for this package. It may
+?S: have a ~ on the front. It is up to the makefile to eventually create
+?S: this directory while performing installation (with ~ substitution).
+?S:.
+?S:privlibexp:
+?S: This variable is the ~name expanded version of privlib, so that you
+?S: may use it directly in Makefiles or shell scripts.
+?S:.
+?S:installprivlib:
+?S: This variable is really the same as privlibexp but may differ on
+?S: those systems using AFS. For extra portability, only this variable
+?S: should be used in makefiles.
+?S:.
+?C:PRIVLIB:
+?C: This symbol contains the name of the private library for this package.
+?C: The library is private in the sense that it needn't be in anyone's
+?C: execution path, but it should be accessible by the world. The program
+?C: should be prepared to do ~ expansion.
+?C:.
+?C:PRIVLIB_EXP:
+?C: This symbol contains the ~name expanded version of PRIVLIB, to be used
+?C: in programs that are not prepared to deal with ~ expansion at run-time.
+?C:.
+?H:#define PRIVLIB "$privlib" /**/
+?H:#define PRIVLIB_EXP "$privlibexp" /**/
+?H:.
+: determine where private executables go
+set dflt privlib lib/$package
+eval $prefixit
+$cat <<EOM
+
+There are some auxiliary files for $package that need to be put into a
+private library directory that is accessible by everyone.
+
+EOM
+fn=d~+
+rp='Pathname where the private library files will reside?'
+. ./getfile
+if $test "X$privlibexp" != "X$ansexp"; then
+ installprivlib=''
+fi
+privlib="$ans"
+privlibexp="$ansexp"
+if $afs; then
+ $cat <<EOM
+
+Since you are running AFS, I need to distinguish the directory in which
+private files reside from the directory in which they are installed (and from
+which they are presumably copied to the former directory by occult means).
+
+EOM
+ case "$installprivlib" in
+ '') dflt=`echo $privlibexp | sed 's#^/afs/#/afs/.#'`;;
+ *) dflt="$installprivlib";;
+ esac
+ fn=de~
+ rp='Where will private files be installed?'
+ . ./getfile
+ installprivlib="$ans"
+else
+ installprivlib="$privlibexp"
+fi
+
diff --git a/mcon/U/prototype.U b/mcon/U/prototype.U
new file mode 100644
index 0000000..ff4f85b
--- /dev/null
+++ b/mcon/U/prototype.U
@@ -0,0 +1,117 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: prototype.U,v $
+?RCS: Revision 3.0.1.3 1994/05/06 15:11:49 ram
+?RCS: patch23: ensure cc flags used when looking for prototype support
+?RCS:
+?RCS: Revision 3.0.1.2 1994/01/24 14:15:36 ram
+?RCS: patch16: prototype handling macros now appear only when needed
+?RCS:
+?RCS: Revision 3.0.1.1 1993/08/25 14:03:12 ram
+?RCS: patch6: defines were referring to non-existent VOID symbol
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:09:36 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:prototype: Myread Oldconfig cat +cc +ccflags rm Setvar
+?MAKE: -pick add $@ %<
+?S:prototype:
+?S: This variable holds the eventual value of CAN_PROTOTYPE, which
+?S: indicates the C compiler can handle function prototypes.
+?S:.
+?C:CAN_PROTOTYPE ~ %<:
+?C: If defined, this macro indicates that the C compiler can handle
+?C: function prototypes.
+?C:.
+?C:DOTS:
+?C: This macro is used to specify the ... in function prototypes which
+?C: have arbitrary additional arguments.
+?C:.
+?C:NXT_ARG:
+?C: This macro is used to separate arguments in the declared argument list.
+?C:.
+?C:P_FUNC:
+?C: This macro is used to declare "private" (static) functions.
+?C: It takes three arguments: the function type and name, a parenthesized
+?C: traditional (comma separated) argument list, and the declared argument
+?C: list (in which arguments are separated with NXT_ARG, and additional
+?C: arbitrary arguments are specified with DOTS). For example:
+?C:
+?C: P_FUNC(int foo, (bar, baz), int bar NXT_ARG char *baz[])
+?C:.
+?C:P_FUNC_VOID:
+?C: This macro is used to declare "private" (static) functions that have
+?C: no arguments. The macro takes one argument: the function type and name.
+?C: For example:
+?C:
+?C: P_FUNC_VOID(int subr)
+?C:.
+?C:V_FUNC:
+?C: This macro is used to declare "public" (non-static) functions.
+?C: It takes three arguments: the function type and name, a parenthesized
+?C: traditional (comma separated) argument list, and the declared argument
+?C: list (in which arguments are separated with NXT_ARG, and additional
+?C: arbitrary arguments are specified with DOTS). For example:
+?C:
+?C: V_FUNC(int main, (argc, argv), int argc NXT_ARG char *argv[])
+?C:.
+?C:V_FUNC_VOID:
+?C: This macro is used to declare "public" (non-static) functions that have
+?C: no arguments. The macro takes one argument: the function type and name.
+?C: For example:
+?C:
+?C: V_FUNC_VOID(int fork)
+?C:.
+?C:_ (P):
+?C: This macro is used to declare function parameters for folks who want
+?C: to make declarations with prototypes using a different style than
+?C: the above macros. Use double parentheses. For example:
+?C:
+?C: int main _((int argc, char *argv[]));
+?C:.
+?H:?%<:#$prototype CAN_PROTOTYPE /**/
+?H:?%<:#ifdef CAN_PROTOTYPE
+?H:?NXT_ARG:#define NXT_ARG ,
+?H:?DOTS:#define DOTS , ...
+?H:?V_FUNC:#define V_FUNC(name, arglist, args)name(args)
+?H:?P_FUNC:#define P_FUNC(name, arglist, args)static name(args)
+?H:?V_FUNC_VOID:#define V_FUNC_VOID(name)name(void)
+?H:?P_FUNC_VOID:#define P_FUNC_VOID(name)static name(void)
+?H:?_:#define _(args) args
+?H:?%<:#else
+?H:?NXT_ARG:#define NXT_ARG ;
+?H:?DOTS:#define DOTS
+?H:?V_FUNC:#define V_FUNC(name, arglist, args)name arglist args;
+?H:?P_FUNC:#define P_FUNC(name, arglist, args)static name arglist args;
+?H:?V_FUNC_VOID:#define V_FUNC_VOID(name)name()
+?H:?P_FUNC_VOID:#define P_FUNC_VOID(name)static name()
+?H:?_:#define _(args) ()
+?H:?%<:#endif
+?H:.
+?W:%<:NXT_ARG DOTS V_FUNC P_FUNC V_FUNC_VOID P_FUNC_VOID _
+?LINT:set prototype
+: Cruising for prototypes
+echo " "
+echo "Checking out function prototypes..." >&4
+$cat >prototype.c <<'EOCP'
+int main(int argc, char *argv[]) { (void) argc; (void) argv; return 0; }
+EOCP
+if $cc $ccflags -c prototype.c; then
+ echo "Your C compiler appears to support function prototypes."
+ val="$define"
+else
+ echo "Your C compiler doesn't seem to understand function prototypes."
+ val="$undef"
+fi
+set prototype
+eval $setvar
+$rm -f prototype*
+
diff --git a/mcon/U/ptrsize.U b/mcon/U/ptrsize.U
new file mode 100644
index 0000000..ed77a4a
--- /dev/null
+++ b/mcon/U/ptrsize.U
@@ -0,0 +1,53 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, 2012 Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:ptrsize: Assert Myread cat rm_try +cc +ccflags echo n c
+?MAKE: -pick add $@ %<
+?S:ptrsize:
+?S: This variable contains the value of the PTRSIZE symbol, which
+?S: indicates to the C program how many bytes there are in a pointer.
+?S:.
+?C:PTRSIZE:
+?C: This symbol contains the size of a pointer, so that the C preprocessor
+?C: can make decisions based on it.
+?C:.
+?H:#define PTRSIZE $ptrsize
+?H:.
+?T:size
+: check for length of pointer
+echo " "
+$echo $n "Checking to see how big your pointers are...$c" >&4
+for size in 2 4 8 16 error; do
+ $cat >try.c <<EOCP
+#include "static_assert.h"
+char *foo;
+int main()
+{
+ STATIC_ASSERT($size == sizeof(foo));
+ return 0;
+}
+EOCP
+ if $cc -c $ccflags try.c >/dev/null 2>&1; then break; fi
+done
+case "$size" in
+error)
+ echo " cannot compute it." >&4
+ dflt=4
+ rp="What is the size of a pointer type (in bytes)?"
+ . ./myread
+ ptrsize="$ans"
+ ;;
+*)
+ echo " $size bytes." >&4
+ ptrsize=$size
+ ;;
+esac
+$rm_try
+
diff --git a/mcon/U/randbits.U b/mcon/U/randbits.U
new file mode 100644
index 0000000..b633b17
--- /dev/null
+++ b/mcon/U/randbits.U
@@ -0,0 +1,83 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: randbits.U,v $
+?RCS: Revision 3.0.1.1 1997/02/28 16:19:29 ram
+?RCS: patch61: added <unistd.h> and <stdlib.h> to the C program test
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:09:38 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: This unit has been somewhat made obsolete with creation of the
+?X: randfunc function (which finds out how to generate random
+?X: numbers between 0 and 1.
+?X:
+?MAKE:randbits: cat rm Myread cc i_unistd i_stdlib
+?MAKE: -pick add $@ %<
+?S:randbits:
+?S: This variable contains the eventual value of the RANDBITS symbol,
+?S: which indicates to the C program how many bits of random number
+?S: the rand() function produces.
+?S:.
+?C:RANDBITS:
+?C: This symbol contains the number of bits of random number the rand()
+?C: function produces. Usual values are 15, 16, and 31.
+?C:.
+?H:#define RANDBITS $randbits /**/
+?H:.
+: check for size of random number generator
+echo " "
+case "$randbits" in
+'')
+ echo "Checking to see how many bits your rand function produces..." >&4
+ $cat >try.c <<EOCP
+#$i_unistd I_UNISTD
+#$i_stdlib I_STDLIB
+#include <stdio.h>
+#ifdef I_UNISTD
+# include <unistd.h>
+#endif
+#ifdef I_STDLIB
+# include <stdlib.h>
+#endif
+EOCP
+ $cat >>try.c <<'EOCP'
+int main()
+{
+ register int i;
+ register unsigned long tmp;
+ register unsigned long max = 0L;
+
+ for (i = 1000; i; i--) {
+ tmp = (unsigned long)rand();
+ if (tmp > max) max = tmp;
+ }
+ for (i = 0; max; i++)
+ max /= 2;
+ printf("%d\n",i);
+}
+EOCP
+ if $cc -o try try.c >/dev/null 2>&1 ; then
+ dflt=`try`
+ else
+ dflt='?'
+ echo "(I can't seem to compile the test program...)"
+ fi
+ ;;
+*)
+ dflt="$randbits"
+ ;;
+esac
+rp='How many bits does your rand() function produce?'
+. ./myread
+randbits="$ans"
+$rm -f try.c try
+
diff --git a/mcon/U/randfunc.U b/mcon/U/randfunc.U
new file mode 100644
index 0000000..850e634
--- /dev/null
+++ b/mcon/U/randfunc.U
@@ -0,0 +1,164 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: randfunc.U,v $
+?RCS: Revision 3.0 1993/08/18 12:09:39 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: This is the new unit that should be used when random
+?X: functions are to be used. It thus makes randbits.U obsolete.
+?X:
+?MAKE:randfunc mrand seedfunc nrandbits: cat +cc rm test Myread Csym
+?MAKE: -pick add $@ %<
+?S:randfunc:
+?S: Indicates the name of the random number function to use.
+?S: Values include drand48, random, and rand. In C programs,
+?S: the 'nrand' macro is defined to generate uniformly distributed
+?S: random numbers over the range [0., 1.] (see mrand and nrand).
+?S:.
+?S:mrand:
+?S: Indicates the macro to be used to generate normalized
+?S: random numbers. Uses randfunc, often divided by
+?S: (double) ((1 << nrandbits) -1) in order to normalize the result.
+?S: In C programs, the macro 'nrand' is maped on mrand.
+?S:.
+?S:seedfunc:
+?S: Indicates the random number generating seed function.
+?S: Values include srand48, srandom, and srand.
+?S:.
+?S:nrandbits:
+?S: Indicates how many bits are produced by the function used to
+?S: generate normalized random numbers.
+?S:.
+?C:nrand:
+?C: This macro is to be used to generate uniformly distributed
+?C: random numbers over the range [0., 1.].
+?C:.
+?C:seednrand:
+?C: This symbol defines the macro to be used in seeding the
+?C: random number generator (see nrand).
+?C:.
+?H:#define nrand() $mrand /**/
+?H:#define seednrand(x) $seedfunc(x) /**/
+?H:.
+?T:cont val
+?LINT:nothere $nrandbits)
+: How can we generate normalized random numbers ?
+echo " "
+case "$randfunc" in
+'')
+ if set drand48 val -f; eval $csym; $val; then
+ dflt="drand48"
+ echo "Good, found drand48()." >&4
+ elif set random val -f; eval $csym; $val; then
+ dflt="random"
+ echo "OK, found random()." >&4
+ else
+ dflt="rand"
+ echo "Yick, looks like I have to use rand()." >&4
+ fi
+ echo " "
+ ;;
+*)
+ dflt="$randfunc"
+ ;;
+esac
+cont=true
+while $test "$cont"; do
+ rp="Use which function to generate random numbers?"
+ . ./myread
+?X: Invalidates nrandbits if the answer is not the default so
+?X: that the value stored in config.sh will not be used when
+?X: we change our random function.
+ if $test "$ans" = "$dflt"; then
+ : null
+ else
+ nrandbits=''
+ fi
+ randfunc="$ans"
+ if set $ans val -f; eval $csym; $val; then
+ cont=''
+ else
+ dflt=n
+ rp="Function $ans does not exists. Use that name anyway?"
+ . ./myread
+ dflt=rand
+ case "$ans" in
+ [yY]*) cont='';;
+ esac
+ fi
+ case "$cont" in
+ '')
+ case "$randfunc" in
+ drand48)
+ mrand="drand48()"
+ seedfunc="srand48"
+ ;;
+ rand*)
+ case "$nrandbits" in
+ '')
+echo "Checking to see how many bits your $randfunc() function produces..." >&4
+ $cat >try.c <<EOCP
+#include <stdio.h>
+int main()
+{
+ register int i;
+ register unsigned long tmp;
+ register unsigned long max = 0L;
+ extern long random();
+
+ for (i = 1000; i; i--) {
+ tmp = (unsigned long)$randfunc();
+ if (tmp > max) max = tmp;
+ }
+ for (i = 0; max; i++)
+ max /= 2;
+ printf("%d\n",i);
+}
+EOCP
+ if $cc -o try try.c >/dev/null 2>&1 ; then
+ dflt=`try`
+ else
+ dflt='?'
+ echo "(I can't seem to compile the test program...)"
+ fi
+ ;;
+ *)
+ dflt="$nrandbits"
+ ;;
+ esac
+ rp="How many bits does your $randfunc() function produce?"
+ . ./myread
+ nrandbits="$ans"
+ $rm -f try.c try
+ mrand="($randfunc() / (double) ((1 << $nrandbits) -1))"
+ seedfunc="srand"
+ ;;
+?X: The following is provided just in case...
+ *)
+ dflt="31"
+ rp="How many bits does your $randfunc() function produce?"
+ . ./myread
+ nrandbits="$ans"
+ seedfunc="s$randfunc"
+ mrand="($randfunc() / (double) ((1 << $nrandbits) -1))"
+ if set $seedfunc val -f; eval $csym; $val; then
+ echo "(Using $seedfunc() to seed random generator)"
+ else
+ echo "(Warning: no $seedfunc() to seed random generator)"
+ seedfunc=rand
+ fi
+ ;;
+ esac
+ ;;
+ esac
+done
+
diff --git a/mcon/U/rcs_branch.U b/mcon/U/rcs_branch.U
new file mode 100644
index 0000000..5898140
--- /dev/null
+++ b/mcon/U/rcs_branch.U
@@ -0,0 +1,43 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: rcs_branch.U,v $
+?RCS: Revision 3.0 1993/08/18 12:09:40 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:rcs_branch: Myread contains Loc
+?MAKE: -pick add $@ %<
+?S:rcs_branch:
+?S: This variable will hold "true" if rcs can take the -b<revision>
+?S: option, which can make Life Easier on those folks who like to run
+?S: rcsdiff manually.
+?S:.
+?T:xxx
+: Tra la la la la
+echo " "
+echo "Checking to see if RCS understands the -b switch..." >&4
+xxx=`./loc rcs '' $pth`
+case "$xxx" in
+'')
+ rcs_branch=false
+ echo "Oh. You don't seem to have RCS here."
+ ;;
+*)
+ rcs > rcsbranch.out 2>&1
+ if $contains 'b\[rev\]' rcsbranch.out >/dev/null 2>&1 ; then
+ rcs_branch=true
+ echo "Nice! Your RCS is spiffy!"
+ else
+ rcs_branch=false
+ echo "Well, at least you have RCS. You know, a newer version is available."
+ fi
+ ;;
+esac
+
diff --git a/mcon/U/registers.U b/mcon/U/registers.U
new file mode 100644
index 0000000..f61f290
--- /dev/null
+++ b/mcon/U/registers.U
@@ -0,0 +1,103 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: registers.U,v $
+?RCS: Revision 3.0.1.2 1997/02/28 16:19:41 ram
+?RCS: patch61: removed empty ?LINT lines
+?RCS:
+?RCS: Revision 3.0.1.1 1994/10/29 16:28:33 ram
+?RCS: patch36: call ./Cppsym explicitly instead of relying on PATH
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:09:41 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:registers reg1 reg2 reg3 reg4 reg5 reg6 reg7 reg8 reg9 reg10 reg11 \
+ reg12 reg13 reg14 reg15 reg16: awk rm Cppsym Myread Oldconfig
+?MAKE: -pick add $@ %<
+?S:registers:
+?S: This variable contains the number of register declarations paid
+?S: attention to by the C compiler.
+?S:.
+?S:reg1:
+?S: This variable, along with reg2, reg3, etc. contains the eventual
+?S: value for the symbols register1, register2, register3, etc. It has
+?S: either the value "register" or is null.
+?S:.
+?C:register1:
+?C: This symbol, along with register2, register3, etc. is either the word
+?C: "register" or null, depending on whether the C compiler pays attention
+?C: to this many register declarations. The intent is that you don't have
+?C: to order your register declarations in the order of importance, so you
+?C: can freely declare register variables in sub-blocks of code and as
+?C: function parameters. Do not use register<n> more than once per routine.
+?C:.
+?LINT:describe reg2 reg3 reg4 reg5 reg6 reg7 reg8 reg9 reg10 reg11
+?LINT:describe reg12 reg13 reg14 reg15 reg16
+?LINT:known register2 register3 register4 register5 register6 register7
+?LINT:known register8 register9 register10 register11 register12 register13
+?LINT:known register14 register15 register16
+?H:#define register1 $reg1 /**/
+?H:#define register2 $reg2 /**/
+?H:#define register3 $reg3 /**/
+?H:#define register4 $reg4 /**/
+?H:#define register5 $reg5 /**/
+?H:#define register6 $reg6 /**/
+?H:#define register7 $reg7 /**/
+?H:#define register8 $reg8 /**/
+?H:#define register9 $reg9 /**/
+?H:#define register10 $reg10 /**/
+?H:#define register11 $reg11 /**/
+?H:#define register12 $reg12 /**/
+?H:#define register13 $reg13 /**/
+?H:#define register14 $reg14 /**/
+?H:#define register15 $reg15 /**/
+?H:#define register16 $reg16 /**/
+?H:.
+?F:!.foo
+: see how many register declarations we want to use
+case "$registers" in
+'')
+ if ./Cppsym vax; then
+ dflt=6
+ elif ./Cppsym sun mc68000 mips; then
+ dflt=10
+ elif ./Cppsym pyr; then
+ dflt=14
+ elif ./Cppsym ns32000 ns16000; then
+ dflt=5
+ elif ./Cppsym $smallmach; then
+ dflt=3
+ else
+ : if you have any other numbers for me, please send them in
+ dflt=6
+ fi;;
+*) dflt=$registers ;;
+esac
+?LINT:set reg2 reg3 reg4 reg5 reg6 reg7 reg8 reg9 reg10 reg11
+?LINT:set reg12 reg13 reg14 reg15 reg16
+cat <<EOM
+
+Different C compilers on different machines pay attention to different numbers
+of register declarations. About how many register declarations in each routine
+does your C compiler pay attention to? (OK to guess)
+
+EOM
+rp="Maximum register declarations?"
+. ./myread
+registers=$ans
+reg1=''
+$awk "BEGIN { for (i=1; i<=16; i++) printf \"reg%d=''\n\", i}" \
+ </dev/null >.foo
+. ./.foo
+$awk "BEGIN { for (i=1; i<=$registers; i++) printf \"reg%d=register\n\", i}" \
+ </dev/null >.foo
+. ./.foo
+$rm -f .foo
+
diff --git a/mcon/U/rootid.U b/mcon/U/rootid.U
new file mode 100644
index 0000000..ec0b196
--- /dev/null
+++ b/mcon/U/rootid.U
@@ -0,0 +1,35 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: rootid.U,v $
+?RCS: Revision 3.0.1.1 1995/01/30 14:45:36 ram
+?RCS: patch49: now only prints a single empty line when outputting something
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:09:42 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:rootid: sed
+?MAKE: -pick add $@ %<
+?S:rootid:
+?S: This variable contains the eventual value of the ROOTID symbol,
+?S: which is the uid of root.
+?S:.
+?C:ROOTID:
+?C: This symbol contains the uid of root, normally 0.
+?C:.
+?H:#define ROOTID $rootid /**/
+?H:.
+: determine root id
+rootid=`$sed -e "/^root:/{s/^[^:]*:[^:]*:\([^:]*\).*"'$'"/\1/" -e "q" -e "}" -e "d" </etc/passwd`
+case "$rootid" in
+'') rootid=0 ;;
+*) echo " "; echo "Root uid = $rootid" >&4 ;;
+esac
+
diff --git a/mcon/U/sbrksmart.U b/mcon/U/sbrksmart.U
new file mode 100644
index 0000000..c07e9b2
--- /dev/null
+++ b/mcon/U/sbrksmart.U
@@ -0,0 +1,85 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: sbrksmart.U,v $
+?RCS: Revision 3.0.1.2 1995/01/11 15:35:41 ram
+?RCS: patch45: now sets sbrksmart to undef explicitly when lacking sbrk()
+?RCS: patch45: forgot a cast when using return value from sbrk()
+?RCS:
+?RCS: Revision 3.0.1.1 1994/01/24 14:16:45 ram
+?RCS: patch16: created
+?RCS:
+?MAKE:sbrksmart: cat d_sbrk +cc +ccflags +libs rm
+?MAKE: -pick add $@ %<
+?S:sbrksmart:
+?S: This variable conditionally defines HAS_SMART_SBRK if the sbrk()
+?S: routine honors a negative argument to lower the break value.
+?S:.
+?C:HAS_SMART_SBRK:
+?C: This symbol is defined when the sbrk() system call may be used with
+?C: a negative argument to lower the break value, therefore releasing
+?C: core to the system. If not, you'd probably be better off using the
+?C: mmap() system call.
+?C:.
+?H:#$sbrksmart HAS_SMART_SBRK /**/
+?H:.
+?T:dumb
+?F:!sbrk
+: see whether sbrk can release core to the kernel
+echo " "
+case "$d_sbrk" in
+"$define")
+ echo "Let's see if your sbrk() is smart enough to release core..." >&4
+ $cat > sbrk.c <<EOC
+#define INC 256 /* Small enough to be less than a page size */
+
+int main()
+{
+ char *obrk = (char *) sbrk(0);
+ char *nbrk;
+
+ nbrk = (char *) sbrk(INC);
+ if (nbrk == (char *) -1)
+ exit(1); /* Not enough memory */
+ if (nbrk != obrk)
+ exit(2); /* Unreliable sbrk() */
+ nbrk = (char *) sbrk(-INC);
+ if (nbrk == (char *) -1)
+ exit(3); /* May have understood negative arg as huge positive */
+ if (obrk != (char *) sbrk(0))
+ exit(4); /* Not smart, definitely */
+
+ exit(0); /* Ok */
+}
+EOC
+ sbrksmart="$undef"
+ dumb='-- assuming dumb sbrk().'
+ if $cc $ccflags -o sbrk sbrk.c $libs >/dev/null 2>&1; then
+ ./sbrk >/dev/null 2>&1
+ case $? in
+ 0) sbrksmart="$define"
+ echo "Yes, it can be used with negative values." ;;
+ 1) echo "Sorry, not enough memory $dumb" ;;
+ 2) echo "No it's not, and besides it seems to be buggy..." ;;
+ 3) echo "No, it fails with negative values." ;;
+ 4) echo "Nope, your sbrk() is too dumb." ;;
+ *) echo "Err... Unexpected result $dumb" ;;
+ esac
+ else
+ echo "(Could not compile test program $dumb)"
+ fi
+ ;;
+*)
+ echo "Since you don't have sbrk(), let's forget about the smart test!"
+ sbrksmart="$undef"
+ ;;
+esac
+$rm -f sbrk sbrk.* core
+
diff --git a/mcon/U/sbrktype.U b/mcon/U/sbrktype.U
new file mode 100644
index 0000000..bb4bcc3
--- /dev/null
+++ b/mcon/U/sbrktype.U
@@ -0,0 +1,44 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: sbrktype.U,v $
+?RCS: Revision 3.0 1993/08/18 12:09:43 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:sbrktype: Myread Oldconfig Loc contains Findhdr
+?MAKE: -pick add $@ %<
+?S:sbrktype:
+?S: This variable defines sbrktype to be something like caddr_t, char *,
+?S: or whatever type is used to declare sbrk() in the kernel.
+?S:.
+?C:Caddr_t (SBRKTYPE):
+?C: This symbol holds the type of a core address. It is inteded to be used
+?C: to safely declare the return type of system calls like sbrk(). It might
+?C: be necessary to include <sys/types.h> as well.
+?C:.
+?H:#define Caddr_t $sbrktype /* <core address> type */
+?H:.
+: see what type sbrk is declared as in the kernel
+case "$sbrktype" in
+'')
+ if $contains 'caddr_t;' `./findhdr sys/types.h` >/dev/null 2>&1 ; then
+ dflt='caddr_t';
+ else
+ dflt='char *';
+ fi
+ ;;
+*) dflt="$sbrktype"
+ ;;
+esac
+echo " "
+rp="What is the return type of sbrk() on this system?"
+. ./myread
+sbrktype="$ans"
+
diff --git a/mcon/U/scriptdir.U b/mcon/U/scriptdir.U
new file mode 100644
index 0000000..c4d10ea
--- /dev/null
+++ b/mcon/U/scriptdir.U
@@ -0,0 +1,110 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: scriptdir.U,v $
+?RCS: Revision 3.0.1.3 1995/09/25 09:17:15 ram
+?RCS: patch59: unit is now forced to the top of Configure, if possible
+?RCS:
+?RCS: Revision 3.0.1.2 1995/01/30 14:46:13 ram
+?RCS: patch49: can now handle installation prefix changes (from WED)
+?RCS:
+?RCS: Revision 3.0.1.1 1994/08/29 16:32:04 ram
+?RCS: patch32: now uses installation prefix
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:09:45 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:scriptdir scriptdirexp installscript: afs cat test Getfile Loc \
+ Oldconfig +bin Prefixit prefixexp Prefixup
+?MAKE: -pick add $@ %<
+?Y:TOP
+?S:scriptdir:
+?S: This variable holds the name of the directory in which the user wants
+?S: to put publicly scripts for the package in question. It is either
+?S: the same directory as for binaries, or a special one that can be
+?S: mounted across different architectures, like /usr/share. Programs
+?S: must be prepared to deal with ~name expansion.
+?S:.
+?S:scriptdirexp:
+?S: This variable is the same as scriptdir, but is filename expanded
+?S: at configuration time, for programs not wanting to bother with it.
+?S:.
+?S:installscript:
+?S: This variable is usually the same as scriptdirexp, unless you are on
+?S: a system running AFS, in which case they may differ slightly. You
+?S: should always use this variable within your makefiles for portability.
+?S:.
+?C:SCRIPTDIR:
+?C: This symbol holds the name of the directory in which the user wants
+?C: to put publicly executable scripts for the package in question. It
+?C: is often a directory that is mounted across diverse architectures.
+?C: Programs must be prepared to deal with ~name expansion.
+?C:.
+?C:SCRIPTDIR_EXP:
+?C: This is the same as SCRIPTDIR, but is filename expanded at
+?C: configuration time, for use in programs not prepared to do
+?C: ~name substitutions at run-time.
+?C:.
+?H:#define SCRIPTDIR "$scriptdir" /**/
+?H:#define SCRIPTDIR_EXP "$scriptdirexp" /**/
+?H:.
+: determine where public executable scripts go
+set scriptdir scriptdir
+eval $prefixit
+case "$scriptdir" in
+'')
+ dflt="$bin"
+ : guess some guesses
+ $test -d /usr/share/scripts && dflt=/usr/share/scripts
+ $test -d /usr/share/bin && dflt=/usr/share/bin
+ $test -d /usr/local/script && dflt=/usr/local/script
+ $test -d $prefixexp/script && dflt=$prefixexp/script
+ set dflt
+ eval $prefixup
+ ;;
+*) dflt="$scriptdir"
+ ;;
+esac
+$cat <<EOM
+
+Some installations have a separate directory just for executable scripts so
+that they can mount it across multiple architectures but keep the scripts in
+one spot. You might, for example, have a subdirectory of /usr/share for this.
+Or you might just lump your scripts in with all your other executables.
+
+EOM
+fn=d~
+rp='Where do you keep publicly executable scripts?'
+. ./getfile
+if $test "X$ansexp" != "X$scriptdirexp"; then
+ installscript=''
+fi
+scriptdir="$ans"
+scriptdirexp="$ansexp"
+if $afs; then
+ $cat <<EOM
+
+Since you are running AFS, I need to distinguish the directory in which
+scripts reside from the directory in which they are installed (and from
+which they are presumably copied to the former directory by occult means).
+
+EOM
+ case "$installscript" in
+ '') dflt=`echo $scriptdirexp | sed 's#^/afs/#/afs/.#'`;;
+ *) dflt="$installscript";;
+ esac
+ fn=de~
+ rp='Where will public scripts be installed?'
+ . ./getfile
+ installscript="$ans"
+else
+ installscript="$scriptdirexp"
+fi
+
diff --git a/mcon/U/selecttype.U b/mcon/U/selecttype.U
new file mode 100644
index 0000000..bdd5d1c
--- /dev/null
+++ b/mcon/U/selecttype.U
@@ -0,0 +1,116 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu>
+?RCS:
+?RCS: $Log: selecttype.U,v $
+?RCS: Revision 3.0.1.3 1997/02/28 16:20:09 ram
+?RCS: patch61: always include <sys/select.h> when available for test
+?RCS:
+?RCS: Revision 3.0.1.2 1995/07/25 14:14:06 ram
+?RCS: patch56: removed harmful spaces in assignment
+?RCS:
+?RCS: Revision 3.0.1.1 1994/06/20 07:06:31 ram
+?RCS: patch30: created by ADO
+?RCS:
+?MAKE:selecttype: cat +cc +ccflags rm Oldconfig Myread \
+ d_fd_set d_select d_socket i_systime i_sysselct i_winsock2 i_syssock
+?MAKE: -pick add $@ %<
+?S:selecttype:
+?S: This variable holds the type used for the 2nd, 3rd, and 4th
+?S: arguments to select. Usually, this is 'fd_set *', if HAS_FD_SET
+?S: is defined, and 'int *' otherwise. This is only useful if you
+?S: have select(), naturally.
+?S:.
+?C:Select_fd_set_t:
+?C: This symbol holds the type used for the 2nd, 3rd, and 4th
+?C: arguments to select. Usually, this is 'fd_set *', if HAS_FD_SET
+?C: is defined, and 'int *' otherwise. This is only useful if you
+?C: have select(), of course.
+?C:.
+?H:#define Select_fd_set_t $selecttype /**/
+?H:.
+?T:xxx yyy
+: check for type of arguments to select. This will only really
+: work if the system supports prototypes and provides one for
+: select.
+case "$d_select" in
+$define)
+ : Make initial guess
+ case "$selecttype" in
+ ''|' ')
+ case "$d_fd_set" in
+ $define) xxx='fd_set *' ;;
+ *) xxx='int *' ;;
+ esac
+ ;;
+ *) xxx="$selecttype"
+ ;;
+ esac
+ : backup guess
+ case "$xxx" in
+ 'fd_set *') yyy='int *' ;;
+ 'int *') yyy='fd_set *' ;;
+ esac
+
+ $cat <<EOM
+
+Checking to see what type of arguments are expected by select().
+EOM
+ $cat >try.c <<EOCP
+#$i_systime I_SYS_TIME
+#$i_sysselct I_SYS_SELECT
+#$i_syssock I_SYS_SOCKET
+#$i_winsock2 I_WINSOCK2
+#$d_socket HAS_SOCKET
+#include <sys/types.h>
+#ifdef HAS_SOCKET
+#ifdef I_SYS_SOCKET
+#include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
+#endif
+#endif
+#ifdef I_SYS_TIME
+#include <sys/time.h>
+#endif
+#ifdef I_SYS_SELECT
+#include <sys/select.h>
+#endif
+#ifdef I_WINSOCK2
+#include <Winsock2.h>
+#endif
+int main()
+{
+ int width;
+ Select_fd_set_t readfds;
+ Select_fd_set_t writefds;
+ Select_fd_set_t exceptfds;
+ struct timeval timeout;
+ select(width, readfds, writefds, exceptfds, &timeout);
+ exit(0);
+}
+EOCP
+ if $cc $ccflags -c -DSelect_fd_set_t="$xxx" try.c >/dev/null 2>&1 ; then
+ selecttype="$xxx"
+ echo "Your system uses $xxx for the arguments to select." >&4
+ elif $cc $ccflags -c -DSelect_fd_set_t="$yyy" try.c >/dev/null 2>&1 ; then
+ selecttype="$yyy"
+ echo "Your system uses $yyy for the arguments to select." >&4
+ else
+ rp='What is the type for the 2nd, 3rd, and 4th arguments to select?'
+ dflt="$xxx"
+ . ./myread
+ selecttype="$ans"
+ fi
+ $rm -f try.[co]
+ ;;
+*) selecttype='int *'
+ ;;
+esac
+
diff --git a/mcon/U/sh.U b/mcon/U/sh.U
new file mode 100644
index 0000000..fafe5b1
--- /dev/null
+++ b/mcon/U/sh.U
@@ -0,0 +1,92 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1997, Chip Salzenberg
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: sh.U,v $
+?RCS: Revision 3.0.1.1 1997/02/28 16:20:13 ram
+?RCS: patch61: created
+?RCS:
+?MAKE:sh: Head
+?MAKE: -pick wipe $@ %<
+?S:sh:
+?S: This variable contains the full pathname of the shell used
+?S: on this system to execute Bourne shell scripts. Usually, this will be
+?S: /bin/sh, though it's possible that some systems will have /bin/ksh,
+?S: /bin/pdksh, /bin/ash, /bin/bash, or even something such as
+?S: D:/bin/sh.exe.
+?S: This unit comes before Options.U, so you can't set sh with a -D
+?S: option, though you can override this (and startsh)
+?S: with -O -Dsh=/bin/whatever -Dstartsh=whatever
+?S:.
+?C:SH_PATH:
+?C: This symbol contains the full pathname to the shell used on this
+?C: on this system to execute Bourne shell scripts. Usually, this will be
+?C: /bin/sh, though it's possible that some systems will have /bin/ksh,
+?C: /bin/pdksh, /bin/ash, /bin/bash, or even something such as
+?C: D:/bin/sh.exe.
+?C:.
+?H:#define SH_PATH "$sh" /**/
+?H:.
+?T:xxx try pth p SYSTYPE
+?LINT:extern maintloc maintname
+?X:
+?X: Be quiet unless something unusual happens because this gets
+?X: loaded up even before options are processed.
+?X: Can't use ./loc because that depends on startsh, which, in turn
+?X: depends on this unit.
+?X:
+: Find the basic shell for Bourne shell scripts
+case "$sh" in
+'')
+?X: SYSTYPE is for some older MIPS systems.
+?X: I do not know if it is still needed.
+ case "$SYSTYPE" in
+ *bsd*|sys5*) xxx="/$SYSTYPE/bin/sh";;
+ *) xxx='/bin/sh';;
+ esac
+ if test -f "$xxx"; then
+ sh="$xxx"
+ else
+ : Build up a list and do a single loop so we can 'break' out.
+ pth=`echo $PATH | sed -e "s/$p_/ /g"`
+ for xxx in sh bash ksh pdksh ash; do
+ for p in $pth; do
+ try="$try ${p}/${xxx}"
+ done
+ done
+ for xxx in $try; do
+ if test -f "$xxx"; then
+ sh="$xxx"
+ break
+ elif test -f "$xxx$_exe"; then
+ sh="$xxx$_exe"
+ break
+ elif test -f "$xxx.exe"; then
+ sh="$xxx.exe"
+ break
+ fi
+ done
+ fi
+ ;;
+esac
+
+?X: fd 4 isn't open yet...
+case "$sh" in
+'') cat >&2 <<EOM
+$me: Fatal Error: I can't find a Bourne Shell anywhere.
+
+Usually it's in /bin/sh. How did you even get this far?
+Please contact me (<$maintname>) at <$maintloc> and
+we'll try to straighten this all out.
+EOM
+ exit 1
+ ;;
+esac
+
diff --git a/mcon/U/shm_for.U b/mcon/U/shm_for.U
new file mode 100644
index 0000000..3f1c7ce
--- /dev/null
+++ b/mcon/U/shm_for.U
@@ -0,0 +1,118 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: shm_for.U,v $
+?RCS: Revision 3.0.1.1 1994/10/29 16:28:37 ram
+?RCS: patch36: call ./Cppsym explicitly instead of relying on PATH
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:09:46 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:shm_for shm_att shm_lim: Cppsym Myread ipc uname
+?MAKE: -pick add $@ %<
+?S:shm_for:
+?S: This variable tells us the type of machine we're expecting the
+?S: shared memory code to run on. The value is available to C programs
+?S: in the C_SHM_FOR manifest.
+?S:.
+?S:shm_att:
+?S: This variable tells us where a shared memory segment should be
+?S: attached. Good values are HIGH, LOW, and ZERO.
+?S:.
+?S:shm_lim:
+?S: This variable tells us if shared memory attached HIGH should
+?S: have an upper limit.
+?S:.
+?X: ----------------------------------------------------------
+?X: It's a potential lose to define anything beginning with SHM...
+?X: At least we can think that S_ stands for "String version of ..." -- HMS
+?X: ----------------------------------------------------------
+?C:S_SHM_FOR ~ %<:
+?C: This symbol identifies what we chose for the target system's
+?C: default shared memory configuration parameters.
+?C:.
+?C:S_SHM_ATT ~ %<:
+?C: This symbol holds the default "place" to attach shared memory.
+?C: Values are "HIGH", "ZERO", and "LOW".
+?C:.
+?C:S_SHM_LIM ~ %<:
+?C: This symbol holds the default upper bound address limit if shared
+?C: memory is attached HIGH. If zero, there is no upper limit.
+?C:.
+?H:?%<:#ifdef SERVE_SHM
+?H:?%<:#define S_SHM_FOR "$shm_for"
+?H:?%<:#define S_SHM_ATT "$shm_att"
+?H:?%<:#define S_SHM_LIM "$shm_lim"
+?H:?%<:#endif
+?H:.
+?W:%<:S_SHM_FOR S_SHM_ATT S_SHM_LIM
+: see how to attach shared memory
+echo " "
+echo "Deciding how to attach shared memory..." >&4
+
+case "$ipc" in
+shm)
+ shm_for='Default case'
+ shm_att='HIGH'
+ shm_lim='0x0'
+ if ./Cppsym tower32 tower32_600; then
+ echo "NCR Towers are usually normal..."
+ : echo "Oh, an NCR Tower."
+ : This works for the 600
+ shm_for='NCR Tower 32'
+ shm_att='LOW'
+ else
+ case "$uname" in
+ */uname)
+ case "`uname -m`" in
+ ACS??68*)
+ echo "Oh, an Altos 3068."
+ shm_for='Altos 3068:'
+ shm_lim='0x800000'
+ ;;
+ esac
+ ;;
+ *)
+ echo "Looks normal to me..."
+ ;;
+ esac
+ fi
+
+ dflt="$shm_for"
+ rp='Description of shared memory configuration?'
+ . ./myread
+ shm_for="$ans"
+
+ dflt="$shm_att"
+ rp='Where should shared memory be attached?'
+ . ./myread
+ shm_att="$ans"
+
+ case "$shm_att" in
+ HIGH)
+ dflt="$shm_lim"
+ rp='What is the upper address limit for shared memory?'
+ . ./myread
+ shm_lim="$ans"
+ ;;
+ *)
+ shm_lim=''
+ ;;
+ esac
+ ;;
+
+*)
+ echo "but you aren't using shared memory so I won't bother." >&4
+ shm_for='NOT CONFIGURED'
+ shm_att='NONE'
+ shm_lim='-1'
+ ;;
+esac
+
diff --git a/mcon/U/sig_name.U b/mcon/U/sig_name.U
new file mode 100644
index 0000000..ff61f82
--- /dev/null
+++ b/mcon/U/sig_name.U
@@ -0,0 +1,157 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: sig_name.U,v $
+?RCS: Revision 3.0.1.5 1997/02/28 16:21:25 ram
+?RCS: patch61: brand new algorithm for sig_name and (new!) sig_num
+?RCS:
+?RCS: Revision 3.0.1.4 1995/07/25 14:14:54 ram
+?RCS: patch56: added <asm/signal.h> lookup for linux
+?RCS:
+?RCS: Revision 3.0.1.3 1995/05/12 12:24:11 ram
+?RCS: patch54: now looks for <linux/signal.h> too (ADO)
+?RCS:
+?RCS: Revision 3.0.1.2 1994/06/20 07:06:57 ram
+?RCS: patch30: final echo was missing to close awk-printed string
+?RCS:
+?RCS: Revision 3.0.1.1 1994/05/06 15:17:55 ram
+?RCS: patch23: signal list now formatted to avoid scroll-ups (ADO)
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:09:47 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:sig_name sig_name_init sig_num sig_num_init sig_count sig_size: \
+ awk Signal Oldconfig rm
+?MAKE: -pick add $@ %<
+?S:sig_name:
+?S: This variable holds the signal names, space separated. The leading
+?S: SIG in signal name is removed. A ZERO is prepended to the
+?S: list. This is currently not used.
+?S:.
+?S:sig_name_init:
+?S: This variable holds the signal names, enclosed in double quotes and
+?S: separated by commas, suitable for use in the SIG_NAME definition
+?S: below. A "ZERO" is prepended to the list, and the list is
+?S: terminated with a plain 0. The leading SIG in signal names
+?S: is removed. See sig_num.
+?S:.
+?S:sig_num:
+?S: This variable holds the signal numbers, space separated. A ZERO is
+?S: prepended to the list (corresponding to the fake SIGZERO), and
+?S: the list is terminated with a 0. Those numbers correspond to
+?S: the value of the signal listed in the same place within the
+?S: sig_name list.
+?S:.
+?S:sig_num_init:
+?S: This variable holds the signal numbers, enclosed in double quotes and
+?S: separated by commas, suitable for use in the SIG_NUM definition
+?S: below. A "ZERO" is prepended to the list, and the list is
+?S: terminated with a plain 0.
+?S:.
+?S:sig_count (sig_name.U):
+?S: This variable holds a number larger than the largest valid
+?S: signal number. This is usually the same as the NSIG macro.
+?S:.
+?S:sig_size:
+?S: This variable contains the number of elements of the sig_name
+?S: and sig_num arrays, excluding the final NULL entry.
+?S:.
+?C:SIG_NAME:
+?C: This symbol contains a list of signal names in order of
+?C: signal number. This is intended
+?C: to be used as a static array initialization, like this:
+?C: char *sig_name[] = { SIG_NAME };
+?C: The signals in the list are separated with commas, and each signal
+?C: is surrounded by double quotes. There is no leading SIG in the signal
+?C: name, i.e. SIGQUIT is known as "QUIT".
+?C: Gaps in the signal numbers (up to NSIG) are filled in with NUMnn,
+?C: etc., where nn is the actual signal number (e.g. NUM37).
+?C: The signal number for sig_name[i] is stored in sig_num[i].
+?C: The last element is 0 to terminate the list with a NULL. This
+?C: corresponds to the 0 at the end of the sig_num list.
+?C:.
+?C:SIG_NUM:
+?C: This symbol contains a list of signal numbers, in the same order as the
+?C: SIG_NAME list. It is suitable for static array initialization, as in:
+?C: int sig_num[] = { SIG_NUM };
+?C: The signals in the list are separated with commas, and the indices
+?C: within that list and the SIG_NAME list match, so it's easy to compute
+?C: the signal name from a number or vice versa at the price of a small
+?C: dynamic linear lookup.
+?C: Duplicates are allowed, but are moved to the end of the list.
+?C: The signal number corresponding to sig_name[i] is sig_number[i].
+?C: if (i < NSIG) then sig_number[i] == i.
+?C: The last element is 0, corresponding to the 0 at the end of
+?C: the sig_name list.
+?C:.
+?C:SIG_COUNT:
+?C: This variable contains a number larger than the largest
+?C: signal number. This is usually the same as the NSIG macro.
+?C:.
+?C:SIG_SIZE:
+?C: This variable contains the number of elements of the sig_name
+?C: and sig_num arrays, excluding the final NULL entry.
+?C:.
+?H:#define SIG_NAME $sig_name_init /**/
+?H:#define SIG_NUM $sig_num_init /**/
+?H:#define SIG_COUNT $sig_count /**/
+?H:#define SIG_SIZE $sig_size /**/
+?H:.
+?T:i doinit
+?F:!= !signal_cmd
+?X: signal.cmd creates a file signal.lst which has two columns:
+?X: NAME number, e.g.
+?X: HUP 1
+?X: The list is sorted on signal number, with duplicates moved to
+?X: the end..
+: generate list of signal names
+echo " "
+case "$sig_name_init" in
+'') doinit=yes ;;
+*) case "$sig_num_init" in
+ ''|*,*) doinit=yes ;;
+ esac ;;
+esac
+case "$doinit" in
+yes)
+ echo "Generating a list of signal names and numbers..." >&4
+ . ./signal_cmd
+ sig_count=`$awk '/^NSIG/ { printf "%d", $2 }' signal.lst`
+ sig_name=`$awk 'BEGIN { printf "ZERO " }
+ !/^NSIG/ { printf "%s ", $1 }' signal.lst`
+ sig_num=`$awk 'BEGIN { printf "0 " }
+ !/^NSIG/ { printf "%d ", $2 }' signal.lst`
+ sig_name_init=`$awk 'BEGIN { printf "\"ZERO\", " }
+ !/^NSIG/ { printf "\"%s\", ", $1 }
+ END { printf "0\n" }' signal.lst`
+ sig_num_init=`$awk 'BEGIN { printf "0, " }
+ !/^NSIG/ { printf "%d, ", $2}
+ END { printf "0\n"}' signal.lst`
+ ;;
+esac
+echo "The following $sig_count signals are available:"
+echo " "
+echo $sig_name | $awk \
+'BEGIN { linelen = 0 }
+{
+ for (i = 1; i <= NF; i++) {
+ name = "SIG" $i " "
+ linelen = linelen + length(name)
+ if (linelen > 70) {
+ printf "\n"
+ linelen = length(name)
+ }
+ printf "%s", name
+ }
+ printf "\n"
+}'
+sig_size=`echo $sig_name | awk '{print NF}'`
+$rm -f signal signal.c signal.awk signal.lst signal_cmd
+
diff --git a/mcon/U/sitearch.U b/mcon/U/sitearch.U
new file mode 100644
index 0000000..f2618a1
--- /dev/null
+++ b/mcon/U/sitearch.U
@@ -0,0 +1,94 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1996, Andy Dougherty
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: sitearch.U,v $
+?RCS: Revision 3.0.1.1 1997/02/28 16:21:30 ram
+?RCS: patch61: created
+?RCS:
+?MAKE:sitearch sitearchexp installsitearch: afs cat Getfile \
+ Oldconfig Prefixit prefix test archname sitelib
+?MAKE: -pick add $@ %<
+?Y:TOP
+?S:sitearch:
+?S: This variable contains the eventual value of the SITEARCH symbol,
+?S: which is the name of the private library for this package. It may
+?S: have a ~ on the front. It is up to the makefile to eventually create
+?S: this directory while performing installation (with ~ substitution).
+?S:.
+?S:sitearchexp:
+?S: This variable is the ~name expanded version of sitearch, so that you
+?S: may use it directly in Makefiles or shell scripts.
+?S:.
+?S:installsitearch:
+?S: This variable is really the same as sitearchexp but may differ on
+?S: those systems using AFS. For extra portability, only this variable
+?S: should be used in makefiles.
+?S:.
+?C:SITEARCH:
+?C: This symbol contains the name of the private library for this package.
+?C: The library is private in the sense that it needn't be in anyone's
+?C: execution path, but it should be accessible by the world. The program
+?C: should be prepared to do ~ expansion.
+?C: The standard distribution will put nothing in this directory.
+?C: Individual sites may place their own extensions and modules in
+?C: this directory.
+?C:.
+?C:SITEARCH_EXP:
+?C: This symbol contains the ~name expanded version of SITEARCH, to be used
+?C: in programs that are not prepared to deal with ~ expansion at run-time.
+?C:.
+?H:#define SITEARCH "$sitearch" /**/
+?H:#define SITEARCH_EXP "$sitearchexp" /**/
+?H:.
+?T:xxx
+: determine where site specific architecture-dependent libraries go.
+xxx=`echo $sitelib/$archname | sed 's!^$prefix!!'`
+: xxx is usually lib/site_perl/archname.
+set sitearch sitearch none
+eval $prefixit
+case "$sitearch" in
+'') dflt="$sitelib/$archname" ;;
+*) dflt="$sitearch" ;;
+esac
+$cat <<EOM
+
+The installation process will also create a directory for
+architecture-dependent site-specific extensions and modules.
+
+EOM
+fn=nd~+
+rp='Pathname for the site-specific architecture-dependent library files?'
+. ./getfile
+if $test "X$sitearchexp" != "X$ansexp"; then
+ installsitearch=''
+fi
+sitearch="$ans"
+sitearchexp="$ansexp"
+if $afs; then
+ $cat <<EOM
+
+Since you are running AFS, I need to distinguish the directory in which
+private files reside from the directory in which they are installed (and from
+which they are presumably copied to the former directory by occult means).
+
+EOM
+ case "$installsitearch" in
+ '') dflt=`echo $sitearchexp | sed 's#^/afs/#/afs/.#'`;;
+ *) dflt="$installsitearch";;
+ esac
+ fn=de~
+ rp='Where will private files be installed?'
+ . ./getfile
+ installsitearch="$ans"
+else
+ installsitearch="$sitearchexp"
+fi
+
diff --git a/mcon/U/sitelib.U b/mcon/U/sitelib.U
new file mode 100644
index 0000000..898b181
--- /dev/null
+++ b/mcon/U/sitelib.U
@@ -0,0 +1,97 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1996, Andy Dougherty
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: sitelib.U,v $
+?RCS: Revision 3.0.1.1 1997/02/28 16:21:35 ram
+?RCS: patch61: created
+?RCS:
+?MAKE:sitelib sitelibexp installsitelib: afs cat Getfile \
+ Oldconfig Prefixit test privlib package sed
+?MAKE: -pick add $@ %<
+?Y:TOP
+?S:sitelib:
+?S: This variable contains the eventual value of the SITELIB symbol,
+?S: which is the name of the private library for this package. It may
+?S: have a ~ on the front. It is up to the makefile to eventually create
+?S: this directory while performing installation (with ~ substitution).
+?S:.
+?S:sitelibexp:
+?S: This variable is the ~name expanded version of sitelib, so that you
+?S: may use it directly in Makefiles or shell scripts.
+?S:.
+?S:installsitelib:
+?S: This variable is really the same as sitelibexp but may differ on
+?S: those systems using AFS. For extra portability, only this variable
+?S: should be used in makefiles.
+?S:.
+?C:SITELIB:
+?C: This symbol contains the name of the private library for this package.
+?C: The library is private in the sense that it needn't be in anyone's
+?C: execution path, but it should be accessible by the world. The program
+?C: should be prepared to do ~ expansion.
+?C: The standard distribution will put nothing in this directory.
+?C: Individual sites may place their own extensions and modules in
+?C: this directory.
+?C:.
+?C:SITELIB_EXP:
+?C: This symbol contains the ~name expanded version of SITELIB, to be used
+?C: in programs that are not prepared to deal with ~ expansion at run-time.
+?C:.
+?H:#define SITELIB "$sitelib" /**/
+?H:#define SITELIB_EXP "$sitelibexp" /**/
+?H:.
+?T:prog
+: determine where site specific libraries go.
+set sitelib sitelib
+eval $prefixit
+case "$sitelib" in
+'')
+?X: remove any trailing -3.0 or other version indentification
+ prog=`echo $package | $sed 's/-*[0-9.]*$//'`
+ dflt="$privlib/site_$prog" ;;
+*) dflt="$sitelib" ;;
+esac
+$cat <<EOM
+
+The installation process will also create a directory for
+site-specific extensions and modules. Some users find it convenient
+to place all local files in this directory rather than in the main
+distribution directory.
+
+EOM
+fn=d~+
+rp='Pathname for the site-specific library files?'
+. ./getfile
+if $test "X$sitelibexp" != "X$ansexp"; then
+ installsitelib=''
+fi
+sitelib="$ans"
+sitelibexp="$ansexp"
+if $afs; then
+ $cat <<EOM
+
+Since you are running AFS, I need to distinguish the directory in which
+private files reside from the directory in which they are installed (and from
+which they are presumably copied to the former directory by occult means).
+
+EOM
+ case "$installsitelib" in
+ '') dflt=`echo $sitelibexp | sed 's#^/afs/#/afs/.#'`;;
+ *) dflt="$installsitelib";;
+ esac
+ fn=de~
+ rp='Where will private files be installed?'
+ . ./getfile
+ installsitelib="$ans"
+else
+ installsitelib="$sitelibexp"
+fi
+
diff --git a/mcon/U/sizetype.U b/mcon/U/sizetype.U
new file mode 100644
index 0000000..f08b4f3
--- /dev/null
+++ b/mcon/U/sizetype.U
@@ -0,0 +1,40 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu>
+?RCS:
+?RCS: $Log: sizetype.U,v $
+?RCS: Revision 3.0.1.1 1994/08/29 16:32:10 ram
+?RCS: patch32: created by ADO
+?RCS:
+?MAKE:sizetype: Myread Typedef
+?MAKE: -pick add $@ %<
+?S:sizetype:
+?S: This variable defines sizetype to be something like size_t,
+?S: unsigned long, or whatever type is used to declare length
+?S: parameters for string functions.
+?S:.
+?C:Size_t:
+?C: This symbol holds the type used to declare length parameters
+?C: for string functions. It is usually size_t, but may be
+?C: unsigned long, int, etc. It may be necessary to include
+?C: <sys/types.h> to get any typedef'ed information.
+?C:.
+?H:#define Size_t $sizetype /* length paramater for string functions */
+?H:.
+: see what type is used for size_t
+set size_t sizetype 'unsigned int' stdio.h sys/types.h
+eval $typedef
+dflt="$sizetype"
+echo " "
+rp="What type is used for the length parameter for string functions?"
+. ./myread
+sizetype="$ans"
+
diff --git a/mcon/U/so.U b/mcon/U/so.U
new file mode 100644
index 0000000..e0bcf88
--- /dev/null
+++ b/mcon/U/so.U
@@ -0,0 +1,50 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: so.U,v $
+?RCS: Revision 3.0.1.2 1994/10/29 16:30:04 ram
+?RCS: patch36: now tells user how he can suppress shared lib lookup (ADO)
+?RCS: patch36: removed echo at the top, since it's now in the here-doc (ADO)
+?RCS:
+?RCS: Revision 3.0.1.1 1994/06/20 07:07:02 ram
+?RCS: patch30: created
+?RCS:
+?X:
+?X: This unit computes the shared-object / shared-lib extension
+?X:
+?MAKE:so: test libpth Loc Myread Oldconfig cat
+?MAKE: -pick add $@ %<
+?S:so:
+?S: This variable holds the extension used to identify shared libraries
+?S: (also known as shared objects) on the system. Usually set to 'so'.
+?S:.
+?T: xxx
+: compute shared library extension
+case "$so" in
+'')
+ if xxx=`./loc libc.sl X $libpth`; $test -f "$xxx"; then
+ dflt='sl'
+ else
+ dflt='so'
+ fi
+ ;;
+*) dflt="$so";;
+esac
+$cat <<EOM
+
+On some systems, shared libraries may be available. Answer 'none' if
+you want to suppress searching of shared libraries for the remainder
+of this configuration.
+
+EOM
+rp='What is the file extension used for shared libraries?'
+. ./myread
+so="$ans"
+
diff --git a/mcon/U/sockopt.U b/mcon/U/sockopt.U
new file mode 100644
index 0000000..1eea5dd
--- /dev/null
+++ b/mcon/U/sockopt.U
@@ -0,0 +1,88 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: sockopt.U,v $
+?RCS: Revision 3.0.1.1 1995/07/25 14:16:14 ram
+?RCS: patch56: obsoleted KEEPALIVE in favor of CAN_KEEPALIVE for consistency
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:09:48 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_keepalive: cat rm contains +cc +ccflags socketlib sockethdr \
+ d_oldsock libs Oldconfig Setvar Findhdr
+?MAKE: -pick add $@ %<
+?S:d_keepalive:
+?S: This symbol conditionally defines CAN_KEEPALIVE which indicates to the C
+?S: program that setsockopt SO_KEEPALIVE will work properly.
+?S:.
+?C:CAN_KEEPALIVE (KEEPALIVE):
+?C: This symbol if defined indicates to the C program that the SO_KEEPALIVE
+?C: option of setsockopt() will work as advertised in the manual.
+?C:.
+?H:#$d_keepalive CAN_KEEPALIVE /**/
+?H:.
+?F:!socket
+?LINT:set d_keepalive
+: see if setsockopt with SO_KEEPALIVE works as advertised
+echo " "
+case "$d_oldsock" in
+"$undef")
+ if $contains SO_KEEPALIVE `./findhdr sys/socket.h` \
+ /dev/null >/dev/null 2>&1
+ then
+ echo "OK, let's see if SO_KEEPALIVE works as advertised..." >&4
+ $cat > socket.c <<EOP
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <netdb.h>
+
+int main()
+{
+ int s = socket(AF_INET, SOCK_STREAM, 0);
+ if (s == -1)
+ exit(1);
+ if (-1 == setsockopt(s, SOL_SOCKET, SO_KEEPALIVE, 0, 0))
+ exit(2);
+ exit(0);
+}
+EOP
+ if $cc $ccflags $sockethdr -o socket socket.c $libs \
+ $socketlib >/dev/null 2>&1; then
+ ./socket >/dev/null 2>&1
+ case $? in
+ 0) echo "Yes, it does!"
+ val="$define";;
+ 1) $cat <<EOM
+(Something went wrong -- Assuming SO_KEEPALIVE is broken)
+EOM
+ val="$undef";;
+ 2) echo "No, it doesn't. Don't trust your manuals!!"
+ val="$undef";;
+ esac
+ else
+ cat <<EOM
+(I can't compile the test program -- Assuming SO_KEEPALIVE is broken)
+EOM
+ val="$undef"
+ fi
+ else
+ echo "Strange!! You have BSD 4.2 sockets but no SO_KEEPALIVE option."
+ val="$undef"
+ fi;;
+*) cat <<EOM
+As you have an old socket interface, you can't have heard of SO_KEEPALIVE.
+EOM
+ val="$undef";;
+esac
+set d_keepalive
+eval $setvar
+$rm -f socket socket.c
+
diff --git a/mcon/U/spitshell.U b/mcon/U/spitshell.U
new file mode 100644
index 0000000..f123fa5
--- /dev/null
+++ b/mcon/U/spitshell.U
@@ -0,0 +1,107 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: spitshell.U,v $
+?RCS: Revision 3.0.1.4 1997/02/28 16:22:12 ram
+?RCS: patch61: removed useless chatter as this is now done very early
+?RCS:
+?RCS: Revision 3.0.1.3 1995/01/11 15:37:01 ram
+?RCS: patch45: use 'test -f' instead of 'test -r' for exec-only cat progs (WED)
+?RCS: patch45: protected "sh -c" within backquotes for Linux and SGI
+?RCS:
+?RCS: Revision 3.0.1.2 1994/08/29 16:33:00 ram
+?RCS: patch32: don't create spitshell under the UU directory
+?RCS: patch32: allow for cat in /bin or /usr/bin
+?RCS:
+?RCS: Revision 3.0.1.1 1993/09/13 16:12:58 ram
+?RCS: patch10: made #!-failure message more friendly (WAD)
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:09:49 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:spitshell shsharp sharpbang: eunicefix sh Head
+?MAKE: -pick add $@ %<
+?S:spitshell:
+?S: This variable contains the command necessary to spit out a runnable
+?S: shell on this system. It is either cat or a grep -v for # comments.
+?S:.
+?S:shsharp:
+?S: This variable tells further Configure units whether your sh can
+?S: handle # comments.
+?S:.
+?S:sharpbang:
+?S: This variable contains the string #! if this system supports that
+?S: construct.
+?S:.
+?F:!sharp
+?T:xcat p
+?X: "paths" comes from Head
+?LINT:extern paths _exe
+: see if sh knows # comments
+?X: This is loaded up early, so avoid being chatty.
+?X: echo " "
+?X: echo "Checking your $sh to see if it knows about # comments..." >&2
+if `$sh -c '#' >/dev/null 2>&1`; then
+?X: echo "Your $sh handles # comments correctly."
+ shsharp=true
+ spitshell=cat
+?X: echo " "
+?X: echo "Okay, let's see if #! works on this system..."
+ xcat=/bin/cat
+ test -f $xcat$_exe || xcat=/usr/bin/cat
+ if test ! -f $xcat$_exe; then
+ for p in `echo $PATH | sed -e "s/$p_/ /g"` $paths; do
+ if test -f $p/cat$_exe; then
+ xcat=$p/cat
+ break
+ fi
+ done
+ if test ! -f $xcat$_exe; then
+ echo "Can't find cat anywhere!"
+ exit 1
+ fi
+ fi
+ echo "#!$xcat" >sharp
+ $eunicefix sharp
+ chmod +x sharp
+ ./sharp > today 2>/dev/null
+ if test -s today; then
+?X: echo "It does."
+ sharpbang='#!'
+ else
+ echo "#! $xcat" > sharp
+ $eunicefix sharp
+ chmod +x sharp
+ ./sharp > today 2>/dev/null
+ if test -s today; then
+?X: echo "It does."
+ sharpbang='#! '
+ else
+?X: echo "Okay, let's see if #! works on this system..."
+?X: echo "It's just a comment."
+ sharpbang=': use '
+ fi
+ fi
+else
+ echo " "
+ echo "Your $sh doesn't grok # comments--I will strip them later on."
+ shsharp=false
+?X: The spitshell script will be perused, so leave it out the UU directory
+ cd ..
+ echo "exec grep -v '^[ ]*#'" >spitshell
+ chmod +x spitshell
+ $eunicefix spitshell
+ spitshell=`pwd`/spitshell
+ cd UU
+ echo "I presume that if # doesn't work, #! won't work either!"
+ sharpbang=': use '
+fi
+rm -f sharp today
+
diff --git a/mcon/U/src.U b/mcon/U/src.U
new file mode 100644
index 0000000..87471e0
--- /dev/null
+++ b/mcon/U/src.U
@@ -0,0 +1,96 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1996, Cygnus Support
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Tom Tromey <tromey@cygnus.com>
+?RCS:
+?RCS: $Log: src.U,v $
+?RCS: Revision 3.0.1.1 1997/02/28 16:23:54 ram
+?RCS: patch61: created
+?RCS:
+?MAKE:src +rsrc: Options package contains
+?MAKE: -pick add $@ %<
+?Y:TOP
+?S:src (srcdir):
+?S: This variable holds the (possibly relative) path of the package source.
+?S: It is up to the Makefile to use this variable and set VPATH accordingly
+?S: to find the sources remotely. Use $pkgsrc to have an absolute path.
+?S:.
+?S:rsrc (relsrcdir):
+?S: This variable holds a potentially relative path to the package
+?S: source. The contents are correct for the configuration environment,
+?S: i.e. there might be an extra .. prepended to get out of the UU dir.
+?S: Configure units should use this, not the src variable.
+?S:.
+: Find the path to the source tree
+case "$src" in
+'') case "$0" in
+ */*) src=`echo $0 | sed -e 's%/[^/][^/]*$%%'`
+ case "$src" in
+ /*) ;;
+ .) ;;
+ *) src=`cd ../$src && pwd` ;;
+ esac
+ ;;
+ *) src='.';;
+ esac;;
+esac
+case "$src" in
+'') src=/
+ rsrc=/
+ ;;
+/*) rsrc="$src";;
+*) rsrc="../$src";;
+esac
+?X:
+?X: Now check whether we have found the right source tree (i.e. the one for the
+?X: package we're about to configure). The original unit from Tom Tromey forced
+?X: the user to pick a unique file from his distribution, and we were merely
+?X: checking the existence of that file. I prefer to rely on Configure (which
+?X: we know *is* present since this unit is part of it!) and look for the
+?X: definition of the package variable, making sure it's the same as ours.
+?X: If it matches, we know we found the right source tree. -- RAM, 15/03/96
+?X:
+if test -f $rsrc/Configure && \
+ $contains "^package='$package'\$" $rsrc/Configure >/dev/null 2>&1
+then
+ : found it, so we are ok.
+else
+?X: Otherwise try "." and up to 4 parent directories...
+?X: Note that we prepend a ".." to get out of the configuration environment.
+ rsrc=''
+ for src in . .. ../.. ../../.. ../../../..; do
+ if test -f ../$src/Configure && \
+ $contains "^package=$package$" ../$src/Configure >/dev/null 2>&1
+ then
+ rsrc=../$src
+ break
+ fi
+ done
+fi
+case "$rsrc" in
+'')
+ cat <<EOM >&4
+
+Sorry, I can't seem to locate the source dir for $package. Please start
+Configure with an explicit path -- i.e. /some/path/Configure.
+
+EOM
+ exit 1
+ ;;
+?X: Don't echo anything if the sources are in . -- they should know already ;-)
+?X: In that case, rsrc is ../. since we lookup from within UU
+../.) rsrc='..';;
+*)
+ echo " "
+ echo "Sources for $package found in \"$src\"." >&4
+ ;;
+esac
+
diff --git a/mcon/U/ssizetype.U b/mcon/U/ssizetype.U
new file mode 100644
index 0000000..019bdaa
--- /dev/null
+++ b/mcon/U/ssizetype.U
@@ -0,0 +1,91 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu>
+?RCS:
+?RCS: $Log: ssizetype.U,v $
+?RCS: Revision 3.0.1.3 1997/02/28 16:24:21 ram
+?RCS: patch61: integrated perl5 concerns for mis-configured sfio
+?RCS:
+?RCS: Revision 3.0.1.2 1994/10/29 16:30:28 ram
+?RCS: patch36: added ?F: line for metalint file checking
+?RCS: patch36: added 'ldflags' to the test compile line (ADO)
+?RCS:
+?RCS: Revision 3.0.1.1 1994/08/29 16:33:06 ram
+?RCS: patch32: created by ADO
+?RCS:
+?MAKE:ssizetype: Myread Typedef sizetype cat rm \
+ +cc +optimize +ccflags +ldflags +libs _o
+?MAKE: -pick add $@ %<
+?S:ssizetype:
+?S: This variable defines ssizetype to be something like ssize_t,
+?S: long or int. It is used by functions that return a count
+?S: of bytes or an error condition. It must be a signed type.
+?S: We will pick a type such that sizeof(SSize_t) == sizeof(Size_t).
+?S:.
+?C:SSize_t:
+?C: This symbol holds the type used by functions that return
+?C: a count of bytes or an error condition. It must be a signed type.
+?C: It is usually ssize_t, but may be long or int, etc.
+?C: It may be necessary to include <sys/types.h> or <unistd.h>
+?C: to get any typedef'ed information.
+?C: We will pick a type such that sizeof(SSize_t) == sizeof(Size_t).
+?C:.
+?H:#define SSize_t $ssizetype /* signed count of bytes */
+?H:.
+?F:!ssize.out !ssize
+: see what type is used for signed size_t
+set ssize_t ssizetype int stdio.h sys/types.h
+eval $typedef
+dflt="$ssizetype"
+?X: Now check out whether sizeof(SSize_t) == sizeof(Size_t)
+$cat > ssize.c <<EOM
+#include <stdio.h>
+#include <sys/types.h>
+#define Size_t $sizetype
+#define SSize_t $dflt
+int main()
+{
+ if (sizeof(Size_t) == sizeof(SSize_t))
+ printf("$dflt\n");
+ else if (sizeof(Size_t) == sizeof(int))
+ printf("int\n");
+ else
+ printf("long\n");
+ fflush(stdout);
+ exit(0);
+}
+EOM
+echo " "
+?X: If $libs contains -lsfio, and sfio is mis-configured, then it
+?X: sometimes (apparently) runs and exits with a 0 status, but with no
+?X: output!. Thus we check with test -s whether we actually got any
+?X: output. I think it has to do with sfio's use of _exit vs. exit,
+?X: but I don't know for sure. --Andy Dougherty 1/27/97.
+if $cc $optimize $ccflags $ldflags -o ssize ssize.c $libs > /dev/null 2>&1 &&
+ ./ssize > ssize.out 2>/dev/null && test -s ssize.out ; then
+ ssizetype=`$cat ssize.out`
+ echo "I'll be using $ssizetype for functions returning a byte count." >&4
+else
+ $cat >&4 <<EOM
+Help! I can't compile and run the ssize_t test program: please enlighten me!
+(This is probably a misconfiguration in your system or libraries, and
+you really ought to fix it. Still, I'll try anyway.)
+
+I need a type that is the same size as $sizetype, but is guaranteed to
+be signed. Common values are ssize_t, int and long.
+
+EOM
+ rp="What signed type is the same size as $sizetype?"
+ . ./myread
+ ssizetype="$ans"
+fi
+$rm -f ssize ssize$_o ssize.*
+
diff --git a/mcon/U/startperl.U b/mcon/U/startperl.U
new file mode 100644
index 0000000..c511a54
--- /dev/null
+++ b/mcon/U/startperl.U
@@ -0,0 +1,95 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: startperl.U,v $
+?RCS: Revision 3.0.1.1 1997/02/28 16:25:06 ram
+?RCS: patch61: warn them if the #! line is too long for their OS
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:09:50 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:startperl: cat rm sharpbang perlpath d_portable Myread
+?MAKE: -pick add $@ %<
+?S:startperl:
+?S: This variable contains the string to put on the front of a perl
+?S: script to make sure (hopefully) that it runs with perl and not some
+?S: shell. Of course, that leading line must be followed by the classical
+?S: perl idiom:
+?S: eval 'exec perl -S $0 ${1+"$@"}'
+?S: if $running_under_some_shell;
+?S: to guarantee perl startup should the shell execute the script. Note
+?S: that this magic incantation is not understood by csh.
+?S:.
+?C:STARTPERL:
+?C: This symbol is the string that should be put on the front of a
+?C: perl script to make sure (hopefully) that it runs with perl and
+?C: not under some shell. That line should be followed by the classical
+?C: invocation magic:
+?C: eval 'exec perl -S $0 ${1+"$@"}'
+?C: if $running_under_some_shell;
+?C: to guarantee perl startup should the shell execute the script at first.
+?C:.
+?H:#define STARTPERL "$startperl"
+?H:.
+?T:pdflt
+?F:!xtry
+: figure out how to guarantee perl startup
+case "$sharpbang" in
+*!)
+?X:
+?X: Make sure the #!$perlpath magic incantation indeed works on this
+?X: system... It might not if the length of the #! hook is greater
+?X: than some hardwired kernel limit. -- RAM, 15/03/96
+?X:
+ $cat >xtry <<EOP
+#!$perlpath
+system("exit 0");
+EOP
+ chmod a+x xtry
+ if ./xtry >/dev/null 2>&1; then
+ $cat <<EOH
+
+I can use the #! construct to start perl on your system. This will make
+startup of perl scripts faster, but may cause problems if you want to share
+those scripts and perl is not in a standard place (/usr/bin/perl) on all your
+platforms. The alternative is to force a shell by starting the script with a
+single ':' character.
+
+EOH
+ pdflt=y
+ else
+ $cat <<EOH
+
+I could use the #! construct to start perl on your system, but using
+ #!$perlpath
+would be too long for your kernel to grok. Indeed, most systems do
+limit the size of the leading #! string to 32 characters.
+
+EOH
+ pdflt=n
+ fi
+ $rm -f xtry
+ case "$startperl" in
+ *!*) dflt=y;;
+ '') case "$d_portable" in
+ "$define") dflt=n;;
+ *) dflt=$pdflt;;
+ esac;;
+ *) dflt=n;;
+ esac
+ rp='Shall I use #! to start up perl?'
+ . ./myread
+ case "$ans" in
+ y*|Y*) startperl="#!$perlpath";;
+ *) startperl=": # use perl";;
+ esac;;
+*) startperl=": # use perl";;
+esac
+
diff --git a/mcon/U/startsh.U b/mcon/U/startsh.U
new file mode 100644
index 0000000..90a4ad9
--- /dev/null
+++ b/mcon/U/startsh.U
@@ -0,0 +1,50 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: startsh.U,v $
+?RCS: Revision 3.0.1.1 1997/02/28 16:25:31 ram
+?RCS: patch61: avoid needless chatter since this is now done very early
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:09:51 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:startsh: sh sharpbang eunicefix
+?MAKE: -pick add $@ %<
+?S:startsh:
+?S: This variable contains the string to put on the front of a shell
+?S: script to make sure (hopefully) that it runs with sh and not some
+?S: other shell.
+?S:.
+?F:!sharp
+: figure out how to guarantee sh startup
+?X: Avoid needless chatter since this is now done very early.
+?X: echo " "
+?X: echo "Checking out how to guarantee sh startup..." >&2
+case "$startsh" in
+'') startsh=${sharpbang}${sh} ;;
+*)
+?X: echo "Let's see if '$startsh' works..." ;;
+esac
+cat >sharp <<EOSS
+$startsh
+set abc
+test "$?abc" != 1
+EOSS
+
+chmod +x sharp
+$eunicefix sharp
+if ./sharp; then
+ : echo "Yup, it does."
+else
+ echo "Hmm... '$startsh' does not guarantee sh startup..."
+ echo "You may have to fix up the shell scripts to make sure $sh runs them."
+fi
+rm -f sharp
+
diff --git a/mcon/U/stdchar.U b/mcon/U/stdchar.U
new file mode 100644
index 0000000..02c9056
--- /dev/null
+++ b/mcon/U/stdchar.U
@@ -0,0 +1,40 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: stdchar.U,v $
+?RCS: Revision 3.0 1993/08/18 12:09:52 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:stdchar: contains Findhdr cppstdin cppminus rm
+?MAKE: -pick add $@ %<
+?S:stdchar:
+?S: This variable conditionally defines STDCHAR to be the type of char
+?S: used in stdio.h. It has the values "unsigned char" or "char".
+?S:.
+?C:STDCHAR:
+?C: This symbol is defined to be the type of char used in stdio.h.
+?C: It has the values "unsigned char" or "char".
+?C:.
+?H:#define STDCHAR $stdchar /**/
+?H:.
+?F:!stdioh
+: see what type of char stdio uses.
+echo " "
+?X: untangle the #include nest
+echo '#include <stdio.h>' | $cppstdin $cppminus > stdioh
+if $contains 'unsigned.*char.*_ptr;' stdioh >/dev/null 2>&1 ; then
+ echo "Your stdio uses unsigned chars." >&4
+ stdchar="unsigned char"
+else
+ echo "Your stdio uses signed chars." >&4
+ stdchar="char"
+fi
+$rm -f stdioh
+
diff --git a/mcon/U/sunscanf.U b/mcon/U/sunscanf.U
new file mode 100644
index 0000000..d0c8fa8
--- /dev/null
+++ b/mcon/U/sunscanf.U
@@ -0,0 +1,55 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: sunscanf.U,v $
+?RCS: Revision 3.0 1993/08/18 12:09:54 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:sunscanf: cat rm Myread +cc +ccflags test Setvar
+?MAKE: -pick add $@ %<
+?S:sunscanf:
+?S: This variable is set if this system runs with the Sun version
+?S: of scanf.
+?S:.
+?C:SUNSCANF:
+?C: This variable is set if this system runs with the Sun version
+?C: of scanf.
+?C:.
+?H:#$sunscanf SUNSCANF /**/
+?H:.
+?LINT:set sunscanf
+: check to see what kinda scanf your using.
+echo " "
+echo "Checking to see what flavor of scanf you have..." >&4
+$cat >scanf.c <<'EOCP'
+int main()
+{
+ float value;
+
+ sscanf("4.5","%g",&value);
+ printf("%d\n", value == 4.5);
+}
+EOCP
+if $cc $ccflags -o scanf scanf.c >/dev/null 2>&1 ; then
+ if $test `scanf` = 0; then
+ echo "Hmm.. seems your not running the USG flavor.."
+ val="$undef"
+ else
+ echo "Uh... your running the USG flavor of scanf."
+ val="$define"
+ fi
+else
+ echo "(I can't seem to compile the test program... Guessing)"
+ val="$undef"
+fi
+set sunscanf
+eval $setvar
+$rm -f scanf*
+
diff --git a/mcon/U/sysman.U b/mcon/U/sysman.U
new file mode 100644
index 0000000..1e21511
--- /dev/null
+++ b/mcon/U/sysman.U
@@ -0,0 +1,50 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: sysman.U,v $
+?RCS: Revision 3.0.1.2 1994/06/20 07:08:43 ram
+?RCS: patch30: now explicitly states that /usr/man/man1 is the default
+?RCS: patch30: added /usr/local/man/man1 to the search list
+?RCS:
+?RCS: Revision 3.0.1.1 1993/09/13 16:13:50 ram
+?RCS: patch10: added support for /local/man/man1 (WAD)
+?RCS: patch10: added temporary syspath variable to cut down on line length
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:09:55 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:sysman: test Loc Oldconfig
+?MAKE: -pick add $@ %<
+?S:sysman:
+?S: This variable holds the place where the manual is located on this
+?S: system. It is not the place where the user wants to put his manual
+?S: pages. Rather it is the place where Configure may look to find manual
+?S: for unix commands (section 1 of the manual usually). See mansrc.
+?S:.
+?T:syspath
+: determine where manual pages are on this system
+echo " "
+case "$sysman" in
+'')
+ syspath='/usr/share/man/man1 /usr/man/man1'
+ syspath="$syspath /usr/man/mann /usr/man/manl /usr/man/local/man1"
+ syspath="$syspath /usr/man/u_man/man1 /usr/share/man/man1"
+ syspath="$syspath /usr/catman/u_man/man1 /usr/man/l_man/man1"
+ syspath="$syspath /usr/local/man/u_man/man1 /usr/local/man/l_man/man1"
+ syspath="$syspath /usr/man/man.L /local/man/man1 /usr/local/man/man1"
+ sysman=`./loc . /usr/man/man1 $syspath`
+ ;;
+esac
+if $test -d "$sysman"; then
+ echo "System manual is in $sysman." >&4
+else
+ echo "Could not find manual pages in source form." >&4
+fi
+
diff --git a/mcon/U/trnl.U b/mcon/U/trnl.U
new file mode 100644
index 0000000..f8fa904
--- /dev/null
+++ b/mcon/U/trnl.U
@@ -0,0 +1,56 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Copyright (c) 1998 Andy Dougherty
+?RCS:
+?RCS: Original author Jarkko Hietaniemi <jhi@iki.fi>
+?RCS: Merged into dist by Andy Dougherty July 13, 1998
+?RCS:
+?MAKE:trnl: Nothing
+?MAKE: -pick add $@ %<
+?S:trnl:
+?S: This variable contains the value to be passed to the tr(1)
+?S: command to transliterate a newline. Typical values are
+?S: '\012' and '\n'. This is needed for EBCDIC systems where
+?S: newline is not necessarily '\012'.
+?S:.
+?T: DJGPP
+: Find the appropriate value for a newline for tr
+?X: We can't use $tr since that would cause a circular dependency via Myread
+?X: dos djgpp uses '\015\012', but reportedly is happy with '\012' in the
+?X: tr command. I don't know why it passes the '\n' test but later
+?X: refuses to work correctly with it. --AD 6/14/98
+if test -n "$DJGPP"; then
+ trnl='\012'
+fi
+if test X"$trnl" = X; then
+ case "`echo foo | tr '\n' x 2>/dev/null`" in
+ foox) trnl='\n' ;;
+ esac
+fi
+if test X"$trnl" = X; then
+ case "`echo foo | tr '\012' x 2>/dev/null`" in
+ foox) trnl='\012' ;;
+ esac
+fi
+if test X"$trnl" = X; then
+ case "`echo foo | tr '\r\n' xy 2>/dev/null`" in
+ fooxy) trnl='\n\r' ;;
+ esac
+fi
+if test X"$trnl" = X; then
+ cat <<EOM >&2
+
+$me: Fatal Error: cannot figure out how to translate newlines with 'tr'.
+
+EOM
+ exit 1
+fi
+
diff --git a/mcon/U/uidtype.U b/mcon/U/uidtype.U
new file mode 100644
index 0000000..ba9368a
--- /dev/null
+++ b/mcon/U/uidtype.U
@@ -0,0 +1,57 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: uidtype.U,v $
+?RCS: Revision 3.0.1.3 1994/08/29 16:33:25 ram
+?RCS: patch32: now uses new Typedef unit to compute type information
+?RCS:
+?RCS: Revision 3.0.1.2 1994/06/20 07:09:36 ram
+?RCS: patch30: comment for uidtype referred to the obsoleted symbol
+?RCS:
+?RCS: Revision 3.0.1.1 1994/05/13 15:28:27 ram
+?RCS: patch27: made conform to its gidtype.U companion
+?RCS: patch27: question now explicitly mentions getuid()
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:09:56 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:uidtype: Myread Typedef Findhdr
+?MAKE: -pick add $@ %<
+?S:uidtype:
+?S: This variable defines Uid_t to be something like uid_t, int,
+?S: ushort, or whatever type is used to declare user ids in the kernel.
+?S:.
+?C:Uid_t (UIDTYPE):
+?C: This symbol holds the type used to declare user ids in the kernel.
+?C: It can be int, ushort, uid_t, etc... It may be necessary to include
+?C: <sys/types.h> to get any typedef'ed information.
+?C:.
+?H:#define Uid_t $uidtype /* UID type */
+?H:.
+?T:xxx
+: see what type uids are declared as in the kernel
+set uid_t uidtype xxx stdio.h sys/types.h
+eval $typedef
+case "$uidtype" in
+xxx)
+ xxx=`./findhdr sys/user.h`
+ set `grep '_ruid;' "$xxx" 2>/dev/null` unsigned short
+ case $1 in
+ unsigned) dflt="$1 $2" ;;
+ *) dflt="$1" ;;
+ esac
+ ;;
+*) dflt="$uidtype";;
+esac
+echo " "
+rp="What is the type for user ids returned by getuid()?"
+. ./myread
+uidtype="$ans"
+
diff --git a/mcon/U/usenm.U b/mcon/U/usenm.U
new file mode 100644
index 0000000..b11f3c9
--- /dev/null
+++ b/mcon/U/usenm.U
@@ -0,0 +1,144 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: usenm.U,v $
+?RCS: Revision 3.0.1.1 1997/02/28 16:26:40 ram
+?RCS: patch61: don't use nm with the GNU C library
+?RCS: patch61: added support for Linux shared libs
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:09:57 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:usenm runnm nm_opt nm_so_opt: cat test Myread Oldconfig grep \
+ d_gnulibc nm egrep rsrc osname Guess
+?MAKE: -pick add $@ %<
+?S:usenm:
+?S: This variable contains 'true' or 'false' depending whether the
+?S: nm extraction is wanted or not.
+?S:.
+?S:runnm:
+?S: This variable contains 'true' or 'false' depending whether the
+?S: nm extraction should be performed or not, according to the value
+?S: of usenm and the flags on the Configure command line.
+?S:.
+?S:nm_opt:
+?S: This variable holds the options that may be necessary for nm.
+?S:.
+?S:nm_so_opt:
+?S: This variable holds the options that may be necessary for nm
+?S: to work on a shared library but that can not be used on an
+?S: archive library. Currently, this is only used by Linux, where
+?S: nm --dynamic is *required* to get symbols from an ELF library which
+?S: has been stripped, but nm --dynamic is *fatal* on an archive library.
+?S: Maybe Linux should just always set usenm=false.
+?S:.
+: see if nm is to be used to determine whether a symbol is defined or not
+?X: If there is enough inquiries, it might be worth to wait for the nm
+?X: extraction. Otherwise, the C compilations might be a better deal.
+?X:
+?X: Don't bother if we're using GNU libc -- skimo
+case "$usenm" in
+'')
+ dflt=''
+ case "$d_gnulibc" in
+ "$define")
+ echo " "
+ echo "$nm probably won't work on the GNU C Library." >&4
+ dflt=n
+ ;;
+ esac
+ case "$dflt" in
+ '')
+ if $test "$osname" = aix -a ! -f /lib/syscalls.exp; then
+ echo " "
+ echo "Whoops! This is an AIX system without /lib/syscalls.exp!" >&4
+ echo "'nm' won't be sufficient on this system." >&4
+ dflt=n
+ fi
+ ;;
+ esac
+ case "$dflt" in
+ '')
+ if ./gnu; then
+ echo " "
+ echo "Hmm... A GNU system without a GNU C Library? Weird..." >&4
+ dflt=n
+ else
+ dflt=`$egrep 'inlibc|csym' $rsrc/Configure | wc -l 2>/dev/null`
+ if $test $dflt -gt 20; then
+ dflt=y
+ else
+ dflt=n
+ fi
+ fi
+ ;;
+ esac
+ ;;
+*)
+ case "$usenm" in
+ true|$define) dflt=y;;
+ *) dflt=n;;
+ esac
+ ;;
+esac
+$cat <<EOM
+
+I can use $nm to extract the symbols from your C libraries. This
+is a time consuming task which may generate huge output on the disk (up
+to 3 megabytes) but that should make the symbols extraction faster. The
+alternative is to skip the 'nm' extraction part and to compile a small
+test program instead to determine whether each symbol is present. If
+you have a fast C compiler and/or if your 'nm' output cannot be parsed,
+this may be the best solution.
+
+EOM
+rp='Shall I use nm to extract C symbols from the libraries?'
+. ./myread
+case "$ans" in
+[Nn]*) usenm=false;;
+*) usenm=true;;
+esac
+
+?X: Name extraction is to be run if 'nm' usage is wanted and if no -r flag
+?X: was provided to configure (in which case we simply re-use the previous
+?X: values).
+runnm=$usenm
+case "$reuseval" in
+true) runnm=false;;
+esac
+
+: nm options which may be necessary
+case "$nm_opt" in
+'') if $test -f /mach_boot; then
+ nm_opt='' # Mach
+ elif $test -d /usr/ccs/lib; then
+ nm_opt='-p' # Solaris (and SunOS?)
+ elif $test -f /dgux; then
+ nm_opt='-p' # DG-UX
+ elif $test -f /lib64/rld; then
+ nm_opt='-p' # 64-bit Irix
+ else
+ nm_opt=''
+ fi;;
+esac
+
+?X: nm options which may be necessary for shared libraries but illegal
+?X: for archive libraries. Thank you, Linux.
+case "$nm_so_opt" in
+'') case "$osname" in
+ *linux*)
+ if $nm --help | $grep 'dynamic' > /dev/null 2>&1; then
+ nm_so_opt='--dynamic'
+ fi
+ ;;
+ esac
+ ;;
+esac
+
diff --git a/mcon/U/usesocks.U b/mcon/U/usesocks.U
new file mode 100644
index 0000000..4520b8c
--- /dev/null
+++ b/mcon/U/usesocks.U
@@ -0,0 +1,46 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Copyright (c) 1999 Jarkko Hietaniemi
+?RCS:
+?MAKE:usesocks: Myread Oldconfig Setvar spackage package
+?MAKE: -pick add $@ %<
+?Y:TOP
+?S:usesocks:
+?S: This variable conditionally defines the USE_SOCKS symbol,
+?S: and indicates that Perl should be built to use SOCKS.
+?S:.
+?C:USE_SOCKS:
+?C: This symbol, if defined, indicates that Perl should
+?C: be built to use socks.
+?C:.
+?H:?%<:#$usesocks USE_SOCKS /**/
+?H:.
+?D:usesocks=''
+?LINT:set usesocks
+: check for requested SOCKS support
+case "$usesocks" in
+$define|true|[yY]*) dflt='y';;
+*) dflt='n';;
+esac
+cat <<EOM
+
+$spackage can be built to use the SOCKS proxy protocol library.
+If this doesn't make any sense to you, just accept the default '$dflt'.
+EOM
+rp="Build $package for SOCKS?"
+. ./myread
+case "$ans" in
+y|Y) val="$define" ;;
+*) val="$undef" ;;
+esac
+set usesocks
+eval $setvar
+
diff --git a/mcon/U/usrinc.U b/mcon/U/usrinc.U
new file mode 100644
index 0000000..3f8ef00
--- /dev/null
+++ b/mcon/U/usrinc.U
@@ -0,0 +1,54 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: usrinc.U,v $
+?RCS: Revision 3.0.1.3 1997/02/28 16:27:12 ram
+?RCS: patch61: don't ask for the include path unless they are on a MIPS
+?RCS:
+?RCS: Revision 3.0.1.2 1995/05/12 12:24:36 ram
+?RCS: patch54: ensure that ./mips always exists (ADO)
+?RCS:
+?RCS: Revision 3.0.1.1 1994/05/06 15:18:31 ram
+?RCS: patch23: ensure usrinc value is preserved across sessions (WED)
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:09:58 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:usrinc: Getfile Oldconfig incpath
+?MAKE: -pick add $@ %<
+?S:usrinc:
+?S: This variable holds the path of the include files, which is
+?S: usually /usr/include. It is mainly used by other Configure units.
+?S:.
+?D:usrinc='/usr/include'
+: What should the include directory be ?
+echo " "
+dflt='/usr/include'
+case "$usrinc" in
+'') dflt="$incpath/usr/include";;
+?X: This is nice, but it does not work on some systems because gcc redirects
+?X: the include to things like ..../gcc45/gcc/4.5.2/include-fixed/stdio.h
+?X: and it does not contain all the files.
+?X:
+?X: $cat >usr.c <<EOC
+?X: #include <stdio.h>
+?X:EOC
+?X: dflt=`$cppstdin $cppminus < usr.c 2>/dev/null | \
+?X: $grep "^[ ]*#.*stdio.h" | $tr -d '"' | \
+?X: $sed -ne "1s,\(.*\)[/\\]stdio.h.*,\1,p" | \
+?X: $awk "{ print \\$$fieldn }"`
+?X: ;;
+*) dflt="$usrinc";;
+esac
+fn=d/
+rp='Where are the include files you want to use?'
+. ./getfile
+usrinc="$ans"
+
diff --git a/mcon/U/vaproto.U b/mcon/U/vaproto.U
new file mode 100644
index 0000000..f165d9f
--- /dev/null
+++ b/mcon/U/vaproto.U
@@ -0,0 +1,65 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Graham Stoney <greyham@research.canon.oz.au>
+?RCS:
+?RCS: $Log: vaproto.U,v $
+?RCS: Revision 3.0.1.1 1994/01/24 14:17:16 ram
+?RCS: patch16: definition of _V now appears only when needed
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:09:59 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:vaproto: prototype i_stdarg Setvar
+?MAKE: -pick add $@ %<
+?S:vaproto:
+?S: This variable conditionally defines CAN_VAPROTO on systems supporting
+?S: prototype declaration of functions with a variable number of
+?S: arguments. See also prototype.
+?S:.
+?C:CAN_VAPROTO ~ %<:
+?C: This variable is defined on systems supporting prototype declaration
+?C: of functions with a variable number of arguments.
+?C:.
+?C:_V:
+?C: This macro is used to declare function parameters in prototypes for
+?C: functions with a variable number of parameters. Use double parentheses.
+?C: For example:
+?C:
+?C: int printf _V((char *fmt, ...));
+?C:
+?C: Remember to use the plain simple _() macro when declaring a function
+?C: with no variable number of arguments, since it might be possible to
+?C: have a non-effect _V() macro and still get prototypes via _().
+?C:.
+?H:?%<:#$vaproto CAN_VAPROTO /**/
+?H:?_V:#ifdef CAN_VAPROTO
+?H:?_V:#define _V(args) args
+?H:?_V:#else
+?H:?_V:#define _V(args) ()
+?H:?_V:#endif
+?H:.
+?W:%<:_V
+?LINT:set vaproto
+: see if prototypes support variable argument declarations
+echo " "
+case "$prototype$i_stdarg" in
+$define$define)
+ echo "It appears we'll be able to prototype varargs functions." >&4
+ val="$define"
+ ;;
+*)
+ echo "Too bad... We won't be using prototyped varargs functions..." >&4
+ val="$undef"
+ ;;
+esac
+set vaproto
+eval $setvar
+
diff --git a/mcon/U/voidflags.U b/mcon/U/voidflags.U
new file mode 100644
index 0000000..0e0f49c
--- /dev/null
+++ b/mcon/U/voidflags.U
@@ -0,0 +1,180 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: voidflags.U,v $
+?RCS: Revision 3.0.1.2 1997/02/28 16:27:58 ram
+?RCS: patch61: don't prompt them if the void support is high enough for us
+?RCS:
+?RCS: Revision 3.0.1.1 1995/01/11 15:37:44 ram
+?RCS: patch45: cosmetic change to avoid spurious blank lines when using -s
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:10:01 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:voidflags defvoidused: cat sed rm rm_try contains +cc +ccflags package \
+ Oldconfig Myread
+?MAKE: -pick add $@ %<
+?S:voidflags:
+?S: This variable contains the eventual value of the VOIDFLAGS symbol,
+?S: which indicates how much support of the void type is given by this
+?S: compiler. See VOIDFLAGS for more info.
+?S:.
+?S:defvoidused:
+?S: This variable contains the default value of the VOIDUSED symbol (15).
+?S:.
+?X: Exceptionally, we have to explicitly alias the symbol name for
+?X: config_h.SH, otherwise the comment would not appear.
+?C:VOIDFLAGS ~ %<:
+?C: This symbol indicates how much support of the void type is given by this
+?C: compiler. What various bits mean:
+?C:
+?C: 1 = supports declaration of void
+?C: 2 = supports arrays of pointers to functions returning void
+?C: 4 = supports comparisons between pointers to void functions and
+?C: addresses of void functions
+?C: 8 = suports declaration of generic void pointers
+?C:
+?C: The package designer should define VOIDUSED to indicate the requirements
+?C: of the package. This can be done either by #defining VOIDUSED before
+?C: including config.h, or by defining defvoidused in Myinit.U. If the
+?C: latter approach is taken, only those flags will be tested. If the
+?C: level of void support necessary is not present, defines void to int.
+?C:.
+?H:?%<:#ifndef VOIDUSED
+?H:?%<:#define VOIDUSED $defvoidused
+?H:?%<:#endif
+?H:?%<:#define VOIDFLAGS $voidflags
+?H:?%<:#if (VOIDFLAGS & VOIDUSED) != VOIDUSED
+?H:?%<:#define void int /* is void to be avoided? */
+?H:?%<:#define M_VOID /* Xenix strikes again */
+?H:?%<:#endif
+?H:.
+?W:%<:void
+?F:!.out !try.c !flags
+?LINT:usefile .out flags try.c
+?INIT:: full support for void wanted by default
+?INIT:defvoidused=15
+?INIT:
+?LINT:known void M_VOID VOIDUSED
+: check for void type
+echo " "
+echo "Checking to see how well your C compiler groks the void type..." >&4
+$cat >flags <<EOM
+
+ Support flag bits are:
+ 1: basic void declarations.
+ 2: arrays of pointers to functions returning void.
+ 4: operations between pointers to and addresses of void functions.
+ 8: generic void pointers.
+
+EOM
+case "$voidflags" in
+'')
+ $cat >try.c <<'EOCP'
+extern int doit();
+#if TRY & 1
+void sub() {
+#else
+sub() {
+#endif
+ extern void moo(); /* function returning void */
+ void (*goo)(); /* ptr to func returning void */
+#if TRY & 2
+ static void (*foo[10])();
+#endif
+#if TRY & 8
+ void *hue; /* generic ptr */
+ char buf[] = "buf";
+ int *iptr;
+#endif
+
+#if TRY & 2
+ if (doit()) {
+ foo[0] = moo;
+ (*foo[0])();
+ }
+#endif
+#if TRY & 4
+ if (doit())
+ goo = moo;
+ if (goo == moo)
+ doit();
+#endif
+#if TRY & 8
+ hue = buf;
+ if (doit())
+ iptr = hue;
+#endif
+ doit();
+}
+EOCP
+?X: This unit used to use cc -S in those tests to try to speed up things, but
+?X: unfortunately, AIX 3.2 does not support this option.
+ if $cc $ccflags -c -DTRY=$defvoidused try.c >.out 2>&1 ; then
+ voidflags=$defvoidused
+ echo "Good. It appears to support void to the level $package wants."
+ if $contains warning .out >/dev/null 2>&1; then
+ echo "However, you might get some warnings that look like this:"
+ $sed -e 's/^/ /' .out
+ fi
+ else
+echo "Hmm, your compiler has some difficulty with void. Checking further..." >&4
+ $cat >&4 flags
+ $rm -f flags
+ if $cc $ccflags -c -DTRY=1 try.c >/dev/null 2>&1; then
+ echo "It supports 1..."
+ if $cc $ccflags -c -DTRY=3 try.c >/dev/null 2>&1; then
+ echo "It also supports 2..."
+ if $cc $ccflags -c -DTRY=7 try.c >/dev/null 2>&1; then
+ voidflags=7
+ echo "And it supports 4 but not 8 definitely."
+ else
+ echo "It doesn't support 4..."
+ if $cc $ccflags -c -DTRY=11 try.c >/dev/null 2>&1; then
+ voidflags=11
+ echo "But it supports 8."
+ else
+ voidflags=3
+ echo "Neither does it support 8."
+ fi
+ fi
+ else
+ echo "It does not support 2..."
+ if $cc $ccflags -c -DTRY=13 try.c >/dev/null 2>&1; then
+ voidflags=13
+ echo "But it supports 4 and 8."
+ else
+ if $cc $ccflags -c -DTRY=5 try.c >/dev/null 2>&1; then
+ voidflags=5
+ echo "And it supports 4 but has not heard about 8."
+ else
+ echo "However it supports 8 but not 4."
+ fi
+ fi
+ fi
+ else
+ echo "There is no support at all for void."
+ voidflags=0
+ fi
+ fi
+esac
+?X: Only prompt user if support does not match the level we want
+case "$voidflags" in
+"$defvoidused") ;;
+*)
+ dflt="$voidflags";
+ test -f flags && $cat flags
+ rp="Your void support flags add up to what?"
+ . ./myread
+ voidflags="$ans"
+ ;;
+esac
+$rm_try flags
+
diff --git a/mcon/U/warnflags.U b/mcon/U/warnflags.U
new file mode 100644
index 0000000..0faf3b0
--- /dev/null
+++ b/mcon/U/warnflags.U
@@ -0,0 +1,55 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Graham Stoney <greyham@research.canon.oz.au>
+?RCS:
+?RCS: $Log: warnflags.U,v $
+?RCS: Revision 3.0 1993/08/18 12:10:02 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:warnflags: cat cc contains Myread Guess Oldconfig Findhdr
+?MAKE: -pick add $@ %<
+?S:warnflags:
+?S: This variable contains any additional C compiler flags to generate
+?S: warnings from the compiler. It is up to the Makefile to use this.
+?S:.
+: offer additional warning flags for compilation
+$cat <<EOH
+
+You may wish to compile with extra compiler warnings enabled.
+Note that doing so enhances your chance of receiving your free set of steak
+knives, particularly if you find any bugs and report them.
+If you don't want extra warnings, answer "none".
+
+EOH
+case "$warnflags" in
+'') case "$cc" in
+ *gcc*)
+ dflt="-Wall -Wno-comment"
+ if $contains 'fprintf' `./findhdr stdio.h` >/dev/null 2>&1; then
+ :
+ else
+ dflt="$dflt -Wno-implicit"
+ fi
+ ;;
+ *) dflt="none";;
+ esac
+ ;;
+' ') dflt="none";;
+*) dflt="$warnflags";;
+esac
+
+rp="Any $cc flags to enable warnings?"
+. ./myread
+case "$ans" in
+none) warnflags=' ';;
+*) warnflags="$ans";;
+esac
+
diff --git a/mcon/U/yacc.U b/mcon/U/yacc.U
new file mode 100644
index 0000000..0a4abfb
--- /dev/null
+++ b/mcon/U/yacc.U
@@ -0,0 +1,90 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: yacc.U,v $
+?RCS: Revision 3.0.1.1 1994/05/13 15:28:48 ram
+?RCS: patch27: added byacc as another alternative (ADO)
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:10:03 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:yacc yaccflags: Guess Myread Loc Oldconfig byacc bison cat test
+?MAKE: -pick add $@ %<
+?S:yacc:
+?S: This variable holds the name of the compiler compiler we
+?S: want to use in the Makefile. It can be yacc, byacc, or bison -y.
+?S:.
+?S:yaccflags:
+?S: This variable contains any additional yacc flags desired by the
+?S: user. It is up to the Makefile to use this.
+?S:.
+?T:comp
+: determine compiler compiler
+echo " "
+comp='yacc'
+if $test -f "$byacc"; then
+ comp="byacc or $comp"
+fi
+if $test -f "$bison"; then
+ comp="$comp or bison -y"
+fi
+case "$yacc" in
+'')
+ yacc=`./loc yacc yacc $pth`
+ if $test -f "$yacc"; then
+ dflt='yacc'
+ elif $test -f "$byacc"; then
+ dflt='byacc'
+ elif $test -f "$bison"; then
+ dflt='bison'
+ else
+ dflt=''
+ fi
+ ;;
+*) dflt="$yacc";;
+esac
+rp="Which compiler compiler ($comp) shall I use?"
+. ./myread
+yacc="$ans"
+case "$yacc" in
+*bis*)
+ case "$yacc" in
+ *-y*) ;;
+ *)
+ yacc="$yacc -y"
+ echo "(Adding -y option to bison to get yacc-compatible behaviour.)"
+ ;;
+ esac
+ ;;
+esac
+
+@if yaccflags
+: see if we need extra yacc flags
+dflt="$yaccflags"
+case "$dflt" in
+'') dflt=none;;
+esac
+$cat <<EOH
+
+Your yacc program may need extra flags to normally process the parser sources.
+Do NOT specify any -d or -v flags here, since those are explicitly known
+by the various Makefiles. However, if your machine has strange/undocumented
+options (like -Sr# on SCO to specify the maximum number of grammar rules), then
+please add them here. To use no flags, specify the word "none".
+
+EOH
+rp="Any additional yacc flags?"
+. ./myread
+case "$ans" in
+none) yaccflags='';;
+*) yaccflags="$ans";;
+esac
+
+@end
diff --git a/mcon/configure b/mcon/configure
new file mode 100644
index 0000000..95b2d63
--- /dev/null
+++ b/mcon/configure
@@ -0,0 +1,144 @@
+#! /bin/sh
+#
+# $Id: configure,v 3.0.1.2 1997/02/28 16:28:49 ram Exp ram $
+#
+# GNU configure-like front end to metaconfig's Configure.
+#
+# Written by Andy Dougherty <doughera@lafcol.lafayette.edu>
+# Matthew Green <mrg@mame.mu.oz.au> and Tom Tromey <tromey@cygnus.com>.
+#
+# Reformatted and modified for inclusion in the dist-3.0 package by
+# Raphael Manfredi <Raphael_Manfredi@grenoble.hp.com>.
+#
+# This script belongs to the public domain and may be freely redistributed.
+#
+# The remaining of this leading shell comment may be removed if you
+# include this script in your own package.
+#
+# $Log: configure,v $
+# Revision 3.0.1.2 1997/02/28 16:28:49 ram
+# patch61: added the srcdir support now that we have src.U
+# patch61: random cleanup for nicer help message
+#
+# Revision 3.0.1.1 1995/07/25 14:16:21 ram
+# patch56: created
+#
+
+(exit $?0) || exec sh $0 $argv:q
+opts=''
+verbose=''
+create='-e'
+srcdir=''
+while test $# -gt 0; do
+ case $1 in
+ --help)
+ cat <<EOM
+Usage: configure [options]
+This is GNU configure-like front end for a metaconfig-generated Configure.
+It emulates the following GNU configure options (must be fully spelled out):
+
+ --help --srcdir=DIRECTORY
+ --no-create --silent
+ --prefix=PREFIX --verbose
+ --quiet --version
+
+And it honours these environment variables: CC, CFLAGS and DEFS.
+
+Furthermore, it ignores the following arguments, when supplied:
+
+ --cache-file=FILE --target=TARGET
+ --enable-* --with-*
+ --host=HOST
+EOM
+ exit 0
+ ;;
+ --no-create)
+ create='-E'
+ shift
+ ;;
+ --prefix=*)
+ arg=`echo $1 | sed 's/--prefix=/-Dprefix=/'`
+ opts="$opts $arg"
+ shift
+ ;;
+ --prefix)
+ shift
+ opts="$opts -Dprefix=$1"
+ shift
+ ;;
+ --srcdir=*)
+ arg=`echo $1 | sed 's/--srcdir=//'`
+ srcdir=$arg
+ shift
+ ;;
+ --srcdir)
+ shift
+ srcdir=$1
+ shift
+ ;;
+ --quiet|--silent)
+ exec >/dev/null 2>&1
+ shift
+ ;;
+ --verbose)
+ verbose=true
+ shift
+ ;;
+ --version)
+ copt="$copt -V"
+ shift
+ ;;
+ --host=*|--target=*|--cache-file=*|--enable-*|--with-*)
+ shift
+ ;;
+ --*)
+ opt=`echo $1 | sed 's/=.*//'`
+ echo "This GNU configure front end does not understand $opt"
+ exit 1
+ ;;
+ *)
+ opts="$opts $1"
+ shift
+ ;;
+ esac
+done
+
+case "$CC" in
+'') ;;
+*) opts="$opts -Dcc='$CC'";;
+esac
+
+# Join DEFS and CFLAGS together.
+ccflags=''
+case "$DEFS" in
+'') ;;
+*) ccflags=$DEFS;;
+esac
+case "$CFLAGS" in
+'') ;;
+*) ccflags="$ccflags $CFLAGS";;
+esac
+case "$ccflags" in
+'') ;;
+*) opts="$opts -Dccflags='$ccflags'";;
+esac
+
+# Don't use -s if they want verbose mode
+case "$verbose" in
+'') copt="$copt -ds";;
+*) copt="$copt -d";;
+esac
+
+# Figure out srcdir if not set already
+case "$srcdir" in
+'') srcdir=`echo $0 | sed -e 's%/[^/][^/]*$%%'`;;
+esac
+case "$srcdir" in
+".") ;;
+*) opts="$opts -Dsrc=$srcdir";;
+esac
+
+set X sh $srcdir/Configure $copt $create $opts
+shift
+echo "$@"
+exec "$@"
diff --git a/mcon/files/Internal.U b/mcon/files/Internal.U
new file mode 100644
index 0000000..2f1401c
--- /dev/null
+++ b/mcon/files/Internal.U
@@ -0,0 +1,20 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: Internal.U,v $
+?RCS: Revision 3.0 1993/08/18 12:10:04 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: This unit does this and that.
+?X:
+?MAKE:<^INTERNAL>: Myinit
+?MAKE: -pick add $@ %<
+
diff --git a/mcon/files/README b/mcon/files/README
new file mode 100644
index 0000000..cdbc905
--- /dev/null
+++ b/mcon/files/README
@@ -0,0 +1,6 @@
+This directory contains unit templates.
+
+It is hoped metaconfig will have a tool to generate "standard" units based
+on some well-known templates.
+
+For now, it has a documentary-only value.
diff --git a/mcon/files/d_function.U b/mcon/files/d_function.U
new file mode 100644
index 0000000..58c440b
--- /dev/null
+++ b/mcon/files/d_function.U
@@ -0,0 +1,31 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_function.U,v $
+?RCS: Revision 3.0 1993/08/18 12:10:05 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_<FUNCTION>: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_<FUNCTION>:
+?S: This variable conditionally defines HAS_<%FUNCTION> if <FUNCTION>() is
+?S: available to ...
+?S:.
+?C:HAS_<%FUNCTION>:
+?C: This symbol, if defined, indicates that the <FUNCTION>() routine is
+?C: available to ...
+?C:.
+?H:#$d_<FUNCTION> HAS_<%FUNCTION> /**/
+?H:.
+?LINT:set d_<FUNCTION>
+: see if <FUNCTION> exists
+set <FUNCTION> d_<FUNCTION>
+eval $inlibc
+
diff --git a/mcon/files/dir.U b/mcon/files/dir.U
new file mode 100644
index 0000000..ad7b15f
--- /dev/null
+++ b/mcon/files/dir.U
@@ -0,0 +1,47 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: dir.U,v $
+?RCS: Revision 3.0 1993/08/18 12:10:06 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:<DIR> <DIR>exp: Oldconfig Getfile
+?MAKE: -pick add $@ %<
+?S:<DIR>:
+?S: Where <DIR> files are located. The name may have ~ on the front.
+?S:.
+?S:<DIR>exp:
+?S: This is the same as the <DIR> variable, but is filename expanded
+?S: so that later Configure units can look at the <DIR> directory if desired.
+?S:.
+?C:<%DIR>:
+?C: The directory where <DIR> files are located. The name may have ~ on
+?C: the front so the C program must be prepared to do ~ expansion.
+?C:.
+?C:<%DIR>_EXP:
+?C: The same as <DIR>, but ~name expantion has been done by Configure.
+?C:.
+?H:#define <%DIR> "$<DIR>" /**/
+?H:#define <%DIR>_EXP "$<DIR>exp" /**/
+?H:.
+: locate <DIR> directory
+echo " "
+case "$<DIR>" in
+'')
+ dflt=<DFLT>
+ ;;
+*) dflt="$<DIR>";;
+esac
+fn=d~
+rp='Where is the <DIR> directory?'
+. getfile
+<DIR>="$ans"
+<DIR>exp="$ansexp"
+
diff --git a/mcon/files/file.U b/mcon/files/file.U
new file mode 100644
index 0000000..55bb95f
--- /dev/null
+++ b/mcon/files/file.U
@@ -0,0 +1,47 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: file.U,v $
+?RCS: Revision 3.0 1993/08/18 12:10:06 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:<FILE> <FILE>exp: Oldconfig Getfile
+?MAKE: -pick add $@ %<
+?S:<FILE>:
+?S: The name of the <FILE> file. The name may have ~ on the front.
+?S:.
+?S:<FILE>exp:
+?S: This is the same as the <FILE> variable, but is filename expanded
+?S: so that later Configure units can look at the <FILE> file if desired.
+?S:.
+?C:<%FILE>:
+?C: The name of the <FILE> file. The name may have ~ on the front so the
+?C: program must be prepared to do filename expansion.
+?C:.
+?C:<%FILE>_EXP:
+?C: The same as <FILE> but ~name expansion has been done by Configure.
+?C:.
+?H:#define <%FILE> "$<FILE>" /**/
+?H:#define <%FILE>_EXP "$<FILE>exp" /**/
+?H:.
+: locate <FILE> file
+echo " "
+case "$<FILE>" in
+'')
+ dflt=<DFLT>
+ ;;
+*) dflt="$<FILE>";;
+esac
+fn=f~
+rp='Where is the <FILE> file?'
+. getfile
+<FILE>="$ans"
+<FILE>exp="$ansexp"
+
diff --git a/mcon/files/i_include.U b/mcon/files/i_include.U
new file mode 100644
index 0000000..e96c594
--- /dev/null
+++ b/mcon/files/i_include.U
@@ -0,0 +1,32 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: i_include.U,v $
+?RCS: Revision 3.0 1993/08/18 12:10:07 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:i_<INCLUDE>: Inhdr
+?MAKE: -pick add $@ %<
+?S:i_<INCLUDE>:
+?S: This variable conditionally defines the I_<%INCLUDE> symbol, which
+?S: indicates to the C program that <<INC_PATH>.h> exists and should
+?S: be included.
+?S:.
+?C:I_<%INCLUDE>:
+?C: This symbol, if defined, indicates that <<INC_PATH>.h> exists and should
+?C: be included.
+?C:.
+?H:#$i_<INCLUDE> I_<%INCLUDE> /**/
+?H:.
+?LINT:set i_<INCLUDE>
+: see if <INC_PATH>.h is available
+set <INC_PATH>.h i_<INCLUDE>
+eval $inhdr
+
diff --git a/mcon/files/keyword.U b/mcon/files/keyword.U
new file mode 100644
index 0000000..7feefa4
--- /dev/null
+++ b/mcon/files/keyword.U
@@ -0,0 +1,54 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: keyword.U,v $
+?RCS: Revision 3.0 1993/08/18 12:10:08 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_const: cat cc ccflags Setvar
+?MAKE: -pick add $@ %<
+?S:d_<KEY>:
+?S: This variable conditionally defines the HASCONST symbol, which
+?S: indicates to the C program that this C compiler knows about the
+?S: <KEY> type.
+?S:.
+?C:HAS<%KEY> ~ %<:
+?C: This symbol, if defined, indicates that this C compiler knows about
+?C: the <KEY> type. There is no need to actually test for that symbol
+?C: within your programs. The mere use of the "<KEY>" keyword will
+?C: trigger the necessary tests.
+?C:.
+?H:?%<:#$d_<KEY> HAS<%KEY> /**/
+?H:?%<:#ifndef HAS<%KEY>
+?H:?%<:#define <KEY>
+?H:?%<:#endif
+?H:.
+?W:%<:<KEY>
+?LINT:set d_<KEY>
+?LINT:known <KEY>
+: check for <KEY> keyword
+echo " "
+echo 'Checking to see if your C compiler knows about "<KEY>"...'
+$cat ><KEY>.c <<'EOCP'
+main()
+{
+ <KEY> char *foo;
+}
+EOCP
+if $cc -c $ccflags <KEY>.c >/dev/null 2>&1 ; then
+ val="$define"
+ echo "Yup, it does."
+else
+ val="$undef"
+ echo "Nope, it doesn't."
+fi
+set d_<KEY>
+eval $setvar
+
diff --git a/mcon/files/locate.U b/mcon/files/locate.U
new file mode 100644
index 0000000..c6866fd
--- /dev/null
+++ b/mcon/files/locate.U
@@ -0,0 +1,47 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: locate.U,v $
+?RCS: Revision 3.0 1993/08/18 12:10:08 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:<FILE> <FILE>exp: Oldconfig Getfile
+?MAKE: -pick add $@ %<
+?S:<FILE>:
+?S: The name of the <FILE> file. The name may have ~ on the front.
+?S:.
+?S:<FILE>exp:
+?S: This is the same as the <FILE> variable, but is filename expanded
+?S: so that later Configure units can look at the <FILE> file if desired.
+?S:.
+?C:<%FILE>:
+?C: The name of the <FILE> file. The name may have ~ on the front so the
+?C: program must be prepared to do filename expansion.
+?C:.
+?C:<%FILE>_EXP:
+?C: The same as <FILE> but ~name expansion has been done by Configure.
+?C:.
+?H:#define <%FILE> "$<FILE>" /**/
+?H:#define <%FILE>_EXP "$<FILE>exp" /**/
+?H:.
+: locate <FILE> file
+echo " "
+case "$<FILE>" in
+'')
+ dflt=<DFLT>
+ ;;
+*) dflt="$<FILE>";;
+esac
+fn=l~:<FILE>
+rp='Where is the <FILE> file?'
+. getfile
+<FILE>="$ans"
+<FILE>exp="$ansexp"
+
diff --git a/mcon/files/question.U b/mcon/files/question.U
new file mode 100644
index 0000000..6273d99
--- /dev/null
+++ b/mcon/files/question.U
@@ -0,0 +1,58 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: question.U,v $
+?RCS: Revision 3.0 1993/08/18 12:10:09 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_scorfl: cat Myread Oldconfig nametype Setvar
+?MAKE: -pick add $@ %<
+?S:d_scorfl:
+?S: This variable conditionally defines the SCOREFULL symbol, which
+?S: indicates to the C program that any scoreboard kept by the program
+?S: should be kept on the basis of the user's full name as opposed to
+?S: the user's login name.
+?S:.
+?C:SCOREFULL:
+?C: This symbol, if defined, indicates that any scoreboard kept by the
+?C: program should be kept on the basis of the user's full name as opposed
+?C: to the user's login name. If the user can change his full name he
+?C: can enter multiple scores if this is defined.
+?C:.
+?H:#$d_scorfl SCOREFULL /**/
+?H:.
+?LINT:set d_scorfl
+: see how they want the scoreboard kept
+case "$d_scorfl" in
+"$define") dflt=y ;;
+*) dflt=n ;;
+esac
+case "$nametype" in
+other) val="$undef" ;;
+*)
+ $cat <<'EOM'
+
+The scoreboard can be kept with one score per login name, or one score per full
+name. If users can change their full name, or if there is more than one person
+on your system with the same full name, you should keep the score by login name
+(the full name is still printed).
+
+EOM
+ rp='Do you want the scoreboard kept by full name?'
+ . myread
+ case "$ans" in
+ y*) val="$define" ;;
+ *) val="$undef" ;;
+ esac
+ ;;
+esac
+set d_scorfl
+eval $setvar
+
diff --git a/mcon/files/rcshead.U b/mcon/files/rcshead.U
new file mode 100644
index 0000000..e75d7e8
--- /dev/null
+++ b/mcon/files/rcshead.U
@@ -0,0 +1,15 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: rcshead.U,v $
+?RCS: Revision 3.0 1993/08/18 12:10:10 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+
diff --git a/mcon/files/shell.U b/mcon/files/shell.U
new file mode 100644
index 0000000..0b018fc
--- /dev/null
+++ b/mcon/files/shell.U
@@ -0,0 +1,68 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: shell.U,v $
+?RCS: Revision 3.0 1993/08/18 12:10:10 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:cc: cat contains sysman +large Mcc Myread Guess Oldconfig Loc
+?MAKE: -pick add $@ %<
+?DEF:cc=cc
+?S:cc:
+?S: This variable holds the name of a command to execute a C compiler which
+?S: can resolve multiple global references that happen to have the same
+?S: name. Usual values are "cc", "Mcc", "cc -M", and "gcc".
+?S:.
+: see if we need a special compiler
+echo " "
+if usg; then
+ case "$cc" in
+ '') case "$Mcc" in
+ /*) dflt='Mcc';;
+ *) case "$large" in
+ -M*) dflt='cc';;
+ *) if $contains '\-M' $sysman/cc.1 >/dev/null 2>&1 ; then
+ if $contains '\-M' $sysman/cpp.1 >/dev/null 2>&1; then
+ dflt='cc'
+ else
+ dflt='cc -M'
+ fi
+ else
+ dflt='cc'
+ fi;;
+ esac;;
+ esac;;
+ *) dflt="$cc";;
+ esac
+ $cat <<'EOM'
+On some systems the default C compiler will not resolve multiple global
+references that happen to have the same name. On some such systems the "Mcc"
+command may be used to force these to be resolved. On other systems a "cc -M"
+command is required. (Note that the -M flag on other systems indicates a
+memory model to use!) If you have the Gnu C compiler, you might wish to use
+that instead.
+
+EOM
+ rp="What command will force resolution on this system?"
+ . myread
+ cc="$ans"
+else
+ case "$cc" in
+ '') dflt=cc;;
+ *) dflt="$cc";;
+ esac
+ rp="Use which C compiler?"
+ . myread
+ cc="$ans"
+fi
+case "$cc" in
+gcc*) cpp=`loc gcc-cpp $cpp $pth`;;
+esac
+
diff --git a/mcon/files/type.U b/mcon/files/type.U
new file mode 100644
index 0000000..ef3808d
--- /dev/null
+++ b/mcon/files/type.U
@@ -0,0 +1,47 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: type.U,v $
+?RCS: Revision 3.0 1993/08/18 12:10:11 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:uidtype: Myread Oldconfig contains usrinc
+?MAKE: -pick add $@ %<
+?S:uidtype:
+?S: This variable defines UIDTYPE to be something like uid_t, int,
+?S: ushort, or whatever type is used to declare user ids in the kernel.
+?S:.
+?C:Uid_t (UIDTYPE):
+?C: This symbol holds the type used to declare user ids in the kernel.
+?C: It can be int, ushort, uid_t, etc... It may be necessary to include
+?C: <sys/types.h> to get any typedef'ed information.
+?C:.
+?H:#define Uid_t $uidtype /* UID type */
+?H:.
+: see what type uids are declared as in the kernel
+case "$uidtype" in
+'')
+ if $contains 'uid_t;' $usrinc/sys/types.h >/dev/null 2>&1 ; then
+ dflt='uid_t';
+ else
+ set `grep '_ruid;' $usrinc/sys/user.h 2>/dev/null` unsigned short
+ case $1 in
+ unsigned) dflt="$1 $2" ;;
+ *) dflt="$1" ;;
+ esac
+ fi
+ ;;
+*) dflt="$uidtype";;
+esac
+echo " "
+rp="What type are user ids on this system declared as?"
+. myread
+uidtype="$ans"
+
diff --git a/mcon/makegloss.SH b/mcon/makegloss.SH
new file mode 100755
index 0000000..ffe72a2
--- /dev/null
+++ b/mcon/makegloss.SH
@@ -0,0 +1,217 @@
+case $CONFIG in
+'')
+ if test -f config.sh; then TOP=.;
+ elif test -f ../config.sh; then TOP=..;
+ elif test -f ../../config.sh; then TOP=../..;
+ elif test -f ../../../config.sh; then TOP=../../..;
+ elif test -f ../../../../config.sh; then TOP=../../../..;
+ else
+ echo "Can't find config.sh."; exit 1
+ fi
+ . $TOP/config.sh
+ ;;
+esac
+case "$0" in
+*/*) cd `expr X$0 : 'X\(.*\)/'` ;;
+esac
+echo "Extracting mcon/makegloss (with variable substitutions)"
+$spitshell >makegloss <<!GROK!THIS!
+$startperl
+ eval 'exec perl -S \$0 \${1+"\$@"}'
+ if \$running_under_some_shell;
+
+!GROK!THIS!
+$spitshell >>makegloss <<'!NO!SUBS!'
+# $Id$
+#
+# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+#
+# You may redistribute only under the terms of the Artistic Licence,
+# as specified in the README file that comes with the distribution.
+# You may reuse parts of this distribution only within the terms of
+# that same Artistic Licence; a copy of which may be found at the root
+# of the source tree for dist 4.0.
+#
+# Original Author: Larry Wall <lwall@netlabs.com>
+#
+# $Log: makegloss.SH,v $
+# Revision 3.0.1.3 1994/01/24 14:17:49 ram
+# patch16: now understands internal-use only defined variables
+#
+# Revision 3.0.1.2 1993/10/16 13:50:39 ram
+# patch12: updated to support new ?M: lines
+#
+# Revision 3.0.1.1 1993/08/19 06:42:21 ram
+# patch1: leading config.sh searching was not aborting properly
+#
+# Revision 3.0 1993/08/18 12:10:12 ram
+# Baseline for dist 3.0 netwide release.
+#
+
+open(G,">Glossary") || die "Can't create Glossary.\n";
+print G
+'[This Glossary is automatically generated from the Unit files. Do not edit
+this file or your changes will be lost. Edit the appropriate Unit instead.]
+
+This file contains a listing of all the C preprocessor symbols and shell
+variables whose value can be determined by a Configure script. For the
+most part, any symbol in UPPERCASE is a C preprocessor symbol, and
+will be defined in config.h. Symbols in lowercase are shell variables,
+and are defined in config.sh.
+
+If you write your shell scripts and C programs in terms of these symbols,
+metaconfig can automatically build you a Configure script that will determine
+the value of those symbols. See the README file for a description of how
+to use metaconfig.
+
+In the following listing, the Unit: line indicates the name of the unit
+where this symbol is defined, and the Wants: line indicates what other
+symbols must be determined in order to figure out the value of this one.
+If there is an "(Also defines ...)" entry, it indicates what other symbols
+are defined by the Unit other than the one corresponding to the unit name.
+
+Variable of the form d_* either have the value "define" or "/*define", and
+control whether some C preprocessor symbol gets defined or not.
+
+';
+
+@ARGV = <U/*.U>;
+while (<>) {
+ if (/^\?[\w\-]+:/) { # We may have found a control line
+ # Long lines may be escaped with a final backslash
+ $_ .= &complete_line if s/\\\s*$//;
+ }
+ if (/^\?MAKE:.*:/) {
+ ($also, $wants) = /^\?MAKE:\s*(.*):\s*(.*)/;
+ ($unit = $ARGV) =~ s|.*/(.*)\.U$|$1|;
+ @Also = split(/ /, $also);
+ $also = '';
+ $internal = '';
+ foreach (@Also) {
+ if (s/^\+//) {
+ $internal .= "$_ ";
+ } else {
+ $also .= "$_ ";
+ }
+ }
+ $also =~ s/$unit\s//;
+ chop($also);
+ chop($internal);
+ @Wants = split(/ /, $wants);
+ $wants = '';
+ $option = '';
+ foreach (@Wants) {
+ if (s/^\+//) {
+ $option .= "$_ ";
+ } else {
+ $wants .= "$_ ";
+ }
+ }
+ chop($option);
+ chop($wants);
+ $head = '';
+ $_ = "Unit: $unit";
+ $_ .= " (Also defines $also)" if $also;
+ $_ .= " (With private $internal)" if $internal;
+ $head .= &format($_);
+ if ($wants) {
+ $_ = "Wants: $wants";
+ $head .= &format($_);
+ }
+ if ($option) {
+ $_ = "Optional: $option";
+ $head .= &format($_);
+ }
+ $head .= "\n";
+ }
+
+ # Example of expression matched by the following pattern:
+ # ?C:symbol ~ alias (obsolete list):
+ # The main symbol (optionally aliased) can be followed by a list of
+ # obsolete symbols (the list is space separated).
+
+ if (/^\?[CS]:(\w+)(\s*~\s*\S+)?\s*(\(.*\))?:\s*$/) {
+ $sym = $1;
+ $obsoleted = $3;
+ push(@syms, $sym);
+ $header{$sym} .= $head;
+ if ($obsoleted =~ s/^\((.*)\)$/$1/) {
+ @obsoleted = split(' ', $obsoleted);
+ foreach $obs (@obsoleted) {
+ push(@syms, $obs);
+ $header{$obs} = "\tObsoleted by $sym.\n\n";
+ }
+ }
+ }
+ elsif (s/^\?[CS]://) { # Must be inside definition
+ if (/^\.$/) { # Closing line
+ $def{$sym} .= "\n";
+ $sym = '';
+ }
+ else {
+ s/^(\t| ? ? ? ? ? ? ?)//;
+ $def{$sym} .= "\t" . $_;
+ }
+ }
+ elsif (/^\?M:(\w+):\s*([\w\s]*)\n$/) { # Magic mapping introduction
+ $sym = $1;
+ $cdep = $2;
+ push(@syms, $sym);
+ $cdep =~ s/^\s*//;
+ $cdep = ", needs: $cdep" if $cdep ne '';
+ $header{$sym} = "\tMagic symbol$cdep\n" . $head;
+ }
+ elsif (s/^\?M://) { # Must be a magic mapping definition
+ if (/^\.$/) { # Closing line
+ $def{$sym} .= "\n";
+ $sym = '';
+ } else {
+ $def{$sym} .= "\t" . $_;
+ }
+ }
+}
+
+foreach $sym (sort @syms) {
+ print G "$sym:\n";
+ print G $header{$sym};
+ print G $def{$sym};
+}
+close G;
+
+# Format $_ to fit in 80 columns (70 + size of tabs)
+# Long lines are split, and the all but the first are indented
+# by two leading spaces. The whole thing is then indented by
+# one tab.
+sub format {
+ local($tmp);
+ local($head) = '';
+ local($_) = shift(@_);
+ while (length($_) > 70) {
+ $tmp = substr($_,0,70);
+ $tmp =~ s/^(.*) .*/$1/;
+ $head .= "\t$tmp\n";
+ $_ = ' ' . substr($_,length($tmp),9999);
+ }
+ $head .= "\t$_\n";
+}
+
+# The first line was escaped with a final \ character. Every following line
+# is to be appended to it (until we found a real \n not escaped). Note that
+# the leading spaces of the continuation line are removed, so any space should
+# be added before the former \ if needed.
+sub complete_line {
+ local($_);
+ local($read) = ''; # Concatenation of all the continuation lines found
+ while (<>) {
+ s/^\s+//; # Remove leading spaces
+ if (s/\\\s*$//) { # Still followed by a continuation line
+ $read .= $_;
+ } else { # We've reached the end of the continuation
+ return $read . $_;
+ }
+ }
+}
+
+!NO!SUBS!
+chmod 755 makegloss
+$eunicefix makegloss
diff --git a/mcon/man/Jmakefile b/mcon/man/Jmakefile
new file mode 100644
index 0000000..489cce2
--- /dev/null
+++ b/mcon/man/Jmakefile
@@ -0,0 +1,22 @@
+/*
+ * Jmakefile for metaconfig manual pages
+ */
+
+;# $Id$
+;#
+;# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+;#
+;# You may redistribute only under the terms of the Artistic Licence,
+;# as specified in the README file that comes with the distribution.
+;# You may reuse parts of this distribution only within the terms of
+;# that same Artistic Licence; a copy of which may be found at the root
+;# of the source tree for dist 4.0.
+;#
+;# $Log: Jmakefile,v $
+;# Revision 3.0 1993/08/18 12:10:13 ram
+;# Baseline for dist 3.0 netwide release.
+;#
+
+MPAGES = metaconfig.$(L) metalint.$(L) metaxref.$(L)
+
+ComplexShellManualTarget($(MPAGES))
diff --git a/mcon/man/Makefile.SH b/mcon/man/Makefile.SH
new file mode 100755
index 0000000..94e186c
--- /dev/null
+++ b/mcon/man/Makefile.SH
@@ -0,0 +1,190 @@
+: Makefile.SH generated from Jmake.tmpl and Jmakefile [jmake 3.5 PL0]
+: $X-Id: Jmake.tmpl 8 2006-08-25 22:27:18Z rmanfredi $
+
+case $CONFIG in
+'')
+ if test -f config.sh; then TOP=.;
+ elif test -f ../config.sh; then TOP=..;
+ elif test -f ../../config.sh; then TOP=../..;
+ elif test -f ../../../config.sh; then TOP=../../..;
+ elif test -f ../../../../config.sh; then TOP=../../../..;
+ else
+ echo "Can't find config.sh."; exit 1
+ fi
+ . $TOP/config.sh
+ ;;
+esac
+case "$0" in
+*/*) cd `expr X$0 : 'X\(.*\)/'` ;;
+esac
+CURRENT=mcon/man
+DIR=`echo $CURRENT/ | sed -e 's/\.\///g'`
+echo "Extracting ${DIR}Makefile (with variable substitutions)"
+
+INSTALL=`echo $install | sed -e 's,\./i,\$(TOP)/i,'`
+INSTALLDIR=`echo $installdir | sed -e 's,\./i,\$(TOP)/i,'`
+DATE=`date`
+
+$spitshell >Makefile <<!GROK!THIS!
+########################################################################
+# Makefile generated from Makefile.SH on $DATE
+
+SHELL = /bin/sh
+JMAKE = jmake
+TOP = ../..
+CURRENT = $CURRENT
+DIR = $DIR
+INSTALL = $INSTALL
+INSTALLDIR = $INSTALLDIR
+
+########################################################################
+# Parameters set by Configure -- edit config.sh if changes are needed
+
+CTAGS = ctags
+JCPPFLAGS = $cppflags
+L = $manext
+MANSRC = $installmansrc
+MV = $mv
+RM = $rm -f
+
+########################################################################
+# Automatically generated parameters -- do not edit
+
+MANPAGE = \$(MPAGES)
+
+########################################################################
+# New suffixes and associated building rules -- edit with care
+
+.SUFFIXES: .SH .$manext
+
+.SH.$manext:
+ /bin/sh \$<
+
+!GROK!THIS!
+$spitshell >>Makefile <<'!NO!SUBS!'
+########################################################################
+# Jmake rules for building libraries, programs, scripts, and data files
+# $X-Id: Jmake.rules 8 2006-08-25 22:27:18Z rmanfredi $
+
+########################################################################
+# Start of Jmakefile
+
+# $X-Id: Jmakefile 9 2006-08-25 22:31:50Z rmanfredi $
+#
+# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+#
+# You may redistribute only under the terms of the Artistic Licence,
+# as specified in the README file that comes with the distribution.
+# You may reuse parts of this distribution only within the terms of
+# that same Artistic Licence; a copy of which may be found at the root
+# of the source tree for dist 4.0.
+#
+# $X-Log: Jmakefile,v $
+# Revision 3.0 1993/08/18 12:10:13 ram
+# Baseline for dist 3.0 netwide release.
+#
+
+MPAGES = metaconfig.$(L) metalint.$(L) metaxref.$(L)
+
+all:: $(MPAGES)
+
+local_realclean::
+ $(RM) $(MPAGES)
+
+local_install.man::
+ @case '${MFLAGS}' in *[i]*) set +e;; esac; \
+ (set -x; test -d $(INSTALL_PREFIX)$(MANSRC) || \
+ $(INSTALLDIR) $(INSTALL_PREFIX)$(MANSRC)); \
+ for file in $(MPAGES); do \
+ (set -x; $(INSTALL) -c -m 444 $$file \
+ $(INSTALL_PREFIX)$(MANSRC)) || exit 1; \
+ done
+
+local_deinstall.man::
+ @case '${MFLAGS}' in *[i]*) set +e;; esac; \
+ for file in $(MPAGES); do \
+ (set -x; $(RM) $(INSTALL_PREFIX)$(MANSRC)/$$file); \
+ done
+
+########################################################################
+# Common rules for all Makefiles -- do not edit
+
+all::
+
+clean: local_clean
+realclean: local_realclean
+clobber: local_clobber
+
+local_clean::
+ if test -f core; then $(RM) core; fi
+ $(RM) *~ *.o
+
+local_realclean:: local_clean
+
+local_clobber:: local_realclean
+ $(RM) Makefile config.sh
+
+install:: local_install
+install.man:: maybe_install.man
+deinstall:: local_deinstall
+deinstall.man:: maybe_deinstall.man
+
+install.man-yes: local_install.man
+install.man-no:
+deinstall.man-yes: local_deinstall.man
+deinstall.man-no:
+
+!NO!SUBS!
+case "$installmansrc" in
+'') man=no;;
+*) man=yes;;
+esac
+$spitshell >>Makefile <<!GROK!THIS!
+maybe_install.man: install.man-$man
+maybe_deinstall.man: deinstall.man-$man
+!GROK!THIS!
+$spitshell >>Makefile <<'!NO!SUBS!'
+
+Makefile.SH: Jmakefile
+ -@if test -f $(TOP)/.package; then \
+ if test -f Makefile.SH; then \
+ echo " $(RM) Makefile.SH~; $(MV) Makefile.SH Makefile.SH~"; \
+ $(RM) Makefile.SH~; $(MV) Makefile.SH Makefile.SH~; \
+ fi; \
+ echo " $(JMAKE) -DTOPDIR=$(TOP) -DCURDIR=$(CURRENT)" ; \
+ $(JMAKE) -DTOPDIR=$(TOP) -DCURDIR=$(CURRENT) ; \
+ else touch $@; fi
+
+Makefile: Makefile.SH
+ /bin/sh Makefile.SH
+
+tags::
+ $(CTAGS) -w *.[ch]
+ $(CTAGS) -xw *.[ch] > tags
+
+local_clobber::
+ $(RM) tags
+
+########################################################################
+# Empty rules for directories with no sub-directories -- do not edit
+
+local_install::
+ @echo "install in $(CURRENT) done."
+
+local_deinstall::
+ @echo "deinstall in $(CURRENT) done."
+
+local_install.man::
+ @echo "install.man in $(CURRENT) done."
+
+local_deinstall.man::
+ @echo "deinstall.man in $(CURRENT) done."
+
+Makefiles::
+
+Makefiles.SH::
+
+!NO!SUBS!
+chmod 644 Makefile
+$eunicefix Makefile
+
diff --git a/mcon/man/mconfig.SH b/mcon/man/mconfig.SH
new file mode 100755
index 0000000..e749330
--- /dev/null
+++ b/mcon/man/mconfig.SH
@@ -0,0 +1,2126 @@
+case $CONFIG in
+'')
+ if test -f config.sh; then TOP=.;
+ elif test -f ../config.sh; then TOP=..;
+ elif test -f ../../config.sh; then TOP=../..;
+ elif test -f ../../../config.sh; then TOP=../../..;
+ elif test -f ../../../../config.sh; then TOP=../../../..;
+ else
+ echo "Can't find config.sh."; exit 1
+ fi
+ . $TOP/config.sh
+ ;;
+esac
+case "$0" in
+*/*) cd `expr X$0 : 'X\(.*\)/'` ;;
+esac
+echo "Extracting mcon/man/metaconfig.$manext (with variable substitutions)"
+$rm -f metaconfig.$manext
+$spitshell >metaconfig.$manext <<!GROK!THIS!
+.TH METACONFIG $manext "Version $VERSION PL$PATCHLEVEL"
+''' @(#) Manual page for metaconfig
+'''
+''' $Id$
+'''
+''' Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+'''
+''' You may redistribute only under the terms of the Artistic Licence,
+''' as specified in the README file that comes with the distribution.
+''' You may reuse parts of this distribution only within the terms of
+''' that same Artistic Licence; a copy of which may be found at the root
+''' of the source tree for dist 4.0.
+'''
+''' $Log: mconfig.SH,v $
+''' Revision 3.0.1.17 1997/02/28 16:29:31 ram
+''' patch61: documents the runnning environment and the src.U unit
+''' patch61: added warnings for $_a and $_o, as well as "startsh"
+'''
+''' Revision 3.0.1.16 1995/09/25 09:17:48 ram
+''' patch59: documented new ?Y: directive
+''' patch59: fixed my e-mail address
+'''
+''' Revision 3.0.1.15 1995/07/25 14:18:24 ram
+''' patch56: added extra nroff escapes at line heads to keep leading dots
+''' patch56: documented new -G option
+''' patch56: extended description of the Csym.U unit
+''' patch56: now mentions what a compile-link test line should look like
+'''
+''' Revision 3.0.1.14 1995/05/12 12:25:02 ram
+''' patch54: documented new -K switch for knowledgeable users
+'''
+''' Revision 3.0.1.13 1995/01/30 14:46:39 ram
+''' patch49: documented new special units Prefixit.U and Prefixup.U
+'''
+''' Revision 3.0.1.12 1995/01/11 15:39:16 ram
+''' patch45: documents new -O option and new Getfile escape supports
+''' patch45: documents the & escape in Myread and the new cc symbol lookup
+'''
+''' Revision 3.0.1.11 1994/10/29 16:32:38 ram
+''' patch36: added nroff protection for lines beginning with '.'
+''' patch36: documents new ?F: line for file declarations
+''' patch36: added example showing how ./loc can be used
+'''
+''' Revision 3.0.1.10 1994/08/29 16:33:40 ram
+''' patch32: documented new Typedef.U unit for typedef lookup
+'''
+''' Revision 3.0.1.9 1994/06/20 07:10:14 ram
+''' patch30: added -L option for easier unit testing
+''' patch30: new -D and -U options supported by Configure
+'''
+''' Revision 3.0.1.8 1994/05/13 15:29:16 ram
+''' patch27: now understands macro definitions in ?H: lines
+'''
+''' Revision 3.0.1.7 1994/05/06 15:19:25 ram
+''' patch23: documented the new 'p' option in Getfile.U
+'''
+''' Revision 3.0.1.6 1994/01/24 14:19:47 ram
+''' patch16: symbols defined in a unit can be tagged "internal use only"
+''' patch16: documents new MailList.U special unit
+''' patch16: new general <\$variable> macro substitution
+'''
+''' Revision 3.0.1.5 1993/10/16 13:51:50 ram
+''' patch12: new option -M to activate ?M: lines
+''' patch12: documents new ?M: lines format
+''' patch12: new internal Makefile command cm_h_weed for ?M: support
+''' patch12: documents usage for new confmagic.h file
+'''
+''' Revision 3.0.1.4 1993/09/09 11:50:35 ram
+''' patch9: lots of typo fixes and abusive variable substitution problems
+'''
+''' Revision 3.0.1.3 1993/08/30 08:53:51 ram
+''' patch8: wrongly stated that patchlevel.h should not be part of MANIFEST.new
+'''
+''' Revision 3.0.1.2 1993/08/24 12:13:32 ram
+''' patch3: typo fixes
+'''
+''' Revision 3.0.1.1 1993/08/19 06:42:23 ram
+''' patch1: leading config.sh searching was not aborting properly
+'''
+''' Revision 3.0 1993/08/18 12:10:14 ram
+''' Baseline for dist 3.0 netwide release.
+'''
+'''
+.de Ex \" Start of Example
+.sp
+.in +5
+.nf
+..
+.de Ef \" End of Example
+.sp
+.in -5
+.fi
+..
+.SH NAME
+metaconfig \- a Configure script generator
+.SH SYNOPSIS
+.B metaconfig
+[ \-\fBdhkmostvwGMV\fR ]
+[ \-\fBL \fIdir\fR ]
+.SH DESCRIPTION
+.I Metaconfig
+is a program that generates Configure scripts. If you don't know what a
+Configure script is, please skip to the \fBTUTORIAL\fR section of this
+manual page. If you want a full (formal) description of the way to
+use \fImetaconfig\fR and its units, please look at the \fBREFERENCE\fR
+section. The following is a quick introduction and reference for
+knowledgeable users.
+.PP
+.B Metaconfig
+operates from set of
+.I units
+which define everything that metaconfig knows about portability.
+Each unit is self-contained, and does not have to be registered anywhere
+other than by inclusion in either the public U directory or your private
+U directory.
+If the dist package (of which metaconfig is a part) is installed in LIB,
+then the public U directory is LIB/dist/mcon/U. On this machine, the
+LIB directory is $privlibexp.
+Your private U directory, if you have one,
+is in the top level directory of your package.
+Before you can run \fImetaconfig\fR you must do a several things:
+.IP \(bu 5
+Create a .package file in the package's top level directory by running
+\fIpackinit\fR.
+This program will ask you about your package and remember what you tell
+it so that all the dist programs can be smart.
+.IP \(bu
+Consult the Glossary (in LIB/dist/mcon) and write your shell scripts and
+C programs in terms of the symbols that metaconfig knows how to define.
+You don't need to tell metaconfig which symbols you used, since metaconfig
+will figure that out for you.
+.IP \(bu
+Generate any .SH scripts needed to write Makefiles or shell scripts that
+will depend on values defined by Configure.
+There is a program called \fImakeSH\fR that will help you convert a plain
+script into a script.SH template; some editing will still need to be performed
+on the resulting .SH file to move the variable configuration part in the
+top part of the script (see inline comments generated by \fImakeSH\fR within
+your .SH file).
+.IP \(bu
+Create a MANIFEST.new file in your top level directory that lists all the
+files in your package. This file will remain private and will not be
+part of the final distribution. (As a convenience, the MANIFEST file will
+be used by \fImetaconfig\fR if there is no MANIFEST.new file yet.)
+The filename should be the first field on each line.
+After some whitespace you can add a short comment describing your file.
+Only source files should be listed in there. The special file
+\fIpatchlevel.h\fR (which is handled and maintained by the patching tools --
+see \fIpat\fR(1)) should be part of the MANIFEST.new file, but may be
+silently ignored by some tools. As a rule of
+thumb, only files maintained by RCS should be listed in there,
+the \fIpatchlevel.h\fR file being one important exception.
+.IP \(bu
+Optionally, you may wish to create a MANIFEST file, which will be an
+exported version of your MANIFEST.new. That file must be made part of
+the release, i.e. listed in both your MANIFEST.new and MANIFEST itself.
+One of the \fImetaconfig\fR units knows about this file and will force
+Configure to perform a release check, ensuring all the files listed
+there are part of the distribution. The MANIFEST and MANIFEST.new
+files should be distinct, not links.
+.IP \(bu
+Copy any .U files that you want to modify to your private U directory.
+Any .U files in your private U directory will be used in preference to
+the one in the public U directory.
+For example, one way to force inclusion of any unit is to copy the End.U
+file to your .U directory and add the name of the unit you want as
+a dependency on the end of the ?MAKE: line.
+Certain units can ONLY be forced in this way, namely those of the form
+Warn_*.U and Chk_*.U.
+You can also customize certain default Configure variables by copying
+Myinit.U to your package's private U directory and setting the variables in
+that unit.
+.PP
+Now you are ready to run \fImetaconfig\fR. That will create a \fIConfigure\fR
+file, and optionally a \fIconfig_h.SH\fR file (if your sources make any use
+of C symbols).
+The generated files will automatically be added to your MANIFEST.new
+if necessary. Do not forget to update your MANIFEST file though.
+.PP
+In order to create new units, do the following:
+.IP \(bu 5
+Copy a similar unit to a new .U file.
+The name you choose should be the name of a variable generated by the unit,
+although this is only a convenience for you, not a requirement.
+It should be 12 or less characters to prevent filename chopping.
+Actually, it should probably be 10 or less so that those who want to use RCS
+can have a .U,v on the end without chopping.
+Metaconfig uses the case of the first letter to determine if any variable is
+actually produced by this unit, so don't Capitalize your unit
+name if it is supposed to produce a shell variable.
+.IP \(bu
+Edit the new .U file to do what you want.
+The first ?MAKE: line indicates the dependencies; before the final list
+colon all the variables this unit defines, and after the final colon
+all the variables (or other units) on which this unit depends.
+It is very important that these lists be accurate. If a dependency is
+optional and a default value can be used, you should prefix the dependency
+with a '+' sign. The corresponding unit will not be loaded to compute the
+symbol, unless really required by another unit.
+.IP \(bu
+To the extent possible, parameterize your unit based on shell
+variable defined on ?INIT: lines.
+This will move the variable definitions up to the Init.U unit,
+where they can be overridden by definitions in Myinit.U, which is
+included after Init.U.
+.IP \(bu
+Add the definition of any C symbols desired as ?H: lines.
+A line beginning with ?H:?%<: in the .U file will be added to the eventual
+config.h file if and only if metaconfig decides that this unit is needed.
+The %< stands for the unit's name, which happens to be the name of
+the file too (without .U) if you followed the convention.
+Always put a comment on each ?H: line in case one of the variable
+substitutions earlier on the line starts a comment without finishing it.
+Any shell variable starting with d_ may do this, so beware.
+If you ommit the ?%<:, then metaconfig will try to intuit the symbol whose
+definition is needed prior any inclusion in config.h.
+.IP \(bu
+Add glossary definitions as ?S: lines for shell variables and ?C:
+lines for C preprocessor variables.
+See a current unit for examples.
+It is VERY important to start each entry with a left justified symbol
+name, and end each entry with a ?C:. or ?S:. line. The algorithm
+that translates C preprocessor symbol entries for the Glossary into
+comments for config.h depends on this.
+.IP \(bu
+Make sure the order of all your ? lines is right. The correct order is:
+.sp
+.RS +10
+.PD 0
+.TP 15
+?RCS: and ?X:
+basically just comments
+.TP
+?MAKE:
+metaconfig dependencies
+.TP
+?Y:
+unit layout directive
+.TP
+?S:
+glossary shell definitions
+.TP
+?C:
+glossary C definitions
+.TP
+?H:
+config.h definitions
+.TP
+?M:
+confmagic.h definitions
+.TP
+?W:
+wanted symbols
+.TP
+?V:
+visible symbols
+.TP
+?F:
+files created by this unit
+.TP
+?T:
+temporary shell symbols used
+.TP
+?D:
+optional dependencies default value
+.TP
+?O:
+used to mark obsolete units
+.TP
+?LINT:
+metalint hints
+.TP
+?INIT:
+shell symbols initializations
+.PD
+.RE
+.PP
+Here is an example to show the ordering of the lines and the various
+formats allowed:
+.Ex
+?RCS: \$RCS-Id\$
+?RCS: Copyright information
+?RCS: \$RCS-Log\$
+?X:
+?X: A contrived example
+?X:
+?MAKE:d_one two: three +four Five
+?MAKE: -pick add \$@ %<
+?Y:DEFAULT
+?S:d_one:
+?S: First shell symbol, conditionally defines ONE.
+?S:.
+?S:two:
+?S: Second shell symbol, value for TWO.
+?S:.
+?C:ONE:
+?C: First C symbol.
+?C:.
+?C:TWO:
+?C: Second C symbol.
+?C:.
+?H:#\$d_one ONE /**/
+?H:#define TWO "\$two"
+?H:#\$d_one ONE_TWO "\$two"
+?H:.
+?M:flip: HAS_FLIP
+?M:#ifndef HAS_FLIP
+?M:#define flip(x) flop(x)
+?M:#endif
+?M:.
+?W:%<:one_two
+?V:p_one p_two:p_three
+?F:file ./ftest !tmp
+?T:tmp var
+?D:two='undef'
+?LINT:change three
+?INIT:two_init='2'
+: shell code implementing the unit follows
+p_one='one'
+p_two='two'
+p_three="$three"
+.Ef
+Let me state it one more time: the above unit definition is a \fIfake\fR
+one to only show the different possibilities. Such a unit would serve
+little purpose anyway... Some more advanced features are not described
+here. Please refer to the \fBREFERENCE\fR section for more complete
+information.
+.IP \(bu
+Put the unit into the public or private U directory as appropriate.
+.IP \(bu
+Rerun \fImetaconfig\fR.
+.IP \(bu
+Send your unit to Raphael.Manfredi@pobox.com (Raphael Manfredi) for inclusion
+in the master copy, if you think it's of general interest.
+.PP
+In order to add a new program to be located:
+.IP \(bu
+Edit Loc.U, and add the name of the program both to the ?MAKE: line
+(between the two colons) and to either loclist or trylist (depending
+on whether the program is mandatory or not).
+.IP \(bu
+Rerun metaconfig.
+.IP \(bu
+Send your unit to me for inclusion in the master copy, if you think it's
+of general interest.
+.PP
+Notes for writing .U files:
+.IP * 5
+Always use "rm -f" because there are systems where rm is interactive by
+default.
+.IP *
+Do not use "set -- ..." because '--' does not work with every shell. Use
+"set x ...; shift".
+.IP *
+Do not use "unset ENV" since unset is not fully portable. Say "ENV=''"
+instead.
+.IP *
+Always use echo " " (with a space) because of Eunice systems.
+.IP *
+Only use \fBtest\fR with \-r, \-w, \-f or \-d since those are the only
+portable switches. In particular, avoid "test -x".
+.IP *
+Use only programs that came with V7, so that you know everyone has them.
+.IP *
+Use \$\&contains when you want to grep conditionally, since not all
+greps return a reasonable status.
+Be sure to redirect the output to /dev/null, by using '>/dev/null 2>&1'.
+.IP *
+Use "if test" rather than "if [...]" since not every sh knows the
+latter construct.
+.IP *
+Use the myread script for inputs so that they can do shell escapes
+and default evaluation. The general form is
+.Ex
+case "\$grimble" in
+\&'') dflt=452;;
+*) dflt="\$grimble";;
+esac
+rp='How many grimbles do you have?'
+\&. ./myread
+grimble="\$ans"
+.Ef
+.IP *
+Use the getfile script when asking for a file pathname in order to
+have optional ~name expansion and sanity checks. See the Getfile.U
+unit for a full decription.
+.IP *
+Always put a
+.Ex
+ \$startsh
+.Ef
+at the top of every generated script that is going to be launched
+or sourced by \fIConfigure\fR.
+.IP *
+Never assume common UNIX-isms like the fact that an object file ends
+with a \fI.o\fR and that a library name ends with \fI.a\fR.
+Use the \fI\$_o\fR and \fI\$_a\fR variables instead (see Unix.U).
+.IP *
+When doing a compile-link-execute test, always write it like this:
+.Ex
+\$\&cc \$\&ccflags \$\&ldflags try.c -o try \$\&libs
+.Ef
+because some systems require that linking flags be specified before
+the compiled target (with the exception of trailing linking libraries).
+.IP *
+Issue important messages on file descriptor #4, by using '>&4' to redirect
+output. Only those messages will appear when the \fB\-s\fR switch is
+given to \fIConfigure\fR on the command line (silent mode).
+.IP *
+Always try to determine whether a feature is present in the most
+specific way--don't say "if bsd" when you can grep libc. There
+are many hybrid systems out there, and each feature should stand
+or fall by itself.
+.IP *
+Always try to determine whether a feature is present in the most
+general way, so that other packages can use your unit.
+.IP *
+When in doubt, set a default and ask. Don't assume anything.
+.IP *
+If you think the user is wrong, allow for the fact that he may be right.
+For instance, he could be running Configure on a different system than
+he is going to use the final product on.
+.PP
+Metaconfig reserves the following names in your directory, and if you use such
+a name it may get clobbered or have other unforeseen effects:
+.Ex
+.MT/*
+Configure
+Wanted
+Obsolete
+configure
+config_h.SH
+confmagic.h
+U/*
+MANIFEST.new
+.Ef
+Additionally, Configure may clobber these names in the directory it is run in:
+.Ex
+UU/*
+config.sh
+config.h
+.Ef
+'''
+''' O p t i o n s
+'''
+.SH OPTIONS
+The following options are recognized by \fImetaconfig\fR:
+.TP 15
+.B \-d
+Turn on debug mode. Not really useful unless you are debugging \fImetaconfig\fR
+itself.
+.TP
+.B \-h
+Print help message and exit.
+.TP
+.B \-k
+Keep temporary directory, so that you may examine the working files used
+by \fImetaconfig\fR to build your \fIConfigure\fR script. Useful only when
+debugging the units.
+.TP
+.B \-m
+Assume lots of memory and swap space. This will speed up symbol lookup in
+source files by a significant amount of time, at the expense of memory
+consumption...
+.TP
+.B \-o
+Map obsolete symbols on new ones. Use this switch if you still have some
+obsolete symbols in your source code and do not want (or cannot) remove
+them for now. The obsolete symbols are otherwise ignored, although that
+will give you a warning from \fImetaconfig\fR.
+.TP
+.B \-s
+Turn silent mode on.
+.TP
+.B \-t
+Trace symbols as they are found.
+.TP
+.B \-v
+Turn verbose mode on.
+.TP
+.B \-w
+Assume Wanted file is up-to-date. This will skip the time and memory
+consuming phase of source code scanning, looking for known symbols.
+Use it only when you know your source file have not changed with respect
+to the pool of \fImetaconfig\fR symbols used.
+.TP
+.B \-G
+Also provide a GNU \fIconfigure\fR-like front end to the generated
+.I Configure
+script, to be included in the distribution as well. This is only
+a wrapper around the
+.I Configure
+script naturally, but it lets people familiar with the GNU tool to
+not be lost when facing a new distribution.
+.TP
+\fB\-L\fI dir\fR
+Override default library location. Normally only useful for metaconfig
+maintainers to locally use the units being developped instead of the
+publicly available ones. The \fIdir\fR specified is the one containing the
+units \fIU\fR directory.
+.TP
+.B \-M
+Allow production of a \fIconfmagic.h\fR file to automagically remap some
+well-known symbols to some other alternative, like \fIbcopy\fR() being
+remapped transparently to \fImemcpy()\fR when not available. This option
+is turned on automatically when a \fIconfmagic.h\fR file exists in the
+top-level directory. Simply remove that file if you wish to disable this
+option permanently.
+.TP
+.B \-V
+Print version number and exit.
+.TP
+\fB\-X\fI file\fR
+When examining the source files, ignore any symbols listed in the \fIfile\fR.
+This is useful in situations where a particular unit is known not to be needed
+for your package's portability targets, but your source files nevertheless
+contain occurrences of words that look to \fImetaconfig\fR like symbols defined
+in that unit. (For example, you might need the word "index" in a source file,
+but not need the unit that determines whether \fIstrcpy\fR or \fIindex\fR
+should be used.)
+The \fIfile\fR can contain blank lines, comment lines introduced with '#', and
+lines containing a single symbol.
+If this option is not supplied, any \fI$exclusions_file\fR variable in
+\fI.package\fR is honored instead.
+'''
+''' T u t o r i a l
+'''
+.SH TUTORIAL
+This (long) section is an introduction to \fImetaconfig\fR, in which we will
+learn all the basics. If you already know how to use \fImetaconfig\fR, you
+may safely skip to the next section.
+'''
+.SS Overview
+.PP
+Usually when you want to get some source package to compile on a given
+platform you have to edit the main Makefile (assuming there is one!),
+choose a C compiler, make sure you have the proper libraries, and then
+fire the \fImake\fR command. If the package is reasonably well written, it
+will compile (without a warning being an option :-). In itself, the last
+sentence is a real performance, since given the variety of UNIX platforms
+available today and the diversity of flavours, that means the author of the
+package has gone into deep trouble to figure out the right choices given
+some standard trial, guessing and messing around with system includes and
+types.
+.PP
+However, despite all his talent, the author cannot possibly know that
+some system has a broken system call, or that some sytem structure lacks
+one otherwise standard field, or simply wheter a given include file exists
+or not. And I'm not considering the implicit assumptions, like the type
+returned by the \fImalloc()\fR function or the presence of the \fIrename()\fR
+system call to name a few. But that knowledge is necessary to achieve real
+portability.
+.PP
+Now let's not abuse ourselves. Using that information requires greater
+skills, yet it can lead to more portable programs since it is then
+written in a system-independant fashion and relies only on the fact that
+some assumption is true or false on a particular system, each assumption
+being unrelated with each other. That is to say, we do not say: We're on
+a BSD system or we are on a USG system. That's too fuzzy anyway nowadays.
+No, we want to say to the source code: this system does not have the
+.I rename()
+system call and \fImalloc()\fR returns a \fI(void *)\fR
+value.
+.PP
+Metaconfig is a tool that will let you do just that, with the additional
+benefit of not having to hand-edit the Makefile if all goes well. By
+running \fImetaconfig\fR, you create a shell script named \fIConfigure\fR.
+Lots of efforts have been devoted to the Configure script internals to ensure
+it will run on 99% of the existing shells available as of this writing.
+Configure will probe the target system, asking questions when in doubt and
+gather all the answers in one single shell file, which in turn can be used
+to automatically generate configured Makefiles and C include files.
+.PP
+There is only a limited (but quite large) set of symbols available for your
+shell scripts and C programs. They are all documented in the Glossary file.
+All you need to do is learn about them and start using them to address
+portability and configuration problems. Then, by running \fImetaconfig\fR,
+a suitable Configure script will be generated for your package.
+.PP
+The Configure script is built out several units (more than 300), each
+unit being responsible for defining a small number of shell and/or C
+symbols. Units are assembled together at the final stage, honoring
+the dependency graph (one unit may need the result of several other
+units which are then placed before in the script).
+'''
+.SS Symbols
+.PP
+Symbols are the most important thing in the \fImetaconfig\fR world. They
+are the smallest recognized entity, usually a word, and can be granted
+a value at the end of the Configure execution. For instance, the C
+pre-processor symbol \fIHAS_RENAME\fR is a \fImetaconfig\fR symbol that is
+guranteed to be defined if, and only if, the \fIrename()\fR system call
+is present. Likewise, the \fI\$\&ranlib\fR shell variable will be set to
+either ':' or 'ranlib' depending on whether the call to the \fIranlib\fR
+program is needed to order a library file. How this works is not important
+for now, what is important is to understand that those symbols are given
+a \fIlife\fR (i.e. a value) upon \fIConfigure\fR execution.
+.PP
+Using symbols is relatively straightforward. In a C source file, you simply
+use the symbol value, as a pre-processor directive (for instance an: \fI#ifdef
+HAS_RENAME\fR) or, if the symbol value is a string, directly as you would use
+a macro in C. And in a shell file or a Makefile, you may reference a shell
+symbol directly.
+.PP
+Actually, I'm lying, because that's not completely as magic as the previous
+paragraph could sound. In a C file, you need to include the Configure-produced
+\fIconfig.h\fR file, and you must wrap your shell script or Makefile in a .SH
+file and you may reference the shell symbol only in the variable
+substitution part of that .SH file. More on this later.
+'''
+.SS Source Files
+.PP
+Symbols may only appear in a limited set of source files, because
+\fImetaconfig\fR will only scan those when looking for known symbols, trying
+to figure out which units it will need. You may use C symbols in C source
+files, i.e. files with a \fI.c\fR, \fI.h\fR, \fI.y\fR or \fI.l\fR extension,
+and shell symbols are looked for only in .SH files.
+.PP
+In order to get the value of a symbol, a C file needs to include the special
+\fIconfig.h\fR file, which is produced by \fIConfigure\fR when C symbols
+are present. And .SH files are run through a shell, producing a new file.
+However, in the top section of the .SH file, the special \fIconfig.sh\fR
+file (also produced by running \fIConfigure\fR) is sourced, and variable
+substitutions apply. Actually, \fIconfig.h\fR is produced by running the
+\fImetaconfig\fR-produced \fIconfig_h.SH\fR file, again using variable
+substitution. So we're going to look at that a little more closely since
+this is the heart of the whole \fIconfiguration\fR scheme...
+'''
+.SS Variable Substitution
+.PP
+There is shell construct called \fIhere document\fR which enables a
+command to take an input specified within the script itself. That
+input is interpreted by the shell as a double-quoted string or a
+single quoted string depending on the form of the here document
+specification.
+.PP
+To specify a here document, the '<<' token is used, followed by a single
+identifier. From then on, the remaining script lines form the input for
+the command, until the here document is found on a line by itself.
+Shell substitution (including shell variable substitutions) is done
+unless the identifier is surrounded by single quotes. For instance:
+.Ex
+var='first'
+tar='second'
+echo "--> first here document:"
+cat <<EOM
+var='\$var'
+tar='\$\&tar'
+EOM
+echo "--> second here document:"
+cat <<'EOM'
+echo \$var
+echo \$\&tar
+EOM
+echo "--> end."
+.Ef
+will produce, when run through a shell:
+.Ex
+--> first here document:
+var='first'
+tar='second'
+--> second here document:
+echo \$var
+echo \$\&tar
+--> end.
+.Ef
+The first here document has its content interpreted whilst the second
+one is output as-is. Both are useful in a .SH script, as we are about to see.
+'''
+.SS Using .SH Scripts
+.PP
+A .SH script is usually produced by running the \fIMakeSH\fR script other
+an existing file, transforming \fIfile\fR into a \fIfile.SH\fR. Let's take
+a single example. Here is a little script (let's call it \fIintsize\fR)
+which prints a single message, the size of the \fBint\fR datatype in C.
+Unfortunately, it has the value hardwired in it, thusly:
+.Ex
+#!/bin/sh
+intsize='4'
+echo "On this machine, the int type is \$\&intsize bytes"
+.Ef
+Let's run \fImakeSH\fR on it by typing '\fImakeSH intsize\fR'. We get a single
+\fIintsize.SH\fR file that looks like this:
+.Ex
+case \$CONFIG in
+\&'')
+ if test -f config.sh; then TOP=.;
+ elif test -f ../config.sh; then TOP=..;
+ elif test -f ../../config.sh; then TOP=../..;
+ elif test -f ../../../config.sh; then TOP=../../..;
+ elif test -f ../../../../config.sh; then TOP=../../../..;
+ else
+ echo "Can't find config.sh."; exit 1
+ fi
+ . \$TOP/config.sh
+ ;;
+esac
+: This forces SH files to create target in same directory as SH file.
+: This is so that make depend always knows where to find SH derivatives.
+case "\$0" in
+*/*) cd \`expr X\$0 : 'X\\\\(.*\\\\)/'\` ;;
+esac
+echo "Extracting intsize (with variable substitutions)"
+: This section of the file will have variable substitutions done on it.
+: Move anything that needs config subs from !NO!SUBS! section to !GROK!THIS!.
+: Protect any dollar signs and backticks that you do not want interpreted
+: by putting a backslash in front. You may delete these comments.
+\$spitshell >intsize <<!GROK!THIS!
+\$startsh
+\&!GROK!THIS!
+
+: In the following dollars and backticks do not need the extra backslash.
+\$spitshell >>intsize <<'!NO!SUBS!'
+intsize='4'
+echo "On this machine, the int type is \$\&intsize bytes"
+\&!NO!SUBS!
+chmod 755 intsize
+\$\&eunicefix intsize
+.Ef
+The first part of this script (in the \fIcase\fR statement) is trying to
+locate the \fIconfig.sh\fR file, in order to source it. The \fI\$CONFIG\fR
+variable is false by default, by true when \fIconfig.sh\fR has been sourced
+already (which would be the case if this file was executed from within
+\fIConfigure\fR itself, but let's not confuse the issue here).
+.PP
+Once the \fIconfig.sh\fR file has been sources, all the shell symbols
+defined by \fIConfigure\fR are set. We know reach a second case statement,
+used to change the current directory should a path be used to
+reach this program (for instance if we said '\fIsh ../scripts/intsize.SH\fR',
+we would first run '\fIcd ../scripts\fR' before continuing). If you do not
+understand this, don't worry about it.
+.PP
+Here comes the intersting stuff. This script uses the \fI\$spitshell\fR
+variable, and it's not something we know about...yet. If you look through
+the Glossary file, you will see that this is a variable known by
+\fImetaconfig\fR. If you make this file part of your distribution (by including
+it in the MANIFEST.new file, we'll come back to that later on) and run
+\fImetaconfig\fR, then the \fIConfigure\fR script will determine a suitable
+value for this variable and it will be set in \fIconfig.sh\fR. Same goes for
+\fI\$startsh\fR and the mysterious \fI\$\&eunicefix\fR at the end. On a
+reasonable system, the relevant part of \fIconfig.sh\fR would look like this:
+.Ex
+spitshell='cat'
+startsh='#!/bin/sh'
+eunicefix=':'
+.Ef
+Ah! We're getting there. Now it looks familiar. We're facing a single
+\fIcat\fR command whose input comes from a variable-interpolated here
+document and whose output is redirected to \fIintsize\fR. The value
+will be that of \fI\$startsh\fR, i.e. '#!/bin/sh'. Fine so far.
+.PP
+Then we reach the second here document expansion, to get the remaining of
+the script. This time, the here document symbol is surrounded by single
+quotes so the contents will be appended verbatim to the \fIintsize\fR file.
+So, by running '\fIsh intsize.SH\fR', we get the following output:
+.Ex
+Extracting intsize (with variable substitutions)
+.Ef
+and by looking at the produced intsize file, we see:
+.Ex
+#!/bin/sh
+intsize='4'
+echo "On this machine, the int type is \$\&intsize bytes"
+.Ef
+which is exactly what we had at the beginning. So far, it's a no-operation
+procedure... But, how marvelous! It so happens (pure coincidence, trust me!),
+that \fImetaconfig\fR knows about the \fI$\&intsize\fR shell symbol. By moving
+the initialization of intsize to the variable-interpolated area of the .SH
+script and initializing it with the \fIConfigure\fR-computed value,
+and removing the now useless comments added by \fImakeSH\fR, we get:
+.Ex
+case \$CONFIG in
+\&'')
+ if test -f config.sh; then TOP=.;
+ elif test -f ../config.sh; then TOP=..;
+ elif test -f ../../config.sh; then TOP=../..;
+ elif test -f ../../../config.sh; then TOP=../../..;
+ elif test -f ../../../../config.sh; then TOP=../../../..;
+ else
+ echo "Can't find config.sh."; exit 1
+ fi
+ . \$TOP/config.sh
+ ;;
+esac
+case "\$0" in
+*/*) cd \`expr X\$0 : 'X\\\\(.*\\\\)/'\` ;;
+esac
+echo "Extracting intsize (with variable substitutions)"
+\$\&spitshell >intsize <<!GROK!THIS!
+\$\&startsh
+intsize='\$\&intsize'
+\&!GROK!THIS!
+
+\$\&spitshell >>intsize <<'!NO!SUBS!'
+echo "On this machine, the int type is \$\&intsize bytes"
+\&!NO!SUBS!
+chmod 755 intsize
+\$\&eunicefix intsize
+.Ef
+Of course, running this script through a shell will again output the same
+script. But if we run \fIConfigure\fR on a machine where an \fBint\fR is
+stored as a 64 bits quantity, \fIconfig.sh\fR will set \fIintsize\fR to
+8 and the \fIintsize\fR script will bear the right value and print:
+.Ex
+On this machine, the int type is 8 bytes
+.Ef
+which is correct. Congratulations! We have just configured a shell script!!
+'''
+.SS Producing config.h
+.PP
+We can now have a look at the way \fIconfig.h\fR is produced out of
+\fIconfig_h.SH\fR. We know that running \fIConfigure\fR produces a
+\fIconfig.sh\fR script (how exactly this is done is not strictly
+relevant here, but for the curious, it's another here document
+substitution within \fIConfigure\fR itself). The \fIconfig_h.SH\fR
+itself is built by \fImetaconfig\fR at the same time \fIConfigure\fR
+is, provided you make use of at least one C symbol within your sources.
+.PP
+Let's have a look at some random \fIconfig_h.SH\fR file to see what
+really happens:
+.Ex
+case \$CONFIG in
+\&'')
+ if test -f config.sh; then TOP=.;
+ elif test -f ../config.sh; then TOP=..;
+ elif test -f ../../config.sh; then TOP=../..;
+ elif test -f ../../../config.sh; then TOP=../../..;
+ elif test -f ../../../../config.sh; then TOP=../../../..;
+ else
+ echo "Can't find config.sh."; exit 1
+ fi
+ . \$TOP/config.sh
+ ;;
+esac
+case "\$0" in
+*/*) cd \`expr X\$0 : 'X\\\\(.*\\\\)/'\` ;;
+esac
+echo "Extracting config.h (with variable substitutions)"
+sed <<!GROK!THIS! >config.h -e 's!^#undef!/\*#define!' -e 's!^#un-def!#undef!'
+/*
+ * This file was produced by running the config_h.SH script, which
+ * gets its values from config.sh, which is generally produced by
+ * running Configure.
+ *
+ * Feel free to modify any of this as the need arises. Note, however,
+ * that running config.h.SH again will wipe out any changes you've made.
+ * For a more permanent change edit config.sh and rerun config.h.SH.
+ */
+
+/* Configuration time: \$\&cf_time
+ * Configured by: \$\&cf_by
+ * Target system: \$\&myuname
+ */
+
+#ifndef _config_h_
+#define _config_h_
+
+/* bcopy:
+ * This symbol is maped to memcpy if the bcopy() routine is not
+ * available to copy strings.
+ */
+/* HAS_BCOPY:
+ * This symbol is defined if the bcopy() routine is available to
+ * copy blocks of memory. You should not use this symbol under
+ * normal circumstances and use bcopy() directly instead, which
+ * will get mapped to memcpy() if bcopy is not available.
+ */
+#\$\&d_bcopy HAS_BCOPY /**/
+#ifndef HAS_BCOPY
+#ifdef bcopy
+#un-def bcopy
+#endif
+#define bcopy(s,d,l) memcpy((d),(s),(l)) /* mapped to memcpy */
+#endif
+
+/* HAS_DUP2:
+ * This symbol, if defined, indicates that the dup2 routine is
+ * available to duplicate file descriptors.
+ */
+#\$\&d_dup2 HAS_DUP2 /**/
+
+/* I_STRING:
+ * This symbol, if defined, indicates to the C program that it should
+ * include <string.h> (USG systems) instead of <strings.h> (BSD systems).
+ */
+#\$\&i_string I_STRING /**/
+
+#endif
+\&!GROK!THIS!
+.Ef
+At the top of the file, we recognize the standard .SH construct that we
+have already studied in detail. Next comes the extraction of the file
+itself, via a here document with variable substitutions. However, here
+we do not use a plain \fIcat\fR but a \fIsed\fR instead, since we need
+to do some further editing on-the-fly. We'll see why later on, so let's
+forget about it right now.
+.PP
+We now reach the leading comment, and the file is tagged with the
+configuration time, the target system, etc... (those variables coming
+from the sourced \fIconfig.sh\fR file have been set up by \fIConfigure\fR).
+That comment header is followed by a '#ifndef' protection to guard against
+multiple inclusions of this file. Then comes the heart of the file...
+.PP
+It helps to know that \fI\$d_*\fR and \fI\$i_*\fR variables are set to
+either '\fIdefine\fR' or '\fIundef\fR' by \fIConfigure\fR, depending on
+wether a function or an include file is present on the system or not.
+That means the:
+.Ex
+#\$\&d_bcopy HAS_BCOPY /**/
+.Ef
+line will be expanded to either:
+.Ex
+#define HAS_BCOPY /**/
+.Ef
+if the \$\&d_bcopy variable is set to 'define' or:
+.Ex
+#undef HAS_BCOPY /**/
+.Ef
+if \$\&d_bcopy was set to 'undef', because the feature was not there. However,
+that's not what gets written in the \fIconfig.h\fR file because of the
+\fIsed\fR filter we have already seen, which will transform the second form
+into:
+.Ex
+/*#define HAS_BCOPY /**/
+.Ef
+That's a handy form for later editing of \fIconfig.h\fR because you only need
+to remove the leading '/*' if you want to override \fIConfigure\fR's choice.
+Likewise, you may add a single '/*' at the beginning of a '#define' line
+to avoid the definition of a particular symbol. This is why each symbol
+definition is protected by a trailing '/**/', to close the leading
+comment opened by '/*' (comments are not nested in C).
+.PP
+Now transforming '#undef' into '/*#define' is nice, but if we want to actually
+write a '#undef', we're stuck... unless we write it as '#un-def' and let
+\fIsed\fR fix that to '#undef' while producing \fIconfig.h\fR, which is what
+is actually done here.
+.PP
+The same kind of reasoning applies to those two lines:
+.Ex
+#\$\&d_dup2 HAS_DUP2 /**/
+#\$\&i_string I_STRING /**/
+.Ef
+and assuming \fIconfig.sh\fR defines:
+.Ex
+d_dup2='define'
+i_string='undef'
+.Ef
+we'll get in the produced \fIconfig.h\fR:
+.Ex
+#define HAS_DUP2 /**/
+/*#define I_STRING /**/
+.Ef
+Clear as running water? Good!
+.PP
+Now it should be obvious that by including \fIconfig.h\fR in all your
+C source files, you get to know what \fIConfigure\fR has guessed on
+your system. In effect, by using those symbols, you are writing
+configured C code, since \fImetaconfig\fR will know that you need
+those symbols and will generate a suitable \fIconfig_h.SH\fR file as
+well as all the necessary code in \fIConfigure\fR to compute a
+proper value for them (by assigning values to associated shell variables).
+'''
+.SS Running Metaconfig
+.PP
+Let's focus on the \fImetaconfig\fR program for a while to understand how
+it uses its units and your source code to produce all the needed configuration
+files. If you intend to write new units, you should have a good understanding
+of the whole scheme.
+.PP
+If there is no MANIFEST.new file, \fImetaconfig\fR will try to use the
+MANIFEST file instead, for convenience. Everywhere we mention MANIFEST.new,
+it can be understood as MANIFEST provided there is no MANIFEST.new file
+found at the root of your package.
+.PP
+Assuming your MANIFEST.new file is properly set and lists all the source
+files you wish to configure, and that you have run \fIpackint\fR in your
+root source directory to create a \fI.package\fR file, you may run
+\fImetaconfig\fR and you'll get the following:
+.Ex
+\$ metaconfig
+Locating units...
+Extracting dependency lists from 312 units...
+Extracting filenames (*.[chyl] and *.SH) from MANIFEST.new...
+Building a Wanted file...
+.in +2
+Scanning .[chyl] files for symbols...
+Scanning .SH files for symbols...
+.in -2
+Computing optimal dependency graph...
+.in +2
+Building private make file...
+Determining loadable units...
+Updating make file...
+.in -2
+Determining the correct order for the units...
+Creating Configure...
+Done.
+.Ef
+The first phase looks for all the units files (ending with .U) in the public
+directory first, then in your private one. If you copy a public file in your
+private U directory (i.e. a directory named U at the top level of your package),
+it will override the public version. Once it has a list of all the available
+units, it parses them and extracts all the ?MAKE: lines to know about the
+dependencies and the known shell symbols. It also focuses on the ?H: lines to
+learn about the C symbols and which shell symbols needs to be computed to get
+a proper value for that C symbol (so we have another level of dependencies
+here).
+.PP
+Next, the proper filenames are extracted from the MANIFEST.new files and a
+\fIWanted\fR file is built: that file lists all the C symbols and the shell
+symbols needed for that package. We first scan the C-type files for C symbols,
+then propagate the dependencies to their associated shell symbols (gathered
+from ?H: lines). Next .SH files are scanned and finally all the shell symbols
+are known.
+.PP
+A temporary Makefile is built and metaconfig tries to \fImake\fR all the shell
+symbols to see what commands (listed on the second ?MAKE: lines) are
+executed, and thus which units are really needed. Optional units not otherwise
+required are removed and a second Makefile is generated. This time, we know
+about all the units and their respective orders, optional units having been
+removed and default values computed for their shell symbols. The \fIConfigure\fR
+script can then be generated, along with \fIconfig_h.SH\fR. We're done.
+'''
+.SS Conventions
+.PP
+Proper conventions needs to be followed to make the whole process sound.
+There is a case convention for units and a variable naming convention.
+.PP
+All units should have their first letter lower-cased, unless they are
+special units. By special, we mean they do not really define new
+shell variables that can be used by the user in his .SH files, but rather
+units producing scripts or shell variables that are to be used internally
+by the \fIConfigure\fR script. Typical examples are the \fIInit.U\fR
+file which is the main variable initialization, or \fIMyread.U\fR which
+produces the \fImyread\fR script used almost everywhere in \fIConfigure\fR
+when a question is to be asked to the user.
+.PP
+Non-special units then subdivise in two distinct groups: units defining
+variables associated to a C symbol and units defining shell variables of
+their own. The first group is further divided in variables related to
+include files (their name begin with \fIi_\fR) and variables related to
+other definitions (name starting with \fId_\fR). The second group have
+names standing for itself, for instance \fIcc.U\fR defines the \fI\$\&cc\fR
+shell variable whose value is the C compiler to be used.
+.PP
+Special units sometimes reserve themselves some pre-defined variable and
+return "results" in other well-known variables. For instance, the \fImyread\fR
+script produced by Myread.U expects the prompt in \fI\$rp\fR, the default
+answer in \fI\$dflt\fR and places the user answer in \fI\$ans\fR. This is
+not documented in this manual page: you have to go and look at the unit
+itself to understand which variables are used and how the unit is to be
+used.
+'''
+.SS Using The Glossary
+.PP
+The Glossary file is automatically produced by the \fImakegloss\fR script,
+which extracts the information from ?S:, ?C: and ?MAKE: lines and reformats
+them into an alphabetically sorted glossary.
+It is important to read the Glossary to know about the symbols you are
+allowed to use. However, the Glossary will not tell you how to use them.
+Usually, that's up to you.
+.PP
+One day, you will probably write your own units and you will know enough
+about \fImetaconfig\fR to do so quickly and efficiently. However, never
+forget to properly document your work in the ?S: and ?C: lines, or other
+people will not be able to reuse it. Remember about the time where you
+had only the Glossary and this manual page to get started.
+'''
+.SS Conclusion
+.PP
+Now that you know the \fImetaconfig\fR basics, you should read the
+\fIDESCRIPTION\fR section, then skip to the \fIREFERENCE\fR section
+to learn about all the gory details such as the allowed syntax for
+unit control lines (lines starting with a '?') or the distinct MAKE
+commands you are allowed to use.
+.SH REFERENCE
+This section documents the internals of \fImetaconfig\fR, basically the
+unit syntax, the special units you should know about and the hint files.
+'''
+.SS General Unit Syntax
+.PP
+A metaconfig unit is divided into two distinct parts. The header section
+(lines starting with '?') and a shell section (code to be included in
+the \fIConfigure\fR script). It is possible to add '?X:' comments anywhere
+within the unit, but the other '?' lines (also called \fIcontrol lines\fR)
+have a strict ordering policy.
+.PP
+If a control line is too long, it
+is possible to use a continuation by escaping the final new-line with a
+backslash and continuing on the next line (which should then be indented by
+spaces or tabs).
+.PP
+The following is a formal description of each of the control lines. Unless
+stated otherwise, the order of this presentation is the order to be used
+within the unit.
+.TP 5
+?RCS: \fIfree text\fR
+To be used for RCS comments, at the top of the unit.
+.TP
+?X: \fIany text\fR
+General purpose comments. May appear anywhere in the unit but must be left
+justfied. For RCS comments, please use the ?RCS: comment form.
+.TP
+?MAKE:\fIsymbol list\fR: \fIdependency list\fR [\fI+optional\fR]
+This is the first dependency line. The first \fIsymbol list\fR should list
+all the symbols built by this unit (i.e. whose value is computed by the
+shell section of the unit). Symbols should be space separated. If a defined
+symbol is for internal use only and should not appear in the generated
+\fIconfig.sh\fR file, then it should be preceded by a '+' (not to be confused
+with optional dependencies defined hereafter).
+The second part of the list (after the middle ':') is the unit dependency.
+It should list all the needed special units, as well as all the symbols
+used by the shell implementation. If a symbol is nedded but its configuration
+value is not critical, it can be preceded by a '+', in which case it is
+called a conditional dependency: its corresponding unit will be loaded if,
+and only if, that symbol is otherwise really wanted; otherwise the default
+value will be used.
+.TP
+?MAKE:\fItab\fR \fIcommand\fR
+There can be one or more command lines following the initial dependency lines.
+Those commands will be executed when the unit is wanted to load them into
+\fIConfigure\fR. See the paragraph about make commands for more information.
+Note that the leading \fItab\fR character is required before the \fIcommand\fR.
+.TP
+?Y:\fIlayout\fR
+Declare a layout directive for this unit. That directive may be one of the
+strings \fItop\fR, \fIdefault\fR or \fIbottom\fR (case does not matter,
+recommended style is to spell them out uppercased). If omitted, \fIdefault\fR
+is assumed.
+.sp
+This directive is only required if you wish to force a unit at the top or
+the bottom of the generated \fIConfigure\fR script, as unit dependencies
+permit it. Important questions may thus be forced at the beginning. Within
+the same layout class, units are sorted alphabetically with two special
+cases for d_* and i_* units, forced respectively at the top and bottom of
+their classes (but these should belong to the default class).
+.sp
+It you force at the top a unit whose dependencies require all the other
+unit to precede it, you achieve nothing interesting. Therefore, that directive
+should really be used to increase the priority of some interactive units
+that do not depend on many other user-visible symbols, like path-related
+questions.
+.TP
+?S:\fIsymbol_name\fR [(\fIobsolete symbol list\fR)]:
+Introduces a shell symbol. This first line names the symbol, optionally
+followed by a list enclosed between parenthesis and giving the obsolete
+equivalent. Those obsolete symbols will be remapped to the new
+\fIsymbol_name\fR if the \fB\-o\fR option is given to \fImetaconfig\fR.
+.TP
+?S:\fIany text, for Glossary\fR
+Basically a comment describing the shell symbol, which will be extracted
+by \fImakegloss\fR into the Glossary file.
+.TP
+?S:.
+Closes the shell symbol comment.
+.TP
+?C:\fIsymbol_name\fR [~ \fIalias\fR] [(\fIobsolete symbol list\fR)]:
+Introduces a new C symbol. The \fIalias\fR name is the name under which
+the C symbol will be controlled, i.e. if the \fIalias\fR symbol is wanted,
+then that C symbol will be written in the \fIconfig_h.SH\fR file. Usually,
+the alias is just '%<' (stands for the unit's name) and there is also
+a ?W: line mapping a C symbol to the \fIalias\fR. Also the relevant parts
+of the ?H: lines are explicitly protected by a '?%<' condition. See
+the symbol aliasing paragraph for more details.
+The remaining of the line is the optional \fIobsolete symbol list\fR,
+which lists old equivalents for the new \fIsymbol_name\fR.
+.TP
+?C:\fIany text, for Glossary and config_h.SH\fR
+Basically a comment describing the C symbol, which will be extracted
+by \fImakegloss\fR into the Glossary file and by \fImetaconfig\fR into
+the \fIconfig_h.SH\fR file if the symbol is wanted (or if its alias is
+wanted when symbol aliasing is used).
+.TP
+?C:.
+Closes the C symbol comment.
+.TP
+?H:?\fIsymbol\fR:\fIconfig_h.SH stuff\fR
+This is the general inclusion request into \fIconfig_h.SH\fR. The line is
+only written when the guarding \fIsymbol\fR is really wanted. This general
+form is needed when C symbol aliasing was used. Otherwise, if you use one
+of the other "standard" forms, the guarding is automatically done by
+\fImetaconfig\fR itself.
+.TP
+?H:#\fI\$d_var VAR\fR "\fI\$var\fR"
+Conditionally defines the \fIVAR\fR C symbol into \fI\$var\fR when \fI$d_var\fR
+is set to '\fIdefine\fR'. Implies a '?\fIVAR\fR:' guarding condition, and
+\fImetaconfig\fR automatically links \fIVAR\fR to its two shell variable
+dependencies (i.e. both \fI\$d_var\fR and \fI\$var\fR will be flagged as
+\fIwanted\fR if \fIVAR\fR is used in C sources).
+.TP
+?H:#define \fIVAR\fR [\fIoptional text\fR]
+Always defines the \fIVAR\fR C symbol to some value. Implies a '?\fIVAR\fR:'
+guarding condition. An automatic shell dependency is made to the unit itself.
+.TP
+?H:#define \fIVAR(x,y,z)\fR \fI\$var\fR
+Always defines the macro \fIVAR\fR to be the value of the \fI\$var\fR variable.
+It is up to the unit to ensure \fI\$var\fR holds a sensible value. An
+automatic dependency between the C macro \fIVAR\fR and the shell variable
+is established, and the whole line is guarded by an implicit '?\fIVAR\fR:'.
+.TP
+?H:#\fI\$d_var VAR\fR
+Conditionally defines \fIVAR\fR if \fI\$d_var\fR is set to '\fIdefine\fR'.
+Implies a '?\fIVAR\fR:' guarding condition. An automatic shell dependency is
+generated towards \fI\$d_war\fR.
+.TP
+?H:#define \fIVAR\fR "\fI\$var\fR"
+Assigns a configured value to the \fIVAR\fR C symbol. Implies a '?\fIVAR\fR:'
+gurading condition. An automatic shell dependency is generated to link
+\fIVAR\fR and \fI\$var\fR.
+.TP
+?H:.
+Closes the \fIconfig_h.SH\fR inclusion requests.
+.TP
+?M:\fIC symbol\fR: \fIC dependencies\fR
+Introduces magic definition concerning the C symbol, for \fIconfmagic.h\fR,
+and defines the guarding symbol for the remaining ?M: definitions. This
+line silently implies '?W:%<:\fIC symbol\fR', i.e. the unit will be loaded
+into Configure if the C symbol appears within the C sources, whether magic
+is used or not. The C dependencies are activated when magic is used, in order
+to force their definition in \fIconfig_h.SH\fR. However, if magic is \fBnot\fR
+used but the C symbol appears in the source without the needed C dependencies,
+you will be warned every time the Wanted file is built, since it may be a
+portability issue (and also because the unit is unconditionally loaded into
+Configure whenever the C symbol is used, regardless of the other ?C: lines
+from the unit).
+.TP
+?M:\fIcpp defs\fR
+Defines the magic cpp mapping to be introduced in confmagic.h whenever the
+concerned symbol is used. There is an implicit '?\fIsym\fR' guarding where
+\fIsym\fR is the symbol name defined by the leading ?M: line.
+.TP
+?M:.
+Closes the \fIconfmagic.h\fR inclusion request.
+.TP
+?W:\fIshell symbol list\fR:\fIC symbol list\fR
+Ties up the destiny of the shell symbols with that of the C symbols: if any
+of the C symbols listed is wanted, then all the shell symbols are marked
+as wanted. Useful to force inclusion of a unit (shell symbol list set to
+\&'%<') when the presence of some C symbol is detected. The shell symbol list
+may be left empty, to benefit from the side effect of C symbol location
+within the builtin pre-processor (symbol being \fIdefined\fR for that
+pre-processor if located in the source). To look for patterns with a space
+in them, you need to quote the C symbols within simple quotes, as in
+\&'struct timezone'.
+.TP
+?V:\fIread-only symbols\fR:\fIread-write symbols\fR
+This is a \fImetalint\fR hint and should be used only in special units
+exporting some shell variables. The variables before the middle ':'
+are exported read-only (changing them will issue a warning), while
+other symbols may be freely read and changed.
+.TP
+?F:\fIfiles created\fR
+This line serves two purposes: it is a \fImetalint\fR hint, and also
+a placeholder for future \fIjmake\fR use. It must list three kind of files:
+the temporary one which are created for a test, the private UU ones created
+in the UU directory for later perusal, and the public ones left in the
+root directory of the package. Temporary files must be listed with a
+preceding '!' character (meaning "no! they're not re-used later!"), private
+UU files should be preceded by a './' (meaning: to use them, say \fI./file\fR,
+not just \fIfile\fR), and public ones should be named as-is.
+.TP
+?T:\fIshell temporaries\fR
+Another \fImetalint\fR hint. This line lists all the shell variables used
+as temporaries within the shell section of this unit.
+.TP
+?D:\fIsymbol\fR='\fIvalue\fR'
+Initialization value for symbols used as conditional dependencies. If no
+?D: line is found, then a null value is used instead. The \fImetalint\fR
+program will warn you if a symbol is used at least once as a conditional
+dependency and does not have a proper ?D: initialization. It's a good
+practice to add those lines even for a null initialization since it
+emphasizes on the possibly optional nature of a symbol.
+.TP
+?O:\fIany message you want\fR
+This directive indicates that this unit is obsolete as a whole. Whenever
+usage of any of its symbols is made (or indirect usage via dependencies),
+the message is output on the screen (on stderr). You can put one ore more
+lines, in which case each line will be printed, in order.
+.TP
+?LINT:\fImetalint hints\fR
+See the \fImetalint\fR manual page for an explaination of the distinct
+hints that can be used.
+.TP
+?INIT:\fIinitialization code\fR
+The initialization code specified by this line will be loaded at the top
+of the \fIConfigure\fR script provided the unit is needed.
+'''
+.SS C Symbol Aliasing
+.PP
+Sometimes it is not possible to rely on \fImetaconfig\fR's own default
+selection for \fIconfig_h.SH\fR comments and C symbol definition. That's
+where aliasing comes into play. Since it's rather tricky to explain, we'll
+study an example to understand the underlying mechanism.
+.PP
+The d_const.U unit tries to determine whether or not your C compiler
+known about the \fIconst\fR keyword. If it doesn't we want to remap
+that keyword to a null string, in order to let the program compile.
+Moreover, we want to automatically trigger the test when the \fIconst\fR
+word is used.
+.PP
+Here are the relevant parts of the d_const.U unit:
+.Ex
+?MAKE:d_const: cat cc ccflags Setvar
+?MAKE: -pick add \$@ %<
+?S:d_const:
+?S: This variable conditionally defines the HASCONST symbol, which
+?S: indicates to the C program that this C compiler knows about the
+?S: const type.
+?S:.
+?C:HASCONST ~ %<:
+?C: This symbol, if defined, indicates that this C compiler knows about
+?C: the const type. There is no need to actually test for that symbol
+?C: within your programs. The mere use of the "const" keyword will
+?C: trigger the necessary tests.
+?C:.
+?H:?%<:#$\&d_const HASCONST /**/
+?H:?%<:#ifndef HASCONST
+?H:?%<:#define const
+?H:?%<:#endif
+?H:.
+?W:%<:const
+?LINT:set d_const
+?LINT:known const
+: check for const keyword
+echo " "
+echo 'Checking to see if your C compiler knows about "const"...' >&4
+$cat >const.c <<'EOCP'
+main()
+{
+ const char *foo;
+}
+EOCP
+if $\&cc -c $\&ccflags const.c >/dev/null 2>&1 ; then
+ val="$\&define"
+ echo "Yup, it does."
+else
+ val="$\&undef"
+ echo "Nope, it doesn't."
+fi
+set d_const
+eval $\&setvar
+.Ef
+First we notice the use of a ?W: line, which basically says: "This unit
+is wanted when the \fIconst\fR keyword is used in a C file.". In order
+to conditionally remap \fIconst\fR to a null string in \fIconfig.h\fR,
+I chose to conditionally define \fIHASCONST\fR via \fI\$\&d_const\fR.
+.PP
+However, this raises a problem, because the \fIHASCONST\fR symbol is not
+going to be used in the sources, only the \fIconst\fR token is. And the
+?H: line defining \fIHASCONST\fR is implicitely guarded by '?HASCONST'.
+Therefore, we must add the explicit '?%<' constraint to tell \fImetaconfig\fR
+that those lines should be included in \fIconfig_h.SH\fR whenever the
+\&'%<' symbol gets wanted (%< refers to the unit's name, here \fId_const\fR).
+.PP
+That's almost perfect, because the ?W: line will want \fId_const\fR whenever
+\fIconst\fR is used, then the ?H: lines will get included in the
+\fIconfig_h.SH\fR file. However, the leading comment (?C: lines) attached to
+\fIHASCONST\fR is itself also guarded via \fIHASCONST\fR, i.e. it has an
+implicit '?HASCONST' constraint. Hence the need for \fIaliasing\fR the
+\fIHASCONST\fR symbol to '%<'.
+.PP
+The remaining part of the unit (the shell part) is really straightforward.
+It simply tries to compile a sample C program using the \fIconst\fR keyword.
+If it can, then it will define \fI\$\&d_const\fR via the \fI\$\&setvar\fR
+fonction (defined by the \fISetvar.U\fR unit). See the paragraph about
+special units for more details.
+'''
+.SS Make Commands
+.PP
+On the ?MAKE: command line, you may write a shell command to be executed as-is
+or a special \fI-pick\fR command which is trapped by \fImetaconfig\fR and
+parsed to see what should be done. The leading '-' is only there to prevent
+\fImake\fR from failing when the command returns a non-zero status -- it's
+not really needed since we use '\fImake -n\fR' to resolve the dependencies,
+but I advise you to keep it in case it becomes mandatory in future versions.
+The syntax of the \fIpick\fR command is:
+.Ex
+-pick \fIcmd\fR \$@ \fItarget_file\fR
+.Ef
+where \fI\$@\fR is the standard macro within Makefiles standing for the current
+target (the name of the unit being built, with the final .U extension stripped).
+The \fIcmd\fR part is the actual \fImetaconfig\fR command to be run, and the
+\fItarget_file\fR is yet another parameter, whose interpretation depends on
+the \fIcmd\fR itself. It also has its final .U extension stripped and normally
+refers to a unit file, unless it start with './' in which case it references
+one of the \fImetaconfig\fR control files in the '\fI.MT\fR directory.
+.PP
+The available commands are:
+.TP 10
+add
+Adds the \fItarget_file\fR to \fIConfigure\fR.
+.TP
+add.Config_sh
+Fills in that part of \fIConfigure\fR producing the \fIconfig.sh\fR file.
+Only used variables are added, conditional ones (from conditional dependencies)
+are skipped.
+.TP
+add.Null
+Adds the section initializing all the shell variables used to an empty string.
+.TP
+c_h_weed
+Produces the \fIconfig_h.SH\fR file. Only the necessary lines are printed.
+.TP
+cm_h_weed
+Produces the \fIconfmagic.h\fR file. Only the necessary lines are printed.
+This command is only enabled when the \fB\-M\fR switch is given, or when a
+\fIconfmagic.h\fR file already exists.
+.TP
+close.Config_sh
+Adds the final 'EOT' symbol on a line by itself to end the here document
+construct producing the \fIconfig.sh\fR file.
+.TP
+prepend
+Prepends the content of the target to the \fItarget_file\fR if that file is
+not empty.
+.TP
+weed
+Adds the unit to \fIConfigure\fR like the \fIadd\fR command, but make some
+additional tests to remove the '?\fIsymbol\fR' and '%\fIsymbol\fR' lines
+from the \fItarget_file\fR if the symbol is not wanted or conditionally
+wanted. The '%' form is only used internally by \fImetaconfig\fR while
+producing its own .U files in the '\fI.MT\fR' directory.
+.TP
+wipe
+Same as \fIadd\fR really, but performs an additional macro substitution.
+The available macros are described in the \fIHardwired Macros\fR paragraph.
+.PP
+As a side note, \fImetaconfig\fR generates a \fI-cond\fR command internally
+to deal with conditional dependencies. You should not use it by yourself,
+but you will see it if scanning the generated \fIMakefile\fR in the \fI.MT\fR
+directory.
+'''
+.SS Hardwired Macros
+.PP
+The following macros are recognized by the \fIwipe\fR command and subsituted
+before inclusion in \fIConfigure\fR:
+.TP 10
+<BASEREV>
+The base revision number of the package, derived from \fI.package\fR.
+.TP
+<DATE>
+The current date.
+.TP
+<MAINTLOC>
+The e-mail address of the maintainer of this package, derived from
+your \fI.package\fR.
+.TP
+<PACKAGENAME>
+The name of the package, as derived from your \fI.package\fR file.
+.TP
+<PATCHLEVEL>
+The patch level of the \fImetaconfig\fR program (deprecated in favor
+of <REVISION>).
+.TP
+<REVISION>
+The SVN revision level of the \fImetaconfig\fR program.
+.TP
+<VERSION>
+The version number of the \fImetaconfig\fR program.
+.PP
+Those macros are mainly used to identify the \fImetaconfig\fR version that
+generated a particular \fIConfigure\fR script and for which package it
+was done. The e-mail address of the maintainer is hardwired in the leading
+instructions that \fIConfigure\fR prints when starting.
+.PP
+Recent \fImetaconfig\fR versions understand a much more general syntax
+of the form:
+.Ex
+ <\$variable>
+.Ef
+which is replaced at Configure-generation time by the value of \fIvariable\fR
+taken from your \fI.package\fR file. Eventually, the old hardwired macro
+format will disappear, and <\$baserev> will replace <BASEREV> in all the
+supplied units.
+'''
+.SS Special Units
+.PP
+The following special units are used to factorize code and provide higher
+level functionalities. They either produce a shell script that can be
+sourced or a shell variable that can be \fIeval\fR'ed. Parameter passing
+is done via well-know variables, either named or anonymous like \$1, \$2,
+etc... (which can be easily set via the shell \fIset\fR operator).
+When \fIConfigure\fR executes, it creates and goes into a \fIUU\fR directory,
+so every produced script lies in there and does not interfere with the
+files from your package.
+.PP
+Here are the sepcial units that you should know about, and the way to use
+them.
+.TP 5
+Cppsym.U
+This unit produces a shell script called \fICppsym\fR, which can be used
+to determine whether any symbol in a list is defined by the C preprocessor
+or C compiler you have specified.
+It can determine the status of any symbol, though the symbols in \fI$al\fR
+(attribute list) are more easily determined.
+.TP
+Csym.U
+This sets the \$csym shell variable, used internally by \fIConfigure\fR to
+check whether a given C symbol is defined or not. A typical use is:
+.Ex
+set symbol result [-fva] [previous]
+eval \$\&csym
+.Ef
+That will set the \fIresult\fR variable to 'true' if the
+function [-f],
+variable [-v] or
+array [-a]
+is defined, 'false' otherwise. If a previous value is given and the \fB\-r\fR
+switch was provided to \fIConfigure\fR (see the \fIConfigure Options\fR
+paragraph), then that value is re-used without questioning.
+.sp
+The way this computation is done depends on the answer the user gives to
+the question \fIConfigure\fR will ask about whether it should perform an
+.I nm
+extraction or not. If the exctraction was performed, the unit simply looks
+through the symbol list, otherwise it performs a compile-link test, unless
+.B \-r
+was given to reuse the previously computed value, naturally...
+.TP
+End.U
+By copying this unit into your private \fIU\fR directory and appending
+dependencies on the ?MAKE: line, you can force a given unit to be loaded
+into \fIConfigure\fR even if it is not otherwise wanted. Some units may
+only be forced into \fIConfigure\fR that way.
+.TP
+Filexp.U
+This unit produces a shell script \fIfilexp\fR which will expand filenames
+beginning with tildes. A typical use is:
+.Ex
+exp_name=\`./filexp \$name\`
+.Ef
+to assign the expanded file name in \fIexp_name\fR.
+.TP
+Findhdr.U
+This unit produces a \fIfindhdr\fR script which is used to locate the
+header files in \fI$\&usrinc\fR or other stranger places using cpp capabilities.
+The script is given an include file base name like 'stdio.h' or 'sys/file.h'
+and it returns the full path of the inlcude file and a zero status if found,
+or an empty string and a non-zero status if the file could not be located.
+.TP
+Getfile.U
+This unit produces a bit of shell code that must be sourced in order to get
+a file name and make some sanity checks. Optionally, a ~name expansion is
+performed.
+.sp
+To use this unit, \fI\$rp\fR and \fI\$dflt\fR must hold the question and the
+default answer, which will be passed as-is to the \fImyread\fR script
+(see forthcoming \fIMyread.U\fR). The \fI\$fn\fR variable controls the
+operation and the result is returned into \fI\$ans\fR.
+.sp
+To locate a file or directory, put 'f' or 'd' in \fI$fn\fR. If a '~' appears,
+then ~name substitution is allowed. If a '/' appears, only absolute pathnames
+are accepted and ~name subsitutions are always expanded before returning.
+If '+' is specified, existence checks are skipped. If 'n'
+appears within \fI\$fn\fR, then the user is allowed to answer 'none'.
+.sp
+Usually, unless you asked for portability, ~name substitution occurs when
+requested. However, there are some times you wish to bypass portability and
+force the substitution. You may use the 'e' letter (expand) to do that.
+.sp
+If the special 'l' (locate) type is used, then the \fI\$fn\fR variable must
+end with a ':', followed by a file basename. If the answer is a directory,
+the file basename will be appended before testing for file existence. This
+is useful in locate-style questions like this:
+.Ex
+dflt='~news/lib'
+: no need to specify 'd' or 'f' when 'l' is used
+fn='l~:active'
+rp='Where is the active file?'
+\&. ./getfile
+active="\$ans"
+.Ef
+.sp
+Additionally, the 'p' (path) letter may be used in conjunction with 'l' to
+tell \fIgetfile\fR that an answer without a '/' in it should be accepted,
+assuming that it will be in everyone's PATH at the time this value will be
+needed.
+.sp
+Also useful is the possibility to specify a list of answers that should be
+accepted verbatim, bypassing all the checks. This list must be within
+parenthesis and items must be comma separated, with no interleaving spaces.
+Don't forget to quote the resulting string since parenthesis are meaningful
+to the shell. For instance:
+.Ex
+dflt='/bin/install'
+fn='/fe~(install,./install)'
+rp='Use which install program?'
+\&. ./getfile
+install="\$ans"
+.Ef
+would let the user only specify fully qualified paths referring to existing
+files, but still allow the special "install" and "./install" answers as-is
+(assuming of course something will deal with them specially later on in the
+chain since they do not conform with the general expected frame).
+.sp
+If the answer to the question is 'none', then the existence checks are skipped
+and the empty string is returned. Note that since \fIgetfile\fR calls
+\fImyread\fR internally, all the features available with \fImyread\fR apply
+here to.
+.sp
+If a completely expanded value is needed (for instance in a Makefile), you
+may use the \fI\$ansexp\fR variable which is always set up properly
+by \fIgetfile\fR
+as the expanded version of \fI\$ans\fR. Of course, it will not expand ~name if
+you did not allow that in the first place in the \fI\$fn\fR variable.
+.TP
+Inhdr.U
+This unit produces the \fI\$inhdr\fR shell variable, used internally by
+\fIConfigure\fR to check whether a set of headers exist or not. A typical
+use is:
+.Ex
+set header i_header [ header2 i_header2 ... ]
+eval \$\&inhdr
+.Ef
+That will print a message, saying whether the header was found or not and
+set the \fIi_header\fR variable accordingly. If more than one header
+is specified and the first header is not found, we try the next one, until
+the list is empty or one is found.
+.TP
+Inlibc.U
+This unit produces the \fI\$inlibc\fR shell variable, used internally
+by \fIConfigure\fR to check whether a given C function is defined or not.
+A typical use is:
+.Ex
+set function d_func
+eval \$\&inlibc
+.Ef
+That will print a message, saying whether the function was found or not
+and set \fI\$d_func\fR accordingly. Internally, it used the \fI\$\&csym\fR
+routine.
+.TP
+Loc.U
+This important unit produces a shell script \fIloc\fR which can be used
+to find out where in a list of directories a given file lies. The first
+argument specifies the file to be located, the second argument is what
+will be returned if the search fails, and the reamining arguments are a
+list of directories where the file is to be searched. For instance:
+.Ex
+dflt=\`./loc sendmail.cf X /usr/lib /var/adm/sendmail /lib\`
+.Ef
+would set \fI\$dflt\fR to \fIX\fR if no \fIsendmail.cf\fR file was found
+under the listed directories, or something like \fI/usr/lib/sendmail.cf\fR
+on some systems. See also \fIGetfile.U\fR.
+.TP
+MailAuthor.U
+This unit needs to be included on the ?MAKE: line of your own private End.U
+to make it into \fIConfigure\fR. It offers the user to register himself to
+the author, optionally being notified when new patches arrive or receiving
+them automatically when issued. You need to install \fImailagent\fR to do
+this (at least version 3.0).
+.TP
+MailList.U
+This unit needs to be included on the ?MAKE: line of your own private End.U
+to make it into \fIConfigure\fR. It offers the user to subscribe or
+unsubscribe to a mailing list where discussion related to the package are
+taking place. You need to run \fIpackinit\fR and answer the mailing list
+related questions to set up the proper variables in your \fI.package\fR
+before this unit may become operational.
+.TP
+Myinit.U
+Copy this unit into your private \fIU\fR directory to add your own default
+values to some internal variables. This unit is loaded into \fIConfigure\fR
+after all the default initializations have been done.
+.TP
+Myread.U
+This unit produces the \fImyread\fR shell script that must be sourced in
+order to do a read. It allows shell escapes, default assignment and
+parameter evaluation, as documented in the Instruct.U unit. It also allows
+dynamic setting of the \fB\-d\fR option, which will be used for the remaining
+of the script execution.
+.sp
+To use this unit, \fI\$rp\fR must hold the question and \fI\$dflt\fR should
+contain the default answer. The question will be printed by the script
+itself, and the result is returned in the \fI\$ans\fR variable.
+.sp
+Here is a typical usage:
+.Ex
+dflt='y'
+rp='Question?'
+\&. ./myread
+value="\$ans"
+.Ef
+See the unit itself for more information.
+.TP
+Oldconfig.U
+This unit must be part of your dependency ?MAKE: line when some of your
+units tries to reuse an old symbol value. This unit is responsible for
+getting the old answers from \fIconfig.sh\fR or providing useful hints
+when running on a given platform for the first time. See the \fIConfigure
+Hints\fR paragraph for more information about hints.
+.TP
+Prefixit.U
+The purpose of this unit is to detect changes in the installation prefix
+directory to recompute automatically suitable defaults from previous answers.
+It relies on the value of the \fI\$oldprefix\fR variable which holds the
+previous prefix directory when it changed, and is empty otherwise. For instance,
+if the prefix was changed from \fI/opt\fR to \fI/usr/local\fR, then the
+previous binary installation directory will be changed from \fI/opt/bin\fR
+to \fI/usr/local/bin\fR, or will remain unchanged if it was, say, \fI/bin\fR.
+.sp
+You need to call \fBset\fR before issuing an \fBeval\fR on \fI\$prefixit\fR,
+such as:
+.Ex
+set dflt var [dir]
+eval \$prefixit
+.Ef
+which would set \fI\$dflt\fR to \fI\$var\fR or \fI\$prefix/dir\fR depending
+on whether the prefix remained the same or not. If \fIdir\fR is the
+string \fInone\fR, a single space value in \fI\$dflt\fR is kept as-is, even
+when the prefix changes. If \fIdir\fR is omitted, then \fI\$dflt\fR is set
+to an empty string if the prefix changed, to \fI\$var\fR otherwise.
+.TP
+Prefixup.U
+The intent of thit unit is similar to that of Prefixit.U, i.e. it helps
+fixing the default string to accomodate prefix changes. However, the shell
+variable \fI\$prefixup\fR, when evaluated, will only restore ~name expansions,
+should prefix use such an escape mechanism. Use it as:
+.Ex
+set dflt
+eval \$prefixup
+.Ef
+before prompting via \fIgetfile\fR for instance. If the prefix does not
+make use of ~name expanstion, then the above will be a no-op on the \fI$dflt\fR
+variable, naturally.
+.TP
+Typedef.U
+This unit produces the \fI\$typedef\fR shell variable, used internally by
+\fIConfigure\fR to check whether a typedef exists or not. A typical
+use is:
+.Ex
+set typedef val_t default [ includes ]
+eval \$\&typedef
+.Ef
+This will set the variable \fIval_t\fR to the value of \fIdefault\fR if the
+typedef was not found among the listed include files, or to \fItypedef\fR
+if found. If no include files are specified, the unit looks
+in \fI<sys/types.h>\fR only. If you specifiy some includes, only those are
+looked at.
+.TP
+Unix.U
+The purpose of this unit is to define some of the most common UNIX-isms
+via variables which can be altered from the command line or via proper
+hint files. In particular, \fI\$_exe\fR, \fI\$_o\fR and \fI\$_a\fR
+are set. All the units should refer to \fI\$_o\fR and not to \fI.o\fR
+directly. The '.' is part of these variables.
+.TP
+Setvar.U
+This unit produces the \fI$setvar\fR variable, which is used internally
+by \fIConfigure\fR to set a \fIdefine\fR/\fRundef\fR value to a given symbol,
+emitting a warning when it suddenly changes from a previous value. For instance:
+.Ex
+val="\$\&define"
+set d_variable
+eval \$\&setvar
+.Ef
+If the previous \fI\$d_variable\fR value was non-null and \fI\$val\fR is
+different, a "whoa" warning is issued.
+.TP
+Whoa.U
+This unit produces the \fIwhoa\fR script, which emits a warning when the
+\fIvalue\fR in variable whose name is \fI\$var\fR is not the same as
+its old previous value held in \fI\$was\fR. Upon return, \fI\$td\fR and
+\fI\$tu\fR hold the proper value to \fIdefine\fR or \fIundef\fR the variable.
+See examples in \fIInlibc.U\fR.
+'''
+.SS Builtin Pre-processor
+.PP
+Each unit to be included in \fIConfigure\fR is ran through a built-in
+pre-processor. Pre-processor statements are introduced by the '@' character
+('#' is the shell comment character). It functions merely as the C
+pre-processor does but allows for shell and perl escapes. Here are the
+available functions:
+.TP 10
+@if \fIexpression\fR
+If \fIexpression\fR is true, continue loading code until @end, @elsif or @else.
+.TP
+@elsif \fIexpression\fR
+Alternative choice. If \fIexpression\fR is true, continue loading code until
+@end, another @elsif or @else.
+.TP
+@else
+Default code to be loaded if the @if \fIexpression\fR was false and none
+of the optional @elsif matched. Load until @end.
+.TP
+@end
+Close the conditional loading statement opened by @if.
+.TP
+@define \fIsymbol\fR
+Tells the pre-processor that \fIsymbol\fR is defined from now on.
+.PP
+The conditional \fIexpression\fR can include symbol names (value is
+true if symbol is wanted or defined via \fI@define\fR or shell/perl
+escapes. Those atoms can be combined using the traditional boolean
+operators '!' for negation, '&&' for logical and, and '||' for logical
+or.
+.PP
+Text enclosed within single brackets is a shell test, while text between
+double brakets is a perl test. Namely the expressions:
+.Ex
+{ \fIshell text\fR }
+{{ \fIperl text\fR }}
+.Ef
+are translated into:
+.Ex
+if \fIshell text\fR >/dev/null 2>&1; then exit 0; else exit 1; fi
+if (\fIperl text\fR) {exit 0;} else {exit 1;}
+.Ef
+and the exit status is used in the standard way to get a boolean value,
+i.e. 0 is true and everything else is false. Note that only simple
+conditions can be expressed in perl, until some complex code can be
+loaded within \fImetaconfig\fR and executed.
+.PP
+The built-in pre-processor can be used to finely tune some units
+(see \fId_gethname.U\fR for a complex example) depending on the symbols
+actually used by the program or the files present in the distribution.
+For instance, the \fIOldconfig.U\fR uses a test like:
+.Ex
+@if {test -d ../hints}
+.Ef
+and \fIConfigure\fR will contain hint-dependent code only if there is
+a \fIhints\fR directory in the package's top level directory. Note that
+tests are ran from within the '\fI.MT\fR' directory, hence the needed
+\&'../' in the test.
+.PP
+The pre-processor can also be used to avoid putting useless code when
+a symbol is not defined. Units defining more than one symbol can be
+protected that way (since the unit is loaded as a whole) by gathering
+symbol-dependent code within an @if/@end pair. For instance:
+.Ex
+@if I_TIME || I_SYS_TIME || I_SYS_TIME_KERNEL
+need_time_h='true'
+@else
+need_time_h='false'
+@end
+.Ef
+will test whether the source code makes any use of one of the three
+symbols that control the \fItime.h\fR or \fIsys/time.h\fR inclusion
+and define the shell symbol accordingly. That gives \fIConfigure\fR
+a feedback on what the sources need and avoid the drawback of having
+fixed frozen units.
+.PP
+Via the '?W:' lines, you can get intersting combinations. For instance,
+the \fIi_time.U\fR unit needs to know whether the C sources make any
+use of the \fIstruct timezone\fR type. Therefore, the line:
+.Ex
+?W::timezone
+.Ef
+is used for its side-effect of defining the symbol \fItimezone\fR for
+the pre-processor. The unit code can then say:
+.Ex
+@if timezone
+for s_timezone in '-DS_TIMEZONE' ''; do
+@else
+s_timezone=''
+@end
+
+\&... code using s_timezone ...
+
+@if timezone
+done
+@end
+.Ef
+and have an extra loop trying two successive values for the \fIs_timezone\fR
+variable, but only if needed.
+'''
+.SS Obsolete Symbols
+.PP
+Obsolete symbols are preserved to ease the transition with older
+.I metaconfig
+units. Unless the \fB\-o\fR switch is passed to \fImetaconfig\fR they will
+be ignored. However, an \fIObsolete\fR file will be generated, telling you
+which files are making use of those obsolete symbols and what are the new
+symbols to be used.
+.PP
+The lifetime for obsolete symbols is one full revision, i.e. they will
+be removed when the next base revision is issued (patch upgrades do not
+count of course). Therefore, it is wise to translate your sources and
+start using the new symbols as soon as possible.
+'''
+.SS Configure Hints
+.PP
+It may happen that the internal configuration logic makes the wrong choices.
+For instance, on some platform, the \fIvfork()\fR system call is present but
+broken, so it should not be used. It is not possible to include that knowledge
+in the units themselves, because that might be a temporary problem which the
+vendor will eventually fix, or something that was introduced by a new OS
+upgrade.
+.PP
+Anyway, for all those tiny little problems that are too system-specific,
+\fImetaconfig\fR provides hint files support. To use it, you need to create
+a \fIhints\fR directory in the package's top level directory, and have it
+when you run \fImetaconfig\fR. That will load the hint-related part from
+\fIOldconfig.U\fR.
+.PP
+From then on, you may pre-set some of the shell variables \fIConfigure\fR uses
+in an OS-specific .sh file. There is code in \fIOldconfig.U\fR that tries
+to guess which hint files are needed by computing a standard name based
+on the system OS name, the kernel name, the release number, etc... Since
+this information is likely to change rapidly, I'm not documenting it here.
+You have to reverse engineer the code from \fIOldconfig.U\fR.
+.PP
+When you first release your package, your hints file directory should be empty.
+If the users of your package complain that they have problem with
+\fIConfigure\fR defaults on a particular system, you have to see whether this
+is a platform-specific problem or a general one. In the former case, it's
+time to introduce a new hint file, while in the latter, the corresponding
+unit should be revised.
+.PP
+For instance, SGI systems are known to have a broken \fIvfork()\fR system
+call, as of this writing. And the corresponding hint file name is \fIsgi.sh\fR.
+So all you need to do is create a \fIhints/sgi.sh\fR file in which you write:
+.Ex
+d_vfork="\$\&define"
+.Ef
+which will always remap \fIvfork\fR on \fIfork\fR (see \fId_vfork.U\fR). When
+running on SGI systems for the first time, \fIConfigure\fR will detect that
+there is an \fIhints/sgi.sh\fR file, and that we are on an IRIX machine
+(the kernel name is often /irix), therefore it will propose \fIsgi\fR as a
+possible hint.
+If the user accepts it, and since the \fI\$\&d_vfork\fR value is modified
+via the \fI$\&setvar\fR call, a \fIwhoa!\fR will be emitted to warn that we
+are about to override the value computed by \fIConfigure\fR.
+.PP
+Note that you don't have to provide \fIall\fR the hints known by
+\fIOldconfig.U\fR. If a hint file is missing, it will not be proposed as a
+possible choice. The heuristic tests ran to compute the possible hint
+candidates are flaky. If you have new values or different tests, please send
+them to me...
+'''
+.SS Overriding Choices
+.PP
+If you create a \fIconfig.over\fR file in the top level directory,
+\fIConfigure\fR will ask you if you wish to load it to override the default
+values. This is done prior creation of the \fIconfig.sh\fR file, so it gives
+you a chance to patch the values stored in there.
+.PP
+This is distinct from the hints approach in that it is a local file, which
+the user is free to create for his own usage. You should not provide such
+a file yourself, but let the user know about this possibility.
+'''
+.SS Configure Options
+.PP
+The \fIConfigure\fR script may be called with some options specified on the
+command line, to slightly modify its behaviour. Here are the allowed options:
+.TP 10
+.B \-d
+Use defaults for all answers.
+.TP
+.B \-e
+Go on without questioning past the production of \fIconfig.sh\fR.
+.TP
+.B \-f \fIfile\fR
+Use the specified file as a default configuration. If this switch is not
+used, the configuration is taken from \fIconfig.sh\fR, when present.
+.TP
+.B \-h
+Print help message and exit.
+.TP
+.B \-r
+Reuse C symbols value if possible. This will skip the costly \fInm\fR
+symbol extraction. If used the first time (with no previous configuration
+file), \fIConfigure\fR will try to compile and link a small program in order
+to know about the presence of a symbol, or absence thereof.
+.TP
+.B \-s
+Silent mode. Only strings printed on file descriptor #4 will be seen on
+the screen (that's the important messages). It's not possible to completely
+turn off any output, but you may use '\fIConfigure -ders >/dev/null 2>&1\fR'
+to have a full batch run with no output and no user interaction required.
+.TP
+.B \-D\fI symbol=value\fR
+Pre-defines \fIsymbol\fR to bear the specified \fIvalue\fR. It is also
+possible to use '\fB-D\fI symbol\fR' which will use a default value
+of 'define'.
+.TP
+.B \-E
+Stop at the end of the configuration questions, after having produced
+a \fIconfig.sh\fR. This will not perform any '\fImake depend\fR' or .SH files
+extraction.
+.TP
+.B \-K
+Knowledgeable user. When you use this option, you know what you are
+doing and therefore the \fIconfig.sh\fR file will always be handled as if it
+was intended to be re-used, even though it might have been generated on
+an alien system. It also prevents aborting when \fIConfigure\fR detects
+an unusable C compiler or a wrong set of C flags.
+Further shortcuts might be turned on by this option as well in the future.
+This option is documented in the \fIConfigure\fR usage message, to remind
+us about its existence, but the given description is hoped to be cryptic
+enough. :-)
+.TP
+.B \-O
+Allow values specified via a \fB\-D\fR or \fB\-U\fR to override settings from
+any loaded configuration file. This is not the default behaviour since the
+overriding will not be propagated to variables derived from those you are
+presently altering. Naturally, without \fB-O\fR, the setting is only
+done when no configuration file is loaded, which is safe since derivative
+variables have not been computed yet...
+.TP
+.B \-S
+Perform variable substitution on all the .SH files. You can combine it with the
+\fB\-f\fR switch to propagate any configuration you like.
+.TP
+.B \-U\fI symbol=\fR
+Pre-sets \fIsymbol\fR to bear an empty value. It is also
+possible to use '\fB-U\fI symbol\fR' which will set \fIsymbol\fR to 'undef'.
+.TP
+.B \-V
+Print the version number of the \fImetaconfig\fR that generated this
+.I Configure
+script and exit.
+'''
+.SS Running Environment
+Upon starting, \fIConfigure\fR creates a local \fIUU\fR directory and runs
+from there. The directory is removed when Configure ends, but this means
+you must run the script from a place where you can write, i.e. not from
+a read-only file system.
+.PP
+You can run \fIConfigure\fR remotely though, as in:
+.Ex
+ ../package/Configure
+.Ef
+to configure sources that are not present locally. All the generated files
+will be put in the directory where you're running the script from. This magic
+is done thanks to the src.U unit, which is setting the \fI\$src\fR
+and \fI\$rsrc\fR variables to point to the package sources. That path is
+full or relative, depending on whether \fIConfigure\fR was invoked via a
+full or relative path.
+.PP
+From within the \fIUU\fR subdirectory, you can use \fI\$rsrc\fR to access the
+source files (units referring to source files link hints shall always use
+this mechanism and not assume the file is present in the parent directory).
+All the Makefiles should use the \$src variable as a pointer to the sources
+from the top of the build directory (where \fIConfigure\fR is run), either
+directly or via a VPATH setting.
+.PP
+When running \fIConfigure\fR remotely, the .SH files are extracted in the
+build directory, not in the source tree. However, it requires some kind of
+a \fImake\fR support to be able to compile things in a build directory whilst
+the sources lie elsewhere.
+'''
+.SS Using Magic Redefinitions
+.PP
+By making use of the \fB\-M\fR switch, some magic remappings may take place
+within a \fIconfmagic.h\fR file. That file needs to be included after
+\fIconfig.h\fR, of course, but also after all the other needed include files.
+Namely:
+.Ex
+#include "config.h"
+\&...
+\&... \fIother inclusions\fR ...
+\&...
+#include "confmagic.h"
+.Ef
+Typically, \fIconfmagic.h\fR will attempt to remap \fIbcopy()\fR
+on \fImemcpy()\fR if no \fIbcopy()\fR is available locally, or transform
+\fIvfork\fR into \fIfork\fR when necessary, hence making it useless to
+bother about the \fIHAS_VFORK\fR symbol.
+.PP
+This configuration magic is documented in the Glossary file.
+'''
+.SS Unit Templates
+.PP
+There is a set of unit templates in the \fImetaconfig\fR source directory,
+which are intended to be used by a (not yet written) program to quickly
+produce new units for various kind of situations. No documentation for this
+unfinished project, but I thought I would mention it in the manual page in
+case you wish to do it yourself and then contribute it...
+.SH AUTHORS
+Larry Wall <lwall@netlabs.com> for version 2.0.
+.br
+Harlan Stenn <harlan@mumps.pfcs.com> for important unit extensions.
+.br
+Raphael Manfredi <Raphael.Manfredi@pobox.com>.
+.br
+Many other contributors for the
+\fImetaconfig\fR units. See the credit file for a list.
+.SH FILES
+.TP 10
+.PD 0
+LIB/dist/mcon/U/*.U
+Public unit files
+.TP
+U/*.U
+Private unit files
+.TP
+LIB/dist/mcon/Glossary
+Glossary file, describing all the metaconfig symbols.
+.TP
+Obsolete
+Lists all the obsolete symbols used by the sources.
+.TP
+Wanted
+Lists all the wanted symbols.
+.PD
+.sp
+.in +5
+where LIB is $privlibexp.
+.in -5
+.SH BUGS
+Units are sometimes included unnecessarily if one of its symbols is
+accidentally mentioned, e.g. in a comment.
+Better too many units than too few, however.
+.SH "SEE ALSO"
+pat($manext), makeSH($manext), makedist($manext), metalint($manext)
+!GROK!THIS!
+chmod 444 metaconfig.$manext
diff --git a/mcon/man/mlint.SH b/mcon/man/mlint.SH
new file mode 100755
index 0000000..8910b88
--- /dev/null
+++ b/mcon/man/mlint.SH
@@ -0,0 +1,585 @@
+case $CONFIG in
+'')
+ if test -f config.sh; then TOP=.;
+ elif test -f ../config.sh; then TOP=..;
+ elif test -f ../../config.sh; then TOP=../..;
+ elif test -f ../../../config.sh; then TOP=../../..;
+ elif test -f ../../../../config.sh; then TOP=../../../..;
+ else
+ echo "Can't find config.sh."; exit 1
+ fi
+ . $TOP/config.sh
+ ;;
+esac
+case "$0" in
+*/*) cd `expr X$0 : 'X\(.*\)/'` ;;
+esac
+echo "Extracting mcon/man/metalint.$manext (with variable substitutions)"
+$rm -f metalint.$manext
+$spitshell >metalint.$manext <<!GROK!THIS!
+.TH METALINT $manext "Version $VERSION PL$PATCHLEVEL"
+''' @(#) Manual page for metalint
+'''
+''' $Id$
+'''
+''' Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+'''
+''' You may redistribute only under the terms of the Artistic Licence,
+''' as specified in the README file that comes with the distribution.
+''' You may reuse parts of this distribution only within the terms of
+''' that same Artistic Licence; a copy of which may be found at the root
+''' of the source tree for dist 4.0.
+'''
+''' $Log: mlint.SH,v $
+''' Revision 3.0.1.9 1997/02/28 16:30:25 ram
+''' patch61: new "create" and "empty" lint directives
+''' patch61: documented new messages
+'''
+''' Revision 3.0.1.8 1995/09/25 09:18:07 ram
+''' patch59: documented new ?Y: directive
+''' patch59: fixed my e-mail address
+'''
+''' Revision 3.0.1.7 1995/07/25 14:18:51 ram
+''' patch56: added two new warnings for : comments lines in Configure
+'''
+''' Revision 3.0.1.6 1994/10/29 16:33:56 ram
+''' patch36: documents new ?F: lines and the related metalint warnings
+''' patch36: removed statement in BUGS since all warnings may now be shut
+'''
+''' Revision 3.0.1.5 1994/05/06 15:20:30 ram
+''' patch23: added -L switch to override public unit repository path
+''' patch23: two new warnings concerning last unit lines
+'''
+''' Revision 3.0.1.4 1994/01/24 14:20:39 ram
+''' patch16: can now easily suppress warning about made "special units"
+'''
+''' Revision 3.0.1.3 1993/11/10 17:37:39 ram
+''' patch14: documents stale ?M: dependency check
+'''
+''' Revision 3.0.1.2 1993/10/16 13:52:23 ram
+''' patch12: added support for ?M: lines and fixed some typos
+'''
+''' Revision 3.0.1.1 1993/08/19 06:42:24 ram
+''' patch1: leading config.sh searching was not aborting properly
+'''
+''' Revision 3.0 1993/08/18 12:10:15 ram
+''' Baseline for dist 3.0 netwide release.
+'''
+'''
+.SH NAME
+metalint \- a metaconfig unit consistency checker
+.SH SYNOPSIS
+.B metalint
+[ \-\fBhklsV\fR ]
+[ \-\fBL \fIdir\fR ]
+.SH DESCRIPTION
+.I Metalint
+parses the units and performs some extensive consistency checks, to make sure
+the whole set is sound. Due to the relatively huge amount of units available,
+it is becoming very difficult to maintain the units manually, and an automated
+process can be of real help, although not perfect.
+.PP
+.I Metalint
+operates from within your top level package directory and is used to make sure
+your own private units are correctly relying on the publicly available units.
+If you intensively develop new units, you should run \fImetalint\fR on them
+before making them publicly available.
+.SH OPTIONS
+.I Metalint
+recognizes the following set of options:
+.TP 15
+.B \-h
+Print a short usage description and exit.
+.TP
+.B \-k
+Keep temporary \fI.MT\fR directory.
+.TP
+.B \-l
+(not implemented yet) By default, \fImetalint\fR only reports problems related
+to your own private units. This switch directs \fImetalint\fR to also report
+problems in publicly available units.
+.TP
+.B \-s
+Silent mode.
+.TP
+\fB\-L\fI dir\fR
+Override default library location. Normally only useful for metaconfig
+maintainers to locally check the units being developped instead of the
+publicly available ones. The \fIdir\fR specified is the one containing the
+units \fIU\fR directory.
+.TP
+.B \-V
+Print version number and exit.
+.SH DIAGNOSTICS
+The following diagnostics may be emitted by \fImetalint\fR:
+.TP 5
+"(?MAKE) command line must start with a leading TAB character."
+Self explanatory.
+.TP
+"(?MAKE) fourth pick argument is missing."
+Self explanatory.
+.TP
+"(?MAKE) fourth pick argument should probably be the %< macro."
+When the fourth argument is not a relative path, it is expected to be the
+current unit name, which is best described using the "%<" string, a macro
+handled by
+.I metaconfig
+and which is substituted with the current unit name.
+.TP
+"(?MAKE) ignoring duplicate dependency listing line."
+More than one ?MAKE: line bearing dependencies was found in the unit. There
+may be only one such line, although multiple ?MAKE action lines may occur.
+.TP
+"(?MAKE) special unit 'Xxx' should not be listed as made."
+A special unit symbol (first letter capitalized) may only be listed as made
+in the special unit itself. To suppress this warning in legitimate cases,
+add a '+' in front of the offending symbol (note that for non-special units,
+the '+' in this position indicates an internal symbol which should not appear
+in the config.sh file).
+.TP
+"(?MAKE) '+xxx' is listed x times."
+A conditional dependency is listed more than once. This is harmless though.
+.TP
+"(?MAKE) 'xxx' is listed x times."
+A normal depdendency is listed more than once. Again, an harmless error.
+.TP
+"(?MAKE) 'xxx' listed as both conditional and full dependency."
+Symbol is listed as a normal dependency and as a conditional one.
+.I Metaconfig
+will consider this as being a full dependency, but that may not be what you
+initially wanted...
+.TP
+"(?MAKE) pick needs a command argument."
+There is no command name after the special "pick" directive, which is invalid.
+.TP
+"(?MAKE) third pick argument must be \$@.
+The third argument to the special "pick" directive must be \$@, litterally.
+.TP
+"(?MAKE) unknown pick command 'xxx'.
+The command argument listed for the special "pick" directive is unknown.
+.TP
+"(?MAKE) weird fourth argument 'xxx' to pick.
+The fourth argument for pick, the target file, should be a unit name, a file
+path introduced by "./" or the special "%<" token.
+.TP
+"(?Y) unknown layout directive 'xxx'."
+Layout directives may only be one of \fItop\fR, \fIdefault\fR or \fIbottom\fR,
+but case does not matter. An unknown directive is just ignored and
+handled as if \fIdefault\fR had been specified.
+.TP
+"(?S) duplicate description for variable '\$xxx'."
+Shell symbol is described more than once, and that will produce two entries
+in the Glossary.
+.TP
+"(?S) variable '\$xxx' is not listed on ?MAKE: line."
+The unit describes a shell symbol entry which cannot be used externally since
+not listed as a dependency.
+.TP
+"(?S) syntax error in ?S: construct."
+Self explanatory.
+.TP
+"(?C) duplicate description for symbol 'XXX'."
+C symbol is described more than once, and that will produce two entries for
+it in the Glossary.
+.TP
+"(?C) syntax error in ?C: construct."
+Self explanatory.
+.TP
+"(?H) symbol 'XXX' was already defined."
+Apparently, two ?H: lines are defining the same C symbol.
+.TP
+"(?H) variable '\$xxx' not even listed on ?MAKE: line."
+A variable is used, but not listed on the dependency line.
+.TP
+"(?H) section was already terminated by '?H:.'."
+There can be no more ?H: lines after the first '?H:.' marking the end
+of that section.
+.TP
+"(?H) uncommon cpp line should be protected with '?%<:'."
+All ?H: lines that are recognized by
+.I metaconfig
+and thus
+.I metalint
+have their inclusion in config.h automatically protected by a suitable
+symbol if none is provided. However, unrecognized lines must be protected
+with the '?%<:' sequence to avoid their inclusion should the unit not be
+loaded in Configure.
+.TP
+"(?H) line should not be listed here but in '?C:'."
+Only cpp lines should appear in the ?H: section. If you have a comment
+to put regarding the symbol, use ?C:. If you want to comment a particular
+generation sequence, put them into ?X: comment so that they don't make it
+into config.h.
+.TP
+"(?H) constraint 'xxx' is an unknown symbol."
+All the leading ?sym: constraints on the ?H: lines should be a valid
+shell or C symbol, defined in the unit.
+.TP
+"(?M) syntax error in ?M: construct."
+Self explanatory.
+.TP
+"(?M) symbol 'xxx' already listed on a ?M: line in 'yyy'."
+A magic definition for symbol xxx is attempted, but another one was
+already provided in unit yyy.
+.TP
+"(?V) visible declaration in non-special unit ignored."
+Visible declarations (?V: lines) may only appear in special units. Otherwise,
+they are meaningless.
+.TP
+"(?V) wanted variable '\$xxx' made visible."
+A wanted variable (described as a dependency on the ?MAKE: line) cannot be
+made visible since that does not make any sense: the unit cannot depend on
+it and then advertise it as being locally defined.
+.TP
+"(?V) defined variable '\$xxx' made visible."
+A defined variable (listed as made on the ?MAKE: line) cannot be made
+visible, since it could as well be directly wanted in another unit.
+.TP
+"(?V) variable '\$xxx' already made visible by unit yyy."
+Inconsistent declaration: two units are making one single symbol visible...
+.TP
+"(?V) variable '\$xxx' already read-write visible in yyy."
+The variable was already made visible as read-write by another unit.
+.TP
+"(?V) variable '\$xxx' already read-only visible in yyy."
+The variable was already made visible as read-only by another unit.
+.TP
+"(?W) variable '\$xxx' already wanted."
+Variable is already wanted, there is no need to explicitly ask for it here.
+.TP
+"(?W) variable '\$xxx' also locally defined."
+A wanted variable would conflict with a locally defined variable and could
+result in getting a garbage value.
+.TP
+"(?W) variable '\$xxx' already listed on a ?W: line in 'yyy'."
+The variable in the shell symbol section of a ?W: line can only appear in
+one unit.
+.TP
+"(?F) produced file 'xxx' mutiply declared."
+The file is listed more than once on the ?F: line, under the same name.
+This does not appear when declaring both a private UU file and a public
+file with the same name, for instance.
+.TP
+"(?F) UU file $uufile in non-special unit ignored."
+Private UU files (i.e. files like the \fImyread\fR script created for
+later perusal by \fIConfigure\fR) may only be created in special units.
+Exceptions allowed if the ?F: line is preceded by a proper ?LINT: hint.
+.TP
+"(?T) temporary symbol '\$xxx' multiply declared."
+Self explanatory.
+.TP
+"directive should come after ?MAKE declarations."
+The directive listed between () at the beginning of this message should
+really come after the ?MAKE: lines. You must reorder the unit or
+.I metalint
+will not be able to properly diagnose problems.
+.TP
+"control sequence '?XXX:' ignored within body."
+Attempt to use a control line other than ?X: or ?LINT: in the unit body,
+which should be only shell code
+.TP
+"variable '\$xxx' is changed."
+A variable listed as wanted in the dependency line is changed. Such a variable
+should be read-only for the unit. Use the \fIchange\fR lint hint to suppress
+this message in pathological cases.
+.TP
+"no ?MAKE: line describing dependencies."
+Every unit should have a dependency line, or it will be silently ignored by
+\fImetaconfig\fR. This message is suppressed by a ?LINT: empty hint.
+.TP
+"first body line should be a general ': description'."
+The very first shell line of the unit that will be added to the generated
+Configure script should hold a description of the unit's purpose, on a ':'
+line. There must be a space after the ':', since it is interpreted by the
+shell, and the description should avoid meta-characters like '(' or '>' unless
+the whole string is quoted. This message is suppressed by a ?LINT: nocomment
+hint.
+.TP
+"missing space after ':' to make it a comment."
+A line starting by ':' is interpreted by the shell but will be ignored. There
+must be a space after the ':' though, or the shell will try to execute an
+unknown command...
+.TP
+"found unquoted meta-character > on comment line."
+A line starting by ':' is interpreted by the shell but will be ignored.
+This means that meaningful meta-characters such as '(' or '>' must be
+quoted or escaped with a leading backslash.
+.TP
+"found dangling quote on ':' comment line."
+An unclosed single or double quote was spotted on a ':' comment line.
+Since those lines are interpreted by the shell, albeit ignored, all quotes
+must match perfectly.
+.TP
+"not ending with a blank line."
+Since all units are gathered together to form one big script, it is recommended
+(hence enforced by \fImetalint\fR) that every unit file end with an empty line.
+.TP
+"last line not ending with a new-line character."
+This is merely intended to users whose editor does not always append a
+new-line at the end of text files. Should not happen when you use \fIvi\fR.
+.TP
+"symbol '\$xxx' was not described."
+The shell symbol defined by this unit was not documented. Use the \fIdescribe\fR
+lint hint to suppress this message.
+.TP
+"C symbol 'XXX' was not described."
+The C symbol defined by this unit was not documented. Use the \fIknown\fR lint
+hint to suppress this message.
+.TP
+"C symbol 'XXX' was not defined by any ?H: line."
+A C symbol was advertised by never defined, hence it cannot appear in the
+\fIconfig.h\fR file and is therefore useless...
+.TP
+"variable '\$xxx' should have been set."
+A variable listed on the make line as made by the unit was not set by the
+shell code body. Use the \fIset\fR lint hint to suppress this message in
+pathological cases.
+.TP
+"unused dependency variable '\$xxx'."
+Apparently no usage is made from a shell variable. Use the \fIchange\fR or
+\fIuse\fR lint hints (depending on the situation) to suppress this message.
+.TP
+"unused conditional variable '\$xxx'.
+Apparently no usage is made from this conditional dependency. The \fIchange\fR
+or \fIuse\fR lint hints can be used to suppress this message.
+.TP
+"unused temporary variable '\$xxx'."
+A variable declared as temporary in a ?T: line is not used. The \fIuse\fR lint
+hint will fool \fImetalint\fR into thinking it's indeed used.
+.TP
+"unknown control sequence '?XXX:'."
+Attempt to use an unknown control sequence.
+.TP
+"unknown LINT request '$xxx' ignored."
+An unknown ?LINT: tag was used. All such tags must be spelled out in lowercase.
+.TP
+"symbol '\$xxx' has no default value."
+A symbol used as a conditional dependency in some unit has no default value
+set by a ?D: line.
+.TP
+"stale ?MAKE: dependency 'xxx'."
+Unit lists a symbol as a dependency, but that symbol is otherwise unknown, i.e.
+never appears as made by any other unit.
+.TP
+"symbol '\$xxx' missing from ?MAKE."
+A symbol used or defined was not listed as a dependency in the ?MAKE: line.
+.TP
+"missing xxx from ?MAKE for visible '\$yyy'."
+A symbol defined as visible by a special unit is used, but that special unit
+is not part of the dependency line.
+.TP
+"stale ?M: dependency 'xxx'."
+Magic line lists a C symbol as a dependency but that symbol is not known
+by any unit.
+.TP
+"unknown symbol '\$xxx'."
+I have no idea about what this symbol is. If the variable is externally
+define, this warning can be suppresed via a proper ?LINT: extern.
+.TP
+"read-only symbol '\$xxx' is set."
+A symbol that should be read-only is set by the unit's shell code body.
+.TP
+"obsolete symbol 'xxx' is used."
+An obsolete symbol is used in the unit's shell code.
+.TP
+"undeclared symbol '\$xxx' is set."
+The unit tries to set a shell variable which has not been otherwise declared
+as made or as a temporary variable, or whatever.
+.TP
+"unclosed ?H: section."
+The ?H: section was not terminated by a single '?H:.' line before
+the body of the unit or the start of another ?C: section.
+.TP
+"C symbol 'xxx' is defined in the following units:"
+The C symbol is defined in more that one unit. Offending units are listed.
+.TP
+"Shell symbol 'xxx' is defined in the following units:"
+A shell symbol is defined in more than one unit. Offending units folllow.
+.TP
+"Shell symbol 'xxx' is altogether:"
+A shell symbol is defined by some units, obsoleted by others and used as
+a temporary.
+.TP
+"Shell symbol 'xxx' is both defined and obsoleted:"
+Self explanatory.
+.TP
+"Shell symbol 'xxx' is both defined and used as temporary:"
+Self explanatory.
+.TP
+"Shell symbol 'xxx' obsoleted also used as temporary:"
+Self explanatory.
+.TP
+"definition of '\$xxx' not closed by '?S:.'."
+Self explanatory.
+.TP
+"definition of 'XXX' not closed by '?C:.'."
+Self explanatory.
+.TP
+"magic definition of 'xxx' not closed by '?M:.'."
+Self explanatory.
+.TP
+"variable '\$xxx' is defined externally."
+A variable defined externally (i.e. in another unit) is used, without proper
+dependency information. Use the \fIextern\fR lint hint to suppress this message.
+.TP
+"file 'xxx' was not created."
+A file listed as a private UU file is not created by the special unit.
+Creation is detected by seing an explicit shell redirection to the file,
+not by an implicit creation (such as a C compilation would for instance).
+All special units should create only shell scripts explicitly anyway so this
+message cannot be suppressed via a lint hint.
+.TP
+"local file 'xxx' may override the one set by 'unit.U'."
+You are attempting to create a local file, but the special unit creates one
+bearing the exact same name and should it be loaded before
+within \fIConfigure\fR, you would override that file. Change the name of your
+local file.
+.TP
+"unused temporary file 'xxx'.
+The file was declared on the ?F: line but does not appear to be used
+anywhere.
+.TP
+"mis-used temporary file 'xxx'.
+A local temporary file has been declared on the ?F: line and is used in
+a way that may not be the proper one. Indeed, all such local files should
+be called with an explicit relative path, to avoid PATH lookups which could
+get you another file.
+.TP
+"you might not always get file 'xxx' from 'unit.U'."
+You seem to be calling the specified file, but not by using an explicit
+relative pathname. Relying on the PATH to find this file is not safe.
+To fix this problem, call your file using somthing like \fI./xxx\fR.
+.TP
+"missing Unit from ?MAKE for private file 'xxx'."
+You are using a private UU file without listing the special unit that
+produces it in your dependency line. Add the unit to your dependency list.
+.TP
+"unknown private file 'xxx'."
+The file does not appear on any ?F: line; however it should.
+.TP
+"File 'xxx' is defined in the following units:"
+The listed units cannot seem to agree on who is defining the file.
+.TP
+"empty here-document name discouraged."
+You should refrain from using empty names for here documents, as
+.I metalint
+will not monitor those.
+.TP
+"unclosed here-document xxx started line x."
+The opened here-document at line x was never closed in this unit.
+This generally mean that when the unit is used, the generated script will
+not work!
+.TP
+"spurious 'LINT xxx' directive."
+You have inserted a ?LINT: directive that is not used to shut-up warnings.
+.TP
+"Cycle found for:"
+There is a dependency cycle found for the symbols listed. Only the symbols
+involved in the cycle are listed.
+.TP
+"Cycle involves:"
+An exerpt of the dependencies where the cycle was found is listed. This may
+involve far more symbols than the previous message, because \fImetalint\fR
+actually rescans the rules to emphasize the cycle and stops whenever it has
+found one, i.e. it does not try to minimize it (the cycle is found using
+another algorithm, which unfortunately cannot spit it out but only say
+for sure there is one).
+.SH REFERENCE
+.I Metalint
+uses the following control lines, which are otherwise ignored by
+\fImetaconfig\fR:
+.TP 5
+?V:\fIread-only symbols\fR:\fIread-write symbols\fR
+This line should be used only in special units. It lists all the shell
+variable defined by the unit which should not be used directly as dependencies
+by other units: they must include this special unit in their dependency list
+if they make use of any of the symbols described here. Those can be viewed
+as exported symbols which you inherit from when depending from the unit.
+Symbols may be exported read-only or read-write.
+.TP
+?F:\fIfiles created\fR
+This line serves two purposes: it is a \fImetalint\fR hint, and also
+a placeholder for future \fIjmake\fR use. It must list three kind of files:
+the temporary one which are created for a test, the private UU ones created
+in the UU directory for later perusal, and the public ones left in the
+root directory of the package. Temporary files must be listed with a
+preceding '!' character (meaning "no! they're not re-used later!"), private
+UU files should be preceded by a './' (meaning: to use them, say \fI./file\fR,
+not just \fIfile\fR), and public ones should be named as-is.
+.TP
+?T:\fIshell temporaries\fR
+This line should list all the shell variables used as temporaries within
+the unit's body. This line should be kept accurate, and prevents you from
+writing a unit defining a symbol which would be used as a scratch variable
+in another unit...
+.TP
+?LINT:\fIkeyword\fR \fIsymbol_list\fR
+Specifies a lint hint. The following keywords are available:
+.RS +10
+.TP 15
+.PD 0
+.I change
+shell variable ok to be changed
+.TP
+.I create
+persistent file ok to be created by non-special unit
+.TP
+.I define
+shell variables listed are defined in this unit
+.TP
+.I describe
+listed shell variables are described by ?S:
+.TP
+.I extern
+variable known to be externally defined
+.TP
+.I empty
+unit file is empty and kept only as a placeholder.
+.TP
+.I known
+listed C variables are described
+.TP
+.I nocomment
+unit file is special and may miss a leading ': description' line.
+.TP
+.I nothere
+listed names are not here documents (e.g. "1 << foo" in a C program)
+.TP
+.I set
+listed variables are set
+.TP
+.I use
+variables listed are used by this unit
+.TP
+.I unclosed
+listed names of here-documents are not closed in this unit
+.TP
+.I usefile
+listed file is used (do not prepend name with '!' for temporary ones)
+.PD
+.RS -10
+.SH AUTHORS
+Harlan Stenn <harlan@mumps.pfcs.com> wrote the first version, based on
+Larry Wall's \fImetaconfig\fR from dist 2.0.
+.br
+Raphael Manfredi <Raphael.Manfredi@pobox.com> rewrote it from scratch for
+3.0 with a few enhancements.
+.SH FILES
+.TP 10
+.PD 0
+LIB/dist/mcon/U/*.U
+Public unit files
+.TP
+U/*.U
+Private unit files
+.PD
+.sp
+.in +5
+where LIB is $privlibexp.
+.in -5
+.SH BUGS
+Maybe.
+.SH "SEE ALSO"
+metaconfig($manext), metaxref($manext)
+!GROK!THIS!
+chmod 444 metalint.$manext
diff --git a/mcon/man/mxref.SH b/mcon/man/mxref.SH
new file mode 100755
index 0000000..491bf1d
--- /dev/null
+++ b/mcon/man/mxref.SH
@@ -0,0 +1,146 @@
+case $CONFIG in
+'')
+ if test -f config.sh; then TOP=.;
+ elif test -f ../config.sh; then TOP=..;
+ elif test -f ../../config.sh; then TOP=../..;
+ elif test -f ../../../config.sh; then TOP=../../..;
+ elif test -f ../../../../config.sh; then TOP=../../../..;
+ else
+ echo "Can't find config.sh."; exit 1
+ fi
+ . $TOP/config.sh
+ ;;
+esac
+case "$0" in
+*/*) cd `expr X$0 : 'X\(.*\)/'` ;;
+esac
+echo "Extracting mcon/man/metaxref.$manext (with variable substitutions)"
+$rm -f metaxref.$manext
+$spitshell >metaxref.$manext <<!GROK!THIS!
+.TH METAXREF $manext "Version $VERSION PL$PATCHLEVEL"
+''' @(#) Manual page for metaxref
+'''
+''' $Id$
+'''
+''' Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+'''
+''' You may redistribute only under the terms of the Artistic Licence,
+''' as specified in the README file that comes with the distribution.
+''' You may reuse parts of this distribution only within the terms of
+''' that same Artistic Licence; a copy of which may be found at the root
+''' of the source tree for dist 4.0.
+'''
+''' $Log: mxref.SH,v $
+''' Revision 3.0.1.4 1997/02/28 16:30:39 ram
+''' patch61: new -L option to match metaconfig and metalint
+'''
+''' Revision 3.0.1.3 1994/10/29 16:34:26 ram
+''' patch36: the leading .TH was referring to metaconfig
+'''
+''' Revision 3.0.1.2 1993/10/16 13:52:46 ram
+''' patch12: added BUGS section
+'''
+''' Revision 3.0.1.1 1993/08/19 06:42:25 ram
+''' patch1: leading config.sh searching was not aborting properly
+'''
+''' Revision 3.0 1993/08/18 12:10:15 ram
+''' Baseline for dist 3.0 netwide release.
+'''
+'''
+.SH NAME
+metaxref \- builds cross-reference file/unit/item information
+.SH SYNOPSIS
+.B metaxref
+[ \-\fBdhkmsV\fR ] [ \fB\-f\fI manifest\fR ]
+[ \-\fBL \fIdir\fR ]
+.SH DESCRIPTION
+.I Metaxref
+is a program that scans all the files in your MANIFEST file and produces
+three files which contains information about how the files in that MANIFEST
+reference items defined by metaconfig's unit files.
+.PP
+The first two files,
+.I I.fui
+and
+.I I.uif
+reference the \fIfile\fR, \fIunit\fR and \fIitems\fR sorted differently. The
+third file, \fIObsolete\fR, dumps all the known obsolete symbols, in which
+file they appear and the new symbol that should be used instead.
+.PP
+Note that obsolete symbols do not appear in the main cross-reference files,
+but are only listed in the \fIObsolete\fR file. That's yet another incentive
+to use the new symbols in your sources. :-)
+.SH OPTIONS
+.I Metaxref
+recognizes the following options:
+.TP 10
+.B \-d
+Turn on debug mode.
+.TP
+.B \-f\fI manifest\fR
+Use an alternate \fImanifest\fR file.
+.TP
+.B \-h
+Print help message and exit.
+.TP
+.B \-k
+Keep temporary \fI.MT\fR directory.
+.TP
+.B \-m
+Assume lots of memory and swap space. This will drastically improve the
+symbol lookup time in your source files, at the expense of memory usage.
+.TP
+.B \-s
+Turn on silent mode.
+.TP
+.B \-L\fI dir\fR
+Override default library location (where the \fIU\fR units directory
+can be found).
+.TP
+.B \-V
+Print version number and exit.
+.TP
+\fB\-X\fI file\fR
+When examining the source files, ignore any symbols listed in the \fIfile\fR.
+This is useful in situations where a particular unit is known not to be needed
+for your package's portability targets, but your source files nevertheless
+contain occurrences of words that look to \fImetaconfig\fR like symbols defined
+in that unit. (For example, you might need the word "index" in a source file,
+but not need the unit that determines whether \fIstrcpy\fR or \fIindex\fR
+should be used.)
+The \fIfile\fR can contain blank lines, comment lines introduced with '#', and
+lines containing a single symbol.
+If this option is not supplied, any \fI$exclusions_file\fR variable in
+\fI.package\fR is honored instead.
+.SH AUTHOR
+Harlan Stenn <harlan@mumps.pfcs.com>
+.SH FILES
+.TP 10
+.PD 0
+LIB/dist/mcon/U/*.U
+Public unit files.
+.TP
+U/*.U
+Private unit files
+.TP
+I.fui
+Lists information sorted by file, unit and item.
+.TP
+I.uif
+Lists information sorted by unit, item and file.
+.TP
+Obsolete
+Lists all the obsolete symbols used by the sources.
+.PD
+.sp
+.in +5
+where LIB is $privlibexp.
+.in -5
+.SH BUGS
+Metaxref will list among the wanted items all those magic symbols defined
+within units on the ?M: lines. Those are relevant only when metaconfig is
+invoked with the \fB\-M\fR option.
+.SH "SEE ALSO"
+metaconfig($manext), metalint($manext)
+!GROK!THIS!
+chmod 444 metaxref.$manext
diff --git a/mcon/mconfig.SH b/mcon/mconfig.SH
new file mode 100755
index 0000000..4917e43
--- /dev/null
+++ b/mcon/mconfig.SH
@@ -0,0 +1,193 @@
+case $CONFIG in
+'')
+ if test -f config.sh; then TOP=.;
+ elif test -f ../config.sh; then TOP=..;
+ elif test -f ../../config.sh; then TOP=../..;
+ elif test -f ../../../config.sh; then TOP=../../..;
+ elif test -f ../../../../config.sh; then TOP=../../../..;
+ else
+ echo "Can't find config.sh."; exit 1
+ fi
+ . $TOP/config.sh
+ ;;
+esac
+REVISION=`grep REVISION $TOP/revision.h | head -n1 | cut -d' ' -f4`
+case "$0" in
+*/*) cd `expr X$0 : 'X\(.*\)/'` ;;
+esac
+echo "Extracting mcon/mconfig (with variable substitutions)"
+cat >mconfig <<!GROK!THIS!
+$startperl
+ eval 'exec perl -S \$0 \${1+"\$@"}'
+ if \$running_under_some_shell;
+
+# $Id$
+#
+# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+#
+# You may redistribute only under the terms of the Artistic Licence,
+# as specified in the README file that comes with the distribution.
+# You may reuse parts of this distribution only within the terms of
+# that same Artistic Licence; a copy of which may be found at the root
+# of the source tree for dist 4.0.
+#
+# Original Author: Larry Wall <lwall@netlabs.com>
+# Key Contributor: Harlan Stenn <harlan@mumps.pfcs.com>
+#
+# $Log: mconfig.SH,v $
+# Revision 3.0.1.5 1995/07/25 14:19:05 ram
+# patch56: new -G option
+#
+# Revision 3.0.1.4 1994/06/20 07:11:04 ram
+# patch30: new -L option to override public library path for testing
+#
+# Revision 3.0.1.3 1994/01/24 14:20:53 ram
+# patch16: added ~/.dist_profile awareness
+#
+# Revision 3.0.1.2 1993/10/16 13:53:10 ram
+# patch12: new -M option for magic symbols and confmagic.h production
+#
+# Revision 3.0.1.1 1993/08/19 06:42:26 ram
+# patch1: leading config.sh searching was not aborting properly
+#
+# Revision 3.0 1993/08/18 12:10:17 ram
+# Baseline for dist 3.0 netwide release.
+#
+
+# Perload ON
+
+\$MC = '$privlib';
+\$version = '$VERSION';
+\$patchlevel = '$PATCHLEVEL';
+\$revision = '$REVISION';
+\$grep = '$grep';
+!GROK!THIS!
+
+$spitshell >>mconfig <<'!NO!SUBS!'
+chop($date = `date`);
+&profile; # Read ~/.dist_profile
+
+use Getopt::Std;
+&usage unless getopts("dhkmostvwGMVL:X:");
+
+my %excluded_symbol;
+read_exclusions($opt_X);
+$MC = $opt_L if $opt_L; # May override public library path
+$MC = &tilda_expand($MC); # ~name expansion
+chop($WD = `pwd`); # Working directory
+chdir $MC || die "Can't chdir to $MC: $!\n";
+chop($MC = `pwd`); # Real metaconfig lib path (no symbolic links)
+chdir $WD || die "Can't chdir back to $WD: $!\n";
+
+++$opt_k if $opt_d;
+++$opt_M if -f 'confmagic.h'; # Force -M if confmagic.h already there
+
+if ($opt_V) {
+ print STDERR "metaconfig $version-$revision\n";
+ exit 0;
+} elsif ($opt_h) {
+ &usage;
+}
+
+unlink 'Wanted' unless $opt_w; # Wanted rebuilt if no -w
+unlink 'Obsolete' unless $opt_w; # Obsolete file rebuilt if no -w
+&readpackage; # Merely get the package's name
+&init; # Various initializations
+`mkdir .MT 2>&1` unless -d '.MT'; # For private temporary files
+
+&locate_units; # Fill in @ARGV with a unit list
+&extract_dependencies; # Extract dependencies from units
+&extract_filenames; # Extract files to be scanned for
+&build_wanted; # Build a list of wanted symbols in file Wanted
+&build_makefile; # To do the transitive closure of dependencies
+&solve_dependencies; # Now run the makefile to close dependency graph
+&create_configure; # Create the Configure script and related files
+&cosmetic_update; # Update the manifests
+
+if ($opt_k) {
+ print "Leaving subdirectory .MT unremoved so you can peruse it.\n"
+ unless $opt_s;
+} else {
+ `rm -rf .MT 2>&1`;
+}
+print "Done.\n" unless $opt_s;
+
+# General initializations
+sub init {
+ &init_except; # Token which have upper-cased letters
+ &init_keep; # The keep status for built-in interpreter
+ &init_priority; # Priorities for diadic operators
+ &init_constants; # Define global constants
+ &init_depend; # The %Depend array records control line handling
+}
+
+sub init_constants {
+ $NEWMANI = 'MANIFEST.new'; # List of files to be scanned
+ $MANI = 'MANIFEST'; # For manifake
+
+ # The distinction between MANIFEST.new and MANIFEST can make sense
+ # when the "pat" tools are used, but if only metaconfig is used, then
+ # we can very well leave without a MANIFEST.new. --RAM, 2006-08-25
+ $NEWMANI = $MANI if -f $MANI && ! -f $NEWMANI;
+}
+
+# Record the exceptions -- almost all symbols but these are lower case
+# We also use three symbols from Unix.U for default file suffixes.
+sub init_except {
+ $Except{'Author'}++;
+ $Except{'Date'}++;
+ $Except{'Header'}++;
+ $Except{'Id'}++;
+ $Except{'Locker'}++;
+ $Except{'Log'}++;
+ $Except{'RCSfile'}++;
+ $Except{'Revision'}++;
+ $Except{'Source'}++;
+ $Except{'State'}++;
+ $Except{'_a'}++;
+ $Except{'_o'}++;
+ $Except{'_exe'}++;
+}
+
+# Print out metaconfig's usage and exits
+sub usage {
+ print STDERR <<'EOH';
+Usage: metaconfig [-dhkmostvwGMV] [-L dir] [-X file]
+ -d : debug mode.
+ -h : print this help message and exits.
+ -k : keep temporary directory.
+ -m : assume lots of memory and swap space.
+ -o : maps obsolete symbols on new ones.
+ -s : silent mode.
+ -t : trace symbols as they are found.
+ -v : verbose mode.
+ -w : trust Wanted file as being up-to-date.
+ -G : also provide a GNU configure-like front end.
+ -L : specify main units repository.
+ -M : activate production of confmagic.h.
+ -V : print version number and exits.
+ -X : read symbol exclusions from file (overriding .package)
+EOH
+ exit 1;
+}
+
+!NO!SUBS!
+$grep -v '^;#' pl/locate.pl >>mconfig
+$grep -v '^;#' pl/common.pl >>mconfig
+$grep -v '^;#' pl/depend.pl >>mconfig
+$grep -v '^;#' pl/init.pl >>mconfig
+$grep -v '^;#' pl/extract.pl >>mconfig
+$grep -v '^;#' pl/files.pl >>mconfig
+$grep -v '^;#' pl/wanted.pl >>mconfig
+$grep -v '^;#' pl/obsolete.pl >>mconfig
+$grep -v '^;#' pl/makefile.pl >>mconfig
+$grep -v '^;#' pl/order.pl >>mconfig
+$grep -v '^;#' pl/configure.pl >>mconfig
+$grep -v '^;#' pl/cosmetic.pl >>mconfig
+$grep -v '^;#' pl/eval.pl >>mconfig
+$grep -v '^;#' ../pl/package.pl >>mconfig
+$grep -v '^;#' ../pl/manifake.pl >>mconfig
+$grep -v '^;#' ../pl/tilde.pl >>mconfig
+$grep -v '^;#' ../pl/profile.pl >>mconfig
+chmod +x mconfig
+$eunicefix mconfig
diff --git a/mcon/mlint.SH b/mcon/mlint.SH
new file mode 100755
index 0000000..20a96a1
--- /dev/null
+++ b/mcon/mlint.SH
@@ -0,0 +1,139 @@
+case $CONFIG in
+'')
+ if test -f config.sh; then TOP=.;
+ elif test -f ../config.sh; then TOP=..;
+ elif test -f ../../config.sh; then TOP=../..;
+ elif test -f ../../../config.sh; then TOP=../../..;
+ elif test -f ../../../../config.sh; then TOP=../../../..;
+ else
+ echo "Can't find config.sh."; exit 1
+ fi
+ . $TOP/config.sh
+ ;;
+esac
+REVISION=`grep REVISION $TOP/revision.h | head -n1 | cut -d' ' -f4`
+case "$0" in
+*/*) cd `expr X$0 : 'X\(.*\)/'` ;;
+esac
+echo "Extracting mcon/mlint (with variable substitutions)"
+cat >mlint <<!GROK!THIS!
+$startperl
+ eval 'exec perl -S \$0 \${1+"\$@"}'
+ if \$running_under_some_shell;
+
+# $Id$
+#
+# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+#
+# You may redistribute only under the terms of the Artistic Licence,
+# as specified in the README file that comes with the distribution.
+# You may reuse parts of this distribution only within the terms of
+# that same Artistic Licence; a copy of which may be found at the root
+# of the source tree for dist 4.0.
+#
+# Original Author: Harlan Stenn <harlan@mumps.pfcs.com>
+#
+# $Log: mlint.SH,v $
+# Revision 3.0.1.3 1994/05/06 15:20:42 ram
+# patch23: added -L switch to override public unit repository path
+#
+# Revision 3.0.1.2 1994/01/24 14:21:00 ram
+# patch16: added ~/.dist_profile awareness
+#
+# Revision 3.0.1.1 1993/08/19 06:42:27 ram
+# patch1: leading config.sh searching was not aborting properly
+#
+# Revision 3.0 1993/08/18 12:10:17 ram
+# Baseline for dist 3.0 netwide release.
+#
+
+# Perload ON
+
+\$MC = '$privlib';
+\$version = '$VERSION';
+\$patchlevel = '$PATCHLEVEL';
+\$revision = '$REVISION';
+\$grep = '$grep';
+!GROK!THIS!
+
+$spitshell >>mlint <<'!NO!SUBS!'
+&profile; # Read ~/.dist_profile
+
+use Getopt::Std;
+&usage unless getopts("hklVL:");
+
+if ($opt_V) {
+ print STDERR "metalint $version-$revision\n";
+ exit 0;
+} elsif ($opt_h) {
+ &usage;
+}
+
+chop($date = `date`);
+$MC = $opt_L if $opt_L; # May override library path
+$MC = &tilda_expand($MC); # ~name expansion
+chop($WD = `pwd`); # Working directory
+chdir $MC || die "Can't chdir to $MC: $!\n";
+chop($MC = `pwd`); # Real metalint lib path (no symbolic links)
+chdir $WD || die "Can't chdir back to $WD: $!\n";
+
+&init; # Various initializations
+`mkdir .MT 2>&1` unless -d '.MT'; # For private temporary files
+
+&locate_units; # Fill in @ARGV with a unit list
+&extract_dependencies; # Extract dependencies from units
+&sanity_checks; # Perform sanity checks
+
+if ($opt_k) {
+ print "Leaving subdirectory .MT unremoved so you can peruse it.\n"
+ unless $opt_s;
+} else {
+ `rm -rf .MT 2>&1`;
+}
+print "Done.\n" unless $opt_s;
+
+# General initializations
+sub init {
+ &init_except; # Token which have upper-cased letters
+ &init_depend; # The %Depend array records control line handling
+}
+
+# Record the exceptions -- all symbols but these are lower case
+sub init_except {
+ $Except{'Author'}++;
+ $Except{'Date'}++;
+ $Except{'Header'}++;
+ $Except{'Id'}++;
+ $Except{'Locker'}++;
+ $Except{'Log'}++;
+ $Except{'RCSfile'}++;
+ $Except{'Revision'}++;
+ $Except{'Source'}++;
+ $Except{'State'}++;
+}
+
+# Print out metalint's usage and exits
+sub usage {
+ print STDERR <<EOM;
+Usage: metalint [-hklsV] [-L dir]
+ -h : print this help message and exits.
+ -k : keep temporary directory.
+ -l : also report problems from library units.
+ -s : silent mode.
+ -L : specify main units repository.
+ -V : print version number and exits.
+EOM
+ exit 1;
+}
+
+!NO!SUBS!
+$grep -v '^;#' pl/locate.pl >>mlint
+$grep -v '^;#' pl/lint.pl >>mlint
+$grep -v '^;#' pl/init.pl >>mlint
+$grep -v '^;#' pl/extract.pl >>mlint
+$grep -v '^;#' pl/obsolete.pl >>mlint
+$grep -v '^;#' pl/tsort.pl >>mlint
+$grep -v '^;#' ../pl/tilde.pl >>mlint
+$grep -v '^;#' ../pl/profile.pl >>mlint
+chmod +x mlint
+$eunicefix mlint
diff --git a/mcon/mxref.SH b/mcon/mxref.SH
new file mode 100755
index 0000000..3433edc
--- /dev/null
+++ b/mcon/mxref.SH
@@ -0,0 +1,152 @@
+case $CONFIG in
+'')
+ if test -f config.sh; then TOP=.;
+ elif test -f ../config.sh; then TOP=..;
+ elif test -f ../../config.sh; then TOP=../..;
+ elif test -f ../../../config.sh; then TOP=../../..;
+ elif test -f ../../../../config.sh; then TOP=../../../..;
+ else
+ echo "Can't find config.sh."; exit 1
+ fi
+ . $TOP/config.sh
+ ;;
+esac
+REVISION=`grep REVISION $TOP/revision.h | head -n1 | cut -d' ' -f4`
+case "$0" in
+*/*) cd `expr X$0 : 'X\(.*\)/'` ;;
+esac
+echo "Extracting mcon/mxref (with variable substitutions)"
+cat >mxref <<!GROK!THIS!
+$startperl
+ eval 'exec perl -S \$0 \${1+"\$@"}'
+ if \$running_under_some_shell;
+
+# $Id$
+#
+# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+#
+# You may redistribute only under the terms of the Artistic Licence,
+# as specified in the README file that comes with the distribution.
+# You may reuse parts of this distribution only within the terms of
+# that same Artistic Licence; a copy of which may be found at the root
+# of the source tree for dist 4.0.
+#
+# Original Author: Harlan Stenn <harlan@mumps.pfcs.com>
+#
+# $Log: mxref.SH,v $
+# Revision 3.0.1.3 1997/02/28 16:30:49 ram
+# patch61: new -L option to match metaconfig and metalint
+#
+# Revision 3.0.1.2 1994/01/24 14:21:04 ram
+# patch16: added ~/.dist_profile awareness
+#
+# Revision 3.0.1.1 1993/08/19 06:42:27 ram
+# patch1: leading config.sh searching was not aborting properly
+#
+# Revision 3.0 1993/08/18 12:10:18 ram
+# Baseline for dist 3.0 netwide release.
+#
+
+# Perload ON
+
+\$MC = '$privlib';
+\$version = '$VERSION';
+\$patchlevel = '$PATCHLEVEL';
+\$revision = '$REVISION';
+\$grep = '$grep';
+!GROK!THIS!
+
+$spitshell >>mxref <<'!NO!SUBS!'
+&profile; # Read ~/.dist_profile
+
+use Getopt::Std;
+&usage unless getopts("df:hkmsVL:X:");
+
+chop($date = `date`);
+chop($WD = `pwd`); # Working directory
+my %excluded_symbol;
+read_exclusions($opt_X);
+$MC = $opt_L if $opt_L; # May override library path
+$MC = &tilda_expand($MC); # ~name expansion
+chdir $MC || die "Can't chdir to $MC: $!\n";
+chop($MC = `pwd`); # Real metaxref lib path (no symbolic links)
+chdir $WD || die "Can't chdir back to $WD: $!\n";
+
+if ($opt_V) {
+ print STDERR "metaxref $version-$revision\n";
+ exit 0;
+} elsif ($opt_h) {
+ &usage;
+}
+
+$NEWMANI = $opt_f || (-f 'MANIFEST.new' ? 'MANIFEST.new' : 'MANIFEST');
+
+&init; # Various initializations
+`mkdir .MT 2>&1` unless -d '.MT'; # For private temporary files
+unlink 'Obsolete'; # Obsolete file rebuilt
+
+&locate_units; # Fill in @ARGV with a unit list
+&extract_dependencies; # Extract dependencies from units
+&extract_filenames; # Get source files from MANIFEST.new
+&build_xref; # Parse files, build I.* output
+
+if ($opt_k) {
+ print "Leaving subdirectory .MT unremoved so you can peruse it.\n"
+ unless $opt_s;
+} else {
+ `rm -rf .MT 2>&1`;
+}
+print "Done.\n" unless $opt_s;
+
+# General initializations
+sub init {
+ &init_except; # Token which have upper-cased letters
+ &init_depend; # The %Depend array records control line handling
+}
+
+# Record the exceptions -- all symbols but these are lower case
+sub init_except {
+ $Except{'Author'}++;
+ $Except{'Date'}++;
+ $Except{'Header'}++;
+ $Except{'Id'}++;
+ $Except{'Locker'}++;
+ $Except{'Log'}++;
+ $Except{'RCSfile'}++;
+ $Except{'Revision'}++;
+ $Except{'Source'}++;
+ $Except{'State'}++;
+}
+
+# Print out metaxref's usage and exits
+sub usage {
+ print STDERR <<EOM;
+Usage: metaxref [-dhkmsV] [-f manifest] [-L dir] [-X file]
+ -d : debug mode.
+ -f : use that file as manifest instead of MANIFEST.new.
+ -h : print this help message and exits.
+ -k : keep temporary directory.
+ -m : assume lots of memory and swap space.
+ -s : silent mode.
+ -L : specify main units repository.
+ -V : print version number and exits.
+ -X : read symbol exclusions from file (overriding .package)
+EOM
+ exit 1;
+}
+
+!NO!SUBS!
+$grep -v '^;#' pl/locate.pl >>mxref
+$grep -v '^;#' pl/common.pl >>mxref
+$grep -v '^;#' pl/xref.pl >>mxref
+$grep -v '^;#' pl/files.pl >>mxref
+$grep -v '^;#' pl/init.pl >>mxref
+$grep -v '^;#' pl/extract.pl >>mxref
+$grep -v '^;#' pl/obsolete.pl >>mxref
+$grep -v '^;#' pl/xwant.pl >>mxref
+$grep -v '^;#' pl/gensym.pl >>mxref
+$grep -v '^;#' ../pl/manifake.pl >>mxref
+$grep -v '^;#' ../pl/tilde.pl >>mxref
+$grep -v '^;#' ../pl/profile.pl >>mxref
+chmod +x mxref
+$eunicefix mxref
diff --git a/mcon/pl/common.pl b/mcon/pl/common.pl
new file mode 100644
index 0000000..0d1ea5a
--- /dev/null
+++ b/mcon/pl/common.pl
@@ -0,0 +1,289 @@
+;# $Id$
+;#
+;# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+;#
+;# You may redistribute only under the terms of the Artistic Licence,
+;# as specified in the README file that comes with the distribution.
+;# You may reuse parts of this distribution only within the terms of
+;# that same Artistic Licence; a copy of which may be found at the root
+;# of the source tree for dist 4.0.
+;#
+;# $Log: common.pl,v $
+;# Revision 3.0.1.4 1994/10/29 16:35:01 ram
+;# patch36: metaconfig and metaxref ignore ?F: lines from now on
+;#
+;# Revision 3.0.1.3 1994/05/13 15:29:04 ram
+;# patch27: now understands macro definitions in ?H: lines
+;#
+;# Revision 3.0.1.2 1994/01/24 14:22:54 ram
+;# patch16: can now define "internal use only" variables on ?MAKE: lines
+;#
+;# Revision 3.0.1.1 1993/10/16 13:53:29 ram
+;# patch12: added support for ?M: lines and confmagic.h production
+;#
+;# Revision 3.0 1993/08/18 12:10:19 ram
+;# Baseline for dist 3.0 netwide release.
+;#
+;# The list of all available units is held in @ARGV. We shall parse them and
+;# extract the dependencies. A lot of global data structures are filled in
+;# during this phase.
+;#
+;# The following two H tables are used to record each know symbol (i.e. a
+;# symbol known by at least one unit), and also how many times this symbol is
+;# found in the sources. If an entry for a given key is positive, then the
+;# associated symbol (i.e. the key) is wanted and it will be written in the
+;# Wanted file.
+;# %shmaster{'$sym'} records how many times '$sym' is found in a .SH file
+;# %cmaster{'SYM'} records how many times 'SYM' is found in a .c file
+;# %cwanted{'SYM'} records the set of necessary shell symbols needed for SYM
+;# %mwanted{'sym'} is set of C symbols needed when sym is found in .c file
+;#
+;# This data structure records the initializations which are requires at the
+;# beginning of a Configure script. The initialization only occurs when the
+;# symbol is needed. Those symbols will appear in the produced config.sh file,
+;# hence the name of "master" symbols.
+;# @Master records shell configuration symbols which will appear in config.sh
+;#
+;# The @Cond array records the conditional shell symbols, i.e. those whose
+;# value may be defaulted. They will appear in the initialization section of
+;# the Configure script with the default value if they are not otherwise used
+;# but Configure needs a suitable value internally.
+;# @Cond records symbols which are flagged as conditional in the dependencies
+;# %hasdefault{'sym'} is true when the conditional 'sym' has a default value
+;#
+;# The %Obsolete array records the obsolecence for units or symbols. The key
+;# ends with .U for units, otherwise it is a symbol. Unit's obsolescence is
+;# flagged with a ?O: line (the line being the message which will be issued
+;# when the unit is used) while symbol obsolecence is indicated on the leading
+;# ?C: or ?S: line, between parenthesis. In that case, the value stored is the
+;# new symbol which should be used insted.
+;# %Obsolete{'unit.U'} is a message to be printed when obsolete unit is used
+;# %Obsolete{'sym'} is the symbol to be used in place of the obsoleted 'sym'
+;#
+;# The $dependencies variable is used to record the dependencies extracted
+;# from the units (?MAKE: line).
+;#
+;# During the dependency extraction. some files are produced in the .MT dir.
+;# Init.U records the initialization wanted
+;# Config_h.U records the informations which could go in config.h.SH
+;# Extern.U records the libraries and includes wanted by each symbol
+;#
+;# This file is shared by both metaconfig and metaxref
+;#
+# Initialize the extraction process by setting some variables.
+# We return a string to be eval to do more customized initializations.
+sub init_extraction {
+ open(INIT, ">$WD/.MT/Init.U") ||
+ die "Can't create .MT/Init.U\n";
+ open(CONF_H, ">$WD/.MT/Config_h.U") ||
+ die "Can't create .MT/Config_h.U\n";
+ open(EXTERN, ">$WD/.MT/Extern.U") ||
+ die "Can't create .MT/Extern.U\n";
+ open(MAGIC_H, ">$WD/.MT/Magic_h.U") ||
+ die "Can't create .MT/Magic_h.U\n";
+
+ $c_symbol = ''; # Current symbol seen in ?C: lines
+ $s_symbol = ''; # Current symbol seen in ?S: lines
+ $m_symbol = ''; # Current symbol seen in ?M: lines
+ $heredoc = ''; # Last "here" document symbol seen
+ $heredoc_nosubst = 0; # True for <<'EOM' here docs
+ $condlist = ''; # List of conditional symbols
+ $defined = ''; # List of defined symbols in the unit
+ $body = ''; # No procedure to handle body
+ $ending = ''; # No procedure to clean-up
+}
+
+# End the extraction process
+sub end_extraction {
+ close EXTERN; # External dependencies (libraries, includes...)
+ close CONF_H; # C symbol definition template
+ close INIT; # Required initializations
+ close MAGIC; # Magic C symbol redefinition templates
+
+ print $dependencies if $opt_v; # Print extracted dependencies
+}
+
+# Process the ?MAKE: line
+sub p_make {
+ local($_) = @_;
+ local(@ary); # Locally defined symbols
+ local(@dep); # Dependencies
+ if (/^[\w+ ]*:/) { # Main dependency rule
+ s|^\s*||; # Remove leading spaces
+ chop;
+ s/:(.*)//;
+ @dep = split(' ', $1); # Dependencies
+ @ary = split(' '); # Locally defined symbols
+ foreach $sym (@ary) {
+ # Symbols starting with a '+' are meant for internal use only.
+ next if $sym =~ s/^\+//;
+ # Only sumbols starting with a lowercase letter are to
+ # appear in config.sh, excepted the ones listed in Except.
+ if ($sym =~ /^[_a-z]/ || $Except{$sym}) {
+ $shmaster{"\$$sym"} = undef;
+ push(@Master,"?$unit:$sym=''\n"); # Initializations
+ }
+ }
+ $condlist = ''; # List of conditional symbols
+ local($sym); # Symbol copy, avoid @dep alteration
+ foreach $dep (@dep) {
+ if ($dep =~ /^\+[A-Za-z]/) {
+ ($sym = $dep) =~ s|^\+||;
+ $condlist .= "$sym ";
+ push(@Cond, $sym) unless $condseen{$sym};
+ $condseen{$sym}++; # Conditionally wanted
+ }
+ }
+ # Append to already existing dependencies. The 'defined' variable
+ # is set for &write_out, used to implement ?L: and ?I: canvas. It is
+ # reset each time a new unit is parsed.
+ # NB: leading '+' for defined symbols (internal use only) have been
+ # removed at this point, but conditional dependencies still bear it.
+ $defined = join(' ', @ary); # Symbols defined by this unit
+ $dependencies .= $defined . ':' . join(' ', @dep) . "\n";
+ $dependencies .= " -cond $condlist\n" if $condlist;
+ } else {
+ $dependencies .= $_; # Building rules
+ }
+}
+
+# Process the ?O: line
+sub p_obsolete {
+ local($_) = @_;
+ $Obsolete{"$unit.U"} .= $_; # Message(s) to print if unit is used
+}
+
+# Process the ?S: lines
+sub p_shell {
+ local($_) = @_;
+ unless ($s_symbol) {
+ if (/^(\w+).*:/) {
+ $s_symbol = $1;
+ print " ?S: $s_symbol\n" if $opt_d;
+ } else {
+ warn "\"$file\", line $.: syntax error in ?S: construct.\n";
+ $s_symbol = $unit;
+ return;
+ }
+ # Deal with obsolete symbol list (enclosed between parenthesis)
+ &record_obsolete("\$$_") if /\(/;
+ }
+ m|^\.\s*$| && ($s_symbol = ''); # End of comment
+}
+
+# Process the ?C: lines
+sub p_c {
+ local($_) = @_;
+ unless ($c_symbol) {
+ if (s/^(\w+)\s*~\s*(\S+)\s*(.*):/$1 $3:/) {
+ # The ~ operator aliases the main C symbol to another symbol which
+ # is to be used instead for definition in config.h. That is to say,
+ # the line '?C:SYM ~ other:' would look for symbol 'other' instead,
+ # and the documentation for symbol SYM would only be included in
+ # config.h if 'other' were actually wanted.
+ $c_symbol = $2; # Alias for definition in config.h
+ print " ?C: $1 ~ $c_symbol\n" if $opt_d;
+ } elsif (/^(\w+).*:/) {
+ # Default behaviour. Include in config.h if symbol is needed.
+ $c_symbol = $1;
+ print " ?C: $c_symbol\n" if $opt_d;
+ } else {
+ warn "\"$file\", line $.: syntax error in ?C: construct.\n";
+ $c_symbol = $unit;
+ return;
+ }
+ # Deal with obsolete symbol list (enclosed between parenthesis) and
+ # make sure that list do not appear in config.h.SH by removing it.
+ &record_obsolete("$_") if /\(/;
+ s/\s*\(.*\)//; # Get rid of obsolete symbol list
+ }
+ s|^(\w+)\s*|?$c_symbol:/* $1| || # Start of comment
+ (s|^\.\s*$|?$c_symbol: */\n| && ($c_symbol = '', 1)) || # End of comment
+ s|^(.*)|?$c_symbol: *$1|; # Middle of comment
+ &p_config("$_"); # Add comments to config.h.SH
+}
+
+# Process the ?H: lines
+sub p_config {
+ local($_) = @_;
+ local($constraint); # Constraint to be used for inclusion
+ ++$old_version if s/^\?%1://; # Old version
+ if (s/^\?(\w+)://) { # Remove leading '?var:'
+ $constraint = $1; # Constraint is leading '?var'
+ } else {
+ $constraint = ''; # No constraint
+ }
+ if (/^#.*\$/) { # Look only for cpp lines
+ if (m|^#\$(\w+)\s+(\w+).*\$(\w+)|) {
+ # Case: #$d_var VAR "$var"
+ $constraint = $2 unless $constraint;
+ print " ?H: ($constraint) #\$$1 $2 \"\$$3\"\n" if $opt_d;
+ $cmaster{$2} = undef;
+ $cwanted{$2} = "$1\n$3";
+ } elsif (m|^#define\s+(\w+)\((.*)\)\s+\$(\w+)|) {
+ # Case: #define VAR(x) $var
+ $constraint = $1 unless $constraint;
+ print " ?H: ($constraint) #define $1($2) \$$3\n" if $opt_d;
+ $cmaster{$1} = undef;
+ $cwanted{$1} = $3;
+ } elsif (m|^#\$define\s+(\w+)|) {
+ # Case: #$define VAR
+ $constraint = $1 unless $constraint;
+ print " ?H: ($constraint) #define $1\n" if $opt_d;
+ $cmaster{$1} = undef;
+ $cwanted{$1} = "define\n$unit";
+ } elsif (m|^#\$(\w+)\s+(\w+)|) {
+ # Case: #$d_var VAR
+ $constraint = $2 unless $constraint;
+ print " ?H: ($constraint) #\$$1 $2\n" if $opt_d;
+ $cmaster{$2} = undef;
+ $cwanted{$2} = $1;
+ } elsif (m|^#define\s+(\w+).*\$(\w+)|) {
+ # Case: #define VAR "$var"
+ $constraint = $1 unless $constraint;
+ print " ?H: ($constraint) #define $1 \"\$$2\"\n" if $opt_d;
+ $cmaster{$1} = undef;
+ $cwanted{$1} = $2;
+ } else {
+ $constraint = $unit unless $constraint;
+ print " ?H: ($constraint) $_" if $opt_d;
+ }
+ } else {
+ print " ?H: ($constraint) $_" if $opt_d;
+ }
+ # If not a single ?H:. line, add the leading constraint
+ s/^\.// || s/^/?$constraint:/;
+ print CONF_H;
+}
+
+# Process the ?M: lines
+sub p_magic {
+ local($_) = @_;
+ unless ($m_symbol) {
+ if (/^(\w+):\s*([\w\s]*)\n$/) {
+ # A '?M:sym:' line implies a '?W:%<:sym' since we'll need to know
+ # about the wantedness of sym later on when building confmagic.h.
+ # Buf is sym is wanted, then the C symbol dependencies have to
+ # be triggered. That is done by introducing sym in the mwanted
+ # array, known by the Wanted file construction process...
+ $m_symbol = $1;
+ print " ?M: $m_symbol\n" if $opt_d;
+ $mwanted{$m_symbol} = $2; # Record C dependencies
+ &p_wanted("$unit:$m_symbol"); # Build fake ?W: line
+ } else {
+ warn "\"$file\", line $.: syntax error in ?M: construct.\n";
+ }
+ return;
+ }
+ (s/^\.\s*$/?$m_symbol:\n/ && ($m_symbol = '', 1)) || # End of block
+ s/^/?$m_symbol:/;
+ print MAGIC_H; # Definition goes to confmagic.h
+ print " ?M: $_" if $opt_d;
+}
+
+sub p_ignore {} # Ignore comment line
+sub p_lint {} # Ignore lint directives
+sub p_visible {} # No visible checking in metaconfig
+sub p_temp {} # No temporary variable control
+sub p_file {} # Ignore produced file directives (for now)
+
diff --git a/mcon/pl/configure.pl b/mcon/pl/configure.pl
new file mode 100644
index 0000000..d99d74b
--- /dev/null
+++ b/mcon/pl/configure.pl
@@ -0,0 +1,248 @@
+;# $Id$
+;#
+;# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+;#
+;# You may redistribute only under the terms of the Artistic Licence,
+;# as specified in the README file that comes with the distribution.
+;# You may reuse parts of this distribution only within the terms of
+;# that same Artistic Licence; a copy of which may be found at the root
+;# of the source tree for dist 4.0.
+;#
+;# $Log: configure.pl,v $
+;# Revision 3.0.1.5 1995/01/30 14:47:15 ram
+;# patch49: removed old "do name()" routine call constructs
+;#
+;# Revision 3.0.1.4 1995/01/11 15:40:02 ram
+;# patch45: now allows @if statements for the add.Config_sh unit inclusion
+;#
+;# Revision 3.0.1.3 1994/05/06 15:21:23 ram
+;# patch23: cleaned up the 'prepend' command
+;#
+;# Revision 3.0.1.2 1994/01/24 14:23:21 ram
+;# patch16: new general <\$variable> macro substitutions in wiped units
+;#
+;# Revision 3.0.1.1 1993/10/16 13:54:02 ram
+;# patch12: added support for ?M: lines and confmagic.h production
+;# patch12: new Makefile command cm_h_weed
+;#
+;# Revision 3.0 1993/08/18 12:10:20 ram
+;# Baseline for dist 3.0 netwide release.
+;#
+;#
+;# This file is the heart of metaconfig. We generate a Configure script using
+;# the informations gathered in the @cmdwanted array. A unit is expected to have
+;# its path written in the %Unit array (indexing is done with the unit's name
+;# without the .U extension).
+;#
+;# The units are run through a built-in interpreter before being written to
+;# the Configure script.
+;#
+# Create the Configure script
+sub create_configure {
+ print "Creating Configure...\n" unless $opt_s;
+ open(CONFIGURE,">Configure") || die "Can't create Configure: $!\n";
+ open(CONF_H,">config_h.SH") || die "Can't create config_h.SH: $!\n";
+ if ($opt_M) {
+ open(MAGIC_H,">confmagic.h") || die "Can't create confmagic.h: $!\n";
+ }
+
+ chdir('.MT') || die "Can't cd to .MT: $!\n";
+ for (@cmdwanted) {
+ &process_command($_); # Run the makefile command
+ }
+ chdir($WD) || die "Can't cd back to $WD\n";
+ close CONFIGURE;
+ print CONF_H "#endif\n"; # Close the opened #ifdef (see Config_h.U)
+ print CONF_H "!GROK!THIS!\n";
+ close CONF_H;
+ if ($opt_M) {
+ print MAGIC_H "#endif\n"; # Close the opened #ifdef (see Magic_h.U)
+ close MAGIC_H;
+ }
+ `chmod +x Configure`;
+}
+
+# Process a Makefile 'pick' command
+sub process_command {
+ local($cmd, $target, $unit_name) = split(' ', $_[0]);
+ local($name) = $unit_name . '.U'; # Restore missing .U
+ local($file) = $name; # Where unit is located
+ unless ($file =~ m|^\./|) { # Unit produced earlier by metaconfig
+ $file = $Unit{$unit_name}; # Fetch unit from U directory
+ }
+ if (defined $Obsolete{$name}) { # Signal use of an obsolete unit
+ warn "\tObsolete unit $name is used:\n";
+ local(@msg) = split(/\n/, $Obsolete{$name});
+ foreach $msg (@msg) {
+ warn "\t $msg\n";
+ }
+ }
+ die "Can't open $file.($name for target $target): $!\n"
+ unless open(UNIT, $file);
+ print "\t$cmd $file\n" if $opt_v;
+ &init_interp; # Initializes the interpreter
+
+ # The 'add' command adds the unit to Configure.
+ if ($cmd eq 'add') {
+ while (<UNIT>) {
+ print CONFIGURE unless &skipped || !&interpret($_);
+ }
+ }
+
+ # The 'weed' command adds the unit to Configure, but
+ # makes some tests for the lines starting with '?' or '%'.
+ # These lines are kept only if the symbol is wanted.
+ elsif ($cmd eq 'weed') {
+ while (<UNIT>) {
+ if (/^\?(\w+):/) {
+ s/^\?\w+:// if $symwanted{$1};
+ }
+ if (/^%(\w+):/) {
+ s/^%\w+:// if $condwanted{$1};
+ }
+ print CONFIGURE unless &skipped || !&interpret($_);
+ }
+ }
+
+ # The 'wipe' command adds the unit to Configure, but
+ # also substitues some hardwired macros.
+ elsif ($cmd eq 'wipe') {
+ while (<UNIT>) {
+ s/<PACKAGENAME>/$package/g;
+ s/<MAINTLOC>/$maintloc/g;
+ s/<VERSION>/$version/g; # This is metaconfig's version
+ s/<REVISION>/$revision/g; # And revision information
+ warn "\"$file\": usage of <PATCHLEVEL> is deprecated\n"
+ if s/<PATCHLEVEL>/$patchlevel/g;
+ s/<DATE>/$date/g;
+ s/<BASEREV>/$baserev/g;
+ s/<\$(\w+)>/eval("\$$1")/ge; # <$var> -> $var substitution
+ print CONFIGURE unless &skipped || !&interpret($_);
+ }
+ }
+
+ # The 'add.Null' command adds empty initializations
+ # to Configure for all the shell variable used.
+ elsif ($cmd eq 'add.Null') {
+ for (sort @Master) {
+ if (/^\?(\w+):/) {
+ s/^\?\w+:// if $symwanted{$1};
+ }
+ print CONFIGURE unless &skipped;
+ }
+ for (sort @Cond) {
+ print CONFIGURE "$_=''\n"
+ unless $symwanted{$_} || $hasdefault{$_};
+ }
+ while (<UNIT>) {
+ print CONFIGURE unless &skipped || !&interpret($_);
+ }
+ print CONFIGURE "CONFIG=''\n\n";
+ }
+
+ # The 'add.Config_sh' command fills in the production of
+ # the config.sh script within Configure. Only the used
+ # variable are added, the conditional ones are skipped.
+ elsif ($cmd eq 'add.Config_sh') {
+ while (<UNIT>) {
+ print CONFIGURE unless &skipped || !&interpret($_);
+ }
+ for (sort @Master) {
+ if (/^\?(\w+):/) {
+ # Can't use $shmaster, because config.sh must
+ # also contain some internal defaults used by
+ # Configure (e.g. nm_opt, libc, etc...).
+ s/^\?\w+:// if $symwanted{$1};
+ }
+ s/^(\w+)=''/$1='\$$1'/;
+ print CONFIGURE unless &skipped;
+ }
+ }
+
+ # The 'close.Config_sh' command adds the final EOT line at
+ # the end of the here-document construct which produces the
+ # config.sh file within Configure.
+ elsif ($cmd eq 'close.Config_sh') {
+ print CONFIGURE "EOT\n\n"; # Ends up file
+ }
+
+ # The 'c_h_weed' command produces the config_h.SH file.
+ # Only the necessary lines are kept. If no conditional line is
+ # ever printed, then the file is useless and will be removed.
+ elsif ($cmd eq 'c_h_weed') {
+ $printed = 0;
+ while (<UNIT>) {
+ if (/^\?(\w+):/) {
+ s/^\?\w+:// if $cmaster{$1} || $symwanted{$1};
+ }
+ unless (&skipped || !&interpret($_)) {
+ if (/^$/) {
+ print CONF_H "\n" if $printed;
+ $printed = 0;
+ } else {
+ print CONF_H;
+ ++$printed;
+ }
+ }
+ }
+ }
+
+ # The 'cm_h_weed' command produces the confmagic.h file.
+ # Only the necessary lines are kept. If no conditional line is
+ # ever printed, then the file is useless and will be removed.
+ elsif ($cmd eq 'cm_h_weed') {
+ if ($opt_M) {
+ $printed = 0;
+ while (<UNIT>) {
+ if (/^\?(\w+):/) {
+ s/^\?\w+:// if $cmaster{$1} || $symwanted{$1};
+ }
+ unless (&skipped || !&interpret($_)) {
+ if (/^$/) {
+ print MAGIC_H "\n" if $printed;
+ $printed = 0;
+ } else {
+ print MAGIC_H;
+ ++$printed;
+ }
+ }
+ }
+ }
+ }
+
+ # The 'prepend' command will add the content of the target to
+ # the current file (held in $file, the one which UNIT refers to),
+ # if the file is not empty.
+ elsif ($cmd eq 'prepend') {
+ if (-s $file) {
+ open(PREPEND, ">.prepend") ||
+ die "Can't create .MT/.prepend: $!\n";
+ open(TARGET, $Unit{$target}) ||
+ die "Can't open unit $Unit{$target}: $!\n";
+ while (<TARGET>) {
+ print PREPEND unless &skipped;
+ }
+ print PREPEND <UNIT>; # Now add original file contents
+ close PREPEND;
+ close TARGET;
+ rename('.prepend', $file) ||
+ die "Can't rename .prepend into $file: $!\n";
+ }
+ }
+
+ # Command not found
+ else {
+ die "Unrecognized command from Makefile: $cmd\n";
+ }
+ &check_state; # Make sure there are no pending statements
+ close UNIT;
+}
+
+# Skip lines starting with ? or %, including all the following continuation
+# lines, if any. Return 0 if the line was not to be skipped, 1 otherwise.
+sub skipped {
+ return 0 unless /^\?|^%/;
+ &complete_line(UNIT) if /\\\s*$/; # Swallow continuation lines
+ 1;
+}
+
diff --git a/mcon/pl/cosmetic.pl b/mcon/pl/cosmetic.pl
new file mode 100644
index 0000000..d8b535b
--- /dev/null
+++ b/mcon/pl/cosmetic.pl
@@ -0,0 +1,110 @@
+;# $Id$
+;#
+;# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+;#
+;# You may redistribute only under the terms of the Artistic Licence,
+;# as specified in the README file that comes with the distribution.
+;# You may reuse parts of this distribution only within the terms of
+;# that same Artistic Licence; a copy of which may be found at the root
+;# of the source tree for dist 4.0.
+;#
+;# $Log: cosmetic.pl,v $
+;# Revision 3.0.1.3 1995/07/25 14:19:16 ram
+;# patch56: added support for new -G option
+;#
+;# Revision 3.0.1.2 1995/01/30 14:47:52 ram
+;# patch49: forgot to localize the spaces variable
+;#
+;# Revision 3.0.1.1 1993/11/10 17:39:10 ram
+;# patch14: now also adds confmagic.h if not in MANIFEST.new already
+;# patch14: new functions mani_add and mani_remove to factorize code
+;#
+;# Revision 3.0 1993/08/18 12:10:20 ram
+;# Baseline for dist 3.0 netwide release.
+;#
+;#
+# Update the MANIFEST.new file if necessary
+sub cosmetic_update {
+ # Check for an "empty" config_h.SH (2 blank lines only). This test relies
+ # on the actual text held in Config_h.U. If the unit is modified, then the
+ # following might need adjustments.
+ local($blank_lines) = 0;
+ local($spaces) = 0;
+ open(CONF_H, 'config_h.SH') || die "Can't open config_h.SH\n";
+ while(<CONF_H>) {
+ ++$blank_lines if /^$/;
+ }
+ unlink 'config_h.SH' unless $blank_lines > 3;
+
+ open(NEWMANI,$NEWMANI);
+ $_ = <NEWMANI>;
+ /(\S+\s+)\S+/ && ($spaces = length($1)); # Spaces wanted
+ close NEWMANI;
+ $spaces = 29 if ($spaces < 12); # Default value
+ open(NEWMANI,$NEWMANI);
+ $/ = "\001"; # Swallow the whole file
+ $_ = <NEWMANI>;
+ $/ = "\n";
+ close NEWMANI;
+
+ &mani_add('Configure', 'Portability tool', $spaces) unless /^Configure\b/m;
+ &mani_add('config_h.SH', 'Produces config.h', $spaces)
+ unless /^config_h\.SH\b/m || !-f 'config_h.SH';
+ &mani_add('confmagic.h', 'Magic symbol remapping', $spaces)
+ if $opt_M && !/^confmagic\.h\b/m;
+
+ &mani_remove('config_h.SH') if /^config_h\.SH\b/m && !-f 'config_h.SH';
+ &mani_remove('confmagic.h') if /^confmagic.h\b/m && !$opt_M;
+
+ if ($opt_G) { # Want a GNU-like configure wrapper
+ &add_configure;
+ &mani_add('configure', 'GNU configure-like wrapper', $spaces)
+ if !/^configure\s/m && -f 'configure';
+ } else {
+ &mani_remove('configure') if /^configure\s/m && !-f 'configure';
+ }
+}
+
+# Add file to MANIFEST.new, with properly indented comment
+sub mani_add {
+ local($file, $comment, $spaces) = @_;
+ print "Adding $file to your $NEWMANI file...\n" unless $opt_s;
+ open(NEWMANI, ">>$NEWMANI") || warn "Can't add $file to $NEWMANI: $!\n";
+ local($blank) = ' ' x ($spaces - length($file));
+ print NEWMANI "${file}${blank}${comment}\n";
+ close NEWMANI;
+}
+
+# Remove file from MANIFEST.new
+sub mani_remove {
+ local($file) = @_;
+ print "Removing $file from $NEWMANI...\n" unless $opt_s;
+ unless (open(NEWMANI, ">$NEWMANI.x")) {
+ warn "Can't create backup $NEWMANI copy: $!\n";
+ return;
+ }
+ unless (open(OLDMANI, $NEWMANI)) {
+ warn "Can't open $NEWMANI: $!\n";
+ return;
+ }
+ local($_);
+ while (<OLDMANI>) {
+ print NEWMANI unless /^$file\b/
+ }
+ close OLDMANI;
+ close NEWMANI;
+ rename("$NEWMANI.x", $NEWMANI) ||
+ warn "Couldn't restore $NEWMANI from $NEWMANI.x\n";
+}
+
+# Copy GNU-like configure wrapper to the package root directory
+sub add_configure {
+ if (-f "$MC/configure") {
+ print "Copying GNU configure-like front end...\n" unless $opt_s;
+ system "cp $MC/configure ./configure";
+ `chmod +x configure`;
+ } else {
+ warn "Can't locate $MC/configure: $!\n";
+ }
+}
+
diff --git a/mcon/pl/depend.pl b/mcon/pl/depend.pl
new file mode 100644
index 0000000..e31eded
--- /dev/null
+++ b/mcon/pl/depend.pl
@@ -0,0 +1,141 @@
+;# $Id$
+;#
+;# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+;#
+;# You may redistribute only under the terms of the Artistic Licence,
+;# as specified in the README file that comes with the distribution.
+;# You may reuse parts of this distribution only within the terms of
+;# that same Artistic Licence; a copy of which may be found at the root
+;# of the source tree for dist 4.0.
+;#
+;# $Log: depend.pl,v $
+;# Revision 3.0.1.3 1995/09/25 09:18:56 ram
+;# patch59: new ?Y: directive to change unit layout
+;#
+;# Revision 3.0.1.2 1994/10/29 16:35:23 ram
+;# patch36: added various escapes in strings for perl5 support
+;#
+;# Revision 3.0.1.1 1993/10/16 13:54:35 ram
+;# patch12: added minimal support for ?P: lines (not ready yet)
+;#
+;# Revision 3.0 1993/08/18 12:10:21 ram
+;# Baseline for dist 3.0 netwide release.
+;#
+;# Metaconfig-dependent part of the dependency extraction.
+;#
+# Process the ?W: lines
+sub p_wanted {
+ # Syntax is ?W:<shell symbols>:<C symbols>
+ local($active) = $_[0] =~ /^([^:]*):/; # Symbols to activate
+ local($look_symbols) = $_[0] =~ /:(.*)/; # When those are used
+ local(@syms) = split(/ /, $look_symbols); # Keep original spacing info
+ $active =~ s/\s+/\n/g; # One symbol per line
+
+ # Concatenate quoted strings, so saying something like 'two words' will
+ # be introduced as one single symbol "two words".
+ local(@symbols); # Concatenated symbols to look for
+ local($concat) = ''; # Concatenation buffer
+ foreach (@syms) {
+ if (s/^\'//) {
+ $concat = $_;
+ } elsif (s/\'$//) {
+ push(@symbols, $concat . ' ' . $_);
+ $concat = '';
+ } else {
+ push(@symbols, $_) unless $concat;
+ $concat .= ' ' . $_ if $concat;
+ }
+ }
+
+ # Now record symbols in master and wanted tables
+ foreach (@symbols) {
+ $cmaster{$_} = undef; # Asks for look-up in C files
+ $cwanted{$_} = "$active" if $active; # Shell symbols to activate
+ }
+
+ delete @cmaster{keys %excluded_symbol};
+ delete @cwanted{keys %excluded_symbol};
+}
+
+# Process the ?INIT: lines
+sub p_init {
+ local($_) = @_;
+ print INIT "?$unit:", $_; # Wanted only if unit is loaded
+}
+
+# Process the ?D: lines
+sub p_default {
+ local($_) = @_;
+ s/^([A-Za-z_]+)=(.*)/\@if !$1\n%$1:$1=$2\n\@define $1\n\@end/
+ && ($hasdefault{$1}++, print INIT $_);
+}
+
+# Process the ?P: lines
+sub p_public {
+ local($_) = @_;
+ local($csym); # C symbol(s) we're trying to look at
+ local($nosym); # List of symbol(s) which mustn't be wanted
+ local($cfile); # Name of file implementing csym (no .ext)
+ ($csym, $nosym, $cfile) = /([^()]+)\s*(\(.*\))\s*:\s*(\S+)/;
+ unless ($csym eq '' || $cfile eq '') {
+ # Add dependencies for each C symbol, of the form:
+ # -pick public <sym> <file> <notdef symbols list>
+ # and the file will be added to config.c whenever sym is wanted and
+ # none of the notdef symbols is wanted.
+ foreach $sym (split(' ', $csym)) {
+ $dependencies .= "\t-pick public $sym $cfile $nosym\n";
+ }
+ }
+}
+
+# Process the ?Y: lines
+# Valid layouts are for now are: top, bottom, default.
+#
+# NOTA BENE:
+# This routine relies on the $defined variable, a global variable set
+# during the ?MAKE: processing, which lists all the defined symbols in
+# the unit (the optional leading '+' for internal symbols has been removed
+# if present).
+#
+# The routine fills up a %Layout table, indexed by symbol, yielding the
+# layout imposed to this unit. That table will then be used later on when
+# we sort wanted symbols for the Makefile.
+sub p_layout {
+ local($_) = @_;
+ local($layout) = /^\s*(\w+)/;
+ $layout =~ tr/A-Z/a-z/; # Case is not significant for layouts
+ unless (defined $Lcmp{$layout}) {
+ warn "\"$file\", line $.: unknown layout directive '$layout'.\n";
+ return;
+ }
+ foreach $sym (split(' ', $defined)) {
+ $Layout{$sym} = $Lcmp{$layout};
+ }
+}
+
+# Process the ?L: lines
+# There should not be any '-l' in front of the library name
+sub p_library {
+ &write_out("L:$_");
+}
+
+# Process the ?I: lines
+sub p_include {
+ &write_out("I:$_");
+}
+
+# Write out line in file Extern.U. The information recorded there has the
+# following prototypical format:
+# ?symbol:L:inet bsd
+# If 'symbol' is wanted, then 'inet bsd' will be added to $libswanted.
+sub write_out {
+ local($_) = @_;
+ local($target) = $defined; # By default, applies to defined symbols
+ $target = $1 if s/^(.*)://; # List is qualified "?L:target:symbols"
+ local(@target) = split(' ', $target);
+ chop;
+ foreach $key (@target) {
+ print EXTERN "?$key:$_\n"; # EXTERN file defined in xref.pl
+ }
+}
+
diff --git a/mcon/pl/eval.pl b/mcon/pl/eval.pl
new file mode 100644
index 0000000..c4c1d76
--- /dev/null
+++ b/mcon/pl/eval.pl
@@ -0,0 +1,300 @@
+;# $Id$
+;#
+;# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+;#
+;# You may redistribute only under the terms of the Artistic Licence,
+;# as specified in the README file that comes with the distribution.
+;# You may reuse parts of this distribution only within the terms of
+;# that same Artistic Licence; a copy of which may be found at the root
+;# of the source tree for dist 4.0.
+;#
+;# $Log: eval.pl,v $
+;# Revision 3.0.1.1 1995/01/30 14:48:37 ram
+;# patch49: removed old "do name()" routine call constructs
+;#
+;# Revision 3.0 1993/08/18 12:10:22 ram
+;# Baseline for dist 3.0 netwide release.
+;#
+;#
+;# The built-in interpreter
+;#
+package interpreter;
+
+# States used by our interpeter -- in sync with @Keep
+sub main'init_keep {
+ # Status in which we keep lines -- $Keep[$status]
+ @Keep = (0, 1, 1, 0, 1);
+
+ # Available status ($status)
+ $SKIP = 0;
+ $IF = 1;
+ $ELSE = 2;
+ $NOT = 3;
+ $OUT = 4;
+}
+
+# Priorities for operators -- magic numbers :-)
+sub main'init_priority {
+ $Priority{'&&'} = 4;
+ $Priority{'||'} = 3;
+}
+
+# Initializes the state stack of the interpreter
+sub main'init_interp {
+ @state = ();
+ push(@state, $OUT);
+}
+
+# Print error messages -- asssumes $unit and $. correctly set.
+sub error {
+ warn "\"$main'file\", line $.: @_.\n";
+}
+
+# If some states are still in the stack, warn the user
+sub main'check_state {
+ &error("one statement pending") if $#state == 1;
+ &error("$#state statements pending") if $#state > 1;
+}
+
+# Add a value on the stack, modified by all the monadic operators.
+# We use the locals @val and @mono from eval_expr.
+sub push_val {
+ local($val) = shift(@_);
+ while ($#mono >= 0) {
+ # Cheat... the only monadic operator is '!'.
+ pop(@mono);
+ $val = !$val;
+ }
+ push(@val, $val);
+}
+
+# Execute a stacked operation, leave result in stack.
+# We use the locals @val and @op from eval_expr.
+# If the value stack holds only one operand, do nothing.
+sub execute {
+ return unless $#val > 0;
+ local($op) = pop(@op);
+ local($val1) = pop(@val);
+ local($val2) = pop(@val);
+ push(@val, eval("$val1 $op $val2") ? 1: 0);
+}
+
+# Given an operator, either we add it in the stack @op, because its
+# priority is lower than the one on top of the stack, or we first execute
+# the stacked operations until we reach the end of stack or an operand
+# whose priority is lower than ours.
+# We use the locals @val and @op from eval_expr.
+sub update_stack {
+ local($op) = shift(@_); # Operator
+ if (!$Priority{$op}) {
+ &error("illegal operator $op");
+ return;
+ } else {
+ if ($#val < 0) {
+ &error("missing first operand for '$op' (diadic operator)");
+ return;
+ }
+ # Because of the special behaviour of do-SUBR with the while modifier,
+ # I'm using a while-BLOCK construct. I consider this to be a bug of perl
+ # 4.0 PL19, although it is clearly documented in the man page.
+ while (
+ $Priority{$op[$#op]} > $Priority{$op} # Higher priority op
+ && $#val > 0 # At least 2 values
+ ) {
+ &execute; # Execute an higher priority stacked operation
+ }
+ push(@op, $op); # Everything at higher priority has been executed
+ }
+}
+
+# This is the heart of our little interpreter. Here, we evaluate
+# a logical expression and return its value.
+sub eval_expr {
+ local(*expr) = shift(@_); # Expression to parse
+ local(@val) = (); # Stack of values
+ local(@op) = (); # Stack of diadic operators
+ local(@mono) =(); # Stack of monadic operators
+ local($tmp);
+ $_ = $expr;
+ while (1) {
+ s/^\s+//; # Remove spaces between words
+ # The '(' construct
+ if (s/^\(//) {
+ &push_val(&eval_expr(*_));
+ # A final '\' indicates an end of line
+ &error("missing final parenthesis") if !s/^\\//;
+ }
+ # Found a ')' or end of line
+ elsif (/^\)/ || /^$/) {
+ s/^\)/\\/; # Signals: left parenthesis found
+ $expr = $_; # Remove interpreted stuff
+ &execute() while $#val > 0; # Executed stacked operations
+ while ($#op >= 0) {
+ $_ = pop(@op);
+ &error("missing second operand for '$_' (diadic operator)");
+ }
+ return $val[0];
+ }
+ # A perl statement '{{'
+ elsif (s/^\{\{//) {
+ if (s/^(.*)\}\}//) {
+ &push_val((system
+ ('perl','-e', "if ($1) {exit 0;} else {exit 1;}"
+ ))? 0 : 1);
+ } else {
+ &error("incomplete perl statement");
+ }
+ }
+ # A shell statement '{'
+ elsif (s/^\{//) {
+ if (s/^(.*)\}//) {
+ &push_val((system
+ ("if $1 >/dev/null 2>&1; then exit 0; else exit 1; fi"
+ ))? 0 : 1);
+ } else {
+ &error("incomplete shell statement");
+ }
+ }
+ # Operator '||' and '&&'
+ elsif (s/^(\|\||&&)//) {
+ $tmp = $1; # Save for perl5 (Dataloaded update_stack)
+ &update_stack($tmp);
+ }
+ # Unary operator '!'
+ elsif (s/^!//) {
+ push(@mono,'!');
+ }
+ # Everything else is a test for a defined value
+ elsif (s/^([\?%]?\w+)//) {
+ $tmp = $1;
+ # Test for wanted
+ if ($tmp =~ s/^\?//) {
+ &push_val(($main'symwanted{$tmp})? 1 : 0);
+ }
+ # Test for conditionally wanted
+ elsif ($tmp =~ s/^%//) {
+ &push_val(($main'condwanted{$tmp})? 1 : 0);
+ }
+ # Default: test for definition (see op @define)
+ else {
+ &push_val((
+ $main'symwanted{$tmp} ||
+ $main'cmaster{$tmp} ||
+ $main'userdef{$tmp}) ? 1 : 0);
+ }
+ }
+ # An error occured -- we did not recognize the expression
+ else {
+ s/^([^\s\(\)\{\|&!]+)//; # Skip until next meaningful char
+ }
+ }
+}
+
+# Given an expression in a '@' command, returns a boolean which is
+# the result of the evaluation. Evaluate is collecting all the lines
+# in the expression into a single string, and then calls eval_expr to
+# really evaluate it.
+sub evaluate {
+ local($val); # Value returned
+ local($expr) = ""; # Expression to be parsed
+ chop;
+ while (s/\\$//) { # While end of line escaped
+ $expr .= $_;
+ $_ = <UNIT>; # Fetch next line
+ unless ($_) {
+ &error("EOF in expression");
+ last;
+ }
+ chop;
+ }
+ $expr .= $_;
+ while ($expr ne '') {
+ $val = &eval_expr(*expr); # Expression will be modified
+ # We return from eval_expr either when a closing parenthisis
+ # is found, or when the expression has been fully analysed.
+ &error("extra closing parenthesis ignored") if $expr ne '';
+ }
+ $val;
+}
+
+# Given a line, we search for commands (lines starting with '@').
+# If there is no command in the line, then we return the boolean state.
+# Otherwise, the command is analysed and a new state is computed.
+# The returned value of interpret is 1 if the line is to be printed.
+sub main'interpret {
+ local($value);
+ local($status) = $state[$#state]; # Current status
+ if (s|^\s*@\s*(\w+)\s*(.*)|$2|) {
+ local($cmd) = $1;
+ $cmd =~ y/A-Z/a-z/; # Canonicalize to lower case
+ # The 'define' command
+ if ($cmd eq 'define') {
+ chop;
+ $userdef{$_}++ if $Keep[$status];
+ return 0;
+ }
+ # The 'if' command
+ elsif ($cmd eq 'if') {
+ # We always evaluate, in order to find possible errors
+ $value = &evaluate($_);
+ if (!$Keep[$status]) {
+ # We have to skip until next 'end'
+ push(@state, $SKIP); # Record structure
+ return 0;
+ }
+ if ($value) { # True
+ push(@state, $IF);
+ return 0;
+ } else { # False
+ push(@state, $NOT);
+ return 0;
+ }
+ }
+ # The 'else' command
+ elsif ($cmd eq 'else') {
+ &error("expression after 'else' ignored") if /\S/;
+ $state[$#state] = $SKIP if $state[$#state] == $IF;
+ return 0 if $state[$#state] == $SKIP;
+ if ($state[$#state] == $OUT) {
+ &error("unexpected 'else'");
+ return 0;
+ }
+ $state[$#state] = $ELSE;
+ return 0;
+ }
+ # The 'elsif' command
+ elsif ($cmd eq 'elsif') {
+ # We always evaluate, in order to find possible errors
+ $value = &evaluate($_);
+ $state[$#state] = $SKIP if $state[$#state] == $IF;
+ return 0 if $state[$#state] == $SKIP;
+ if ($state[$#state] == $OUT) {
+ &error("unexpected 'elsif'");
+ return 0;
+ }
+ if ($value) { # True
+ $state[$#state] = $IF;
+ return 0;
+ } else { # False
+ $state[$#state] = $NOT;
+ return 0;
+ }
+ }
+ # The 'end' command
+ elsif ($cmd eq 'end') {
+ &error("expression after 'end' ignored") if /\S/;
+ pop(@state);
+ &error("unexpected 'end'") if $#state < 0;
+ return 0;
+ }
+ # Unknown command
+ else {
+ &error("unknown command '$cmd'");
+ return 0;
+ }
+ }
+ $Keep[$status];
+}
+
+package main;
+
diff --git a/mcon/pl/extract.pl b/mcon/pl/extract.pl
new file mode 100644
index 0000000..385b751
--- /dev/null
+++ b/mcon/pl/extract.pl
@@ -0,0 +1,109 @@
+;# $Id$
+;#
+;# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+;#
+;# You may redistribute only under the terms of the Artistic Licence,
+;# as specified in the README file that comes with the distribution.
+;# You may reuse parts of this distribution only within the terms of
+;# that same Artistic Licence; a copy of which may be found at the root
+;# of the source tree for dist 4.0.
+;#
+;# $Log: extract.pl,v $
+;# Revision 3.0.1.1 1994/05/06 15:21:43 ram
+;# patch23: now saves the last unit line value for metalint
+;#
+;# Revision 3.0 1993/08/18 12:10:22 ram
+;# Baseline for dist 3.0 netwide release.
+;#
+;#
+;# This is the heart of the dependency extractor. Each control line is
+;# processed. The dependencies are stored in $dependencies.
+;#
+# Extract dependencies from units held in @ARGV
+sub extract_dependencies {
+ local($proc); # Procedure used to handle a ctrl line
+ local($file); # Current file scanned
+ local($dir, $unit); # Directory and unit's name
+ local($old_version) = 0; # True when old-version unit detected
+ local($mc) = "$MC/U"; # Public metaconfig directory
+ local($line); # Last processed line for metalint
+
+ printf "Extracting dependency lists from %d units...\n", $#ARGV+1
+ unless $opt_s;
+
+ chdir $WD; # Back to working directory
+ &init_extraction; # Initialize extraction files
+ $dependencies = ' ' x (50 * @ARGV); # Pre-extend
+ $dependencies = '';
+
+ # We do not want to use the <> construct here, because we need the
+ # name of the opened files (to get the unit's name) and we want to
+ # reset the line number for each files, and do some pre-processing.
+
+ file: while ($file = shift(@ARGV)) {
+ close FILE; # Reset line number
+ $old_version = 0; # True if unit is an old version
+ if (open(FILE, $file)) {
+ ($dir, $unit) = ('', $file)
+ unless ($dir, $unit) = ($file =~ m|(.*)/(.*)|);
+ $unit =~ s|\.U$||; # Remove extension
+ } else {
+ warn("Can't open $file.\n");
+ }
+ # If unit is in the standard public directory, keep only the unit name
+ $file = "$unit.U" if $dir eq $mc;
+ print "$dir/$unit.U:\n" if $opt_d;
+ line: while (<FILE>) {
+ $line = $_; # Save last processed unit line
+ if (s/^\?([\w\-]+)://) { # We may have found a control line
+ $proc = $Depend{$1}; # Look for a procedure to handle it
+ unless ($proc) { # Unknown control line
+ $proc = $1; # p_unknown expects symbol in '$proc'
+ eval '&p_unknown'; # Signal error (metalint only)
+ next line; # And go on next line
+ }
+ # Long lines may be escaped with a final backslash
+ $_ .= &complete_line(FILE) if s/\\\s*$//;
+ # Run macros substitutions
+ s/%</$unit/g; # %< expands into the unit's name
+ if (s/%\*/$unit/) {
+ # %* expanded into the entire set of defined symbols
+ # in the old version. Now it is only the unit's name.
+ ++$old_version;
+ }
+ eval { &$proc($_) }; # Process the line
+ } else {
+ next file unless $body; # No procedure to handle body
+ do {
+ $line = $_; # Save last processed unit line
+ eval { &$body($_) } ; # From now on, it's the unit body
+ } while (defined ($_ = <FILE>));
+ next file;
+ }
+ }
+ } continue {
+ warn(" Warning: $file is a pre-3.0 version.\n") if $old_version;
+ &$ending($line) if $ending; # Post-processing for metalint
+ }
+
+ &end_extraction; # End the extraction process
+}
+
+# The first line was escaped with a final \ character. Every following line
+# is to be appended to it (until we found a real \n not escaped). Note that
+# the leading spaces of the continuation line are removed, so any space should
+# be added before the former \ if needed.
+sub complete_line {
+ local($file) = @_; # File where lines come from
+ local($_);
+ local($read) = ''; # Concatenation of all the continuation lines found
+ while (<$file>) {
+ s/^\s+//; # Remove leading spaces
+ if (s/\\\s*$//) { # Still followed by a continuation line
+ $read .= $_;
+ } else { # We've reached the end of the continuation
+ return $read . $_;
+ }
+ }
+}
+
diff --git a/mcon/pl/files.pl b/mcon/pl/files.pl
new file mode 100644
index 0000000..a7d26a6
--- /dev/null
+++ b/mcon/pl/files.pl
@@ -0,0 +1,134 @@
+;# $Id$
+;#
+;# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+;#
+;# You may redistribute only under the terms of the Artistic Licence,
+;# as specified in the README file that comes with the distribution.
+;# You may reuse parts of this distribution only within the terms of
+;# that same Artistic Licence; a copy of which may be found at the root
+;# of the source tree for dist 4.0.
+;#
+;# $Log: files.pl,v $
+;# Revision 3.0.1.2 1994/10/29 16:35:48 ram
+;# patch36: added user-defined file extension support for lookups
+;#
+;# Revision 3.0.1.1 1993/10/16 13:54:55 ram
+;# patch12: now skip confmagic.h when -M option is used
+;#
+;# Revision 3.0 1993/08/18 12:10:23 ram
+;# Baseline for dist 3.0 netwide release.
+;#
+;#
+;# These two arrays record the file names of the files which may (or may not)
+;# contain shell or C symbols known by metaconfig.
+;# @SHlist records the .SH files
+;# @clist records the C-like files (i.e. .[chyl])
+;#
+;# The extensions are actually computed dynamically from the definitions held
+;# in the $cext and $shext variables from .package so that people can add new
+;# extensions to their packages. For instance, perl5 adds .xs files holding
+;# some C symbols.
+;#
+;# The read_exclusions() routine honours the .package $exclusions_file
+;# variable if its argument is undefined.
+;#
+# Extract filenames from manifest
+sub extract_filenames {
+ &build_filext; # Construct &is_cfile and &is_shfile
+ print "Extracting filenames (C and SH files) from $NEWMANI...\n"
+ unless $opt_s;
+ open(NEWMANI,$NEWMANI) || die "Can't open $NEWMANI.\n";
+ local($file);
+ while (<NEWMANI>) {
+ ($file) = split(' ');
+ next if $file eq 'config_h.SH'; # skip config_h.SH
+ next if $file eq 'Configure'; # also skip Configure
+ next if $file eq 'confmagic.h' && $opt_M;
+ push(@SHlist, $file) if &is_shfile($file);
+ push(@clist, $file) if &is_cfile($file);
+ }
+}
+
+# Construct two file identifiers based on the file suffix: one for C files,
+# and one for SH files (using the $cext and $shext variables) defined in
+# the .package file.
+# The &is_cfile and &is_shfile routine may then be called to known whether
+# a given file is a candidate for holding C or SH symbols.
+sub build_filext {
+ &build_extfun('is_cfile', $cext, '.c .h .y .l');
+ &build_extfun('is_shfile', $shext, '.SH');
+}
+
+# Build routine $name to identify extensions listed in $exts, ensuring
+# that $minimum is at least matched (both to be backward compatible with
+# older .package and because it is really the minimum requirred).
+sub build_extfun {
+ local($name, $exts, $minimum) = @_;
+ local(@single); # Single letter dot extensions (may be grouped)
+ local(@others); # Other extensions
+ local(%seen); # Avoid duplicate extensions
+ foreach $ext (split(' ', "$exts $minimum")) {
+ next if $seen{$ext}++;
+ if ($ext =~ s/^\.(\w)$/$1/) {
+ push(@single, $ext);
+ } else {
+ # Convert into perl's regexp
+ $ext =~ s/\./\\./g; # Escape .
+ $ext =~ s/\?/./g; # ? turns into .
+ $ext =~ s/\*/.*/g; # * turns into .*
+ push(@others, $ext);
+ }
+ }
+ local($fn) = &q(<<EOF); # Function being built
+:sub $name {
+: local(\$_) = \@_;
+EOF
+ local($single); # Single regexp: .c .h grouped into .[ch]
+ $single = '\.[' . join('', @single) . ']' if @single;
+ $fn .= &q(<<EOL) if @single;
+: return 1 if /$single\$/;
+EOL
+ foreach $ext (@others) {
+ $fn .= &q(<<EOL);
+: return 1 if /$ext\$/;
+EOL
+ }
+ $fn .= &q(<<EOF);
+: 0; # None of the extensions may be applied to file name
+:}
+EOF
+ print $fn if $opt_d;
+ eval $fn;
+ chop($@) && die "Can't compile '$name':\n$fn\n$@.\n";
+}
+
+# Remove ':' quotations in front of the lines
+sub q {
+ local($_) = @_;
+ s/^://gm;
+ $_;
+}
+
+sub read_exclusions {
+ my ($filename) = @_;
+ if (!defined $filename) {
+ $filename = $exclusions_file; # default to name from .package
+ return if !defined $filename || $filename eq '';
+ }
+ print "Reading exclusions from $filename...\n" unless $opt_s;
+ open(EXCLUSIONS, "< $filename\0") || die "Can't read $filename: $!\n";
+ local $_;
+ while (<EXCLUSIONS>) {
+ if (/^\s*#|^\s*$/) {
+ # comment or blank line, ignore
+ }
+ elsif (/^\s*(\w+)\s*$/) {
+ $excluded_symbol{$1} = 1;
+ }
+ else {
+ die "$filename:$.: unrecognised line\n";
+ }
+ }
+ close(EXCLUSIONS) || die "Can't close $filename: $!\n";
+}
+
diff --git a/mcon/pl/gensym.pl b/mcon/pl/gensym.pl
new file mode 100644
index 0000000..4f65065
--- /dev/null
+++ b/mcon/pl/gensym.pl
@@ -0,0 +1,22 @@
+;# $Id$
+;#
+;# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+;#
+;# You may redistribute only under the terms of the Artistic Licence,
+;# as specified in the README file that comes with the distribution.
+;# You may reuse parts of this distribution only within the terms of
+;# that same Artistic Licence; a copy of which may be found at the root
+;# of the source tree for dist 4.0.
+;#
+;# $Log: gensym.pl,v $
+;# Revision 3.0 1993/08/18 12:10:24 ram
+;# Baseline for dist 3.0 netwide release.
+;#
+;#
+# Create a new symbol name each time it is invoked. That name is suitable for
+# usage as a perl variable name.
+sub gensym {
+ $Gensym = 'AAAAA' unless $Gensym;
+ $Gensym++;
+}
+
diff --git a/mcon/pl/init.pl b/mcon/pl/init.pl
new file mode 100644
index 0000000..c60d64c
--- /dev/null
+++ b/mcon/pl/init.pl
@@ -0,0 +1,55 @@
+;# $Id$
+;#
+;# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+;#
+;# You may redistribute only under the terms of the Artistic Licence,
+;# as specified in the README file that comes with the distribution.
+;# You may reuse parts of this distribution only within the terms of
+;# that same Artistic Licence; a copy of which may be found at the root
+;# of the source tree for dist 4.0.
+;#
+;# $Log: init.pl,v $
+;# Revision 3.0.1.2 1995/09/25 09:19:06 ram
+;# patch59: new ?Y: directive to change unit layout
+;#
+;# Revision 3.0.1.1 1993/10/16 13:55:06 ram
+;# patch12: now knows about ?M: lines
+;#
+;# Revision 3.0 1993/08/18 12:10:24 ram
+;# Baseline for dist 3.0 netwide release.
+;#
+;#
+# The %Depend array records the functions we use to process the configuration
+# lines in the unit, with a special meaning. It is important that all the
+# known control symbols be listed below, so that metalint does not complain.
+# The %Lcmp array contains valid layouts and their comparaison value.
+sub init_depend {
+ %Depend = (
+ 'MAKE', 'p_make', # The ?MAKE: line records dependencies
+ 'INIT', 'p_init', # Initializations printed verbatim
+ 'LINT', 'p_lint', # Hints for metalint
+ 'RCS', 'p_ignore', # RCS comments are ignored
+ 'C', 'p_c', # C symbols
+ 'D', 'p_default', # Default value for conditional symbols
+ 'E', 'p_example', # Example of usage
+ 'F', 'p_file', # Produced files
+ 'H', 'p_config', # Process the config.h lines
+ 'I', 'p_include', # Added includes
+ 'L', 'p_library', # Added libraries
+ 'M', 'p_magic', # Process the confmagic.h lines
+ 'O', 'p_obsolete', # Unit obsolescence
+ 'P', 'p_public', # Location of PD implementation file
+ 'S', 'p_shell', # Shell variables
+ 'T', 'p_temp', # Shell temporaries used
+ 'V', 'p_visible', # Visible symbols like 'rp', 'dflt'
+ 'W', 'p_wanted', # Wanted value for interpreter
+ 'X', 'p_ignore', # User comment is ignored
+ 'Y', 'p_layout', # User-defined layout preference
+ );
+ %Lcmp = (
+ 'top', -1,
+ 'default', 0,
+ 'bottom', 1,
+ );
+}
+
diff --git a/mcon/pl/lint.pl b/mcon/pl/lint.pl
new file mode 100644
index 0000000..0120c51
--- /dev/null
+++ b/mcon/pl/lint.pl
@@ -0,0 +1,1473 @@
+;# $Id$
+;#
+;# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+;#
+;# You may redistribute only under the terms of the Artistic Licence,
+;# as specified in the README file that comes with the distribution.
+;# You may reuse parts of this distribution only within the terms of
+;# that same Artistic Licence; a copy of which may be found at the root
+;# of the source tree for dist 4.0.
+;#
+;# $Log: lint.pl,v $
+;# Revision 3.0.1.10 1997/02/28 16:31:53 ram
+;# patch61: added support for ?F: lines to monitor file usage
+;# patch61: now honours "create" and "empty" lint directives
+;#
+;# Revision 3.0.1.9 1995/09/25 09:19:15 ram
+;# patch59: new ?Y: directive to change unit layout
+;#
+;# Revision 3.0.1.8 1995/07/25 14:19:47 ram
+;# patch56: will now check : comments line for potential danger
+;#
+;# Revision 3.0.1.7 1994/10/29 16:36:14 ram
+;# patch36: now extensively checks created files thanks to new ?F: lines
+;#
+;# Revision 3.0.1.6 1994/05/13 15:29:09 ram
+;# patch27: now understands macro definitions in ?H: lines
+;#
+;# Revision 3.0.1.5 1994/05/06 15:27:48 ram
+;# patch23: now warns for units ending with non-blank line
+;# patch23: warn for units where last line is not new-line terminated
+;#
+;# Revision 3.0.1.4 1994/01/24 14:28:40 ram
+;# patch16: now knows about "internal use only" variables on ?MAKE: lines
+;# patch16: now suppress "read-only var set" message when change hint
+;#
+;# Revision 3.0.1.3 1993/11/10 17:39:39 ram
+;# patch14: now spots stale ?M: dependencies
+;#
+;# Revision 3.0.1.2 1993/10/16 13:55:26 ram
+;# patch12: now checks ?M: lines also
+;#
+;# Revision 3.0.1.1 1993/08/25 14:03:40 ram
+;# patch6: now correctly signals conditional dependencies with no default
+;#
+;# Revision 3.0 1993/08/18 12:10:25 ram
+;# Baseline for dist 3.0 netwide release.
+;#
+;# The list of all available units is held in @ARGV. We shall parse them and
+;# extract the dependencies. A lot of global data structures are filled in
+;# during this phase.
+;#
+# Initialize the extraction process by setting some variables.
+# We return a string to be eval'ed to do more customized initializations.
+sub init_extraction {
+ $c_symbol = ''; # Current symbol seen in ?C: lines
+ $s_symbol = ''; # Current symbol seen in ?S: lines
+ $m_symbol = ''; # Current symbol seen in ?M: lines
+ $h_section = 0; # 0 = no ?H: yet, 1 = in ?H:, 2 = ?H:. seen
+ $h_section_warned = 0; # Whether we warned about terminated ?H: section
+ $heredoc = ''; # Last "here" document symbol seen
+ $heredoc_nosubst = 0; # True for <<'EOM' here docs
+ $heredoc_line = 0; # Line were last "here" document started
+ $last_interpreted = 0; # True when last line was an '@' one
+ $past_first_line = 0; # True when first body line was already seen
+ $wiped_unit = 0; # True if unit will be "wiped" for macro subst
+ %csym = (); # C symbols described
+ %ssym = (); # Shell symbols described
+ %hcsym = (); # C symbols used by ?H: lines
+ %hssym = (); # Shell symbols used by ?H: lines
+ %msym = (); # Magic symbols defined by ?M: lines
+ %mdep = (); # C symbol dependencies introduced by ?M:
+ %symset = (); # Records all the shell symbol set
+ %symused = (); # Records all the shell symbol used
+ %tempseen = (); # Temporary shell variable seen
+ %fileseen = (); # Produced files seen
+ %fileused = (); # Files used, by unit (private UU files)
+ %filemisused = (); # Files not used as ./file or ...UU/file
+ %filetmp = (); # Local temporary files in ?F: directives
+ %filesetin = (); # Lists units defining a temporary file
+ %filecreated = (); # Records files created in this unit
+ %prodfile = (); # Unit where a given file is said to be created
+ %defseen = (); # Symbol defintions claimed
+ %lintset = (); # Symbols declared set by a ?LINT: line
+ %lintsdesc = (); # Symbols declared described by a ?LINT: line
+ %lintcdesc = (); # Symbols declared described by a ?LINT: line
+ %lintseen = (); # Symbols declared known by a ?LINT: line
+ %lintchange = (); # Symbols declared changed by a ?LINT: line
+ %lintuse = (); # Symbols declared used by unit
+ %lintextern = (); # Symbols known to be externally defined
+ %lintcreated = (); # Files declared as created by a ?LINT: line
+ %linthere = (); # Unclosed here document from ?LINT: line
+ %lintnothere = (); # False here document names, from ?LINT: line
+ %lintfused = (); # Records files markedas used in ?LINT: line
+ %lintchange_used = (); # Tracks symbols for which %lintchange was used
+ %lintuse_used = (); # Tracks symbols for which %lintuse was used
+ %lintseen_used = (); # Tracks symbols for which %lintseen was used
+ %lintcdesc_used = (); # Tracks symbols for which %lintcdesc was used
+ %lintsdesc_used = (); # Tracks symbols for which %lintsdesc was used
+ %lintset_used = (); # Tracks symbols for which %lintset was used
+ %lintnocomment = (); # Signals it's OK for unit to lack a : comment
+ %condsym = (); # Records all the conditional symbols
+ %condseen = (); # Records conditional dependencies
+ %depseen = (); # Records full dependencies
+ %shvisible = (); # Records units making a symbol visible
+ %shspecial = (); # Records special units listed as wanted
+ %shdepend = (); # Records units listed in one's dependency list
+ %shmaster = (); # List of units defining a shell symbol
+ %cmaster = (); # List of units defining a C symbol
+ %symdep = (); # Records units where symbol is a dependency
+ @make = (); # Records make dependency lines
+ $body = 'p_body'; # Procedure to handle body
+ $ending = 'p_end'; # Called at the end of each unit
+ @wiping = # The keywords we recognize for "wiped" units
+ qw(
+ PACKAGENAME
+ MAINTLOC
+ VERSION
+ PATCHLEVEL
+ REVISION
+ DATE
+ BASEREV
+ );
+}
+
+# End the extraction process
+sub end_extraction {
+}
+
+# Process the command line of ?MAKE: lines
+sub p_make_command {
+ local ($_) = @_;
+ my $where = "\"$file\", line $. (?MAKE:)";
+ unless (s/^\t+//) {
+ warn "$where: command line must start with a leading TAB character.\n";
+ s/^\s+//; # Remove spaces and continue
+ }
+ return unless s/^-?pick\b//;
+ # Validate the special "pick" make command, processed internally
+ # by metaconfig.
+ my %valid = map { $_ => 1 } qw(
+ add add.Config_sh add.Null
+ c_h_weed cm_h_weed close.Config_sh
+ prepend weed wipe
+
+ );
+ my $cmd;
+ $cmd = $1 if s/^\s+(\S+)//;
+ unless (defined $cmd) {
+ warn "$where: pick needs a command argument.\n";
+ return;
+ }
+ $wiped_unit++ if $cmd eq 'wipe';
+ warn "$where: unknown pick command '$cmd'.\n" unless $valid{$cmd};
+ s/^\s+//;
+ unless (s/^\$\@//) {
+ warn "$where: third pick argument must be \$\@\n";
+ return;
+ }
+ s/^\s+//;
+ my $target;
+ $target = $1 if s/^(\S+)//;
+ unless (defined $target) {
+ warn "$where: fourth pick argument is missing\n";
+ return;
+ }
+ return if $target =~ m|^\./|;
+ warn "$where: weird fourth argument '$target' to pick.\n"
+ unless $target =~ /^\w+$/;
+ warn "$where: fourth pick argument should probably be the %< macro.\n"
+ unless $target eq $unit;
+}
+
+# Process the ?MAKE: line
+sub p_make {
+ local($_) = @_;
+ local(@ary); # Locally defined symbols
+ local(@dep); # Dependencies
+ local($where) = "\"$file\", line $. (?MAKE:)";
+ unless (/^[\w+ ]*:/) {
+ &p_make_command;
+ return; # We only want the main dependency rule
+ }
+ warn "$where: ignoring duplicate dependency listing line.\n"
+ if $makeseen{$unit}++;
+ return if $makeseen{$unit} > 1;
+
+ # Reset those once for every unit
+ # (assuming there is only one depend line)
+ $h_section = 0; # 0 = no ?H: yet, 1 = in ?H:, 2 = ?H:. seen
+ $h_section_warned = 0; # Whether we warned about terminated ?H: section
+ $wiped_unit = 0; # Whether macros like "<MAINTLOC> will be wiped
+ undef %condseen;
+ undef %depseen;
+ undef %defseen;
+ undef %tempseen;
+ undef %symset;
+ undef %symused;
+ undef %csym;
+ undef %ssym;
+ undef %hcsym;
+ undef %hssym;
+ undef %lintuse;
+ undef %lintuse_used;
+ undef %lintseen;
+ undef %lintchange;
+ undef %lintchange_used;
+ undef %lintextern;
+ undef %lintcreated;
+ undef %fileseen;
+ undef %lintseen_used;
+ undef %filetmp;
+ undef %filecreated;
+ undef %linthere;
+ undef %lintnothere;
+ undef %lintfused;
+ undef %lintsdesc;
+ undef %lintsdesc_used;
+ undef %lintcdesc;
+ undef %lintcdesc_used;
+ undef %lintset;
+ undef %lintset_used;
+
+ s|^\s*||; # Remove leading spaces
+ chop;
+ s/:(.*)//;
+ @dep = split(' ', $1); # Dependencies
+ @ary = split(' '); # Locally defined symbols
+ local($nowarn); # True when +Special is seen
+ foreach $sym (@ary) {
+ # Ignore "internal use only" symbols as far as metalint goes.
+ # Actually, we record the presence of a '+' in front of a special
+ # unit name and use that as a hint to suppress the presence of that
+ # special unit in the defined symbol section.
+ $nowarn = ($sym =~ s/^\+//);
+
+ # We record for each shell symbol the list of units which claim to make
+ # it, so as to report duplicates.
+ if ($sym =~ /^[_a-z]/ || $Except{$sym}) {
+ $shmaster{"\$$sym"} .= "$unit ";
+ ++$defseen{$sym};
+ } else {
+ warn "$where: special unit '$sym' should not be listed as made.\n"
+ unless $sym eq $unit || $nowarn;
+ }
+ }
+ # Record dependencies for later perusal
+ push(@make, join(' ', @ary) . ':' . join(' ', @dep));
+ foreach $sym (@dep) {
+ if ($sym =~ /^\+[_A-Za-z]/) {
+ $sym =~ s|^\+||;
+ ++$condseen{$sym}; # Conditional symbol wanted
+ ++$condsym{$sym}; # %condsym has a greater lifetime
+ } else {
+ ++$depseen{$sym}; # Full dependency
+ }
+
+ # Each 'wanted' special unit (i.e. one starting with a capital letter)
+ # is remembered, so as to prevent exported symbols from being reported
+ # as "undefined". For instance, Myread exports $dflt, $ans and $rp.
+ $shspecial{$unit} .= "$sym " if substr($sym, 0, 1) =~ /^[A-Z]/;
+
+ # Record all known dependencies (special or not) for this unit
+ $shdepend{$unit} .= "$sym ";
+
+ # Remember where wanted symbol is defined, so that we can report
+ # stale dependencies later on (i.e. dependencies which refer to non-
+ # existent symbols).
+ $symdep{$sym} .= "$unit "; # This symbol is wanted here
+ }
+ # Make sure we do not want a symbol twice, nor do we want it once as a full
+ # dependency and once as a conditional dependency.
+ foreach $sym (@dep) {
+ if ($sym =~ /^\+[_A-Za-z]/) {
+ $sym =~ s|^\+||;
+ warn "$where: '+$sym' is listed $condseen{$sym} times.\n"
+ if $condseen{$sym} > 1;
+ $condseen{$sym} = 1 if $condseen{$sym}; # Avoid multiple messages
+ } else {
+ warn "$where: '$sym' is listed $depseen{$sym} times.\n"
+ if $depseen{$sym} > 1;
+ $depseen{$sym} = 1 if $depseen{$sym}; # Avoid multiple messages
+ }
+ warn "$where: '$sym' listed as both conditional and full dependency.\n"
+ if $condseen{$sym} && $depseen{$sym};
+ }
+ # Make sure every unit "inherits" from the symbols exported by 'Init'.
+ $shspecial{$unit} .= 'Init ' unless $shspecial{$unit} =~ /Init\b/;
+}
+
+# Process the ?O: line
+sub p_obsolete {
+ local($_) = @_;
+ chop;
+ $Obsolete{"$unit.U"} = $_; # Message to print if unit is used
+}
+
+# Process the ?S: lines
+sub p_shell {
+ local($_) = @_;
+ local($where) = "\"$file\", line $. (?S:)";
+ warn "$where: directive should come after ?MAKE declarations.\n"
+ unless $makeseen{$unit};
+ if (/^(\w+)\s*(\(.*\))*\s*:/) {
+ &check_last_declaration;
+ $s_symbol = $1;
+ print " ?S: $s_symbol\n" if $opt_d;
+ # Make sure we do not define symbol twice and that the symbol is indeed
+ # listed in the ?MAKE: line.
+ warn "$where: duplicate description for variable '\$$s_symbol'.\n"
+ if $ssym{$s_symbol}++;
+ unless ($defseen{$s_symbol}) {
+ warn "$where: variable '\$$s_symbol' is not listed " .
+ "on ?MAKE: line.\n" unless $lintseen{$s_symbol};
+ $lintseen_used{$s_symbol}++ if $lintseen{$s_symbol};
+ }
+ # Deal with obsolete symbol list (enclosed between parenthesis)
+ &record_obsolete("\$$_") if /\(/;
+ } else {
+ unless ($s_symbol) {
+ warn "$where: syntax error in ?S: construct.\n";
+ return;
+ }
+ }
+
+ m|^\.\s*$| && ($s_symbol = ''); # End of comment
+}
+
+# Process the ?C: lines
+sub p_c {
+ local($_) = @_;
+ local($where) = "\"$file\", line $. (?C:)";
+ warn "$where: directive should come after ?MAKE declarations.\n"
+ unless $makeseen{$unit};
+ # The previous ?H: section, if present, must have been closed
+ if ($h_section && $h_section != 2) {
+ warn "$where: unclosed ?H: section.\n";
+ }
+ $h_section = 0;
+ if (s/^(\w+)\s*~\s*(\S+)\s*(.*):/$1 $3:/) {
+ &check_last_declaration;
+ $c_symbol = $2; # Alias for definition in config.h
+ # Record symbol definition for further duplicate spotting
+ $cmaster{$1} .= "$unit " unless $csym{$1};
+ print " ?C: $1 ~ $c_symbol\n" if $opt_d;
+ # Make sure we do not define symbol twice
+ warn "$where: duplicate description for symbol '$1'.\n"
+ if $csym{$1}++;
+ # Deal with obsolete symbol list (enclosed between parenthesis)
+ &record_obsolete("$_") if /\(/;
+ } elsif (/^(\w+)\s*(\(.*\))*\s*:/) {
+ &check_last_declaration;
+ $c_symbol = $1;
+ # Record symbol definition for further duplicate spotting
+ $cmaster{$c_symbol} .= "$unit " unless $csym{$c_symbol};
+ print " ?C: $c_symbol\n" if $opt_d;
+ # Make sure we do not define symbol twice
+ warn "$where: duplicate description for symbol '$c_symbol'.\n"
+ if $csym{$c_symbol}++;
+ # Deal with obsolete symbol list (enclosed between parenthesis)
+ &record_obsolete("$_") if /\(/;
+ } else {
+ unless ($c_symbol) {
+ warn "$where: syntax error in ?C: construct.\n";
+ return;
+ }
+ }
+
+ s|^(\w+)|?$c_symbol:/* $1| || # Start of comment
+ (s|^\.\s*$|?$c_symbol: */\n| && ($c_symbol = '', 1)) || # End of comment
+ s|^(.*)|?$c_symbol: *$1|; # Middle of comment
+}
+
+# Process the ?H: lines
+sub p_config {
+ local($_) = @_;
+ local($where) = "\"$file\", line $. (?H)" unless $where;
+ warn "$where: directive should come after ?MAKE declarations.\n"
+ unless $makeseen{$unit};
+ unless ($h_section){ # Entering ?H: section
+ $h_section = 1;
+ $h_section_warned = 0;
+ }
+ if ($h_section == 2) {
+ warn "$where: section was already terminated by '?H:.'.\n"
+ unless $h_section_warned++;
+ return;
+ }
+ if ($_ eq ".\n") {
+ $h_section = 2; # Marks terminated ?H: section
+ return;
+ }
+ (my $constraint) = m/^\?(\w+):/;
+ s/^\?\w+://; # Remove leading '?var:' constraint
+ if (m|^#\$(\w+)\s+(\w+).*\$(\w+)|) {
+ # Case: #$d_var VAR "$var"
+ warn "$where: symbol '$2' was already defined.\n" if $hcsym{$2}++;
+ &check_definition("$1");
+ &check_definition("$3");
+ } elsif (m|^#define\s+(\w+)\((.*)\)\s+\$(\w+)|) {
+ # Case: #define VAR(x) $var
+ warn "$where: symbol '$1' was already defined.\n" if $hcsym{$1}++;
+ &check_definition("$3");
+ } elsif (m|^#\$define\s+(\w+)|) {
+ # Case: #$define VAR
+ warn "$where: symbol '$1' was already defined.\n" if $hcsym{$1}++;
+ } elsif (m|^#\$(\w+)\s+(\w+)|) {
+ # Case: #$d_var VAR
+ warn "$where: symbol '$2' was already defined.\n" if $hcsym{$2}++;
+ &check_definition("$1");
+ } elsif (m|^#define\s+(\w+).*\$(\w+)|) {
+ # Case: #define VAR "$var"
+ warn "$where: symbol '$1' was already defined.\n" if $hcsym{$1}++;
+ &check_definition("$2");
+ } elsif (m|^#define\s+(\w+)|) {
+ # Case: #define VAR
+ $hcsym{$1}++; # Multiple occurrences may be legitimate
+ } else {
+ if (/^#/) {
+ warn "$where: uncommon cpp line should be protected with '?%<:'.\n"
+ if $constraint eq '';
+ } elsif (!/^\@(if|elsif|else|end)\b/) {
+ warn "$where: line should not be listed here but in '?C:'.\n";
+ }
+ }
+
+ # Ensure the constraint is either %< (unit base name) or a known symbol.
+ if ($constraint ne '' && $constraint ne $unit) {
+ warn "$where: constraint '$constraint' is an unknown symbol.\n"
+ unless $csym{$constraint} || $ssym{$constraint};
+ }
+}
+
+# Process the ?M: lines
+sub p_magic {
+ local($_) = @_;
+ local($where) = "\"$file\", line $. (?M)";
+ warn "$where: directive should come after ?MAKE declarations.\n"
+ unless $makeseen{$unit};
+ if (/^(\w+):\s*([\w\s]*)\n$/) {
+ &check_last_declaration;
+ $m_symbol = $1;
+ $msym{$1} = "$unit"; # p_wanted ensure we do not define symbol twice
+ $mdep{$1} = $2; # Save C symbol dependencies
+ &p_wanted("$unit:$m_symbol");
+ } else {
+ unless ($m_symbol) {
+ warn "$where: syntax error in ?M: construct.\n";
+ return;
+ }
+ }
+ m|^\.\s*$| && ($m_symbol = ''); # End of comment
+}
+
+# Process the ?INIT: lines
+sub p_init {
+ local($_) = @_;
+ local($where) = "\"$file\", line $. (?INIT)";
+ warn "$where: directive should come after ?MAKE declarations.\n"
+ unless $makeseen{$unit};
+ &p_body($_, 1); # Pass it along as a body line (leading ?INIT: removed)
+}
+
+# Process the ?D: lines
+sub p_default {
+ local($_) = @_;
+ local($where) = "\"$file\", line $. (?D)";
+ warn "$where: directive should come after ?MAKE declarations.\n"
+ unless $makeseen{$unit};
+ local($sym) = /^(\w+)=/;
+ $hasdefault{$sym}++;
+ unless ($defseen{$sym}) {
+ warn "$where: variable '\$$sym' is not listed " .
+ "on ?MAKE: line.\n" unless $lintseen{$sym};
+ $lintseen_used{$sym}++ if $lintseen{$sym};
+ }
+ s/^\w+=//; # So that p_body does not consider variable as being set
+ &p_body($_, 1); # Pass it along as a body line (leading ?D: + var removed)
+}
+
+# Process the ?V: lines
+sub p_visible {
+ local($where) = "\"$file\", line $. (?V)";
+ warn "$where: directive should come after ?MAKE declarations.\n"
+ unless $makeseen{$unit};
+
+ # A visible symbol can freely be manipulated by any unit which includes the
+ # current unit in its dependencies. Symbols before ':' may be only used for
+ # reading while symbols after ':' may be used for both reading and writing.
+ # The array %shvisible records symbols as keys. Read-only symbols have a
+ # leading '$' while read-write symbols are recorded as-is.
+
+ unless (substr($unit, 0, 1) =~ /^[A-Z]/) {
+ warn "$where: visible declaration in non-special unit ignored.\n";
+ return;
+ }
+ local($read_only) = $_[0] =~ /^([^:]*):?/;
+ local($read_write) = $_[0] =~ /:(.*)/;
+ local(@rsym) = split(' ', $read_only);
+ local(@rwsym) = split(' ', $read_write);
+ local($w);
+ foreach (@rsym) { # Read only symbols
+ warn "$where: wanted variable '\$$_' made visible.\n" if &wanted($_);
+ warn "$where: defined variable '\$$_' made visible.\n"
+ if &defined($_) && !$lintseen{$_};
+ $w = $shvisible{"\$$_"};
+ warn "$where: variable '\$$_' already made visible by unit $w.\n" if $w;
+ $w = $shvisible{$_};
+ warn "$where: variable '\$$_' already read-write visible in $w.\n" if $w;
+ $shvisible{"\$$_"} = $unit unless $w;
+ }
+ foreach (@rwsym) { # Read/write symbols
+ warn "$where: wanted variable '\$$_' made visible.\n" if &wanted($_);
+ warn "$where: defined variable '\$$_' made visible.\n"
+ if &defined($_) && !$lintseen{$_};
+ $w = $shvisible{$_};
+ warn "$where: variable '\$$_' already made visible by unit $w.\n" if $w;
+ $w = $shvisible{"\$$_"};
+ warn "$where: variable '\$$_' already read-only visible in $w.\n" if $w;
+ $shvisible{$_} = $unit unless $w;
+ }
+}
+
+# Process the ?W: lines
+sub p_wanted {
+ local($where) = "\"$file\", line $. (?W)" unless $where;
+ warn "$where: directive should come after ?MAKE declarations.\n"
+ unless $makeseen{$unit};
+ # Somehow, we should check that none of the symbols to activate are stale
+ # ones, i.e. they all finally resolve to some known target -- FIXME
+ local($active) = $_[0] =~ /^([^:]*):/; # Symbols to activate
+ local($look_symbols) = $_[0] =~ /:(.*)/; # When those are used
+ local(@symbols) = split(' ', $look_symbols);
+ # A "?W:symbol" line asks metaconfig to define 'symbol' in the wanted file
+ # as a C target iff that word is found within the sources. This is mainly
+ # intended for the built-in interpreter to check for definedness.
+ local($w);
+ foreach (@symbols) {
+ warn "$where: variable '\$$_' already wanted.\n" if &wanted($_);
+ warn "$where: variable '\$$_' also locally defined.\n" if &defined($_);
+ $w = $cwanted{$_};
+ if ($msym{$_} ne '') {
+ warn "$where: symbol '$_' already listed on a ?M: line in '$w'.\n"
+ if $w;
+ } else {
+ warn "$where: variable '\$$_' already listed on a ?W: line in '$w'.\n"
+ if $w;
+ }
+ $cwanted{$_} = $unit unless $w;
+ }
+}
+
+# Process the ?Y: lines
+sub p_layout {
+ local($where) = "\"$file\", line $. (?Y)";
+ warn "$where: directive should come after ?MAKE declarations.\n"
+ unless $makeseen{$unit};
+ local($_) = @_;
+ chop;
+ s/^\s+//;
+ tr/A-Z/a-z/; # Layouts are record in lowercase
+ warn "$where: unknown layout directive '$_'.\n"
+ unless defined $Lcmp{$_};
+}
+
+# Process the ?P: lines
+sub p_public {
+ # FIXME
+}
+
+# Process the ?L: lines
+sub p_library {
+ # There should not be any '-l' in front of the library name
+ # FIXME
+}
+
+# Process the ?I: lines
+sub p_include {
+ # FIXME
+}
+
+# Process the ?T: lines
+sub p_temp {
+ local($where) = "\"$file\", line $. (?T:)";
+ warn "$where: directive should come after ?MAKE declarations.\n"
+ unless $makeseen{$unit};
+ local($_) = @_;
+ local(@sym) = split(' ', $_);
+ foreach $sym (@sym) {
+ warn "$where: temporary symbol '\$$sym' multiply declared.\n"
+ if $tempseen{$sym}++ == 1;
+ $tempmaster{$sym} .= "$unit " if $tempseen{$sym} == 1;
+ }
+}
+
+# Process the ?F: lines
+sub p_file {
+ local($where) = "\"$file\", line $. (?F:)";
+ warn "$where: directive should come after ?MAKE declarations.\n"
+ unless $makeseen{$unit};
+ local($_) = @_;
+ local(@files) = split(' ', $_);
+ local($uufile); # Name of file produced in the UU directory
+ local($tmpfile); # Name of a temporary file
+ # We care only about UU files, i.e. files produced in the UU directory
+ # and which are identified by the convention ./filename. Files !filename
+ # are not produced, i.e. they are temporary or externally provided.
+ # The %prodfile table records all the files produced, so we may detect
+ # inconsistencies between units, while %filemaster records the (first) unit
+ # defining a given UU file to make sure that (special) unit is named in the
+ # dependency line when that UU file if used. Duplicates will be caught in
+ # the sanity check phase thanks to %prodfile.
+ # Temporary files are recorded in %filesetin, so that we may later compare
+ # the list with the UU files to detect possible overwrites.
+ my $is_special = substr($unit, 0, 1) =~ /^[A-Z]/;
+ foreach $file (@files) {
+ warn "$where: produced file '$file' multiply declared.\n"
+ if $fileseen{$file}++ == 1;
+ if (($tmpfile = $file) =~ s/^!//) {
+ $filetmp{$tmpfile} = 'x ';
+ $filesetin{$tmpfile} .= "$unit " if $fileseen{$file} == 1;
+ next; # Is not a UU file for sure, so skip
+ }
+ $prodfile{$file} .= "$unit " if $fileseen{$file} == 1;
+ ($uufile = $file) =~ s|^\./(\S+)$|$1|;
+ next if $file eq $uufile; # Don't care about non-UU files
+ unless ($is_special || $lintcreated{$uufile}) {
+ warn "$where: UU file '$uufile' in non-special unit ignored.\n";
+ delete $lintcreated{$uufile}; # Detect spurious LINT
+ next;
+ }
+ delete $lintcreated{$uufile} if !$is_special; # Detect spurious LINT
+ $filemaster{$uufile} = $unit unless defined $filemaster{$uufile};
+ $filecreated{$uufile} = 'a'; # Will be automagically incremented
+ }
+}
+
+# Process the ?LINT: lines
+sub p_lint {
+ local($_) = @_;
+ local(@sym);
+ local($where) = "\"$file\", line $. (?LINT:)";
+ s/^\s+//; # Strip leading spaces
+ unless ($makeseen{$unit}) {
+ warn "$where: directive should come after ?MAKE declarations.\n"
+ unless m/^empty/;
+ }
+ if (s/^set//) { # Listed variables are set
+ @sym = split(' ', $_); # Spurious ones will be flagged
+ foreach (@sym) {
+ $lintset{$_}++; # Shell variable set
+ }
+ } elsif (s/^desc\w+//) { # Listed shell variables are described
+ @sym = split(' ', $_); # Spurious ones will be flagged
+ foreach (@sym) {
+ $lintsdesc{$_}++; # Shell variable described
+ }
+ } elsif (s/^creat\w+//) { # Listed created files in regular units
+ @sym = split(' ', $_);
+ foreach (@sym) {
+ $lintcreated{$_}++; # Persistent UU file created
+ }
+ } elsif (s/^known//) { # Listed C variables are described
+ @sym = split(' ', $_); # Spurious ones will be flagged
+ foreach (@sym) {
+ $lintcdesc{$_}++; # C symbol described
+ }
+ } elsif (s/^change//) { # Shell variable ok to be changed
+ @sym = split(' ', $_); # Spurious ones will be flagged
+ foreach (@sym) {
+ $lintchange{$_}++; # Do not complain if changed
+ }
+ } elsif (s/^extern//) { # Variables known to be externally defined
+ @sym = split(' ', $_);
+ foreach (@sym) {
+ $lintextern{$_}++; # Do not complain if used in a ?H: line
+ }
+ } elsif (s/^usefile//) { # Files marked as being used
+ @sym = split(' ', $_);
+ foreach (@sym) {
+ $lintfused{$_}++;
+ }
+ } elsif (s/^use//) { # Variables declared as used by unit
+ @sym = split(' ', $_); # Spurious ones will be flagged
+ foreach (@sym) {
+ $lintuse{$_}++; # Do not complain if on ?MAKE and not used
+ }
+ } elsif (s/^def\w+//) { # Listed variables are defined
+ @sym = split(' ', $_); # Spurious ones will be flagged
+ foreach (@sym) {
+ $lintseen{$_}++; # Shell variable defined in this unit
+ }
+ } elsif (m/^empty/) { # Empty unit file
+ $lintempty{$unit}++;
+ } elsif (m/^unclosed/) { # Unclosed here-documents
+ @sym = split(' ', $_);
+ foreach (@sym) {
+ $linthere{$_}++;
+ }
+ } elsif (s/^nothere//) { # Not a here-document name
+ @sym = split(' ', $_);
+ foreach (@sym) {
+ $lintnothere{$_}++;
+ }
+ } elsif (s/^nocomment//) { # OK if leading unit ': comment' missing
+ $lintnocomment{$unit}++;
+ } else {
+ local($where) = "\"$file\", line $." unless $where;
+ local($word) = /^(\w+)/;
+ warn "$where: unknown LINT request '$word' ignored.\n";
+ }
+}
+
+# Process the body of the unit
+sub p_body {
+ return unless $makeseen{$unit};
+ local($_, $special) = @_;
+ local($where) = "\"$file\", line $." unless $where;
+ # Ensure there is no control line in the body of the unit
+ local($control) = /^\?([\w\-]+):/;
+ local($known) = $control ? $Depend{$control} : "";
+ warn "$where: control sequence '?$control:' ignored within body.\n"
+ if $known && !/^\?X:|^\?LINT:/;
+ if (s/^\?LINT://) { # ?LINT directives allowed within body
+ $_ .= &complete_line(FILE) if s/\\\s*$//;
+ &p_lint($_);
+ }
+ return if $known;
+ # First non-special line should be a ': description' line
+ unless ($special || /^\?/ || /^@/) {
+ warn "$where: first body line should be a general ': description'.\n"
+ unless $past_first_line++ || $lintnocomment{$unit} || /^:\s+\w+/;
+ }
+ # Ensure ': comment' lines do not hold any meta-character
+ # We assume ":)" introduces a case statement.
+ if (/^\s*:/ && !/^\s*:\)/) {
+ warn "$where: missing space after ':' to make it a comment.\n"
+ unless /^\s*:\s/;
+ s/\\.//g; # simplistic ignoring of "escaped" chars
+ s/".*?"//g;
+ s/'.*?'//g;
+ if ($wiped_unit) {
+ s/<\$\w+>//g;
+ foreach my $wipe (@wiping) {
+ s/<$wipe>//g;
+ }
+ }
+ warn "$where: found unquoted meta-character $1 on comment line.\n"
+ while s/([`()<>;&\{\}\|])//g;
+ warn "$where: found dangling quote on ':' comment line.\n" if /['"]/;
+ return;
+ }
+ # Ingnore interpreted lines and their continuations
+ if ($last_interpreted) {
+ return if /\\$/; # Still part of the interpreted line
+ $last_interpreted = 0; # End of interpreted lines
+ return; # This line was the last interpreted
+ }
+ # Look for interpreted lines and ignore them
+ if (/^@/) {
+ $last_interpreted = /\\$/; # Set flag if line is continued
+ return; # And skip this line
+ }
+ # Detect ending of "here" documents
+ if ($heredoc ne '' && $_ eq "$heredoc\n") {
+ $heredoc = ''; # Close here-document
+ $heredoc_nosubst = 0;
+ return;
+ }
+ # Detect beginning of "here" document
+ my $began_here = 0;
+ if ($heredoc eq '') {
+ if (/<<\s*''/) {
+ # Discourage it, because we're not processing those...
+ warn "$where: empty here-document name discouraged.\n";
+ } elsif (/<<\s*'([^']+)'/ && !$lintnothere{$1}) {
+ $heredoc = $1;
+ $heredoc_nosubst = 1;
+ $began_here++;
+ } elsif (/<<\s*(\S+)/ && !$lintnothere{$1}) {
+ $heredoc = $1;
+ $began_here++;
+ }
+ # Continue, as we need to look for possible ">file" on the same line
+ # as a possible here document, as in "cat <<EOM >file".
+ } else {
+ return if $heredoc_nosubst; # Completely opaque to interpretation
+ }
+ $heredoc_line = $. if $began_here;
+
+ # If we've just entered a here document and we're generating a file
+ # that is exported by the unit, then we need to monitor the variables
+ # used to make sure there's no missing dependency.
+ $heredoc_nosubst = 0
+ if $began_here && />>?\s*(\S+)/ && $filemaster{$1} eq $unit;
+
+ # From now on, do all substitutes with ':' since it would be dangerous
+ # to remove things plain and simple. It could yields false matches
+ # afterwards...
+
+ my $check_vars = 1;
+ $check_vars = 0 if $heredoc_nosubst && !$began_here;
+
+ # Record any attempt made to set a shell variable
+ local($sym);
+ while ($check_vars && s/(\W?)(\w+)=/$1:/) {
+ my $before = $1;
+ $sym = $2;
+ next unless $before eq '' || $before =~ /["'` \t]/;
+ next if $sym =~ /^\d+/; # Ignore $1 and friends
+ $symset{$sym}++; # Shell variable set
+ # Not part of a $cc -DWHATEVER line and not made nor temporary
+ unless ($sym =~ /^D/ || &defined($sym)) {
+ if (&wanted($sym)) {
+ warn "$where: variable '\$$sym' is changed.\n"
+ unless $lintchange{$sym};
+ $lintchange_used{$sym}++ if $lintchange{$sym};
+ } else {
+ # Record that the variable is set but not listed locally.
+ if ($shset{$unit} !~ /\b$sym\b/) {
+ $shset{$unit} .= "$sym " unless $lintchange{$sym};
+ $lintchange_used{$sym}++ if $lintchange{$sym};
+ }
+ }
+ }
+ }
+ # Now look at the shell variables used: can be $var or ${var} or ${var:
+ local($var);
+ local($line) = $_;
+ while ($check_vars && s/\$\{?(\w+)[\}:]?/$1/) {
+ $var = $1;
+ next if $var =~ /^\d+/; # Ignore $1 and friends
+ # Record variable as undeclared but do not issue a message right now.
+ # That variable could be exported via ?V: (as $dflt in Myread) or be
+ # defined by a special unit (like $inlibc by unit Inlibc).
+ $shunknown{$unit} .= "$var " unless
+ $lintextern{$var} || &declared($var) ||
+ $shunknown{$unit} =~ /\b$var\b/;
+ $shused{$unit} .= "\$$var " unless $shused{$unit} =~ /\$$var\b/;
+ }
+
+ local($file);
+
+ if ($heredoc ne '' && !$began_here) {
+ # Still in here-document
+ # Just look for included files from C programs expected to be local
+ # in case they missed the special unit that produces these files.
+ if (s!#(\s*)include(\s+)"([\w.]+)"!!) {
+ $file = $3;
+ $fileused{$unit} .= "$file " unless
+ $filetmp{$file} || $fileused{$unit} =~ /\b$file\b/;
+ }
+ return;
+ }
+
+ # Now look at private files used by the unit (./file or ..../UU/file)
+ # We look at things like '. ./myread' and `./loc ...` as well as "< file"
+ $_ = $line;
+ s/<\S+?>//g; # <header.h> would set-off our <file detection
+ while (
+ s!#(\s*)include(\s+)"([\w.]+)"!! ||
+ s!(\.\s+|`\s*)(\S*UU|\.)/([^\$/`\s;]+)\s*!! ||
+ s!(`\s*\$?)cat\s+(\./)?([^\$/`\s;]+)\s*`!! ||
+ s!(\s+)(\./)([^\$/`\s;]+)\s*!! ||
+ s!(\s+)<\s*(\./)?([^<\$/`'"\s;]+)!!
+ ) {
+ $file = $3;
+ # Found some ". ./file" or `./file` execution, `$cat file`, or even
+ # "blah <file"...
+ # Record file as used. Later on, we will make sure we had the right
+ # to use that file: either we are in the unit that defines it, or we
+ # include the unit that creates it in our dependencies, relying on ?F:.
+ if ($file =~ /^\w/) {
+ $fileused{$unit} .= "$file " unless
+ $filetmp{$file} || $fileused{$unit} =~ /\b$file\b/;
+ }
+ # Mark temporary file as being used, to spot useless local declarations
+ $filetmp{$file} .= ' used'
+ if defined $filetmp{$file} && $filetmp{$file} !~ /\bused/;
+ }
+ # Try to detect things like . myread or `loc` to warn that they
+ # should rather use . ./myread and `./loc`. Also things like 'if prog',
+ # or usage in conditional expressions such as || and &&. Be sure the file
+ # name is always in $2...
+ while (
+ s!(\.\s+|`\s*)([^\$/`\s;]+)\s*!: ! || # . myread or `loc`
+ s!(if|\|\||&&)\s+([^\$/`\s;]+)\s*!: ! # if prog, || prog, && prog
+ ) {
+ $file = $2;
+ if ($file =~ /^\w/) {
+ $filemisused{$unit} .= "$file " unless
+ $filetmp{$file} || $filemisused{$unit} =~ /\b$file\b/;
+ }
+ # Temporary files should be used with ./ anyway
+ $filetmp{$file} .= ' misused'
+ if defined $filetmp{$file} && $filetmp{$file} !~ /\bmisused/;
+ }
+ # Locate file creation, >>file or >file
+ while (s!>>?\s*([^\$/`\s;]+)\s*!: !) {
+ $file = $1;
+ next if $file =~ /&\d+/; # skip >&4 and friends
+ $filecreated{$file}++;
+ }
+ # Look for mentions of known temporary files to avoid complaining
+ # that they were not used.
+ while (s!\s+(\S+)!!) {
+ $file = $1;
+ $filetmp{$file} .= ' used'
+ if defined $filetmp{$file} && $filetmp{$file} !~ /\bused/;
+ }
+}
+
+# Called at the end of each unit
+sub p_end {
+ local($last) = @_; # Last processed line
+ local($where) = "\"$file\"";
+
+ # The ?H: section, if present, must have been closed
+ if ($h_section && $h_section != 2) {
+ warn "$where: unclosed ?H: section.\n";
+ }
+ $h_section = 0; # For next unit, which may be empty
+
+ # All opened here-documents must be closed.
+ if ($heredoc ne '') {
+ my $q = $heredoc_nosubst ? "'" : "";
+ warn "$where: unclosed here-document $q$heredoc$q " .
+ "started line $heredoc_line.\n"
+ unless $linthere{$heredoc};
+ }
+
+ # Reinitialize for next unit.
+ $heredoc = '';
+ $heredoc_nosubst = 0;
+ $past_first_line = 0;
+ $last_interpreted = 0;
+
+ unless ($makeseen{$unit}) {
+ warn "$where: no ?MAKE: line describing dependencies.\n"
+ unless $lintempty{$unit};
+ return;
+ }
+
+ # Each unit should end with a blank line. Unfortunately, some units
+ # may also end with an '@end' request and have the blank line above it.
+ # Currently, we do not have enough information to correctly diagnose
+ # whether it is valid or not so just skip it.
+ # Same thing for U/Obsol_sh.U which ends with a shell comment.
+
+ warn "$where: not ending with a blank line.\n" unless
+ $last =~ /^\s*$/ || $last =~ /^\@end/ || $last =~ /^#|\?/;
+
+ # For EMACS users. It would be fatal to the Configure script...
+ warn "$where: last line not ending with a new-line character.\n"
+ unless $last =~ /\n$/;
+
+ # Make sure every shell symbol described in ?MAKE had a description
+ foreach $sym (sort keys %defseen) {
+ unless ($ssym{$sym}) {
+ warn "$where: symbol '\$$sym' was not described.\n"
+ unless $lintsdesc{$sym};
+ $lintsdesc_used{$sym}++ if $lintsdesc{$sym};
+ }
+ }
+ # Ensure all the C symbols defined by ?H: lines have a description
+ foreach $sym (sort keys %hcsym) {
+ unless ($csym{$sym}) {
+ warn "$where: C symbol '$sym' was not described.\n"
+ unless $lintcdesc{$sym};
+ $lintcdesc_used{$sym}++ if $lintcdesc{$sym};
+ }
+ }
+ # Ensure all the C symbols described by ?C: lines are defined in ?H:
+ foreach $sym (sort keys %csym) {
+ warn "$where: C symbol '$sym' was not defined by any ?H: line.\n"
+ unless $hcsym{$sym};
+ }
+ # Make sure each defined symbol was set, unless it starts with an
+ # upper-case letter in which case it is not a "true" shell symbol.
+ # I don't care about the special symbols defined in %Except as I know
+ # they are handled correctly.
+ foreach $sym (sort keys %defseen) {
+ unless ($symset{$sym} || substr($sym, 0, 1) =~ /^[A-Z]/) {
+ warn "$where: variable '\$$sym' should have been set.\n"
+ unless $lintset{$sym};
+ $lintset_used{$sym}++ if $lintset{$sym};
+ }
+ }
+ # Make sure every non-special unit declared as wanted is indeed needed
+ foreach $sym (sort keys %depseen) {
+ if ($shused{$unit} !~ /\$$sym\b/ && substr($sym, 0, 1) !~ /^[A-Z]/) {
+ warn "$where: unused dependency variable '\$$sym'.\n" unless
+ $lintchange{$sym} || $lintuse{$sym};
+ $lintchange_used{$sym}++ if $lintchange{$sym};
+ $lintuse_used{$sym}++ if $lintuse{$sym};
+ }
+ }
+ # Idem for conditionally wanted symbols
+ foreach $sym (sort keys %condseen) {
+ if ($shused{$unit} !~ /\$$sym\b/ && substr($sym, 0, 1) !~ /^[A-Z]/) {
+ warn "$where: unused conditional variable '\$$sym'.\n" unless
+ $lintchange{$sym} || $lintuse{$sym};
+ $lintchange_used{$sym}++ if $lintchange{$sym};
+ $lintuse_used{$sym}++ if $lintuse{$sym};
+ }
+ }
+ # Idem for temporary symbols
+ foreach $sym (sort keys %tempseen) {
+ if ($shused{$unit} !~ /\$$sym\b/ && !$symset{$sym}) {
+ warn "$where: unused temporary variable '\$$sym'.\n" unless
+ $lintuse{$sym};
+ $lintuse_used{$sym}++ if $lintuse{$sym};
+ }
+ }
+ # Idem for local files
+ foreach $file (sort keys %filetmp) {
+ warn "$where: mis-used temporary file '$file'.\n" if
+ $filetmp{$file} =~ /\bmisused/;
+ warn "$where: unused temporary file '$file'.\n" unless
+ $lintfused{$file} ||
+ $filetmp{$file} =~ /\bused/ || $filetmp{$file} =~ /\bmisused/;
+ }
+ # Make sure each private file listed as created on ?F: is really created.
+ # When found, a private UU file is entered in the %filecreated array
+ # with value 'a'. Each time a file creation occurs in the unit, an
+ # increment is done on that value. Since 'a'++ -> 'b', a numeric value
+ # in %filecreated means a non-local file, which is skipped. An 'a' means
+ # the file was not created...
+ local($value);
+ foreach $file (sort keys %filecreated) {
+ $value = $filecreated{$file};
+ next if $value > 0; # Skip non UU-files.
+ warn "$where: file '$file' was not created.\n" if $value eq 'a';
+ }
+ # Check whether some of the LINT directives were useful
+ foreach my $sym (sort keys %lintcreated) {
+ warn "$where: spurious 'LINT create $sym' directive.\n";
+ }
+ foreach my $sym (sort keys %lintuse) {
+ warn "$where: spurious 'LINT use $sym' directive.\n"
+ unless $lintuse_used{$sym};
+ }
+ foreach my $sym (sort keys %lintchange) {
+ warn "$where: spurious 'LINT change $sym' directive.\n"
+ unless $lintchange_used{$sym};
+ }
+ foreach my $sym (sort keys %lintseen) {
+ warn "$where: spurious 'LINT define $sym' directive.\n"
+ unless $lintseen_used{$sym};
+ }
+ foreach my $sym (sort keys %lintsdesc) {
+ warn "$where: spurious 'LINT describe $sym' directive.\n"
+ unless $lintsdesc_used{$sym};
+ }
+ foreach my $sym (sort keys %lintcdesc) {
+ warn "$where: spurious 'LINT known $sym' directive.\n"
+ unless $lintcdesc_used{$sym};
+ }
+ foreach my $sym (sort keys %lintset) {
+ warn "$where: spurious 'LINT set $sym' directive.\n"
+ unless $lintset_used{$sym};
+ }
+}
+
+# An unknown control line sequence was found (held in $proc)
+sub p_unknown {
+ warn "\"$file\", line $.: unknown control sequence '?$proc:'.\n";
+}
+
+# Run sanity checks, to make sure every conditional symbol has a suitable
+# default value. Also ensure every symbol was defined once.
+sub sanity_checks {
+ print "Sanity checks...\n";
+ local($key, $value);
+ local($w);
+ local(%message); # Record messages on a per-unit basis
+ local(%said); # Avoid duplicate messages
+ # Warn about symbols ever used in conditional dependency with no default
+ while (($key, $value) = each(%condsym)) {
+ unless ($hasdefault{$key}) {
+ $w = (split(' ', $shmaster{"\$$key"}))[0];
+ $message{$w} .= "#$key ";
+ }
+ }
+ # Warn about any undeclared variables. They are all listed in %shunknown,
+ # being the values while the unit where they appear is the key. If the
+ # symbol is defined by any of the special units included or made visible,
+ # then no warning is issued.
+ local($defined); # True if symbol is defined in one unit
+ local($where); # List of units where symbol is defined
+ local($myself); # The name of the current unit if itself special
+ local($visible); # Symbol made visible via a ?V: line
+ foreach $unit (sort keys %shunknown) {
+ foreach $sym (split(' ', $shunknown{$unit})) {
+ $defined = 0;
+ $where = $shmaster{"\$$sym"};
+ $defined = 1 if $tempmaster{"\$$sym"} =~ /$unit\b/;
+ $myself = substr($unit, 0, 1) =~ /^[A-Z]/ ? $unit : '';
+ # Symbol has to be either defined within one of the special units
+ # listed in the dependencies or exported via a ?V: line.
+ unless ($defined) {
+ $defined = &visible($sym, $unit);
+ $spneeded{$unit}++ if $defined;
+ }
+ $message{$unit} .= "\$$sym " unless $defined;
+ }
+ }
+
+ # Warn about any undeclared files. Files used in one unit are all within
+ # the %fileused table, indexed by unit. If a file is used, it must either
+ # be in the unit that declared it (relying on %filemaster for that) or
+ # the unit listed in %filemaster must be part of our dependency.
+ %said = ();
+ foreach $unit (sort keys %fileused) {
+ foreach $file (split(' ', $fileused{$unit})) {
+ $defined = 0;
+ $where = $filemaster{$file}; # Where file is created
+ $defined = 1 if $unit eq $where; # We're in the unit defining it
+ # Private UU files may be only be created by special units
+ foreach $special (split(' ', $shspecial{$unit})) {
+ last if $defined;
+ $defined = 1 if $where eq $special;
+ }
+ # Exceptions to above rule possible via a ?LINT:create hint,
+ # so parse all known dependencies for the unit...
+ foreach $depend (split(' ', $shdepend{$unit})) {
+ last if $defined;
+ $defined = 1 if $where eq $depend;
+ }
+ $message{$unit} .= "\@$file " unless
+ $defined || $said{"$unit/$file"}++; # Unknown file
+ }
+ }
+ undef %fileused;
+
+ # Warn about any misused files, kept in %filemisused
+ foreach $unit (sort keys %filemisused) {
+ foreach $file (split(' ', $filemisused{$unit})) {
+ next unless defined $filemaster{$file}; # Skip non UU-files
+ $message{$unit} .= "\@\@$file "; # Misused file
+ }
+ }
+ undef %filemisused;
+
+ # Warn about temporary files which could be created and inadvertently
+ # override a private UU file (listed in %filemaster).
+ foreach $tmpfile (keys %filesetin) {
+ next unless defined $filemaster{$tmpfile};
+ $where = $filemaster{$tmpfile};
+ foreach $unit (split(' ', $filesetin{$tmpfile})) {
+ $message{$unit} .= "\@\@\@$where:$tmpfile ";
+ }
+ }
+ undef %filesetin;
+
+ # Warn about any set variable which was not listed.
+ foreach $unit (sort keys %shset) {
+ symbol: foreach $sym (split(' ', $shset{$unit})) {
+ next if $shvisible{$sym};
+ $defined = 0;
+ # Symbol has to be either defined within one of the special units
+ # listed in the dependencies or exported read-write via a ?V: line.
+ # If symbol is exported read-only, report the attempt to set it.
+ $where = $shmaster{"\$$sym"};
+ study $where;
+ foreach $special (split(' ', $shspecial{$unit})) {
+ $defined = 1 if $where =~ /\b$special\b/;
+ last if $defined;
+ }
+ $visible = 0;
+ $defined = $visible = &visible($sym, $unit) unless $defined;
+ if ($visible && $shvisible{"\$$sym"} ne '') {
+ # We are allowed to set a read-only symbol in the unit which
+ # declared it...
+ next symbol if $shvisible{"\$$sym"} eq $unit;
+ $message{$unit} .= "\&$sym "; # Read-only symbol set
+ next symbol;
+ }
+ $message{$unit} .= "$sym " unless $defined;
+ }
+ }
+ # Warn about any obsolete variable which may be used
+ foreach $unit (sort keys %shused) {
+ foreach $sym (split(' ', $shused{$unit})) {
+ $message{$unit} .= "!$sym " if $Obsolete{$sym} ne '';
+ }
+ }
+
+ # Warn about stale dependencies, and prepare successor and predecessor
+ # tables for later topological sort.
+
+ local($targets, $deps);
+ local(%Succ); # Successors
+ local(%Prec); # Predecessors
+
+ # Split dependencies and build successors array.
+ foreach $make (@make) {
+ ($targets, $deps) = $make =~ m|(.*):\s*(.*)|;
+ $deps =~ s/\+(\w)/$1/g; # Remove conditional targets
+ foreach $target (split(' ', $targets)) {
+ $Succ{$target} .= $deps . ' ';
+ }
+ }
+
+ # Special setup for the End target, which normally has a $W dependency for
+ # wanted symbols. In order to detect all the possible cycles, we forge a
+ # huge dependency by making ALL the regular symbols (i.e. those whose first
+ # letter is not uppercased) wanted.
+
+ local($allwant) = '';
+ {
+ local($sym, $val);
+ while (($sym, $val) = each %shmaster) {
+ $sym =~ s/^\$//;
+ $allwant .= "$sym " if $val ne '';
+ }
+ }
+
+ $Succ{'End'} =~ s/\$W/$allwant/;
+
+ # Initialize precursors, and spot symbols impossible to 'make', i.e. those
+ # symbols listed in the successors and with no 'make' target. The data
+ # structures %Prec and %Succ will also be used by the cycle lookup code,
+ # in other words, the topological sort.
+ foreach $target (keys %Succ) {
+ $Prec{$target} += 0; # Ensure key is recorded without disturbing.
+ foreach $succ (split(' ', $Succ{$target})) {
+ $Prec{$succ}++; # Successor has one more precursor
+ unless (defined $Succ{$succ} || $said{$succ}++) {
+ foreach $unit (split(' ', $symdep{$succ})) {
+ $message{$unit} .= "?$succ "; # Stale ?MAKE: dependency
+ }
+ }
+ }
+ }
+ undef %symdep;
+
+ # Check all ?M: dependencies to spot stale ones
+ %said = ();
+ while (($key, $value) = each(%msym)) {
+ next if $value eq ''; # Value is unit name where ?M: occurred
+ foreach $sym (split(' ', $mdep{$key})) { # Loop on C dependencies
+ next if $cmaster{$sym} || $said{$sym};
+ $message{$value} .= "??$sym "; # Stale ?M: dependency
+ $said{$sym}++;
+ }
+ }
+
+ undef %said;
+ undef %mdep;
+ undef %msym;
+
+ # Now actually emit all the warnings
+ local($uv); # Unit defining visible symbol or private file
+ local($w); # Were we are signaling an error
+ foreach $unit (sort keys %message) {
+ undef %said;
+ $w = "\"$unit.U\"";
+ foreach (split(' ', $message{$unit})) {
+ if (s/^#//) {
+ warn "$w: symbol '\$$_' has no default value.\n";
+ } elsif (s/^\?\?//) {
+ warn "$w: stale ?M: dependency '$_'.\n";
+ } elsif (s/^\?//) {
+ warn "$w: stale ?MAKE: dependency '$_'.\n";
+ } elsif (s/^\$//) {
+ if ($shmaster{"\$$_"} ne '') {
+ warn "$w: symbol '\$$_' missing from ?MAKE.\n";
+ } elsif (($uv = $shvisible{$_}) ne '') {
+ warn "$w: missing $uv from ?MAKE for visible '\$$_'.\n";
+ } elsif (($uv = $shvisible{"\$$_"}) ne '') {
+ warn "$w: missing $uv from ?MAKE for visible '\$$_'.\n";
+ } else {
+ warn "\"$unit.U\": unknown symbol '\$$_'.\n";
+ }
+ ++$said{$_};
+ } elsif (s/^\&//) {
+ warn "\"$unit.U\": read-only symbol '\$$_' is set.\n";
+ ++$said{$_};
+ } elsif (s/^!//) {
+ warn "\"$unit.U\": obsolete symbol '$_' is used.\n";
+ ++$said{$_};
+ } elsif (s/^\@\@\@//) {
+ $uv = '?'; # To spot format errors
+ s/^(\w+):// && ($uv = $1);
+ warn "$w: local file '$_' may override the one set by $uv.U.\n";
+ } elsif (s/^\@\@//) {
+ $uv = $filemaster{$_};
+ warn "$w: you might not always get file '$_' from $uv.U.\n";
+ } elsif (s/^\@//) {
+ if ($uv = $filemaster{$_}) {
+ warn "$w: missing $uv from ?MAKE for private file '$_'.\n";
+ } else {
+ warn "$w: unknown private file '$_'.\n";
+ }
+ ++$said{"\@$_"};
+ } else {
+ warn "\"$unit.U\": undeclared symbol '\$$_' is set.\n"
+ unless $said{$_};
+ }
+ }
+ }
+
+ # Memory cleanup
+ undef %message;
+ undef %said;
+ undef %shused;
+ undef %shset;
+ undef %shspecial;
+ undef %shvisible;
+ undef %filemaster;
+
+ # Spot multiply defined C symbols
+ foreach $sym (keys %cmaster) {
+ @sym = split(' ', $cmaster{$sym});
+ if (@sym > 1) {
+ warn "C symbol '$sym' is defined in the following units:\n";
+ foreach (@sym) {
+ print STDERR "\t$_.U\n";
+ }
+ }
+ }
+ undef %cmaster; # Memory cleanup
+
+ # Warn about multiply defined symbols. There are three kind of symbols:
+ # target symbols, obsolete symbols and temporary symbols.
+ # For each of these sets, we make sure the intersection with the other sets
+ # is empty. Besides, we make sure target symbols are only defined once.
+
+ local(@sym);
+ foreach $sym (keys %shmaster) {
+ @sym = split(' ', $shmaster{$sym});
+ if (@sym > 1) {
+ warn "Shell symbol '$sym' is defined in the following units:\n";
+ foreach (@sym) {
+ print STDERR "\t$_.U\n";
+ }
+ }
+ $message{$sym} .= 'so ' if $Obsolete{$sym};
+ $message{$sym} .= 'st ' if $tempmaster{$sym};
+ }
+ foreach $sym (keys %tempmaster) {
+ $message{$sym} .= 'ot ' if $Obsolete{$sym};
+ }
+ local($_);
+ while (($sym, $_) = each %message) {
+ if (/so/) {
+ if (/ot/) {
+ warn "Shell symbol '$sym' is altogether:\n";
+ @sym = split(' ', $shmaster{$sym});
+ @sym = grep(s/$/.U/, @sym);
+ print STDERR "...defined in: ", join(', ', @sym), "\n";
+ print STDERR "...obsoleted by $Obsolete{$sym}.\n";
+ @sym = split(' ', $tempmaster{$sym});
+ @sym = grep(s/$/.U/, @sym);
+ print STDERR "...used as temporary in:", join(', ', @sym), "\n";
+ } else {
+ warn "Shell symbol '$sym' is both defined and obsoleted:\n";
+ @sym = split(' ', $shmaster{$sym});
+ @sym = grep(s/$/.U/, @sym);
+ print STDERR "...defined in: ", join(', ', @sym), "\n";
+ print STDERR "...obsoleted by $Obsolete{$sym}.\n";
+ }
+ } elsif (/st/) { # Cannot be ot as it would imply so
+ warn "Shell symbol '$sym' is both defined and used as temporary:\n";
+ @sym = split(' ', $shmaster{$sym});
+ @sym = grep(s/$/.U/, @sym);
+ print STDERR "...defined in: ", join(', ', @sym), "\n";
+ @sym = split(' ', $tempmaster{$sym});
+ @sym = grep(s/$/.U/, @sym);
+ print STDERR "...used as temporary in:", join(', ', @sym), "\n";
+ } elsif (/ot/) {
+ warn "Shell symbol '$sym' obsoleted also used as temporary:\n";
+ print STDERR "...obsoleted by $Obsolete{$sym}.\n";
+ @sym = split(' ', $tempmaster{$sym});
+ @sym = grep(s/$/.U/, @sym);
+ print STDERR "...used as temporary in:", join(', ', @sym), "\n";
+ }
+ }
+
+ # Spot multiply defined files, either private or public ones
+ foreach $file (keys %prodfile) {
+ @sym = split(' ', $prodfile{$file});
+ if (@sym > 1) {
+ warn "File '$file' is defined in the following units:\n";
+ foreach (@sym) {
+ print STDERR "\t$_\n";
+ }
+ }
+ }
+ undef %prodfile;
+
+
+ # Memory cleanup (we still need %shmaster for tsort)
+ undef %message;
+ undef %tempmaster;
+ undef %Obsolete;
+
+ # Make sure there is no dependency cycle
+ print "Looking for dependency cycles...\n";
+ &tsort(*Succ, *Prec); # Destroys info from %Prec
+}
+
+# Make sure last declaration ended correctly with a ?S:. or ?C:. line.
+# The variable '$where' was correctly positionned by the calling routine.
+sub check_last_declaration {
+ warn "$where: definition of '\$$s_symbol' not closed by '?S:.'.\n"
+ if $s_symbol ne '';
+ warn "$where: definition of '$c_symbol' not closed by '?C:.'.\n"
+ if $c_symbol ne '';
+ warn "$where: magic definition of '$m_symbol' not closed by '?M:.'.\n"
+ if $m_symbol ne '';
+ $s_symbol = $c_symbol = $m_symbol = '';
+}
+
+# Make sure the variable is mentionned on the ?MAKE line, if possible in the
+# definition section.
+# The variable '$where' was correctly positionned by the calling routine.
+sub check_definition {
+ local($var) = @_;
+ warn "$where: variable '\$$var' not even listed on ?MAKE: line.\n"
+ unless $defseen{$var} || $condseen{$var} || $depseen{$var};
+ warn "$where: variable '\$$var' is defined externally.\n"
+ if !$lintextern{$var} && !$defseen{$var} && &wanted($var);
+}
+
+# Is symbol declared somewhere?
+sub declared {
+ &defined($_[0]) || &wanted($_[0]);
+}
+
+# Is symbol defined by unit?
+sub defined {
+ $tempseen{$_[0]} || $defseen{$_[0]} || $lintseen{$_[0]};
+}
+
+# Is symbol wanted by unit?
+sub wanted {
+ $depseen{$_[0]} || $condseen{$_[0]};
+}
+
+# Is symbol visible from the unit?
+# Locate visible symbols throughout the special units. Each unit having
+# some special dependencies (special units wanted) have an entry in the
+# %shspecial array, listing all those special dependencies. And each
+# symbol made visible by ONE special unit has an entry in the %shvisible
+# array.
+sub visible {
+ local($symbol, $unit) = @_;
+ local(%explored); # Special units we've already explored
+ &explore($symbol, $unit); # Perform recursive search
+}
+
+# Recursively explore the dependencies to locate a visible symbol
+sub explore {
+ local($symbol, $unit) = @_;
+ # If unit was already explored, we know it has not been found by following
+ # that path.
+ return 0 if defined $explored{$unit};
+ $explored{$unit} = 0; # Assume nothing found in this unit
+ local($specials) = $shspecial{$unit};
+ # Don't waste any time if unit does not have any special units listed
+ # in its dependencies.
+ return 0 unless $specials;
+ foreach $special (split(' ', $specials)) {
+ return 1 if (
+ $shvisible{"\$$symbol"} eq $unit ||
+ $shvisible{$symbol} eq $unit ||
+ &explore($symbol, $special)
+ );
+ }
+ 0;
+}
+
diff --git a/mcon/pl/locate.pl b/mcon/pl/locate.pl
new file mode 100644
index 0000000..46c1078
--- /dev/null
+++ b/mcon/pl/locate.pl
@@ -0,0 +1,153 @@
+;# $Id$
+;#
+;# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+;#
+;# You may redistribute only under the terms of the Artistic Licence,
+;# as specified in the README file that comes with the distribution.
+;# You may reuse parts of this distribution only within the terms of
+;# that same Artistic Licence; a copy of which may be found at the root
+;# of the source tree for dist 4.0.
+;#
+;# $Log: locate.pl,v $
+;# Revision 3.0.1.1 1994/10/29 16:36:52 ram
+;# patch36: misspelled a 'closedir' as a 'close' statement
+;#
+;# Revision 3.0 1993/08/18 12:10:25 ram
+;# Baseline for dist 3.0 netwide release.
+;#
+;#
+;# Locate units and put them in the @ARGV array, for later perusal. We first
+;# look in the private U directory, then in the public U library. In each U
+;# directory, units may be gathered in clusters (directories). These clusters
+;# should not have a name ending with .U, as those will never be stat()'ed.
+;#
+;# NB: Currently, the clusters are only a practical way of grouping a set of
+;# closely related units. There must not be any name conflicts.
+;#
+;# The following variables are used:
+;# $WD is assumed to be the working directory (where the process was spawned)
+;# $MC is the location of metaconfig's public library
+;# @ARGV is the list of all the units full path
+;# %Unit maps an unit name (without final .U) to a path
+;# @myUlist lists the user's units, which will be appended at the end of @ARGV
+;# %myUseen lists the user's units which overwrite public ones
+;#
+package locate;
+
+# Locate the units and push their path in @ARGV (sorted alphabetically)
+sub main'locate_units {
+ print "Locating units...\n" unless $main'opt_s;
+ local(*WD) = *main'WD; # Current working directory
+ local(*MC) = *main'MC; # Public metaconfig library
+ undef %myUlist; # Records private units paths
+ undef %myUseen; # Records private/public conflicts
+ &private_units; # Locate private units in @myUlist
+ &public_units; # Locate public units in @ARGV
+ @ARGV = sort @ARGV; # Sort it alphabetically
+ push(@ARGV, sort @myUlist); # Append user's units sorted
+ &dump_list if $main'opt_v; # Dump the list of units
+}
+
+# Dump the list of units on stdout
+sub dump_list {
+ print "\t";
+ $, = "\n\t";
+ print @ARGV;
+ $, = '';
+ print "\n";
+}
+
+# Scan private units
+sub private_units {
+ return unless -d 'U'; # Nothing to be done if no 'U' entry
+ local(*ARGV) = *myUlist; # Really fill in @myUlist
+ local($MC) = $WD; # We are really in the working directory
+ &units_path("U"); # Locate units in the U directory
+ local($unit_name); # Unit's name (without .U)
+ local(@kept); # Array of kept units
+ # Loop over the units and remove duplicates (the first one seen is the one
+ # we keep). Also set the %myUseen H table to record private units seen.
+ foreach (@ARGV) {
+ ($unit_name) = m|^.*/(.*)\.U$|; # Get unit's name from path
+ next if $myUseen{$unit_name}; # Already recorded
+ $myUseen{$unit_name} = 1; # Record pirvate unit
+ push(@kept, $_); # Keep this unit
+ }
+ @ARGV = @kept;
+}
+
+# Scan public units
+sub public_units {
+ chdir($MC) || die "Can't find directory $MC.\n";
+ &units_path("U"); # Locate units in public U directory
+ chdir($WD) || die "Can't go back to directory $WD.\n";
+ local($path); # Relative path from $WD
+ local($unit_name); # Unit's name (without .U)
+ local(*Unit) = *main'Unit; # Unit is a global from main package
+ local(@kept); # Units kept
+ local(%warned); # Units which have already issued a message
+ # Loop over all the units and keep only the ones that were not found in
+ # the user's U directory. As it is possible two or more units with the same
+ # name be found in
+ foreach (@ARGV) {
+ ($unit_name) = m|^.*/(.*)\.U$|; # Get unit's name from path
+ next if $warned{$unit_name}; # We have already seen this unit
+ $warned{$unit_name} = 1; # Remember we have warned the user
+ if ($myUseen{$unit_name}) { # User already has a private unit
+ $path = $Unit{$unit_name}; # Extract user's unit path
+ next if $path eq $_; # Same path, we must be in mcon/
+ $path =~ s|^$WD/||o; # Weed out leading working dir path
+ print " Your private $path overrides the public one.\n"
+ unless $main'opt_s;
+ } else {
+ push(@kept, $_); # We may keep this one
+ }
+ }
+ @ARGV = @kept;
+}
+
+# Recursively locate units in the directory. Each file ending with .U has to be
+# a unit. Others are stat()'ed, and if they are a directory, they are also
+# scanned through. The $MC and @ARGV variable are dynamically set by the caller.
+sub units_path {
+ local($dir) = @_; # Directory where units are to be found
+ local(@contents); # Contents of the directory
+ local($unit_name); # Unit's name, without final .U
+ local($path); # Full path of a unit
+ local(*Unit) = *main'Unit; # Unit is a global from main package
+ unless (opendir(DIR, $dir)) {
+ warn("Cannot open directory $dir.\n");
+ return;
+ }
+ print "Locating in $MC/$dir...\n" if $main'opt_v;
+ @contents = readdir DIR; # Slurp the whole thing
+ closedir DIR; # And close dir, ready for recursion
+ foreach (sort @contents) {
+ next if $_ eq '.' || $_ eq '..';
+ if (/\.U$/) { # A unit, definitely
+ ($unit_name) = /^(.*)\.U$/;
+ $path = "$MC/$dir/$_"; # Full path of unit
+ push(@ARGV, $path); # Record its path
+ if (defined $Unit{$unit_name}) { # Already seen this unit
+ if ($main'opt_v) {
+ ($path) = $Unit{$unit_name} =~ m|^(.*)/.*|;
+ print " We've already seen $unit_name.U in $path.\n";
+ }
+ } else {
+ $Unit{$unit_name} = $path; # Map name to path
+ }
+ next;
+ }
+ # We have found a file which does not look like a unit. If it is a
+ # directory, then scan it. Otherwise skip the file.
+ unless (-d "$dir/$_") {
+ print " Skipping file $_ in $dir.\n" if $main'opt_v;
+ next;
+ }
+ &units_path("$dir/$_");
+ print "Back to $MC/$dir...\n" if $main'opt_v;
+ }
+}
+
+package main;
+
diff --git a/mcon/pl/makefile.pl b/mcon/pl/makefile.pl
new file mode 100644
index 0000000..434fbeb
--- /dev/null
+++ b/mcon/pl/makefile.pl
@@ -0,0 +1,172 @@
+;# $Id$
+;#
+;# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+;#
+;# You may redistribute only under the terms of the Artistic Licence,
+;# as specified in the README file that comes with the distribution.
+;# You may reuse parts of this distribution only within the terms of
+;# that same Artistic Licence; a copy of which may be found at the root
+;# of the source tree for dist 4.0.
+;#
+;# $Log: makefile.pl,v $
+;# Revision 3.0.1.1 1995/09/25 09:19:42 ram
+;# patch59: symbols are now sorted according to the ?Y: layout directive
+;#
+;# Revision 3.0 1993/08/18 12:10:26 ram
+;# Baseline for dist 3.0 netwide release.
+;#
+;#
+;# Given a list of wanted symbols in the Wanted file, produce a Makefile which
+;# will compute the transitive closure of dependencies for us and give the
+;# correct layout order in the Configure script. Because some conditional
+;# symbols could indeed be truly wanted symbols, we build the makefile in two
+;# passes. The first one will give us the complete list of units to be loaded,
+;# while the second will determine the correct order.
+;#
+;# The external $saved_dependencies records the original dependencies we got
+;# from the units' ?MAKE: lines while $dependencies is tampered with.
+;#
+;# Note that when the -w option is supplied, the sources are not parsed.
+;# However, the config.h.SH file would be empty, because its building
+;# relies on values in cmaster and shmaster arrays. It is okay for values
+;# in shmaster, because they are true wanted symbols. The cmaster keys
+;# have also been written, but with a leading '>' (because they are
+;# not true targets for Makefile). We thus extract all these keys and
+;# set the cmaster array accordingly.
+;#
+;# Obsolete symbols, if any found, are also part of the Wanted file, written on
+;# a line starting with a '!', eventually followed by a '>' if the obsolete
+;# symbol is a C one.
+;#
+;# These three data structures record wanted things like commands or symbols.
+;# %symwanted{'sym'} is true when the symbol is wanted (transitive closure)
+;# %condwanted{'sym'} when the default value of a symbol is requested
+;# $wanted records the set of wanted shell symbols (as opposed to C ones)
+;#
+# Build the private makefile we use to compute the transitive closure of the
+# previously determined dependencies.
+sub build_makefile {
+ print "Computing optimal dependency graph...\n" unless $opt_s;
+ chdir('.MT') || die "Can't chdir to .MT\n";
+ local($wanted); # Wanted shell symbols
+ &build_private; # Build a first makefile from dependencies
+ &compute_loadable; # Compute loadable units
+ &update_makefile; # Update makefile using feedback from first pass
+ chdir($WD) || die "Can't chdir back to $WD\n";
+ # Free memory by removing useless data structures
+ undef $dependencies;
+ undef $saved_dependencies;
+}
+
+# First pass: build a private makefile from the extracted dependency, changing
+# conditional units to truly wanted ones if the symbol is used, removing the
+# dependency otherwise. The original dependencies are saved.
+sub build_private {
+ print " Building private make file...\n" unless $opt_s;
+ open(WANTED,"../Wanted") || die "Can't reopen Wanted.\n";
+ $wanted = ' ' x 2000; # Pre-extend string
+ $wanted = '';
+ while (<WANTED>) {
+ chop;
+ next if /^!/; # Skip obsolete symbols
+ if (s/^>//) {
+ $cmaster{$_}++;
+ } else {
+ $wanted .= "$_ ";
+ }
+ }
+ close WANTED;
+
+ # The wanted symbols are sorted so that d_* (checking for C library symbol)
+ # come first and i_* (checking for includes) comes at the end. Grouping the
+ # d_* symbols together has good chances of improving the locality of the
+ # other questions and i_* symbols must come last since some depend on h_*
+ # values which prevent incompatible headers inclusions.
+ $wanted = join(' ', sort symbols split(' ', $wanted));
+
+ # Now generate the first makefile, which will be used to determine which
+ # symbols we really need, so that conditional dependencies may be solved.
+ open(MAKEFILE,">Makefile") || die "Can't create .MT/Makefile.\n";
+ print MAKEFILE "SHELL = /bin/sh\n";
+ print MAKEFILE "W = $wanted\n";
+ $saved_dependencies = $dependencies;
+ foreach $sym (@Cond) {
+ if ($symwanted{$sym}) {
+ $dependencies =~ s/\+($sym\s)/$1/gm;
+ } else {
+ $dependencies =~ s/\+$sym(\s)/$1/gm;
+ }
+ }
+ print MAKEFILE $dependencies;
+ close MAKEFILE;
+}
+
+# Ordering for symbols. Give higher priority to d_* ones and lower to i_* ones.
+# If any layout priority is defined in %Layout, it is used to order the
+# symbols.
+sub symbols {
+ local($r) = $Layout{$a} <=> $Layout{$b};
+ return $r if $r;
+ # If we come here, both symbols have the same layout priority.
+ if ($a =~ /^d_/) {
+ return -1 unless $b =~ /^d_/;
+ } elsif ($b =~ /^d_/) {
+ return 1;
+ } elsif ($a =~ /^i_/) {
+ return 1 unless $b =~ /^i_/;
+ } elsif ($b =~ /^i_/) {
+ return -1;
+ }
+ $a cmp $b;
+}
+
+# Run the makefile produced in the first pass to find the whole set of units we
+# have to load, filling in the %symwanted and %condwanted structures.
+sub compute_loadable {
+ print " Determining loadable units...\n" unless $opt_s;
+ open(MAKE, "make -n |") || die "Can't run make";
+ while (<MAKE>) {
+ s|^\s+||; # Some make print tabs before command
+ if (/^pick/) {
+ print "\t$_" if $opt_v;
+ ($pick,$cmd,$symbol,$unit) = split(' ');
+ $symwanted{$symbol}++;
+ $symwanted{$unit}++;
+ } elsif (/^cond/) {
+ print "\t$_" if $opt_v;
+ ($pick,@symbol) = split(' ');
+ for (@symbol) {
+ $condwanted{$_}++; # Default value is requested
+ }
+ }
+ }
+ close MAKE;
+}
+
+# Now that we know all the desirable symbols, we have to rebuild
+# another makefile, in order to have the units in a more optimal
+# way.
+# Actually, if we have both ?MAKE:a:+b and ?MAKE:d:b and 'd' is
+# wanted; then 'b' will be loaded. However, 'b' is a conditional
+# dependency for 'a', and it would be better if 'b' were loaded
+# before 'a' is, though this is not necessary.
+# It is hard to know that 'b' will be loaded *before* the first make.
+
+# Back to the original dependencies, make loadable units truly wanted ones and
+# remove optional ones.
+sub update_makefile {
+ print " Updating make file...\n" unless $opt_s;
+ open(MAKEFILE,">Makefile") || die "Can't create .MT/Makefile.\n";
+ print MAKEFILE "SHELL = /bin/sh\n";
+ print MAKEFILE "W = $wanted\n";
+ foreach $sym (@Cond) {
+ if ($symwanted{$sym}) {
+ $saved_dependencies =~ s/\+($sym\s)/$1/gm;
+ } else {
+ $saved_dependencies =~ s/\+$sym(\s)/$1/gm;
+ }
+ }
+ print MAKEFILE $saved_dependencies;
+ close MAKEFILE;
+}
+
diff --git a/mcon/pl/obsolete.pl b/mcon/pl/obsolete.pl
new file mode 100644
index 0000000..ba9a601
--- /dev/null
+++ b/mcon/pl/obsolete.pl
@@ -0,0 +1,103 @@
+;# $Id$
+;#
+;# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+;#
+;# You may redistribute only under the terms of the Artistic Licence,
+;# as specified in the README file that comes with the distribution.
+;# You may reuse parts of this distribution only within the terms of
+;# that same Artistic Licence; a copy of which may be found at the root
+;# of the source tree for dist 4.0.
+;#
+;# $Log: obsolete.pl,v $
+;# Revision 3.0.1.1 1995/01/30 14:49:22 ram
+;# patch49: random clean-up in &record_obsolete
+;#
+;# Revision 3.0 1993/08/18 12:10:27 ram
+;# Baseline for dist 3.0 netwide release.
+;#
+;#
+;# Deal with obsolete symbols. They are recorded in the %Obsolete array.
+;# Optionally, the obsolete symbols may be remaped onto the new ones (option
+;# -o), which enables smooth evolution from 2.0.
+;#
+# Record obsolete symbols association (new versus old), that is to say for a
+# given old symbol, $Obsolete{'old'} = new symbol to be used. A '$' is prepended
+# for all shell variables
+sub record_obsolete {
+ local($_) = @_;
+ local(@obsoleted); # List of obsolete symbols
+ local($symbol); # New symbol which must be used
+ local($dollar) = s/^\$// ? '$':''; # The '$' or a null string
+ # Syntax for obsolete symbols specification is
+ # list of symbols (obsolete ones):
+ if (/^(\w+)\s*\((.*)\)\s*:$/) {
+ $symbol = "$dollar$1";
+ @obsoleted = split(' ', $2); # List of obsolete symbols
+ } else {
+ if (/^(\w+)\s*\((.*):$/) {
+ warn "\"$file\", line $.: final ')' before ':' missing.\n";
+ $symbol = "$dollar$1";
+ @obsoleted = split(' ', $2);
+ } else {
+ warn "\"$file\", line $.: syntax error.\n";
+ return;
+ }
+ }
+ foreach $val (@obsoleted) {
+ $_ = $dollar . $val;
+ if (defined $Obsolete{$_}) {
+ warn "\"$file\", line $.: '$_' already obsoleted by '$Obsolete{$_}'.\n";
+ } else {
+ $Obsolete{$_} = $symbol; # Record (old, new) tuple
+ }
+ }
+}
+
+# Dump obsolete symbols used in file 'Obsolete'. Also write Obsol_h.U and
+# Obsol_sh.U to record old versus new mappings if the -o option was used.
+sub dump_obsolete {
+ unless (-f 'Obsolete') {
+ open(OBSOLETE, ">Obsolete") || die "Can't create Obsolete.\n";
+ }
+ open(OBSOL_H, ">.MT/Obsol_h.U") || die "Can't create .MT/Obsol_h.U.\n";
+ open(OBSOL_SH, ">.MT/Obsol_sh.U") || die "Can't create .MT/Obsol_sh.U.\n";
+ local($file); # File where obsolete symbol was found
+ local($old); # Name of this old symbol
+ local($new); # Value of the new symbol to be used
+ # Leave a blank line at the top so that anny added ^L will stand on a line
+ # by itself (the formatting process adds a ^L when a new page is needed).
+ format OBSOLETE_TOP =
+
+ File | Old symbol | New symbol
+-----------------------------------+----------------------+---------------------
+.
+ format OBSOLETE =
+@<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< | @<<<<<<<<<<<<<<<<<<< | @<<<<<<<<<<<<<<<<<<<
+$file, $old, $new
+.
+ local(%seen);
+ foreach $key (sort keys %ofound) {
+ ($file, $old, $new) = ($key =~ /^(\S+)\s+(\S+)\s+(\S+)/);
+ write(OBSOLETE) unless $file eq 'XXX';
+ next unless $opt_o; # Obsolete mapping done only with -o
+ next if $seen{$old}++; # Already remapped, thank you
+ if ($new =~ s/^\$//) { # We found an obsolete shell symbol
+ $old =~ s/^\$//;
+ print OBSOL_SH "$old=\"\$$new\"\n";
+ } else { # We found an obsolete C symbol
+ print OBSOL_H "#ifdef $new\n";
+ print OBSOL_H "#define $old $new\n";
+ print OBSOL_H "#endif\n\n";
+ }
+ }
+ close OBSOLETE;
+ close OBSOL_H;
+ close OBSOL_SH;
+ if (-s 'Obsolete') {
+ print "*** Obsolete symbols found -- see file 'Obsolete' for a list.\n";
+ } else {
+ unlink 'Obsolete';
+ }
+ undef %ofound; # Not needed any more
+}
+
diff --git a/mcon/pl/order.pl b/mcon/pl/order.pl
new file mode 100644
index 0000000..1616beb
--- /dev/null
+++ b/mcon/pl/order.pl
@@ -0,0 +1,42 @@
+;# $Id$
+;#
+;# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+;#
+;# You may redistribute only under the terms of the Artistic Licence,
+;# as specified in the README file that comes with the distribution.
+;# You may reuse parts of this distribution only within the terms of
+;# that same Artistic Licence; a copy of which may be found at the root
+;# of the source tree for dist 4.0.
+;#
+;# $Log: order.pl,v $
+;# Revision 3.0 1993/08/18 12:10:28 ram
+;# Baseline for dist 3.0 netwide release.
+;#
+;#
+;# The @cmdwanted array records the output of the makefile (pick commands only).
+;# The shell commands are executed right away.
+;# @cmdwanted records the output of the make process (solving dependencies)
+# Solve dependencies by saving the 'pick' command in @cmdwanted
+sub solve_dependencies {
+ local(%unitseen); # Record already picked units (avoid duplicates)
+ print "Determining the correct order for the units...\n" unless $opt_s;
+ chdir('.MT') || die "Can't chdir to .MT: $!.\n";
+ open(MAKE, "make -n |") || die "Can't run make";
+ while (<MAKE>) {
+ s|^\s+||; # Some make print tabs before command
+ print "\t$_" if $opt_v;
+ if (/^pick/) {
+ ($pick,$cmd,$symbol,$unit) = split(' ');
+ push(@cmdwanted,"$cmd $symbol $unit")
+ unless $unitseen{"$cmd:$unit"}++;
+ } elsif (/^cond/) {
+ # Ignore conditional symbol request
+ } else {
+ chop;
+ system $_;
+ }
+ }
+ chdir($WD) || die "Can't chdir to $WD: $!.\n";
+ close MAKE;
+}
+
diff --git a/mcon/pl/tsort.pl b/mcon/pl/tsort.pl
new file mode 100644
index 0000000..4d56fae
--- /dev/null
+++ b/mcon/pl/tsort.pl
@@ -0,0 +1,166 @@
+;# $Id$
+;#
+;# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+;#
+;# You may redistribute only under the terms of the Artistic Licence,
+;# as specified in the README file that comes with the distribution.
+;# You may reuse parts of this distribution only within the terms of
+;# that same Artistic Licence; a copy of which may be found at the root
+;# of the source tree for dist 4.0.
+;#
+;# $Log: tsort.pl,v $
+;# Revision 3.0 1993/08/18 12:10:28 ram
+;# Baseline for dist 3.0 netwide release.
+;#
+;#
+;# The topological sort is performed using the following algorithm:
+;#
+;# We have a list of successors for each item; makefile dependencies of
+;# the form 'a b: c d' means successors(a) = successors(b) = { c, d }.
+;# From that input, we derive a number of precursors for each item.
+;# In our simple example above, c and d both have two precursors and
+;# a and b have none. Items with no precursors are called outsiders
+;# and are left in a pool. The sort is then initiated and will continue
+;# until all the items have been sorted or a cycle is found...
+;#
+;# Outsiders are ready to be sorted; since the topological sort is a partial
+;# order, an external criterion is needed to choose one item among the ones
+;# in the pool. That item is assigned a number, and the number of precursors
+;# for the remaining items is updated (by following the successors of the
+;# sorted item and decrementing the value for each successor). Among those,
+;# if any item reaches a precursor count of zero, it becomes an outsider.
+;#
+;# The algorithm ends when the outsider pool is empty. If it becomes empty and
+;# some items remain unsorted, then there is one or more cycles among them.
+;# One way to outline that cycle first extract all those items whose precursor
+;# count is minimal then visit their dependency graph to find the cycle,
+;# extract only those items belonging to the cycle into the outsiders set and
+;# resume the main processing stream.
+;#
+#
+# Topological sort of Makefile dependencies with cycle enhancing.
+#
+
+package tsort;
+
+# Perform the topological sort of the items and outline cycles.
+sub main'tsort {
+ local(*Succ, *Prec) = @_; # Tables of succesors and predecessors
+ local(@Out); # The outsider set
+ local(@keys); # Current active precursors
+ local($item); # Item to sort
+
+ for (@keys = keys %Prec; @keys || @Out; @keys = keys %Prec) {
+ &resync; # Resynchronize outsiders
+ if (@Out == 0) { # Cycle detected
+ &extract_cycle(*Prec, *Succ);
+ next;
+ }
+ $item = shift(@Out); # Sort current item (don't care which one)
+ &sort($item); # Update internal structures
+ }
+}
+
+# Resynchronize the outsiders stack (those items that have no more precursors).
+# If the outsiders stack becomes empty, then there is a cycle.
+sub resync {
+ foreach $target (keys %Prec) {
+ if ($Prec{$target} == 0) {
+ delete $Prec{$target}; # We're done with this item
+ push(@Out, $target); # Ready to be sorted
+ }
+ }
+}
+
+# Sort item
+sub sort {
+ local($item) = @_;
+ print "(ok) $item\n" if $main'opt_d && !$Cycle;
+ print "(fx) $item\n" if $main'opt_d && $Cycle;
+ foreach $succ (split(' ', $Succ{$item})) {
+ # The test for definedness is necessary, since when a cycle is found,
+ # one item is forced out of %Prec. If we had the guarantee of no
+ # cycle, the the test would not be necessary and no decrementation
+ # could go past 0.
+ $Prec{$succ}-- if defined $Prec{$succ};
+ }
+}
+
+# Extract cycle... We look through the %Prec array and find all those items
+# with the same lowest value. Those are a cycle, so we dump them, and make
+# them new outsiders by resetting their count to 0.
+sub extract_cycle {
+ local(*Prec, *Succ) = @_;
+ local($item) = (&sort_by_value(*Prec))[0];
+ local($min) = $Prec{$item}; # Minimum value
+ local($key, $value);
+ local(%candidate); # Superset of the cycle we found
+ warn " Cycle found for:\n";
+ $Cycle++;
+ while (($key, $value) = each %Prec) {
+ $candidate{$key}++ if $value == $min;
+ }
+ local(%state); # State of visited nodes (1 = cycle, -1 = dead)
+ local($CYCLE) = 1; # Possible member of a cycle
+ local($DEAD) = -1; # Dead end, no cycling possible
+ foreach $key (keys %candidate) {
+ last if $CYCLE == &visit($key, $Succ{$key});
+ }
+ while (($key, $value) = each %candidate) {
+ next unless $state{$key} == $CYCLE;
+ $Prec{$key} = 0; # Members of cycle are new outsiders
+ warn "\t(#$Cycle) $key\n";
+ }
+ local(%involved); # Items involved in the cycle...
+ while (($key, $value) = each %state) {
+ $involved{$key}++ if $state{$key} == $CYCLE;
+ }
+ &outline_cycle(*Succ, *involved);
+}
+
+sub outline_cycle {
+ local(*Succ, *member) = @_;
+ local($key, $value);
+ local($depends);
+ local($unit);
+ warn " Cycle involves:\n";
+ while (($key, $value) = each %Succ) {
+ next unless $member{$key};
+ $depends = '';
+ foreach $item (split(' ', $value)) {
+ $depends .= "$item " if $member{$item};
+ }
+ $unit = $main'shmaster{"\$$key"};
+ $unit =~ s/\s+$//;
+ $unit = '?' if $unit eq '';
+ warn "\t($unit) $key: $depends\n";
+ }
+}
+
+# Visit a tree node, following all its successors, until we find a cycle.
+# Return $CYCLE if the exploration of the node leaded to a cycle, $DEAD
+# otherwise.
+sub visit {
+ local($node, $children) = @_; # A node and its children
+ # If we have already visited the node, return the status value attached
+ # to it.
+ return $state{$node} if $state{$node};
+ $state{$node} = $CYCLE; # Assume member of cycle
+ local($all_dead) = 1; # Set to 0 if at least one cycle found
+ foreach $child (split(' ', $children)) {
+ $all_dead = 0 if $CYCLE == &visit($child, $Succ{$child});
+ }
+ $state{$node} = $DEAD if $all_dead;
+ $state{$node};
+}
+
+# Sort associative array by value
+sub sort_by_value {
+ local(*x) = @_;
+ sub _by_value { $x{$a} <=> $x{$b}; }
+ sort _by_value keys %x;
+}
+
+package main;
+
+1;
diff --git a/mcon/pl/wanted.pl b/mcon/pl/wanted.pl
new file mode 100644
index 0000000..20d218c
--- /dev/null
+++ b/mcon/pl/wanted.pl
@@ -0,0 +1,263 @@
+;# $Id$
+;#
+;# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+;#
+;# You may redistribute only under the terms of the Artistic Licence,
+;# as specified in the README file that comes with the distribution.
+;# You may reuse parts of this distribution only within the terms of
+;# that same Artistic Licence; a copy of which may be found at the root
+;# of the source tree for dist 4.0.
+;#
+;# $Log: wanted.pl,v $
+;# Revision 3.0.1.2 1995/01/11 15:42:37 ram
+;# patch45: added % in front of hash table names for perl5's each() (ADO)
+;# patch45: tell users about possible extra file-extension lookups
+;#
+;# Revision 3.0.1.1 1993/10/16 13:56:05 ram
+;# patch12: modified to handle ?M: lines
+;# patch12: added warning when magic symbols used without proper config
+;#
+;# Revision 3.0 1993/08/18 12:10:29 ram
+;# Baseline for dist 3.0 netwide release.
+;#
+;#
+;# These two arrays record the file names of the files which may (or may not)
+;# contain shell or C symbols known by metaconfig.
+;# @SHlist records the .SH files
+;# @clist records the C-like files (i.e. .[chyl])
+;#
+;# These files are scanned in turn to see how many symbols known by metaconfig
+;# they have. Those symbols are gathered in a Wanted file. As C symbols are
+;# not true targets for the forthcoming Makefile, a ">" sign is prepended.
+;# Finally, the obsolete symbols are preceded by a "!".
+;#
+;# When obsolete symbols are found, they are dumped in file 'Obsolete'. Two
+;# files are created anyway in the .MT directory. Obsol_h.U and Obsol_sh.U which
+;# respectively list the obsoleted symbols (C and shell ones).
+;# Obsol_h.U records obsolete C symbols
+;# Obsol_sh.U records obsolete shell symbols
+;#
+;# The manifake() routine has to be provided externally.
+;#
+# Build a wanted file from the files held in @SHlist and @clist arrays
+sub build_wanted {
+ # If wanted file is already there, parse it to map obsolete if -o option
+ # was used. Otherwise, build a new one.
+ if (-f 'Wanted') {
+ &map_obsolete if $opt_o; # Build Obsol*.U files
+ &dump_obsolete; # Dump obsolete symbols if any
+ return;
+ }
+ &parse_files;
+}
+
+sub parse_files {
+ print "Building a Wanted file...\n" unless $opt_s;
+ open(WANTED,"| sort | uniq >Wanted") || die "Can't create Wanted.\n";
+ unless (-f $NEWMANI) {
+ &manifake;
+ die "No $NEWMANI--can't build a Wanted file.\n" unless -f $NEWMANI;
+ }
+
+ local($search); # Where to-be-evaled script is held
+ local($_) = ' ' x 50000 if $opt_m; # Pre-extend pattern search space
+ local(%visited); # Records visited files
+ local(%lastfound); # Where last occurence of key was
+
+ # Now we are a little clever, and build a loop to eval so that we don't
+ # have to recompile our patterns on every file. We also use "study" since
+ # we are searching the same string for many different things. Hauls!
+
+ if (@clist) {
+ local($others) = $cext ? " $cext" : '';
+ print " Scanning .[chyl]$others files for symbols...\n"
+ unless $opt_s;
+ $search = ' ' x (40 * (@cmaster + @ocmaster)); # Pre-extend
+ $search = "while (<>) {study;\n"; # Init loop over ARGV
+ foreach $key (keys(%cmaster)) {
+ $search .= "&cmaster('$key') if /\\b$key\\b/;\n";
+ }
+ foreach $key (grep(!/^\$/, keys %Obsolete)) {
+ $search .= "&ofound('$key') if /\\b$key\\b/;\n";
+ }
+ $search .= "}\n"; # terminate loop
+ print $search if $opt_d;
+ @ARGV = @clist;
+ # Swallow each file as a whole, if memory is available
+ undef $/ if $opt_m;
+ eval $search;
+ eval '';
+ $/ = "\n";
+ while (($key,$value) = each(%cmaster)) {
+ print WANTED $cwanted{$key}, "\n", ">$key", "\n" if $value;
+ }
+ }
+
+ # If they don't use magic but use magically guarded symbols without
+ # their corresponding C symbol dependency, warn them, since they might
+ # not know about that portability issue.
+
+ if (@clist && !$opt_M) {
+ local($nused); # list of non-used symbols
+ local($warning) = 0; # true when one warning issued
+ foreach $cmag (keys %mwanted) { # loop over all used magic symbols
+ next unless $cmaster{$cmag};
+ $nused = '';
+ foreach $cdep (split(' ', $mwanted{$cmag})) {
+ $nused .= " $cdep" unless $cmaster{$cdep};
+ }
+ $nused =~ s/^ //;
+ $nused = "one of " . $nused if $nused =~ s/ /, /g;
+ if ($nused ne '') {
+ print " Warning: $cmag is used without $nused.\n";
+ $warning++;
+ }
+ }
+ if ($warning) {
+ local($those) = $warning == 1 ? 'that' : 'those';
+ local($s) = $warning == 1 ? '' : 's';
+ print "Note: $those previous warning$s may be suppressed by -M.\n";
+ }
+ }
+
+ # Cannot remove $cmaster as it is used later on when building Configure
+ undef @clist;
+ undef %cwanted;
+ undef %mwanted;
+ %visited = ();
+ %lastfound = ();
+
+ if (@SHlist) {
+ local($others) = $shext ? " $shext" : '';
+ print " Scanning .SH$others files for symbols...\n" unless $opt_s;
+ $search = ' ' x (40 * (@shmaster + @oshmaster)); # Pre-extend
+ $search = "while (<>) {study;\n";
+ # All the keys already have a leading '$'
+ foreach $key (keys(%shmaster)) {
+ $search .= "&shmaster('$key') if /\\$key\\b/;\n";
+ }
+ foreach $key (grep (/^\$/, keys %Obsolete)) {
+ $search .= "&ofound('$key') if /\\$key\\b/;\n";
+ }
+ $search .= "}\n";
+ print $search if $opt_d;
+ @ARGV = @SHlist;
+ # Swallow each file as a whole, if memory is available
+ undef $/ if $opt_m;
+ eval $search;
+ eval '';
+ $/ = "\n";
+ while (($key,$value) = each(%shmaster)) {
+ if ($value) {
+ $key =~ s/^\$//;
+ print WANTED $key, "\n";
+ }
+ }
+ }
+
+ # Obsolete symbols, if any, are written in the Wanted file preceded by a
+ # '!' character. In case -w is used, we'll thus be able to correctly build
+ # the Obsol_h.U and Obsol_sh.U files.
+
+ &add_obsolete; # Add obsolete symbols in Wanted file
+
+ close WANTED;
+
+ # If obsolete symbols where found, write an Obsolete file which lists where
+ # each of them appear and the new symbol to be used. Also write Obsol_h.U
+ # and Obsol_sh.U in .MT for later perusal.
+
+ &dump_obsolete; # Dump obsolete symbols if any
+
+ die "No desirable symbols found--aborting.\n" unless -s 'Wanted';
+
+ # Clean-up memory by freeing useless data structures
+ undef @SHlist;
+ undef %shmaster;
+}
+
+# This routine records matches of C master keys
+sub cmaster {
+ local($key) = @_;
+ $cmaster{$key}++; # This symbol is wanted
+ return unless $opt_t || $opt_M; # Return if neither -t nor -M
+ if ($opt_t &&
+ $lastfound{$key} ne $ARGV # Never mentionned for this file ?
+ ) {
+ $visited{$ARGV}++ || print $ARGV,":\n";
+ print "\t$key\n";
+ $lastfound{$key} = $ARGV;
+ }
+ if ($opt_M &&
+ defined($mwanted{$key}) # Found a ?M: symbol
+ ) {
+ foreach $csym (split(' ', $mwanted{$key})) {
+ $cmaster{$csym}++; # Activate C symbol dependencies
+ }
+ }
+}
+
+# This routine records matches of obsolete keys (C or shell)
+sub ofound {
+ local($key) = @_;
+ local($_) = $Obsolete{$key}; # Value of new symbol
+ $ofound{"$ARGV $key $_"}++; # Record obsolete match
+ $cmaster{$_}++ unless /^\$/; # A C hit
+ $shmaster{$_}++ if /^\$/; # Or a shell one
+ return unless $opt_t; # Continue if trace option on
+ if ($lastfound{$key} ne $ARGV) { # Never mentionned for this file ?
+ $visited{$ARGV}++ || print $ARGV,":\n";
+ print "\t$key (obsolete, use $_)\n";
+ $lastfound{$key} = $ARGV;
+ }
+}
+
+# This routine records matches of shell master keys
+sub shmaster {
+ local($key) = @_;
+ $shmaster{$key}++; # This symbol is wanted
+ return unless $opt_t; # Continue if trace option on
+ if ($lastfound{$key} ne $ARGV) { # Never mentionned for this file ?
+ $visited{$ARGV}++ || print $ARGV,":\n";
+ print "\t$key\n";
+ $lastfound{$key} = $ARGV;
+ }
+}
+
+# Write obsolete symbols into the Wanted file for later perusal by -w.
+sub add_obsolete {
+ local($file); # File where obsolete symbol was found
+ local($old); # Name of this old symbol
+ local($new); # Value of the new symbol to be used
+ foreach $key (sort keys %ofound) {
+ ($file, $old, $new) = ($key =~ /^(\S+)\s+(\S+)\s+(\S+)/);
+ if ($new =~ s/^\$//) { # We found an obsolete shell symbol
+ print WANTED "!$old\n";
+ } else { # We found an obsolete C symbol
+ print WANTED "!>$old\n";
+ }
+ }
+}
+
+# Map obsolete symbols from Wanted file into %Obsolete and call dump_obsolete
+# to actually build the Obsol_sh.U and Obsol_h.U files. Those will be needed
+# during the Configure building phase to actually do the remaping.
+# The obsolete symbols found are entered in the %ofound array, tagged as from
+# file 'XXX', which is specially recognized by dump_obsolete.
+sub map_obsolete {
+ open(WANTED, 'Wanted') || die "Can't open Wanted file.\n";
+ local($new); # New symbol to be used instead of obsolete one
+ while (<WANTED>) {
+ chop;
+ next unless s/^!//; # Skip non-obsolete symbols
+ if (s/^>//) { # C symbol
+ $new = $Obsolete{$_}; # Fetch new symbol
+ $ofound{"XXX $_ $new"}++; # Record obsolete match (XXX = no file)
+ } else { # Shell symbol
+ $new = $Obsolete{"\$$_"}; # Fetch new symbol
+ $ofound{"XXX \$$_ $new"}++; # Record obsolete match (XXX = no file)
+ }
+ }
+ close WANTED;
+}
+
diff --git a/mcon/pl/xref.pl b/mcon/pl/xref.pl
new file mode 100644
index 0000000..f077139
--- /dev/null
+++ b/mcon/pl/xref.pl
@@ -0,0 +1,70 @@
+;# $Id$
+;#
+;# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+;#
+;# You may redistribute only under the terms of the Artistic Licence,
+;# as specified in the README file that comes with the distribution.
+;# You may reuse parts of this distribution only within the terms of
+;# that same Artistic Licence; a copy of which may be found at the root
+;# of the source tree for dist 4.0.
+;#
+;# $Log: xref.pl,v $
+;# Revision 3.0.1.2 1995/09/25 09:20:05 ram
+;# patch59: added empty p_layout stub for new ?Y: directives
+;#
+;# Revision 3.0.1.1 1993/10/16 13:56:23 ram
+;# patch12: declared p_public for ?P: lines
+;#
+;# Revision 3.0 1993/08/18 12:10:31 ram
+;# Baseline for dist 3.0 netwide release.
+;#
+;# Metaxref-dependent part of the dependency extranction.
+;#
+# Process the ?W: lines
+sub p_wanted {
+ # Syntax is ?W:<shell symbols>:<C symbols>
+ local($active) = $_[0] =~ /^([^:]*):/; # Symbols to activate
+ local($look_symbols) = $_[0] =~ /:(.*)/; # When those are used
+ local(@syms) = split(/ /, $look_symbols); # Keep original spacing info
+ $active =~ s/\s+/\n/g; # One symbol per line
+
+ # Concatenate quoted strings, so saying something like 'two words' will
+ # be introduced as one single symbol "two words".
+ local(@symbols); # Concatenated symbols to look for
+ local($concat) = ''; # Concatenation buffer
+ foreach (@syms) {
+ if (s/^\'//) {
+ $concat = $_;
+ } elsif (s/\'$//) {
+ push(@symbols, $concat . ' ' . $_);
+ $concat = '';
+ } else {
+ push(@symbols, $_) unless $concat;
+ $concat .= ' ' . $_ if $concat;
+ }
+ }
+
+ local($fake); # Fake unique shell symbol to reparent C symbol
+
+ # Now record symbols in master and wanted tables
+ foreach (@symbols) {
+ $cmaster{$_} = undef; # Asks for look-up in C files
+ # Make a fake C symbol and associate that with the wanted symbol
+ # so that later we know were it comes from
+ $fake = &gensym;
+ $cwanted{$_} = "$fake"; # Attached to this symbol
+ push(@Master, "?$unit:$fake=''"); # Fake initialization
+ }
+
+ delete @cmaster{keys %excluded_symbol};
+ delete @cwanted{keys %excluded_symbol};
+}
+
+# Ingnore the following:
+sub p_init {}
+sub p_default {}
+sub p_library {}
+sub p_include {}
+sub p_public {}
+sub p_layout {}
+
diff --git a/mcon/pl/xwant.pl b/mcon/pl/xwant.pl
new file mode 100644
index 0000000..e1bbf20
--- /dev/null
+++ b/mcon/pl/xwant.pl
@@ -0,0 +1,149 @@
+;# $Id$
+;#
+;# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+;#
+;# You may redistribute only under the terms of the Artistic Licence,
+;# as specified in the README file that comes with the distribution.
+;# You may reuse parts of this distribution only within the terms of
+;# that same Artistic Licence; a copy of which may be found at the root
+;# of the source tree for dist 4.0.
+;#
+;# $Log: xwant.pl,v $
+;# Revision 3.0 1993/08/18 12:10:32 ram
+;# Baseline for dist 3.0 netwide release.
+;#
+;#
+;# These two arrays record the file names of the files which may (or may not)
+;# contain shell or C symbols known by metaconfig.
+;# @SHlist records the .SH files
+;# @clist records the C-like files (i.e. .[chyl])
+;#
+# Parse files and build cross references
+sub build_xref {
+ print "Building cross-reference files...\n" unless $opt_s;
+ unless (-f $NEWMANI) {
+ &manifake;
+ die "No $NEWMANI--don't know who to scan.\n" unless -f $NEWMANI;
+ }
+
+ open(FUI, "|sort | uniq >I.fui") || die "Can't create I.fui.\n";
+ open(UIF, "|sort | uniq >I.uif") || die "Can't create I.uif.\n";
+
+ local($search); # Where to-be-evaled script is held
+ local($_) = ' ' x 50000 if $opt_m; # Pre-extend pattern search space
+ local(%visited); # Records visited files
+ local(%lastfound); # Where last occurence of key was
+
+ # Map shell symbol names to units by reverse engineering the @Master array
+ # which records all the known shell symbols and the units where they
+ # are defined.
+ foreach $init (@Master) {
+ $init =~ /^\?(.*):(.*)=''/ && ($shwanted{"\$$2"} = $1);
+ }
+
+ # Now we are a little clever, and build a loop to eval so that we don't
+ # have to recompile our patterns on every file. We also use "study" since
+ # we are searching the same string for many different things. Hauls!
+
+ if (@clist) {
+ print " Scanning .[chyl] files for symbols...\n" unless $opt_s;
+ $search = ' ' x (40 * (@cmaster + @ocmaster)); # Pre-extend
+ $search = "while (<>) {study;\n"; # Init loop over ARGV
+ foreach $key (keys(%cmaster)) {
+ $search .= "\$cmaster{'$key'} .= \"\$ARGV#\" if /\\b$key\\b/;\n";
+ }
+ foreach $key (grep(!/^\$/, keys %Obsolete)) {
+ $search .= "&ofound('$key') if /\\b$key\\b/;\n";
+ }
+ $search .= "}\n"; # terminate loop
+ print $search if $opt_d;
+ @ARGV = @clist;
+ # Swallow each file as a whole, if memory is available
+ undef $/ if $opt_m;
+ eval $search;
+ eval '';
+ $/ = "\n";
+ while (($key,$value) = each(%cmaster)) {
+ next if $value eq '';
+ foreach $file (sort(split(/#/, $value))) {
+ next if $file eq '';
+ # %cwanted may contain value separated by \n -- take last one
+ @sym = split(/\n/, $cwanted{$key});
+ $sym = pop(@sym);
+ $shell = "\$$sym";
+ print FUI
+ pack("A35", $file),
+ pack("A20", "$shwanted{$shell}.U"),
+ $key, "\n";
+ print UIF
+ pack("A20", "$shwanted{$shell}.U"),
+ pack("A25", $key),
+ $file, "\n";
+ }
+ }
+ }
+
+ undef @clist;
+ undef %cwanted;
+ undef %cmaster; # We're not building Configure, we may delete this
+ %visited = ();
+ %lastfound = ();
+
+ if (@SHlist) {
+ print " Scanning .SH files for symbols...\n" unless $opt_s;
+ $search = ' ' x (40 * (@shmaster + @oshmaster)); # Pre-extend
+ $search = "while (<>) {study;\n";
+ # All the keys already have a leading '$'
+ foreach $key (keys(%shmaster)) {
+ $search .= "\$shmaster{'$key'} .= \"\$ARGV#\" if /\\$key\\b/;\n";
+ }
+ foreach $key (grep (/^\$/, keys %Obsolete)) {
+ $search .= "&ofound('$key') if /\\$key\\b/;\n";
+ }
+ $search .= "}\n";
+ print $search if $opt_d;
+ @ARGV = @SHlist;
+ # Swallow each file as a whole, if memory is available
+ undef $/ if $opt_m;
+ eval $search;
+ eval '';
+ $/ = "\n";
+ while (($key,$value) = each(%shmaster)) {
+ next if $value eq '';
+ foreach $file (sort(split(/#/, $value))) {
+ next if $file eq '';
+ print FUI
+ pack("A35", $file),
+ pack("A20", "$shwanted{$key}.U"),
+ $key, "\n";
+ print UIF
+ pack("A20", "$shwanted{$key}.U"),
+ pack("A25", $key),
+ $file, "\n";
+ }
+ }
+ }
+
+ close FUI;
+ close UIF;
+
+ # If obsolete symbols where found, write an Obsolete file which lists where
+ # each of them appear and the new symbol to be used. Also write Obsol_h.U
+ # and Obsol_sh.U in .MT for later perusal.
+
+ &dump_obsolete; # Dump obsolete symbols if any
+
+ # Clean-up memory by freeing useless data structures
+ undef @SHlist;
+ undef %shmaster;
+}
+
+# This routine records matches of obsolete keys (C or shell)
+sub ofound {
+ local($key) = @_;
+ local($_) = $Obsolete{$key}; # Value of new symbol
+ $ofound{"$ARGV $key $_"}++; # Record obsolete match
+ $cmaster{$_} .= "$ARGV#" unless /^\$/; # A C hit
+ $shmaster{$_} .= "$ARGV#" if /^\$/; # Or a shell one
+}
+
diff --git a/pat/Jmakefile b/pat/Jmakefile
new file mode 100644
index 0000000..ee31e68
--- /dev/null
+++ b/pat/Jmakefile
@@ -0,0 +1,62 @@
+/*
+ * Jmakefile for patching tools.
+ */
+
+;# $Id$
+;#
+;# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+;#
+;# You may redistribute only under the terms of the Artistic Licence,
+;# as specified in the README file that comes with the distribution.
+;# You may reuse parts of this distribution only within the terms of
+;# that same Artistic Licence; a copy of which may be found at the root
+;# of the source tree for dist 4.0.
+;#
+;# $Log: Jmakefile,v $
+;# Revision 3.0.1.3 1995/07/24 09:57:21 ram
+;# patch56: was missing an entry for the patlog program
+;#
+;# Revision 3.0.1.2 1994/01/24 13:42:48 ram
+;# patch16: added dependency generation stage
+;#
+;# Revision 3.0.1.1 1993/08/24 12:09:05 ram
+;# patch3: added patnotify and patsnap
+;#
+;# Revision 3.0 1993/08/18 12:10:32 ram
+;# Baseline for dist 3.0 netwide release.
+;#
+
+/* BASE is used to give the extensions for pat* files. Usually, '//' can be
+ * used to specify a null expansion pattern, but some of those new smart cpp
+ * now think it's a up-to-end-of-line comment--why do they do that to us?
+ */
+BASE = /^^/ cil base diff make clean col name ftp send \
+ index post notify snap log
+
+/* PAT is derived from BASE and is the list of all the files to produce */
+PAT = \
+|expand f!$(BASE)!
+ pat!f \
+-expand \\
+
+NoManPages() /* There is a single man page for all tools */
+SimpleShellScriptTarget($(PAT))
+
+InstallMultipleFlags($(PAT),$(SCRIPTDIR),-m 555)
+InstallManPage(pat,$(MANSRC))
+
+PATSH = \
+|expand f!$(PAT)!
+ !f.SH \
+-expand \\
+
+depend:: local_depend
+local_depend::
+ ($(SED) '/^# DO NOT DELETE/q' Makefile && \
+ grep '^\$$grep' $(PATSH) | \
+ $(SED) -e "s/^.*' \([^ ]*\) >>\([^ ]*\)/\2: \1/" \
+ ) > Makefile.new
+ cp Makefile Makefile.bak
+ cp Makefile.new Makefile
+ $(RM) Makefile.new
+
diff --git a/pat/Makefile.SH b/pat/Makefile.SH
new file mode 100755
index 0000000..8fbb905
--- /dev/null
+++ b/pat/Makefile.SH
@@ -0,0 +1,297 @@
+: Makefile.SH generated from Jmake.tmpl and Jmakefile [jmake 3.5-43]
+: $X-Id: Jmake.tmpl 47 2010-11-28 22:23:13Z rmanfredi $
+
+case $CONFIG in
+'')
+ if test -f config.sh; then TOP=.;
+ elif test -f ../config.sh; then TOP=..;
+ elif test -f ../../config.sh; then TOP=../..;
+ elif test -f ../../../config.sh; then TOP=../../..;
+ elif test -f ../../../../config.sh; then TOP=../../../..;
+ else
+ echo "Can't find config.sh."; exit 1
+ fi
+ . $TOP/config.sh
+ ;;
+esac
+case "$0" in
+*/*) cd `expr X$0 : 'X\(.*\)/'` ;;
+esac
+CURRENT=pat
+DIR=`echo $CURRENT/ | sed -e 's/\.\///g'`
+echo "Extracting ${DIR}Makefile (with variable substitutions)"
+
+INSTALL=`echo $install | sed -e 's,\./i,\$(TOP)/i,'`
+INSTALLDIR=`echo $installdir | sed -e 's,\./i,\$(TOP)/i,'`
+DATE=`date`
+
+$spitshell >Makefile <<!GROK!THIS!
+########################################################################
+# Makefile generated from Makefile.SH on $DATE
+
+SHELL = /bin/sh
+JMAKE = jmake
+TOP = ..
+CURRENT = $CURRENT
+DIR = $DIR
+INSTALL = $INSTALL
+INSTALLDIR = $INSTALLDIR
+
+########################################################################
+# Parameters set by Configure -- edit config.sh if changes are needed
+
+CTAGS = ctags
+JCPPFLAGS = $cppflags
+L = $manext
+MANSRC = $installmansrc
+MV = $mv
+RM = $rm -f
+SCRIPTDIR = $installscript
+SED = $sed
+
+!GROK!THIS!
+$spitshell >>Makefile <<'!NO!SUBS!'
+########################################################################
+# Jmake rules for building libraries, programs, scripts, and data files
+# $X-Id: Jmake.rules 18 2006-12-27 10:35:09Z rmanfredi $
+
+########################################################################
+# Start of Jmakefile
+
+# $X-Id: Jmakefile 48 2010-11-28 23:05:09Z rmanfredi $
+#
+# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+#
+# You may redistribute only under the terms of the Artistic Licence,
+# as specified in the README file that comes with the distribution.
+# You may reuse parts of this distribution only within the terms of
+# that same Artistic Licence; a copy of which may be found at the root
+# of the source tree for dist 4.0.
+#
+# $X-Log: Jmakefile,v $
+# Revision 3.0.1.3 1995/07/24 09:57:21 ram
+# patch56: was missing an entry for the patlog program
+#
+# Revision 3.0.1.2 1994/01/24 13:42:48 ram
+# patch16: added dependency generation stage
+#
+# Revision 3.0.1.1 1993/08/24 12:09:05 ram
+# patch3: added patnotify and patsnap
+#
+# Revision 3.0 1993/08/18 12:10:32 ram
+# Baseline for dist 3.0 netwide release.
+#
+
+BASE = // cil base diff make clean col name ftp send \
+ index post notify snap log
+
+PAT = \
+ pat \
+ patcil \
+ patbase \
+ patdiff \
+ patmake \
+ patclean \
+ patcol \
+ patname \
+ patftp \
+ patsend \
+ patindex \
+ patpost \
+ patnotify \
+ patsnap \
+ patlog
+
+all:: $(PAT)
+
+local_realclean::
+ $(RM) $(PAT)
+
+pat: pat.SH
+ /bin/sh pat.SH
+
+patcil: patcil.SH
+ /bin/sh patcil.SH
+
+patbase: patbase.SH
+ /bin/sh patbase.SH
+
+patdiff: patdiff.SH
+ /bin/sh patdiff.SH
+
+patmake: patmake.SH
+ /bin/sh patmake.SH
+
+patclean: patclean.SH
+ /bin/sh patclean.SH
+
+patcol: patcol.SH
+ /bin/sh patcol.SH
+
+patname: patname.SH
+ /bin/sh patname.SH
+
+patftp: patftp.SH
+ /bin/sh patftp.SH
+
+patsend: patsend.SH
+ /bin/sh patsend.SH
+
+patindex: patindex.SH
+ /bin/sh patindex.SH
+
+patpost: patpost.SH
+ /bin/sh patpost.SH
+
+patnotify: patnotify.SH
+ /bin/sh patnotify.SH
+
+patsnap: patsnap.SH
+ /bin/sh patsnap.SH
+
+patlog: patlog.SH
+ /bin/sh patlog.SH
+
+
+local_install:: $(PAT)
+ @case '${MFLAGS}' in *[i]*) set +e;; esac; \
+ (set -x; test -d $(INSTALL_PREFIX)$(SCRIPTDIR) || \
+ $(INSTALLDIR) $(INSTALL_PREFIX)$(SCRIPTDIR)); \
+ for i in $(PAT); do \
+ (set -x; $(INSTALL) -c -m 555 \
+ $$i $(INSTALL_PREFIX)$(SCRIPTDIR)) || exit 1;\
+ done
+
+local_deinstall::
+ @case '${MFLAGS}' in *[i]*) set +e;; esac; \
+ for i in $(PAT); do \
+ (set -x; $(RM) $(INSTALL_PREFIX)$(SCRIPTDIR)/$$i); \
+ done
+
+local_install.man:: pat.man
+ @case '${MFLAGS}' in *[i]*) set +e;; esac; \
+ (set -x; test -d $(INSTALL_PREFIX)$(MANSRC) || \
+ $(INSTALLDIR) $(INSTALL_PREFIX)$(MANSRC)); \
+ $(INSTALL) -c -m 444 pat.man $(INSTALL_PREFIX)$(MANSRC)/pat.$(L)
+
+local_deinstall.man::
+ $(RM) $(INSTALL_PREFIX)$(MANSRC)/pat.$(L)
+
+PATSH = \
+ pat.SH \
+ patcil.SH \
+ patbase.SH \
+ patdiff.SH \
+ patmake.SH \
+ patclean.SH \
+ patcol.SH \
+ patname.SH \
+ patftp.SH \
+ patsend.SH \
+ patindex.SH \
+ patpost.SH \
+ patnotify.SH \
+ patsnap.SH \
+ patlog.SH
+
+depend:: local_depend
+local_depend::
+ ($(SED) '/^# DO NOT DELETE/q' Makefile && \
+ grep '^\$$grep' $(PATSH) | \
+ $(SED) -e "s/^.*' \([^ ]*\) >>\([^ ]*\)/\2: \1/" \
+ ) > Makefile.new
+ cp Makefile Makefile.bak
+ cp Makefile.new Makefile
+ $(RM) Makefile.new
+
+########################################################################
+# Common rules for all Makefiles -- do not edit
+
+all::
+
+clean: local_clean
+realclean: local_realclean
+clobber: local_clobber
+
+local_clean::
+ if test -f core; then $(RM) core; fi
+ $(RM) *~ *.o
+
+local_realclean:: local_clean
+
+local_clobber:: local_realclean
+ $(RM) Makefile config.sh
+
+install:: local_install
+install.man:: maybe_install.man
+deinstall:: local_deinstall
+deinstall.man:: maybe_deinstall.man
+
+install.man-yes: local_install.man
+install.man-no:
+deinstall.man-yes: local_deinstall.man
+deinstall.man-no:
+
+!NO!SUBS!
+case "$installmansrc" in
+'') man=no;;
+*) man=yes;;
+esac
+$spitshell >>Makefile <<!GROK!THIS!
+maybe_install.man: install.man-$man
+maybe_deinstall.man: deinstall.man-$man
+!GROK!THIS!
+$spitshell >>Makefile <<'!NO!SUBS!'
+
+Makefile.SH: Jmakefile
+ -@if test -f $(TOP)/.package; then \
+ if test -f Makefile.SH; then \
+ echo " $(RM) Makefile.SH~; $(MV) Makefile.SH Makefile.SH~"; \
+ $(RM) Makefile.SH~; $(MV) Makefile.SH Makefile.SH~; \
+ fi; \
+ echo " $(JMAKE) -DTOPDIR=$(TOP) -DCURDIR=$(CURRENT)" ; \
+ $(JMAKE) -DTOPDIR=$(TOP) -DCURDIR=$(CURRENT) ; \
+ else touch $@; fi
+
+Makefile: Makefile.SH
+ /bin/sh Makefile.SH
+
+tags::
+ $(CTAGS) -w *.[ch]
+ $(CTAGS) -xw *.[ch] > tags
+
+local_clobber::
+ $(RM) tags
+
+depend::
+
+########################################################################
+# Empty rules for directories with no sub-directories -- do not edit
+
+local_install::
+ @echo "install in $(CURRENT) done."
+
+local_deinstall::
+ @echo "deinstall in $(CURRENT) done."
+
+local_install.man::
+ @echo "install.man in $(CURRENT) done."
+
+local_deinstall.man::
+ @echo "deinstall.man in $(CURRENT) done."
+
+Makefiles::
+
+Makefiles.SH::
+
+########################################################################
+# Dependencies generated by make depend
+# DO NOT DELETE THIS LINE -- make depend relies on it
+
+# Put nothing here or make depend will gobble it up
+.FORCE_DEPEND::
+ @echo "You must run 'make depend' in $(TOP) first."; exit 1
+!NO!SUBS!
+chmod 644 Makefile
+$eunicefix Makefile
+
diff --git a/pat/README b/pat/README
new file mode 100644
index 0000000..20e15ec
--- /dev/null
+++ b/pat/README
@@ -0,0 +1,120 @@
+This is the root directory for pat tools.
+
+This directory contains an automatic patch generator. You must have RCS
+to use this. You must also have run packinit in the top level directory
+of your package to create a .package file.
+
+When you've modified a file in your package, the pat program is used to
+control the whole process. The other programs can be called by hand, but
+usually needn't be. Run pat from the top level directory of your package.
+
+The pat, patcil, patdiff, and patbase programs take a list of filenames as
+arguments. Alternately, a -a means all files listed in MANIFEST.
+
+Patcil will create an RCS directory if necessary. However, it may not check in
+things which require special initializaton properly. For example, if you
+want to check in a shell script, you'd better make your RCS directory yourself
+and then say
+
+ rcs -i -c'# ' blurfl.xsh
+
+before running pat or patcil. Otherwise the RCS log may not be commented
+properly. Unless of course you are using a standard extension (like .c for
+a C file) or have placed the proper comments in front of the $Log marker
+within the file itself--patcil will then correctly guess the type of
+comment required.
+
+Patdiff will create a bugs directory in your top level directory, and will want
+to find a patchlevel.h file in that same directory. Everything is done from
+that top level directory--don't put any patchlevel.h or bugs directories in
+your subdirectories. Each subdirectory has its own RCS directory though.
+
+Patpost, patsend and patftp may be used to post to Usenet, mail to someone,
+or copy patches to your ftp directory. They take a destination and a list
+of patches to process.
+
+Those pat tools are an hopefully enhanced version of the tools that
+came with Larry Wall's dist 2.0. There are however a few new scripts:
+
+ - patclean, which checks in the mods and removes the working files.
+ - patcol, which restores the files removed by a patclean.
+ - patname, which sets a symbolic version number.
+
+Here is the way I am using the pat tools...
+
+First, I set up a MANIFEST.new file. If you are converting an existing
+distribution to use dist, the manifake script will convert a MANIFEST
+into a MANIFEST.new (removing the possible archive number column).
+
+Then I run packinit to modify the version number and set up things
+correctly. The package is then ready to be placed under pat control.
+I make sure the file patchlevel.h is correctly set and I run:
+
+ patcil -f -a -s
+ touch patchlevel.h
+ find . -name "*~" -exec /bin/rm -f {} \; -print
+
+There is a prototypical patchlevel.h file in this directory, so you
+might want to have a look at it.
+
+[If you are planning on using the mailagent to send the patches (and sort
+your mail -- that's its primary goal now), the you must make sure
+the patchelevel.h file is locatated in the root directory of your package.
+The mailagent program is available separately, and was posted on the
+comp.sources.misc newsgroup]
+
+Now everything is ready. The distribution is frozen, the bugs directory
+has been created. I issue a makedist -v to create the distribution kits.
+Eventually I set up the mailagent so that people can request for the
+distribution automatically. If I want to create a directory containing
+the lattest sources (to be able to `kit' them to someone using the kit
+program -- posted to comp.sources.unix), I use:
+
+ makedist -c <package>-<version>@<patchlevel>
+
+for instance, for dist 2.9 at PL26
+
+ makedist -c dist-2.9@26
+
+which I can then send to people directly with kit (which is NOT part
+of this release).
+
+As I receive patches or find some bugs, I edit the files and make the
+modifications. When I want to issue an official patch, I run:
+
+ pat -n
+
+and one or more patches are issued. You can compress the patches in the
+bugs subdirectory, since the mailpatch program knows about that. Also
+patindex will correctly uncompress them.
+
+When I need to clean up the distribution directory, I use:
+
+ patclean -a
+
+which checks in every changes and removes the working files. The whole
+set of working files can then be restored by:
+
+ patcol -a
+
+Sometimes, I made a couple of modification and I don't want to issue
+a patch right now. I then run:
+
+ patcil -a
+
+which checks in the changes. You can run this as many times as you want,
+because patcil will skip unchanged file and remembers the last time you
+issued a patch.
+
+If you are still using RCS 4.3, be sure you use makedist and not your
+own shell archiver, as the $Locker symbol has an annoying expansion
+which makes patch to fail when applyed. I'm not sure this was correctly
+fixed with RCS 5.5 as I am not using it yet for various reasons.
+
+In any case, if you are using the copyright expansion feature (i.e. the
+stuffing of the COPYRIGHT token surrounded by '@' -- can't do it here
+or it will get expanded...), then you must use makedist to make sure
+the copyright is properly written in all your files. Distributing files
+with an un-expanded COPYRIGHT token in them would be a disaster, since
+the patching system will also expand them before building a patch and
+some of your hunks may not apply correctly.
diff --git a/pat/pat.SH b/pat/pat.SH
new file mode 100755
index 0000000..5723f26
--- /dev/null
+++ b/pat/pat.SH
@@ -0,0 +1,154 @@
+case $CONFIG in
+'')
+ if test -f config.sh; then TOP=.;
+ elif test -f ../config.sh; then TOP=..;
+ elif test -f ../../config.sh; then TOP=../..;
+ elif test -f ../../../config.sh; then TOP=../../..;
+ elif test -f ../../../../config.sh; then TOP=../../../..;
+ else
+ echo "Can't find config.sh."; exit 1
+ fi
+ . $TOP/config.sh
+ ;;
+esac
+case "$0" in
+*/*) cd `expr X$0 : 'X\(.*\)/'` ;;
+esac
+echo "Extracting pat/pat (with variable substitutions)"
+cat >pat <<!GROK!THIS!
+$startperl
+ eval 'exec perl -S \$0 \${1+"\$@"}'
+ if \$running_under_some_shell;
+
+# $Id$
+#
+# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+#
+# You may redistribute only under the terms of the Artistic Licence,
+# as specified in the README file that comes with the distribution.
+# You may reuse parts of this distribution only within the terms of
+# that same Artistic Licence; a copy of which may be found at the root
+# of the source tree for dist 4.0.
+#
+# Original Author: Larry Wall <lwall@netlabs.com>
+#
+# $Log: pat.SH,v $
+# Revision 3.0.1.5 1994/10/29 16:37:53 ram
+# patch36: now unlinks all the files created by patlog in bugs
+#
+# Revision 3.0.1.4 1994/01/24 14:29:17 ram
+# patch16: added ~/.dist_profile awareness
+#
+# Revision 3.0.1.3 1993/08/25 14:04:35 ram
+# patch6: removal of patch temporary files did not work with gaps
+#
+# Revision 3.0.1.2 1993/08/24 12:14:39 ram
+# patch3: now removes older patch temporary files within bugs
+#
+# Revision 3.0.1.1 1993/08/19 06:42:31 ram
+# patch1: leading config.sh searching was not aborting properly
+#
+# Revision 3.0 1993/08/18 12:10:36 ram
+# Baseline for dist 3.0 netwide release.
+#
+
+\$version = '$VERSION';
+\$patchlevel = '$PATCHLEVEL';
+!GROK!THIS!
+cat >>pat <<'!NO!SUBS!'
+
+$progname = &profile; # Read ~/.dist_profile
+require 'getopts.pl';
+&usage unless $#ARGV >= 0;
+&usage unless &Getopts("ahmnV");
+
+if ($opt_V) {
+ print STDERR "$progname $version PL$patchlevel\n";
+ exit 0;
+} elsif ($opt_h) {
+ &usage;
+}
+
+&readpackage;
+
+if (-f 'patchlevel.h') {
+ open(PL,"patchlevel.h") || die "$progname: can't open patchlevel.h: $!\n";
+ while (<PL>) {
+ $bnum = $1 if /^#define\s+PATCHLEVEL\s+(\d+)/;
+ }
+ die "$progname: malformed patchlevel.h file.\n" if $bnum eq '';
+ ++$bnum;
+} else {
+ $bnum=1;
+}
+
+if ($opt_n) {
+ &newer; # Look for files newer than patchlevel.h
+} elsif ($opt_a) {
+ open(MANI,"MANIFEST.new") || die "No MANIFEST.new found.\n";
+ @ARGV = ();
+ while (<MANI>) {
+ s|^\./||;
+ next if m|^patchlevel.h|; # This file is built by hand
+ chop;
+ ($_) = split(' ');
+ next if -d;
+ push(@ARGV,$_);
+ }
+ close MANI;
+} elsif ($opt_m) {
+ open(MODS,"bugs/.mods$bnum") || die "$progname: no modification found.\n";
+ @ARGV = ();
+ while (<MODS>) {
+ next if m|^patchlevel.h$|; # This file is built by hand
+ chop;
+ ($_) = split(' ');
+ push(@ARGV,$_);
+ }
+ close MODS;
+}
+
+# Remove older patch temporary files
+
+@patlist = &patseq($bnum - 1);
+foreach $cpat (@patlist) {
+ unlink <bugs/*.$cpat bugs/.logs$cpat bugs/.mods$cpat bugs/.xlog$cpat>;
+ unlink <bugs/.pri$cpat bugs/.subj$cpat bugs/.clog$cpat bugs/.rlog$cpat>;
+}
+
+# Since we're about to launch other pat exectuables, disable ~/.dist_profile
+# to protect them if they added some weird switches we don't need...
+
+$ENV{'DIST'} = '/dev/null'; # Disable ~/.dist_profile
+
+system 'perl', '-S', 'patcil', '-p', @ARGV;
+
+# Update MANIFEST if necessary, then patcil it.
+
+if (-f 'MANIFEST' && `diff MANIFEST.new MANIFEST 2>/dev/null` ne '') {
+ system 'cp', 'MANIFEST.new', 'MANIFEST';
+ system 'perl', '-S', 'patcil', '-p', 'MANIFEST';
+ push(@ARGV, 'MANIFEST');
+}
+
+system 'perl', '-S', 'patdiff', @ARGV;
+system 'perl', '-S', 'patmake';
+
+sub usage {
+ print STDERR "Usage: $progname [-ahmnV] [filelist]\n";
+ print STDERR " -a : all the files in MANIFEST.new\n";
+ print STDERR " -h : print this message and exit\n";
+ print STDERR " -m : all the modified files (which have been patciled)\n";
+ print STDERR " -n : all the files newer than patchlevel.h\n";
+ print STDERR " -V : print version number and exit\n";
+ exit 1;
+}
+
+!NO!SUBS!
+$grep -v '^;#' ../pl/newer.pl >>pat
+$grep -v '^;#' ../pl/package.pl >>pat
+$grep -v '^;#' ../pl/patseq.pl >>pat
+$grep -v '^;#' ../pl/tilde.pl >>pat
+$grep -v '^;#' ../pl/profile.pl >>pat
+chmod +x pat
+$eunicefix pat
diff --git a/pat/pat.man b/pat/pat.man
new file mode 100644
index 0000000..67a97b5
--- /dev/null
+++ b/pat/pat.man
@@ -0,0 +1,513 @@
+.rn '' }`
+''' $Id$
+'''
+''' Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+'''
+''' You may redistribute only under the terms of the Artistic Licence,
+''' as specified in the README file that comes with the distribution.
+''' You may reuse parts of this distribution only within the terms of
+''' that same Artistic Licence; a copy of which may be found at the root
+''' of the source tree for dist 4.0.
+'''
+''' $Log: pat.man,v $
+''' Revision 3.0.1.7 1997/02/28 16:32:45 ram
+''' patch61: documents contents of the message sent by patnotify
+'''
+''' Revision 3.0.1.6 1995/09/25 09:20:41 ram
+''' patch59: new -i option for patsend to add extra instructions
+'''
+''' Revision 3.0.1.5 1995/05/12 12:25:28 ram
+''' patch54: updated my e-mail address
+'''
+''' Revision 3.0.1.4 1994/10/29 16:38:31 ram
+''' patch36: documents new patlog script and the files it uses
+''' patch36: the RCS layer section has been extended slightly
+'''
+''' Revision 3.0.1.3 1993/08/27 14:40:19 ram
+''' patch7: random cleanup
+'''
+''' Revision 3.0.1.2 1993/08/25 14:05:02 ram
+''' patch6: new -q option for patsend and patnotify
+'''
+''' Revision 3.0.1.1 1993/08/24 12:15:42 ram
+''' patch3: added patnotify and patsnap
+''' patch3: patcol has a new -S option
+''' patch3: the users file built by mailagent is now listed under FILES
+'''
+''' Revision 3.0 1993/08/18 12:10:37 ram
+''' Baseline for dist 3.0 netwide release.
+'''
+.de Sh
+.br
+.ne 5
+.PP
+\fB\\$1\fR
+.PP
+..
+.de Sp
+.if t .sp .5v
+.if n .sp
+..
+'''
+''' Set up \*(-- to give an unbreakable dash;
+''' string Tr holds user defined translation string.
+'''
+.ie n \{\
+.tr \(*W-\*(Tr
+.ds -- \(*W-
+.if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+.if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
+.ds L" ""
+.ds R" ""
+.ds L' '
+.ds R' '
+'br\}
+.el\{\
+.ds -- \(em\|
+.tr \*(Tr
+.ds L" ``
+.ds R" ''
+.ds L' `
+.ds R' '
+'br\}
+.TH PAT 1 ram
+.SH NAME
+pat \- patch generator tools
+.SH SYNOPSIS
+.B pat
+[
+.B \-ahmnV
+] [
+.I filelist
+]
+.br
+.B patcil
+[
+.B \-abfhnpqsV
+] [
+.I filelist
+]
+.br
+.B patdiff
+[
+.B \-ahnV
+] [
+.I filelist
+]
+.br
+.B patbase
+[
+.B \-ahV
+] [
+.I filelist
+]
+.br
+.B patlog
+[
+.B \-hnruV
+]
+.br
+.B patmake
+[
+.B \-hV
+]
+.br
+.B patsend
+[
+.B \-hiquV
+] [
+.I patchlist
+] [
+.I recipients
+]
+.br
+.B patnotify
+[
+.B \-hquV
+] [
+.I recipients
+]
+.br
+.B patpost
+[
+.B \-hrV
+]
+.I patchlist
+.I newsgroups
+.br
+.B patftp
+[
+.B \-hV
+] [
+.I patchlist
+]
+.br
+.B patname
+[
+.B \-ahnmV
+]
+.B \-v
+.I version
+[
+.I filelist
+]
+.br
+.B patsnap
+[
+.B \-ahV
+] [
+.B \-o
+.I snapshot
+] [
+.I filelist
+]
+.br
+.B patcol
+[
+.B \-achnmsCV
+] [
+.B \-d
+.I directory
+] [
+.B \-f
+.I mani
+] [
+.B \-S
+.I snap
+] [
+.I filelist
+]
+.br
+.B patclean
+[
+.B \-ahnmV
+] [
+.I filelist
+]
+.br
+.B patindex
+.SH DESCRIPTION
+.I Pat
+and its associated programs generate patches for any package that has been
+stored under RCS.
+These programs hide many of the details of RCS that get in your way when
+constructing and maintaining a package.
+All you need to do to create a new patch is to edit your files, run pat,
+and furnish some descriptions to RCS and in the generated patch file.
+Details such as how to initialize a new RCS file, what the comment string should
+be, how create a new branch,
+how to deal with subdirectories, how to do diffs and how to
+organize the patch file are handled automatically.
+.PP
+Before using any of the pat programs you must initialize your package by
+running packinit in the top-level directory of your package.
+This produces a .package file that all of the dist programs make use of.
+.PP
+In any of the programs that want a filelist, if you specify
+.B \-a
+instead,
+all files in MANIFEST.new will be processed.
+In any of the programs that want a patchlist, a null patchlist means the
+current patch.
+You may use hyphens, commas and spaces to delimit patch numbers.
+If the right side of a hyphen is the null string, the current patchlevel
+is assumed as the maximum value. All the programs invoked with \fB\-h\fR
+will print a small usage message with the meaning of each available options.
+The \fB\-V\fR option gives the current version number.
+.PP
+Pat itself is a wrapper program that calls patcil, patdiff, and patmake.
+Usually you can just invoke pat and ignore all the others.
+Pat will update the MANIFEST file, if necessary (it will be an
+exact copy of the MANIFEST.new file, provided that a MANIFEST already
+existed), eventually calling patcil on it.
+.PP
+If you specify
+.B \-n
+instead of a filelist, pat will find all files that are
+newer than patchlevel.h, put you into an editor to trim down the list,
+then use that file list.
+If every file of the list is removed, \fIpat\fR will be aborted.
+.PP
+.I Patcil
+is used to do a ci -l on any listed files.
+(It is assumed that you always want to keep your files checked out.)
+In addition to the
+.B \-a
+switch, there is a
+.B \-b
+switch which does a quick checkin of
+a set of files.
+Instead of calling rcs on each file, it calls rcs on the whole list of
+files.
+This is useful for checking in a trunk revision.
+When you are checking in a new trunk revision you might also want to use
+the
+.B \-s
+flag which will strip out old RCS Log entries from the previous revision
+so that you can start over fresh.
+You probably should also use a
+.B \-f
+which is passed through to the ci to force unchanged files to be checked in.
+To check in a new trunk revision, I say
+.nf
+
+ patcil -s -f -a
+
+.fi
+.PP
+Patcil will ask for the log entry instead of letting ci do it, and has a little
+prompter built in that lets you manipulate the message in various ways.
+Type h for a listing of what you can do.
+One of the nicest things is that you can pop up into an editor, optionally
+with a diff listing of the changes since the last patch, in case you've
+forgotten what you changed.
+If you type a CR as the first thing, it includes the
+previous log message.
+Exit the prompter with a CR.
+.PP
+There are two different ways to use patcil.
+You can either call patcil yourself, or let pat call it for you.
+It doesn't matter how many times you call patcil before running pat, since
+patdiff knows what the last patch base is to compare with.
+Patcil can be called in any of your directories; the other programs must
+be called in your top-level directory (or in bugs, when meaningful).
+.PP
+When you are creating a new file at a given patchlevel, you must patcil it
+with the
+.B \-p
+option. Otherwise, it will simply be checked-in as
+a new trunk revision. The name of the file will be added to the MANIFEST.new
+if it does not already appear in it. If the name is found along with a
+description, that description will be passed through to rcs to properly
+initialize the RCS file.
+.PP
+.I Patbase
+can be used to reset the patch base to the current version when
+you've scrapped the previous patch sequence and are making a new distribution
+kit.
+What it really does is an rcs -Nlastpat:REV, where REV is the current
+revision.
+If patdiff blows up and you want to set the patch base back to some previous
+version, you have to call rcs -Nlastpat:REV yourself.
+.PP
+.I Patdiff
+actually does the diffs that go into the patch, comparing whatever
+version -Nlastpat points to with the most recently checked in version.
+It then updates -Nlastpat to point to the current version.
+It leaves the diff sitting in the bugs subdirectory for patmake to pick up.
+It can either use rcsdiff, or a diff command of your choice specified when
+you run packinit, in case your diff is better than rcsdiff.
+.PP
+.I Patlog
+is invoked by \fIpatmake\fR usually, to update the \fIChangeLog\fR file
+(or whatever name that file has been given when you ran \fIpackinit\fR).
+It will gather log messages and launch an editor for you to make the
+necessary updates.
+If you have configured your package to also include RCS logs
+in the \fIChangeLog\fR, another editor session will be launched for those
+too. Finally, a final log is built as a candidate entry for \fIChangeLog\fR,
+which you may also modify as you wish.
+.PP
+When you don't have configured a \fIChangeLog\fR file, \fIpatlog\fR will only
+gather the information it needs to pass on to \fIpatmake\fR and will exit.
+If you wish to call it yourself, you must do that after a least one
+sucessfull \fIpatdiff\fR run. I recommend using the \fB\-n\fR option the
+first time, and then use the \fB\-u\fR option along with \fB\-n\fR on
+subsequent runs to recreate files only when needed. The \fB\-r\fR option
+(which supersedes \fB\-u\fR) prevents \fIpatlog\fR from recreating an
+existing file, even if it is out of date.
+.PP
+.I Patlog
+will call \fIpatcil\fR and \fIpatdiff\fR on your \fIChangeLog\fR file
+(after having stuffed the candidate log entry you edited at the top of the
+file), unless prevented to do so by the \fB\-n\fR option. This means the
+issued patch will update \fIChangeLog\fR with current patch information, as
+you would expect it.
+.PP
+.I Patmake
+combines all the pieces of the patch into one file and invokes
+an editor so you can add the subject and description.
+It throws all your log messages in as Subjects and as Description, under
+the assumption
+that it's easier to delete what you don't want than to remember everything
+you did.
+You'll also want to expand each item in the Description so they don't just
+repeat the Subject lines. If you have a \fIChangeLog\fR file, this must have
+been done already, or your \fIChangeLog\fR will not accurately represent
+what is described in the patch, given that it has already been updated
+when \fIpatmake\fR puts together all the pieces (see the note
+about \fIpatlog\fR above).
+.PP
+Big patches will be split in order to keep size of each patch to a reasonable
+size. This is handled automatically, so you don't have to bother with it.
+The priority of each patch is merely intuited by \fIpatmake\fR, given the
+assumption that small changes have a great priority.
+.PP
+Patsend, patpost and patftp are used to distribute your patches to the world.
+.I Patsend
+mails a set of patches to a set of recipients. The \fB\-u\fR switch adds all
+the currently registered users who have asked for patches to be mailed to
+them, as well as the recipients specified while running \fIpackinit\fR.
+The \fB\-i\fR switch includes information with the patch about how the user
+may deregister themselves so they do not receive future patches automatically;
+this is also the default when the \fB\-u\fR switch is used.
+.I Patpost
+posts a set of patches to a set of newsgroups.
+.I Patftp
+merely copies the patch into your public ftp directory.
+.PP
+.I Patnotify
+simply notifies users that a new patch has been released so that
+they can retrieve it by themselves from an archive site or via e-mail if they
+are interested. The \fB\-u\fR switch can be used to include all the currently
+registered users who have asked for such a notification. The message includes
+the patch priority and description, as well as instructions on how to
+automatically request the patch (which will work only if you
+have \fImailagent\fR installed).
+.PP
+Both \fIpatsend\fR and \fIpatnotify\fR let you edit the address list before
+actually sending anything, unless you add the \fB\-q\fR option.
+.PP
+.I Patname
+can be used to tag a set of files with a symbolic name (specified with
+\fB\-v\fR). This will set the name for the most recent revision of each
+file.
+.PP
+.I Patsnap
+will get a snapshot of your release by creating a SNAPSHOT file (name can be
+changed via \fB\-o\fR) listing the file names and the latest RCS revision
+number for that file. Such snapshots can be used to identify the release
+at some random patchlevel and then later be able to retrieve it by feeding
+the snapshot file to \fIpatcol\fR.
+.PP
+.I Patcol
+will check out a locked version of a file, eventually in an alternate
+directory (specified with \fB\-d\fR, thus mirroring the distribution tree).
+All the files which have no RCS counterpart (e.g. patchlevel.h) will be
+simply copied by patcol. This is used by makedist to fake the distribution
+before making the kits. By default, patcol will not do the copyright expansion
+processing, but clients like \fImakedist\fR force it by using its \fB\-C\fR
+option. Alternatively, you may force copying of the checked-out version
+into a directory by using the \fB\-c\fR switch in conjunction with \fB\-d\fR
+(or that former switch is simply ignored).
+.PP
+.I Patcol
+can also take its file list from a SNAPSHOT file via the \fB\-S\fR switch, in
+which case it will check out the files using the RCS version specified by the
+snapshot file, such as one created by \fIpatsnap\fR. You may instead specify
+\fB-a\fR, \fB\-m\fR or \fB\-n\fR to respectively use all the files in
+MANIFEST.new, all the modified files (the one which have been \fIpatcil\fRed),
+or all the files newer than \fIpatchlevel.h\fR.
+.PP
+.I Patclean
+will remove the working files after having checked in all the
+changes. You may restores your working files by using patcol.
+.PP
+.I Patindex
+may be used from the top level directory or within the \fIbugs\fR directory.
+It will list all the patches and their \fISubject:\fR lines. This program
+knows about compressed patches and will decompress them while producing
+the listing.
+'''
+''' R C S L a y e r
+'''
+.SH RCS LAYER
+This section describes the RCS layer, in case something in the tools breaks,
+so that you may fix your RCS files and restart the operation.
+.PP
+All the patch tools get the main RCS trunk revision number out of your
+\&\fI.package\fR files, say it's 2.5. Then, at the time you ran \fIpackinit\fR,
+you have chosen a branch for patches, usually number 1, which means all your
+modifications will be stored on the 2.5.1 RCS branch. The tools will create
+the branch for you when the time comes.
+.PP
+Each last released revision is tagged with an RCS \fIlastpat\fR symbol. When
+the patch is built by \fIpatdiff\fR, the lattest version on the 2.5.1 branch
+is compared with the one tagged as \fIlastpat\fR. This is why you may safely
+issue more than one \fIpatcil\fR beffore issuing the patch and still have
+it all worked out. Of course \fIpatdiff\fR will move the \fIlastpat\fR
+tag to the lattest branch revision after processing a given file.
+.PP
+All the log messages and the modified files are kept in your \fIbugs\fR
+directory, in hidden files (name starting with a dot). Those logs will be
+collected when the patch is issued and the modified files are used by
+\&\fIpat\fR's \fB\-m\fR switch.
+.PP
+.I Patdiff
+collects its patch hunks under the \fIbugs\fR directory, in files
+terminating with a \fI.nn\fR extension, where \fInn\fR represents the
+current patch level + 1. (Which is going to be the next patchlevel when the
+patch will be made by \fIpatmake\fR, unless it is too big to fit in one
+file).
+.PP
+.I Patlog
+prepares a set of files for \fIpatmake\fR: the \fI.clog\fR file collects
+the information that will go under the Description: section within the
+patch, and \fI.xlog\fR ones collect the \fIChangeLog\fR candidate entry.
+Finally, \fI.rlog\fR files store the RCS information that is to be included
+in the \fIChangeLog\fR, if requested. Note that the topmost three lines
+are garbage and are ignored by all the tools handling those files.
+.PP
+In order to start up a new baseline (i.e. to change the RCS trunk revision
+number), you need to rerun \fIpackinit\fR and change that number. Then issue
+a new \fIpatcil\fR, probably with the \fB\-s\fR, \fB\-a\fR and \fB\-f\fR
+options...
+.SH FILES
+.PD 0
+.TP 15
+bugs/*.[0-9]+
+Diffs for each file, gathered by \fIpatmake\fR to create a patch
+.TP
+bugs/patch*
+Issued patches (can be compressed with \fIcompress\fR only)
+.TP
+bugs/.clog[0-9]+
+Description to be filled into the patch (or the first part if the patch is
+split into several parts).
+.TP
+bugs/.logs[0-9]+
+Log messages for that patch
+.TP
+bugs/.mods[0-9]+
+Files modified in that patch (checked in with \fIpatcil\fR)
+.TP
+bugs/.pri[0-9]+
+The priority of the next patch, computed
+by \fIpatlog\fR for \fIpatmake\fR's perusal.
+.TP
+bugs/.rlog[0-9]+
+The RCS logs computed by \fIpatlog\fR.
+.TP
+bugs/.subj[0-9]+
+The Subject: lines for the next patch, computed
+by \fIpatlog\fR for \fIpatmake\fR's perusal.
+.TP
+bugs/.xlog[0-9]+
+The candidate entry for \fIChangeLog\fR.
+.TP
+users
+File filled in by \fImailagent\fR's "@SH package" command, normally
+issued by Configure, recording some of the users who kindly registered
+themselves.
+.PD
+.SH ENVIRONMENT
+.PD 0
+.TP 15
+PAGER
+Which pager to use in patcil (overrides default)
+.TP
+EDITOR
+What editor should be used (overrides default)
+.TP
+VISUAL
+Same role as EDITOR but this one is checked first
+.PD
+.SH SEE ALSO
+makedist(1), metaconfig(1).
+.SH BUGS
+Most of this should be built into RCS.
+.SH AUTHORS
+Larry Wall (version 2.0).
+.br
+Raphael Manfredi <Raphael.Manfredi@pobox.com>.
+.rn }` ''
diff --git a/pat/patbase.SH b/pat/patbase.SH
new file mode 100755
index 0000000..e96ec55
--- /dev/null
+++ b/pat/patbase.SH
@@ -0,0 +1,122 @@
+case $CONFIG in
+'')
+ if test -f config.sh; then TOP=.;
+ elif test -f ../config.sh; then TOP=..;
+ elif test -f ../../config.sh; then TOP=../..;
+ elif test -f ../../../config.sh; then TOP=../../..;
+ elif test -f ../../../../config.sh; then TOP=../../../..;
+ else
+ echo "Can't find config.sh."; exit 1
+ fi
+ . $TOP/config.sh
+ ;;
+esac
+case "$0" in
+*/*) cd `expr X$0 : 'X\(.*\)/'` ;;
+esac
+echo "Extracting pat/patbase (with variable substitutions)"
+cat >patbase <<!GROK!THIS!
+$startperl
+ eval 'exec perl -S \$0 \${1+"\$@"}'
+ if \$running_under_some_shell;
+
+# $Id$
+#
+# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+#
+# You may redistribute only under the terms of the Artistic Licence,
+# as specified in the README file that comes with the distribution.
+# You may reuse parts of this distribution only within the terms of
+# that same Artistic Licence; a copy of which may be found at the root
+# of the source tree for dist 4.0.
+#
+# Original Author: Larry Wall <lwall@netlabs.com>
+#
+# $Log: patbase.SH,v $
+# Revision 3.0.1.3 1994/01/24 14:29:24 ram
+# patch16: added ~/.dist_profile awareness
+#
+# Revision 3.0.1.2 1993/08/24 12:15:58 ram
+# patch3: random cleanup
+#
+# Revision 3.0.1.1 1993/08/19 06:42:32 ram
+# patch1: leading config.sh searching was not aborting properly
+#
+# Revision 3.0 1993/08/18 12:10:38 ram
+# Baseline for dist 3.0 netwide release.
+#
+
+\$version = '$VERSION';
+\$patchlevel = '$PATCHLEVEL';
+!GROK!THIS!
+cat >>patbase <<'!NO!SUBS!'
+
+$progname = &profile; # My name
+
+require 'getopts.pl';
+&usage unless $#ARGV >= 0;
+&usage unless &Getopts("ahV");
+
+if ($opt_V) {
+ print STDERR "$progname $version PL$patchlevel\n";
+ exit 0;
+} elsif ($opt_h) {
+ &usage;
+}
+
+&readpackage;
+
+$RCSEXT = ',v' unless $RCSEXT;
+$TOPDIR = ''; # We are at the top-level directory
+
+if ($opt_a) {
+ open(MANI,"MANIFEST.new") || die "No MANIFEST.new found.\n";
+ @ARGV = ();
+ while (<MANI>) {
+ chop;
+ s|^\./||;
+ next if m|^patchlevel.h|; # Special file
+ ($_) = split(' ');
+ next if -d;
+ push(@ARGV,$_);
+ }
+ close MANI;
+}
+
+foreach $file (@ARGV) {
+ $files = &rcsargs($file);
+ @files = split(' ',$files);
+ $revs=0;
+ $rlog = `rlog -r$baserev -r$revbranch $files 2>&1`;
+ ($revs) = ($rlog =~ /selected revisions: (\d+)/);
+ if (!$revs) {
+ print "$progname: $file has never been checked in--checking in...\n";
+ system 'perl', '-S', 'patcil', $file;
+ }
+ elsif ($revs == 1) {
+ print "Last revision for $file is $baserev.\n";
+ system 'rcs', "-Nlastpat:$baserev", @files;
+ }
+ else {
+ ($lastrev) = ($rlog =~ /revision $revbranch\.(\d+)/);
+ print "Last revision for $file is $revbranch.$lastrev.\n";
+ system 'rcs', "-Nlastpat:$revbranch.$lastrev", @files;
+ }
+}
+
+sub usage {
+ print STDERR "Usage: $progname [-ahV] [filelist]\n";
+ print STDERR " -a : all the files in MANIFEST.new\n";
+ print STDERR " -h : print this message and exit\n";
+ print STDERR " -V : print version number and exit\n";
+ exit 1;
+}
+
+!NO!SUBS!
+$grep -v '^;#' ../pl/package.pl >>patbase
+$grep -v '^;#' ../pl/rcsargs.pl >>patbase
+$grep -v '^;#' ../pl/comment.pl >>patbase
+$grep -v '^;#' ../pl/tilde.pl >>patbase
+$grep -v '^;#' ../pl/profile.pl >>patbase
+chmod +x patbase
+$eunicefix patbase
diff --git a/pat/patchlevel.h b/pat/patchlevel.h
new file mode 100644
index 0000000..66b289a
--- /dev/null
+++ b/pat/patchlevel.h
@@ -0,0 +1,34 @@
+/*
+ * This is a prototypical patchlevel.h file. Only the line defining
+ * the PATCHLEVEL symbol is taken into account when patching, so be
+ * sure to make changes to this file ONLY when you start a new release
+ * and, of course, before running patcil...
+ *
+ * This file must appear in your MANIFEST.new, but it will never be
+ * checked in by the pat tools. It is automatically updated when a new
+ * patch is issued.
+ *
+ * When using the '-n' option in some pat* scripts, this file is
+ * taken as a timestamp. So it is best to avoid manual editing unless
+ * you know what you are doing.
+ */
+
+/*
+ * $Id$
+ *
+ * Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+ *
+ * You may redistribute only under the terms of the Artistic Licence,
+ * as specified in the README file that comes with the distribution.
+ * You may reuse parts of this distribution only within the terms of
+ * that same Artistic Licence; a copy of which may be found at the root
+ * of the source tree for dist 4.0.
+ *
+ * $Log: patchlevel.h,v $
+ * Revision 3.0 1993/08/18 12:10:39 ram
+ * Baseline for dist 3.0 netwide release.
+ *
+ */
+
+#define VERSION 3.0 /* For instance */
+#define PATCHLEVEL 0 /* This line is a mandatory */
diff --git a/pat/patcil.SH b/pat/patcil.SH
new file mode 100755
index 0000000..642bac2
--- /dev/null
+++ b/pat/patcil.SH
@@ -0,0 +1,541 @@
+case $CONFIG in
+'')
+ if test -f config.sh; then TOP=.;
+ elif test -f ../config.sh; then TOP=..;
+ elif test -f ../../config.sh; then TOP=../..;
+ elif test -f ../../../config.sh; then TOP=../../..;
+ elif test -f ../../../../config.sh; then TOP=../../../..;
+ else
+ echo "Can't find config.sh."; exit 1
+ fi
+ . $TOP/config.sh
+ ;;
+esac
+case "$0" in
+*/*) cd `expr X$0 : 'X\(.*\)/'` ;;
+esac
+echo "Extracting pat/patcil (with variable substitutions)"
+$cat >patcil <<!GROK!THIS!
+$startperl
+ eval 'exec perl -S \$0 \${1+"\$@"}'
+ if \$running_under_some_shell;
+
+# $Id$
+#
+# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+#
+# You may redistribute only under the terms of the Artistic Licence,
+# as specified in the README file that comes with the distribution.
+# You may reuse parts of this distribution only within the terms of
+# that same Artistic Licence; a copy of which may be found at the root
+# of the source tree for dist 4.0.
+#
+# Original Author: Larry Wall <lwall@netlabs.com>
+#
+# $Log: patcil.SH,v $
+# Revision 3.0.1.4 1994/10/29 16:42:12 ram
+# patch36: now honors the VISUAL and EDITOR environment variables
+# patch36: newer RCS programs chop trailing spaces in log messages
+# patch36: separated V/E and v/e commands
+# patch36: new 'v' command to edit the file being patcil'ed
+# patch36: added hook for 'V' command (not implemented yet)
+#
+# Revision 3.0.1.3 1994/01/24 14:30:04 ram
+# patch16: now prefix error messages with program's name
+# patch16: added ~/.dist_profile awareness
+#
+# Revision 3.0.1.2 1993/08/25 14:05:35 ram
+# patch6: moved geteditor to ../pl/editor.pl
+#
+# Revision 3.0.1.1 1993/08/19 06:42:33 ram
+# patch1: leading config.sh searching was not aborting properly
+#
+# Revision 3.0 1993/08/18 12:10:40 ram
+# Baseline for dist 3.0 netwide release.
+#
+
+\$defeditor = '$defeditor';
+\$pager = '$pager';
+\$version = '$VERSION';
+\$patchlevel = '$PATCHLEVEL';
+!GROK!THIS!
+cat >>patcil <<'!NO!SUBS!'
+
+$progname = &profile; # Read ~/.dist_profile
+require 'getopts.pl';
+&usage unless $#ARGV >= 0;
+&usage unless &Getopts("abfhnpqsV");
+
+if ($opt_V) {
+ print STDERR "$progname $version PL$patchlevel\n";
+ exit 0;
+} elsif ($opt_h) {
+ &usage;
+}
+
+$RCSEXT = ',v' unless $RCSEXT;
+$PAGER = $ENV{'PAGER'} || "$pager";
+$EDITOR = &geteditor;
+
+system 'mkdir', 'RCS' unless -d 'RCS';
+
+chop($pwd = `pwd`) unless -f '.package';
+until (-f '.package') {
+ die "$progname: no .package file! Run packinit.\n" unless $pwd;
+ chdir '..' || die "Can't cd ..";
+ $pwd =~ s|(.*)/(.*)|$1|;
+ $prefix = $2 . '/' . $prefix;
+}
+if ($prefix) {
+ for (@ARGV) {
+ s/^/$prefix/ unless m|^[-/]|;
+ }
+}
+
+# We now are at the top level
+
+&readpackage;
+
+if (-f 'patchlevel.h') {
+ open(PL,"patchlevel.h") || die "$progname: can't open patchlevel.h: $!\n";
+ while (<PL>) {
+ $bnum = $1 if /^#define\s+PATCHLEVEL\s+(\d+)/;
+ }
+ die "$progname: malformed patchlevel.h file.\n" if $bnum eq '';
+ ++$bnum;
+} else {
+ $bnum=1;
+}
+
+system 'mkdir', 'bugs' unless -d 'bugs';
+open(LOGS,">>bugs/.logs$bnum"); # Remember logs for patmake
+open(MODS,">>bugs/.mods$bnum"); # Remember modified files
+
+push(@sw,'-q') if $opt_q;
+push(@sw,'-f') if $opt_f;
+
+if ($opt_a) {
+ open(MANI,"MANIFEST.new") || die "$progname: can't read MANIFEST.new: $!\n";
+ @ARGV = ();
+ while (<MANI>) {
+ chop;
+ s|^\./||;
+ next if m|^patchlevel.h|; # Special file
+ ($_) = split(' ');
+ next if -d;
+ push(@ARGV,$_);
+ }
+ close MANI;
+} elsif ($opt_n) {
+ &newer;
+}
+
+@filelist = @ARGV;
+
+sub CLEANUP {
+ print "$progname: Warning: restore $ARGV\n";
+ exit 1;
+}
+
+if ($opt_s) {
+ open(TTY,">/dev/tty");
+ select(TTY);
+ $| = 1;
+ select(stdout);
+ $SIG{'INT'} = 'CLEANUP';
+ while (<>) {
+ if (/^(.*)\$Log[:\$]/) {
+ $comment = $1;
+ $comment =~ s/\s+$//; # Newer RCS chop spaces on emtpy lines
+ $len = length($comment);
+ print;
+ $lastnl = 1;
+ logline: while (<>) {
+ $c = substr($_,0,$len);
+ last logline unless $c eq $comment;
+ $_ = substr($_,$len,999);
+ if ($lastnl) {
+ unless (/^\s*Revision\s+\d/) {
+ $_ = $comment . $_;
+ last logline;
+ }
+ $lastnl = 0;
+ } else {
+ $lastnl = 1 if /^\s*$/;
+ }
+ }
+ }
+ }
+ continue {
+ print;
+ if ($ARGV ne $oldargv) {
+ print TTY "$progname: stripping $ARGV...\n";
+ $oldargv = $ARGV;
+ }
+ }
+ $SIG{'INT'} = 'DEFAULT';
+ close TTY;
+}
+
+if ($opt_b) {
+ $flist = &rcsargs(@filelist);
+ @flist=split(' ',$flist);
+ system 'rcs', '-u', @flist;
+ system 'rcs', "-l$revbranch", @flist;
+ system 'ci', '-l', "-r$revbranch", @sw, @flist;
+ exit 0;
+}
+
+open(MANI,"MANIFEST.new") || die "$progname: can't open MANIFEST.new: $!\n";
+while (<MANI>) {
+ # Find how many spaces the user wants before comments
+ $space || /(\S+\s+)\S+/ && ($space = length($1));
+ ($file,$file_comment) = m|(\S+)\s+(.*)|;
+ $inmani{$file} = 1; # File is listed in MANIFEST
+ $comment{$file} = $file_comment; # Save comments
+}
+close MANI;
+$space = 29 unless $space; # Default value
+
+file: foreach $file (@filelist) {
+ $files = &rcsargs($file);
+ @files = split(' ',$files);
+ $file = $files[1] if $file =~ /\.$RCSEXT$/;
+ unless ($inmani{$file}) {
+ print "$file does not appear to be in your MANIFEST.new--add? [y] ";
+ $ans = <stdin>;
+ if ($ans !~ /^n/i) {
+ print "MANIFEST.new comment? ";
+ $file_comment = <stdin>;
+ chop($file_comment);
+ $spacenum = $space - length($file);
+ $blank = " ";
+ $blank = " " x $spacenum unless $spacenum < 1;
+ `echo '${file}${blank}$file_comment' >>MANIFEST.new`;
+ if (-f 'MANIFEST') {
+ print "(Also adding file to your MANIFEST)\n";
+ # Add a (new) at the end, so the two manifests will
+ # differ and thus manifest will get patched correctly.
+ `echo '${file}${blank}$file_comment (new)' >>MANIFEST`;
+ print MODS "MANIFEST\n";
+ }
+ } else {
+ $file_comment = ""; # No file, no comment
+ }
+ }
+ $is_first = 0; # Suppose this is not the first cil
+ $revs = 0; # Makes revs a numeric variable
+ $rlog = `rlog -r$baserev -r$revbranch $files 2>&1`;
+ ($total) = ($rlog =~ /total revisions: (\d+)/);
+ ($revs) = ($rlog =~ /selected revisions: (\d+)/);
+ $comment = &rcscomment($file);
+ if (!$revs) {
+ if ($total) {
+ if ($rlog !~ /locks:\s*;/) {
+ system 'rcs', '-u', @files; # unlock branch
+ }
+ # New trunck revision
+ system 'rcs', '-l', @files; # lock trunk
+ }
+ else {
+ $file_comment = $comment{$file} if $inmani{$file};
+ if ($comment ne '') {
+ &feed($file_comment, 'rcs', '-i', "-c$comment", @files);
+ } else {
+ &feed($file_comment, 'rcs', '-i', @files);
+ }
+ }
+ if ($opt_p) { # check in null as trunk revision
+ rename($file, "$file.xxx");
+ `cp /dev/null $file` unless -f $file;
+ &cil_col("empty\n", $baserev);
+ system 'rcs', "-Nlastpat:$baserev", @files;
+ rename("$file.xxx", $file);
+ $mess = &getlog($file);
+ next file if $mess eq 'nope';
+ system 'rcs', '-u', @files; # Unlock trunck
+ &feed($mess, 'ci', "-l$revbranch", @sw, @files) unless $?;
+ } else {
+ $is_first = 1; # This is the first cil
+ $mess = &getlog($file);
+ next file if $mess eq 'nope';
+ &cil_col($mess, $baserev);
+ system 'rcs', "-Nlastpat:$baserev", @files;
+ }
+ } else {
+ if (!$opt_f) {
+ if ($revs == 1) {
+ $delta = `rcsdiff -r$baserev $files 2>/dev/null`;
+ } else {
+ $delta = `rcsdiff -r$revbranch $files 2>/dev/null`;
+ }
+ if ($delta eq '') { # No change in file
+ print "$progname: no changes in $file since last patcil.\n";
+ next; # Skip file
+ }
+ }
+ if ($revs == 1) {
+ $mess = &getlog($file);
+ next file if $mess eq 'nope';
+ &cil_cil($mess, $revbranch);
+ } else {
+ $mess = &getlog($file);
+ next file if $mess eq 'nope';
+ &cil_col($mess, $revbranch);
+ }
+ }
+}
+
+# Used for the first revisions on a branch
+sub cil_cil {
+ local($mess) = shift(@_);
+ local($rev) = shift(@_);
+ if (&feed($mess, 'ci', @sw, "-l$rev", @files)) {
+ print "$progname: unlocking and trying again...\n";
+ system 'rcs', '-u', @files;
+ &feed($mess, 'ci', @sw, "-l$rev", @files) unless $?;
+ }
+}
+
+# Run a ci -l on the file. If this fails, try to lock the file first.
+# If this fails again, try again with a separate checkout.
+sub cil_col {
+ local($mess) = shift(@_);
+ local($rev) = shift(@_);
+ if (&feed($mess, 'ci', @sw, "-l$rev", @files)) {
+ print "$progname: locking and trying again...\n";
+ if ($rev =~ /\d+\.\d+\.\d+/) {
+ system 'rcs', "-l$rev", @files; # Lock branch
+ } else {
+ system 'rcs', '-l', @files; # Lock trunck
+ }
+ if (&feed($mess, 'ci', @sw, "-l$rev", @files)) {
+ print "$progname: trying again with separate checkout...\n";
+ if (&feed($mess, 'ci', @sw, "-r$rev", @files)) {
+ system 'rcs', "-u$rev", @files unless $?;
+ system 'co', "-l$rev", @files unless $?;
+ } else {
+ print "$progname: sorry, giving up...\n";
+ }
+ }
+ }
+}
+
+sub feed {
+ local($mess) = shift(@_);
+ open(FORK,"|-") || exec @_;
+ print FORK $mess;
+ close FORK;
+ $?;
+}
+
+sub getlog {
+ local($file) = @_;
+ local($mess) = '';
+ local($prefix) = "patch$bnum: ";
+ local($prompt) = $comment;
+ local($len);
+ $prompt = '>> ' unless $prompt;
+ $prefix = '' if $is_first;
+ print "Type log message for $file (finish with ., CR for previous):\n";
+ try: for (;;) {
+ line: for (print "$prompt$prefix";;print "$prompt$prefix") {
+ if ($always) {
+ print "\n";
+ $line = '';
+ } else {
+ $line = <stdin>;
+ }
+ if ($line =~ /^\.?$/) {
+ if ($mess) {
+ last line;
+ } else {
+ $line = 'p';
+ }
+ }
+ if ($line =~ /^[h?]$/) {
+ print "
+CR or . Terminate log message.
+!<cmd> Start command in a subshell.
+D Print out diff listing since last patch.
+N Give name of the current file.
+E Call editor for log message with a diff listing.
+V Call editor for file with a context diff added to HISTORY.
+X Extract HISTORY and append it to current log message.
+a Always use this message.
+d Print out diff listing since last patcil.
+f Forget message I have so far.
+h or ? This help message.
+l List what I have so far.
+n Forget this file; go to next file if any.
+p Append previous message.
+r Print out the rlog for this file.
+e Call editor for log message.
+v Call editor for file.
+x Toggle patch# prefix.
+
+";
+ next line;
+ }
+ if ($line =~ /^!(.*)$/) {
+ $_ = $1;
+ $_ = ($ENV{'SHELL'} || "/bin/sh") if $1 eq '';
+ system $_;
+ next line;
+ }
+ if ($line =~ /^E$/) {
+ $mess .= "\n" . `rcsdiff -c -rlastpat $files`;
+ }
+ if ($line =~ /^e$/) {
+ $mess = &edit($mess);
+ next line;
+ }
+ if ($line =~ /^V$/) {
+ ######## FIXME #########
+ # Will do something like:
+ # &add_history($file, `rcsdiff -c -rlastpat $files`);
+ # HISTORY
+ # Extract or add this. Create it if not already there.
+ # $Log
+ # $EndLog <<-- stops HISTORY and COPYRIGHT lookup
+ ########################
+ print "HISTORY processing not implemented yet.\n";
+ print "(You have to use 'E' to get old 'V' processing).\n";
+ next line;
+ }
+ if ($line =~ /^v$/) {
+ system $EDITOR, $file;
+ next line;
+ }
+ if ($line =~ /^r$/) {
+ system "rlog $files | $PAGER";
+ next line;
+ }
+ if ($line =~ /^D$/) {
+ if ($revs == 0) {
+ print "Sorry. There is no revision for this file yet.\n";
+ } else {
+ system "rcsdiff -c -rlastpat $files | $PAGER";
+ }
+ next line;
+ }
+ if ($line =~ /^d$/) {
+ if ($revs == 0) {
+ print "Sorry. There is no revision for this file yet.\n";
+ }
+ elsif ($revs == 1) {
+ system "rcsdiff -c -r$baserev $files | $PAGER";
+ } else {
+ system "rcsdiff -c -r$revbranch $files | $PAGER";
+ }
+ next line;
+ }
+ if ($line =~ /^N$/) {
+ print "Typing log message for $file.\n";
+ next line;
+ }
+ if ($line =~ /^f$/) {
+ $mess = '';
+ next line;
+ }
+ if ($line =~ /^a$/) {
+ $always++ if $mess || $prevmess;
+ next line;
+ }
+ if ($line =~ /^n$/) {
+ $mess = 'nope';
+ last line;
+ }
+ if ($line =~ /^l$/) {
+ foreach $line (split(/\n/,$mess)) {
+ print $prompt,$line,"\n";
+ }
+ next line;
+ }
+ if ($line =~ /^p$/) {
+ $mess .= $prevmess;
+ foreach $line (split(/\n/,$prevmess)) {
+ print $prompt,$line,"\n";
+ }
+ next line;
+ }
+ if ($line =~ /^X$/) {
+ foreach $line (split(/\n/, &xtract_history($file))) {
+ $mess .= $prompt . $line . "\n";
+ print $prompt,$line,"\n";
+ }
+ next line;
+ }
+ if ($line =~ /^x$/) {
+ $prefix = $prefix ? '' : "patch$bnum: ";
+ next line;
+ }
+ $mess .= $prefix . $line;
+ $len = length($comment . $prefix . $line);
+ if ($len > 80) {
+ print "(Warning: last line longer than 80 chars)\n";
+ } elsif ($len > 72) { # In case of vi with line numbers
+ print "(Warning: last line longer than 72 chars)\n";
+ }
+ if (length($mess) > 511) {
+ print "You'll have to trim to less than 512 chars...\n";
+ sleep(3);
+ $mess = &edit($mess);
+ }
+ }
+ $mess = $prevmess if $mess eq '';
+ if (!$mess) {
+ print "No previous message, try again.\n";
+ next try;
+ }
+ if (length($mess) > 511) {
+ print "Sorry, that's too long; RCS won't take it. Try again...\n";
+ next try;
+ }
+ last try;
+ }
+ unless ($is_first) {
+ print LOGS $mess unless $mess eq 'nope';
+ print MODS "$file\n";
+ }
+ $prevmess = $mess unless $mess eq 'nope';
+ $mess; # Returned value
+}
+
+sub edit {
+ local($text) = join("\n", @_);
+ open(TMP,">/tmp/cil$$") || die "Can't create /tmp/cil$$";
+ print TMP $text;
+ close TMP;
+ system $EDITOR, "/tmp/cil$$";
+ $text = `cat /tmp/cil$$`;
+ unlink "/tmp/cil$$";
+ $text;
+}
+
+sub usage {
+ print STDERR <<EOM;
+Usage: $progname [-abfhnpqsV] [filelist]
+ -a : all the files in MANIFEST.new
+ -b : batch mode
+ -f : force check in (passed through to ci)
+ -h : print this message and exit
+ -n : all the files newer than patchlevel.h
+ -p : patching mode (null trunk revision if new file)
+ -q : ask rcs to be quiet
+ -s : strip log messages
+ -V : print version number and exit
+EOM
+ exit 1;
+}
+
+!NO!SUBS!
+$grep -v '^;#' ../pl/newer.pl >>patcil
+$grep -v '^;#' ../pl/package.pl >>patcil
+$grep -v '^;#' ../pl/rcsargs.pl >>patcil
+$grep -v '^;#' ../pl/comment.pl >>patcil
+$grep -v '^;#' ../pl/editor.pl >>patcil
+$grep -v '^;#' ../pl/tilde.pl >>patcil
+$grep -v '^;#' ../pl/profile.pl >>patcil
+chmod +x patcil
+$eunicefix patcil
diff --git a/pat/patclean.SH b/pat/patclean.SH
new file mode 100755
index 0000000..363e480
--- /dev/null
+++ b/pat/patclean.SH
@@ -0,0 +1,185 @@
+case $CONFIG in
+'')
+ if test -f config.sh; then TOP=.;
+ elif test -f ../config.sh; then TOP=..;
+ elif test -f ../../config.sh; then TOP=../..;
+ elif test -f ../../../config.sh; then TOP=../../..;
+ elif test -f ../../../../config.sh; then TOP=../../../..;
+ else
+ echo "Can't find config.sh."; exit 1
+ fi
+ . $TOP/config.sh
+ ;;
+esac
+case "$0" in
+*/*) cd `expr X$0 : 'X\(.*\)/'` ;;
+esac
+echo "Extracting pat/patclean (with variable substitutions)"
+cat >patclean <<!GROK!THIS!
+$startperl
+ eval 'exec perl -S \$0 \${1+"\$@"}'
+ if \$running_under_some_shell;
+
+# $Id$
+#
+# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+#
+# You may redistribute only under the terms of the Artistic Licence,
+# as specified in the README file that comes with the distribution.
+# You may reuse parts of this distribution only within the terms of
+# that same Artistic Licence; a copy of which may be found at the root
+# of the source tree for dist 4.0.
+#
+# $Log: patclean.SH,v $
+# Revision 3.0.1.2 1994/01/24 14:30:17 ram
+# patch16: now prefix error messages with program's name
+# patch16: added ~/.dist_profile awareness
+#
+# Revision 3.0.1.1 1993/08/19 06:42:33 ram
+# patch1: leading config.sh searching was not aborting properly
+#
+# Revision 3.0 1993/08/18 12:10:41 ram
+# Baseline for dist 3.0 netwide release.
+#
+
+\$version = '$VERSION';
+\$patchlevel = '$PATCHLEVEL';
+!GROK!THIS!
+cat >>patclean <<'!NO!SUBS!'
+
+$RCSEXT = ',v' unless $RCSEXT;
+
+$progname = &profile; # Read ~/.dist_profile
+require 'getopts.pl';
+&usage unless $#ARGV >= 0;
+&usage unless &Getopts("ahnmV");
+
+if ($opt_V) {
+ print STDERR "$progname $version PL$patchlevel\n";
+ exit 0;
+} elsif ($opt_h) {
+ &usage;
+}
+
+$RCSEXT = ',v' unless $RCSEXT;
+$ENV{'DIST'} = '/dev/null'; # Disable ~/.dist_profile
+
+chop($pwd = `pwd`) unless -f '.package';
+until (-f '.package') {
+ die "$progname: no .package file! Run packinit.\n" unless $pwd;
+ chdir '..' || die "$progname: can't cd ..: $!\n";
+ $pwd =~ s|(.*)/(.*)|$1|;
+ $prefix = $2 . '/' . $prefix;
+}
+if ($prefix) {
+ for (@ARGV) {
+ s/^/$prefix/ unless m|^[-/]|;
+ }
+}
+
+# We now are at the top level
+
+&readpackage;
+
+if ($opt_n) {
+ &newer; # Look for files newer than patchlevel.h
+} elsif ($opt_a) {
+ open(MANI,"MANIFEST.new") || die "$progname: can't read MANIFEST.new: $!\n";
+ @ARGV = ();
+ while (<MANI>) {
+ s|^\./||;
+ next if m|^patchlevel.h|; # This file is built by hand
+ chop;
+ ($_) = split(' ');
+ next if -d;
+ push(@ARGV,$_);
+ }
+ close MANI;
+} elsif ($opt_m) {
+ open(MODS,"bugs/.mods$bnum") || die "$progname: no modification found.\n";
+ @ARGV = ();
+ while (<MODS>) {
+ next if m|^patchlevel.h$|; # This file is built by hand
+ chop;
+ ($_) = split(' ');
+ push(@ARGV,$_);
+ }
+ close MODS;
+}
+
+# Set a temporary file for check outs
+$TMPFILE = "/tmp/cl$$.tmp";
+
+# Now loop over each file specified, doing a 'rcsclean'
+foreach $file (@ARGV) {
+ if (-f $file) {
+ $files = &rcsargs($file);
+ @files = split(' ', $files);
+ $rlog = `rlog -rlastpat- $files 2>&1`;
+ ($revs) = ($rlog =~ /selected revisions: (\d+)/);
+ if (!$revs) {
+ print "$progname: $file has never been checked in--checking in...\n";
+ system 'perl', '-S', 'patcil', '-p', $file;
+ $revs = 2; # At least null trunk + new fresh revision
+ }
+ # Look whether there is a branch
+ if ($revs == 1) {
+ $rlog = `rlog -r$revbranch $files 2>&1`;
+ ($revs) = ($rlog =~ /selected revisions: (\d+)/);
+ $revs++; # add the base revision
+ }
+ # We must only give the name of the RCS revision file, i.e. $files[1]
+ if ($revs == 1) {
+ system "co -q -p$baserev $files[1] > $TMPFILE";
+ } else {
+ system "co -q -p$revbranch $files[1] > $TMPFILE";
+ }
+ if ($? == 0) {
+ system 'cmp', '-s', $file, $TMPFILE;
+ if ($? == 0) {
+ unlink $file;
+ print "$progname: $file removed.\n";
+ } else {
+ # Check in file and make sure all was ok
+ system 'perl', '-S', 'patcil', '-p', $file;
+ system "co -q -p$revbranch $files[1] > $TMPFILE";
+ if ($? == 0) {
+ system 'cmp', '-s', $file, $TMPFILE;
+ if ($? == 0) {
+ unlink $file;
+ print "$progname: $file removed.\n";
+ } else {
+ print "$progname: $file NOT removed.\n";
+ }
+ } else {
+ print "$progname: could not check out--$file NOT removed.\n";
+ }
+ }
+ } else {
+ print "$progname: no revision--$file NOT removed.\n";
+ }
+ }
+}
+
+unlink "$TMPFILE";
+
+sub usage {
+ print STDERR <<EOM;
+Usage: $progname [-ahnmV] [filelist]
+ -a : all the files in MANIFEST.new
+ -h : print this message and exit
+ -n : all the files newer than patchlevel.h
+ -m : all the modified files (which have been patciled)
+ -V : print version number and exit
+EOM
+ exit 1;
+}
+
+!NO!SUBS!
+$grep -v '^;#' ../pl/newer.pl >>patclean
+$grep -v '^;#' ../pl/package.pl >>patclean
+$grep -v '^;#' ../pl/rcsargs.pl >>patclean
+$grep -v '^;#' ../pl/tilde.pl >>patclean
+$grep -v '^;#' ../pl/profile.pl >>patclean
+chmod +x patclean
+$eunicefix patclean
diff --git a/pat/patcol.SH b/pat/patcol.SH
new file mode 100755
index 0000000..61c9310
--- /dev/null
+++ b/pat/patcol.SH
@@ -0,0 +1,235 @@
+case $CONFIG in
+'')
+ if test -f config.sh; then TOP=.;
+ elif test -f ../config.sh; then TOP=..;
+ elif test -f ../../config.sh; then TOP=../..;
+ elif test -f ../../../config.sh; then TOP=../../..;
+ elif test -f ../../../../config.sh; then TOP=../../../..;
+ else
+ echo "Can't find config.sh."; exit 1
+ fi
+ . $TOP/config.sh
+ ;;
+esac
+case "$0" in
+*/*) cd `expr X$0 : 'X\(.*\)/'` ;;
+esac
+echo "Extracting pat/patcol (with variable substitutions)"
+cat >patcol <<!GROK!THIS!
+$startperl
+ eval 'exec perl -S \$0 \${1+"\$@"}'
+ if \$running_under_some_shell;
+
+# $Id$
+#
+# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+#
+# You may redistribute only under the terms of the Artistic Licence,
+# as specified in the README file that comes with the distribution.
+# You may reuse parts of this distribution only within the terms of
+# that same Artistic Licence; a copy of which may be found at the root
+# of the source tree for dist 4.0.
+#
+# $Log: patcol.SH,v $
+# Revision 3.0.1.3 1994/01/24 14:30:25 ram
+# patch16: now prefix error messages with program's name
+# patch16: added ~/.dist_profile awareness
+#
+# Revision 3.0.1.2 1993/08/24 12:16:30 ram
+# patch3: new -S option for snapshot check-outs
+#
+# Revision 3.0.1.1 1993/08/19 06:42:34 ram
+# patch1: leading config.sh searching was not aborting properly
+#
+# Revision 3.0 1993/08/18 12:10:42 ram
+# Baseline for dist 3.0 netwide release.
+#
+
+\$version = '$VERSION';
+\$patchlevel = '$PATCHLEVEL';
+!GROK!THIS!
+cat >>patcol <<'!NO!SUBS!'
+
+$progname = &profile; # Read ~/.dist_profile
+require 'getopts.pl';
+&usage unless $#ARGV >= 0;
+&usage unless &Getopts("acd:f:hnmsCRS:V");
+
+if ($opt_V) {
+ print STDERR "$progname $version PL$patchlevel\n";
+ exit 0;
+} elsif ($opt_h) {
+ &usage;
+}
+
+$RCSEXT = ',v' unless $RCSEXT;
+$NEWMANI = 'MANIFEST.new' unless $NEWMANI = $opt_f;
+
+chop($pwd = `pwd`) unless -f '.package';
+until (-f '.package') {
+ die "$progname: no .package file! Run packinit.\n" unless $pwd;
+ chdir '..' || die "$progname: can't cd ..: $!";
+ $pwd =~ s|(.*)/(.*)|$1|;
+ $prefix = $2 . '/' . $prefix;
+}
+if ($prefix) {
+ for (@ARGV) {
+ s/^/$prefix/ unless m|^[-/]|;
+ }
+}
+
+# We now are at the top level
+
+&readpackage;
+undef $opt_C unless -f $copyright;
+&copyright'init($copyright) if $opt_C;
+&makedir($opt_d) if $opt_d;
+
+undef $opt_c unless $opt_d; # Disable -c if not -d
+undef $opt_R unless $opt_d; # Disable -R if not -d
+push(@sw, '-q') if $opt_s; # Let RCS work quietly
+
+if ($opt_n) {
+ &newer; # Look for files newer than patchlevel.h
+} elsif ($opt_a) {
+ open(MANI, $NEWMANI) || die "No $NEWMANI found.\n";
+ @ARGV = ();
+ while (<MANI>) {
+ s|^\./||;
+ next if m|^patchlevel.h| && !$opt_d; # This file is built by hand
+ chop;
+ ($_) = split(' ');
+ next if -d;
+ push(@ARGV,$_);
+ }
+ close MANI;
+} elsif ($opt_m) {
+ open(MODS,"bugs/.mods$bnum") || die "$progname: no modification found.\n";
+ @ARGV = ();
+ while (<MODS>) {
+ next if m|^patchlevel.h$|; # This file is built by hand
+ chop;
+ ($_) = split(' ');
+ next if -d;
+ push(@ARGV,$_);
+ }
+ close MODS;
+} elsif ($opt_S) {
+ &readsnapshot($opt_S);
+ foreach $file (sort keys %Snap) {
+ push(@ARGV, $file);
+ }
+}
+
+# Now loop over each file specified, doing a 'co -l'
+foreach $file (@ARGV) {
+ if ($opt_c && -f $file) {
+ &copy_file($file, $opt_d);
+ next;
+ }
+ # Continue only if file does not exist or option -d was used.
+ if (! -f $file || $opt_d) {
+ $files = &rcsargs($file);
+ @files = split(' ', $files);
+ if ($opt_S && ($rev = $Snap{$file}) ne '') { # Use snapshot file
+ &col($rev);
+ next;
+ }
+ $rlog = `rlog -rlastpat- $files 2>&1`;
+ ($revs) = ($rlog =~ /selected revisions: (\d+)/);
+ if (!$revs) {
+ if ($opt_d) {
+ &copy_file($file, $opt_d);
+ } else {
+ print STDERR "$progname: $file has never been checked in\n";
+ }
+ } else {
+ # Look whether there is a branch
+ if ($revs == 1) {
+ $rlog = `rlog -r$revbranch $files 2>&1`;
+ ($revs) = ($rlog =~ /selected revisions: (\d+)/);
+ $revs++; # add the base revision (trunk)
+ }
+ if ($revs == 1) {
+ &col($baserev);
+ } else {
+ &col($revbranch);
+ }
+ }
+
+ }
+}
+
+# Run co -l on @files, unlock file if it fails and retry.
+# If '-d' option was used, we check out in the specified
+# directory, after having made all the necessary directories
+# in the path name (which should be relative to the top).
+sub col {
+ local($rev) = shift; # Revision to be checked out.
+ if (! $opt_d) {
+ if (system 'co', "-l$rev", @sw, @files) {
+ print "$progname: unlocking and trying again...\n" unless $opt_s;
+ system 'rcs', '-u', @sw, @files;
+ system 'co', "-l$rev", @sw, @files unless $?;
+ }
+ } else {
+ local($name) = $files[0]; # First element is file name
+ $_ = $name;
+ s|(.*)/.*|\1| && &makedir("$opt_d/$_");
+ if ($opt_C) {
+ &copyright'expand("co -p @sw -r$rev $files[1]", "$opt_d/$name");
+ } else {
+ system "co -p -r$rev @sw $files[1] > $opt_d/$name";
+ }
+ system 'perl', '-pi', '-e', 's|Lock[e]r:.*\$|\$|;', "$opt_d/$name"
+ if $opt_R;
+ # If RCS file has x bits set, add them on new file
+ -x $files[1] && chmod(0755, "$opt_d/$name");
+ }
+}
+
+# Copy file into directory, eventually performing copyright expansion...
+sub copy_file {
+ local($file, $dir) = @_;
+ local($base) = $file =~ m|^(.*)/.*|;
+ &makedir("$dir/$base");
+ if ($opt_C) {
+ &copyright'expand("cat $file", "$dir/$file");
+ } else {
+ system 'cp', "$file", "$dir/$file";
+ }
+ system 'perl', '-pi', '-e', 's|Lock[e]r:.*\$|\$|;', "$dir/$file" if $opt_R;
+ -x $file && chmod(0755, "$dir/$file");
+ print "$progname: $file has been copied\n" unless $opt_s;
+}
+
+sub usage {
+ print STDERR <<EOM;
+Usage: $progname [-achnmsCRV] [-d directory] [-f mani] [-S snap] [filelist]
+ -a : all the files in MANIFEST.new (see also -f)
+ -c : copy files if checked-out copy exists (only when -d)
+ -d : check out (or copy) in the specified directory
+ -f : use supplied file instead of MANIFEST.new
+ -h : print this message and exit
+ -n : all the files newer than patchlevel.h
+ -m : all the modified files (which have been patciled)
+ -s : silent mode
+ -C : perform copyright expansion on checked out (or copied) file
+ -R : strip out RCS \$Locker marker from checked-out file (only when -d)
+ -S : use snapshot file to determine file list and RCS revisions
+ -V : print version number and exit
+EOM
+ exit 1;
+}
+
+!NO!SUBS!
+$grep -v '^;#' ../pl/newer.pl >>patcol
+$grep -v '^;#' ../pl/package.pl >>patcol
+$grep -v '^;#' ../pl/rcsargs.pl >>patcol
+$grep -v '^;#' ../pl/copyright.pl >>patcol
+$grep -v '^;#' ../pl/makedir.pl >>patcol
+$grep -v '^;#' ../pl/snapshot.pl >>patcol
+$grep -v '^;#' ../pl/tilde.pl >>patcol
+$grep -v '^;#' ../pl/profile.pl >>patcol
+chmod +x patcol
+$eunicefix patcol
diff --git a/pat/patdiff.SH b/pat/patdiff.SH
new file mode 100755
index 0000000..0c74c9a
--- /dev/null
+++ b/pat/patdiff.SH
@@ -0,0 +1,236 @@
+case $CONFIG in
+'')
+ if test -f config.sh; then TOP=.;
+ elif test -f ../config.sh; then TOP=..;
+ elif test -f ../../config.sh; then TOP=../..;
+ elif test -f ../../../config.sh; then TOP=../../..;
+ elif test -f ../../../../config.sh; then TOP=../../../..;
+ else
+ echo "Can't find config.sh."; exit 1
+ fi
+ . $TOP/config.sh
+ ;;
+esac
+case "$0" in
+*/*) cd `expr X$0 : 'X\(.*\)/'` ;;
+esac
+echo "Extracting pat/patdiff (with variable substitutions)"
+cat >patdiff <<!GROK!THIS!
+$startperl
+ eval 'exec perl -S \$0 \${1+"\$@"}'
+ if \$running_under_some_shell;
+
+# $Id$
+#
+# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+#
+# You may redistribute only under the terms of the Artistic Licence,
+# as specified in the README file that comes with the distribution.
+# You may reuse parts of this distribution only within the terms of
+# that same Artistic Licence; a copy of which may be found at the root
+# of the source tree for dist 4.0.
+#
+# Original Author: Larry Wall <lwall@netlabs.com>
+#
+# $Log: patdiff.SH,v $
+# Revision 3.0.1.2 1994/01/24 14:30:36 ram
+# patch16: now prefix error messages with program's name
+# patch16: added ~/.dist_profile awareness
+#
+# Revision 3.0.1.1 1993/08/19 06:42:35 ram
+# patch1: leading config.sh searching was not aborting properly
+#
+# Revision 3.0 1993/08/18 12:10:43 ram
+# Baseline for dist 3.0 netwide release.
+#
+
+\$version = '$VERSION';
+\$patchlevel = '$PATCHLEVEL';
+!GROK!THIS!
+cat >>patdiff <<'!NO!SUBS!'
+
+$RCSEXT = ',v' unless $RCSEXT;
+$TOPDIR = ''; # We are at top-level directory
+
+$progname = &profile; # Read ~/.dist_profile
+require 'getopts.pl';
+&usage unless $#ARGV >= 0;
+&usage unless &Getopts("ahnV");
+
+if ($opt_V) {
+ print STDERR "$progname $version PL$patchlevel\n";
+ exit 0;
+} elsif ($opt_h) {
+ &usage;
+}
+
+&readpackage;
+&copyright'init($copyright) if -f $copyright;
+
+system 'mkdir', 'bugs' unless -d 'bugs';
+
+if (-f 'patchlevel.h') {
+ open(PL,"patchlevel.h") || die "$progname: can't open patchlevel.h: $!\n";
+ while (<PL>) {
+ $bnum = $1 if /^#define\s+PATCHLEVEL\s+(\d+)/;
+ }
+ die "$progname: malformed patchlevel.h file.\n" if $bnum eq '';
+ ++$bnum;
+} else {
+ $bnum=1;
+}
+
+if ($opt_a) {
+ open(MANI,"MANIFEST.new") || die "$progname: can't read MANIFEST.new: $!\n";
+ @ARGV = ();
+ while (<MANI>) {
+ chop;
+ ($_) = split(' ');
+ next if -d;
+ push(@ARGV,$_);
+ }
+ close MANI;
+}
+
+foreach $file (@ARGV) {
+ next if ($file =~ /^patchlevel.h$/); # Skip patchlevel.h
+ if (! -f $file) {
+ print "$progname: $file not found.\n";
+ next;
+ }
+ $files = &rcsargs($file);
+ @files = split(' ',$files);
+ $new='';
+ $revs=0;
+ $rlog = `rlog -rlastpat- $files 2>&1`;
+ ($lastpat) = ($rlog =~ /lastpat: ([\d.]+)/);
+ ($revs) = ($rlog =~ /selected revisions: (\d+)/);
+ if (!$revs) {
+ print "$progname: no cil has been done on $file.\n" ;;
+ } elsif ($revs == 1) {
+ ($base) = ($rlog =~ /.*\nrevision\s+(\S+)/);
+ ($a,$b,$c,$d) = split(/\./,$base);
+ if ($d ne '') {
+ if (!$opt_n) {
+ print
+ "$progname: no changes in $file since last patch. (Did you cil it?)\n";
+ next; # Skip file with no changes
+ } else {
+ $new='foo';
+ }
+ } else {
+ $revs=0;
+ $rlog = `rlog -r$revbranch- $files 2>&1`;
+ ($revs) = ($rlog =~ /selected revisions: (\d+)/);
+ if (!$revs) {
+ print
+ "$progname: no changes in $file since base version. (Did you cil it?)\n";
+ next; # Skip file with no changes
+ } else {
+ ($new) = ($rlog =~ /\nrevision\s*(\d+\.\d+\.\d+\.\d+)/);
+ }
+ }
+ } else {
+ ($new) = ($rlog =~ /\nrevision\s*(\d+\.\d+\.\d+\.\d+)/);
+ }
+ if ($new ne '') {
+ ($fname = $file) =~ s|.*/||;
+ $fname = substr($fname, 0, 11); # For filsystems with short names
+ open(PATCH,">>bugs/$fname.$bnum") || die "Can't make patch";
+ print PATCH "\nIndex: $file\n";
+ open(CO,"co -p -rlastpat $files 2>/dev/null |");
+ while (<CO>) {
+ if (/\$Header/ || /\$Id/) {
+ print PATCH "Prereq: $lastpat\n";
+ last;
+ }
+ }
+ close CO;
+ if (!$opt_n) {
+ if ($mydiff eq '') {
+ open(DIFF,"rcsdiff -c -rlastpat -r$new $files |") ||
+ die "$progname: can't fork rcsdiff: $!\n";
+ while (<DIFF>) {
+ if ($. == 1) {s|\*\*\* \S+ |*** $file.old |;}
+ if ($. == 2) {s|--- \S+ |--- $file |;}
+ s|Lock[e]r:.*\$|\$|; # Use [e] to make it safe on itself
+ print PATCH;
+ }
+ close DIFF;
+ system 'rcs', "-Nlastpat:$new", @files;
+ } else {
+ &copyright'expand("co -p -rlastpat $file", "/tmp/pdo$$");
+ &copyright'expand("co -p -r$new $file", "/tmp/pdn$$");
+ open(DIFF, "$mydiff /tmp/pdo$$ /tmp/pdn$$ |") ||
+ die "Can't run $mydiff";
+ while (<DIFF>) { # Contextual or unified diff
+ if ($. == 1) {
+ s|\*\*\* \S+ |*** $file.old | ||
+ s|--- \S+ |--- $file.old |;
+ }
+ if ($. == 2) {
+ s|--- \S+ |--- $file | ||
+ s|\+\+\+ \S+ |+++ $file |;
+ }
+ s|Lock[e]r:.*\$|\$|; # Remove locker mark
+ print PATCH;
+ }
+ close DIFF;
+ system 'rcs', "-Nlastpat:$new", @files;
+ unlink "/tmp/pdn$$", "/tmp/pdo$$";
+ }
+ } else {
+ if ($mydiff eq '') {
+ open(DIFF,"rcsdiff -c -rlastpat $files |") ||
+ die "Can't run rcsdiff";
+ while (<DIFF>) {
+ if ($. == 1) {s|\*\*\* \S+ |*** $file.old |;}
+ if ($. == 2) {s|--- \S+ |--- $file |;}
+ s|Lock[e]r:.*\$|\$|; # Remove locker mark
+ print PATCH;
+ }
+ close DIFF;
+ } else {
+ system "co -p -rlastpat $files >/tmp/pdo$$";
+ system "cp $file /tmp/pdn$$";
+ open(DIFF, "$mydiff /tmp/pdo$$ /tmp/pdn$$ |") ||
+ die "$progname: can't fork $mydiff: $!\n";
+ while (<DIFF>) {
+ # Contextual or unified diff
+ if ($. == 1) {
+ s|\*\*\* \S+ |*** $file.old |;
+ s|--- \S+ |--- $file.old |;
+ }
+ if ($. == 2) {
+ s|--- \S+ |--- $file |;
+ s|\+\+\+ \S+ |+++ $file |;
+ }
+ s|Lock[e]r:.*\$|\$|; # Remove locker mark
+ print PATCH;
+ }
+ close DIFF;
+ unlink "/tmp/pdn$$", "/tmp/pdo$$";
+ }
+ }
+ }
+}
+
+sub usage {
+ print STDERR <<EOM;
+Usage: $progname [-ahnV] [filelist]
+ -a : all the files in MANIFEST.new
+ -h : print this message and exit
+ -n : non update mode
+ -V : print version number and exit
+EOM
+ exit 1;
+}
+
+!NO!SUBS!
+$grep -v '^;#' ../pl/package.pl >>patdiff
+$grep -v '^;#' ../pl/rcsargs.pl >>patdiff
+$grep -v '^;#' ../pl/copyright.pl >>patdiff
+$grep -v '^;#' ../pl/tilde.pl >>patdiff
+$grep -v '^;#' ../pl/profile.pl >>patdiff
+chmod +x patdiff
+$eunicefix patdiff
diff --git a/pat/patftp.SH b/pat/patftp.SH
new file mode 100755
index 0000000..d14fd46
--- /dev/null
+++ b/pat/patftp.SH
@@ -0,0 +1,118 @@
+case $CONFIG in
+'')
+ if test -f config.sh; then TOP=.;
+ elif test -f ../config.sh; then TOP=..;
+ elif test -f ../../config.sh; then TOP=../..;
+ elif test -f ../../../config.sh; then TOP=../../..;
+ elif test -f ../../../../config.sh; then TOP=../../../..;
+ else
+ echo "Can't find config.sh."; exit 1
+ fi
+ . $TOP/config.sh
+ ;;
+esac
+case "$0" in
+*/*) cd `expr X$0 : 'X\(.*\)/'` ;;
+esac
+echo "Extracting pat/patftp (with variable substitutions)"
+cat >patftp <<!GROK!THIS!
+$startperl
+ eval 'exec perl -S \$0 \${1+"\$@"}'
+ if \$running_under_some_shell;
+
+# $Id$
+#
+# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+#
+# You may redistribute only under the terms of the Artistic Licence,
+# as specified in the README file that comes with the distribution.
+# You may reuse parts of this distribution only within the terms of
+# that same Artistic Licence; a copy of which may be found at the root
+# of the source tree for dist 4.0.
+#
+# Original Author: Larry Wall <lwall@netlabs.com>
+#
+# $Log: patftp.SH,v $
+# Revision 3.0.1.3 1994/01/24 14:30:43 ram
+# patch16: now prefix error messages with program's name
+# patch16: added ~/.dist_profile awareness
+#
+# Revision 3.0.1.2 1993/08/24 12:16:57 ram
+# patch3: removed useless orgname variable
+#
+# Revision 3.0.1.1 1993/08/19 06:42:36 ram
+# patch1: leading config.sh searching was not aborting properly
+#
+# Revision 3.0 1993/08/18 12:10:44 ram
+# Baseline for dist 3.0 netwide release.
+#
+
+\$version = '$VERSION';
+\$patchlevel = '$PATCHLEVEL';
+!GROK!THIS!
+cat >>patftp <<'!NO!SUBS!'
+
+$progname = &profile; # Read ~/.dist_profile
+require 'getopts.pl';
+&usage unless &Getopts("hV");
+
+if ($opt_V) {
+ print STDERR "$progname $version PL$patchlevel\n";
+ exit 0;
+} elsif ($opt_h) {
+ &usage;
+}
+
+$RCSEXT = ',v' unless $RCSEXT;
+chdir '..' if -d '../bugs';
+
+&readpackage;
+
+if ($#ARGV < 0) {
+ open(PL,"patchlevel.h") || die "$progname: can't open patchlevel.h: $!\n";
+ while (<PL>) {
+ $argv = $1 if /^#define\s+PATCHLEVEL\s+(\d+)/;
+ }
+ close PL;
+ die "$progname: malformed patchlevel.h file.\n" if $argv eq '';
+ @ARGV = $argv;
+} else {
+ for (@ARGV) {
+ s/^patch//;
+ }
+ $argv = &rangeargs(@ARGV);
+ @ARGV = split(' ',$argv);
+}
+
+if ($#ARGV < 0) {
+ print STDERR "$progname: no patches specified.\n";
+ &usage;
+} elsif ($#ARGV) {
+ print "$progname: copying $package $baserev patches $argv to $ftpdir...\n";
+} else {
+ print "$progname: copying $package $baserev patch $argv to $ftpdir...\n";
+}
+
+chdir 'bugs' || die "$progname: can't cd to bugs: $!\n";
+
+until ($#ARGV < 0) {
+ $patnum = shift;
+ `cp patch$patnum $ftpdir`;
+}
+
+sub usage {
+ print STDERR <<EOM;
+Usage: $progname [-hV] patchlist
+ -h : print this message and exit
+ -V : print version number and exit
+EOM
+ exit 1;
+}
+
+!NO!SUBS!
+$grep -v '^;#' ../pl/package.pl >>patftp
+$grep -v '^;#' ../pl/rangeargs.pl >>patftp
+$grep -v '^;#' ../pl/tilde.pl >>patftp
+$grep -v '^;#' ../pl/profile.pl >>patftp
+chmod +x patftp
+$eunicefix patftp
diff --git a/pat/patindex.SH b/pat/patindex.SH
new file mode 100755
index 0000000..83e175b
--- /dev/null
+++ b/pat/patindex.SH
@@ -0,0 +1,66 @@
+case $CONFIG in
+'')
+ if test -f config.sh; then TOP=.;
+ elif test -f ../config.sh; then TOP=..;
+ elif test -f ../../config.sh; then TOP=../..;
+ elif test -f ../../../config.sh; then TOP=../../..;
+ elif test -f ../../../../config.sh; then TOP=../../../..;
+ else
+ echo "Can't find config.sh."; exit 1
+ fi
+ . $TOP/config.sh
+ ;;
+esac
+case "$0" in
+*/*) cd `expr X$0 : 'X\(.*\)/'` ;;
+esac
+echo "Extracting pat/patindex (with variable substitutions)"
+$spitshell >patindex <<!GROK!THIS!
+$startsh
+
+# $Id$
+#
+# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+#
+# You may redistribute only under the terms of the Artistic Licence,
+# as specified in the README file that comes with the distribution.
+# You may reuse parts of this distribution only within the terms of
+# that same Artistic Licence; a copy of which may be found at the root
+# of the source tree for dist 4.0.
+#
+# Original Author: Larry Wall <lwall@netlabs.com>
+#
+# $Log: patindex.SH,v $
+# Revision 3.0.1.1 1993/08/19 06:42:37 ram
+# patch1: leading config.sh searching was not aborting properly
+#
+# Revision 3.0 1993/08/18 12:10:44 ram
+# Baseline for dist 3.0 netwide release.
+#
+
+zcat='$zcat'
+test='$test'
+sed='$sed'
+grep='$grep'
+
+!GROK!THIS!
+$spitshell >>patindex <<'!NO!SUBS!'
+if test -d bugs; then
+ cd bugs
+fi
+for i in patch? patch??; do
+ if $test -f $i; then
+ echo "=== $i ==="
+ $grep '^Subject: ' $i | $sed 's/^patch\(.*\):Subject/\1/'
+ fi
+done
+for i in patch?.Z patch??.Z; do
+ if $test -f $i; then
+ name=`echo $i | $sed "s|\.Z$||"`
+ echo "=== $name ==="
+ $zcat $i | $grep '^Subject: ' | $sed 's/^patch\(.*\):Subject/\1/'
+ fi
+done
+!NO!SUBS!
+chmod 755 patindex
+$eunicefix patindex
diff --git a/pat/patlog.SH b/pat/patlog.SH
new file mode 100755
index 0000000..1588af4
--- /dev/null
+++ b/pat/patlog.SH
@@ -0,0 +1,388 @@
+case $CONFIG in
+'')
+ if test -f config.sh; then TOP=.;
+ elif test -f ../config.sh; then TOP=..;
+ elif test -f ../../config.sh; then TOP=../..;
+ elif test -f ../../../config.sh; then TOP=../../..;
+ elif test -f ../../../../config.sh; then TOP=../../../..;
+ else
+ echo "Can't find config.sh."; exit 1
+ fi
+ . $TOP/config.sh
+ ;;
+esac
+case "$0" in
+*/*) cd `expr X$0 : 'X\(.*\)/'` ;;
+esac
+echo "Extracting pat/patlog (with variable substitutions)"
+cat >patlog <<!GROK!THIS!
+$startperl
+ eval 'exec perl -S \$0 \${1+"\$@"}'
+ if \$running_under_some_shell;
+
+# $Id$
+#
+# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+#
+# You may redistribute only under the terms of the Artistic Licence,
+# as specified in the README file that comes with the distribution.
+# You may reuse parts of this distribution only within the terms of
+# that same Artistic Licence; a copy of which may be found at the root
+# of the source tree for dist 4.0.
+#
+# $Log: patlog.SH,v $
+# Revision 3.0.1.2 1997/02/28 16:33:03 ram
+# patch61: typo fix
+#
+# Revision 3.0.1.1 1994/10/29 16:42:26 ram
+# patch36: created
+#
+
+\$defeditor='$defeditor';
+\$version = '$VERSION';
+\$patchlevel = '$PATCHLEVEL';
+!GROK!THIS!
+cat >>patlog <<'!NO!SUBS!'
+
+$progname = &profile; # Read ~/.dist_profile
+require 'getopts.pl';
+&usage unless &Getopts("hnruV");
+
+if ($opt_V) {
+ print STDERR "$progname $version PL$patchlevel\n";
+ exit 0;
+} elsif ($opt_h) {
+ &usage;
+}
+
+&readpackage;
+
+if (-f 'patchlevel.h') {
+ open(PL,"patchlevel.h") || die "$progname: can't open patchlevel.h: $!\n";
+ while (<PL>) {
+ if (/^#define\s+PATCHLEVEL\s+(\d+)/) {
+ $last = $1;
+ $patchline = $.; # Record PATCHLEVEL line
+ }
+ }
+ die "$progname: malformed patchlevel.h file.\n" if $last eq '';
+ $bnum = $last + 1;
+}
+else {
+ $patchline = 1;
+ $bnum = 1;
+ $last = '';
+}
+
+chdir 'bugs' if -d 'bugs';
+
+die "$progname: patch #$bnum already exists.\n" if -f "patch$bnum";
+
+@patlist=<*.$bnum>;
+die "$progname: no diff files for patch #$bnum.\n" if
+ $patlist[0] =~ /^\*/ || $patlist[0] eq '';
+
+# Set up a proper editor, for later perusal
+$editor = $ENV{'VISUAL'};
+$editor = $ENV{'EDITOR'} unless $editor;
+$editor = $defeditor unless $editor;
+$editor = 'vi' unless $editor;
+
+# The following used to be done in patmake. Only we do not really need to
+# compute the subject lines for the generated patch here, we do it nonetheless
+# to avoid code duplication in patmake.
+
+if (-s ".logs$bnum") {
+ $logs = '';
+ open(LOGS,".logs$bnum");
+ while (<LOGS>) {
+ unless ($logseen{$_}) {
+ $logs .= $_;
+ $logseen{$_}++;
+ $logsnum++; # One more log
+ }
+ }
+ close LOGS;
+ $subj = $logs;
+ $logs =~ s/^patch\d+:\s*/\t/gm;
+ $logs =~ s/\n/\n\n/gm;
+ $subj =~ s/^patch\d+:\s*/Subject: /gm;
+} else {
+ $subj = "Subject: \n";
+}
+
+# Try to guess the priority of the patch
+if (-s ".mods$bnum") {
+ open(MODS, ".mods$bnum");
+ while (<MODS>) {
+ chop;
+ unless ($fileseen{$_}) {
+ $fileseen{$_}++;
+ $modsnum++; # One more modified file
+ }
+ }
+ close MODS;
+}
+$modsnum++ unless $modsnum; # Avoid divisions by zero
+$mean = $logsnum / $modsnum;
+if ($mean > 0.7 && $mean < 1.3) {
+ $priority = "MEDIUM";
+} elsif ($mean <= 0.7) {
+ $priority = "HIGH"; # Small changes
+} else {
+ $priority = "LOW"; # Big changes
+}
+
+# Save priority for patmake
+open(PRIORITY, ">.pri$bnum") || die "$progname: can't create .pri$bnum: $!\n";
+print PRIORITY $priority, "\n";
+close PRIORITY;
+
+# Save subject lines for patmake
+open(SUBJECTS, ">.subj$bnum") || die "$progname: can't create .subj$bnum: $!\n";
+print SUBJECTS $subj;
+close SUBJECTS;
+
+#
+# Generate description file, then edit it so that the user may fixup things.
+#
+
+unless (($opt_r && -f ".clog$bnum") || ($opt_u && &uptodate(".clog$bnum"))) {
+ open(CHANGES, ">.clog$bnum") ||
+ die "$progname: can't create .clog$bnum: $!\n";
+ print CHANGES <<EOM;
+Edition of the Description section for patch #$bnum.
+Please leave those three lines here, they will be removed automatically.
+------------------------------------------------------------------------
+EOM
+ print CHANGES $logs;
+ close CHANGES;
+}
+
+# If they don't want to maintain a ChangeLog file, that's it. They'll get
+# the old behaviour where the description is edited directly from within
+# the generated patch.
+
+exit(0) if $changelog =~ /^\s*$/;
+
+system $editor, ".clog$bnum";
+
+#
+# Generate RCS log file.
+#
+
+if ($changercs) {
+ unless (
+ ($opt_r && -f ".rlog$bnum") || ($opt_u && &uptodate(".rlog$bnum"))
+ ) {
+ &buildlogs;
+ open(RCS, ">.rlog$bnum") ||
+ die "$progname: can't create .rlog$bnum: $!\n";
+ print RCS <<EOM;
+Edition of the RCS log section for $changelog (patch #$bnum).
+Please leave those three lines here, they will be removed automatically.
+------------------------------------------------------------------------
+EOM
+ foreach $key (sort keys %rcslog) {
+ print RCS &format('* ' . $rcslog{$key}), "\n";
+ }
+ close RCS;
+ }
+ system $editor, ".rlog$bnum";
+}
+
+#
+# Final logfile entry generation
+#
+
+chop($date=`date`);
+
+unless (
+ ($opt_r && -f ".xlog$bnum") ||
+ ($opt_u && &uptodate(".xlog$bnum") && !&newertmp)
+) {
+ open(LOG, ">.xlog$bnum") || die "$progname: can't create .xlog$bnum: $!\n";
+ print LOG <<EOM;
+Edition of the $changelog entry for patch #$bnum.
+Please leave those three lines here, they will be removed automatically.
+------------------------------------------------------------------------
+EOM
+ print LOG "$date $maintname <$maintloc>\n\n";
+ print LOG ". Description:\n\n";
+ &addlog(".clog$bnum");
+ if ($changercs) {
+ print LOG ". Files changed:\n\n";
+ &addlog(".rlog$bnum");
+ }
+ close LOG;
+}
+system $editor, ".xlog$bnum";
+exit(0) if $opt_n;
+
+#
+# Changelog file update, checking in and diff computation.
+#
+
+print "$progname: updating $changelog...\n";
+
+chdir('..') || die "$progname: can't go back to ..: $!\n";
+if (-f $changelog) {
+ rename($changelog, "$changelog.bak") ||
+ die "$progname: can't rename $changelog into $changelog.bak: $!\n";
+}
+
+open(LOG, ">$changelog") || die "$progname: can't create $changelog: $!\n";
+&addlog("bugs/.xlog$bnum");
+if (-f "$changelog.bak") {
+ open(OLOG, "$changelog.bak") ||
+ die "$progname: can't open $changelog.bak: $!\n";
+ print LOG while <OLOG>;
+ close OLOG;
+}
+close LOG;
+
+print "$progname: checking in $changelog and computing diff...\n";
+
+# It is safe to run a patcil and a patdiff now, since the Changelog file has
+# been updated anyway: any log done while checking that file in will not
+# appear in the patch log nor the Changelog.
+
+system 'perl', '-S', 'patcil', '-p', $changelog;
+system 'perl', '-S', 'patdiff', $changelog;
+
+exit 0; # All done.
+
+# Returns true if .clog and .rlog (it it exists) are newer than .xlog.
+sub newertmp {
+ return 1 unless -f ".xlog$bnum"; # To force regeneration
+ return 1 if &newer(".clog$bnum", ".xlog$bnum") ||
+ (!$changercs || &newer(".rlog$bnum", ".xlog$bnum"));
+ 0;
+}
+
+# Returns true if $file is newer than the reference file $ref.
+sub newer {
+ local($file, $ref) = @_;
+ (stat($file))[9] >= (stat($ref))[9];
+}
+
+# Retursn true if $file is up-to-date with respect to .logs and .mods.
+sub uptodate {
+ local($file) = @_;
+ return 0 unless -f $file; # Cannot be up-to-date if missing
+ &newer($file, ".logs$bnum") && &newer($file, ".mods$bnum");
+}
+
+# Add file to the LOG descriptor, skipping the first three lines of that file.
+sub addlog {
+ local($file) = @_;
+ open(FILE, $file) || die "$progname: can't reopen $file: $!\n";
+ $_ = <FILE>; $_ = <FILE>; $_ = <FILE>;
+ print LOG while <FILE>;
+ close FILE;
+}
+
+# Build RCS logs, for each file listed in the %fileseen array, into %rcslog.
+# Common RCS log messages are grouped under the same entry.
+sub buildlogs {
+ local($log);
+ local(@files);
+ local($first);
+ local(%invertedlog);
+ foreach $file (keys %fileseen) {
+ $log = &rcslog($file);
+ next if $log eq '';
+ $invertedlog{$log} .= "$file ";
+ }
+ foreach $log (keys %invertedlog) {
+ @files = split(' ', $invertedlog{$log});
+ $first = (sort @files)[0];
+ $rcslog{$first} = join(', ', @files) . ': ' . $log;
+ }
+}
+
+# Grab log for a given file by parsing its $Log section. Only comments
+# relevant to the patch are kept. This relies on the presence of the patchxx:
+# leading string in front of each comment.
+# If not sufficient (because people don't use patchxx prefixes), then we'll
+# need a more sophisticated algorithm parsing revisions lines to see where we
+# left of at the last patch.
+sub rcslog {
+ local($file) = @_;
+ open(FILE, "../$file") || warn "$me: can't open $file: $!\n";
+ local($_);
+ local($comment, $len);
+ local($pcomment) = "patch$bnum:";
+ local($plen) = length($pcomment);
+ local($c);
+ local($lastnl) = 1;
+ local($kept); # Relevant part of the RCS comment which is kept
+ file: while (<FILE>) {
+ if (/^(.*)\$Log[:\$]/) {
+ $comment = $1;
+ $comment =~ s/\s+$//; # Newer RCS chop spaces on emtpy lines
+ $len = length($comment);
+ while (<FILE>) {
+ $c = substr($_, 0, $len);
+ last file unless $c eq $comment;
+ $_ = substr($_, $len, 9_999);
+ if ($lastnl) {
+ last file unless /^\s*Revision\s+\d/;
+ $lastnl = 0;
+ } elsif (/^\s*$/) {
+ $lastnl = 1;
+ } else {
+ s/^\s*//; # Older RCS will have space here
+ $c = substr($_, 0, $plen);
+ last file unless $c eq $pcomment;
+ # Comment for that patch is kept after space cleanup
+ $_ = substr($_, $plen, 9_999);
+ s/^\s*//;
+ s/\s*$//;
+ $_ .= '.' unless /\.$/;
+ s/^(.)/\U$1/; # Ensure upper-cased to start sentence
+ s/^/ / if $kept;
+ $kept .= $_; # Will be reformatted later on
+ }
+ }
+ }
+ }
+ close FILE;
+ $kept;
+}
+
+# Format line to fit in 80 columns (70 + 8 for the added leading tabs).
+# Rudimentary parsing to break lines after a , or a space.
+sub format {
+ local($_) = @_;
+ local($tmp);
+ local($msg);
+ while (length($_) > 70) {
+ $tmp = substr($_, 0, 70);
+ $tmp =~ s/^(.*)([,\s]).*/$1/;
+ $msg .= "\t$tmp" . ($2 eq ',' ? ',' : '') . "\n";
+ $_ = substr($_, length($tmp), 9_999);
+ $_ =~ s/^\s+//;
+ }
+ $msg .= "\t$_\n";
+ $msg;
+}
+
+sub usage {
+ print STDERR <<EOM;
+Usage: $progname [-hnruV]
+ -h : print this message and exit.
+ -n : not-really mode: force re-edit, but stop after updating.
+ -r : reuse existing change file candidate entries (supersedes -u).
+ -u : update mode, recreate files only when out of date.
+ -V : print version number and exit.
+EOM
+ exit 1;
+}
+
+!NO!SUBS!
+$grep -v '^;#' ../pl/package.pl >>patlog
+$grep -v '^;#' ../pl/tilde.pl >>patlog
+$grep -v '^;#' ../pl/profile.pl >>patlog
+chmod +x patlog
+$eunicefix patlog
diff --git a/pat/patmake.SH b/pat/patmake.SH
new file mode 100755
index 0000000..6a122c3
--- /dev/null
+++ b/pat/patmake.SH
@@ -0,0 +1,411 @@
+case $CONFIG in
+'')
+ if test -f config.sh; then TOP=.;
+ elif test -f ../config.sh; then TOP=..;
+ elif test -f ../../config.sh; then TOP=../..;
+ elif test -f ../../../config.sh; then TOP=../../..;
+ elif test -f ../../../../config.sh; then TOP=../../../..;
+ else
+ echo "Can't find config.sh."; exit 1
+ fi
+ . $TOP/config.sh
+ ;;
+esac
+case "$0" in
+*/*) cd `expr X$0 : 'X\(.*\)/'` ;;
+esac
+echo "Extracting pat/patmake (with variable substitutions)"
+cat >patmake <<!GROK!THIS!
+$startperl
+ eval 'exec perl -S \$0 \${1+"\$@"}'
+ if \$running_under_some_shell;
+
+# $Id$
+#
+# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+#
+# You may redistribute only under the terms of the Artistic Licence,
+# as specified in the README file that comes with the distribution.
+# You may reuse parts of this distribution only within the terms of
+# that same Artistic Licence; a copy of which may be found at the root
+# of the source tree for dist 4.0.
+#
+# Original Author: Larry Wall <lwall@netlabs.com>
+# Contribution by: Graham Stoney <greyham@research.canon.oz.au>
+#
+# $Log: patmake.SH,v $
+# Revision 3.0.1.5 1995/09/25 09:21:19 ram
+# patch59: now calls patsend with -i to add more instructions
+#
+# Revision 3.0.1.4 1994/10/29 16:43:09 ram
+# patch36: a lot of setup is now performed by patlog
+# patch36: added various escapes in strings for perl5 support
+#
+# Revision 3.0.1.3 1994/01/24 14:30:55 ram
+# patch16: now prefix error messages with program's name
+# patch16: added ~/.dist_profile awareness
+#
+# Revision 3.0.1.2 1993/08/24 12:18:59 ram
+# patch3: now asks for patch mailing/posting after all patches edited
+# patch3: patch release notification is done via new patnotify
+# patch3: random cleanup, removed old RCS logs
+#
+# Revision 3.0.1.1 1993/08/19 06:42:38 ram
+# patch1: leading config.sh searching was not aborting properly
+#
+# Revision 3.0 1993/08/18 12:10:45 ram
+# Baseline for dist 3.0 netwide release.
+#
+
+\$defeditor='$defeditor';
+\$version = '$VERSION';
+\$patchlevel = '$PATCHLEVEL';
+\$mailer = '$mailer';
+!GROK!THIS!
+cat >>patmake <<'!NO!SUBS!'
+
+$progname = &profile; # Read ~/.dist_profile
+require 'getopts.pl';
+&usage unless &Getopts("hV");
+
+if ($opt_V) {
+ print STDERR "$progname $version PL$patchlevel\n";
+ exit 0;
+} elsif ($opt_h) {
+ &usage;
+}
+
+&readpackage;
+&readusers;
+
+$FILEOVERHEAD = 40; # Name of files, Index, Prereq
+$MAXPATSIZE = 50000; # Maximum allowed size for a patch
+$PATOVERHEAD = 2500; # Litterature
+$FIRST_PAT = 3000; # Give space for first patch (descriptions)
+
+if (-f 'patchlevel.h') {
+ open(PL,"patchlevel.h") || die "$progname: can't open patchlevel.h: $!\n";
+ while (<PL>) {
+ if (/^#define\s+PATCHLEVEL\s+(\d+)/) {
+ $last = $1;
+ $patchline = $.; # Record PATCHLEVEL line
+ }
+ }
+ die "$progname: malformed patchlevel.h file.\n" if $last eq '';
+ $bnum = $last + 1;
+}
+else {
+ $patchline = 1;
+ $bnum = 1;
+ $last = '';
+}
+
+@ARGV = <[Mm]akefile*>;
+$mf = '';
+if ($#ARGV > 0) {
+ while (<>) {
+ $mf .= $_ if /^[a-z.]+\s*:/; # Rules in makefile
+ }
+}
+$after = '';
+$after .= "\t\tConfigure -ders\n" if -f 'Configure';
+$after .= "\t\tmake depend\n" if $mf =~ /^depend:/m;
+$after .= "\t\tmake\n" if $mf;
+$after .= "\t\tmake test\n" if $mf =~ /^test:/m;
+$after .= "\t\tmake install\n" if $mf =~ /^install:/m;
+$after .= "\t\tmake install.man\n" if $mf =~ /^install\.man:/m;
+
+chdir 'bugs' if -d 'bugs';
+die "$progname: patch #$bnum already exists.\n" if -f "patch$bnum";
+
+@patlist=<*.$bnum>;
+die "$progname: no diff files for patch #$bnum.\n" if
+ $patlist[0] =~ /^\*/ || $patlist[0] eq '';
+
+# Whether they asked for a changelog file or not, call patlog.
+# This will create at least the .pri and .subj and .clog files that we need.
+# If a changelog file is needed, it will update it and create the necessary
+# patch before we go on and put all those patches together.
+# Note that we make use of the '-r' option, in case they have already
+# run patlog themselves and made the necessary adjustments. Since -r supersedes
+# -u, it's safe to allow ~/.dist_profile processing anyway.
+
+chdir '..' if -d '../bugs';
+system 'perl', '-S', 'patlog', '-r'; # Must be called from top-level dir
+chdir 'bugs' if -d 'bugs';
+
+@patlist=<*.$bnum>; # Reget it, in case Changes.xx appeared due to patlog
+
+# Look for size of each diff file
+for (@patlist) {
+ ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,
+ $blksize,$blocks) = stat($_);
+ $size{$_} = $size;
+}
+
+# Sort the array, biggest sizes first
+sub revnum { $size{$a} < $size{$b} ? 1 : $size{$a} > $size{$b} ? -1 : 0; }
+@patlist = sort revnum @patlist;
+
+# Put files in a patch
+for (@patlist) {
+ $i=1;
+ # Find the patch in which the current file can go
+ # Divide size by 15 to count the 3 spaces added in front of each line
+ while (($newtot = int($tot[$i] + $size{$_} + $size{$_}/15 + $FILEOVERHEAD)) >
+ $MAXPATSIZE-$PATOVERHEAD-($i == 1 ? $FIRST_PAT : 0) && $tot[$i]) {
+ $i++;
+ }
+ # Adding $_ to patch $i giving $newtot bytes
+ $tot[$i] = $newtot; # Update size of kit $i
+ $list[$i] .= " $_"; # Add file to the kit $i
+}
+
+$numpat = $#list; # Number of patches to generate
+
+if ($numpat > 1) {
+ print "$progname: Warning: generating $numpat patches.\n";
+ sleep(1);
+}
+
+$hah = " (hah!)" if $bnum == 1;
+$patbase = $bnum; # First patch generated
+
+open(PRIORITY, ".pri$bnum");
+chop($priority = <PRIORITY>);
+close PRIORITY;
+$priority = 'LOW' unless $priority;
+
+for ($i = 1; $i <= $numpat; $i++) { # For all patches...
+ open(PATCH,">patch$bnum") || die "Can't create patch #$bnum";
+ chop($date=`date`);
+ print PATCH
+"System: $package version $baserev
+Patch #: $bnum
+";
+ print PATCH "Priority: $priority\n" unless $priority eq '';
+ # Print subjects only for first patch
+ if ($i == 1) {
+ open(SUBJECTS, ".subj$bnum");
+ print PATCH while <SUBJECTS>;
+ close SUBJECTS;
+ } else {
+ print PATCH "Subject: patch #$patbase, continued\n";
+ }
+ print PATCH
+"Date: $date
+From: $maintname <$maintloc>
+
+Description:
+";
+ # Print description and repeat-by only for first patch
+ if ($i == 1) {
+ open(LOGS, ".clog$bnum");
+ $_ = <LOGS>; $_ = <LOGS>; $_ = <LOGS>; # Skip first three lines
+ print PATCH while <LOGS>;
+ close LOGS;
+ print PATCH "Repeat-By: \n";
+ } else {
+ print PATCH "\tSee patch #$patbase.\n\n";
+ }
+ print PATCH
+"
+Fix: From rn, say \"| patch -p -N -d DIR\", where DIR is your $package source
+ directory. Outside of rn, say \"cd DIR; patch -p -N <thisarticle\".
+ If you don't have the patch program, apply the following by hand,
+ or get patch (version 2.0, latest patchlevel).
+
+ After patching:
+";
+ # Do $after only after last patch
+ if ($i == $numpat) {
+ print PATCH $after;
+ } else {
+ printf PATCH
+"\t\t*** DO NOTHING--INSTALL ALL PATCHES UP THROUGH #%d FIRST ***\n",
+$patbase + $numpat - 1;
+ }
+ print PATCH "
+ If patch indicates that patchlevel is the wrong version, you may need
+ to apply one or more previous patches, or the patch may already
+ have been applied. See the patchlevel.h file to find out what has or
+ has not been applied. In any event, don't continue with the patch.
+
+ If you are missing previous patches$hah they can be obtained from me:
+
+ $maintname <$maintloc>
+
+";
+ if ($mailagent ne 'false') {
+ print PATCH
+" If you send a mail message of the following form it will greatly speed
+ processing:
+
+ Subject: Command
+ \@SH mailpatch PATH $package $baserev LIST
+ ^ note the c
+
+ where PATH is a return path FROM ME TO YOU either in Internet notation,
+ or in bang notation from some well-known host, and LIST is the number
+ of one or more patches you need, separated by spaces, commas, and/or
+ hyphens. Saying 35- says everything from 35 to the end.
+
+ To get some more detailed instructions, send me the following mail:
+
+ Subject: Command
+ \@SH mailhelp PATH
+
+";
+ }
+ if ($ftpsite) {
+ print PATCH
+" You can also get the patches via anonymous FTP from
+ $ftpsite.
+";
+ }
+ # Print patchlevel at the top of each patch
+ print PATCH "
+Index: patchlevel.h
+";
+ if ($last eq '') {
+ `echo "#define PATCHLEVEL 1" >patchlevel.h`;
+ `cp /dev/null patchlevel.h.null`;
+ print PATCH `diff -c patchlevel.h.null patchlevel.h`;
+ unlink 'patchlevel.h', 'patchlevel.h.null';
+ }
+ else {
+ print PATCH
+"Prereq: $last
+${patchline}c${patchline}
+< #define PATCHLEVEL $last
+---
+> #define PATCHLEVEL $bnum
+";
+ }
+ $last = $bnum; # Update last patch
+ push(@patset, $bnum); # Record set of generated patch(es)
+
+ @ARGV = split(' ', $list[$i]);
+ while (<>) { print PATCH; }
+ print PATCH "\n*** End of Patch $bnum ***\n";
+ close PATCH;
+
+ # Update patchlevel.h file
+ $editor = $ENV{'VISUAL'};
+ $editor = $ENV{'EDITOR'} unless $editor;
+ $editor = $defeditor unless $editor;
+ $editor = 'vi' unless $editor;
+ system $editor, "patch$bnum";
+ if (-s "patch$bnum") {
+ system 'chmod', '-w', "patch$bnum"; # Protect newly created patch
+ chdir '..';
+ `echo "#define PATCHLEVEL 0" >patchlevel.h` unless -f 'patchlevel.h';
+ open(PL,"patchlevel.h") ||
+ die "$progname: can't open patchlevel.h: $!\n";
+ open(PLN,">patchlevel.h+") ||
+ die "$progname: can't create new patchlevel.h: $!\n";
+ while (<PL>) {
+ if (/^#define\s+PATCHLEVEL\s+(\d+)/) {
+ $bnum = $1;
+ $bnum++; # Update patch level
+ print PLN "#define PATCHLEVEL $bnum\n";
+ } else {
+ print PLN; # Simply copy other lines
+ }
+ }
+ close PLN;
+ close PL;
+ `mv -f patchlevel.h+ patchlevel.h`;
+ die "$progname: malformed patchlevel.h file.\n" if $bnum eq '';
+ } else {
+ unlink "patch$bnum";
+ die "$progname: aborted.\n";
+ }
+
+ chdir 'bugs' || die "$progname: cannot cd to bugs: $!\n";
+
+ # Find priority for next patch in loop
+ $priority='';
+ open(PATCH, "patch$bnum") || die "Cannot re-open patch #$bnum !\n";
+ while (<PATCH>) {
+ /^Priority:\s*(\S+)\s*$/ && ($priority = $1);
+ }
+ close PATCH;
+
+ $bnum++; # For next patch in loop
+}
+
+utime time, time, 'patchlevel.h'; # Reset timestamp on patchlevel
+
+if (@patset == 1) {
+ $bnum = pop(@patset);
+ $patch = "patch #$bnum";
+} else {
+ $bmin = shift(@patset);
+ $bmax = pop(@patset);
+ $bnum = "$bmin-$bmax";
+ $patch = "patches #$bmin thru #$bmax";
+}
+
+# Post generated patches
+if ($newsgroups) {
+ print "\nDo you wish to post $patch to $newsgroups? [y] ";
+ $ans = <stdin>;
+ system 'patpost', $bnum unless $ans =~ /^n/i;
+}
+
+# Mail generated patches
+if ($recipients) {
+ print "\n";
+ if (0 == ($recipients =~ tr/ //)) {
+ print "Do you wish to send $patch to $recipients? [y] ";
+ } else {
+ print "The following people are on the recipient list:\n\n";
+ foreach $addr (split(' ', $recipients)) {
+ print "\t$addr\n";
+ }
+ print "\nDo you wish to send $patch to them? [y] ";
+ }
+ $ans = <stdin>;
+ system 'patsend', '-i', $bnum, $recipients unless $ans =~ /^n/i;
+}
+
+# Copy patches to FTP directory
+if ($ftpdir) {
+ print "\nDo you wish to copy $patch to $ftpdir? [y] ";
+ $ans = <stdin>;
+ system 'patftp', $bnum unless $ans =~ /^n/i;
+}
+
+# Notify people about it.
+if ($notify) {
+ print "\n";
+ if (0 == ($notify =~ tr/ //)) {
+ print "Do you wish to notify $notify? [y] ";
+ } else {
+ print "The following people are on the notify list:\n\n";
+ foreach $addr (split(' ', $notify)) {
+ print "\t$addr\n";
+ }
+ print "\nDo you wish to notify them? [y] ";
+ }
+ $ans = <STDIN>;
+ system 'patnotify', $notify unless $ans =~ /^n/i;
+}
+
+sub usage {
+ print STDERR <<EOM;
+Usage: $progname [-hV]
+ -h : print this message and exit
+ -V : print version number and exit
+EOM
+ exit 1;
+}
+
+!NO!SUBS!
+$grep -v '^;#' ../pl/package.pl >>patmake
+$grep -v '^;#' ../pl/users.pl >>patmake
+$grep -v '^;#' ../pl/tilde.pl >>patmake
+$grep -v '^;#' ../pl/profile.pl >>patmake
+chmod +x patmake
+$eunicefix patmake
diff --git a/pat/patname.SH b/pat/patname.SH
new file mode 100755
index 0000000..8f99b1a
--- /dev/null
+++ b/pat/patname.SH
@@ -0,0 +1,175 @@
+case $CONFIG in
+'')
+ if test -f config.sh; then TOP=.;
+ elif test -f ../config.sh; then TOP=..;
+ elif test -f ../../config.sh; then TOP=../..;
+ elif test -f ../../../config.sh; then TOP=../../..;
+ elif test -f ../../../../config.sh; then TOP=../../../..;
+ else
+ echo "Can't find config.sh."; exit 1
+ fi
+ . $TOP/config.sh
+ ;;
+esac
+case "$0" in
+*/*) cd `expr X$0 : 'X\(.*\)/'` ;;
+esac
+echo "Extracting pat/patname (with variable substitutions)"
+cat >patname <<!GROK!THIS!
+$startperl
+ eval 'exec perl -S \$0 \${1+"\$@"}'
+ if \$running_under_some_shell;
+
+# $Id$
+#
+# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+#
+# You may redistribute only under the terms of the Artistic Licence,
+# as specified in the README file that comes with the distribution.
+# You may reuse parts of this distribution only within the terms of
+# that same Artistic Licence; a copy of which may be found at the root
+# of the source tree for dist 4.0.
+#
+# $Log: patname.SH,v $
+# Revision 3.0.1.2 1994/01/24 14:31:02 ram
+# patch16: now prefix error messages with program's name
+# patch16: added ~/.dist_profile awareness
+#
+# Revision 3.0.1.1 1993/08/19 06:42:40 ram
+# patch1: leading config.sh searching was not aborting properly
+#
+# Revision 3.0 1993/08/18 12:10:46 ram
+# Baseline for dist 3.0 netwide release.
+#
+
+\$version = '$VERSION';
+\$patchlevel = '$PATCHLEVEL';
+!GROK!THIS!
+cat >>patname <<'!NO!SUBS!'
+
+$progname = &profile; # Read ~/.dist_profile
+require 'getopts.pl';
+&usage unless $#ARGV >= 0;
+&usage() unless &Getopts("ahnmv:V");
+
+if ($opt_V) {
+ print STDERR "$progname $version PL$patchlevel\n";
+ exit 0;
+} elsif ($opt_h) {
+ &usage;
+}
+
+$RCSEXT = ',v' unless $RCSEXT;
+$ENV{'DIST'} = '/dev/null'; # Disable ~/.dist_profile
+
+chop($pwd = `pwd`) unless -f '.package';
+until (-f '.package') {
+ die "$progname: no .package file! Run packinit.\n" unless $pwd;
+ chdir '..' || die "$progname: can't cd ..: $!\n";
+ $pwd =~ s|(.*)/(.*)|$1|;
+ $prefix = $2 . '/' . $prefix;
+}
+if ($prefix) {
+ for (@ARGV) {
+ s/^/$prefix/ unless m|^[-/]|;
+ }
+}
+
+# We now are at the top level
+
+&readpackage;
+
+unless ($opt_v) {
+ print STDERR "$progname: version number must be specified using -v.\n";
+ &usage;
+}
+
+if ($opt_n) {
+ &newer; # Look for files newer than patchlevel.h
+} elsif ($opt_a) {
+ open(MANI,"MANIFEST.new") || die "$progname: can't read MANIFEST.new: $!\n";
+ @ARGV = ();
+ while (<MANI>) {
+ s|^\./||;
+ next if m|^patchlevel.h|; # This file is built by hand
+ chop;
+ ($_) = split(' ');
+ next if -d;
+ push(@ARGV,$_);
+ }
+ close MANI;
+} elsif ($opt_m) {
+ open(MODS,"bugs/.mods$bnum") || die "$progname: no modification found.\n";
+ @ARGV = ();
+ while (<MODS>) {
+ next if m|^patchlevel.h$|; # This file is built by hand
+ chop;
+ ($_) = split(' ');
+ push(@ARGV,$_);
+ }
+ close MODS;
+}
+
+# Now loop over each file specified, doing a 'rcsfreeze'
+foreach $file (@ARGV) {
+ $files = &rcsargs($file);
+ @files = split(' ', $files);
+ $rlog = `rlog -rlastpat- $files 2>&1`;
+ ($revs) = ($rlog =~ /selected revisions: (\d+)/);
+ if (!$revs) {
+ print "$progname: $file has never been checked in--checking in...\n";
+ system 'perl', '-S', 'patcil', '-p', $file;
+ $revs = 2; # At least null trunk + new fresh revision
+ }
+ # Look whether there is a branch
+ if ($revs == 1) {
+ $rlog = `rlog -r$revbranch $files 2>&1`;
+ ($revs) = ($rlog =~ /selected revisions: (\d+)/);
+ $revs++; # add the base revision
+ }
+ # If working file exists, make sure latest version was checked in
+ if (-f $file) {
+ if ($revs == 1) {
+ $delta = `rcsdiff -r$baserev $files 2>/dev/null`;
+ } else {
+ $delta = `rcsdiff -r$revbranch $files 2>/dev/null`;
+ }
+ if ($delta ne '') {
+ # File changed; check it in.
+ system 'perl', '-S', 'patcil', '-p', $file;
+ if ($revs > 1) {
+ # Have to re-run rlog after a new ci
+ $rlog = `rlog -r$revbranch $files 2>&1`;
+ }
+ }
+ }
+ # Now assign symbolic revision number
+ if ($revs == 1) {
+ system 'rcs', "-N$opt_v:$baserev", @files;
+ } else {
+ ($lastrev) = ($rlog =~ /revision $revbranch\.(\d+)/);
+ system 'rcs', "-N$opt_v:$revbranch.$lastrev", @files;
+ }
+}
+
+sub usage {
+ print STDERR <<EOM;
+Usage: $progname [-ahnmV] -v version [filelist]
+ -a : all the files in MANIFEST.new
+ -h : print this message and exit
+ -n : all the files newer than patchlevel.h
+ -m : all the modified files (which have been patciled)
+ -v : set version number (mandatory)
+ -V : print version number and exit
+EOM
+ exit 1;
+}
+
+!NO!SUBS!
+$grep -v '^;#' ../pl/newer.pl >>patname
+$grep -v '^;#' ../pl/package.pl >>patname
+$grep -v '^;#' ../pl/rcsargs.pl >>patname
+$grep -v '^;#' ../pl/tilde.pl >>patname
+$grep -v '^;#' ../pl/profile.pl >>patname
+chmod +x patname
+$eunicefix patname
diff --git a/pat/patnotify.SH b/pat/patnotify.SH
new file mode 100755
index 0000000..5d1307e
--- /dev/null
+++ b/pat/patnotify.SH
@@ -0,0 +1,232 @@
+case $CONFIG in
+'')
+ if test -f config.sh; then TOP=.;
+ elif test -f ../config.sh; then TOP=..;
+ elif test -f ../../config.sh; then TOP=../..;
+ elif test -f ../../../config.sh; then TOP=../../..;
+ elif test -f ../../../../config.sh; then TOP=../../../..;
+ else
+ echo "Can't find config.sh."; exit 1
+ fi
+ . $TOP/config.sh
+ ;;
+esac
+case "$0" in
+*/*) cd `expr X$0 : 'X\(.*\)/'` ;;
+esac
+echo "Extracting pat/patnotify (with variable substitutions)"
+cat >patnotify <<!GROK!THIS!
+$startperl
+ eval 'exec perl -S \$0 \${1+"\$@"}'
+ if \$running_under_some_shell;
+
+# $Id$
+#
+# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+#
+# You may redistribute only under the terms of the Artistic Licence,
+# as specified in the README file that comes with the distribution.
+# You may reuse parts of this distribution only within the terms of
+# that same Artistic Licence; a copy of which may be found at the root
+# of the source tree for dist 4.0.
+#
+# $Log: patnotify.SH,v $
+# Revision 3.0.1.9 1997/02/28 16:33:35 ram
+# patch61: let them know the patch priority and description
+#
+# Revision 3.0.1.8 1995/09/25 09:21:43 ram
+# patch59: now tells users how to directly request for mailed patches
+#
+# Revision 3.0.1.7 1994/10/29 16:43:19 ram
+# patch36: added various escapes in strings for perl5 support
+#
+# Revision 3.0.1.6 1994/06/20 07:11:47 ram
+# patch30: patnotify now includes the e-mail address for requests
+#
+# Revision 3.0.1.5 1994/01/24 14:31:48 ram
+# patch16: now prefix error messages with program's name
+# patch16: don't feed mailer with more than 50 addresses at a time
+# patch16: added ~/.dist_profile awareness
+#
+# Revision 3.0.1.4 1993/08/27 14:40:42 ram
+# patch7: two files were wrongly appended to patsend instead
+#
+# Revision 3.0.1.3 1993/08/25 14:07:43 ram
+# patch6: now asks for recipient list edition by default
+# patch6: new -q option to suppress that
+#
+# Revision 3.0.1.2 1993/08/24 12:48:03 ram
+# patch5: fixed fatal typo in here document
+#
+# Revision 3.0.1.1 1993/08/24 12:19:11 ram
+# patch3: created
+#
+
+\$defeditor='$defeditor';
+\$version = '$VERSION';
+\$patchlevel = '$PATCHLEVEL';
+\$mailer = '$mailer';
+!GROK!THIS!
+cat >>patnotify <<'!NO!SUBS!'
+
+$progname = &profile; # Read ~/.dist_profile
+require 'getopts.pl';
+&usage unless &Getopts("hquV");
+
+if ($opt_V) {
+ print STDERR "$progname $version PL$patchlevel\n";
+ exit 0;
+} elsif ($opt_h) {
+ &usage;
+}
+
+chdir '..' if -d '../bugs';
+
+&readpackage;
+&readusers if $opt_u;
+
+$dest = join(' ', @ARGV);
+$dest .= " $notify" if $opt_u;
+
+&usage unless $dest;
+
+# Offer to edit the address list unless -q
+unless ($opt_q) {
+ select((select(STDOUT), $| = 1)[0]);
+ print "Do you wish to edit the address list? [y] ";
+ $ans = <STDIN>;
+ unless ($ans =~ /^n/i) {
+ @to = split(' ', $dest);
+ &listedit(*to);
+ $dest = join(' ', @to);
+ }
+}
+
+if (-f 'patchlevel.h') {
+ open(PL,"patchlevel.h") || die "$progname: can't open patchlevel.h: $!\n";
+ while (<PL>) {
+ if (/^#define\s+PATCHLEVEL\s+(\d+)/) {
+ $last = $1;
+ }
+ }
+ die "$progname: malformed patchlevel.h file.\n" if $last eq '';
+} else {
+ die "$progname: no patchlevel.h.\n";
+}
+
+@patches = &patseq($last); # Compute patches sequence
+$lastpat = pop(@patches);
+
+warn "$progname: missing last .logs and .mods files\n" if $lastpat eq '';
+
+$missing = $last - $lastpat + 1;
+$these = $missing == 1 ? 'this' : 'these';
+$patches = $missing == 1 ? 'patch' : 'patches';
+$through = $missing == 1 ? $lastpat : "$lastpat thru " . ($lastpat+$missing-1);
+$have = $missing == 1 ? 'has' : 'have';
+$patlist = "$lastpat-"; # They'll get everything up to the end
+
+($Patches = $patches) =~ s/^p/P/;
+$opt = ($mailer =~ /sendmail/) ? '-odq' : '';
+
+chdir 'bugs' || die "$progname: can't cd to bugs: $!\n";
+
+# Find out priority of last patch set
+$priority = 'UNKNOWN';
+open(PATCH, "patch$lastpat") ||
+ die "$progname: can't open patch #$lastpat: $!\n";
+while (<PATCH>) {
+ /^Priority:\s*(\S+)\s*$/ && ($priority = $1);
+}
+close PATCH;
+
+# Look for the .clog<patch #> description and prepare the patch description
+# for inclusion in the notification, so that they can figure out whether
+# they really need that patch set.
+
+if (-f ".clog$lastpat") {
+ open(LOGS, ".clog$lastpat") ||
+ die "$progname: can't open .clog$lastpat: $!\n";
+ $_ = <LOGS> . <LOGS> . <LOGS>; # Skip first three lines
+ $clog = '';
+ while (<LOGS>) {
+ $clog .= $_;
+ }
+ close LOGS;
+} else {
+ warn "$progname: missing last .clog file in bugs directory\n";
+}
+
+print "$progname: sending notification of $missing new $patches to $dest...\n";
+
+fork && exit;
+
+# I hate broken mailers! Bust it up into smaller groups of people...
+@dest = split(' ', $dest);
+while (@smalldest = splice(@dest, 0, 50)) {
+ $to = join(', ', @smalldest); # Sensible To: for sendmail
+ $smalldest = join(' ', @smalldest);
+
+ open(MAILER, "|$mailer $opt $smalldest") ||
+ die "$progname: can't fork $mailer: $!\n";
+ print MAILER
+"To: $to
+Subject: $Patches $through for $package version $baserev $have been released.
+Precedence: bulk
+X-Mailer: dist [version $version PL$patchlevel]
+
+This is just a quick note to let you know that $package version $baserev
+has been recently upgraded and that $patches $through $have been released.
+
+If you are actively using $package, I strongly suggest you upgrade by
+applying $these $patches, whose priority is $priority.
+
+You can fetch $these $patches automatically by sending me the following mail:
+
+ Subject: Command
+ \@SH mailpatch - $package $baserev $patlist
+ ^ note the c
+
+And if you wish to have future patches mailed directly to you, you can add:
+
+ \@SH package - $package $baserev - mailpatches
+
+If you are not interested in receiving any information about future patches,
+please send me the following mail:
+
+ Subject: Command
+ \@SH package - $package $baserev
+";
+ print MAILER
+"
+Following is the $patches description:
+
+$clog" if $clog;
+ print MAILER
+"
+-- $progname speaking for $maintname <$maintloc>.
+";
+ close MAILER;
+}
+
+sub usage {
+ print STDERR <<EOH;
+Usage: $progname [-hquV] [recipients]
+ -h : print this message and exit
+ -q : quick mode, do not offer to edit recipient list
+ -u : add all to-be-notified users
+ -V : print version number and exit
+EOH
+ exit 1;
+}
+
+!NO!SUBS!
+$grep -v '^;#' ../pl/package.pl >>patnotify
+$grep -v '^;#' ../pl/users.pl >>patnotify
+$grep -v '^;#' ../pl/patseq.pl >>patnotify
+$grep -v '^;#' ../pl/editor.pl >>patnotify
+$grep -v '^;#' ../pl/listedit.pl >>patnotify
+$grep -v '^;#' ../pl/tilde.pl >>patnotify
+$grep -v '^;#' ../pl/profile.pl >>patnotify
+chmod +x patnotify
+$eunicefix patnotify
diff --git a/pat/patpost.SH b/pat/patpost.SH
new file mode 100755
index 0000000..7aafd8c
--- /dev/null
+++ b/pat/patpost.SH
@@ -0,0 +1,179 @@
+case $CONFIG in
+'')
+ if test -f config.sh; then TOP=.;
+ elif test -f ../config.sh; then TOP=..;
+ elif test -f ../../config.sh; then TOP=../..;
+ elif test -f ../../../config.sh; then TOP=../../..;
+ elif test -f ../../../../config.sh; then TOP=../../../..;
+ else
+ echo "Can't find config.sh."; exit 1
+ fi
+ . $TOP/config.sh
+ ;;
+esac
+case "$0" in
+*/*) cd `expr X$0 : 'X\(.*\)/'` ;;
+esac
+echo "Extracting pat/patpost (with variable substitutions)"
+cat >patpost <<!GROK!THIS!
+$startperl
+ eval 'exec perl -S \$0 \${1+"\$@"}'
+ if \$running_under_some_shell;
+
+# $Id$
+#
+# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+#
+# You may redistribute only under the terms of the Artistic Licence,
+# as specified in the README file that comes with the distribution.
+# You may reuse parts of this distribution only within the terms of
+# that same Artistic Licence; a copy of which may be found at the root
+# of the source tree for dist 4.0.
+#
+# Original Author: Larry Wall <lwall@netlabs.com>
+#
+# $Log: patpost.SH,v $
+# Revision 3.0.1.4 1995/05/12 12:25:58 ram
+# patch54: added explicit From: header line pointing to the maintainer
+#
+# Revision 3.0.1.3 1994/01/24 14:32:09 ram
+# patch16: now prefix error messages with program's name
+# patch16: added ~/.dist_profile awareness
+#
+# Revision 3.0.1.2 1993/08/24 12:19:48 ram
+# patch3: added ~name expansion for orgname
+# patch3: random cleanup
+#
+# Revision 3.0.1.1 1993/08/19 06:42:41 ram
+# patch1: leading config.sh searching was not aborting properly
+#
+# Revision 3.0 1993/08/18 12:10:47 ram
+# Baseline for dist 3.0 netwide release.
+#
+
+\$inews='${inews-/usr/lib/news/inews}';
+\$orgname='$orgname';
+\$version = '$VERSION';
+\$patchlevel = '$PATCHLEVEL';
+!GROK!THIS!
+
+cat >>patpost <<'!NO!SUBS!'
+
+$progname = &profile; # Read ~/.dist_profile
+require 'getopts.pl';
+&usage unless $#ARGV >= 0;
+&usage unless &Getopts("hrV");
+
+if ($opt_V) {
+ print STDERR "$progname $version PL$patchlevel\n";
+ exit 0;
+} elsif ($opt_h) {
+ &usage;
+}
+
+$RCSEXT = ',v' unless $RCSEXT;
+if ($inews eq 'inews') {
+ $inews = '/usr/lib/news/inews' if -f '/usr/lib/news/inews';
+}
+
+chdir '..' if -d '../bugs';
+
+&readpackage;
+
+$orgname = &tilda_expand($orgname);
+chop($orgname = `cat $orgname`) if $orgname =~ m|^/|;
+
+if ($opt_r) {
+ $repost = ' (REPOST)';
+}
+
+while ($_ = shift) {
+ if (/^(patch)?[1-9][\d\-]*$/) {
+ s/^patch//;
+ push(@argv,$_);
+ } else {
+ push(@newsgroups,$_);
+ }
+}
+$newsgroups = join(',',@newsgroups) unless $#newsgroups < 0;
+&usage unless $newsgroups;
+
+@ARGV = @argv;
+open(PL,"patchlevel.h") || die "$progname: can't open patchlevel.h: $!\n";
+while (<PL>) {
+ $maxnum = $1 if /^#define\s+PATCHLEVEL\s+(\d+)/;
+}
+close PL;
+die "$progname: malformed patchlevel.h file.\n" if $maxnum eq '';
+
+if ($#ARGV < 0) {
+ @patseq = &patseq($maxnum);
+ $lastpat = pop(@patseq);
+ $argv = &rangeargs("$lastpat-$maxnum");
+}
+else {
+ $argv = &rangeargs(@ARGV);
+}
+
+@ARGV = split(' ',$argv);
+$argv =~ s/ $//;
+
+if ($#ARGV < 0) {
+ print STDERR "$progname: no patches specified.\n";
+ &usage;
+} elsif ($#ARGV) {
+ print
+ "$progname: posting $package $baserev patches $argv to $newsgroups...\n";
+} else {
+ print
+ "$progname: posting $package $baserev patch $argv to $newsgroups...\n";
+}
+
+chdir 'bugs' || die "$progname: can't cd to bugs: $!\n";
+
+fork && exit;
+
+until ($#ARGV < 0) {
+ $patnum = shift;
+ open(PATCH,"patch$patnum") ||
+ die "$progname: can't open patch$patnum: $!\n";
+ open(XHEAD,"|$inews -h") || die "$progname: can't fork $inews: $!\n";
+ print XHEAD
+"From: $maintloc ($maintname)
+Newsgroups: $newsgroups
+Subject: $package $baserev patch #$patnum$repost
+Summary: This is an official patch for $package $baserev. Please apply it.
+Expires:
+References:
+Sender:
+Distribution:
+Organization: $orgname
+Keywords:
+
+";
+ while (<PATCH>) {
+ print XHEAD;
+ }
+ close PATCH;
+ close XHEAD;
+ die "$progname: could not post patch$patnum.\n" if $?;
+}
+
+sub usage {
+ print STDERR <<EOM;
+Usage: $progname [-hrV] patchlist newsgroups
+ -h : print this message and exit
+ -r : signals a repost
+ -V : print version number and exit
+EOM
+ exit 1;
+}
+
+!NO!SUBS!
+$grep -v '^;#' ../pl/package.pl >>patpost
+$grep -v '^;#' ../pl/rangeargs.pl >>patpost
+$grep -v '^;#' ../pl/patseq.pl >>patpost
+$grep -v '^;#' ../pl/tilde.pl >>patpost
+$grep -v '^;#' ../pl/profile.pl >>patpost
+chmod +x patpost
+$eunicefix patpost
diff --git a/pat/patsend.SH b/pat/patsend.SH
new file mode 100755
index 0000000..0fe7f42
--- /dev/null
+++ b/pat/patsend.SH
@@ -0,0 +1,218 @@
+case $CONFIG in
+'')
+ if test -f config.sh; then TOP=.;
+ elif test -f ../config.sh; then TOP=..;
+ elif test -f ../../config.sh; then TOP=../..;
+ elif test -f ../../../config.sh; then TOP=../../..;
+ elif test -f ../../../../config.sh; then TOP=../../../..;
+ else
+ echo "Can't find config.sh."; exit 1
+ fi
+ . $TOP/config.sh
+ ;;
+esac
+case "$0" in
+*/*) cd `expr X$0 : 'X\(.*\)/'` ;;
+esac
+echo "Extracting pat/patsend (with variable substitutions)"
+cat >patsend <<!GROK!THIS!
+$startperl
+ eval 'exec perl -S \$0 \${1+"\$@"}'
+ if \$running_under_some_shell;
+
+# $Id$
+#
+# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+#
+# You may redistribute only under the terms of the Artistic Licence,
+# as specified in the README file that comes with the distribution.
+# You may reuse parts of this distribution only within the terms of
+# that same Artistic Licence; a copy of which may be found at the root
+# of the source tree for dist 4.0.
+#
+# Original Author: Larry Wall <lwall@netlabs.com>
+#
+# $Log: patsend.SH,v $
+# Revision 3.0.1.6 1995/09/25 09:22:02 ram
+# patch59: new -i option to add more instructions for end-users
+#
+# Revision 3.0.1.5 1994/01/24 14:32:46 ram
+# patch16: now prefix error messages with program's name
+# patch16: don't feed mailer with more than 50 addresses at a time
+# patch16: added ~/.dist_profile awareness
+#
+# Revision 3.0.1.4 1993/08/25 14:08:01 ram
+# patch6: now asks for recipient list edition by default
+# patch6: new -q option to suppress that
+#
+# Revision 3.0.1.3 1993/08/24 12:21:59 ram
+# patch3: new -u option
+# patch3: added Precedence and X-Mailer headers in mail message
+# patch3: added ~name expansion for orgname
+#
+# Revision 3.0.1.2 1993/08/19 07:10:19 ram
+# patch3: was not correctly writing the To: header field
+#
+# Revision 3.0.1.1 1993/08/19 06:42:42 ram
+# patch1: leading config.sh searching was not aborting properly
+#
+# Revision 3.0 1993/08/18 12:10:49 ram
+# Baseline for dist 3.0 netwide release.
+#
+
+\$orgname='$orgname';
+\$mailer='$mailer';
+\$version = '$VERSION';
+\$patchlevel = '$PATCHLEVEL';
+!GROK!THIS!
+cat >>patsend <<'!NO!SUBS!'
+
+$progname = &profile; # Read ~/.dist_profile
+require 'getopts.pl';
+&usage unless &Getopts("hiquV");
+
+if ($opt_V) {
+ print STDERR "$progname $version PL$patchlevel\n";
+ exit 0;
+} elsif ($opt_h) {
+ &usage;
+}
+
+chdir '..' if -d '../bugs';
+
+&readpackage;
+&readusers if $opt_u;
+
+$orgname = &tilda_expand($orgname);
+chop($orgname = `cat $orgname`) if $orgname =~ m|^/|;
+
+while ($_ = shift) {
+ if (/^(patch)?[1-9][\d,-]*$/) {
+ s/^patch//;
+ push(@argv,$_);
+ } else {
+ push(@dest,$_);
+ }
+}
+$dest = join(' ',@dest);
+$dest .= " $recipients" if $opt_u;
+&usage unless $dest;
+
+# Offer to edit the address list unless -q
+unless ($opt_q) {
+ select((select(STDOUT), $| = 1)[0]);
+ print "Do you wish to edit the address list? [y] ";
+ $ans = <STDIN>;
+ unless ($ans =~ /^n/i) {
+ @to = split(' ', $dest);
+ &listedit(*to);
+ $dest = join(' ', @to);
+ }
+}
+
+$to = join(', ', split(' ', $dest));
+@ARGV = @argv;
+
+open(PL,"patchlevel.h") || die "$progname: can't open patchlevel.h: $!\n";
+while (<PL>) {
+ $maxnum = $1 if /^#define\s+PATCHLEVEL\s+(\d+)/;
+}
+close PL;
+die "$progname: malformed patchlevel.h file.\n" if $maxnum eq '';
+
+if ($#ARGV < 0) {
+ @patseq = &patseq($maxnum);
+ $lastpat = pop(@patseq);
+ $argv = &rangeargs("$lastpat-$maxnum");
+} else {
+ $argv = &rangeargs(@ARGV);
+}
+
+@ARGV = split(' ',$argv);
+$argv =~ s/ $//;
+
+if ($#ARGV < 0) {
+ print STDERR "$progname: no patches specified.\n";
+ &usage;
+} elsif ($#ARGV) {
+ print "$progname: sending $package $baserev patches $argv to $dest...\n";
+} else {
+ print "$progname: sending $package $baserev patch $argv to $dest...\n";
+}
+
+chdir 'bugs' || die "$progname: can't cd to bugs: $!\n";
+
+fork && exit;
+
+$opt = '-odq' if $mailer =~ /sendmail/;
+
+until ($#ARGV < 0) {
+ $patnum = shift;
+
+ # I hate broken mailers! Bust it up into smaller groups of people...
+ @dest = split(' ', $dest);
+ while (@smalldest = splice(@dest, 0, 50)) {
+ $to = join(', ', @smalldest); # Sensible To: for sendmail
+ $smalldest = join(' ', @smalldest);
+
+ open(MAILER, "|$mailer $opt $smalldest") ||
+ die "$progname: can't fork $mailer: $!\n";
+ print MAILER
+"To: $to
+Subject: $package $baserev patch #$patnum
+Precedence: bulk
+X-Mailer: dist [version $version PL$patchlevel]
+Organization: $orgname
+
+";
+ print MAILER
+"$package version $baserev has been recently upgraded with the following patch,
+which is being mailed directly to you as you requested when running Configure.
+
+If you are not interested in having future patches mailed directly to you,
+please send me the following mail:
+
+ Subject: Command
+ \@SH package - $package $baserev
+
+-- $progname speaking for $maintname <$maintloc>.
+
+" if ($opt_i || $opt_u);
+ print MAILER
+"[The latest patch for $package version $baserev is #$maxnum.]
+
+";
+ open(PATCH,"patch$patnum") ||
+ die "$progname: can't open patch$patnum: $!\n";
+ while (<PATCH>) {
+ print MAILER;
+ }
+ close PATCH;
+ close MAILER;
+ die "$progname: could not mail patch$patnum.\n" if $?;
+ }
+}
+
+sub usage {
+ print STDERR <<EOM;
+Usage: $progname [-hiquV] [patchlist] [recipients]
+ -h : print this message and exit
+ -i : include information on how to stop receiving future patches
+ -q : quick mode, do not offer to edit recipient list
+ -u : add all to-be-mailed users
+ -V : print version number and exit
+EOM
+ exit 1;
+}
+
+!NO!SUBS!
+$grep -v '^;#' ../pl/package.pl >>patsend
+$grep -v '^;#' ../pl/rangeargs.pl >>patsend
+$grep -v '^;#' ../pl/users.pl >>patsend
+$grep -v '^;#' ../pl/patseq.pl >>patsend
+$grep -v '^;#' ../pl/tilde.pl >>patsend
+$grep -v '^;#' ../pl/editor.pl >>patsend
+$grep -v '^;#' ../pl/listedit.pl >>patsend
+$grep -v '^;#' ../pl/profile.pl >>patsend
+chmod +x patsend
+$eunicefix patsend
diff --git a/pat/patsnap.SH b/pat/patsnap.SH
new file mode 100755
index 0000000..18cbdb5
--- /dev/null
+++ b/pat/patsnap.SH
@@ -0,0 +1,124 @@
+case $CONFIG in
+'')
+ if test -f config.sh; then TOP=.;
+ elif test -f ../config.sh; then TOP=..;
+ elif test -f ../../config.sh; then TOP=../..;
+ elif test -f ../../../config.sh; then TOP=../../..;
+ elif test -f ../../../../config.sh; then TOP=../../../..;
+ else
+ echo "Can't find config.sh."; exit 1
+ fi
+ . $TOP/config.sh
+ ;;
+esac
+case "$0" in
+*/*) cd `expr X$0 : 'X\(.*\)/'` ;;
+esac
+echo "Extracting pat/patsnap (with variable substitutions)"
+cat >patsnap <<!GROK!THIS!
+$startperl
+ eval 'exec perl -S \$0 \${1+"\$@"}'
+ if \$running_under_some_shell;
+
+# $Id$
+#
+# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+#
+# You may redistribute only under the terms of the Artistic Licence,
+# as specified in the README file that comes with the distribution.
+# You may reuse parts of this distribution only within the terms of
+# that same Artistic Licence; a copy of which may be found at the root
+# of the source tree for dist 4.0.
+#
+# $Log: patsnap.SH,v $
+# Revision 3.0.1.2 1994/01/24 14:33:08 ram
+# patch16: now prefix error messages with program's name
+# patch16: added ~/.dist_profile awareness
+#
+# Revision 3.0.1.1 1993/08/24 12:22:08 ram
+# patch3: created
+#
+
+\$version = '$VERSION';
+\$patchlevel = '$PATCHLEVEL';
+!GROK!THIS!
+cat >>patsnap <<'!NO!SUBS!'
+
+$progname = &profile; # Read ~/.dist_profile
+require 'getopts.pl';
+&usage unless $#ARGV >= 0;
+&usage unless &Getopts("aho:V");
+
+$SNAPSHOT = 'SNAPSHOT'; # Default snapshot file name
+
+if ($opt_V) {
+ print STDERR "$progname $version PL$patchlevel\n";
+ exit 0;
+} elsif ($opt_h) {
+ &usage;
+}
+
+&readpackage;
+
+$RCSEXT = ',v' unless $RCSEXT;
+$TOPDIR = ''; # We are at the top-level directory
+$SNAPSHOT = $opt_o if $opt_o;
+
+if ($opt_a) {
+ open(MANI,"MANIFEST.new") || die "$progname: can't read MANIFEST.new: $!\n";
+ @ARGV = ();
+ while (<MANI>) {
+ chop;
+ s|^\./||;
+ next if m|^patchlevel.h|; # Special file
+ ($_) = split(' ');
+ next if -d;
+ push(@ARGV,$_);
+ }
+ close MANI;
+}
+
+open(SNAPSHOT, ">$SNAPSHOT") || die "$progname: can't create $SNAPSHOT: $!\n";
+
+foreach $file (@ARGV) {
+ $files = &rcsargs($file);
+ @files = split(' ',$files);
+ $revs=0;
+ $rlog = `rlog -r$baserev -r$revbranch $files 2>&1`;
+ ($revs) = ($rlog =~ /selected revisions: (\d+)/);
+ if (!$revs) {
+ print "$progname: $file has never been checked in--skipping\n";
+ next;
+ }
+ elsif ($revs == 1) {
+ print "$progname: last revision for $file is $baserev.\n";
+ print SNAPSHOT "$file\t$baserev\n";
+ }
+ else {
+ ($lastrev) = ($rlog =~ /revision $revbranch\.(\d+)/);
+ print "$progname: last revision for $file is $revbranch.$lastrev.\n";
+ print SNAPSHOT "$file\t$revbranch.$lastrev\n";
+ }
+}
+
+close SNAPSHOT;
+
+sub usage {
+ print STDERR <<EOM;
+Usage: $progname [-ahV] [-o snapshot] [filelist]
+ -a : all the files in MANIFEST.new
+ -h : print this message and exit
+ -o : specify snapshot file output (default $SNAPSHOT)
+ -V : print version number and exit
+EOM
+ exit 1;
+}
+
+!NO!SUBS!
+$grep -v '^;#' ../pl/package.pl >>patsnap
+$grep -v '^;#' ../pl/rcsargs.pl >>patsnap
+$grep -v '^;#' ../pl/comment.pl >>patsnap
+$grep -v '^;#' ../pl/tilde.pl >>patsnap
+$grep -v '^;#' ../pl/profile.pl >>patsnap
+chmod +x patsnap
+$eunicefix patsnap
diff --git a/patchlevel.h b/patchlevel.h
new file mode 100644
index 0000000..b3ccc99
--- /dev/null
+++ b/patchlevel.h
@@ -0,0 +1,5 @@
+/* dist-3.0 - 18 Aug 1993 */
+/* dist-3.5 - 25 Aug 2006 */
+
+#define VERSION 3.5
+#define PATCHLEVEL 0
diff --git a/pl/comment.pl b/pl/comment.pl
new file mode 100644
index 0000000..2059466
--- /dev/null
+++ b/pl/comment.pl
@@ -0,0 +1,46 @@
+;# $Id$
+;#
+;# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+;#
+;# You may redistribute only under the terms of the Artistic Licence,
+;# as specified in the README file that comes with the distribution.
+;# You may reuse parts of this distribution only within the terms of
+;# that same Artistic Licence; a copy of which may be found at the root
+;# of the source tree for dist 4.0.
+;#
+;# $Log: comment.pl,v $
+;# Revision 3.0 1993/08/18 12:10:50 ram
+;# Baseline for dist 3.0 netwide release.
+;#
+;#
+sub rcscomment {
+ local($file) = @_;
+ local($comment) = '';
+ open(FILE,$file);
+ while (<FILE>) {
+ if (/^(.*)\$Log[:\$]/) { # They know better than us (hopefully)
+ $comment = $1;
+ last;
+ }
+ }
+ close FILE;
+ unless ($comment) {
+ if ($file =~ /\.SH$|[Mm]akefile/) { # Makefile template
+ $comment = '# ';
+ } elsif ($file =~ /\.U$/) { # Metaconfig unit
+ $comment = '?RCS: ';
+ } elsif ($file =~ /\.man$/) { # Manual page
+ $comment = "''' ";
+ } elsif ($file =~ /\.\d\w?$/) { # Manual page
+ $comment = "''' ";
+ } elsif ($file =~ /\.[chyl]$/) { # C source
+ $comment = " * ";
+ } elsif ($file =~ /\.e$/) { # Eiffel source
+ $comment = "-- ";
+ } elsif ($file =~ /\.pl$/) { # Perl library
+ $comment = ";# ";
+ }
+ }
+ $comment;
+}
+
diff --git a/pl/copyright.pl b/pl/copyright.pl
new file mode 100644
index 0000000..5216048
--- /dev/null
+++ b/pl/copyright.pl
@@ -0,0 +1,71 @@
+;# $Id$
+;#
+;# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+;#
+;# You may redistribute only under the terms of the Artistic Licence,
+;# as specified in the README file that comes with the distribution.
+;# You may reuse parts of this distribution only within the terms of
+;# that same Artistic Licence; a copy of which may be found at the root
+;# of the source tree for dist 4.0.
+;#
+;# $Log: copyright.pl,v $
+;# Revision 3.0 1993/08/18 12:10:51 ram
+;# Baseline for dist 3.0 netwide release.
+;#
+;#
+;# Copyright expansion. The @COPYRIGHT@ symbol is expanded the first time
+;# it is seen in a file, and before the $Log RCS marker is reached. The
+;# automaton needs to be reset for each file.
+;#
+package copyright;
+
+# Read in copyright file
+sub init {
+ local($file) = @_; # Copyright file
+ undef @copyright;
+ open(COPYRIGHT, $file) || die "Can't open $file: $!\n";
+ chop(@copyright = <COPYRIGHT>);
+ close COPYRIGHT;
+}
+
+# Reset the automaton for a new file.
+sub reset {
+ $copyright_seen = @copyright ? 0 : 1;
+ $marker_seen = 0;
+}
+
+# Filter file, line by line, and expand the copyright string. The @COPYRIGHT@
+# symbol may be preceded by some random comment. A leader can be defined and
+# will be pre-pended to all the input lines.
+sub filter {
+ local($line, $leader) = @_; # Leader is optional
+ return $leader . $line if $copyright_seen || $marker_seen;
+ $marker_seen = 1 if $line =~ /\$Log[:\$]/;
+ $copyright_seen = 1 if $line =~ /\@COPYRIGHT\@/;
+ return $leader . $line unless $copyright_seen;
+ local($comment, $trailer) = $line =~ /^(.*)\@COPYRIGHT\@\s*(.*)/;
+ $comment = $leader . $comment;
+ $comment . join("\n$comment", @copyright) . "\n";
+}
+
+# Filter output of $cmd redirected into $file by expanding copyright, if any.
+sub expand {
+ local($cmd, $file) = @_;
+ if (@copyright) {
+ open(CMD,"$cmd|") || die "Can't start '$cmd': $!\n";
+ open(OUT, ">$file") || die "Can't create $file: $!\n";
+ &reset;
+ local($_);
+ while (<CMD>) {
+ print OUT &filter($_);
+ }
+ close OUT;
+ close CMD;
+ } else {
+ system "$cmd > $file";
+ die "Command '$cmd' failed!" if $?;
+ }
+}
+
+package main;
+
diff --git a/pl/editor.pl b/pl/editor.pl
new file mode 100644
index 0000000..4c59cc4
--- /dev/null
+++ b/pl/editor.pl
@@ -0,0 +1,23 @@
+;# $Id$
+;#
+;# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+;#
+;# You may redistribute only under the terms of the Artistic Licence,
+;# as specified in the README file that comes with the distribution.
+;# You may reuse parts of this distribution only within the terms of
+;# that same Artistic Licence; a copy of which may be found at the root
+;# of the source tree for dist 4.0.
+;#
+;# $Log: editor.pl,v $
+;# Revision 3.0.1.1 1993/08/25 14:08:07 ram
+;# patch6: created
+;#
+# Compute suitable editor name
+sub geteditor {
+ local($editor) = $ENV{'VISUAL'};
+ $editor = $ENV{'EDITOR'} unless $editor;
+ $editor = $defeditor unless $editor;
+ $editor = 'vi' unless $editor;
+ $editor;
+}
+
diff --git a/pl/fullname.pl b/pl/fullname.pl
new file mode 100644
index 0000000..3305d10
--- /dev/null
+++ b/pl/fullname.pl
@@ -0,0 +1,49 @@
+;# $Id$
+;#
+;# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+;#
+;# You may redistribute only under the terms of the Artistic Licence,
+;# as specified in the README file that comes with the distribution.
+;# You may reuse parts of this distribution only within the terms of
+;# that same Artistic Licence; a copy of which may be found at the root
+;# of the source tree for dist 4.0.
+;#
+;# $Log: fullname.pl,v $
+;# Revision 3.0 1993/08/18 12:10:52 ram
+;# Baseline for dist 3.0 netwide release.
+;#
+;#
+sub getfullname {
+ local($logname) = @_;
+ local($foo,$bar);
+ if ($ENV{'NAME'}) {
+ $ENV{'NAME'};
+ } else {
+ open(PASSWD,'/etc/passwd') || die "Can't open /etc/passwd";
+ while (<PASSWD>) {
+ /(\w+):/;
+ last if $1 eq $logname;
+ }
+ close PASSWD;
+ local($login,$passwd,$uid,$gid,$gcos,$home,$shell) = split(/:/);
+ if (-f "$home/.fullname") {
+ open(FN,"$home/.fullname");
+ chop($foo = <FN>);
+ close FN;
+ $foo;
+ } elsif ($nametype eq 'bsd') {
+ $gcos =~ s/[,;].*//;
+ if ($gcos =~ /&/) { # oh crud
+ ($foo,$bar) = ($logname =~ /(.)(.*)/);
+ $foo =~ y/a-z/A-Z/;
+ $gcos =~ s/&/$foo$bar/;
+ }
+ $gcos;
+ } else {
+ $gcos =~ s/[(].*//;
+ $gcos =~ s/.*-//;
+ $gcos;
+ }
+ }
+}
+
diff --git a/pl/listedit.pl b/pl/listedit.pl
new file mode 100644
index 0000000..4eb5c81
--- /dev/null
+++ b/pl/listedit.pl
@@ -0,0 +1,36 @@
+;# $Id$
+;#
+;# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+;#
+;# You may redistribute only under the terms of the Artistic Licence,
+;# as specified in the README file that comes with the distribution.
+;# You may reuse parts of this distribution only within the terms of
+;# that same Artistic Licence; a copy of which may be found at the root
+;# of the source tree for dist 4.0.
+;#
+;# $Log: listedit.pl,v $
+;# Revision 3.0.1.2 1993/08/27 14:40:57 ram
+;# patch7: forgot to unlink temporary file
+;#
+;# Revision 3.0.1.1 1993/08/25 14:08:12 ram
+;# patch6: created
+;#
+;# Requires geteditor.pl
+;#
+# Allow user to inplace-edit a list of items held in an array
+sub listedit {
+ local(*list) = @_;
+ local($tmp) = "/tmp/dist.$$";
+ local($editor) = &geteditor;
+ open(TMP, ">$tmp") || die "Can't create $tmp: $!\n";
+ foreach $item (@list) {
+ print TMP $item, "\n";
+ }
+ close TMP;
+ system "$editor $tmp";
+ open(TMP, "$tmp") || die "Can't reopen $tmp: $!\n";
+ chop(@list = <TMP>);
+ close TMP;
+ unlink $tmp;
+}
+
diff --git a/pl/logname.pl b/pl/logname.pl
new file mode 100644
index 0000000..70e3a03
--- /dev/null
+++ b/pl/logname.pl
@@ -0,0 +1,24 @@
+;# $Id$
+;#
+;# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+;#
+;# You may redistribute only under the terms of the Artistic Licence,
+;# as specified in the README file that comes with the distribution.
+;# You may reuse parts of this distribution only within the terms of
+;# that same Artistic Licence; a copy of which may be found at the root
+;# of the source tree for dist 4.0.
+;#
+;# $Log: logname.pl,v $
+;# Revision 3.0 1993/08/18 12:10:53 ram
+;# Baseline for dist 3.0 netwide release.
+;#
+;#
+sub getlogname {
+ local($logname) = $ENV{'USER'};
+ $logname = $ENV{'LOGNAME'} unless $logname;
+ chop($logname = `who am i`) unless $logname;
+ $logname =~ s/\s.*//;
+ $logname =~ s/.*!//;
+ $logname;
+}
+
diff --git a/pl/makedir.pl b/pl/makedir.pl
new file mode 100644
index 0000000..a358deb
--- /dev/null
+++ b/pl/makedir.pl
@@ -0,0 +1,29 @@
+;# $Id$
+;#
+;# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+;#
+;# You may redistribute only under the terms of the Artistic Licence,
+;# as specified in the README file that comes with the distribution.
+;# You may reuse parts of this distribution only within the terms of
+;# that same Artistic Licence; a copy of which may be found at the root
+;# of the source tree for dist 4.0.
+;#
+;# $Log: makedir.pl,v $
+;# Revision 3.0 1993/08/18 12:10:54 ram
+;# Baseline for dist 3.0 netwide release.
+;#
+;#
+# Make directories for files
+# E.g, for /usr/lib/perl/foo, it will check for all the
+# directories /usr, /usr/lib, /usr/lib/perl and make
+# them if they do not exist.
+sub makedir {
+ local($_) = shift;
+ local($dir) = $_;
+ if (!-d && $_ ne '') {
+ # Make dirname first
+ do makedir($_) if s|(.*)/.*|\1|;
+ mkdir($dir, 0700) if ! -d $dir;
+ }
+}
+
diff --git a/pl/manifake.pl b/pl/manifake.pl
new file mode 100644
index 0000000..1096adf
--- /dev/null
+++ b/pl/manifake.pl
@@ -0,0 +1,42 @@
+;# $Id$
+;#
+;# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+;#
+;# You may redistribute only under the terms of the Artistic Licence,
+;# as specified in the README file that comes with the distribution.
+;# You may reuse parts of this distribution only within the terms of
+;# that same Artistic Licence; a copy of which may be found at the root
+;# of the source tree for dist 4.0.
+;#
+;# $Log: manifake.pl,v $
+;# Revision 3.0 1993/08/18 12:10:55 ram
+;# Baseline for dist 3.0 netwide release.
+;#
+;#
+sub manifake {
+ # make MANIFEST and MANIFEST.new say the same thing
+ if (! -f $NEWMANI) {
+ if (-f $MANI) {
+ open(IN,$MANI) || die "Can't open $MANI";
+ open(OUT,">$NEWMANI") || die "Can't create $NEWMANI";
+ while (<IN>) {
+ if (/---/) {
+ # Everything until now was a header...
+ close OUT;
+ open(OUT,">$NEWMANI") ||
+ die "Can't recreate $NEWMANI";
+ next;
+ }
+ s/^\s*(\S+\s+)[0-9]*\s*(.*)/$1$2/;
+ print OUT;
+ print OUT "\n" unless /\n$/; # If no description
+ }
+ close IN;
+ close OUT;
+ }
+ else {
+die "You need to make a $NEWMANI file, with names and descriptions.\n";
+ }
+ }
+}
+
diff --git a/pl/newer.pl b/pl/newer.pl
new file mode 100644
index 0000000..21839d2
--- /dev/null
+++ b/pl/newer.pl
@@ -0,0 +1,78 @@
+;# $Id$
+;#
+;# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+;#
+;# You may redistribute only under the terms of the Artistic Licence,
+;# as specified in the README file that comes with the distribution.
+;# You may reuse parts of this distribution only within the terms of
+;# that same Artistic Licence; a copy of which may be found at the root
+;# of the source tree for dist 4.0.
+;#
+;# $Log: newer.pl,v $
+;# Revision 3.0.1.2 1994/01/24 14:33:48 ram
+;# patch16: now also aborts when .newer file holds a single new-line
+;#
+;# Revision 3.0.1.1 1993/09/09 11:51:07 ram
+;# patch9: now skips the 'users' file when computing newest file list
+;#
+;# Revision 3.0 1993/08/18 12:10:56 ram
+;# Baseline for dist 3.0 netwide release.
+;#
+;#
+sub newer {
+ open(FIND, "find . -type f -newer patchlevel.h -print | sort |") ||
+ die "Can't run find.\n";
+ open(NEWER,">.newer") || die "Can't create .newer.\n";
+ open(MANI,"MANIFEST.new");
+ while (<MANI>) {
+ ($name,$foo) = split;
+ $mani{$name} = 1;
+ }
+ close MANI;
+ while (<FIND>) {
+ s|^\./||;
+ chop;
+ next if m|^MANIFEST|;
+ next if m|^PACKLIST$|;
+ if (!$mani{$_}) {
+ next if m|^MANIFEST.new$|;
+ next if m|^Changes$|;
+ next if m|^Wanted$|;
+ next if m|^.package$|;
+ next if m|^bugs|;
+ next if m|^users$|;
+ next if m|^UU/|;
+ next if m|^RCS/|;
+ next if m|/RCS/|;
+ next if m|^config.sh$|;
+ next if m|/config.sh$|;
+ next if m|^make.out$|;
+ next if m|/make.out$|;
+ next if m|^all$|;
+ next if m|/all$|;
+ next if m|^core$|;
+ next if m|/core$|;
+ next if m|^toto|;
+ next if m|/toto|;
+ next if m|^\.|;
+ next if m|/\.|;
+ next if m|\.o$|;
+ next if m|\.old$|;
+ next if m|\.orig$|;
+ next if m|~$|;
+ next if $mani{$_ . ".SH"};
+ next if m|(.*)\.c$| && $mani{$1 . ".y"};
+ next if m|(.*)\.c$| && $mani{$1 . ".l"};
+ next if (-x $_ && !m|^Configure$|);
+ }
+ print NEWER $_,"\n";
+ }
+ close FIND;
+ close NEWER;
+ print "Please remove unwanted files...\n";
+ sleep(2);
+ system '${EDITOR-vi} .newer';
+ die "Aborted.\n" unless -s '.newer' > 1;
+ @ARGV = split(' ',`cat .newer`);
+}
+
diff --git a/pl/package.pl b/pl/package.pl
new file mode 100644
index 0000000..ba52e1a
--- /dev/null
+++ b/pl/package.pl
@@ -0,0 +1,40 @@
+;# $Id$
+;#
+;# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+;#
+;# You may redistribute only under the terms of the Artistic Licence,
+;# as specified in the README file that comes with the distribution.
+;# You may reuse parts of this distribution only within the terms of
+;# that same Artistic Licence; a copy of which may be found at the root
+;# of the source tree for dist 4.0.
+;#
+;# $Log: package.pl,v $
+;# Revision 3.0 1993/08/18 12:10:57 ram
+;# Baseline for dist 3.0 netwide release.
+;#
+;#
+sub readpackage {
+ if (! -f '.package') {
+ if (
+ -f '../.package' ||
+ -f '../../.package' ||
+ -f '../../../.package' ||
+ -f '../../../../.package'
+ ) {
+ die "Run in top level directory only.\n";
+ } else {
+ die "No .package file! Run packinit.\n";
+ }
+ }
+ open(PACKAGE,'.package');
+ while (<PACKAGE>) {
+ next if /^:/;
+ next if /^#/;
+ if (($var,$val) = /^\s*(\w+)=(.*)/) {
+ $val = "\"$val\"" unless $val =~ /^['"]/;
+ eval "\$$var = $val;";
+ }
+ }
+ close PACKAGE;
+}
+
diff --git a/pl/patseq.pl b/pl/patseq.pl
new file mode 100644
index 0000000..6647695
--- /dev/null
+++ b/pl/patseq.pl
@@ -0,0 +1,27 @@
+;# $Id$
+;#
+;# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+;#
+;# You may redistribute only under the terms of the Artistic Licence,
+;# as specified in the README file that comes with the distribution.
+;# You may reuse parts of this distribution only within the terms of
+;# that same Artistic Licence; a copy of which may be found at the root
+;# of the source tree for dist 4.0.
+;#
+;# $Log: patseq.pl,v $
+;# Revision 3.0.1.1 1993/08/24 12:22:14 ram
+;# patch3: created
+;#
+;#
+# Compute patch sequence by scanning the bugs directory and looking for
+# .logs and/or .mods files to determine what was the last issued patch series.
+sub patseq {
+ local($cur) = @_; # Current patch level
+ local(@seq); # Issued patch sequence
+ local($i);
+ for ($i = 1; $i <= $cur; $i++) {
+ push(@seq, $i) if -f "bugs/.logs$i" || -f "bugs/.mods$i";
+ }
+ @seq;
+}
+
diff --git a/pl/profile.pl b/pl/profile.pl
new file mode 100644
index 0000000..5a588ff
--- /dev/null
+++ b/pl/profile.pl
@@ -0,0 +1,73 @@
+;# $Id$
+;#
+;# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+;#
+;# You may redistribute only under the terms of the Artistic Licence,
+;# as specified in the README file that comes with the distribution.
+;# You may reuse parts of this distribution only within the terms of
+;# that same Artistic Licence; a copy of which may be found at the root
+;# of the source tree for dist 4.0.
+;#
+;# $Log: profile.pl,v $
+;# Revision 3.0.1.1 1994/01/24 14:33:53 ram
+;# patch16: created
+;#
+;#
+;# Dist profile management (works like MH and its ~/.mh_profile):
+;# - Profile name is held in the environment variable DIST. If not defined,
+;# use ~/.dist_profile by default.
+;# - Each line in the profile not starting with a '#' (comment line) should
+;# have the following format:
+;# progname: additional command line options
+;# The profile is parsed once when the command is launched and profile
+;# options are added at the beginning of the @ARGV array.
+;#
+;# Per-program configuration values may be also be added. For instance,
+;# program foo may pay attention to a profile component 'bar', which may be
+;# set via:
+;# foo-bar: value
+;# i.e. the program name is followed by a '-', followed by the profile
+;# component.
+;#
+;# Uses &tilda_expand to perform ~name substitution.
+;# Requires shellwords.pl to properly quote shell words (perl library).
+;#
+# Set up profile components into %Profile, add any profile-supplied options
+# into @ARGV and return the command invocation name.
+sub profile {
+ local($profile) = &tilda_expand($ENV{'DIST'} || '~/.dist_profile');
+ local($me) = $0; # Command name
+ $me =~ s|.*/(.*)|$1|; # Keep only base name
+ return $me unless -s $profile;
+ local(*PROFILE); # Local file descriptor
+ local($options) = ''; # Options we get back from profile
+ unless (open(PROFILE, $profile)) {
+ warn "$me: cannot open $profile: $!\n";
+ return;
+ }
+ local($_);
+ local($component);
+ while (<PROFILE>) {
+ next if /^\s*#/; # Skip comments
+ next unless /^$me/o;
+ if (s/^$me://o) { # progname: options
+ chop;
+ $options .= $_; # Merge options if more than one line
+ }
+ elsif (s/^$me-([^:]+)://o) { # progname-component: value
+ $component = $1;
+ chop;
+ s/^\s+//; # Trim leading and trailing spaces
+ s/\s+$//;
+ $Profile{$component} = $_;
+ }
+ }
+ close PROFILE;
+ return unless $options;
+ require 'shellwords.pl';
+ local(@opts);
+ eval '@opts = &shellwords($options)'; # Protect against mismatched quotes
+ unshift(@ARGV, @opts);
+ return $me; # Return our invocation name
+}
+
diff --git a/pl/rangeargs.pl b/pl/rangeargs.pl
new file mode 100644
index 0000000..9212f84
--- /dev/null
+++ b/pl/rangeargs.pl
@@ -0,0 +1,48 @@
+;# $Id$
+;#
+;# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+;#
+;# You may redistribute only under the terms of the Artistic Licence,
+;# as specified in the README file that comes with the distribution.
+;# You may reuse parts of this distribution only within the terms of
+;# that same Artistic Licence; a copy of which may be found at the root
+;# of the source tree for dist 4.0.
+;#
+;# $Log: rangeargs.pl,v $
+;# Revision 3.0 1993/08/18 12:10:58 ram
+;# Baseline for dist 3.0 netwide release.
+;#
+;#
+sub rangeargs {
+ local($result) = '';
+ local($min,$max,$_);
+ open(PL,"patchlevel.h") || die "Can't open patchlevel.h\n";
+ while (<PL>) {
+ $maxspec = $1 if /^#define\s+PATCHLEVEL\s+(\d+)/;
+ }
+ close PL;
+ die "Malformed patchlevel.h file.\n" if $maxspec eq '';
+ while ($#_ >= 0) {
+ $_ = shift(@_);
+ while (/^\s*\d/) {
+ s/^\s*(\d+)//;
+ $min = $1;
+ if (s/^,//) {
+ $max = $min;
+ } elsif (s/^-(\d*)//) {
+ $max = $1;
+ if ($max == 0 && $maxspec) {
+ $max = $maxspec;
+ }
+ s/^[^,],?//;
+ } else {
+ $max = $min;
+ }
+ for ($i = $min; $i <= $max; ++$i) {
+ $result .= $i . ' ';
+ }
+ }
+ }
+ $result;
+}
+
diff --git a/pl/rcsargs.pl b/pl/rcsargs.pl
new file mode 100644
index 0000000..8fdeab1
--- /dev/null
+++ b/pl/rcsargs.pl
@@ -0,0 +1,60 @@
+;# $Id$
+;#
+;# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+;#
+;# You may redistribute only under the terms of the Artistic Licence,
+;# as specified in the README file that comes with the distribution.
+;# You may reuse parts of this distribution only within the terms of
+;# that same Artistic Licence; a copy of which may be found at the root
+;# of the source tree for dist 4.0.
+;#
+;# $Log: rcsargs.pl,v $
+;# Revision 3.0 1993/08/18 12:11:01 ram
+;# Baseline for dist 3.0 netwide release.
+;#
+;#
+sub rcsargs {
+ local($result) = '';
+ local($_);
+ while ($_ = shift(@_)) {
+ if ($_ =~ /^-/) {
+ $result .= $_ . ' ';
+ } elsif ($#_ >= 0 && do equiv($_,$_[0])) {
+ $result .= $_ . ' ' . $_[0] . ' ';
+ shift(@_);
+ } else {
+ $result .= $_ . ' ' . do other($_) . ' ';
+ }
+ }
+ $result;
+}
+
+sub equiv {
+ local($s1, $s2) = @_;
+ $s1 =~ s|.*/||;
+ $s2 =~ s|.*/||;
+ if ($s1 eq $s2) {
+ 0;
+ } elsif ($s1 =~ s/$RCSEXT$// || $s2 =~ s/$RCSEXT$//) {
+ $s1 eq $s2;
+ } else {
+ 0;
+ }
+}
+
+sub other {
+ local($s1) = @_;
+ ($dir,$file) = ('./',$s1) unless local($dir,$file) = ($s1 =~ m|(.*/)(.*)|);
+ $dir = $TOPDIR . $dir if -d $TOPDIR . "$dir/RCS";
+ local($wasrcs) = ($file =~ s/$RCSEXT$//);
+ if ($wasrcs) {
+ `mkdir $dir` unless -d $dir;
+ $dir =~ s|RCS/||;
+ } else {
+ $dir .= 'RCS/';
+ `mkdir $dir` unless -d $dir;
+ $file .= $RCSEXT;
+ }
+ "$dir$file";
+}
+
diff --git a/pl/snapshot.pl b/pl/snapshot.pl
new file mode 100644
index 0000000..8eb40d9
--- /dev/null
+++ b/pl/snapshot.pl
@@ -0,0 +1,28 @@
+;# $Id$
+;#
+;# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+;#
+;# You may redistribute only under the terms of the Artistic Licence,
+;# as specified in the README file that comes with the distribution.
+;# You may reuse parts of this distribution only within the terms of
+;# that same Artistic Licence; a copy of which may be found at the root
+;# of the source tree for dist 4.0.
+;#
+;# $Log: snapshot.pl,v $
+;# Revision 3.0.1.1 1993/08/24 12:22:34 ram
+;# patch3: created
+;#
+# Read snapshot file and build %Snap, indexed by file name -> RCS revision
+sub readsnapshot {
+ local($snap) = @_;
+ open(SNAP, $snap) || warn "Can't open $snap: $!\n";
+ local($_);
+ local($file, $rev);
+ while (<SNAP>) {
+ next if /^#/;
+ ($file, $rev) = split;
+ $Snap{$file} = "$rev";
+ }
+ close SNAP;
+}
+
diff --git a/pl/tilde.pl b/pl/tilde.pl
new file mode 100644
index 0000000..0890ffb
--- /dev/null
+++ b/pl/tilde.pl
@@ -0,0 +1,25 @@
+;# $Id$
+;#
+;# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+;#
+;# You may redistribute only under the terms of the Artistic Licence,
+;# as specified in the README file that comes with the distribution.
+;# You may reuse parts of this distribution only within the terms of
+;# that same Artistic Licence; a copy of which may be found at the root
+;# of the source tree for dist 4.0.
+;#
+;# $Log: tilde.pl,v $
+;# Revision 3.0 1993/08/18 12:11:01 ram
+;# Baseline for dist 3.0 netwide release.
+;#
+;#
+# Perform ~name expansion ala ksh...
+# (banish csh from your vocabulary ;-)
+sub tilda_expand {
+ local($path) = @_;
+ return $path unless $path =~ /^~/;
+ $path =~ s:^~([^/]+):(getpwnam($1))[$[+7]:e; # ~name
+ $path =~ s:^~:$ENV{'HOME'} || (getpwuid($<))[$[+7]:e; # ~
+ $path;
+}
+
diff --git a/pl/users.pl b/pl/users.pl
new file mode 100644
index 0000000..807e0dc
--- /dev/null
+++ b/pl/users.pl
@@ -0,0 +1,48 @@
+;# $Id$
+;#
+;# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+;#
+;# You may redistribute only under the terms of the Artistic Licence,
+;# as specified in the README file that comes with the distribution.
+;# You may reuse parts of this distribution only within the terms of
+;# that same Artistic Licence; a copy of which may be found at the root
+;# of the source tree for dist 4.0.
+;#
+;# Original Author: Graham Stoney <greyham@research.canon.oz.au>
+;#
+;# $Log: users.pl,v $
+;# Revision 3.0.1.2 1993/11/10 17:41:37 ram
+;# patch14: adapted users file format to new @SH package command
+;#
+;# Revision 3.0.1.1 1993/08/24 12:23:19 ram
+;# patch3: added some comments about the users file format
+;# patch3: random cleanup
+;#
+;# Revision 3.0 1993/08/18 12:11:02 ram
+;# Baseline for dist 3.0 netwide release.
+;#
+;# The users file, as built by mailagent upon reception of an '@SH package'
+;# command contains a list of e-mail addresses, prefixed by a single letter.
+;# Users tagged with 'U' or 'L' are plain users, those with 'M' wish to
+;# receive issued patches by e-mail while 'N' users simply want to be notified
+;# when a new patch is released;
+;#
+sub readusers {
+ return unless open(USERS, 'users');
+ local($_);
+ local($status, $name, $pl);
+ while (<USERS>) {
+ next if /^#/;
+ chop if /\n$/; # Emacs may leave final line without \n
+ ($status, $pl, $name) = split;
+ # Handle oldstyle two-field user file format (PL13 and before)
+ $name = $pl unless defined $name;
+ if ($status eq 'M') {
+ $recipients = $recipients ? "$recipients $name" : $name;
+ } elsif ($status eq 'N') {
+ $notify = $notify ? "$notify $name" : $name;
+ }
+ }
+ close USERS;
+}
+