pax_global_header00006660000000000000000000000064131737227740014527gustar00rootroot0000000000000052 comment=f8e6e03cbfcecfd577555326c0775b109eb894a8 dist-3.5-236/000077500000000000000000000000001317372277400126515ustar00rootroot00000000000000dist-3.5-236/.gitignore000066400000000000000000000007551317372277400146500ustar00rootroot00000000000000.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 dist-3.5-236/Artistic000066400000000000000000000140741317372277400143640ustar00rootroot00000000000000 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 dist-3.5-236/ChangeLog000066400000000000000000001501771317372277400144360ustar00rootroot00000000000000Fri Feb 28 17:48:41 MET 1997 Raphael Manfredi . 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 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 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 and to the C program test. * mcon/U/registers.U: Removed empty ?LINT lines. * mcon/U/selecttype.U: Always include 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 . Description: Smarter sed command to strip /usr/include dependencies in jmake-generated Makfiles. Thanks to Ulrich Pfeifer 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 . . 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 . 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 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 , 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 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 , 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 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 . 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 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 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 . Description: Regenerated Configure to reflect my email address change. I moved from ACRI to HP, and my email is now: . 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 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 . 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 . 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 . 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 . 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 (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 , thanks to Sidney C. Smith . 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 (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 . 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 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 . 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 . 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 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 . 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 . 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 . 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 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 (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 .). * 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. dist-3.5-236/Configure000077500000000000000000003100471317372277400145250ustar00rootroot00000000000000#! /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$$ <c2$$ </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 </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 </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 < cmdline.opt <>cmdline.opt < 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 <&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 <&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 <>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 <&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 </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 <&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 <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 </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 <>../.config/instruct;; esac fi : script used to emit important warnings cat >warn <msg else cat >msg fi echo "*** WARNING:" >&4 sed -e 's/^/*** /' &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 <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 <$c" $echo "*" fi $rm -f foo1 foo2 ;; esac : generate the trygcc script for later perusal cat <trygcc $startsh EOS cat <<'EOSC' >>trygcc case "$cc" in '') ;; *) $rm -f try try.* $cat >try.c <&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 <checkcc $startsh EOS cat <<'EOSC' >>checkcc case "$cc" in '') ;; *) $rm -f try try.* $cat >try.c <&4 fi $cat >&4 < /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 <&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 <&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 <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 <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 <&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 < 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 <&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.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.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.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.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.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.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.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.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.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.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.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 </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 <&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 cpp1.out 2>/dev/null && \ $cpprun -DLFRULB=bar $ftry $cpplast 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 <&4 set X $cc $optimize $pthread $ccflags $ldflags -o try try.c shift $cat >try.msg < 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 </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 </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 <&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 <&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 </dev/null 2>&1; then $cat <&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 <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 <>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/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 <>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 <&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 < 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 <&4 fi $rm -f kit*isdone ark*isdone $rm -rf UU : End of Configure dist-3.5-236/Credits000066400000000000000000000114051317372277400141720ustar00rootroot00000000000000INTRO 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 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 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 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 . 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 Craig Kolb Graham Stoney Harlan Stenn Jan Djarv Larry Wall Ralf E. Stranzenbach Scott Grosch Syd Weinstein Thomas Neumann Wayne Davison If I forgot your name, please let me know, and accept my apologies (not necessarily in that order ;-). Finally, thank you Shigeya Suzuki for hosting the dist-users mailing list. Send mail to majordomo@foretune.co.jp to subscribe. Raphael Manfredi 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 Graham Stoney Ilya Zakharevich Jarkko Hietaniemi Joseph H Buehler Keith Walker Scott Presnell Wayne Davison 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 Chip Salzenberg 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 Grenoble, France, February 1997 dist-3.5-236/Jmakefile000066400000000000000000000017531317372277400144710ustar00rootroot00000000000000/* * 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) $@ dist-3.5-236/Known_bugs000066400000000000000000000005701317372277400147120ustar00rootroot00000000000000Here 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. dist-3.5-236/MANIFEST000066400000000000000000001232131317372277400140040ustar00rootroot00000000000000Artistic 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 or ? 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 ? 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 ? mcon/U/i_arpainet.U Shall we include ? mcon/U/i_db.U Shall we include ? mcon/U/i_dbm.U Shall we include ? mcon/U/i_dirent.U Shall we include mcon/U/i_dld.U Shall we include ? mcon/U/i_dlfcn.U Shall we include ? mcon/U/i_execinfo.U Shall we include ? mcon/U/i_fcntl.U Shall we include ? mcon/U/i_float.U Shall we include ? mcon/U/i_gdbm.U Shall we include ? mcon/U/i_grp.U Shall we include ? mcon/U/i_iconv.U Shall we include ? mcon/U/i_ifaddrs.U Shall we include ? mcon/U/i_inttypes.U Shall we include ? mcon/U/i_invent.U Shall we include ? mcon/U/i_langinfo.U Shall we include ? mcon/U/i_libcharset.U Shall we include ? mcon/U/i_libintl.U Shall we include ? mcon/U/i_limits.U Shall we include ? mcon/U/i_linux_netlink.U Shall we include ? mcon/U/i_linux_rtnetlink.U Shall we include ? mcon/U/i_locale.U Shall we include ? mcon/U/i_malloc.U Shall we include ? mcon/U/i_math.U Shall we include ? mcon/U/i_memory.U Shall we include ? mcon/U/i_mswsock.U Shall we include ? mcon/U/i_ndbm.U Shall we include ? mcon/U/i_netdb.U Shall we include ? mcon/U/i_neterrno.U Shall we include ? mcon/U/i_netif.U Shall we include ? mcon/U/i_netroute.U Can we include ? mcon/U/i_niin.U Shall we include ? mcon/U/i_niip.U Shall we include ? mcon/U/i_poll.U Shall we include ? mcon/U/i_pthread.U Shall we include ? mcon/U/i_pwd.U Shall we include ? mcon/U/i_regex.U Shall we include ? mcon/U/i_sched.U Shall we include ? mcon/U/i_sfio.U Shall we include ? mcon/U/i_stddef.U Shall we include ? mcon/U/i_stdlib.U Shall we include ? mcon/U/i_string.U or ? mcon/U/i_sysdir.U Shall we include ? mcon/U/i_sysfile.U Do we need ? mcon/U/i_sysioctl.U Include or ? mcon/U/i_sysipc.U Shall we include ? mcon/U/i_sysmman.U Do we have to include ? mcon/U/i_sysmount.U Shall we include ? mcon/U/i_sysndir.U Shall we include ? mcon/U/i_sysparam.U Shall we include ? mcon/U/i_syspoll.U Shall we include ? mcon/U/i_sysresrc.U Shall we include ? mcon/U/i_sysselct.U Shall we include ? mcon/U/i_syssem.U Shall we include ? mcon/U/i_syssendfile.U Shall we include ? mcon/U/i_syssock.U Shall we include ? mcon/U/i_sysstat.U Shall we include mcon/U/i_sysstatvfs.U Shall we include ? mcon/U/i_syssysctl.U Shall we include ? mcon/U/i_systable.U De we have to include ? mcon/U/i_systimeb.U Is struct timeb defined in ? mcon/U/i_systimes.U Shall we include ? mcon/U/i_systwgcf.U Shall we include ? mcon/U/i_systypes.U Do we have to include ? mcon/U/i_sysun.U Shall we include ? mcon/U/i_sysutsname.U Shall we include ? mcon/U/i_sysvfs.U Shall we include ? mcon/U/i_syswait.U Is there a ? mcon/U/i_termio.U Include or ? mcon/U/i_time.U Which time.h should we include? mcon/U/i_ucontext.U Shall we include mcon/U/i_unistd.U Include ? mcon/U/i_utime.U Include ? mcon/U/i_values.U Shall we include mcon/U/i_varhdr.U Choose between and mcon/U/i_vfork.U Include ? mcon/U/i_whoami.U Include ? mcon/U/i_winsock2.U Shall we include ? mcon/U/i_ws2tcpip.U Shall we include ? mcon/U/i_zlib.U Shall we include ? 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 dist-3.5-236/Makefile.SH000077500000000000000000000154071317372277400146340ustar00rootroot00000000000000: 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 <>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 <>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 dist-3.5-236/README000066400000000000000000000135051317372277400135350ustar00rootroot00000000000000 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 , 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 . To subscribe, send a mail to . 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 . ======================================================================== 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 dist-3.5-236/Wishlist000066400000000000000000000045201317372277400144030ustar00rootroot00000000000000*** 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. dist-3.5-236/bin/000077500000000000000000000000001317372277400134215ustar00rootroot00000000000000dist-3.5-236/bin/Jmakefile000066400000000000000000000020151317372277400152310ustar00rootroot00000000000000/* * 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 dist-3.5-236/bin/Makefile.SH000077500000000000000000000136361317372277400154060ustar00rootroot00000000000000: 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 <>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 <>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 dist-3.5-236/bin/manicheck.SH000077500000000000000000000037441317372277400156120ustar00rootroot00000000000000case $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 <>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 # # $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 dist-3.5-236/bin/manicheck.man000066400000000000000000000024711317372277400160440ustar00rootroot00000000000000''' $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 .SH "SEE ALSO" manifake(1), makedist(1), manilist(1). dist-3.5-236/bin/manilist.SH000077500000000000000000000362651317372277400155140ustar00rootroot00000000000000case $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 <>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 () { 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 () { 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 () { 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 < $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(<> manilist $grep -v '^;#' ../pl/profile.pl >> manilist chmod 755 manilist $eunicefix manilist dist-3.5-236/bin/manilist.man000066400000000000000000000256531317372277400157510ustar00rootroot00000000000000''' $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 .SH "SEE ALSO" manifake(1), makedist(1), pat(1). dist-3.5-236/bin/packinit.SH000077500000000000000000000334161317372277400154710ustar00rootroot00000000000000case $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 <>packinit <<'!NO!SUBS!' print < $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 = ; 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 <; $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 < 1) { print <.package') || die "Can't create .package"; chop($date = `date`); print PACKAGE <>packinit $grep -v '^;#' ../pl/logname.pl >>packinit $grep -v '^;#' ../pl/fullname.pl >>packinit $grep -v '^;#' ../pl/tilde.pl >>packinit chmod 755 packinit $eunicefix packinit dist-3.5-236/bin/packinit.man000066400000000000000000000101431317372277400157170ustar00rootroot00000000000000''' $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 (version 2.0) .br Raphael Manfredi .SH "SEE ALSO" dist(1). dist-3.5-236/bin/perload000077500000000000000000000511761317372277400150070ustar00rootroot00000000000000: # 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 () { : $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(); : 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 () { : 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 () { # 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 () { # 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 .SH CREDITS Valuable input came from Wayne H. Scott . 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 , .I Autoloading in Perl, explaining the concept of dataloading and giving a basic implementation. .SH "SEE ALSO" perl(1). dist-3.5-236/bin/svn-revision000077500000000000000000000025441317372277400160160ustar00rootroot00000000000000#!/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 < "$FILE" dist-3.5-236/dist.man000066400000000000000000000220561317372277400143160ustar00rootroot00000000000000''' $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 (dist 2.0 in 1988) .br Harlan Stenn (worked on dist 3.0 1990-1992) .br Raphael Manfredi (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). dist-3.5-236/install.SH000077500000000000000000000077171317372277400145720ustar00rootroot00000000000000case $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 <>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 dist-3.5-236/jmake/000077500000000000000000000000001317372277400137405ustar00rootroot00000000000000dist-3.5-236/jmake/Jmakefile000066400000000000000000000026301317372277400155530ustar00rootroot00000000000000/* * 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 dist-3.5-236/jmake/Makefile.SH000077500000000000000000000176441317372277400157300ustar00rootroot00000000000000: 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 <>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 <>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 dist-3.5-236/jmake/NOTES000066400000000000000000000125721317372277400145620ustar00rootroot00000000000000The 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:: keeps iff SYMBOL is defined (Pass 2). %SYMBOL:: keeps 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 : adds to the .SUFFIXES: list in the makefile (Pass 1 & 2). |rule:: adds to the building rule section (Pass 1 & 2). |rule: : same as before, with a leading tab. |skip: skips text until a line starting with '-skip' is found (Pass 2). |expand : expand lines until '-expand' with (Pass 2). |once : 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 , 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:

= where

and are two regular expressions (without spaces). The pattern

will be replaced by pattern (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 -once o Initializations +: Puts the whole line in the initialization section (Pass 1 & 2). ++SYMBOL : Adds 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 dist-3.5-236/jmake/README000066400000000000000000000046371317372277400146320ustar00rootroot00000000000000This 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. dist-3.5-236/jmake/bindex.SH000077500000000000000000000127631317372277400154610ustar00rootroot00000000000000case $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 <>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 () { $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 dist-3.5-236/jmake/files/000077500000000000000000000000001317372277400150425ustar00rootroot00000000000000dist-3.5-236/jmake/files/Jmake.rules000066400000000000000000001473711317372277400171620ustar00rootroot00000000000000;######################################################################## ;# 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 $@ @@\ 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) dist-3.5-236/jmake/files/Jmake.tmpl000066400000000000000000000171271317372277400167770ustar00rootroot00000000000000/* * 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 : $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 <>Makefile <<'!NO!SUBS!' #include %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 ;######################################################################## ;# 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 <>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 dist-3.5-236/jmake/fixcpp.SH000077500000000000000000000123051317372277400154710ustar00rootroot00000000000000case $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 <>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 () { 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 () { &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 () { s/\\ \001$/\\/; # Un-escape trailing \ print STDOUT; } close CPP; } !NO!SUBS! chmod 755 fixcpp $eunicefix fixcpp dist-3.5-236/jmake/jmake.SH000077500000000000000000000432421317372277400152730ustar00rootroot00000000000000case $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 <>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 () { 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 () { # 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 <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//[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 dist-3.5-236/jmake/jmake.man000066400000000000000000000325161317372277400155330ustar00rootroot00000000000000''' $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:: keeps iff SYMBOL is defined. .IP \(bu %SYMBOL:: keeps 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?:: keeps iff \fItarget\fR is defined. .IP \(bu %\fItarget\fR%:: keeps 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 : adds to the .SUFFIXES: list in the makefile. .sp .IP \(bu |rule:: adds to the building rule section. .sp .IP \(bu |rule: : 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 : expand lines until '-expand' with . A complete example is shown below. .sp .IP \(bu |once : 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 , 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

\fR=\fI\fR where \fI

\fR and \fI\fR are two regular expressions (without spaces). The pattern \fI

\fR will be replaced by the pattern \fI\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 -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 +: Puts the whole line in the initialization section. .IP \(bu ++SYMBOL : Adds 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 .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). dist-3.5-236/jmake/jmkmf.SH000077500000000000000000000047631317372277400153150ustar00rootroot00000000000000case $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 <>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 dist-3.5-236/jmake/jmkmf.man000066400000000000000000000035521317372277400155460ustar00rootroot00000000000000''' $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 .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). dist-3.5-236/kit/000077500000000000000000000000001317372277400134405ustar00rootroot00000000000000dist-3.5-236/kit/Jmakefile000066400000000000000000000022341317372277400152530ustar00rootroot00000000000000/* * 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 dist-3.5-236/kit/Makefile.SH000077500000000000000000000152301317372277400154150ustar00rootroot00000000000000: 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 <>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 <>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 dist-3.5-236/kit/README000066400000000000000000000026651317372277400143310ustar00rootroot00000000000000This 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. dist-3.5-236/kit/kitpost.SH000077500000000000000000000125421317372277400154000ustar00rootroot00000000000000case $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 <>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 = < 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 () { print INEWS; print MAILER; } close HEAD; } while () { 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 <= 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 dist-3.5-236/kit/kitpost.man000066400000000000000000000051131317372277400156320ustar00rootroot00000000000000''' $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 .SH "SEE ALSO" makedist(1), kitsend(1). dist-3.5-236/kit/kitsend.SH000077500000000000000000000104051317372277400153400ustar00rootroot00000000000000case $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 < # # $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 () { print MAILER; } close FILE; close MAILER; warn "$progname: ERROR mailing of $package.kit$kitnum to $dest\n" if $?; } } sub usage { print STDERR <= 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 dist-3.5-236/kit/kitsend.man000066400000000000000000000026221317372277400156000ustar00rootroot00000000000000''' $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 .SH "SEE ALSO" makedist(1), kitpost(1). dist-3.5-236/kit/makeSH000066400000000000000000000042311317372277400145330ustar00rootroot00000000000000#!/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 # # $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 <$base <>$file.SH ;; esac cat >>$file.SH <>$base <<'!NO!SUBS!' BLURFL sed -e '1{' -e '/#!.*\/bin\/sh$/d' -e '}' $file >>$file.SH cat >>$file.SH < .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. dist-3.5-236/kit/makedist.SH000077500000000000000000000300551317372277400155030ustar00rootroot00000000000000case $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 <>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; ©right'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); ©right'reset; # Reset copyright for new file while () { # Use Lock[e]r as a pattern in case it is applied on ourselves s|Lock[e]r:.*\$|\$|; # Remove locker mark print KIT ©right'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 () { 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 < $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 () { ($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 <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 <) { /^#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 <>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 dist-3.5-236/kit/makedist.man000066400000000000000000000113041317372277400157350ustar00rootroot00000000000000.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 (version 2.0) .br Raphael Manfredi .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 }` '' dist-3.5-236/kit/manifake.SH000077500000000000000000000025351317372277400154570ustar00rootroot00000000000000case $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 <>manifake <<'!NO!SUBS!' $NEWMANI = 'MANIFEST.new'; $MANI = 'MANIFEST'; &manifake; !NO!SUBS! chmod 755 manifake $grep -v '^;#' ../pl/manifake.pl >> manifake $eunicefix manifake dist-3.5-236/kit/manifake.man000066400000000000000000000026501317372277400157130ustar00rootroot00000000000000''' $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 .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). dist-3.5-236/lib/000077500000000000000000000000001317372277400134175ustar00rootroot00000000000000dist-3.5-236/lib/C/000077500000000000000000000000001317372277400136015ustar00rootroot00000000000000dist-3.5-236/lib/C/Jmakefile000066400000000000000000000010451317372277400154130ustar00rootroot00000000000000/* * 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) dist-3.5-236/lib/C/Makefile.SH000077500000000000000000000126621317372277400155640ustar00rootroot00000000000000: 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 <>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 dist-3.5-236/lib/C/fake/000077500000000000000000000000001317372277400145075ustar00rootroot00000000000000dist-3.5-236/lib/C/fake/Jmakefile000066400000000000000000000014031317372277400163170ustar00rootroot00000000000000/* * 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) dist-3.5-236/lib/C/fake/Makefile.SH000077500000000000000000000104621317372277400164660ustar00rootroot00000000000000: 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 <>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 dist-3.5-236/lib/C/fake/dup2.C000066400000000000000000000034631317372277400154730ustar00rootroot00000000000000/* * 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 * * $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 #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 dist-3.5-236/lib/C/fake/getopt.C000066400000000000000000000061721317372277400161230ustar00rootroot00000000000000/* * 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 #ifdef I_STRING #include #else #include #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 dist-3.5-236/lib/C/fake/rename.C000066400000000000000000000020451317372277400160630ustar00rootroot00000000000000/* * 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 dist-3.5-236/lib/C/fake/scandir.C000066400000000000000000000074051317372277400162440ustar00rootroot00000000000000/* * 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 #else #include #endif #ifdef I_DIRENT #include #else #ifdef I_SYS_NDIR #include #else #ifdef I_SYS_DIR #include #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 dist-3.5-236/lib/C/fake/setsid.C000066400000000000000000000026441317372277400161140ustar00rootroot00000000000000/* * 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 dist-3.5-236/lib/Jmakefile000066400000000000000000000030531317372277400152320ustar00rootroot00000000000000/* * 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) dist-3.5-236/lib/Makefile.SH000077500000000000000000000162261317372277400154020ustar00rootroot00000000000000: 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 <>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 dist-3.5-236/lib/errnolist.a000066400000000000000000000030471317372277400156060ustar00rootroot00000000000000# $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 # # $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") } dist-3.5-236/lib/errnolist.mk000066400000000000000000000021111317372277400157640ustar00rootroot00000000000000# $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 # # $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 <>Makefile <>Makefile <<'!NO!SUBS!' foo: foo.o $(ERRNOLIST_OBJ) $(CC) -o $@ foo.o $(ERRNOLIST_OBJ) !NO!SUBS! dist-3.5-236/lib/errnolist.sh000066400000000000000000000024461317372277400160020ustar00rootroot00000000000000# $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 # # $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 dist-3.5-236/lib/makedepend.sh000066400000000000000000000112271317372277400160530ustar00rootroot00000000000000case $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 < # # $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.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 dist-3.5-236/lib/makedir.sh000066400000000000000000000036751317372277400154020ustar00rootroot00000000000000case $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 < # # $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 dist-3.5-236/mcon/000077500000000000000000000000001317372277400136055ustar00rootroot00000000000000dist-3.5-236/mcon/INTRO000066400000000000000000000075031317372277400144300ustar00rootroot00000000000000This 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 , or with KERNEL defined. With metaconfig, you simply write: #ifdef I_TIME # include #endif #ifdef I_SYS_TIME # include #endif #ifdef I_SYS_TIME_KERNEL # define KERNEL # include # 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. dist-3.5-236/mcon/Jmakefile000066400000000000000000000044001317372277400154150ustar00rootroot00000000000000/* * 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 dist-3.5-236/mcon/Makefile.SH000077500000000000000000000252621317372277400155700ustar00rootroot00000000000000: 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 <>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 dist-3.5-236/mcon/NOTES000066400000000000000000000146361317372277400144320ustar00rootroot00000000000000This 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 tells metaconfig the 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 {} is expanded in a shell as if >/dev/null 2>&1; then exit 0; else exit 1; fi whereas text in double brackets as {{}} is expanded in perl as if ( {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: is the name $package as found in .package is the $maintloc variable as found in .pakcage is metaconfig's version number is metaconfig's patchlevel 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. dist-3.5-236/mcon/README000066400000000000000000000022351317372277400144670ustar00rootroot00000000000000This 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. dist-3.5-236/mcon/U/000077500000000000000000000000001317372277400140115ustar00rootroot00000000000000dist-3.5-236/mcon/U/AAAAA.U000066400000000000000000000035451317372277400147320ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that same 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. dist-3.5-236/mcon/U/Alpha_mieee.U000066400000000000000000000017401317372277400163320ustar00rootroot00000000000000?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 <&4 result='' set result eval $trylink case "$result" in "$define") ;; *) ccflags=$saved_ccflags;; esac ;; esac dist-3.5-236/mcon/U/Assert.U000066400000000000000000000016601317372277400154030ustar00rootroot00000000000000?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 dist-3.5-236/mcon/U/Begin.U000066400000000000000000000030511317372277400151620ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that same 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 dist-3.5-236/mcon/U/Checkcc.U000066400000000000000000000076021317372277400154670ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that 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 <trygcc $startsh EOS cat <<'EOSC' >>trygcc case "$cc" in '') ;; *) $rm -f try try.* $cat >try.c <&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 <checkcc $startsh EOS cat <<'EOSC' >>checkcc case "$cc" in '') ;; *) $rm -f try try.* $cat >try.c <&4 fi $cat >&4 <&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 (). 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 dist-3.5-236/mcon/U/Chk_whoami.U000066400000000000000000000014361317372277400162140ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that same 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 dist-3.5-236/mcon/U/Compile.U000066400000000000000000000044231317372277400155320ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that 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;' dist-3.5-236/mcon/U/Config_h.U000066400000000000000000000077451317372277400156700ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that same 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 ?X: changes it to ?X: /*#define FOO / **/ sed <$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_ dist-3.5-236/mcon/U/Config_sh.U000066400000000000000000000067351317372277400160510ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that same 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 <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 <>config.sh dist-3.5-236/mcon/U/Configdir.U000066400000000000000000000017351317372277400160510ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that same 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 <&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 -- 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 <>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 < 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 < Cppsym.try $startsh cat <<'EOCP' > try.c #include 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 <> 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 , thanks! postprocess_cc_v='' case "$osname" in aix) postprocess_cc_v="|$tr , ' '" ;; esac $cat >ccsym <tmp.c <&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 dist-3.5-236/mcon/U/Cross.U000066400000000000000000000177361317372277400152460ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that 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 &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 <&4 exit 1 ;; esac case "$targetmkdir" in */Cross/mkdir) $cat >$targetmkdir <&4 exit 1 ;; esac case "$targetto" in scp|rcp) $cat >$to <$to <&4 exit 1 ;; esac case "$targetfrom" in scp|rcp) $cat >$from <$from <&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 <&4 exit 1 @end ;; esac dist-3.5-236/mcon/U/Csym.U000066400000000000000000000077511317372277400150640ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that same 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"' dist-3.5-236/mcon/U/End.U000066400000000000000000000017401317372277400146470ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that same 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." dist-3.5-236/mcon/U/Extract.U000066400000000000000000000060711317372277400155550ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that same 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 </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 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 dist-3.5-236/mcon/U/Filexp.U000066400000000000000000000036631317372277400153760ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that same 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 <&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 dist-3.5-236/mcon/U/Findhdr.U000066400000000000000000000046531317372277400155250ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that 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 ?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 <" > 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 dist-3.5-236/mcon/U/Finish.U000066400000000000000000000073661317372277400153730ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that same 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 <&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 < 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 <&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 dist-3.5-236/mcon/U/GCC_pipe.U000066400000000000000000000024551317372277400155560ustar00rootroot00000000000000?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 <&4 ccflags=$saved_ccflags ;; esac ;; *) ccflags=$saved_ccflags;; esac ;; esac ;; esac dist-3.5-236/mcon/U/Getfile.U000066400000000000000000000210261317372277400155170ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that same 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 <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 . 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 dist-3.5-236/mcon/U/Guess.U000066400000000000000000000162631317372277400152350ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that same 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 dist-3.5-236/mcon/U/Head.U000066400000000000000000000230061317372277400150010ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that same 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 [metaconfig -] cat >c1$$ <c2$$ </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 </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 < 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 <) 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 dist-3.5-236/mcon/U/Largefile.U000066400000000000000000000031311317372277400160270ustar00rootroot00000000000000?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 < #$i_unistd I_UNISTD #ifdef I_UNISTD #include #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 < #$i_unistd I_UNISTD #ifdef I_UNISTD #include #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 dist-3.5-236/mcon/U/Loc.U000066400000000000000000000255251317372277400146650ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that same 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 <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 <$c" $echo "*" fi $rm -f foo1 foo2 ;; esac dist-3.5-236/mcon/U/Loc_sed.U000066400000000000000000000022641317372277400155130ustar00rootroot00000000000000?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 dist-3.5-236/mcon/U/Magic_h.U000066400000000000000000000030361317372277400154700ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that same 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_ dist-3.5-236/mcon/U/MailAuthor.U000066400000000000000000000140261317372277400162070ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that 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 ?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 <) 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 ?' dflt=n else $cat <..." >&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 </dev/null 2>&1 Subject: Command Precedence: junk To: $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 dist-3.5-236/mcon/U/MailList.U000066400000000000000000000055631317372277400156660ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that 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 ?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 <&4 $mailer $list_request </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 </dev/null 2>&1 Precedence: junk To: $list_request $list_unsub EOM ;; esac dist-3.5-236/mcon/U/Mips.U000066400000000000000000000041441317372277400150520ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that same 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 dist-3.5-236/mcon/U/Mkdirp.U000066400000000000000000000024671317372277400153760ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that same 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 <>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 dist-3.5-236/mcon/U/Mksymlinks.U000066400000000000000000000050031317372277400162760ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that 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 dist-3.5-236/mcon/U/Myinit.U000066400000000000000000000020051317372277400154050ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that same 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 dist-3.5-236/mcon/U/Myread.U000066400000000000000000000130161317372277400153610ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that same 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 <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 dist-3.5-236/mcon/U/Nothing.U000066400000000000000000000012711317372277400155460ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that same 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 dist-3.5-236/mcon/U/Null.U000066400000000000000000000013441317372277400150530ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that same 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 $@ %< dist-3.5-236/mcon/U/Obsol_h.U000066400000000000000000000020021317372277400155160ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that same 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. */ dist-3.5-236/mcon/U/Obsol_sh.U000066400000000000000000000017771317372277400157230ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that same 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. # dist-3.5-236/mcon/U/Oldconfig.U000066400000000000000000000455061317372277400160550ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that same 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 $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 <&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 <> 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 dist-3.5-236/mcon/U/Oldsym.U000066400000000000000000000047551317372277400154210ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that same 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/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 <>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 dist-3.5-236/mcon/U/Options.U000066400000000000000000000266771317372277400156140ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that same 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 <>cmdline.opt < 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 <&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 -." >&2 exit 0;; --) break;; -*) echo "$me: unknown option $1" >&2; shift; error=true;; *) break;; esac done case "$error" in true) cat >&2 <&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 dist-3.5-236/mcon/U/Prefixit.U000066400000000000000000000042701317372277400157340ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that same 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' dist-3.5-236/mcon/U/Prefixup.U000066400000000000000000000024061317372277400157430ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that same 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' dist-3.5-236/mcon/U/Rcs.U000066400000000000000000000023121317372277400146640ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that same 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' dist-3.5-236/mcon/U/Sendfile64.U000066400000000000000000000016221317372277400160430ustar00rootroot00000000000000?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 < #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 dist-3.5-236/mcon/U/Setvar.U000066400000000000000000000031271317372277400154060ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that same 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= ?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= ?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' dist-3.5-236/mcon/U/Signal.U000066400000000000000000000160721317372277400153620ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that same 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 ' | $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 #include #include 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 <>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 < #include #include 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.lst fi $rm -f signal.c signal$_exe signal$_o signal.nsg signal.ls1 EOS chmod a+x signal_cmd $eunicefix signal_cmd dist-3.5-236/mcon/U/Tr.U000066400000000000000000000062251317372277400145310ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that same 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 . ?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 <warn <msg else cat >msg fi ?X: Emit the warning, prefixing all lines with '*** ' echo "*** WARNING:" >&4 sed -e 's/^/*** /' &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 dist-3.5-236/mcon/U/Warn_v7EXT.U000066400000000000000000000022541317372277400160460ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that same 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 <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 dist-3.5-236/mcon/U/abortsig.U000066400000000000000000000042401317372277400157510ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that same 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, 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 <*/ #include 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 dist-3.5-236/mcon/U/active.U000066400000000000000000000030651317372277400154160ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that same 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" dist-3.5-236/mcon/U/afs.U000066400000000000000000000031441317372277400147120ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that same 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 dist-3.5-236/mcon/U/alignbytes.U000066400000000000000000000055231317372277400163050ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that same 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: 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 < #endif #$i_limits I_LIMITS #ifdef I_LIMITS #include #endif #$i_math I_MATH #ifdef I_MATH #include #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" dist-3.5-236/mcon/U/archlib.U000066400000000000000000000101741317372277400155460ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that 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 ?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 < 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" dist-3.5-236/mcon/U/baserev.U000066400000000000000000000013131317372277400155640ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that same 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= dist-3.5-236/mcon/U/basicshell.U000066400000000000000000000026001317372277400162460ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that same 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 dist-3.5-236/mcon/U/bin.U000066400000000000000000000055031317372277400147120ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that same 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 <&4 $cat >try.c <<'EOCP' #include ?X: Standard C requires a macro CHAR_BIT in #ifdef __STDC__ #include #ifndef CHAR_BIT #define CHAR_BIT 8 #endif #ifndef BITSPERBYTE #define BITSPERBYTE CHAR_BIT #endif #else ?X: On non standard C, try with #include #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 dist-3.5-236/mcon/U/byteorder.U000066400000000000000000000041451317372277400161420ustar00rootroot00000000000000?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 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 dist-3.5-236/mcon/U/cc.U000066400000000000000000000035421317372277400145300ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that same 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 dist-3.5-236/mcon/U/ccflags.U000066400000000000000000000273531317372277400155530ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that same 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 < 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 </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 <&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 cpp1.out 2>/dev/null && \ $cpprun -DLFRULB=bar $ftry $cpplast 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 <&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 < 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 dist-3.5-236/mcon/U/cf_email.U000066400000000000000000000034421317372277400157010ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that same 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 < ?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." dist-3.5-236/mcon/U/cf_who.U000066400000000000000000000045721317372277400154140ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that same 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 dist-3.5-236/mcon/U/charorder.U000066400000000000000000000072151317372277400161150ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that same 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 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 <&4 for size in 1 2 4 8 error; do $cat >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 dist-3.5-236/mcon/U/contains.U000066400000000000000000000025641317372277400157640ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that same 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 dist-3.5-236/mcon/U/cpp_stuff.U000066400000000000000000000122651317372277400161360ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that same 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.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.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 <&4 <&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 dist-3.5-236/mcon/U/cppfilecom.U000066400000000000000000000145101317372277400162610ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that 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 ?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 <testcpp.c #define ABC abc #define XYZ xyz ABC.XYZ /* comment */ EOT : if $test "X$cppfilecom" != "X" && \ $cppfilecom testcpp.c 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 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 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 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.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.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 <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.* dist-3.5-236/mcon/U/cppstdin.U000066400000000000000000000200331317372277400157610ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that same 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.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.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.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.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.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.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.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.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.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.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.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 dist-3.5-236/mcon/U/d_NOFILE.U000066400000000000000000000114501317372277400154170ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that same 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 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 #ifdef GETPARAM_H #include #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 #ifdef GETPARAM_H #include #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* dist-3.5-236/mcon/U/d_NeWS.U000066400000000000000000000053031317372277400152570ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that same 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 dist-3.5-236/mcon/U/d_PORTAR.U000066400000000000000000000037411317372277400154560ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that same 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 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* dist-3.5-236/mcon/U/d_SHM_MAC.U000066400000000000000000000073611317372277400155600ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that same 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 because SHMLBA ?C: needs something from there, probably the ctob() macro. ?C:. ?C:SHMLBA_WANTS_PARAM: ?C: This value tells us to include because SHMLBA needs ?C: something from there, probably the NBPC constant. ?C:. ?C:SHMLBA_WANTS_SEG: ?C: This value tells us to include because SHMLBA needs ?C: something from there, probably the SNUMSHFT constant. ?C:. ?C:SHMLBA_WANTS_IMMU: ?C: This value tells us to include 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 <shm_mac.c <<'EOCP' #include #include #include #ifdef I_SYS_IMMU #include #endif #ifdef I_SYS_SYSMACROS #include #endif #ifdef I_SYS_PARAM #include #endif #ifdef I_SYS_SEG #include #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* dist-3.5-236/mcon/U/d_access.U000066400000000000000000000046341317372277400157120ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that same 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 < #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 #ifdef I_FCNTL #include #endif #ifdef I_SYS_FILE #include #endif #ifdef I_UNISTD #include #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 " 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 " 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 " 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* dist-3.5-236/mcon/U/d_alarm.U000066400000000000000000000022551317372277400155420ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that 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 ?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 < #endif int main(void) { static unsigned ret; ret |= alarm(1); return ret ? 0 : 1; } EOC cyn=alarm set d_alarm eval $trylink dist-3.5-236/mcon/U/d_arc4random.U000066400000000000000000000020411317372277400164710ustar00rootroot00000000000000?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 < #endif int main(void) { static unsigned long ret; ret |= arc4random(); return 0 != ret; } EOC cyn=arc4random set d_arc4random eval $trylink dist-3.5-236/mcon/U/d_attribut.U000066400000000000000000000033301317372277400162770ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that 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 ?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 (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 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 dist-3.5-236/mcon/U/d_backtrace.U000066400000000000000000000023001317372277400163540ustar00rootroot00000000000000?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 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 < #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 dist-3.5-236/mcon/U/d_bcmp.U000066400000000000000000000026321317372277400153660ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that same 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 < 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 dist-3.5-236/mcon/U/d_bcopy.U000066400000000000000000000033431317372277400155610ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that same 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 < 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 dist-3.5-236/mcon/U/d_bfd_lib.U000066400000000000000000000036311317372277400160260ustar00rootroot00000000000000?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 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 <, 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 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 dist-3.5-236/mcon/U/d_bindtxtcode.U000066400000000000000000000021661317372277400167560ustar00rootroot00000000000000?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 < 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 dist-3.5-236/mcon/U/d_brokstat.U000066400000000000000000000036151317372277400163000ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that same 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 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 < #include #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 /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 dist-3.5-236/mcon/U/d_bsdjmp.U000066400000000000000000000043431317372277400157250ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that same 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 < 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 <&4 else cat <&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 dist-3.5-236/mcon/U/d_bsearch.U000066400000000000000000000021751317372277400160560ustar00rootroot00000000000000?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 < 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 dist-3.5-236/mcon/U/d_built_bswap32.U000066400000000000000000000020501317372277400171170ustar00rootroot00000000000000?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 < big endian). ?C:. ?H:#$d_built_bswap64 HAS_BUILTIN_BSWAP64 /**/ ?H:. ?LINT:set d_built_bswap64 : check for __builtin_bswap64 $cat >try.c <try.c <try.c <try.c <try.c <try.c < int main(void) { static int dst; bzero(&dst, sizeof(dst)); return 0; } EOC cyn=bzero set d_bzero eval $trylink dist-3.5-236/mcon/U/d_casti32.U000066400000000000000000000041331317372277400157130ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that 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 ?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 < #include $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 dist-3.5-236/mcon/U/d_castneg.U000066400000000000000000000077731317372277400161040ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that same 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 < #include $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 ?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 dist-3.5-236/mcon/U/d_cbrt.U000066400000000000000000000021311317372277400153710ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that same 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 < 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 dist-3.5-236/mcon/U/d_charsprf.U000066400000000000000000000030211317372277400162460ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that same 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* dist-3.5-236/mcon/U/d_chown.U000066400000000000000000000023641317372277400155650ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that 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 ?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 < #$i_unistd I_UNISTD #ifdef I_UNISTD #include #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 dist-3.5-236/mcon/U/d_chroot.U000066400000000000000000000022731317372277400157440ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that 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 ?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 < #endif int main(void) { static int ret; ret |= chroot("path"); return ret ? 0 : 1; } EOC cyn=chroot set d_chroot eval $trylink dist-3.5-236/mcon/U/d_chsize.U000066400000000000000000000023151317372277400157300ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that same 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 <&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 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 dist-3.5-236/mcon/U/d_clearenv.U000066400000000000000000000017301317372277400162420ustar00rootroot00000000000000?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 < #endif int main(void) { return clearenv(); } EOC cyn=clearenv set d_clearenv eval $trylink dist-3.5-236/mcon/U/d_clock_getres.U000066400000000000000000000022031317372277400171030ustar00rootroot00000000000000?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 < 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 dist-3.5-236/mcon/U/d_clock_gettime.U000066400000000000000000000021301317372277400172470ustar00rootroot00000000000000?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 < 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 dist-3.5-236/mcon/U/d_closedir.U000066400000000000000000000060771317372277400162600ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that 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 ?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 < #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 < #if defined(NeXT) && defined(I_SYS_DIR) /* NeXT needs dirent + sys/dir.h */ #include #endif #else #ifdef I_SYS_NDIR #include #else #ifdef I_SYS_DIR #ifdef hp9000s500 #include /* may be wrong in the future */ #else #include #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 dist-3.5-236/mcon/U/d_closefrom.U000066400000000000000000000021641317372277400164360ustar00rootroot00000000000000?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 < #include #$i_unistd I_UNISTD #ifdef I_UNISTD #include #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 dist-3.5-236/mcon/U/d_const.U000066400000000000000000000040361317372277400155730ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that same 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 dist-3.5-236/mcon/U/d_crypt.U000066400000000000000000000040561317372277400156100ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that same 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 < #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 dist-3.5-236/mcon/U/d_csh.U000066400000000000000000000041041317372277400152160ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that same 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 dist-3.5-236/mcon/U/d_ctermid.U000066400000000000000000000021621317372277400160720ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that same 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 < int main(void) { static char term[L_ctermid], ret; ret |= *ctermid(term); return ret ? 0 : 1; } EOC cyn=ctermid set d_ctermid eval $trylink dist-3.5-236/mcon/U/d_cuserid.U000066400000000000000000000023431317372277400161020ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that 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 ?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 < int main(void) { static char user[L_cuserid], ret; ret |= *cuserid(user); return ret ? 0 : 1; } EOC cyn=cuserid set d_cuserid eval $trylink dist-3.5-236/mcon/U/d_datastart_symbol.U000066400000000000000000000041031317372277400200140ustar00rootroot00000000000000?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 <> 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 <> 12; } EOC cyn="whether your linker defines the weak data_start symbol" set d_weak_datastart_symbol eval $trylink @end dist-3.5-236/mcon/U/d_dbl_dig.U000066400000000000000000000034361317372277400160340ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that 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 ?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 ?C: or 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 < #endif #ifdef I_FLOAT #include #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 dist-3.5-236/mcon/U/d_debugging.U000066400000000000000000000021721317372277400163770ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: 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 <try.c < 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 dist-3.5-236/mcon/U/d_devpoll.U000066400000000000000000000025021317372277400161060ustar00rootroot00000000000000?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 < #include #include 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 dist-3.5-236/mcon/U/d_difftime.U000066400000000000000000000041131317372277400162300ustar00rootroot00000000000000?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 ?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 < 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 < 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 dist-3.5-236/mcon/U/d_dirent_d_namlen.U000066400000000000000000000025161317372277400175700ustar00rootroot00000000000000?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 < #$i_dirent I_DIRENT #ifdef I_DIRENT #include #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 dist-3.5-236/mcon/U/d_dirent_d_type.U000066400000000000000000000026431317372277400173000ustar00rootroot00000000000000?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 < #$i_dirent I_DIRENT #ifdef I_DIRENT #include #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 dist-3.5-236/mcon/U/d_dirfd.U000066400000000000000000000021021317372277400155250ustar00rootroot00000000000000?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 < #$i_dirent I_DIRENT #ifdef I_DIRENT #include #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 dist-3.5-236/mcon/U/d_dladdr.U000066400000000000000000000021001317372277400156650ustar00rootroot00000000000000?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 < #endif int main(void) { Dl_info info; dladdr(main, &info); return info.dli_fbase != 0; } EOC cyn=dladdr set d_dladdr '-ldl' eval $trylink dist-3.5-236/mcon/U/d_dlerror.U000066400000000000000000000026721317372277400161220ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that 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 ?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 < #endif int main(void) { static char ret; ret |= *dlerror(); return ret ? 0 : 1; } EOC cyn=dlerror set d_dlerror '-ldl' eval $trylink dist-3.5-236/mcon/U/d_dliterphdr.U000066400000000000000000000024321317372277400166040ustar00rootroot00000000000000?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 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 < 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 dist-3.5-236/mcon/U/d_dlopen.U000066400000000000000000000025041317372277400157240ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that 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 ?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 < #endif int main(void) { void *p; p = dlopen("file", RTLD_GLOBAL); return p ? 0 : 1; } EOC cyn=dlopen set d_dlopen '-ldl' eval $trylink dist-3.5-236/mcon/U/d_dosuid.U000066400000000000000000000122551317372277400157360ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that 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 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 <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 <&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 < ?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 < 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 dist-3.5-236/mcon/U/d_dup2.U000066400000000000000000000021601317372277400153130ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that same 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 < #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 dist-3.5-236/mcon/U/d_end_symbol.U000066400000000000000000000021011317372277400165670ustar00rootroot00000000000000?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 <> 12; } EOC cyn="whether your linker defines the end symbol" set d_end_symbol eval $trylink dist-3.5-236/mcon/U/d_eofpipe.U000066400000000000000000000046701317372277400161000ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that same 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 dist-3.5-236/mcon/U/d_epoll.U000066400000000000000000000025751317372277400155660ustar00rootroot00000000000000?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 < #include 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 dist-3.5-236/mcon/U/d_etext_symbol.U000066400000000000000000000021411317372277400171560ustar00rootroot00000000000000?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 <> 12; } EOC cyn="whether your linker defines the etext symbol" set d_etext_symbol eval $trylink dist-3.5-236/mcon/U/d_euc2jis.U000066400000000000000000000017751317372277400160200ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that same 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 dist-3.5-236/mcon/U/d_fast_assert.U000066400000000000000000000042631317372277400167650ustar00rootroot00000000000000?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 <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 dist-3.5-236/mcon/U/d_fchdir.U000066400000000000000000000020771317372277400157070ustar00rootroot00000000000000?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 < #endif int main(void) { static int fd, ret; ret |= fchdir(fd); return ret ? 0 : 1; } EOC cyn=fchdir set d_fchdir eval $trylink dist-3.5-236/mcon/U/d_fchmod.U000066400000000000000000000024341317372277400157050ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that same 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 < #$i_sysstat I_SYS_STAT #ifdef I_SYS_STAT #include #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 dist-3.5-236/mcon/U/d_fchown.U000066400000000000000000000024631317372277400157330ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that same 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 < #$i_unistd I_UNISTD #ifdef I_UNISTD #include #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 dist-3.5-236/mcon/U/d_fcntl.U000066400000000000000000000023341317372277400155520ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that same 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 < #$i_unistd I_UNISTD #ifdef I_UNISTD #include #endif #include 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 dist-3.5-236/mcon/U/d_fd_set.U000066400000000000000000000102621317372277400157070ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that same 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 ?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 <, which is included (perhaps) ?X: by . We won't force people to include ?X: because it might introduce other ?X: incompatibilities. $cat >fd_set.c < #ifdef HAS_SOCKET #ifdef I_SYS_SOCKET #include /* Might include */ #endif #endif #ifdef I_SYS_TIME #include #endif #ifdef I_SYS_SELECT #include #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* dist-3.5-236/mcon/U/d_fdatasync.U000066400000000000000000000022351317372277400164200ustar00rootroot00000000000000?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 < #$i_unistd I_UNISTD #ifdef I_UNISTD #include #endif int main(void) { static int ret, fd; ret |= fdatasync(fd); return ret ? 0 : 1; } EOC cyn=fdatasync set d_fdatasync eval $trylink dist-3.5-236/mcon/U/d_fdopendir.U000066400000000000000000000022301317372277400164110ustar00rootroot00000000000000?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 < #ifdef I_DIRENT #include #endif int main(void) { static DIR *d; d = fdopendir(0); return (DIR *) 0 == d; } EOC cyn=fdopendir set d_fdopendir eval $trylink dist-3.5-236/mcon/U/d_ffs.U000066400000000000000000000022561317372277400152250ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that same 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 < int main(void) { static int i, ret; ret |= ffs(i); return ret ? 0 : 1; } EOC cyn=ffs set d_ffs eval $trylink dist-3.5-236/mcon/U/d_fgetpos.U000066400000000000000000000021701317372277400161110ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that same 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 < 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 dist-3.5-236/mcon/U/d_flexfnam.U000066400000000000000000000050341317372277400162440ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that same 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* dist-3.5-236/mcon/U/d_flock.U000066400000000000000000000022001317372277400155320ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that same 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 < #include 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 dist-3.5-236/mcon/U/d_fmod.U000066400000000000000000000023671317372277400153770ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that 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 ?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 < 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 dist-3.5-236/mcon/U/d_fork.U000066400000000000000000000022621317372277400154050ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that 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 ?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 < #$i_unistd I_UNISTD #ifdef I_UNISTD #include #endif int main(void) { static pid_t pid; pid |= fork(); return pid ? 0 : 1; } EOC cyn=fork set d_fork eval $trylink dist-3.5-236/mcon/U/d_fsetpos.U000066400000000000000000000021701317372277400161250ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that same 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 < 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 dist-3.5-236/mcon/U/d_fstatat.U000066400000000000000000000023021317372277400161050ustar00rootroot00000000000000?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 < /* AT_* constants */ #ifdef I_SYS_STAT #include #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 dist-3.5-236/mcon/U/d_fsync.U000066400000000000000000000021531317372277400155650ustar00rootroot00000000000000?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 < #$i_unistd I_UNISTD #ifdef I_UNISTD #include #endif int main(void) { static int ret, fd; ret |= fsync(fd); return ret ? 0 : 1; } EOC cyn=fsync set d_fsync eval $trylink dist-3.5-236/mcon/U/d_ftime.U000066400000000000000000000054661317372277400155610ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that same 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 . ?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: 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 < 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 < #$i_systimeb I_SYS_TIMEB #ifdef I_SYS_TIMEB #include #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 dist-3.5-236/mcon/U/d_ftrncate.U000066400000000000000000000023331317372277400162510ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that same 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 < #$i_unistd I_UNISTD #ifdef I_UNISTD #include #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 dist-3.5-236/mcon/U/d_gconvert.U000066400000000000000000000102331317372277400162700ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that 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 ?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 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 */ 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 dist-3.5-236/mcon/U/d_getaddrinfo.U000066400000000000000000000036531317372277400167370ustar00rootroot00000000000000?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 < #ifdef I_SYS_SOCKET #include #endif #ifdef I_NETINET_IN #include #endif #ifdef I_ARPA_INET #include #endif #ifdef I_NETDB #include #endif #ifdef I_WINSOCK2 #include #endif #ifdef I_WS2TCPIP #include #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 dist-3.5-236/mcon/U/d_getcontext.U000066400000000000000000000017551317372277400166360ustar00rootroot00000000000000?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 < int main(void) { int ret; ucontext_t u; ret = getcontext(&u); return ret ? 0 : 1; } EOC cyn=getcontext set d_getcontext eval $trylink dist-3.5-236/mcon/U/d_geteuid.U000066400000000000000000000017361317372277400160770ustar00rootroot00000000000000?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 < #$i_unistd I_UNISTD #ifdef I_UNISTD #include #endif int main(void) { static uid_t ret; ret |= geteuid(); return ret ? 0 : 1; } EOC cyn=geteuid set d_geteuid eval $trylink dist-3.5-236/mcon/U/d_getgrps.U000066400000000000000000000025451317372277400161230ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that same 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 < #$i_unistd I_UNISTD #ifdef I_UNISTD #include #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 dist-3.5-236/mcon/U/d_gethbynm.U000066400000000000000000000024311317372277400162570ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that same 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 < int main(void) { struct hostent *he; he = gethostbyname("hostname"); return he ? 0 : 1; } EOC cyn=gethostbyname set d_gethbynm '-lnsl' eval $trylink dist-3.5-236/mcon/U/d_gethent.U000066400000000000000000000022021317372277400160740ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that same 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 < int main(void) { struct hostent *ret; ret = gethostent(); return ret ? 0 : 1; } EOC cyn=gethostent set d_gethent eval $trylink dist-3.5-236/mcon/U/d_gethid.U000066400000000000000000000022011317372277400157010ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that same 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 < #endif int main(void) { static long id; id |= gethostid(); return id ? 0 : 1; } EOC cyn=gethostid set d_gethid eval $trylink dist-3.5-236/mcon/U/d_gethname.U000066400000000000000000000164261317372277400162430ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that same 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 <&4;; @ end esac;; esac @elsif PHOSTNAME case "$d_uname$d_gethname" in *define*) ;; *) case "$phostname" in '') @ if WHOAMI case "$i_whoami" in "$define") $cat <&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 <&4;; esac;; @ else echo 'Hardwiring "'$myhostname'".' >&4;; @ end esac @end case "$d_phostname" in '') d_phostname="$undef";; esac dist-3.5-236/mcon/U/d_getifaddrs.U000066400000000000000000000025551317372277400165650ustar00rootroot00000000000000?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 < #include #$i_netif I_NET_IF #ifdef I_NET_IF #include #endif #include 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 dist-3.5-236/mcon/U/d_getinvent.U000066400000000000000000000017761317372277400164600ustar00rootroot00000000000000?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 < int main(void) { static inventory_t *ret; ret = getinvent(); return ret ? 0 : 1; } EOC cyn=getinvent set d_getinvent eval $trylink dist-3.5-236/mcon/U/d_getlogin.U000066400000000000000000000024031317372277400162510ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that 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 ?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 < #endif int main(void) { static char ret; ret |= *getlogin(); return ret ? 0 : 1; } EOC cyn=getlogin set d_getlogin eval $trylink dist-3.5-236/mcon/U/d_getnameinfo.U000066400000000000000000000034001317372277400167330ustar00rootroot00000000000000?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 < #ifdef I_SYS_SOCKET #include #endif #ifdef I_NETINET_IN #include #endif #ifdef I_ARPA_INET #include #endif #ifdef I_NETDB #include #endif #ifdef I_WINSOCK2 #include #endif #ifdef I_WS2TCPIP #include #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 dist-3.5-236/mcon/U/d_getopt.U000066400000000000000000000024051317372277400157450ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that same 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 < #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 dist-3.5-236/mcon/U/d_getpagsz.U000066400000000000000000000061411317372277400162700ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that same 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 ?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 < #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 < #$i_unistd I_UNISTD #ifdef I_UNISTD #include #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 < #include 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 .)" 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 dist-3.5-236/mcon/U/d_getpgid.U000066400000000000000000000024241317372277400160670ustar00rootroot00000000000000?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 < #$i_unistd I_UNISTD #ifdef I_UNISTD #include #endif int main(void) { static pid_t pid, ret; ret |= getpgid(pid); return ret ? 0 : 1; } EOC cyn=getpgid set d_getpgid eval $trylink dist-3.5-236/mcon/U/d_getpgrp.U000066400000000000000000000040271317372277400161150ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that same 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 < #$i_unistd I_UNISTD #ifdef I_UNISTD #include #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 < #$i_unistd I_UNISTD #ifdef I_UNISTD #include #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 dist-3.5-236/mcon/U/d_getpgrp2.U000066400000000000000000000024371317372277400162020ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that same 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 < #$i_unistd I_UNISTD #ifdef I_UNISTD #include #endif int main(void) { static pid_t pid, ret; ret |= getpgrp2(pid); return ret ? 0 : 1; } EOC cyn=getpgrp2 set d_getpgrp2 eval $trylink dist-3.5-236/mcon/U/d_getppid.U000066400000000000000000000024321317372277400160770ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that 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 ?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 < #$i_unistd I_UNISTD #ifdef I_UNISTD #include #endif int main(void) { static pid_t ret; ret |= getppid(); return ret ? 0 : 1; } EOC cyn=getppid set d_getppid eval $trylink dist-3.5-236/mcon/U/d_getprior.U000066400000000000000000000024611317372277400163000ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that same 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 < #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 dist-3.5-236/mcon/U/d_getprogname.U000066400000000000000000000020441317372277400167520ustar00rootroot00000000000000?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 < #$i_stdlib I_STDLIB #ifdef I_STDLIB #include #endif int main(void) { printf("%s\n", getprogname()); return 0; } EOC cyn=getprogname set d_getprogname eval $trylink dist-3.5-236/mcon/U/d_getpwent.U000066400000000000000000000022651317372277400163040ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that same 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 < int main(void) { struct passwd pw; pw = *getpwent(); return pw.pw_name ? 0 : 1; } EOC cyn=getpwent set d_getpwent eval $trylink dist-3.5-236/mcon/U/d_getpwnam.U000066400000000000000000000021201317372277400162570ustar00rootroot00000000000000?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 < int main(void) { struct passwd pw; pw = *getpwnam("foo"); return pw.pw_name ? 0 : 1; } EOC cyn=getpwnam set d_getpwnam eval $trylink dist-3.5-236/mcon/U/d_getpwuid.U000066400000000000000000000021101317372277400162640ustar00rootroot00000000000000?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 < int main(void) { struct passwd pw; pw = *getpwuid(0); return pw.pw_name ? 0 : 1; } EOC cyn=getpwuid set d_getpwuid eval $trylink dist-3.5-236/mcon/U/d_getrlimit.U000066400000000000000000000023531317372277400164450ustar00rootroot00000000000000?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 < #endif #include 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 dist-3.5-236/mcon/U/d_gettext.U000066400000000000000000000017201317372277400161260ustar00rootroot00000000000000?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 < int main(void) { static char ret; ret |= *gettext("msgid"); return ret ? 0 : 1; } EOC cyn=gettext set d_gettext -lintl eval $trylink dist-3.5-236/mcon/U/d_getuid.U000066400000000000000000000017211317372277400157240ustar00rootroot00000000000000?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 < #$i_unistd I_UNISTD #ifdef I_UNISTD #include #endif int main(void) { static uid_t ret; ret |= getuid(); return ret ? 0 : 1; } EOC cyn=getuid set d_getuid eval $trylink dist-3.5-236/mcon/U/d_getwd.U000066400000000000000000000023721317372277400155600ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that same 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 < #$i_unistd I_UNISTD #ifdef I_UNISTD #include #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 dist-3.5-236/mcon/U/d_gnugettext.U000066400000000000000000000026251317372277400166450ustar00rootroot00000000000000?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 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 dist-3.5-236/mcon/U/d_gnulibc.U000066400000000000000000000062431317372277400160720ustar00rootroot00000000000000?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 int main(void) { #ifdef __GLIBC__ # ifdef __GLIBC_MINOR__ # if __GLIBC__ >= 2 && __GLIBC_MINOR__ >= 1 # include 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 dist-3.5-236/mcon/U/d_group.U000066400000000000000000000013521317372277400155770ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that 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 ?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 dist-3.5-236/mcon/U/d_havetlib.U000066400000000000000000000064641317372277400162520ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that same 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 dist-3.5-236/mcon/U/d_herror.U000066400000000000000000000016271317372277400157510ustar00rootroot00000000000000?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 < int main(void) { herror("string"); return 0; } EOC cyn=herror set d_herror eval $trylink dist-3.5-236/mcon/U/d_hidnet.U000066400000000000000000000043421317372277400157200ustar00rootroot00000000000000?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi ?RCS: ?RCS: You may redistribute only under the terms of the Artistic License, ?RCS: as specified in the README file that comes with the distribution. ?RCS: You may reuse parts of this distribution only within the terms of ?RCS: that same 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 <

exp: Oldconfig Getfile ?MAKE: -pick add $@ %< ?S:: ?S: Where files are located. The name may have ~ on the front. ?S:. ?S:exp: ?S: This is the same as the variable, but is filename expanded ?S: so that later Configure units can look at the directory if desired. ?S:. ?C:<%DIR>: ?C: The directory where 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 , but ~name expantion has been done by Configure. ?C:. ?H:#define <%DIR> "$" /**/ ?H:#define <%DIR>_EXP "$exp" /**/ ?H:. : locate directory echo " " case "$" in '') dflt= ;; *) dflt="$";; esac fn=d~ rp='Where is the directory?' . getfile ="$ans" exp="$ansexp" dist-3.5-236/mcon/files/file.U000066400000000000000000000025101317372277400157520ustar00rootroot00000000000000?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: exp: Oldconfig Getfile ?MAKE: -pick add $@ %< ?S:: ?S: The name of the file. The name may have ~ on the front. ?S:. ?S:exp: ?S: This is the same as the variable, but is filename expanded ?S: so that later Configure units can look at the file if desired. ?S:. ?C:<%FILE>: ?C: The name of the 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 but ~name expansion has been done by Configure. ?C:. ?H:#define <%FILE> "$" /**/ ?H:#define <%FILE>_EXP "$exp" /**/ ?H:. : locate file echo " " case "$" in '') dflt= ;; *) dflt="$";; esac fn=f~ rp='Where is the file?' . getfile ="$ans" exp="$ansexp" dist-3.5-236/mcon/files/i_include.U000066400000000000000000000020101317372277400167610ustar00rootroot00000000000000?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_: Inhdr ?MAKE: -pick add $@ %< ?S:i_: ?S: This variable conditionally defines the I_<%INCLUDE> symbol, which ?S: indicates to the C program that <.h> exists and should ?S: be included. ?S:. ?C:I_<%INCLUDE>: ?C: This symbol, if defined, indicates that <.h> exists and should ?C: be included. ?C:. ?H:#$i_ I_<%INCLUDE> /**/ ?H:. ?LINT:set i_ : see if .h is available set .h i_ eval $inhdr dist-3.5-236/mcon/files/keyword.U000066400000000000000000000027411317372277400165250ustar00rootroot00000000000000?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_: ?S: This variable conditionally defines the HASCONST symbol, which ?S: indicates to the C program that this C compiler knows about the ?S: type. ?S:. ?C:HAS<%KEY> ~ %<: ?C: This symbol, if defined, indicates that this C compiler knows about ?C: the type. There is no need to actually test for that symbol ?C: within your programs. The mere use of the "" keyword will ?C: trigger the necessary tests. ?C:. ?H:?%<:#$d_ HAS<%KEY> /**/ ?H:?%<:#ifndef HAS<%KEY> ?H:?%<:#define ?H:?%<:#endif ?H:. ?W:%<: ?LINT:set d_ ?LINT:known : check for keyword echo " " echo 'Checking to see if your C compiler knows about ""...' $cat >.c <<'EOCP' main() { char *foo; } EOCP if $cc -c $ccflags .c >/dev/null 2>&1 ; then val="$define" echo "Yup, it does." else val="$undef" echo "Nope, it doesn't." fi set d_ eval $setvar dist-3.5-236/mcon/files/locate.U000066400000000000000000000025211317372277400163040ustar00rootroot00000000000000?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: exp: Oldconfig Getfile ?MAKE: -pick add $@ %< ?S:: ?S: The name of the file. The name may have ~ on the front. ?S:. ?S:exp: ?S: This is the same as the variable, but is filename expanded ?S: so that later Configure units can look at the file if desired. ?S:. ?C:<%FILE>: ?C: The name of the 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 but ~name expansion has been done by Configure. ?C:. ?H:#define <%FILE> "$" /**/ ?H:#define <%FILE>_EXP "$exp" /**/ ?H:. : locate file echo " " case "$" in '') dflt= ;; *) dflt="$";; esac fn=l~: rp='Where is the file?' . getfile ="$ans" exp="$ansexp" dist-3.5-236/mcon/files/question.U000066400000000000000000000034331317372277400167070ustar00rootroot00000000000000?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 dist-3.5-236/mcon/files/rcshead.U000066400000000000000000000010451317372277400164460ustar00rootroot00000000000000?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: dist-3.5-236/mcon/files/shell.U000066400000000000000000000036111317372277400161450ustar00rootroot00000000000000?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 dist-3.5-236/mcon/files/type.U000066400000000000000000000026651317372277400160270ustar00rootroot00000000000000?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: 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" dist-3.5-236/mcon/makegloss.SH000077500000000000000000000140011317372277400160250ustar00rootroot00000000000000case $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 <>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 # # $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 = ; 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 dist-3.5-236/mcon/man/000077500000000000000000000000001317372277400143605ustar00rootroot00000000000000dist-3.5-236/mcon/man/Jmakefile000066400000000000000000000012101317372277400161640ustar00rootroot00000000000000/* * 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)) dist-3.5-236/mcon/man/Makefile.SH000077500000000000000000000113031317372277400163320ustar00rootroot00000000000000: 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 <>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 <>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 dist-3.5-236/mcon/man/mconfig.SH000077500000000000000000002504101317372277400162430ustar00rootroot00000000000000case $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 < 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 < 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 <>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 <>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 <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 (USG systems) instead of (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 The base revision number of the package, derived from \fI.package\fR. .TP The current date. .TP The e-mail address of the maintainer of this package, derived from your \fI.package\fR. .TP The name of the package, as derived from your \fI.package\fR file. .TP The patch level of the \fImetaconfig\fR program (deprecated in favor of ). .TP The SVN revision level of the \fImetaconfig\fR program. .TP 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 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\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 for version 2.0. .br Harlan Stenn for important unit extensions. .br Raphael Manfredi . .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 dist-3.5-236/mcon/man/mlint.SH000077500000000000000000000530041317372277400157440ustar00rootroot00000000000000case $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 <' 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 wrote the first version, based on Larry Wall's \fImetaconfig\fR from dist 2.0. .br Raphael Manfredi 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 dist-3.5-236/mcon/man/mxref.SH000077500000000000000000000104301317372277400157360ustar00rootroot00000000000000case $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 < .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 dist-3.5-236/mcon/mconfig.SH000077500000000000000000000136551317372277400155000ustar00rootroot00000000000000case $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 < # Key Contributor: Harlan Stenn # # $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 dist-3.5-236/mcon/mlint.SH000077500000000000000000000072441317372277400151760ustar00rootroot00000000000000case $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 < # # $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 <>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 dist-3.5-236/mcon/mxref.SH000077500000000000000000000103001317372277400151570ustar00rootroot00000000000000case $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 < # # $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 <>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 dist-3.5-236/mcon/pl/000077500000000000000000000000001317372277400142205ustar00rootroot00000000000000dist-3.5-236/mcon/pl/common.pl000066400000000000000000000255641317372277400160610ustar00rootroot00000000000000;# $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) dist-3.5-236/mcon/pl/configure.pl000066400000000000000000000165531317372277400165500ustar00rootroot00000000000000;# $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 () { 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 () { 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 () { s//$package/g; s//$maintloc/g; s//$version/g; # This is metaconfig's version s//$revision/g; # And revision information warn "\"$file\": usage of is deprecated\n" if s//$patchlevel/g; s//$date/g; s//$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 () { 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 () { 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 () { 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 () { 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 () { print PREPEND unless &skipped; } print PREPEND ; # 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; } dist-3.5-236/mcon/pl/cosmetic.pl000066400000000000000000000066461317372277400163770ustar00rootroot00000000000000;# $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() { ++$blank_lines if /^$/; } unlink 'config_h.SH' unless $blank_lines > 3; open(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 $_ = ; $/ = "\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 () { 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"; } } dist-3.5-236/mcon/pl/depend.pl000066400000000000000000000105521317372277400160170ustar00rootroot00000000000000;# $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:: 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 # 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 } } dist-3.5-236/mcon/pl/eval.pl000066400000000000000000000177131317372277400155150ustar00rootroot00000000000000;# $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 .= $_; $_ = ; # 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; dist-3.5-236/mcon/pl/extract.pl000066400000000000000000000076631317372277400162430ustar00rootroot00000000000000;# $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 () { $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/%)); 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 . $_; } } } dist-3.5-236/mcon/pl/files.pl000066400000000000000000000102171317372277400156600ustar00rootroot00000000000000;# $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 () { ($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(<) { 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"; } dist-3.5-236/mcon/pl/gensym.pl000066400000000000000000000012561317372277400160630ustar00rootroot00000000000000;# $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++; } dist-3.5-236/mcon/pl/init.pl000066400000000000000000000040341317372277400155210ustar00rootroot00000000000000;# $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, ); } dist-3.5-236/mcon/pl/lint.pl000066400000000000000000001445201317372277400155310ustar00rootroot00000000000000;# $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 " 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 <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; # would set-off our >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; } dist-3.5-236/mcon/pl/locate.pl000066400000000000000000000133651317372277400160340ustar00rootroot00000000000000;# $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; dist-3.5-236/mcon/pl/makefile.pl000066400000000000000000000145011317372277400163330ustar00rootroot00000000000000;# $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 () { 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 () { 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; } dist-3.5-236/mcon/pl/obsolete.pl000066400000000000000000000072201317372277400163720ustar00rootroot00000000000000;# $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 } dist-3.5-236/mcon/pl/order.pl000066400000000000000000000026531317372277400156760ustar00rootroot00000000000000;# $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 () { 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; } dist-3.5-236/mcon/pl/tsort.pl000066400000000000000000000131731317372277400157350ustar00rootroot00000000000000;# $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; dist-3.5-236/mcon/pl/wanted.pl000066400000000000000000000214041317372277400160400ustar00rootroot00000000000000;# $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 () { 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; } dist-3.5-236/mcon/pl/xref.pl000066400000000000000000000042411317372277400155220ustar00rootroot00000000000000;# $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:: 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 {} dist-3.5-236/mcon/pl/xwant.pl000066400000000000000000000111221317372277400157130ustar00rootroot00000000000000;# $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 } dist-3.5-236/pat/000077500000000000000000000000001317372277400134355ustar00rootroot00000000000000dist-3.5-236/pat/Jmakefile000066400000000000000000000033371317372277400152550ustar00rootroot00000000000000/* * 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 dist-3.5-236/pat/Makefile.SH000077500000000000000000000147731317372277400154250ustar00rootroot00000000000000: 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 <>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 <>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 dist-3.5-236/pat/README000066400000000000000000000117531317372277400143240ustar00rootroot00000000000000This 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 -@ 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. dist-3.5-236/pat/pat.SH000077500000000000000000000102041317372277400144550ustar00rootroot00000000000000case $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 < # # $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 () { $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 () { 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 () { 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 ; unlink ; } # 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 dist-3.5-236/pat/pat.man000066400000000000000000000403451317372277400147240ustar00rootroot00000000000000.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 . .rn }` '' dist-3.5-236/pat/patbase.SH000077500000000000000000000061361317372277400153210ustar00rootroot00000000000000case $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 < # # $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 () { 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 dist-3.5-236/pat/patchlevel.h000066400000000000000000000022641317372277400157410ustar00rootroot00000000000000/* * 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 */ dist-3.5-236/pat/patcil.SH000077500000000000000000000333051317372277400151540ustar00rootroot00000000000000case $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 < # # $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 () { $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 () { 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 () { # 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 = ; if ($ans !~ /^n/i) { print "MANIFEST.new comment? "; $file_comment = ; 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 = ; } if ($line =~ /^\.?$/) { if ($mess) { last line; } else { $line = 'p'; } } if ($line =~ /^[h?]$/) { print " CR or . Terminate log message. ! 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 <>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 dist-3.5-236/pat/patclean.SH000077500000000000000000000114201317372277400154610ustar00rootroot00000000000000case $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 <>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 () { 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 () { 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 <>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 dist-3.5-236/pat/patcol.SH000077500000000000000000000147531317372277400151700ustar00rootroot00000000000000case $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 <>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; ©right'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 () { 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 () { 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) { ©_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) { ©_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) { ©right'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) { ©right'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 <>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 dist-3.5-236/pat/patdiff.SH000077500000000000000000000142231317372277400153130ustar00rootroot00000000000000case $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 < # # $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; ©right'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 () { $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 () { 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 () { 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 () { 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 { ©right'expand("co -p -rlastpat $file", "/tmp/pdo$$"); ©right'expand("co -p -r$new $file", "/tmp/pdn$$"); open(DIFF, "$mydiff /tmp/pdo$$ /tmp/pdn$$ |") || die "Can't run $mydiff"; while () { # 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 () { 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 () { # 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 <>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 dist-3.5-236/pat/patftp.SH000077500000000000000000000055601317372277400152000ustar00rootroot00000000000000case $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 < # # $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 () { $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 <>patftp $grep -v '^;#' ../pl/rangeargs.pl >>patftp $grep -v '^;#' ../pl/tilde.pl >>patftp $grep -v '^;#' ../pl/profile.pl >>patftp chmod +x patftp $eunicefix patftp dist-3.5-236/pat/patindex.SH000077500000000000000000000031751317372277400155160ustar00rootroot00000000000000case $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 < # # $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 dist-3.5-236/pat/patlog.SH000077500000000000000000000242111317372277400151620ustar00rootroot00000000000000case $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 <>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 () { 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 () { 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 () { 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 <.rlog$bnum") || die "$progname: can't create .rlog$bnum: $!\n"; print RCS <.xlog$bnum") || die "$progname: can't create .xlog$bnum: $!\n"; print LOG <\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 ; 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"; $_ = ; $_ = ; $_ = ; print LOG while ; 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 () { if (/^(.*)\$Log[:\$]/) { $comment = $1; $comment =~ s/\s+$//; # Newer RCS chop spaces on emtpy lines $len = length($comment); while () { $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 <>patlog $grep -v '^;#' ../pl/tilde.pl >>patlog $grep -v '^;#' ../pl/profile.pl >>patlog chmod +x patlog $eunicefix patlog dist-3.5-236/pat/patmake.SH000077500000000000000000000263271317372277400153300ustar00rootroot00000000000000case $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 < # Contribution by: Graham Stoney # # $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 () { 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 = ); 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 ; 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"); $_ = ; $_ = ; $_ = ; # Skip first three lines print PATCH while ; 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 "; 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 () { 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 () { /^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 = ; 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 = ; 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 = ; 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 = ; system 'patnotify', $notify unless $ans =~ /^n/i; } sub usage { print STDERR <>patmake $grep -v '^;#' ../pl/users.pl >>patmake $grep -v '^;#' ../pl/tilde.pl >>patmake $grep -v '^;#' ../pl/profile.pl >>patmake chmod +x patmake $eunicefix patmake dist-3.5-236/pat/patname.SH000077500000000000000000000110701317372277400153200ustar00rootroot00000000000000case $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 <>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 () { 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 () { 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 <>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 dist-3.5-236/pat/patnotify.SH000077500000000000000000000145641317372277400157230ustar00rootroot00000000000000case $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 <>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 = ; 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 () { 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 () { /^Priority:\s*(\S+)\s*$/ && ($priority = $1); } close PATCH; # Look for the .clog 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"; $_ = . . ; # Skip first three lines $clog = ''; while () { $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 <>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 dist-3.5-236/pat/patpost.SH000077500000000000000000000103271317372277400153710ustar00rootroot00000000000000case $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 < # # $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 () { $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 () { print XHEAD; } close PATCH; close XHEAD; die "$progname: could not post patch$patnum.\n" if $?; } sub usage { print STDERR <>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 dist-3.5-236/pat/patsend.SH000077500000000000000000000131571317372277400153410ustar00rootroot00000000000000case $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 < # # $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 = ; 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 () { $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 () { print MAILER; } close PATCH; close MAILER; die "$progname: could not mail patch$patnum.\n" if $?; } } sub usage { print STDERR <>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 dist-3.5-236/pat/patsnap.SH000077500000000000000000000061361317372277400153500ustar00rootroot00000000000000case $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 <>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 () { 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 <>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 dist-3.5-236/patchlevel.h000066400000000000000000000001441317372277400151500ustar00rootroot00000000000000/* dist-3.0 - 18 Aug 1993 */ /* dist-3.5 - 25 Aug 2006 */ #define VERSION 3.5 #define PATCHLEVEL 0 dist-3.5-236/pl/000077500000000000000000000000001317372277400132645ustar00rootroot00000000000000dist-3.5-236/pl/comment.pl000066400000000000000000000023541317372277400152670ustar00rootroot00000000000000;# $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 () { 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; } dist-3.5-236/pl/copyright.pl000066400000000000000000000040661317372277400156370ustar00rootroot00000000000000;# $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 = ); 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 () { print OUT &filter($_); } close OUT; close CMD; } else { system "$cmd > $file"; die "Command '$cmd' failed!" if $?; } } package main; dist-3.5-236/pl/editor.pl000066400000000000000000000012671317372277400151150ustar00rootroot00000000000000;# $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; } dist-3.5-236/pl/fullname.pl000066400000000000000000000022731317372277400154300ustar00rootroot00000000000000;# $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 () { /(\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 = ); 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; } } } dist-3.5-236/pl/listedit.pl000066400000000000000000000017711317372277400154500ustar00rootroot00000000000000;# $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 = ); close TMP; unlink $tmp; } dist-3.5-236/pl/logname.pl000066400000000000000000000013101317372277400152360ustar00rootroot00000000000000;# $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; } dist-3.5-236/pl/makedir.pl000066400000000000000000000015561317372277400152440ustar00rootroot00000000000000;# $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; } } dist-3.5-236/pl/manifake.pl000066400000000000000000000023261317372277400153770ustar00rootroot00000000000000;# $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 () { 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"; } } } dist-3.5-236/pl/newer.pl000066400000000000000000000037621317372277400147510ustar00rootroot00000000000000;# $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 () { ($name,$foo) = split; $mani{$name} = 1; } close MANI; while () { 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`); } dist-3.5-236/pl/package.pl000066400000000000000000000017471317372277400152250ustar00rootroot00000000000000;# $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 () { next if /^:/; next if /^#/; if (($var,$val) = /^\s*(\w+)=(.*)/) { $val = "\"$val\"" unless $val =~ /^['"]/; eval "\$$var = $val;"; } } close PACKAGE; } dist-3.5-236/pl/patseq.pl000066400000000000000000000015311317372277400151160ustar00rootroot00000000000000;# $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; } dist-3.5-236/pl/profile.pl000066400000000000000000000047201317372277400152640ustar00rootroot00000000000000;# $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 () { 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 } dist-3.5-236/pl/rangeargs.pl000066400000000000000000000021661317372277400155770ustar00rootroot00000000000000;# $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 () { $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; } dist-3.5-236/pl/rcsargs.pl000066400000000000000000000025121317372277400152650ustar00rootroot00000000000000;# $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"; } dist-3.5-236/pl/snapshot.pl000066400000000000000000000014321317372277400154600ustar00rootroot00000000000000;# $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 () { next if /^#/; ($file, $rev) = split; $Snap{$file} = "$rev"; } close SNAP; } dist-3.5-236/pl/tilde.pl000066400000000000000000000014231317372277400147220ustar00rootroot00000000000000;# $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; } dist-3.5-236/pl/users.pl000066400000000000000000000032111317372277400147570ustar00rootroot00000000000000;# $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 ;# ;# $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 () { 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; }