diff options
author | rmanfredi <rmanfredi@190e5f8e-a817-0410-acf6-e9863daed9af> | 2006-08-24 12:32:52 +0000 |
---|---|---|
committer | rmanfredi <rmanfredi@190e5f8e-a817-0410-acf6-e9863daed9af> | 2006-08-24 12:32:52 +0000 |
commit | 8bfc5756fb68e0b13d7e7c0073ad5b9a4790d1b6 (patch) | |
tree | dee05e98bc53766d609ef2a3a07a5672627d812c /mcon |
Moving project to sourceforge.
git-svn-id: https://dist.svn.sourceforge.net/svnroot/dist/trunk/dist@1 190e5f8e-a817-0410-acf6-e9863daed9af
Diffstat (limited to 'mcon')
498 files changed, 41607 insertions, 0 deletions
diff --git a/mcon/INTRO b/mcon/INTRO new file mode 100644 index 0000000..51f4417 --- /dev/null +++ b/mcon/INTRO @@ -0,0 +1,109 @@ +This is a quick introduction to metaconfig. + +Metaconfig is a combination of a methodology and a program that will +help you write portable programs. It is well known that all UN*X +systems are not the same. Instead of writing lots of #ifdef/#endif for +each machine the program is ported on, it seems better to directly rely +on the actual possibilities of the system, without having to consider +whether it comes from HP or SUN. The idea is to write the program using +some symbols, known by a "unit", for all the hardware- or kernel- +specific parts of code. A metaconfig unit will automatically define the +symbol or not, depending on the system. Source files are scanned by +metaconfig and the necessary units are loaded and put into a shell +script called Configure. Running the Configure script will +automatically determine a suitable value for each symbol. + +How does a Configure script work ? It studies the environment it runs on +by extracting names in the C library, by compiling some small sample C +programs, and by asking questions when in doubt, always providing a +computed default answer. + +Here is a small example. + +It is said in the glossary of the symbols that RENAME is defined if the +rename routine is available to rename files. Without metaconfig, we +could write (for each occurrence of a "rename" in the code): + +#if defined(HP-UX-7.0) || defined(SUN) || defined(BSD) + rename(old, new); +#else + unlink(new); + link(old, new); + unlink(old); +#endif + +With the help of metaconfig, we shall write (once !): + +#ifndef HAS_RENAME +int rename(old, new) +char *old, *new; +{ + (void) unlink(new); + if (-1 != link(old, new)) + return unlink(old); + else + return -1; +} +#endif + + .... + + rename(old, new); + + +And that's all. The Configure script will check whether `rename' is +available on the target machine and accordingly define the RENAME +symbol. It is even more powerful that it may appear on a first glance, +because "rename" was not there on old SUNOS3 systems or HP-UX older than +6.5 (for series 800) and 7.0 (for series 300). You cannot rely on the +fact that the target machine has the latest OS release ! + +Another problem is to determine whether a C program should include +<time.h>, <sys/time.h> or <sys/time.h> with KERNEL defined. With +metaconfig, you simply write: + +#ifdef I_TIME +# include <time.h> +#endif +#ifdef I_SYS_TIME +# include <sys/time.h> +#endif +#ifdef I_SYS_TIME_KERNEL +# define KERNEL +# include <sys/time.h> +# undef KERNEL +#endif + +and the Configure script will generate a small C program, compile it, +and correctly define one of the three symbols I_TIME, I_SYS_TIME and +I_SYS_TIME_KERNEL. + +Another kind of precious information can be collected by a Configure +script. For instance, the symbol USE_STRUCT_COPY will be defined if the +C compiler can copy structures. It is up to the programmer to use this +information, of course. The symbol VOIDSIG will be defined if the +system declares "void (*signal())()" instead of "int (*signal())()". +Thus you can say: + +#ifdef VOIDSIG +extern void (*signal())(); +#else +extern int (*signal())(); +#endif + +and no suspicious warning will be emitted by the C compiler. + +Finally, Configure can help you in shell scripts or in makefile. By +using a file called Makefile.SH, which will be run through a shell to +produce a Makefile, you can use the variable substitution feature. The +variable $ranlib will be set to 'ranlib' or to ': ' (null statement) in +a makefile, which is useful for random libraries generation. Likewise, +the variable $bin will hold the full path for installing binaries (a +question will be issued by Configure). + +Needless to say, an initial amount of time must be spent before being +able to use metaconfig. The proper symbols must be known, and the +program must be prepared to deal with all the possible configurations. +But likewise, it will adapt itself to a greater number of systems +without any further source code modification. + diff --git a/mcon/Jmakefile b/mcon/Jmakefile new file mode 100644 index 0000000..559ba87 --- /dev/null +++ b/mcon/Jmakefile @@ -0,0 +1,93 @@ +/* + * Jmakefile for metaconfig + */ + +;# $Id: Jmakefile,v 3.0.1.4 1995/07/25 13:23:09 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: 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 explicitely 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) + +Glossary: makegloss + chmod +x makegloss + ./makegloss + +SimpleShellScriptTarget(makegloss) + +>PRIVLIB /* We need the privlib definition */ +>SCRIPTDIR /* As well as the script directory */ + +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 \\ + +>SED +>RM +>MKDEP + +depend:: + ($(SED) '/^# DO NOT DELETE/q' Makefile && \ + grep '^\$$grep' $(BINSH) | \ + $(SED) -e "s/^.*' \([^ ]*\) >>\([^ ]*\)/\2: \1/" \ + ) > Makefile.new + cp Makefile Makefile.bak + cp Makefile.new Makefile + $(RM) Makefile.new + diff --git a/mcon/Makefile.SH b/mcon/Makefile.SH new file mode 100755 index 0000000..cf4798e --- /dev/null +++ b/mcon/Makefile.SH @@ -0,0 +1,378 @@ +: Makefile.SH generated from Jmake.tmpl and Jmakefile [jmake 3.0 PL55] +: $X-Id: Jmake.tmpl,v 3.0.1.2 1995/01/11 14:50:21 ram Exp ram $ +case $CONFIG in +'') + if test -f config.sh; then TOP=.; + elif test -f ../config.sh; then TOP=..; + elif test -f ../../config.sh; then TOP=../..; + elif test -f ../../../config.sh; then TOP=../../..; + elif test -f ../../../../config.sh; then TOP=../../../..; + else + echo "Can't find config.sh."; exit 1 + fi + . $TOP/config.sh + ;; +esac +case "$0" in +*/*) cd `expr X$0 : 'X\(.*\)/'` ;; +esac +CURRENT=mcon +DIR=`echo $CURRENT/ | sed -e 's/\.\///g'` +echo "Extracting ${DIR}Makefile (with variable substitutions)" + +INSTALL=`echo $install | sed -e 's,\./i,\$(TOP)/i,'` +INSTALLDIR=`echo $installdir | sed -e 's,\./i,\$(TOP)/i,'` +DATE=`date` + +$spitshell >Makefile <<!GROK!THIS! +######################################################################## +# Makefile generated from Makefile.SH on $DATE + +SHELL = /bin/sh +JMAKE = jmake +TOP = .. +CURRENT = $CURRENT +DIR = $DIR +INSTALL = $INSTALL +INSTALLDIR = $INSTALLDIR + +######################################################################## +# Parameters set by Configure -- edit config.sh if changes are needed + +CTAGS = ctags +MAKE = make +MKDEP = $mkdep \$(DPFLAGS) -- +MV = $mv +PRIVLIB = $installprivlib +RM = $rm -f +SCRIPTDIR = $installscript +SED = $sed + +######################################################################## +# Automatically generated parameters -- do not edit + +SUBDIRS = man +BIN = metaconfig metalint metaxref + +!GROK!THIS! +$spitshell >>Makefile <<'!NO!SUBS!' +######################################################################## +# Jmake rules for building libraries, programs, scripts, and data files +# $X-Id: Jmake.rules,v 3.0.1.3 1995/03/21 08:35:28 ram Exp ram $ +######################################################################## +# Force 'make depend' to be performed first -- do not edit + +.FORCE_DEPEND:: + +all:: .FORCE_DEPEND + +######################################################################## +# Start of Jmakefile + +# $X-Id: Jmakefile,v 3.0.1.4 1995/07/25 13:23:09 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. +# +# $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 explicitely 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 + +Glossary: makegloss + chmod +x makegloss + ./makegloss + +all:: makegloss + +local_realclean:: + $(RM) makegloss + +makegloss: makegloss.SH + /bin/sh makegloss.SH + + +install:: + @for dir in $(PRIVLIB) $(PRIVLIB)/U; do \ + case '${MFLAGS}' in *[i]*) set +e;; esac; \ + (set -x; test -d $$dir || $(INSTALLDIR) $$dir); \ + done + +deinstall:: + $(RM) -r $(PRIVLIB) $(PRIVLIB)/U + +install:: Glossary + $(INSTALL) -c -m 444 Glossary $(PRIVLIB) + +deinstall:: + $(RM) $(PRIVLIB)/Glossary + +install:: makegloss + $(INSTALL) -c -m 555 makegloss $(PRIVLIB) + +deinstall:: + $(RM) $(PRIVLIB)/makegloss + +install:: configure + $(INSTALL) -c -m 555 configure $(PRIVLIB) + +deinstall:: + $(RM) $(PRIVLIB)/configure + +install:: U/[a-d]*.U + @case '${MFLAGS}' in *[i]*) set +e;; esac; \ + for i in U/[a-d]*.U; do \ + (set -x; $(INSTALL) -c -m 444 $$i $(PRIVLIB)/U); \ + done + +deinstall:: + @case '${MFLAGS}' in *[i]*) set +e;; esac; \ + for i in U/[a-d]*.U; do \ + (set -x; $(RM) $(PRIVLIB)/U/$$i); \ + done + +install:: U/[A-Ze-z]*.U + @case '${MFLAGS}' in *[i]*) set +e;; esac; \ + for i in U/[A-Ze-z]*.U; do \ + (set -x; $(INSTALL) -c -m 444 $$i $(PRIVLIB)/U); \ + done + +deinstall:: + @case '${MFLAGS}' in *[i]*) set +e;; esac; \ + for i in U/[A-Ze-z]*.U; do \ + (set -x; $(RM) $(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 $@ + +install:: metaconfig + $(INSTALL) -c -m 555 metaconfig $(SCRIPTDIR) + +deinstall:: + $(RM) $(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 $@ + +install:: metalint + $(INSTALL) -c -m 555 metalint $(SCRIPTDIR) + +deinstall:: + $(RM) $(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 $@ + +install:: metaxref + $(INSTALL) -c -m 555 metaxref $(SCRIPTDIR) + +deinstall:: + $(RM) $(SCRIPTDIR)/metaxref + +BINFILES = \ + mconfig \ + mlint \ + mxref + +BINSH = \ + mconfig.SH \ + mlint.SH \ + mxref.SH + +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 + +emptyrule:: + +clean: sub_clean local_clean +realclean: sub_realclean local_realclean +clobber: sub_clobber local_clobber + +local_clean:: + $(RM) core *~ *.o + +local_realclean:: local_clean + +local_clobber:: local_realclean + $(RM) Makefile config.sh + +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 $@; exit 0; 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)); \ + done + +install:: + @$(MAKE) subdirs TARGET=install VERB="Installing" FLAGS= + +deinstall:: + @$(MAKE) subdirs TARGET=deinstall VERB="Deinstalling" FLAGS= + +install.man:: + @$(MAKE) subdirs TARGET=install.man VERB="Installing man pages" FLAGS= + +deinstall.man:: + @$(MAKE) subdirs TARGET=deinstall.man VERB="Deinstalling man pages" FLAGS= + +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); \ + 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) \ + 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; $(MAKE) $(MFLAGS) -f ../Makefile \ + Makefile TOP=$$newtop CURRENT=$(DIR)$$i;\ + $(MAKE) $(MFLAGS) Makefiles.SH) \ + done + +all:: + @$(MAKE) subdirs TARGET=all VERB="Making all" FLAGS= + +######################################################################## +# Dependencies generated by make depend +# DO NOT DELETE THIS LINE -- make depend relies on it + +# Put nothing here or make depend will gobble it up +.FORCE_DEPEND:: + @echo "You must run 'make depend' in $(TOP) first."; exit 1 +!NO!SUBS! +chmod 644 Makefile +$eunicefix Makefile + diff --git a/mcon/NOTES b/mcon/NOTES new file mode 100644 index 0000000..b6762e0 --- /dev/null +++ b/mcon/NOTES @@ -0,0 +1,174 @@ +This file shortly documents the built-in interpreter and other new +features from metaconfig. + +The notion of "conditional unit" has been added. In the ?MAKE: line, +each unit whose name begins with a "+" will not be loaded in the +Configure script unless its exact value is a mandatory. The default +value specified in ?DEF: will be used instead. If no ?DEF: line is +found, then the symbol is initialized with a null default value. + +In the config.h.SH file, only the necessary symbols are loaded. Note +that the format in ?H: line has changed. It is no longer necessary to +write ?H:?%1: to get a line included in config.h. First of all, the %1 +symbol is not defined any more. Secondly, the unit's name is now %< and +it does not matter whether the name appears first in the ?MAKE: line or +not. Lastly, metaconfig can guess for itself whether to include a +symbol or not. + +Sometimes, it is necessary to force a given value, because metaconfig is +not smart enough to guess 100% of the time. See voidflags.U for an +example (look at the ?C: and ?H: lines and read the comments). + +The Myread.U unit changed. It is now able to do variable substitutions, +and it sets the prompt correctly if there is no supplied default. Thus, +instead of the old: + + dflt=y + rp="Question? [$dflt]" + $echo $n "$rp $c" + . myread + +you must now write: + + dflt=y + rp='Question?' + . myread + +and 'myread' will take care of echoing the question with the default +put in square brakets. + +Likewise, question asking for filenames or pathnames may now use the Getfile.U +unit to take care of all the burden. The presetting is the same as for myread +and the answer is finally held in $ans. But the variable $fn must be set to +indicate the type of file and enable/disable some of the sanity checks. See +leading comments in Getfile.U. Here is a simple example to locate the active +file: + + dflt='~news/lib' + fn='l~:active' + rp='Where is the active file?' + . getfile + active="$ans" + +The user may answer the question by using ~substitution and giving only the +directory where the active file is located (in which case getfile will try +to locate a file named 'active' in that directory). A full path may also be +given of course, if the basename of the file is not 'active'. + +The units are now filtered by a built-in interpreter before getting +loaded in Configure. That way, a Configure script can be more or less +tuned. See d_gethname.U for a complex example. + +All the interpreter commands start with a leading '@'. Possible +commands include: + +o if/elsif/else/end is the traditional conditional construct. +o define <symbol> tells metaconfig the <symbol> is to be defined. + +Expressions in conditional constructs can include the &&, || and ! +operator with same meaning as in the shell. Backslash at the end of a +line stands for the continuation character. All the symbols in the +expression stands for themselves, and their value is true if they are +defined/wanted and false otherwise. + +It is possible to include shell and perl test. All the text enclosed in +single brackets as {<text>} is expanded in a shell as + + if <text> >/dev/null 2>&1; then exit 0; else exit 1; fi + +whereas text in double brackets as {{<text>}} is expanded in perl as + + if (<text> {exit 0;} else {exit 1;} + +and the exit status is used in the standard way to get a boolean value +(i.e 0 is true and everything else is false). See Oldconfig.U for an +example. + +Metaconfig's interpreter has standard C operator priority, but you may +force the evaluation order with parenthesis. A simple error recovery +attempt is made, so that you should get meaningful error messages. + +The simple test ?sym: means "keep the remaining of the line iff the +symbol is defined" and %sym: is the same for non-definedness. + +Some special symbols may be put in a unit and will get expanded, +provided the ?MAKE: command line is 'wipe' and not 'add'. Here are the +available symbols: + + <PACKAGENAME> is the name $package as found in .package + <MAINTLOC> is the $maintloc variable as found in .pakcage + <VERSION> is metaconfig's version number + <PATCHLEVEL> is metaconfig's patchlevel + <DATE> is the current frozen date as given by `date` + +A 'wipe'ed unit is passed through the interpreter too. + +It is also possible to declare a symbol obsolete. A warning message +will be issued if the symbol is used and the Glossary mentions it. +the "Obsolete" clause. The syntax is: + + ?C:symbol (obsolete list): + ?S:symbol (obsolete list): + +If metaconfig is used with the -o option, it will generate code to remap +those old symbols to the new ones, so the old code does not have to be changed +right away. If you do not use -o, the Obsolete file will still be generated +to warn you about obsolete symbols but no maping will be done. + +The new ?W: line can be use to tie up the destiny of some symbols. The syntax +is: + + ?W:shell symbols list:C symbol list + +and the symbols in the shell list will be defined if one of the C symbols is. +For instance, unit d_const.U uses the following: + + ?W:%<:const + +so that any 'const' usage in the C code will have %< (the unit name) handled +as a wanted symbol. In particular, this has the interesting side effect of +loading the unit into Configure when the 'const' keyword is used. + +This shell symbol list part may be left empty. For example unit i_time.U uses: + + ?W::timezone + +for its side effect: the symbol 'timezone' may now be part of the interpreter +tests to conditionally load some code into Configure when struct timezone is +used. + +C symbol aliasing can be used to let metaconfig know that the symbol comment +is to be loaded in config_h.SH even when the main symbol is not used in C. +For instance, d_const.U writes: + + ?C:HASCONST ~ %<: + +so that the HASCONST hype is loaded iff the unit (%<) is wanted. This is why +the ?H: lines are also explicitely tied to the wanted-ness of the d_const +symbol, by writing: + + ?H:?%<:#$d_const HASCONST /**/ + ?H:?%<:#ifndef HASCONST + ?H:?%<:#define const + ?H:?%<:#endif + ?H:. + +because we want all those lines to appear in config_h.SH as soon as the d_const +unit is loaded into Configure. + +Because of the new -s (silent) option of Configure, the important messages which +are to appear even in silent mode must be written on file descriptor #4. Others +will simply not be echoed under -s. Note that all the questions and default +answers are written on #4. You should write: + + echo " " + echo "Checking to see if......" >&4 + ..... + echo "Yes, it does" + +which will have the traditional behaviour unless -s is used, in which case only +the line + + Checking to see if..... + +will echo on the terminal. diff --git a/mcon/README b/mcon/README new file mode 100644 index 0000000..0a6b26e --- /dev/null +++ b/mcon/README @@ -0,0 +1,24 @@ +This is the root directory for metaconfig. + +If you are new to metaconfig, you may wish to have a look at the INTRO +file, which gives a quick introduction. + +The metaconfig you have here is a modified version of Larry Wall's 2.0 +release. The units themselves have been ripped off from some Configure +scripts (perl 4.0, elm 2.3). They all carry a copyright from me, which +is not true, but it was automatically produced and I had no time yet to +set the proper copyrights for each unit. + +Although metaconfig, as being part of dist, is covered by the Artistic +License, a Configure script is not copyrighted and belongs to the +public domain. Units can be copyrighted, and credits for each unit may +appear in the generated Configure script, at the author's request. + +The manual page for metaconfig is not up-to-date. The built-in +interpreter and the changes are documented in NOTES. + +The units that come from dist 2.0 need to be changed. A script should be +provided in the final release to do an automatic conversion, which will +be fine 90% of the time. If you want to see how new features can be used, +I would recommend you to have a look at Oldconfig.U, d_gethname.U and +voidflags.U. diff --git a/mcon/U/AAAAA.U b/mcon/U/AAAAA.U new file mode 100644 index 0000000..b2f6211 --- /dev/null +++ b/mcon/U/AAAAA.U @@ -0,0 +1,46 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: AAAAA.U,v $ +?RCS: Revision 3.0.1.4 1994/06/20 06:50:26 ram +?RCS: patch30: changes from Jarkko Hietaniemi are tagged with JHI +?RCS: +?RCS: Revision 3.0.1.3 1994/05/06 14:01:39 ram +?RCS: patch23: initials for Wayne Davison are now WED +?RCS: patch23: added initials for new unit contributor Andy Dougherty +?RCS: +?RCS: Revision 3.0.1.2 1994/01/24 14:01:09 ram +?RCS: patch16: make metalint shut up on special unit definition for All target +?RCS: +?RCS: Revision 3.0.1.1 1993/09/13 15:43:57 ram +?RCS: patch10: documents initials used for Wayne Davison's contributions +?RCS: +?RCS: Revision 3.0 1993/08/18 12:04:44 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?X: +?X: The purpose of this file is to supply the head of the Makefile created +?X: by metaconfig. For this reason it must be first in alphabetical order. +?X: The leading '+' in front of the unit name is a hint for metalint, since +?X: the use of that special unit name as a "made" unit is legitimate here. +?X: +?MAKE:+All: Finish +?X: +?X: Throughout the units, the following initials are used to identify comments: +?X: +?X: HMS: Harlan Stenn +?X: RAM: Raphael Manfredi +?X: WED: Wayne Davison (was WAD by mistake--RAM) +?X: ADO: Andy Dougherty +?X: JHI: Jarkko Hietaniemi +?X: +?X: Agreed, this is a weird place to document it, but I couldn't find a better +?X: place to do so. I've bet on the curiosity of users, who would probably +?X: want to know what's in this strangely-named file--RAM. diff --git a/mcon/U/Begin.U b/mcon/U/Begin.U new file mode 100644 index 0000000..c05d239 --- /dev/null +++ b/mcon/U/Begin.U @@ -0,0 +1,39 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: Begin.U,v $ +?RCS: Revision 3.0.1.3 1997/02/28 14:56:35 ram +?RCS: patch61: added Extractall dependency +?RCS: +?RCS: Revision 3.0.1.2 1995/01/30 14:25:08 ram +?RCS: patch49: avoid an empty rmlist: systems might choke on it (WED) +?RCS: +?RCS: Revision 3.0.1.1 1994/10/31 09:32:20 ram +?RCS: patch44: created +?RCS: +?X: +?X: This file comes after option processing had been done and after all +?X: the default values have been set up. It marks the beginning of questions. +?X: It is important that Options be listed *after* Myinit to ensure that the +?X: default initializations performed by Init and Myinit will not clobber +?X: any setting done on the command line via -D or -U. +?X: +?MAKE:Begin: Myinit Options package Extractall +?MAKE: -pick add $@ %< +: Eunice requires " " instead of "", can you believe it +echo " " +: Here we go... +echo "Beginning of configuration questions for $package." + +?X: Make sure the rm below is given a non-empty list for some systems. +?X: This is run only when within the UU directory, hence we can safely +?X: attempt to rm a non-existent 'X' file... +trap 'echo " "; test -d ../UU && rm -rf X $rmlist; exit 1' 1 2 3 15 + diff --git a/mcon/U/Checkcc.U b/mcon/U/Checkcc.U new file mode 100644 index 0000000..ac1b513 --- /dev/null +++ b/mcon/U/Checkcc.U @@ -0,0 +1,135 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: Copyright (c) 2000, Jarkko Hietaniemi +?RCS: +?X: +?X: This unit produces a bit of shell code that must be dotted in order +?X: to make quick check on whether the current C compiler is working. +?X: +?MAKE:Checkcc ccname ccversion: Myread Warn startsh cat contains test +?MAKE: -pick add $@ %< +?S:ccname: +?S: This can set either by hints files or by Configure. If using +?S: gcc, this is gcc, and if not, usually equal to cc, unimpressive, no? +?S: Some platforms, however, make good use of this by storing the +?S: flavor of the C compiler being used here. For example if using +?S: the Sun WorkShop suite, ccname will be 'workshop'. +?S:. +?S:ccversion: +?S: This can set either by hints files or by Configure. If using +?S: a (non-gcc) vendor cc, this variable may contain a version for +?S: the compiler. +?S:. +?F:./checkcc ./trygcc !checktmp +?V:despair +?T:trygcc +?LINT:extern cc rm ccflags ldflags +?LINT:change cc ccflags +?LINT:usefile checktmp +?INIT:ccname='' +?INIT:ccversion='' +: generate the trygcc script for later perusal +cat <<EOS >trygcc +$startsh +EOS +cat <<'EOSC' >>trygcc +case "$cc" in +'') ;; +*) $rm -f try try.* + $cat >try.c <<EOM +int main(int argc, char *argv[]) { + (void) argc; + (void) argv; + return 0; +} +EOM + if $cc -o try $ccflags $ldflags try.c; then + : + else + echo "Uh-oh, the C compiler '$cc' doesn't seem to be working." >&4 + despair=yes + trygcc=yes + case "$cc" in + *gcc*) trygcc=no ;; + esac + case "`$cc -v -c try.c 2>&1`" in + *gcc*) trygcc=no ;; + esac + if $test X"$trygcc" = Xyes; then + if gcc -o try -c try.c; then + echo " " + echo "You seem to have a working gcc, though." >&4 + rp="Would you like to use it?" + dflt=y + if $test -f myread; then + . ./myread + else + if $test -f UU/myread; then + . ./UU/myread + else + echo "Cannot find myread, sorry. Aborting." >&2 + exit 1 + fi + fi + case "$ans" in + [yY]*) cc=gcc; ccname=gcc; ccflags=''; despair=no; +?X: Look whether we have 'call-back units' generated by hints that would +?X: seemingly affect the compiling environment. + $cat *.cbu >checktmp 2>/dev/null + if $contains ccflags checktmp >/dev/null; then + ./warn <<EOM +Any previous setting of the C compiler flags has been lost. +It may be necessary to pass -Dcc=gcc to Configure right away. +EOM + fi;; + esac + fi + fi + fi + $rm -f try try.* + ;; +esac +EOSC + +: generate the checkcc script for later perusal +cat <<EOS >checkcc +$startsh +EOS +cat <<'EOSC' >>checkcc +case "$cc" in +'') ;; +*) $rm -f try try.* + $cat >try.c <<EOM +int main(int argc, char *argv[]) { + (void) argc; + (void) argv; + return 0; +} +EOM + if $cc -o try $ccflags $ldflags try.c; then + : + else + if $test X"$despair" = Xyes; then + echo "Uh-oh, the C compiler '$cc' doesn't seem to be working." >&4 + fi + $cat >&4 <<EOM +You need to find a working C compiler. +Either (purchase and) install the C compiler supplied by your OS vendor, +or for a free C compiler try http://gcc.gnu.org/ +I cannot continue any further, aborting. +EOM + exit 1 + fi + $rm -f try try.* + ;; +esac +EOSC + diff --git a/mcon/U/Chk_MANI.U b/mcon/U/Chk_MANI.U new file mode 100644 index 0000000..121ce9d --- /dev/null +++ b/mcon/U/Chk_MANI.U @@ -0,0 +1,88 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: Chk_MANI.U,v $ +?RCS: Revision 3.0.1.2 1997/02/28 14:57:25 ram +?RCS: patch61: added support for src.U +?RCS: +?RCS: Revision 3.0.1.1 1994/10/31 09:33:14 ram +?RCS: patch44: now lists Begin instead of Myinit in its dependencies +?RCS: patch44: leading comment now explains how this unit is included +?RCS: +?RCS: Revision 3.0 1993/08/18 12:04:45 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?X: +?X: This unit checks the package by making sure every file listed in MANIFEST +?X: is present. It is systematically "included" via the Finish unit (which +?X: is always present in every Configure script), although it may result in +?X: an empty inclusion when no MANIFEST is present. +?X: +?MAKE:Chk_MANI: Begin c n rsrc +?MAKE: -pick wipe $@ %< +?T:filelist ans tmppwd +?X: This check happens at metaconfig-time, so it's ok to hard-code the path. +@if {test -f ../MANIFEST} +: Now test for existence of everything in MANIFEST +echo " " +if test -f "$rsrc/MANIFEST"; then + echo "First let's make sure your kit is complete. Checking..." >&4 +?X: +?X: Files spelled uppercased and beginning with PACK are produced by the +?X: shell archive builder and may be removed by the user. Usually, they are +?X: not listed in the MANIFEST file, but you never know... +?X: +?X: "split -l" is the new way of running a split, but we also try the older way +?X: + awk '$1 !~ /PACK[A-Z]+/ {print $1}' "$rsrc/MANIFEST" | \ + (split -l 50 2>/dev/null || split -50) + rm -f missing + tmppwd=`pwd` + for filelist in x??; do + (cd "$rsrc"; ls `cat "$tmppwd/$filelist"` \ + >/dev/null 2>>"$tmppwd/missing") + done + if test -s missing; then + cat missing >&4 + cat >&4 <<'EOM' + +THIS PACKAGE SEEMS TO BE INCOMPLETE. + +You have the option of continuing the configuration process, despite the +distinct possibility that your kit is damaged, by typing 'y'es. If you +do, don't blame me if something goes wrong. I advise you to type 'n'o +and contact the author (<MAINTLOC>). + +EOM +?X: Can't use $echo at this early stage + echo $n "Continue? [n] $c" >&4 + read ans + case "$ans" in + y*) + echo "Continuing..." >&4 + rm -f missing + ;; + *) +?X: +?X: Use kill and not exit, so that the trap gets executed to clean up +?X: + echo "ABORTING..." >&4 + kill $$ + ;; + esac + else + echo "Looks good..." + fi +else + echo "There is no MANIFEST file. I hope your kit is complete !" +fi +rm -f missing x?? + +@end diff --git a/mcon/U/Chk_whoami.U b/mcon/U/Chk_whoami.U new file mode 100644 index 0000000..a18ae1d --- /dev/null +++ b/mcon/U/Chk_whoami.U @@ -0,0 +1,25 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: Chk_whoami.U,v $ +?RCS: Revision 3.0 1993/08/18 12:04:46 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?X: +?X: This unit makes sure we don't try to include whoami.h if uname() exists. +?X: +?MAKE:Chk_whoami: d_uname i_whoami +?MAKE: -pick add $@ %< +?LINT:change i_whoami +: weed out incompatibilities +case "$d_uname" in + "$define") i_whoami="$undef" ;; +esac + diff --git a/mcon/U/Compile.U b/mcon/U/Compile.U new file mode 100644 index 0000000..a8af2e0 --- /dev/null +++ b/mcon/U/Compile.U @@ -0,0 +1,63 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: Copyright (c) 1998 Andy Dougherty +?RCS: +?RCS: You may distribute under the terms of either the GNU General Public +?RCS: License or the Artistic License, as specified in the README file. +?RCS: +?RCS: +?X: +?X: This unit is just a quick shorthand for the compile command +?X: to be used in all the other metaconfig units. +?X: +?MAKE:Compile: +cc +optimize +ccflags +ldflags +libs +?MAKE: -pick add $@ %< +?LINT:define compile compile_ok +?V:compile compile_ok mc_file +?S:compile: +?S: This shell variable is used internally by Configure to provide +?S: a convenient shorthand for the typical compile command, namely +?S: $cc $optimize $ccflags $ldflags -o $1 $1.c $libs > /dev/null 2>&1 +?S: Note that the output filename does _not_ include the _exe +?S: extension. Instead we assume that the linker will be +?S: "helpful" and automatically appending the correct suffix. +?S: OS/2 users will apparently need to supply the -Zexe flag to +?S: get this behavior. +?S: +?S: To use this variable, say something like: +?S: echo 'int main() { exit(0); }' > try.c +?S: set try +?S: if eval $compile; then +?S: echo "success" # and do whatever . . . +?S: else +?S: echo "failure" # and do whatever . . . +?S: fi +?S: To add extra flags cc flags (e.g. -DWHATEVER) just put them +?S: in $*, e.g. +?S: set try -DTRY_THIS_FLAG +?S:. +?S:compile_ok: +?S: This shell variable is used internally by Configure to provide +?S: a convenient shorthand for the typical compile command that you +?S: expect to work ok. It is the same as $compile, except we +?S: deliberately let the user see any error messages. +?S:. +: define a shorthand compile call +compile=' +mc_file=$1; +shift; +$cc -o ${mc_file} $optimize $ccflags $ldflags $* ${mc_file}.c $libs > /dev/null 2>&1;' +: define a shorthand compile call for compilations that should be ok. +compile_ok=' +mc_file=$1; +shift; +$cc -o ${mc_file} $optimize $ccflags $ldflags $* ${mc_file}.c $libs;' + diff --git a/mcon/U/Config_h.U b/mcon/U/Config_h.U new file mode 100644 index 0000000..04336c2 --- /dev/null +++ b/mcon/U/Config_h.U @@ -0,0 +1,114 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: Config_h.U,v $ +?RCS: Revision 3.0.1.5 1997/02/28 14:57:43 ram +?RCS: patch61: added support for src.U +?RCS: +?RCS: Revision 3.0.1.4 1995/09/25 09:10:49 ram +?RCS: patch59: commented the purpose of the #un-def directive +?RCS: +?RCS: Revision 3.0.1.3 1995/01/30 14:25:39 ram +?RCS: patch49: typo fixes in leading config.h comment (WED) +?RCS: +?RCS: Revision 3.0.1.2 1993/08/24 12:13:20 ram +?RCS: patch3: added TOP as a local shell temporary variable +?RCS: +?RCS: Revision 3.0.1.1 1993/08/19 06:42:20 ram +?RCS: patch1: leading config.sh searching was not aborting properly +?RCS: +?RCS: Revision 3.0 1993/08/18 12:04:47 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?X: +?X: This file ends up producing the config_h.SH script, which is run to produce +?X: the config.h file. The file ./.Config_h below contains all the ?H: lines +?X: extracted out of all the units. Metaconfig itself adds the !GROK!THIS!. +?X: Note that this code isn't included into Configure, but must be shipped with. +?X: +?X: For those who wish to know why the file is config_h.SH instead of the more +?X: natural config.h.SH, well... it is to support systems like MS-DOG. Only one +?X: 'dot' is allowed within the file name, as it is part of the "extension" of +?X: the file. MS-DOG will not let you have two 'dots' because that would mean +?X: two "extensions". +?X: +?MAKE:Config_h: Id End Config_sh Obsol_h myuname cf_time cf_by package src +?MAKE: -pick c_h_weed $@ %< +?MAKE: -pick c_h_weed $@ ./Config_h +?MAKE: -pick c_h_weed $@ ./Obsol_h +?T:CONFIG TOP +?LINT:unclosed !GROK!THIS! +?LINT:extern CONFIG_H CONFIG_SH +?LINT:change CONFIG_H CONFIG_SH +?LINT:nocomment +case "$CONFIG_SH" in +'') CONFIG_SH=config.sh;; +esac +case "$CONFIG_H" in +'') CONFIG_H=config.h;; +esac +case $CONFIG in +'') + if test -f $CONFIG_SH; then TOP=.; + elif test -f ../$CONFIG_SH; then TOP=..; + elif test -f ../../$CONFIG_SH; then TOP=../..; + elif test -f ../../../$CONFIG_SH; then TOP=../../..; + elif test -f ../../../../$CONFIG_SH; then TOP=../../../..; + else + echo "Can't find $CONFIG_SH."; exit 1 + fi + . $TOP/$CONFIG_SH + ;; +esac +?X: Make sure we are in the directory where the .SH file is located. +case "$0" in +*/*) cd `expr X$0 : 'X\(.*\)/'` ;; +esac +echo "Extracting $CONFIG_H (with variable substitutions)" +?X: +?X: Since we unconditionally translate leading #undef into /*#define, we're +?X: stuck when we really want to have a #undef in config.h. That's why there +?X: is provision here for #un-def, which is translated back into #undef after +?X: all original #undef have been processed. +?X: +?X: Previously, we changed all +?X: #undef FOO /**/ +?X: into +?X: /*#define FOO /**/ +?X: The xlc compiler (available on IBM's AIX) complains that this is +?X: an illegal attempt to write a nested comment, and warns against it. +?X: There's apparently no way to shut the compiler up, either. +?X: This sed command from Hallvard B Furuseth <h.b.furuseth@usit.uio.no> +?X: changes it to +?X: /*#define FOO / **/ +sed <<!GROK!THIS! >$CONFIG_H -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un-def!#undef!' +/* + * This file was produced by running the config_h.SH script, which + * gets its values from $CONFIG_SH, which is generally produced by + * running Configure. + * + * Feel free to modify any of this as the need arises. Note, however, + * that running config_h.SH again will wipe out any changes you've made. + * For a more permanent change edit $CONFIG_SH and rerun config_h.SH. + * + * \$Id$ + */ + +/* + * Package name : $package + * Source directory : $src + * Configuration time: $cf_time + * Configured by : $cf_by + * Target system : $myuname + */ + +#ifndef _config_h_ +#define _config_h_ + diff --git a/mcon/U/Config_sh.U b/mcon/U/Config_sh.U new file mode 100644 index 0000000..3d71a2e --- /dev/null +++ b/mcon/U/Config_sh.U @@ -0,0 +1,110 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: Config_sh.U,v $ +?RCS: Revision 3.0.1.3 1997/02/28 14:57:53 ram +?RCS: patch61: added support for src.U +?RCS: +?RCS: Revision 3.0.1.2 1995/01/11 14:53:31 ram +?RCS: patch45: moved path stripping from d_portable.U to end of Configure +?RCS: +?RCS: Revision 3.0.1.1 1994/10/29 15:50:37 ram +?RCS: patch36: added ?F: line for metalint file checking +?RCS: +?RCS: Revision 3.0 1993/08/18 12:04:48 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?X: +?X: This unit ends up producing the config.sh script, which contains all the +?X: definitions figured out by Configure. The add.Config_sh command knows +?X: which variables need to be remembered. It also adds the EOT (ends the +?X: here document redirection with variable substitution). +?X: +?MAKE:Config_sh: cf_time cf_by test spitshell startsh myuname Myread \ + End Obsol_sh Loc +d_portable package src cat sed +?MAKE: -pick add.Config_sh $@ %< +?MAKE: -pick add $@ ./Obsol_sh +?MAKE: -pick close.Config_sh $@ %< +?F:!config.over !config.arch +?T:file sfile xsed +?LINT:unclosed EOT +: back to where it started +if test -d ../UU; then + cd .. +fi + +: configuration may be unconditionally patched via a 'config.arch' file +if $test -f config.arch; then + echo "I see a config.arch file, loading it." >&4 + . ./config.arch +fi + +: configuration may be patched via a 'config.over' file +if $test -f config.over; then + echo " " + dflt=y + rp='I see a config.over file. Do you wish to load it?' + . UU/myread + case "$ans" in + n*) echo "OK, I'll ignore it.";; + *) . ./config.over + echo "Configuration override changes have been loaded." + ;; + esac +fi + +@if d_portable +: in case they want portability, strip down executable paths +?X: +?X: Strip down paths in located executables. For each file, e.g. vi, there +?X: is a $vi variable whose value is for instance '/usr/bin/vi'. By resetting +?X: $vi to 'vi', we rely on the PATH variable to locate the executable... +?X: In order to allow vi='/usr/bin/nvi' which will strip down to vi='nvi', +?X: we can't just say 'eval $file="\$file"', we have to recourse to sed. +?X: We don't use basename since it is less portable than sed. +?X: +case "$d_portable" in +"$define") + echo " " + echo "Stripping down executable paths..." >&4 + xsed=$sed + for file in $loclist $trylist; do + eval sfile="\$$file" + sfile=`echo $sfile | $xsed -e 's,.*/\(.*\),\1,'` + eval $file="$sfile" + done + ;; +esac + +@end +: create config.sh file +echo " " +echo "Creating config.sh..." >&4 +$spitshell <<EOT >config.sh +$startsh +# +# This file was produced by running the Configure script. It holds all the +# definitions figured out by Configure. Should you modify one of these values, +# do not forget to propagate your changes by running "Configure -der". You may +# instead choose to run each of the .SH files by yourself, or "Configure -S". +# + +# Package name : $package +# Source directory : $src +# Configuration time: $cf_time +# Configured by : $cf_by +# Target system : $myuname + +EOT +?X: Command line options are saved by the Options.U unit in the +?X: temporary file UU/cmdline.opt +$test -f UU/cmdline.opt && $cat UU/cmdline.opt >> config.sh +$spitshell <<EOT >>config.sh + diff --git a/mcon/U/Configdir.U b/mcon/U/Configdir.U new file mode 100644 index 0000000..1dfcf70 --- /dev/null +++ b/mcon/U/Configdir.U @@ -0,0 +1,28 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: Configdir.U,v $ +?RCS: Revision 3.0.1.1 1997/02/28 14:58:36 ram +?RCS: patch61: have README explicitely mention the package name +?RCS: +?RCS: Revision 3.0 1993/08/18 12:04:49 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:Configdir: package +?MAKE: -pick add $@ %< +: create .config dir to save info across Configure sessions +test -d ../.config || mkdir ../.config +cat >../.config/README <<EOF +This directory created by Configure to save information that should +persist across sessions for $package. + +You may safely delete it if you wish. +EOF + diff --git a/mcon/U/Cppsym.U b/mcon/U/Cppsym.U new file mode 100644 index 0000000..ab6bf7c --- /dev/null +++ b/mcon/U/Cppsym.U @@ -0,0 +1,286 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: Cppsym.U,v $ +?RCS: Revision 3.0.1.5 1995/05/12 11:59:11 ram +?RCS: patch54: split awk command onto two lines for older awks (ADO) +?RCS: +?RCS: Revision 3.0.1.4 1995/01/11 14:55:57 ram +?RCS: patch45: new cc vs. cpp symbol checking suggested by JHI +?RCS: patch45: added more cpp symbols (JHI) +?RCS: +?RCS: Revision 3.0.1.3 1994/10/29 15:51:32 ram +?RCS: patch36: added ?F: line for metalint file checking +?RCS: patch36: new symbols ardent and titan (ADO) +?RCS: +?RCS: Revision 3.0.1.2 1994/06/20 06:53:32 ram +?RCS: patch30: extended cpp symbol lookup list (JHI) +?RCS: patch30: renamed attrlist symbol into al for brevity +?RCS: +?RCS: Revision 3.0.1.1 1993/12/15 08:14:14 ram +?RCS: patch15: added new cpp symbols __bsdi__ and BSD_NET2 +?RCS: +?RCS: Revision 3.0 1993/08/18 12:04:50 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?X: +?X: This unit produces a shell script called Cppsym, which can be used to +?X: determine whether any in a list of symbols is defined by the C compilation +?X: chain (C preprocessor symbols plus C compiler native ones). +?X: It can determine the status of any symbol, though the symbols in $al +?X: are more easily determined. If you want to add to $al you can do +?X: it in Myinit.U. +?X: +?MAKE:Cppsym ccsymbols cppsymbols cppccsymbols: run \ + eunicefix Guess awk cat tr sed sort rm startsh osname \ + +cc gccversion test comm uniq echo Options trnl \ + optimize ccflags ldflags libs +?MAKE: -pick add $@ %< +?S:ccsymbols: +?S: The variable contains the symbols defined by the C compiler alone. +?S: The symbols defined by cpp or by cc when it calls cpp are not in +?S: this list, see cppsymbols and cppccsymbols. +?S: The list is a space-separated list of symbol=value tokens. +?S:. +?S:cppsymbols: +?S: The variable contains the symbols defined by the C preprocessor +?S: alone. The symbols defined by cc or by cc when it calls cpp are +?S: not in this list, see ccsymbols and cppccsymbols. +?S: The list is a space-separated list of symbol=value tokens. +?S:. +?S:cppccsymbols: +?S: The variable contains the symbols defined by the C compiler +?S: when it calls cpp. The symbols defined by the cc alone or cpp +?S: alone are not in this list, see ccsymbols and cppsymbols. +?S: The list is a space-separated list of symbol=value tokens. +?S:. +?T:also symbols i postprocess_cc_v flags +?F:./Cppsym +?F:!Cppsym.true !Cppsym.know !ccsym.com !ccsym.cpp !ccsym.own +: determine known pre-processor and compiler symbols +echo " " +$echo "Guessing which symbols your C compiler and preprocessor define..." >&4 +?X: +?X: The symbol list is in alpha order for ease of maintenance... +?X: +?X: Lots of new symbols (mostly rummaged from gcc), courtesy of +?X: Jarkko Hietaniemi <jhi@snakemail.hut.fi> -- RAM, 06/06/94 +?X: +?X: If your symbol is mixed case, just add it as-is. +?X: All symbols will be transformed to both all-lower and all-upper. +?X: Also drop any leading/trailing underscores, the scan will try all those. +?X: +$cat <<'EOSH' > Cppsym.know +a29k ABI64 aegis AES_SOURCE AIX AIX32 AIX370 +AIX41 AIX42 AIX43 AIX_SOURCE aixpc ALL_SOURCE +alliant alpha am29000 AM29000 AMD64 amiga AMIGAOS AMIX +ansi ANSI_C_SOURCE apollo ardent ARM32 atarist att386 att3b +BeOS BIG_ENDIAN BIT_MSF bsd BSD bsd43 bsd4_2 bsd4_3 BSD4_3 bsd4_4 +BSD_4_3 BSD_4_4 BSD_NET2 BSD_TIME BSD_TYPES BSDCOMPAT bsdi +bull c cadmus clipper CMU COFF COMPILER_VERSION +concurrent convex cpu cray CRAY CRAYMPP ctix CX_UX +CYGWIN DGUX DGUX_SOURCE DJGPP dmert DOLPHIN DPX2 DSO +Dynix DynixPTX ELF encore EPI EXTENSIONS FAVOR_BSD +FILE_OFFSET_BITS FreeBSD GCC_NEW_VARARGS gcos gcx gimpel +GLIBC GLIBC_MINOR +GNU_SOURCE GNUC GNUC_MINOR GNU_LIBRARY GO32 gould GOULD_PN +H3050R H3050RX hbullx20 hcx host_mips +hp200 hp300 hp700 HP700 hp800 hp9000 +hp9000s200 hp9000s300 hp9000s400 hp9000s500 +hp9000s700 hp9000s800 hp9k8 hp_osf hppa hpux HPUX_SOURCE +i186 i286 i386 i486 i586 i686 i8086 i80960 i860 I960 +IA64 iAPX286 ibm ibm032 ibmesa IBMR2 ibmrt ILP32 ILP64 +INLINE_INTRINSICS INTRINSICS INT64 interdata is68k ksr1 +LANGUAGE_C LARGE_FILE_API LARGEFILE64_SOURCE +LARGEFILE_SOURCE LFS64_LARGEFILE LFS_LARGEFILE +Linux LITTLE_ENDIAN LONG64 LONG_DOUBLE LONG_LONG +LONGDOUBLE LONGLONG LP64 luna luna88k Lynx +M68000 m68k m88100 m88k M88KBCS_TARGET M_COFF +M_I186 M_I286 M_I386 M_I8086 M_I86 M_I86SM M_SYS3 +M_SYS5 M_SYSIII M_SYSV M_UNIX M_XENIX MACH machine MachTen +MATH_HAS_NO_SIDE_EFFECTS +mc300 mc500 mc68000 mc68010 mc68020 mc68030 mc68040 +mc68060 mc68k mc68k32 mc700 mc88000 mc88100 merlin +mert MiNT mips MIPS_FPSET MIPS_ISA MIPS_SIM MIPS_SZINT +MIPS_SZLONG MIPS_SZPTR MIPSEB MIPSEL MODERN_C motorola +mpeix MSDOS MTXINU MULTIMAX mvs MVS n16 ncl_el ncl_mr +NetBSD news1500 news1700 news1800 news1900 news3700 +news700 news800 news900 NeXT NLS nonstopux ns16000 ns32000 +ns32016 ns32332 ns32k nsc32000 +OCS88 OEMVS OpenBSD os OS2 OS390 osf OSF1 OSF_SOURCE +pa_risc PA_RISC1_1 PA_RISC2_0 PARAGON parisc +pc532 pdp11 PGC PIC plexus PORTAR posix +POSIX1B_SOURCE POSIX2_SOURCE POSIX4_SOURCE +POSIX_C_SOURCE POSIX_SOURCE POWER +PROTOTYPES PWB pyr QNX R3000 REENTRANT RES Rhapsody RISC6000 +riscix riscos RT S390 SA110 scs SCO sequent sgi SGI_SOURCE SH3 sinix +SIZE_INT SIZE_LONG SIZE_PTR SOCKET_SOURCE SOCKETS_SOURCE +sony sony_news sonyrisc sparc sparclite spectrum +stardent stdc STDC_EXT stratos sun sun3 sun386 +Sun386i svr3 svr4 SVR4_2 SVR4_SOURCE svr5 +SX system SYSTYPE_BSD SYSTYPE_BSD43 SYSTYPE_BSD44 +SYSTYPE_SVR4 SYSTYPE_SVR5 SYSTYPE_SYSV SYSV SYSV3 SYSV4 SYSV5 +sysV68 sysV88 Tek4132 Tek4300 titan +TM3200 TM5400 TM5600 +tower tower32 tower32_200 tower32_600 tower32_700 +tower32_800 tower32_850 tss +u370 u3b u3b2 u3b20 u3b200 u3b20d u3b5 +ultrix UMAXV UnicomPBB UnicomPBD UNICOS UNICOSMK +unix UNIX95 UNIX99 unixpc unos +USE_BSD USE_FILE_OFFSET64 USE_GNU USE_ISOC9X USE_LARGEFILE USE_LARGEFILE64 +USE_MISC USE_POSIX USE_POSIX199309 USE_POSIX199506 USE_POSIX2 +USE_REENTRANT USE_SVID USE_UNIX98 USE_XOPEN USE_XOPEN_EXTENDED +USGr4 USGr4_2 +Utek UTek UTS UWIN uxpm uxps vax venix VMESA vms xenix Xenix286 +XOPEN_SOURCE XOPEN_SOURCE_EXTENDED XPG2 XPG2_EXTENDED +XPG3 XPG3_EXTENDED XPG4 XPG4_EXTENDED +z8000 +EOSH +?X: Maybe put other stuff here too. +cat <<EOSH >>Cppsym.know +$osname +EOSH +./tr '[a-z]' '[A-Z]' < Cppsym.know > Cppsym.a +./tr '[A-Z]' '[a-z]' < Cppsym.know > Cppsym.b +$cat Cppsym.know > Cppsym.c +$cat Cppsym.a Cppsym.b Cppsym.c | $tr ' ' $trnl | $sort | $uniq > Cppsym.know +$rm -f Cppsym.a Cppsym.b Cppsym.c +cat <<EOSH > Cppsym +$startsh +if $test \$# -gt 0; then + echo \$* | $tr " " "$trnl" | ./Cppsym.try > Cppsym.got + if $test -s Cppsym.got; then + $rm -f Cppsym.got + exit 0 + fi + $rm -f Cppsym.got + exit 1 +else + $tr " " "$trnl" | ./Cppsym.try + exit 0 +fi +EOSH +chmod +x Cppsym +$eunicefix Cppsym +?X: The below awk script will die a horrible death if +?X: some of the tested symbols are not long ints. +?X: Also, we do not make difference between just defined and defined zero. +cat <<EOSH > Cppsym.try +$startsh +cat <<'EOCP' > try.c +#include <stdio.h> +int main() { +EOCP +?X: The length($1) command guards against possible empty entries. +?X: The awk snippet is know to give heartburn to UNICOS/mk awk. +$awk \\ +EOSH +cat <<'EOSH' >> Cppsym.try +'length($1) > 0 { + printf "#ifdef %s\n#if %s+0\nprintf(\"%s=%%ld\\n\", (long)%s);\n#else\nprintf(\"%s\\n\");\n#endif\n#endif\n", $1, $1, $1, $1, $1 + printf "#ifdef _%s\n#if _%s+0\nprintf(\"_%s=%%ld\\n\", (long)_%s);\n#else\nprintf(\"_%s\\n\");\n#endif\n#endif\n", $1, $1, $1, $1, $1 + printf "#ifdef __%s\n#if __%s+0\nprintf(\"__%s=%%ld\\n\", (long)__%s);\n#else\nprintf(\"__%s\\n\");\n#endif\n#endif\n", $1, $1, $1, $1, $1 + printf "#ifdef __%s__\n#if __%s__+0\nprintf(\"__%s__=%%ld\\n\", (long)__%s__);\n#else\nprintf(\"__%s__\\n\");\n#endif\n#endif\n", $1, $1, $1, $1, $1 +}' >> try.c +echo 'return 0;}' >> try.c +EOSH +cat <<EOSH >> Cppsym.try +flags="$ccflags" +case "$osname-$gccversion" in +irix-) flags="\$flags -woff 1178" ;; +os2-*) flags="\$flags -Zlinker /PM:VIO" ;; +esac +$cc -o try $optimize \$flags $ldflags try.c $libs && $run ./try +EOSH +chmod +x Cppsym.try +$eunicefix Cppsym.try +./Cppsym < Cppsym.know > Cppsym.true +: now check the C compiler for additional symbols +?X: suggested by Jarkko Hietaniemi <jhi@snakemail.hut.fi>, thanks! +postprocess_cc_v='' +case "$osname" in +aix) postprocess_cc_v="|$tr , ' '" ;; +esac +$cat >ccsym <<EOS +$startsh +$cat >tmp.c <<EOF +extern int foo; +EOF +for i in \`$cc -v -c tmp.c 2>&1 $postprocess_cc_v\` +do + case "\$i" in + -D*) echo "\$i" | $sed 's/^-D//';; + -A*) $test "$gccversion" && echo "\$i" | $sed 's/^-A//' | $sed 's/\(.*\)(\(.*\))/\1=\2/';; + esac +done +$rm -f try.c +EOS +postprocess_cc_v='' +chmod +x ccsym +$eunicefix ccsym +./ccsym > ccsym1.raw +?X: AIX complains if $uniq is passed an empty file. ($sort apparently +?X: doesn't care.) --AD 14 July 1998 +if $test -s ccsym1.raw; then + $sort ccsym1.raw | $uniq >ccsym.raw +else + mv ccsym1.raw ccsym.raw +fi + +?X: canonicalize symbols for easier sort/uniq/comm usage: append =1 if no = sign +?X: the awk script must be on two lines for older awk programs, sigh! -- ADO +$awk '/\=/ { print $0; next } + { print $0"=1" }' ccsym.raw >ccsym.list +$awk '/\=/ { print $0; next } + { print $0"=1" }' Cppsym.true >ccsym.true +$comm -13 ccsym.true ccsym.list >ccsym.own +$comm -12 ccsym.true ccsym.list >ccsym.com +$comm -23 ccsym.true ccsym.list >ccsym.cpp +also='' +if $test -z ccsym.raw; then + echo "Your C compiler doesn't seem to define any symbols!" >&4 + echo " " + echo "However, your C preprocessor defines the following symbols:" + $cat Cppsym.true + ccsymbols='' + cppsymbols=`$cat Cppsym.true` + cppsymbols=`echo $cppsymbols` + cppccsymbols="$cppsymbols" +else + if $test -s ccsym.com; then + echo "Your C compiler and pre-processor define these symbols:" + $sed -e 's/\(..*\)=.*/\1/' ccsym.com + also='also ' + symbols='ones' + cppccsymbols=`$cat ccsym.com` + cppccsymbols=`echo $cppccsymbols` + $test "$silent" || sleep 1 + fi + if $test -s ccsym.cpp; then + $test "$also" && echo " " + echo "Your C pre-processor ${also}defines the following symbols:" + $sed -e 's/\(..*\)=.*/\1/' ccsym.cpp + also='further ' + cppsymbols=`$cat ccsym.cpp` + cppsymbols=`echo $cppsymbols` + $test "$silent" || sleep 1 + fi + if $test -s ccsym.own; then + $test "$also" && echo " " + echo "Your C compiler ${also}defines the following cpp symbols:" + $sed -e 's/\(..*\)=1/\1/' ccsym.own + $sed -e 's/\(..*\)=.*/\1/' ccsym.own | $uniq >>Cppsym.true + ccsymbols=`$cat ccsym.own` + ccsymbols=`echo $ccsymbols` + $test "$silent" || sleep 1 + fi +fi +$rm -f Cppsym.know Cppsym.true + diff --git a/mcon/U/Cross.U b/mcon/U/Cross.U new file mode 100644 index 0000000..feaef31 --- /dev/null +++ b/mcon/U/Cross.U @@ -0,0 +1,349 @@ +?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: 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 +: setup for possible cross-compilation +run='' +to=: +from=: +usecrosscompile='undef' +targetarch='' +case "$usecrosscompile" in +$define|true|[yY]*) +@if { test -d ../Cross } +?X: +?X: Cross-compilation is enabled when there is a 'Cross' directory found +?X: at the root of the package. This directory must contain the following +?X: entries for defining the cross-compilation process: +?X: +?X: FIXME FIXME +?X: WE MUST DISTINGUISH BETWEEN LOCAL cross-compiling AND REMOTE ONE +?X: ACTUALLY, REMOTE COMPILATION SHOULD BE CONFIGURED INTERACTIVELY +?X: IT WILL COPY ALL THE FILES FROM THE MANIFEST DOWN TO THE REMOTE DIR... +?X: (and copy things like 'mkdep', etc...) +?X: + $echo "Cross-compiling..." + croak='' + case "$cc" in + *-*-gcc) +?X: A cross-compiling gcc, probably. + targetarch=`$echo $cc|$sed 's/-gcc$//'` + ar=$targetarch-ar +?X: leave out ld, choosing it is more complex + nm=$targetarch-nm + ranlib=$targetarch-ranlib + $echo 'extern int foo;' > try.c + set X `$cc -v -E try.c 2>&1 | \ + $awk '/^#include </,/^End of search /'|$grep '/include'` + shift + if $test $# -gt 0; then + incpth="$incpth $*" + incpth="`$echo $incpth|$sed 's/^ //'`" + echo "Guessing incpth '$incpth'." >&4 + for i in $*; do + j="`$echo $i|$sed 's,/include$,/lib,'`" + if $test -d $j; then + libpth="$libpth $j" + fi + done + libpth="`$echo $libpth|$sed 's/^ //'`" + echo "Guessing libpth '$libpth'." >&4 + fi + $rm -f try.c + ;; + esac + case "$targetarch" in + '') echo "Targetarch not defined." >&4; croak=y ;; + *) echo "Using targetarch $targetarch." >&4 ;; + esac + case "$incpth" in + '') echo "Incpth not defined." >&4; croak=y ;; + *) echo "Using incpth '$incpth'." >&4 ;; + esac + case "$libpth" in + '') echo "Libpth not defined." >&4; croak=y ;; + *) echo "Using libpth '$libpth'." >&4 ;; + esac + case "$usrinc" in + '') + for i in $incpth; do + if $test -f $i/errno.h -a -f $i/stdio.h -a -f $i/time.h; then + usrinc=$i + echo "Guessing usrinc $usrinc." >&4 + break + fi + done + case "$usrinc" in + '') echo "Usrinc not defined." >&4; croak=y ;; + esac + ;; + *) echo "Using usrinc $usrinc." >&4 ;; + esac + case "$targethost" in + '') echo "Targethost not defined." >&4; croak=y ;; + *) echo "Using targethost $targethost." >&4 + esac + locincpth=' ' + loclibpth=' ' + case "$croak" in + y) echo "Cannot continue, aborting." >&4; exit 1 ;; + esac + case "$src" in + /*) run=$src/Cross/run + targetmkdir=$src/Cross/mkdir + to=$src/Cross/to + from=$src/Cross/from + ;; + *) pwd=`$test -f ../Configure & cd ..; pwd` + run=$pwd/Cross/run + targetmkdir=$pwd/Cross/mkdir + to=$pwd/Cross/to + from=$pwd/Cross/from + ;; + esac + case "$targetrun" in + '') targetrun=ssh ;; + esac + case "$targetto" in + '') targetto=scp ;; + esac + case "$targetfrom" in + '') targetfrom=scp ;; + esac + run=$run-$targetrun + to=$to-$targetto + from=$from-$targetfrom + case "$targetdir" in + '') + targetdir=/tmp + echo "Guessing targetdir $targetdir." >&4 + ;; + esac + case "$targetuser" in + '') + targetuser=root + echo "Guessing targetuser $targetuser." >&4 + ;; + esac + case "$targetfrom" in + scp) q=-q ;; + *) q='' ;; + esac + case "$targetrun" in + ssh|rsh) + $cat >$run <<EOF +#!/bin/sh +case "\$1" in +-cwd) + shift + cwd=\$1 + shift + ;; +esac +case "\$cwd" in +'') cwd=$targetdir ;; +esac +exe=\$1 +shift +if $test ! -f \$exe.xok; then + $to \$exe + $touch \$exe.xok +fi +$targetrun -l $targetuser $targethost "cd \$cwd && ./\$exe \$@" +EOF + ;; + *) echo "Unknown targetrun '$targetrun'" >&4 + exit 1 + ;; + esac + case "$targetmkdir" in + */Cross/mkdir) + $cat >$targetmkdir <<EOF +#!/bin/sh +$targetrun -l $targetuser $targethost "mkdir -p \$@" +EOF + $chmod a+rx $targetmkdir + ;; + *) echo "Unknown targetmkdir '$targetmkdir'" >&4 + exit 1 + ;; + esac + case "$targetto" in + scp|rcp) + $cat >$to <<EOF +#!/bin/sh +for f in \$@ +do + case "\$f" in + /*) + $targetmkdir \`dirname \$f\` + $targetto $q \$f $targetuser@$targethost:\$f || exit 1 + ;; + *) + $targetmkdir $targetdir/\`dirname \$f\` + $targetto $q \$f $targetuser@$targethost:$targetdir/\$f || exit 1 + ;; + esac +done +exit 0 +EOF + ;; + cp) $cat >$to <<EOF +#!/bin/sh +for f in \$@ +do + case "\$f" in + /*) + $mkdir -p $targetdir/\`dirname \$f\` + $cp \$f $targetdir/\$f || exit 1 + ;; + *) + $targetmkdir $targetdir/\`dirname \$f\` + $cp \$f $targetdir/\$f || exit 1 + ;; + esac +done +exit 0 +EOF + ;; + *) echo "Unknown targetto '$targetto'" >&4 + exit 1 + ;; + esac + case "$targetfrom" in + scp|rcp) + $cat >$from <<EOF +#!/bin/sh +for f in \$@ +do + $rm -f \$f + $targetfrom $q $targetuser@$targethost:$targetdir/\$f . || exit 1 +done +exit 0 +EOF + ;; + cp) $cat >$from <<EOF +#!/bin/sh +for f in \$@ +do + $rm -f \$f + cp $targetdir/\$f . || exit 1 +done +exit 0 +EOF + ;; + *) echo "Unknown targetfrom '$targetfrom'" >&4 + exit 1 + ;; + esac + if $test ! -f $run; then + echo "Target 'run' script '$run' not found." >&4 + else + $chmod a+rx $run + fi + if $test ! -f $to; then + echo "Target 'to' script '$to' not found." >&4 + else + $chmod a+rx $to + fi + if $test ! -f $from; then + echo "Target 'from' script '$from' not found." >&4 + else + $chmod a+rx $from + fi + if $test ! -f $run -o ! -f $to -o ! -f $from; then + exit 1 + fi + $cat >&4 <<EOF +Using '$run' for remote execution, +and '$from' and '$to' +for remote file transfer. +EOF +@else + echo "Cross-compilation is not supported for this package." >&4 + exit 1 +@end + ;; +esac + diff --git a/mcon/U/Csym.U b/mcon/U/Csym.U new file mode 100644 index 0000000..e7c7c4b --- /dev/null +++ b/mcon/U/Csym.U @@ -0,0 +1,97 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: 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 bypasss 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 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 +: 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; +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 lifes 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 otimizes &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: + echo "extern char $1$tdc; int main() { return &$1$tc + 2; }" > t.c; + if $cc $ccflags $ldflags -o t t.c $libs >/dev/null 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; +eval "$2=$tval"' + diff --git a/mcon/U/End.U b/mcon/U/End.U new file mode 100644 index 0000000..165b5af --- /dev/null +++ b/mcon/U/End.U @@ -0,0 +1,27 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: End.U,v $ +?RCS: Revision 3.0 1993/08/18 12:04:51 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?X: +?X: This unit serves as the goal which forces make to choose all the units that +?X: ask questions. The $W on the ?MAKE: line is the list of all symbols wanted. +?X: To force any unit to be included, copy this unit to your private U directory +?X: and add the name of the unit desired to the ?MAKE: dependency line. +?X: +?MAKE:End: $W +?MAKE: -pick add $@ %< +?LINT:use $W +: end of configuration questions +echo " " +echo "End of configuration questions." + diff --git a/mcon/U/Extract.U b/mcon/U/Extract.U new file mode 100644 index 0000000..d01d324 --- /dev/null +++ b/mcon/U/Extract.U @@ -0,0 +1,105 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: 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 dir file +: script used to extract .SH files with variable substitutions +cat >extract <<EOS +CONFIG=true +SRC="$src" +EOS +cat >>extract <<'EOS' +echo "Doing variable substitutions on .SH files..." +if test -f "$SRC/MANIFEST"; then + set x `awk '{print $1}' <$SRC/MANIFEST | grep '\.SH'` +else + echo "(Looking for .SH files under the source directory.)" + set x `(cd "$SRC"; find . -name "*.SH" -print)` +fi +shift +case $# in +0) set x `(cd "$SRC"; echo *.SH)`; shift;; +esac +if test ! -f "$SRC/$1"; then + shift +fi +for file in $*; do + case "$SRC" in + ".") + case "$file" in + */*) + dir=`expr X$file : 'X\(.*\)/'` + file=`expr X$file : 'X.*/\(.*\)'` + (cd $dir && . ./$file) + ;; + *) + . ./$file + ;; + esac + ;; + *) +?X: +?X: When running Configure remotely ($src is not '.'), we cannot source +?X: the files directly, since that would wrongly cause the extraction +?X: where the source lie instead of withing the current directory. Therefore, +?X: we need to 'sh <file' then, which is okay since they will source the +?X: existing config.sh file. It's not possible to use: +?X: ../src/Configure -S -O -Dsomething +?X: unfortunately since no new config.sh with the -Dsomething override +?X: will be created before running the .SH files. A minor buglet. +?X: +?X: Note that we must create the directory hierarchy ourselves if it does +?X: not exist already, and that is done through a shell emulation of the +?X: 'mkdir -p' command. We don't want to use the $installdir metaconfig +?X: symbol here since that would require too much to be configured for +?X: this simple extraction task that may happen quickly with 'Configure -S'. +?X: -- RAM, 18/03/96 +?X: + case "$file" in + */*) + dir=`expr X$file : 'X\(.*\)/'` + file=`expr X$file : 'X.*/\(.*\)'` + ./mkdirp $dir + sh <"$SRC/$dir/$file" + ;; + *) + sh <"$SRC/$file" + ;; + esac + ;; + esac +done +if test -f "$SRC/config_h.SH"; then + if test ! -f config.h; then +?X: oops, they left it out of MANIFEST, probably, so do it anyway. + sh <"$SRC/config_h.SH" + fi +fi +EOS + diff --git a/mcon/U/Extractall.U b/mcon/U/Extractall.U new file mode 100644 index 0000000..e764c20 --- /dev/null +++ b/mcon/U/Extractall.U @@ -0,0 +1,51 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: Extractall.U,v $ +?RCS: Revision 3.0.1.1 1997/02/28 15:00:43 ram +?RCS: patch61: created +?RCS: +?X: +?X: If extraction has been requested, load the configuration file, perform +?X: the extraction and exit. +?X: +?X: This unit was originally a part of Options.U. It had to be removed from +?X: it to prevent a dependency cycle: Extract -> src -> Options -> Extract +?X: The Begin.U unit now requires us before beginning to do anything +?X: interesting, to ensure proper semantics. -- RAM, 15/03/96 +?X: +?MAKE:Extractall: Extract Options +?MAKE: -pick wipe $@ %< +: extract files and exit if asked to do so +case "$extractsh" in +true) +?X: Undo the forced silent=true when -S was supplied, by probing realsilent +?X: which was set iff -s was also given. See Options.U for details. + case "$realsilent" in + true) ;; + *) exec 1>&4;; + esac + case "$config_sh" in + '') config_sh='config.sh';; + esac + echo " " + echo "Fetching answers from $config_sh..." + cd .. + . $config_sh + test "$override" && . ./optdef.sh + echo " " +?X: extract has to be run from the top directory, not within UU. + . UU/extract + rm -rf UU + echo "Extraction done." + exit 0 + ;; +esac + diff --git a/mcon/U/Filexp.U b/mcon/U/Filexp.U new file mode 100644 index 0000000..7602808 --- /dev/null +++ b/mcon/U/Filexp.U @@ -0,0 +1,69 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: Filexp.U,v $ +?RCS: Revision 3.0.1.2 1994/10/29 15:52:53 ram +?RCS: patch36: added ?F: line for metalint file checking +?RCS: patch36: added HOME to the ?T: line since metalint now checks ${HOME} +?RCS: +?RCS: Revision 3.0.1.1 1994/05/06 14:03:00 ram +?RCS: patch23: made sure error status from csh is propagated (WED) +?RCS: +?RCS: Revision 3.0 1993/08/18 12:04:53 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?X: +?X: This unit produces a shell script which will expand filenames beginning +?X: with tildes. The script is deleted at the end of Configure. +?X: +?MAKE:Filexp: startsh sed test expr eunicefix +?MAKE: -pick add $@ %< +?F:./filexp +?T:HOME LOGDIR dir me name failed +: set up shell script to do ~ expansion +cat >filexp <<EOSS +$startsh +: expand filename +case "\$1" in + ~/*|~) + echo \$1 | $sed "s|~|\${HOME-\$LOGDIR}|" + ;; + ~*) + if $test -f /bin/csh; then + /bin/csh -f -c "glob \$1" + failed=\$? + echo "" + exit \$failed + else + name=\`$expr x\$1 : '..\([^/]*\)'\` + dir=\`$sed -n -e "/^\${name}:/{s/^[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\).*"'\$'"/\1/" -e p -e q -e '}' </etc/passwd\` + if $test ! -d "\$dir"; then + me=\`basename \$0\` + echo "\$me: can't locate home directory for: \$name" >&2 + exit 1 + fi + case "\$1" in + */*) + echo \$dir/\`$expr x\$1 : '..[^/]*/\(.*\)'\` + ;; + *) + echo \$dir + ;; + esac + fi + ;; +*) + echo \$1 + ;; +esac +EOSS +chmod +x filexp +$eunicefix filexp + diff --git a/mcon/U/Findhdr.U b/mcon/U/Findhdr.U new file mode 100644 index 0000000..50f7ba7 --- /dev/null +++ b/mcon/U/Findhdr.U @@ -0,0 +1,126 @@ +?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: Original Author: Thomas Neumann <tom@smart.bo.open.de> +?RCS: +?RCS: $Log: Findhdr.U,v $ +?RCS: Revision 3.0.1.2 1994/10/29 15:53:08 ram +?RCS: patch36: added ?F: line for metalint file checking +?RCS: +?RCS: Revision 3.0.1.1 1994/05/06 14:03:56 ram +?RCS: patch23: cppminus must be after other cppflags, not before +?RCS: +?RCS: Revision 3.0 1993/08/18 12:04:54 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?X: +?X: This unit produces a findhdr script which is used to locate the header +?X: files in $usrinc or other stranger places using cpp capabilities. The +?X: script is given an include file base name, like 'stdio.h' or 'sys/file.h' +?X: and it returns the full path of the include file and a zero status or an +?X: empty string with an error status if the file could not be located. +?X: +?MAKE:Findhdr: grep test tr rm +usrinc awk cat startsh \ + cppstdin cppminus +cppflags eunicefix osname +?MAKE: -pick add $@ %< +?LINT:define fieldn +?S:fieldn: +?S: This variable is used internally by Configure. It contains the position +?S: of the included file name in cpp output. That is to say, when cpp +?S: pre-processes a #include <file> line, it replaces it by a # line which +?S: contains the original position in the input file and the full name of +?S: included file, between "quotes". +?S:. +?V:fieldn +?F:./findhdr !fieldn +?T:cline pos wanted name awkprg cppfilter testaccess status usrincdir +: determine filename position in cpp output +echo " " +echo "Computing filename position in cpp output for #include directives..." >&4 +echo '#include <stdio.h>' > foo.c +case "$osname" in +vos) + testaccess=-e +?X: VOS: path component separator is > + cppfilter="tr '\\\\>' '/' |" + ;; +*) + testaccess=-r + cppfilter='' + ;; +esac +$cat >fieldn <<EOF +$startsh +$cppstdin $cppflags $cppminus <foo.c 2>/dev/null | \ +$grep '^[ ]*#.*stdio\.h' | \ +while read cline; do + pos=1 + set \$cline + while $test \$# -gt 0; do + if $test $testaccess \`echo \$1 | $tr -d '"'\`; then + echo "\$pos" + exit 0 + fi + shift + pos=\`expr \$pos + 1\` + done +done +EOF +chmod +x fieldn +fieldn=`./fieldn` +$rm -f foo.c fieldn +case $fieldn in +'') pos='???';; +1) pos=first;; +2) pos=second;; +3) pos=third;; +*) pos="${fieldn}th";; +esac +echo "Your cpp writes the filename in the $pos field of the line." + +?X: To locate a header file, we cannot simply check for $usrinc/file.h, since +?X: some machine have the headers in weird places and our only hope is that +?X: the C pre-processor will know how to find those headers. Thank you NexT! +: locate header file +$cat >findhdr <<EOF +$startsh +wanted=\$1 +name='' +for usrincdir in $usrinc; do + if test -f \$usrincdir/\$wanted; then + echo "\$usrincdir/\$wanted" + exit 0 + fi +done +awkprg='{ print \$$fieldn }' +echo "#include <\$wanted>" > foo\$\$.c +$cppstdin $cppminus $cppflags < foo\$\$.c 2>/dev/null | \ +$cppfilter $grep "^[ ]*#.*\$wanted" | \ +while read cline; do + name=\`echo \$cline | $awk "\$awkprg" | $tr -d '"'\` + case "\$name" in + *[/\\\\]\$wanted) echo "\$name"; exit 1;; + *[\\\\/]\$wanted) echo "\$name"; exit 1;; + *) exit 2;; + esac +done +?X: status = 0: grep returned 0 lines, case statement not executed +?X: status = 1: headerfile found +?X: status = 2: while loop executed, no headerfile found +status=\$? +$rm -f foo\$\$.c +if test \$status -eq 1; then + exit 0 +fi +exit 1 +EOF +chmod +x findhdr +$eunicefix findhdr + diff --git a/mcon/U/Finish.U b/mcon/U/Finish.U new file mode 100644 index 0000000..2ed7bd9 --- /dev/null +++ b/mcon/U/Finish.U @@ -0,0 +1,141 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: 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) + $rm -rf UU + echo "Extraction done." + exit 0 + ;; +cont) + ;; +'') + dflt='' + nostick=true + $cat <<EOM + +If you'd like to make any changes to the config.sh file before I begin +to configure things, do it as a shell escape now (e.g. !vi config.sh). + +EOM + rp="Press return or use a shell escape to edit config.sh:" + . UU/myread + nostick='' + case "$ans" in + '') ;; + *) : in case they cannot read + sh 1>&4 -c "$ans";; + esac + ;; +esac + +: if this fails, just run all the .SH files by hand +. ./config.sh + +?X: +?X: Turn silent mode off from now on (we want a verbose file extraction). +?X: This means we have to explicitely test for '$silent' from now on to +?X: strip off any verbose messages. +?X: +echo " " +exec 1>&4 +pwd=`pwd` +. ./UU/extract +cd "$pwd" + +if $contains '^depend:' [Mm]akefile >/dev/null 2>&1; then + dflt=y + case "$silent" in + true) ;; + *) + $cat <<EOM + +Now you need to generate make dependencies by running "$make depend". +You might prefer to run it in background: "$make depend > makedepend.out &" +It can take a while, so you might not want to run it right now. + +EOM + ;; + esac + rp="Run $make depend now?" + . UU/myread + case "$ans" in + y*) + $make depend && echo "Now you must run '$make'." + ;; + *) + echo "You must run '$make depend' then '$make'." + ;; + esac +elif test -f [Mm]akefile; then + echo " " + echo "Now you must run a $make." +else + echo "Configure done." +fi + +if $test -f Policy.sh; then + $cat <<EOM + +If you compile $package on a different machine or from a different object +directory, copy the Policy.sh file from this object directory to the +new one before you run Configure -- this will help you with most of +the policy defaults. + +EOM +fi +if $test -f UU/config.msg; then + echo "Hmm. I also noted the following information while running:" + echo " " + $cat UU/config.msg >&4 +fi +?X: +?X: kit*isdone files are left over by shell archives built using the makedist +?X: script which comes from dist, while ark*isdone files are left over by +?X: the cshar archive maker. +?X: +$rm -f kit*isdone ark*isdone +$rm -rf UU + +: End of Configure + diff --git a/mcon/U/Getfile.U b/mcon/U/Getfile.U new file mode 100644 index 0000000..fe917ad --- /dev/null +++ b/mcon/U/Getfile.U @@ -0,0 +1,339 @@ +?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: Getfile.U,v $ +?RCS: Revision 3.0.1.7 1997/02/28 15:01:06 ram +?RCS: patch61: getfile script now begins with "startsh" +?RCS: +?RCS: Revision 3.0.1.6 1995/02/15 14:11:00 ram +?RCS: patch51: was not working if ~'s allowed with d_portable on (WED) +?RCS: +?RCS: Revision 3.0.1.5 1995/01/11 15:11:25 ram +?RCS: patch45: added support for escaping answers to skip various checks +?RCS: patch45: modified message issued after file expansion +?RCS: +?RCS: Revision 3.0.1.4 1994/10/29 15:53:19 ram +?RCS: patch36: added ?F: line for metalint file checking +?RCS: +?RCS: Revision 3.0.1.3 1994/05/06 14:23:36 ram +?RCS: patch23: getfile could be confused by file name in "locate" requests +?RCS: patch23: new 'p' directive to assume file is in people's path (WED) +?RCS: +?RCS: Revision 3.0.1.2 1994/01/24 14:01:31 ram +?RCS: patch16: added metalint hint on changed 'ans' variable +?RCS: +?RCS: Revision 3.0.1.1 1993/09/13 15:46:27 ram +?RCS: patch10: minor format problems and misspellings fixed +?RCS: patch10: now performs from package dir and not from UU subdir +?RCS: +?RCS: Revision 3.0 1993/08/18 12:04:56 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?X: +?X: This unit produces a bit of shell code that must be dotted in in order +?X: to get a file name and make some sanity checks. Optionally, a ~name +?X: expansion is performed. +?X: +?X: To use this unit, $rp and $dflt must hold the question and the +?X: default answer, which will be passed as-is to the myread script. +?X: The $fn variable must hold the file type (f or d, for file/directory). +?X: If $gfpth is set to a list of space-separated list of directories, +?X: those are prefixes for the filename. Unless $gfpthkeep is set to 'y', +?X: gfpth is cleared on return from Getfile. +?X: +?X: If is is followed by a ~, then ~name substitution will occur. Upon return, +?X: $ans is set with the filename value. If a / is specified, then only a full +?X: path name is accepted (but ~ substitution occurs before, if needed). The +?X: expanded path name is returned in that case. +?X: +?X: If a + is specified, the existence checks are skipped. This usually means +?X: the file/directory is under the full control of the program. +?X: +?X: If the 'n' (none) type is used, then the user may answer none. +?X: The 'e' (expand) switch may be used to bypass d_portable, expanding ~name. +?X: +?X: If the 'l' (locate) type is used, then it must end with a ':' and then a +?X: file name. If the answer is a directory, the file name will be appended +?X: before testing for file existence. This is useful in locate-style +?X: questions like "where is the active file?". In that case, one should +?X: use: +?X: +?X: dflt='~news/lib' +?X: fn='l~:active' +?X: rp='Where is the active file?' +?X: . ./getfile +?X: active="$ans" +?X: +?X: If the 'p' (path) letter is specified along with 'l', then an answer +?X: without a leading / will be expected to be found in everyone's path. +?X: +?X: It is also possible to include a comma-separated list of items within +?X: parentheses to specify which items should be accepted as-is with no +?X: further checks. This is useful when for instance a full path is expected +?X: but the user may escape out via "magical" answers. +?X: +?X: If the answer to the question is 'none', then the existence checks are +?X: skipped and the empty string is returned. +?X: +?MAKE:Getfile: d_portable contains startsh Myread Filexp tr trnl +?MAKE: -pick add $@ %< +?V:ansexp:fn gfpth gfpthkeep +?F:./getfile +?T:tilde type what orig_rp orig_dflt fullpath already redo skip none_ok \ + value exp_file nopath_ok loc_file fp pf dir direxp +?LINT:change ans +?LINT:change gfpth +: now set up to get a file name +cat <<EOS >getfile +$startsh +EOS +cat <<'EOSC' >>getfile +tilde='' +fullpath='' +already='' +skip='' +none_ok='' +exp_file='' +nopath_ok='' +orig_rp="$rp" +orig_dflt="$dflt" +case "$gfpth" in +'') gfpth='.' ;; +esac + +?X: Begin by stripping out any (...) grouping. +case "$fn" in +*\(*) + : getfile will accept an answer from the comma-separated list + : enclosed in parentheses even if it does not meet other criteria. + expr "$fn" : '.*(\(.*\)).*' | $tr ',' $trnl >getfile.ok + fn=`echo $fn | sed 's/(.*)//'` + ;; +esac + +?X: Catch up 'locate' requests early, so that we may strip the file name +?X: before looking at the one-letter commands, in case the file name contains +?X: one of them. Reported by Wayne Davison <davison@borland.com>. +case "$fn" in +*:*) + loc_file=`expr $fn : '.*:\(.*\)'` + fn=`expr $fn : '\(.*\):.*'` + ;; +esac + +case "$fn" in +*~*) tilde=true;; +esac +case "$fn" in +*/*) fullpath=true;; +esac +case "$fn" in +*+*) skip=true;; +esac +case "$fn" in +*n*) none_ok=true;; +esac +case "$fn" in +*e*) exp_file=true;; +esac +case "$fn" in +*p*) nopath_ok=true;; +esac + +case "$fn" in +*f*) type='File';; +*d*) type='Directory';; +*l*) type='Locate';; +esac + +what="$type" +case "$what" in +Locate) what='File';; +esac + +case "$exp_file" in +'') + case "$d_portable" in + "$define") ;; + *) exp_file=true;; + esac + ;; +esac + +cd .. +while test "$type"; do + redo='' + rp="$orig_rp" + dflt="$orig_dflt" + case "$tilde" in + true) rp="$rp (~name ok)";; + esac + . UU/myread +?X: check for allowed escape sequence which may be accepted verbatim. + if test -f UU/getfile.ok && \ + $contains "^$ans\$" UU/getfile.ok >/dev/null 2>&1 + then + value="$ans" + ansexp="$ans" + break + fi + case "$ans" in + none) + value='' + ansexp='' + case "$none_ok" in + true) type='';; + esac + ;; + *) + case "$tilde" in + '') value="$ans" + ansexp="$ans";; + *) + value=`UU/filexp $ans` + case $? in + 0) + if test "$ans" != "$value"; then + echo "(That expands to $value on this system.)" + fi + ;; + *) value="$ans";; + esac + ansexp="$value" + case "$exp_file" in + '') value="$ans";; + esac + ;; + esac + case "$fullpath" in + true) +?X: Perform all the checks on ansexp and not value since when d_portable +?X: is defined, the original un-expanded answer which is stored in value +?X: would lead to "non-existent" error messages whilst ansexp has been +?X: properly expanded. -- Fixed by Jan.Djarv@sa.erisoft.se (Jan Djarv) +?X: Always expand ~user if '/' was requested + case "$ansexp" in + /*) value="$ansexp" ;; +?X: Allow for c:/some/path + [a-zA-Z]:/*) value="$ansexp" ;; + *) + redo=true + case "$already" in + true) + echo "I shall only accept a full path name, as in /bin/ls." >&4 + echo "Use a ! shell escape if you wish to check pathnames." >&4 + ;; + *) + echo "Please give a full path name, starting with slash." >&4 + case "$tilde" in + true) + echo "Note that using ~name is ok provided it expands well." >&4 + already=true + ;; + esac + esac + ;; + esac + ;; + esac + case "$redo" in + '') + case "$type" in + File) + for fp in $gfpth; do + if test "X$fp" = X.; then + pf="$ansexp" + else + pf="$fp/$ansexp" + fi + if test -f "$pf"; then + type='' + elif test -r "$pf" || (test -h "$pf") >/dev/null 2>&1 + then + echo "($value is not a plain file, but that's ok.)" + type='' + fi + if test X"$type" = X; then + value="$pf" + break + fi + done + ;; + Directory) + for fp in $gfpth; do + if test "X$fp" = X.; then + dir="$ans" + direxp="$ansexp" + else + dir="$fp/$ansexp" + direxp="$fp/$ansexp" + fi + if test -d "$direxp"; then + type='' + value="$dir" + break + fi + done + ;; + Locate) + if test -d "$ansexp"; then + echo "(Looking for $loc_file in directory $value.)" + value="$value/$loc_file" + ansexp="$ansexp/$loc_file" + fi + if test -f "$ansexp"; then + type='' + fi + case "$nopath_ok" in + true) case "$value" in + */*) ;; + *) echo "Assuming $value will be in people's path." + type='' + ;; + esac + ;; + esac + ;; + esac + + case "$skip" in + true) type=''; + esac + + case "$type" in + '') ;; + *) + if test "$fastread" = yes; then + dflt=y + else + dflt=n + fi + rp="$what $value doesn't exist. Use that name anyway?" + . UU/myread + dflt='' + case "$ans" in + y*) type='';; + *) echo " ";; + esac + ;; + esac + ;; + esac + ;; + esac +done +cd UU +ans="$value" +rp="$orig_rp" +dflt="$orig_dflt" +rm -f getfile.ok +test "X$gfpthkeep" != Xy && gfpth="" +EOSC + diff --git a/mcon/U/Guess.U b/mcon/U/Guess.U new file mode 100644 index 0000000..3459325 --- /dev/null +++ b/mcon/U/Guess.U @@ -0,0 +1,228 @@ +?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: 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 explicitely 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: 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:. +?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:. +?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:. +?F:./bsd ./usg ./v7 ./osf1 ./eunice ./xenix ./venix ./dos ./os2 ./gnu ./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 +d_bsd="$undef" +d_linux="$undef" +d_dos="$undef" +d_os2="$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 +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 + case "X${MACHTYPE:-nonesuchmach}" in + cygwin) echo "hah!... you're running under Cygwin!";; + *) echo "got it... you're running DOS with DJGPP!";; + esac + 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 +$eunicefix bsd usg v7 osf1 eunice xenix venix dos os2 gnu linux +$rm -f foo + diff --git a/mcon/U/Head.U b/mcon/U/Head.U new file mode 100644 index 0000000..1ee0e6b --- /dev/null +++ b/mcon/U/Head.U @@ -0,0 +1,282 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: 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 at +# http://sourceforge.net/projects/dist/ +?X: +?X: NOTA BENE: +?X: If you develop you own version of metaconfig based on this work, +?X: you have to add some comments telling that the script was generated +?X: by your version, not mine: It credits your work. +?X: + +# $Id$ +# +# Generated on <DATE> [metaconfig <VERSION> PL<PATCHLEVEL>] + +cat >c1$$ <<EOF +ARGGGHHHH!!!!! + +SCO csh still thinks true is false. Write to SCO today and tell them that next +year Configure ought to "rm /bin/csh" unless they fix their blasted shell. :-) + +(Actually, Configure ought to just patch csh in place. Hmm. Hmmmmm. All +we'd have to do is go in and swap the && and || tokens, wherever they are.) + +[End of diatribe. We now return you to your regularly scheduled programming...] +EOF +cat >c2$$ <<EOF + +OOPS! You naughty creature! You didn't run Configure with sh! +I will attempt to remedy the situation by running sh for you... +EOF + +true || cat c1$$ c2$$ +true || exec sh $0 $argv:q + +(exit $?0) || cat c2$$ +(exit $?0) || exec sh $0 $argv:q +rm -f c1$$ c2$$ + +: compute my invocation name +me=$0 +case "$0" in +*/*) + me=`echo $0 | sed -e 's!.*/\(.*\)!\1!' 2>/dev/null` + test "$me" || me=$0 + ;; +esac + +?X: +?X: To be able to run under OS/2, we must detect that early enough to use +?X: the proper path separator, stored in $p_. It is : on UNIX and ; on +?X: DOSish systems such as OS/2. +?X: +: Proper separator for the PATH environment variable +p_=: +: On OS/2 this directory should exist if this is not floppy only system ":-]" +if test -d c:/. ; then + if test -n "$OS2_SHELL"; then + p_=\; + PATH=`cmd /c "echo %PATH%" | tr '\\\\' / ` +?X: That's a bug in ksh5.22 + OS2_SHELL=`cmd /c "echo %OS2_SHELL%" | tr '\\\\' / | tr '[A-Z]' '[a-z]'` + elif test -n "$DJGPP"; then + case "X${MACHTYPE:-nonesuchmach}" in + *cygwin) ;; + *) 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 compromize 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 explicitely, yet are using it. +case "$inksh/$needksh-$avoidksh-" in +true/--) + cat <<EOM +(I see you are using the Korn shell. Some ksh's blow up on $me, +mainly on older exotic systems. If yours does, try the Bourne shell instead.) +EOM + ;; +esac +case "$changesh" in +true) + export newsh + echo "(Feeding myself to $newsh $reason.)" +?X: Make sure they didn't say sh <Configure by checking whether $0 ends +?X: with Configure or not. If they did say sh <../../Configure, then too +?X: bad for them anyway, since we lost that path indication... +?X: Otherwise, execing $0 ensures we keep the full remote source dir +?X: indication for src.U. + case "$0" in + Configure|*/Configure) exec $newsh $0 "$@";; + *) exec $newsh Configure "$@";; + esac + ;; +esac + +?X: Unset CDPATH to avoid surprises when using cd under some shells +?X: Can't unset it because that's not portable to very old shells. +?X: Can't set it to '' because then bash 2.02 won't do "cd UU" --AD 6/98. +?X: Don't want to set it to '.' because then ksh prints out the +?X: name of the directory every time you cd to it. --AD 6/98 +?X: In order to inflict the least harm, change it only if it's set. +: if needed, set CDPATH to a harmless value that is not chatty +case "$CDPATH" in +'') ;; +*) case "$SHELL" in + *bash*) CDPATH='.' ;; + *) CDPATH='' ;; + esac + ;; +esac + +: Configure runs within the UU subdirectory +test -d UU || mkdir UU +?X: Use ./* to avoid any confirmation prompts from enhanced shells -- WED +cd UU && rm -f ./* + diff --git a/mcon/U/Inhdr.U b/mcon/U/Inhdr.U new file mode 100644 index 0000000..e06282f --- /dev/null +++ b/mcon/U/Inhdr.U @@ -0,0 +1,77 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: Inhdr.U,v $ +?RCS: Revision 3.0.1.2 1995/05/12 12:01:31 ram +?RCS: patch54: deleted tabs that caused some /bin/sh to core dump (ADO) +?RCS: +?RCS: Revision 3.0.1.1 1994/10/29 15:55:01 ram +?RCS: patch36: call ./whoa explicitely instead of relying on PATH +?RCS: +?RCS: Revision 3.0 1993/08/18 12:05:01 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?X: +?X: This unit checks wether a set of header files exists or not. +?X: If the first header is not found, the function tries to locate +?X: the next header, and so on, until one is found or there is no +?X: more header in the list. +?X: +?X: To use it, say: +?X: set header i_header [ header2 i_header2 ... ] +?X: eval $inhdr +?X: +?MAKE:Inhdr: test Findhdr Whoa +?MAKE: -pick add $@ %< +?LINT:define inhdr +?V:inhdr +?S:inhdr: +?S: This shell variable is used internally by Configure to check +?S: wether a set of headers exist or not. A typical use is: +?S: set header i_header [ header2 i_header2 ... ] +?S: eval $inhdr +?S: That will print a message, saying wether header was found or +?S: not and set i_header* accordingly. If the first header is not +?S: found, we try the next one, until the list is empty or one is found. +?S:. +?T:xxx xxf var td xxnf tu yyy instead was cont +: define an alternate in-header-list? function +inhdr='echo " "; td=$define; tu=$undef; yyy=$@; +cont=true; xxf="echo \"<\$1> found.\" >&4"; +case $# in 2) xxnf="echo \"<\$1> NOT found.\" >&4";; +*) xxnf="echo \"<\$1> NOT found, ...\" >&4";; +esac; +case $# in 4) instead=instead;; *) instead="at last";; esac; +while $test "$cont"; do + xxx=`./findhdr $1` + var=$2; eval "was=\$$2"; + if $test "$xxx" && $test -r "$xxx"; + then eval $xxf; +?X: Next line shifted left 1 tabstop to avoid sh core dump on MachTen 2.1.1. + eval "case \"\$$var\" in $undef) . ./whoa; esac"; eval "$var=\$td"; + cont=""; + else eval $xxnf; +?X: Likewise, the next line has been shifted left 1 tabstop -- ADO, 08/03/95 + eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu"; fi; + set $yyy; shift; shift; yyy=$@; + case $# in 0) cont="";; + 2) xxf="echo \"but I found <\$1> $instead.\" >&4"; + xxnf="echo \"and I did not find <\$1> either.\" >&4";; + *) xxf="echo \"but I found <\$1\> instead.\" >&4"; + xxnf="echo \"there is no <\$1>, ...\" >&4";; + esac; +done; +?X: Remaining values are set to 'undef' +while $test "$yyy"; +do set $yyy; var=$2; eval "was=\$$2"; + eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu"; + set $yyy; shift; shift; yyy=$@; +done' + diff --git a/mcon/U/Init.U b/mcon/U/Init.U new file mode 100644 index 0000000..892579d --- /dev/null +++ b/mcon/U/Init.U @@ -0,0 +1,81 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: Init.U,v $ +?RCS: Revision 3.0.1.1 1994/10/31 09:45:59 ram +?RCS: patch44: removed Options from MAKE to prevent Init overrides +?RCS: patch44: option processing now done after Myinit thanks to new Begin.U +?RCS: patch44: moved "Beginning of configuration questions" to Begin.U +?RCS: patch44: moved signal trapping instruction to Begin.U as well +?RCS: +?RCS: Revision 3.0 1993/08/18 12:05:02 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?X: +?X: This file initializes certain default variables used by Configure. They +?X: may be overridden or added to by definitions in Myinit.U. +?X: +?MAKE:Init eunicefix _exe: Null +?MAKE: -pick add $@ %< +?MAKE: -pick weed $@ ./Init +?S:eunicefix: +?S: When running under Eunice this variable contains a command which will +?S: convert a shell script to the proper form of text file for it to be +?S: executable by the shell. On other systems it is a no-op. +?S:. +?S:_exe (exe_ext): +?S: This variable defines the extension used for executable files. +?S: For unix it is empty. Other possible values include '.exe'. +?S: DJGPP, Cygwin and OS/2 use '.exe'. Stratus VOS uses '.pm'. +?S: On operating systems which do not require a specific extension +?S: for executable files, this variable is empty. +?S:. +?V:define undef smallmach:rmlist +?X: +?X: Throughout the units, one may make use of $define and $undef to reference +?X: a defined symbol or an undefined one. There is no need to add them in +?X: the dependency line since this unit makes them visible via ?V:, and +?X: everyone inherits from those symbols since by convention Init.U is the +?X: root dependency. +?X: +?T: DJGPP +: Initialize wide constants +define='define' +undef='undef' +smallmach='pdp11 i8086 z8000 i80286 iAPX286' +rmlist='' + +: We must find out about Eunice early +eunicefix=':' +if test -f /etc/unixtovms; then + eunicefix=/etc/unixtovms +fi +if test -f /etc/unixtovms.exe; then + eunicefix=/etc/unixtovms.exe +fi + +: Set executable suffix now -- needed before hints available +if test -f "/libs/version.library"; then + : Amiga OS + _exe="" +elif test -f "/system/gnu_library/bin/ar.pm"; then + : Stratus VOS + _exe=".pm" +elif test -n "$DJGPP"; then + : DOS DJGPP + _exe=".exe" +elif test -d c:/. ; then + : OS/2 or cygwin + _exe=".exe" +else + : All other UNIX systems + _exe="" +fi + diff --git a/mcon/U/Inlibc.U b/mcon/U/Inlibc.U new file mode 100644 index 0000000..64fd37a --- /dev/null +++ b/mcon/U/Inlibc.U @@ -0,0 +1,64 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: Inlibc.U,v $ +?RCS: Revision 3.0.1.1 1994/10/29 15:55:08 ram +?RCS: patch36: call ./whoa explicitely instead of relying on PATH +?RCS: +?RCS: Revision 3.0 1993/08/18 12:05:03 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?X: +?X: This unit checks for the definition of a given function. +?X: +?X: To use it, say: +?X: set function d_func +?X: eval $inlibc +?X: +?MAKE:Inlibc: Csym Whoa Oldconfig +?MAKE: -pick add $@ %< +?LINT:define inlibc +?V:inlibc +?S:inlibc: +?S: This shell variable is used internally by Configure to check +?S: wether a given function is defined or not. A typical use is: +?S: set function d_func +?S: eval $inlibc +?S: That will print a message, saying wether function was found or +?S: not and set d_func accordingly. +?S:. +?T:was tx sym tres td tu var +: define an is-in-libc? function +inlibc='echo " "; td=$define; tu=$undef; +sym=$1; var=$2; eval "was=\$$2"; +tx=yes; +case "$reuseval$was" in +true) ;; +true*) tx=no;; +esac; +case "$tx" in +yes) + set $sym tres -f; + eval $csym; + case "$tres" in + true) + echo "$sym() found." >&4; + case "$was" in $undef) . ./whoa; esac; eval "$var=\$td";; + *) + echo "$sym() NOT found." >&4; + case "$was" in $define) . ./whoa; esac; eval "$var=\$tu";; + esac;; +*) + case "$was" in + $define) echo "$sym() found." >&4;; + *) echo "$sym() NOT found." >&4;; + esac;; +esac' + diff --git a/mcon/U/Instruct.U b/mcon/U/Instruct.U new file mode 100644 index 0000000..deccaf8 --- /dev/null +++ b/mcon/U/Instruct.U @@ -0,0 +1,116 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: Instruct.U,v $ +?RCS: Revision 3.0.1.3 1997/02/28 15:02:55 ram +?RCS: patch61: logname / whoami sequence rewritten to use case +?RCS: +?RCS: Revision 3.0.1.2 1995/02/15 14:11:34 ram +?RCS: patch51: author name now appears at the end of the paragraph (WED) +?RCS: +?RCS: Revision 3.0.1.1 1995/01/11 15:12:05 ram +?RCS: patch45: now documents the & escape to turn -d on at the read prompt +?RCS: +?RCS: Revision 3.0 1993/08/18 12:05:04 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?X: +?X: This unit spew out the directions that we want everyone to read. I try to +?X: keep the first "pagefull" much less than a page since they don't know it +?X: isn't going to go shooting off the top of the screen, and we don't want +?X: to panic them yet. +?X: +?MAKE:Instruct: Myread Configdir contains +?MAKE: -pick wipe $@ %< +?T:user needman firsttime +: general instructions +needman=true +firsttime=true +user=`(logname) 2>/dev/null` +case "$user" in +'') user=`whoami 2>&1`;; +esac +if $contains "^$user\$" ../.config/instruct >/dev/null 2>&1; then + firsttime=false + echo " " + rp='Would you like to see the instructions?' + dflt=n + . ./myread + case "$ans" in + [yY]*) ;; + *) needman=false;; + esac +fi +if $needman; then + cat <<EOH + +This installation shell script will examine your system and ask you questions +to determine how the <PACKAGENAME> package should be installed. If you get +stuck on a question, you may use a ! shell escape to start a subshell or +execute a command. Many of the questions will have default answers in square +brackets; typing carriage return will give you the default. + +On some of the questions which ask for file or directory names you are allowed +to use the ~name construct to specify the login directory belonging to "name", +even if you don't have a shell which knows about that. Questions where this is +allowed will be marked "(~name ok)". + +EOH + rp='' + dflt='Type carriage return to continue' + . ./myread + cat <<'EOH' + +The prompter used in this script allows you to use shell variables and +backticks in your answers. You may use $1, $2, etc... to refer to the words +in the default answer, as if the default line was a set of arguments given to a +script shell. This means you may also use $* to repeat the whole default line, +so you do not have to re-type everything to add something to the default. + +Everytime there is a substitution, you will have to confirm. If there is an +error (e.g. an unmatched backtick), the default answer will remain unchanged +and you will be prompted again. + +If you are in a hurry, you may run 'Configure -d'. This will bypass nearly all +the questions and use the computed defaults (or the previous answers if there +was already a config.sh file). Type 'Configure -h' for a list of options. +You may also start interactively and then answer '& -d' at any prompt to turn +on the non-interactive behaviour for the remainder of the execution. + +EOH + . ./myread + cat <<EOH + +Much effort has been expended to ensure that this shell script will run on any +Unix system. If despite that it blows up on yours, your best bet is to edit +Configure and run it again. If you can't run Configure for some reason, +you'll have to generate a config.sh file by hand. Whatever problems you +have, let me (<MAINTLOC>) know how I blew it. + +This installation script affects things in two ways: + +1) it may do direct variable substitutions on some of the files included + in this kit. +2) it builds a config.h file for inclusion in C programs. You may edit + any of these files as the need arises after running this script. + +If you make a mistake on a question, there is no easy way to back up to it +currently. The easiest thing to do is to edit config.sh and rerun all the SH +files. Configure will offer to let you do this before it runs the SH files. + +EOH +?X: In case they played with the prompter... + dflt='Type carriage return to continue' + . ./myread + case "$firsttime" in + true) echo $user >>../.config/instruct;; + esac +fi + diff --git a/mcon/U/Loc.U b/mcon/U/Loc.U new file mode 100644 index 0000000..bf8c056 --- /dev/null +++ b/mcon/U/Loc.U @@ -0,0 +1,381 @@ +?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: 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 Mcc awk ar bash bison byacc cat chgrp chmod chown \ + comm compress cp cpio cpp csh date echo egrep emacs expr find flex \ + gmake gzip grep inews ksh less line lint ln lp lpr ls mail mailx \ + make mkdir more mv nm nroff perl pg pmake pr rm rmail sed sendmail \ + shar sleep smail sort submit tail tar tbl tee test touch tr troff \ + uname uniq uuname vi zcat zip: eunicefix n c startsh Instruct Warn +?MAKE: -pick weed $@ %< +?LINT: describe Mcc awk ar bash bison byacc cat chgrp chmod chown \ + comm compress cp cpio cpp csh date echo egrep emacs expr find flex \ + gmake gzip grep inews ksh less line lint ln lp lpr ls mail mailx \ + make mkdir more mv nm nroff perl pg pmake pr rm rmail sed sendmail \ + shar sleep smail sort submit tail tar tbl tee test touch tr troff \ + uname uniq uuname vi zcat zip +?V::pth loclist trylist +?F:./loc +?T:thisthing thing xxx dir file say DJGPP +?T:_test _grep _cp _gmake _egrep _ln _make dflt +?LINT: change PATH +: find out where common programs are +echo " " +echo "Locating common programs..." >&4 +cat <<EOSC >loc +$startsh +case \$# in +0) exit 1;; +esac +thing=\$1 +shift +dflt=\$1 +shift +for dir in \$*; do + case "\$thing" in + .) + if test -d \$dir/\$thing; then + echo \$dir + exit 0 + fi + ;; + *) +?X: Be careful in case thing includes wildcards that might expand to multiple +?X: files. Choose the last one. This happens when searching for shared +?X: libraries with version numbers. How to choose which one we want is +?X: probably an insoluble problem, in general. +?X: Some folks leave things like libc.so.orig around w/o read +?X: permission. A -r test would handle that, but since ./loc is +?X: also used to find executables (which are installed w/o read +?X: permission on SCO ODT 3.0, we can't include the -r test. + for thisthing in \$dir/\$thing; do + : just loop through to pick last item + done + if test -f \$thisthing; then + echo \$thisthing + exit 0 + elif test -f \$thisthing$_exe; then + echo \$thisthing + exit 0 + elif test -f \$dir/\$thing.exe; then + if test -n "$DJGPP"; then + echo \$dir/\$thing.exe + else + : on Eunice apparently + echo \$dir/\$thing + fi + exit 0 + fi + ;; + esac +done +echo \$dflt +exit 1 +EOSC +chmod +x loc +$eunicefix loc +loclist=" +?awk:awk +?cat:cat +?chgrp:chgrp +?chmod:chmod +?chown:chown +?comm:comm +?cp:cp +?echo:echo +?expr:expr +?find:find +?grep:grep +?ls:ls +?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 +?gzip:gzip +?inews:inews +?ksh:ksh +?less:less +?line:line +?lint:lint +?ln:ln +?lp:lp +?lpr:lpr +?mail:mail +?mailx:mailx +?make:make +?more:more +?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 +?zcat:zcat +?zip:zip +" +?LINT: set awk ar bash bison byacc cat chgrp chmod chown \ + comm compress cp cpio cpp csh date echo emacs expr find flex \ + gmake gzip grep inews ksh less line lint lp lpr ls mail mailx \ + mkdir more mv nm nroff perl pg pmake pr rm rmail sed sendmail \ + shar sleep smail sort submit tail tar tbl tee touch tr troff \ + uname uniq uuname vi zcat zip +pth=`echo $PATH | sed -e "s/$p_/ /g"` +pth="$pth /lib /usr/lib" +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." + xxx=`./loc $file $file $pth` + fi + ;; + '') xxx=`./loc $file $file $pth`;; + *) xxx=`./loc $xxx $xxx $pth`;; + esac + eval $file=$xxx$_exe + 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 setting!" >&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." + xxx=`./loc $file $file $pth` + fi + ;; + '') xxx=`./loc $file $file $pth`;; + *) xxx=`./loc $xxx $xxx $pth`;; + esac + eval $file=$xxx$_exe + 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) + echo "Substituting grep for egrep." + egrep=$grep + _egrep=$_grep + ;; +esac +@if ln +case "$ln" in +ln) + echo "Substituting cp for ln." + ln=$cp + _ln=$_cp + ;; +esac +@end +@if make || gmake +case "$make" in +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) ;; +*) # We can't have osname yet. + if test -f "/system/gnu_library/bin/ar.pm"; then # Stratus VOS + # Assume that gmake, if found, is definitely GNU make + # and prefer it over the system make. + echo "Substituting gmake for make." + make=$gmake + _make=$_gmake + fi + ;; +esac +@end +case "$test" in +test) + echo "Hopefully test is built into your sh." + ;; +*) + 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 "Hopefully echo is built into your sh." + ;; +?X: For those rare cases where we don't need $echo... +'') ;; +*) + echo " " +echo "Checking compatibility between $echo and builtin echo (if any)..." >&4 + $echo $n "hi there$c" >foo1 + echo $n "hi there$c" >foo2 + if cmp foo1 foo2 >/dev/null 2>&1; then + echo "They are compatible. In fact, they may be identical." + else + case "$n" in + '-n') n='' c='\c';; + *) n='-n' c='';; + esac + cat <<FOO +They are not compatible! You are probably running ksh on a non-USG system. +I'll have to use $echo instead of the builtin, since Bourne shell doesn't +have echo built in and we may have to run some Bourne shell scripts. That +means I'll have to use '$n$c' to suppress newlines now. Life is ridiculous. + +FOO + $echo $n "The star should be here-->$c" + $echo "*" + fi + $rm -f foo1 foo2 + ;; +esac + diff --git a/mcon/U/Loc_sed.U b/mcon/U/Loc_sed.U new file mode 100644 index 0000000..f61a876 --- /dev/null +++ b/mcon/U/Loc_sed.U @@ -0,0 +1,33 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1996, Andy Dougherty +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: +?X: This is used in perl.c. +?MAKE:full_sed: sed +?MAKE: -pick add $@ %< +?S:full_sed: +?S: This variable contains the full pathname to 'sed', whether or +?S: not the user has specified 'portability'. This is only used +?S: in the compiled C program, and we assume that all systems which +?S: can share this executable will have the same full pathname to +?S: 'sed.' +?S:. +?X: Yes, I know about the C symbol PORTABLE, but I think sed +?X: is unlikely to move, and I'm too lazy to add all the +?X: #ifdef PORTABLE sections to the perl source. +?X: +?C:LOC_SED: +?C: This symbol holds the complete pathname to the sed program. +?C:. +?H:#define LOC_SED "$full_sed" /**/ +?H:. +: Store the full pathname to the sed program for use in the C program +full_sed=$sed + diff --git a/mcon/U/Magic_h.U b/mcon/U/Magic_h.U new file mode 100644 index 0000000..8e2556c --- /dev/null +++ b/mcon/U/Magic_h.U @@ -0,0 +1,43 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: Magic_h.U,v $ +?RCS: Revision 3.0.1.2 1993/11/10 17:32:58 ram +?RCS: patch14: forgot to mention Id in the dependencies +?RCS: +?RCS: Revision 3.0.1.1 1993/10/16 13:46:59 ram +?RCS: patch12: created for ?M: lines support (magic symbols) +?RCS: +?X: +?X: This file ends up producing the confmagic.h include, which is used to +?X: automagically remap some C symbols via cpp redefinitions. +?X: +?X: The file ./Magic_h below contains all the ?M: lines extracted out of all +?X: the units. Metaconfig itself adds the final #endif statement. +?X: Note that this code isn't included into Configure, but must be shipped with. +?X: +?MAKE:Magic_h: Id Config_h +?MAKE: -pick cm_h_weed $@ %< +?MAKE: -pick cm_h_weed $@ ./Magic_h +?LINT:nocomment +/* + * This file was produced by running metaconfig and is intended to be included + * after config.h and after all the other needed includes have been dealt with. + * + * This file may be empty, and should not be edited. Rerun metaconfig instead. + * If you wish to get rid of this magic, remove this file and rerun metaconfig + * without the -M option. + * + * $Id$ + */ + +#ifndef _confmagic_h_ +#define _confmagic_h_ + diff --git a/mcon/U/MailAuthor.U b/mcon/U/MailAuthor.U new file mode 100644 index 0000000..61c226a --- /dev/null +++ b/mcon/U/MailAuthor.U @@ -0,0 +1,192 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: Original Author: Graham Stoney <greyham@research.canon.oz.au> +?RCS: +?RCS: $Log: MailAuthor.U,v $ +?RCS: Revision 3.0.1.5 1997/02/28 15:04:41 ram +?RCS: patch61: added support for src.U +?RCS: +?RCS: Revision 3.0.1.4 1994/08/29 16:05:09 ram +?RCS: patch32: avoid message sending if they said no previously +?RCS: +?RCS: Revision 3.0.1.3 1993/10/16 13:47:30 ram +?RCS: patch12: now makes sure user-specified address is in Internet format +?RCS: +?RCS: Revision 3.0.1.2 1993/09/13 15:48:49 ram +?RCS: patch10: reverted to original intent by the Author himself +?RCS: +?RCS: Revision 3.0.1.1 1993/08/27 14:38:38 ram +?RCS: patch7: now prompts user for its e-mail address +?RCS: patch7: no longer silent when mail has been sent +?RCS: +?RCS: Revision 3.0 1993/08/18 12:05:06 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?RCS: +?X: +?X: This unit asks the user to please send a message to the author. +?X: To force inclusion of this unit, you must add it's name to the +?X: dependancies on the MAKE line in your private copy of End.U. +?X: This allows a smart mailagent program to automatically let users know +?X: when their package is out of date, and to allow users to be notified of +?X: any future patches. +?X: +?MAKE:MailAuthor mailpatches notifypatches usermail: test cat mailer \ + package Myread patchlevel baserev rm rsrc Oldconfig Configdir +?MAKE: -pick wipe $@ %< +?S:mailpatches: +?S: Indicates whether the user would like future patches to be mailed +?S: directly to them. +?S:. +?S:notifypatches: +?S: Indicates whether the user would like notification of future patches +?S: mailed to them. +?S:. +?S:usermail: +?S: This variable is used internally by Configure to keep track of the +?S: user e-mail address, where notifications or patches should be sent. +?S: A '-' value means the return address will be extracted by parsing +?S: the mail headers. +?S:. +?T:opt mailpatches notifypatches atsh status +: notify author that his package is used +if $test -f ../.config/mailauthor && + cmp $rsrc/patchlevel.h ../.config/mailauthor >/dev/null 2>&1 +then + status="say that you're using $package"; + case "$mailpatches" in + true) status='have patches mailed to you as they are issued';; + esac + case "$notifypatches" in + true) status='be notified when new patches are issued';; + esac + $cat <<EOM + +You have already sent the author of $package (<MAINTLOC>) mail to +$status. If you wish, you may modify +your previous request by sending a new mail with different options. + +EOM + rp='Should I send a status update to <MAINTLOC>?' + dflt=n +else + $cat <<EOM + +If you are able to send mail to the Internet, the author of $package would +really appreciate you letting me send off a quick note, just to say that you've +tried it. The author is more likely to spend time maintaining $package if it's +known that many people are using it, and you can even ask to get sent new +patches automagically this way if you wish. To protect your privacy, all I'll +say in the mail is the version of $package that you're using. + +EOM + rp='Should I send mail to <MAINTLOC>?' + dflt=y +?X: Ensure default is 'n' if question has been asked already, in case they +?X: run Configure -d next time and answered 'n' the first time. Therefore, +?X: an empty nomail will be created later on even if no mail is sent. + $test -f ../.config/nomail && dflt=n +fi +. ./myread +case "$ans" in +[yY]*) + echo " " + echo "Great! Your cooperation is really appreciated." + $cat <<EOM + +Some braindead sites do not set a proper return address in the From: header of +their outgoing mail, making it impossible to reply to mail they generate. +If your site is broken in this way, write to your system administrator and get +it fixed!!! In the mean time, you can manually specify the Internet e-mail +address by which the author can get back to you, should there be a need to do +so. If manually specified, it should be something like "user@domain.top". +If your mail system generates addresses correctly, specify "none". + +EOM + case "$usermail" in + '-'|'') dflt=none;; + *) dflt="$usermail";; + esac + rp='Manually specify a return address to use:' + . ./myread + case "$ans" in + none|*@*.*) + case "$ans" in + none) usermail='-';; + *) usermail="$ans";; + esac + ;; + *) + echo "(Address does not look like an Internet one -- ignoring it.)" +?X: +?X: If we can't trust their mailer or their return address, it's highly +?X: suggested that they only register and don't ask to get anything from +?X: the author, since it's likely to bounce in null-land -- RAM. +?X: + usermail='-' + mailpatches=false + notifypatches=false + ;; + esac + echo " " + opt='' + rp='Would you like to have new patches automatically mailed to you?' + case "$mailpatches" in + true) dflt=y;; + *) dflt=n;; + esac + . ./myread + case "$ans" in + [yY]*) opt=' mailpatches'; mailpatches=true;; + *) + mailpatches=false + echo " " + rp='Ok, would you like to simply be notified of new patches?' + case "$notifypatches" in + false) dflt=n;; + *) dflt=y;; + esac + . ./myread + echo " " + case "$ans" in + [yY]*) opt=' notifypatches'; notifypatches=true;; + *) + echo "Fine, I'll simply say that you've tried it then." + notifypatches=false + ;; + esac + ;; + esac + echo "Sending mail to <MAINTLOC>..." >&4 +?X: Bizarre hack here. We can't just put @SH in the hereis lines below, because +?X: metaconfig will interpret it as a command, and there's no quoting mechanism. +?X: Do it via a variable instead. + atsh='@SH' + $mailer <MAINTLOC> <<EOM >/dev/null 2>&1 +Subject: Command +Precedence: junk +To: <MAINTLOC> + +$atsh package $usermail $package $baserev $patchlevel$opt +EOM + $rm -f ../.config/mailauthor ../.config/nomail + cp $rsrc/patchlevel.h ../.config/mailauthor + ;; +*) + case "$dflt" in + "y") + echo "Oh well, maybe next time." + cp /dev/null ../.config/nomail + ;; + esac + ;; +esac + diff --git a/mcon/U/MailList.U b/mcon/U/MailList.U new file mode 100644 index 0000000..e9fb039 --- /dev/null +++ b/mcon/U/MailList.U @@ -0,0 +1,82 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: Original Author: Graham Stoney <greyham@research.canon.oz.au> +?RCS: +?RCS: $Log: MailList.U,v $ +?RCS: Revision 3.0.1.1 1994/01/24 14:01:49 ram +?RCS: patch16: created +?RCS: +?RCS: +?X: +?X: This unit offers the user the option of subscribing to the mailing +?X: list. To force inclusion of this unit, you must add it's name to the +?X: dependancies on the MAKE line in your private copy of End.U. +?X: The address of the mailing list server must be set via a "list_request=..." +?X: entry in the .package file. This is usually done by running packinit and +?X: answering the proper questions. +?X: +?MAKE:MailList: cat mailer package Myread cf_name cf_email +?MAKE: -pick wipe $@ %< +?T:list_request list_sub list_unsub list_name +?X: +?X: The cf_name dependency is used through list_sub when the mailing list +?X: manager happens to be listserv, whereas cf_email is used whith majordomo +?X: or when the mailing list request address is scanned by a human. Since +?X: they do not appear within the unit itself, we need a lint hint. +?X: +?LINT:use cf_name cf_email +: offer to join the mailing list +list_request='<$list_request>' +list_sub="<$list_sub>" +list_unsub="<$list_unsub>" +list_name="<$list_name>" +$cat <<EOM + +There is a mailing list for discussion about $package and related issues. +This is the preferred place to ask questions about the program and discuss +modifications and additions with the author and other users. If you are able +to send mail to the Internet, you are encouraged to subscribe. You need only +ever subscribe once, and you can unsubscribe automatically at any time in the +future. If you have already subscribed and you wish to unsubscribe now, you +may do so by answering "unsubscribe". Answer "subscribe" to subscribe to the +list. + +EOM +rp="Subscribe to or unsubscribe from the $list_name mailing list?" +dflt=neither +. ./myread +case "$ans" in +[sS]*) $cat <<EOM + +You will be sent a message from the list server to let you know when your +subscription has been successful and telling you how to submit articles and +how to unsubscribe again when necessary. You may also unsubscribe by running +this script again and asking it to do so for you. + +EOM + echo "Sending mail to subscribe you to the $list_name list..." >&4 + $mailer $list_request <<EOM >/dev/null 2>&1 +Precedence: junk +To: $list_request + +$list_sub +EOM + ;; +[uU]*) echo "Sending mail to unsubscribe you from the $list_name list..." >&4 + $mailer $list_request <<EOM >/dev/null 2>&1 +Precedence: junk +To: $list_request + +$list_unsub +EOM + ;; +esac + diff --git a/mcon/U/Mkdirp.U b/mcon/U/Mkdirp.U new file mode 100644 index 0000000..bad6081 --- /dev/null +++ b/mcon/U/Mkdirp.U @@ -0,0 +1,51 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: Extract.U,v $ +?RCS: Revision 3.0.1.2 1997/02/28 14:58:52 ram +?RCS: patch61: added support for src.U +?RCS: +?RCS: Revision 3.0.1.1 1994/10/29 15:51:46 ram +?RCS: patch36: added ?F: line for metalint file checking +?RCS: +?RCS: Revision 3.0 1993/08/18 12:04:52 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?X: +?X: This unit produces a shell script which can launched to create a +?X: directory path like "mkdir -p" would do. +?X: +?MAKE:Mkdirp: eunicefix startsh +?MAKE: -pick add $@ %< +?F:./mkdirp +?T:name create file +: script used to emulate mkdir -p +cat >mkdirp <<EOS +$startsh +EOS +cat >>mkdirp <<'EOS' +name=$1; +create=""; +while test $name; do + if test ! -d "$name"; then + create="$name $create" + name=`echo $name | sed -e "s|^[^/]*$||"` + name=`echo $name | sed -e "s|\(.*\)/.*|\1|"` + else + name="" + fi +done +for file in $create; do + mkdir $file +done +EOS +chmod +x mkdirp +$eunicefix mkdirp + diff --git a/mcon/U/Mksymlinks.U b/mcon/U/Mksymlinks.U new file mode 100644 index 0000000..92318a8 --- /dev/null +++ b/mcon/U/Mksymlinks.U @@ -0,0 +1,90 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: Copyright (c) 2000, Jarkko Hietaniemi +?RCS: +?X: +?X: This unit allows the duplication of the source tree to the current +?X: directory via symbolic links. This must be requested explicitly +?X: by them issuing a -Dmksymlinks on the command line. +?X: +?MAKE:Mksymlinks: Mkdirp lns issymlink src rsrc pkgsrc +?MAKE: -pick add $@ %< +?F:!UU +?T: dir filename tmppwd filelist +?LINT:extern mksymlinks +@if {test -f ../MANIFEST} +: Duplicate the tree with symbolic links if -Dmksymlinks was supplied +case "$mksymlinks" in +$define|true|[yY]*) + echo " " + case "$src" in + ''|'.') echo "Cannot create symlinks in the original directory." >&4 + exit 1 + ;; + *) case "$lns:$issymlink" in + *"ln"*" -s:"*"test -"?) + echo "Creating the symbolic links..." >&4 + echo "(First creating the subdirectories...)" >&4 + cd .. + awk '{print $1}' $src/MANIFEST | grep / | sed 's:/[^/]*$::' | \ + sort -u | while true + do + read dir + test -z "$dir" && break + ./UU/mkdirp $dir 2>/dev/null + if test -d $dir; then + : ok + else + echo "Failed to create '$dir'. Aborting." >&4 + exit 1 + fi + done + echo "(Now creating the symlinks...)" >&4 + awk '{print $1}' $src/MANIFEST | while true; do + read filename + test -z "$filename" && break + if test -f $filename; then + if $issymlink $filename; then + rm -f $filename + fi + fi + if test -f $filename; then + echo "$filename already exists, not symlinking." + else +?X: Note that the following works because "$pkgsrc" is absolute + ln -s $pkgsrc/$filename $filename + fi + done +?X: Check that everything was correctly copied + echo "(Checking current directory...)" >&4 + cd UU + awk '$1 !~ /PACK[A-Z]+/ {print $1}' "$rsrc/MANIFEST" | \ + (split -l 50 2>/dev/null || split -50) + rm -f missing + tmppwd=`pwd` + for filelist in x??; do + (cd ..; ls `cat "$tmppwd/$filelist"` \ + >/dev/null 2>>"$tmppwd/missing") + done + if test -s missing; then + echo "Failed duplication of source tree. Aborting." >&4 + exit 1 + fi + ;; + *) echo "(I cannot figure out how to do symbolic links, ignoring!)" >&4 + ;; + esac + ;; + esac + ;; +esac + +@end diff --git a/mcon/U/Myinit.U b/mcon/U/Myinit.U new file mode 100644 index 0000000..0ab97f4 --- /dev/null +++ b/mcon/U/Myinit.U @@ -0,0 +1,26 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: Myinit.U,v $ +?RCS: Revision 3.0.1.1 1994/10/31 09:47:29 ram +?RCS: patch44: leading comment states this unit comes before option processing +?RCS: +?RCS: Revision 3.0 1993/08/18 12:05:07 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?X: +?X: If you want to initialize any default values, copy this unit to your +?X: personal U directory and add the assignments to the end. This file +?X: is included after variables are initialized but before any old +?X: config.sh file is read in and before any Configure switch processing. +?X: +?MAKE:Myinit: Init +?MAKE: -pick add $@ %< +?LINT: nocomment diff --git a/mcon/U/Myread.U b/mcon/U/Myread.U new file mode 100644 index 0000000..330f503 --- /dev/null +++ b/mcon/U/Myread.U @@ -0,0 +1,199 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: Myread.U,v $ +?RCS: Revision 3.0.1.6 1997/02/28 15:05:39 ram +?RCS: patch61: myread script now starts with a "startsh" +?RCS: patch61: miscellaneous fixes +?RCS: +?RCS: Revision 3.0.1.5 1995/01/11 15:14:22 ram +?RCS: patch45: added & escape allowing user to turn on -d from the prompt +?RCS: +?RCS: Revision 3.0.1.4 1994/10/31 09:48:04 ram +?RCS: patch44: added Options to the MAKE line since it's no longer in Init.U +?RCS: +?RCS: Revision 3.0.1.3 1994/10/29 15:56:20 ram +?RCS: patch36: added ?F: line for metalint file checking +?RCS: +?RCS: Revision 3.0.1.2 1993/08/30 08:57:59 ram +?RCS: patch8: added new visible 'nostick' symbol, mainly for Finish.U +?RCS: +?RCS: Revision 3.0.1.1 1993/08/27 14:39:20 ram +?RCS: patch7: now sticks to the question when no default and empty answer +?RCS: +?RCS: Revision 3.0 1993/08/18 12:05:08 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?X: +?X: This unit produces a bit of shell code that must be dotted in in order +?X: to do a read. It allows for shell escapes, default assignment and +?X: parameter evaluation. +?X: +?X: To use this unit, $rp and $dflt must hold the question and the +?X: default answer. The question will be printed by the script itself. +?X: Neither $rp nor $dflt is altered by the script. +?X: +?X: The myread script will stick to the question if no default is proposed +?X: and the user answer is empty, which prevents mistakes. However, at the +?X: end of Configure, there is an exception to this rule (Finish.U) where we +?X: set nostick to a non-empty value to allow the Return key to play its role! +?X: +?MAKE:Myread: Options startsh n c trnl +?MAKE: -pick add $@ %< +?V:ans:dflt rp nostick +?F:./myread +?T:COLUMNS xxxm rp dflt answ aok myecho +?LINT:change fastread +?X: Some shells (Ultrix) do not understand ${COLUMNS:-80}, sigh! +: compute the number of columns on the terminal for proper question formatting +case "$COLUMNS" in +'') COLUMNS='80';; +esac + +: set up the echo used in my read +?X: +?X: This variable is intended to be eval'ed. It will echo the two +?X: variables $rp and $dflt (provided this latter has a non null value). +?X: It is mainly used by the myread script to echo the questions. +?X: +?X: The $n and $c below are substituted before Loc does its silly echo check +?X: so don't put a $ on the echo below so we get builtin, even if $echo is +?X: pointing to /bin/echo. +?X: +myecho="case \"\$xxxm\" in +'') echo $n \"\$rp $c\" >&4;; +*) case \"\$rp\" in + '') echo $n \"[\$xxxm] $c\";; + *) + if test \`echo \"\$rp [\$xxxm] \" | wc -c\` -ge $COLUMNS; then + echo \"\$rp\" >&4 + echo $n \"[\$xxxm] $c\" >&4 + else + echo $n \"\$rp [\$xxxm] $c\" >&4 + fi + ;; + esac;; +esac" + +: now set up to do reads with possible shell escape and default assignment +cat <<EOSC >myread +$startsh +?X: +?X: Save value of default -- do not alter original in case of eval +?X: +xxxm=\$dflt +$myecho +?X: +?X: If there is no default, then stop, regardless of the value in fastread. +?X: In silent mode, no new-line is to be echoed if the question is empty, +?X: since this is used to wait for the "return" key. +?X: +ans='!' +case "\$fastread" in +yes) case "\$dflt" in + '') ;; + *) ans=''; + case "\$silent-\$rp" in + true-) ;; + *) echo " " >&4;; + esac;; + esac;; +*) case "\$silent" in + true) case "\$rp" in + '') ans='';; + esac;; + esac;; +esac +while expr "X\$ans" : "X!" >/dev/null; do + read answ +?X: +?X: Run 'eval' on the answer, in order to do variable substitution, in case +?X: the user types $HOME or $WHATEVER. Variables must be evaluated now. +?X: Typing '\$HOME' won't currently prevent from substitution -- use '\\$HOME' +?X: The $1 .. $9 and $*, as well as $@, are available to refer to the +?X: default value. +?X: + set x \$xxxm + shift + aok=''; eval "ans=\\"\$answ\\"" && aok=y + case "\$answ" in +?X: +?X: Use "!" and not a plain ! because of a bug in BSD 4.4 shell +?X: (reported by Wayne Davison) +?X: We must handle the shell escapes before dealing with possible variable +?X: substitution, since the shell we're launching in that case will be able +?X: to do it as well as we can -- RAM, 15/03/96 +?X + "!") + sh 1>&4 + echo " " + $myecho + ;; + !*) + set x \`expr "X\$ans" : "X!\(.*\)\$"\` + shift + sh 1>&4 -c "\$*" + echo " " + $myecho + ;; + "\$ans") + case "\$ans" in +?X: +?X: Answers starting with & are hooks allowing to dynamically turn on/off +?X: some Configure options. That's for the future. -- RAM, 09/01/95 +?X: Today, we only recognize '& -d' to mean 'go on as if Configure -d, which +?X: is a hardwired behaviour compatible with our general scheme. +?X: + \\&*) + set x \`expr "X\$ans" : "X&\(.*\)\$"\` + shift + case "\$1" in + -d) + fastread=yes + echo "(OK, I'll run with -d after this question.)" >&4 + ;; + -*) + echo "*** Sorry, \$1 not supported yet." >&4 + ;; + esac + $myecho + ans=! + ;; + esac;; + *) + case "\$aok" in + y) + echo "*** Substitution done -- please confirm." + xxxm="\$ans" + ans=\`echo $n "\$ans$c" | tr '$trnl' ' '\` + xxxm="\$ans" + ans=! + ;; + *) + echo "*** Error -- try again." + ans=! + ;; + esac + $myecho + ;; + esac +?X: Stick in myread if no default answer and nothing was answered + case "\$ans\$xxxm\$nostick" in + '') + ans=! + $myecho + ;; + esac +done +case "\$ans" in +'') ans="\$xxxm";; +esac +EOSC + diff --git a/mcon/U/Nothing.U b/mcon/U/Nothing.U new file mode 100644 index 0000000..fe40801 --- /dev/null +++ b/mcon/U/Nothing.U @@ -0,0 +1,19 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: Nothing.U,v $ +?RCS: Revision 3.0 1993/08/18 12:05:09 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?X: +?X: The purpose of this file is to supply an empty target for the private +?X: Makefile built by metaconfig to order the units. +?X: +?MAKE:Nothing: Head diff --git a/mcon/U/Null.U b/mcon/U/Null.U new file mode 100644 index 0000000..bb218b0 --- /dev/null +++ b/mcon/U/Null.U @@ -0,0 +1,20 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: Null.U,v $ +?RCS: Revision 3.0 1993/08/18 12:05:10 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?X: +?X: This unit ends up producing shell code to set all variables to ''. This +?X: probably isn't necessary, but I'm paranoid. About certain things. +?X: +?MAKE:Null: Head +?MAKE: -pick add.Null $@ %< diff --git a/mcon/U/Obsol_h.U b/mcon/U/Obsol_h.U new file mode 100644 index 0000000..1061aa9 --- /dev/null +++ b/mcon/U/Obsol_h.U @@ -0,0 +1,28 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: Obsol_h.U,v $ +?RCS: Revision 3.0 1993/08/18 12:05:11 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?X: +?X: This file is prepended to .MT/Obsol_h if that file is not empty. That file +?X: contains the necessary mappings of new symbols to obsolete ones. +?X: +?MAKE:Obsol_h: +?MAKE: -pick prepend $@ ./Obsol_h +?LINT:nocomment +/* + * The following symbols are obsolete. They are mapped to the the new + * symbols only to ease the transition process. The sources should be + * updated so as to use the new symbols only, as the support for these + * obsolete symbols may end without notice. + */ + diff --git a/mcon/U/Obsol_sh.U b/mcon/U/Obsol_sh.U new file mode 100644 index 0000000..0a976bf --- /dev/null +++ b/mcon/U/Obsol_sh.U @@ -0,0 +1,27 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: Obsol_sh.U,v $ +?RCS: Revision 3.0 1993/08/18 12:05:11 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?X: +?X: This file is prepended to .MT/Obsol_sh if that file is not empty. That file +?X: contains the necessary mappings of new symbols to obsolete ones. +?X: +?MAKE:Obsol_sh: +?MAKE: -pick prepend $@ ./Obsol_sh +?LINT:nocomment +# +# The following symbols are obsolete. They are mapped to the the new +# symbols only to ease the transition process. The sources should be +# updated so as to use the new symbols only, since supporting of those +# obsolete symbols may end without notice. +# diff --git a/mcon/U/Oldconfig.U b/mcon/U/Oldconfig.U new file mode 100644 index 0000000..9e079dd --- /dev/null +++ b/mcon/U/Oldconfig.U @@ -0,0 +1,687 @@ +?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: 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 +?D:osname='' +?LINT:change n c sh +?LINT:extern hostarch +?LINT:change hostarch +: 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" +$test -f "$uname$_exe" && has_uname=y + +: Guessing of the OS name -- half the following guesses are probably wrong... +: If you have better tests or hints, please send them to the metaconfig +: authors and to <MAINTLOC> +$test -f /irix && osname=irix +$test -f /xenix && osname=sco_xenix +$test -f /dynix && osname=dynix +$test -f /dnix && osname=dnix +$test -f /lynx.os && osname=lynxos +$test -f /unicos && osname=unicos && osvers=`$uname -r` +$test -f /unicosmk && osname=unicosmk && osvers=`$uname -r` +$test -f /unicosmk.ar && osname=unicosmk && osvers=`$uname -r` +$test -f /bin/mips && /bin/mips && osname=mips +$test -d /NextApps && set X `hostinfo | $grep 'NeXT Mach.*:' | \ + $sed -e 's/://' -e 's/\./_/'` && osname=next && osvers=$4 +$test -d /usr/apollo/bin && osname=apollo +$test -f /etc/saf/_sactab && osname=svr4 +$test -d /usr/include/minix && osname=minix +$test -f /system/gnu_library/bin/ar.pm && osname=vos +if $test -d /MachTen -o -d /MachTen_Folder; then +?X: MachTen uname -a output looks like +?X: xxx 4 0.0 Macintosh +?X: MachTen /sbin/version output looks like +?X: MachTen 4.0 Mon Aug 28 10:18:00 1995 +?X: MachTen 3.x had the 'version' command in /usr/etc/version. + osname=machten + if $test -x /sbin/version; then + osvers=`/sbin/version | $awk '{print $2}' | + $sed -e 's/[A-Za-z]$//'` + elif $test -x /usr/etc/version; then + osvers=`/usr/etc/version | $awk '{print $2}' | + $sed -e 's/[A-Za-z]$//'` + else + osvers="$2.$3" + fi +fi +$test -f /sys/posix.dll && + $test -f /usr/bin/what && + set X `/usr/bin/what /sys/posix.dll` && + $test "$3" = UWIN && + osname=uwin && + osvers="$5" +?X: If we have uname, we already computed a suitable uname -a output, correctly +?X: formatted for Xenix, and it lies in $myuname. +if $test "X$has_uname" != X; then + set X $myuname + shift + case "$5" in + fps*) osname=fps ;; + mips*) + case "$4" in + umips) osname=umips ;; + *) osname=mips ;; + esac;; + [23]100) osname=mips ;; + next*) osname=next ;; +?X: Interactive Unix. + i386*) + tmp=`/bin/uname -X 2>/dev/null|awk '/3\.2v[45]/{ print $(NF) }'` + if $test "$tmp" != "" -a "$3" = "3.2" -a -f '/etc/systemid'; then + osname='sco' + osvers=$tmp + elif $test -f /etc/kconfig; then + osname=isc + if $test "$lns" = "$ln -s"; then + osvers=4 + elif $contains _SYSV3 /usr/include/stdio.h > /dev/null 2>&1 ; then + osvers=3 + elif $contains _POSIX_SOURCE /usr/include/stdio.h > /dev/null 2>&1 ; then + osvers=2 + fi + fi + tmp='' + ;; +?X: MS-DOS djgpp uname -a output looks like: +?X: ms-dos xxx 6 22 pc +?X: $1 is the "dos flavor" (need not be "ms-dos"). +?X: $2 is the node name +?X: $3 and $4 are version/subversion +?X: $5 is always "pc", but that might not be unique to DJGPP. +?X: (e.g. Solaris_x86 has $5 = i86pc, which doesn't actually conflict, +?X: but it's close enought 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="$3" + ;; + *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 + +: 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 + tmp_n="$n" + tmp_c="$c" + tmp_sh="$sh" + . ../config.sh + cp ../config.sh . + n="$tmp_n" + c="$tmp_c" + hint=previous + ;; + esac +fi +?X: remember, case indentation is wrong--RAM +;; +*) + echo " " + echo "Fetching default answers from $config_sh..." >&4 + tmp_n="$n" + tmp_c="$c" + tmp_sh="$sh" + 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 . + n="$tmp_n" + c="$tmp_c" + 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 + +. ./checkcc +?X: Cross-compiling support +case "$targetarch" in +'') ;; +*) hostarch=$osname + osname=`echo $targetarch|sed 's,^[^-]*-,,'` + osvers='' + ;; +esac + +@if {test -d ../hints} +: Offer them some hints based on their OS +cd .. +?X: Since we are now at the root of the source tree, we must use $src +?X: to access the sources and not $rsrc. See src.U for details... +if $test ! -f config.sh; then + $cat <<EOM + +First time through, eh? I have some defaults handy for some systems +that need some extra help getting the Configure answers right: + +EOM + (cd $src/hints; ls -C *.sh) | $sed 's/\.sh/ /g' >&4 + dflt='' + + : Now look for a hint file osname_osvers, unless one has been + : specified already. + case "$hintfile" in + ''|' ') + file=`echo "${osname}_${osvers}" | $sed -e 's%\.%_%g' -e 's%_$%%'` + : Also try without trailing minor version numbers. + xfile=`echo $file | $sed -e 's%_[^_]*$%%'` + xxfile=`echo $xfile | $sed -e 's%_[^_]*$%%'` + xxxfile=`echo $xxfile | $sed -e 's%_[^_]*$%%'` + xxxxfile=`echo $xxxfile | $sed -e 's%_[^_]*$%%'` + case "$file" in + '') dflt=none ;; + *) case "$osvers" in + '') dflt=$file + ;; + *) if $test -f $src/hints/$file.sh ; then + dflt=$file + elif $test -f $src/hints/$xfile.sh ; then + dflt=$xfile + elif $test -f $src/hints/$xxfile.sh ; then + dflt=$xxfile + elif $test -f $src/hints/$xxxfile.sh ; then + dflt=$xxxfile + elif $test -f $src/hints/$xxxxfile.sh ; then + dflt=$xxxxfile + elif $test -f "$src/hints/${osname}.sh" ; then + dflt="${osname}" + else + dflt=none + fi + ;; + esac + ;; + esac + if $test -f Policy.sh ; then + case "$dflt" in + *Policy*) ;; + none) dflt="Policy" ;; + *) dflt="Policy $dflt" ;; + esac + fi + ;; + *) + dflt=`echo $hintfile | $sed 's/\.sh$//'` + ;; + esac + + if $test -f Policy.sh ; then + $cat <<EOM + +There's also a Policy hint file available, which should make the +site-specific (policy) questions easier to answer. +EOM + + fi + + $cat <<EOM + +You may give one or more space-separated answers, or "none" if appropriate. +A well-behaved OS will have no hints, so answering "none" or just "Policy" +is a good thing. DO NOT give a wrong version or a wrong OS. + +EOM + + rp="Which of these apply, if any?" + . UU/myread + tans=$ans + for file in $tans; do + if $test X$file = XPolicy -a -f Policy.sh; then + . Policy.sh + $cat Policy.sh >> UU/config.sh + elif $test -f $src/hints/$file.sh; then + . $src/hints/$file.sh + $cat $src/hints/$file.sh >> UU/config.sh + elif $test X"$tans" = X -o X"$tans" = Xnone ; then + : nothing + else + : Give one chance to correct a possible typo. + echo "$file.sh does not exist" + dflt=$file + rp="hint to use instead?" + . UU/myread + for file in $ans; do + if $test -f "$src/hints/$file.sh"; then + . $src/hints/$file.sh + $cat $src/hints/$file.sh >> UU/config.sh + elif $test X$ans = X -o X$ans = Xnone ; then + : nothing + else + echo "$file.sh does not exist -- ignored." + fi + done + fi + done + + hint=recommended + : Remember our hint file for later. + if $test -f "$src/hints/$file.sh" ; then + hintfile="$file" + else + hintfile='' + fi +fi +cd UU +?X: From here on, we must use $rsrc instead of $src + +@end +: Process their -A options +. ./posthint.sh + +@if osname || osvers +: Ask them to confirm the OS name +cat << EOM + +Configure uses the operating system name and version to set some defaults. +The default value is probably right if the name rings a bell. Otherwise, +since spelling matters for me, either accept the default or answer "none" +to leave it blank. + +EOM +@end +@if osname +case "$osname" in + ''|' ') + case "$hintfile" in + ''|' '|none) dflt=none ;; + *) dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/_.*$//'` ;; + esac + ;; + *) dflt="$osname" ;; +esac +rp="Operating system name?" +. ./myread +case "$ans" in +none) osname='' ;; +*) osname=`echo "$ans" | $sed -e 's/[ ][ ]*/_/g' | ./tr '[A-Z]' '[a-z]'`;; +esac +@end +@if osvers +@if osname +echo " " +@end +case "$osvers" in + ''|' ') + case "$hintfile" in + ''|' '|none) dflt=none ;; + *) dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/^[^_]*//'` + dflt=`echo $dflt | $sed -e 's/^_//' -e 's/_/./g'` + case "$dflt" in + ''|' ') dflt=none ;; + esac + ;; + esac + ;; + *) dflt="$osvers" ;; +esac +rp="Operating system version?" +. ./myread +case "$ans" in +none) osvers='' ;; +*) osvers="$ans" ;; +esac + +@end diff --git a/mcon/U/Oldsym.U b/mcon/U/Oldsym.U new file mode 100644 index 0000000..8b11133 --- /dev/null +++ b/mcon/U/Oldsym.U @@ -0,0 +1,66 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: 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 +echo "CONFIG=true" >>config.sh + +: propagate old symbols +if $test -f UU/config.sh; then +?X: Make sure each symbol is unique in oldconfig.sh + <UU/config.sh $sort | $uniq >UU/oldconfig.sh +?X: +?X: All the symbols that appear twice come only from config.sh (hence the +?X: two config.sh in the command line). These symbols will be removed by +?X: the uniq -u command. The oldsyms file thus contains all the symbols +?X: that did not appear in the produced config.sh (Larry Wall). +?X: +?X: Do not touch the -u flag of uniq. This means you too, Jarkko. +?X: + $sed -n 's/^\([a-zA-Z_0-9]*\)=.*/\1/p' \ + config.sh config.sh UU/oldconfig.sh |\ + $sort | $uniq -u >UU/oldsyms + set X `cat UU/oldsyms` + shift + case $# in + 0) ;; + *) + cat <<EOM +Hmm...You had some extra variables I don't know about...I'll try to keep 'em... +EOM + echo ": Variables propagated from previous config.sh file." >>config.sh + for sym in `cat UU/oldsyms`; do + echo " Propagating $hint variable "'$'"$sym..." + eval 'tmp="$'"${sym}"'"' + echo "$tmp" | \ + sed -e "s/'/'\"'\"'/g" -e "s/^/$sym='/" -e "s/$/'/" >>config.sh + done + ;; + esac +fi + diff --git a/mcon/U/Options.U b/mcon/U/Options.U new file mode 100644 index 0000000..a38f565 --- /dev/null +++ b/mcon/U/Options.U @@ -0,0 +1,363 @@ +?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: 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 setttings +?RCS: patch45: file optdef.sh is no longer removed after sourcing +?RCS: +?RCS: Revision 3.0.1.2 1994/10/29 15:58:06 ram +?RCS: patch36: ensure option definition file is removed before appending +?RCS: patch36: protect variable definitions with spaces in them +?RCS: +?RCS: Revision 3.0.1.1 1994/06/20 06:55:44 ram +?RCS: patch30: now uses new me symbol to tag error messages +?RCS: patch30: new -D and -U options to define/undef symbols (JHI) +?RCS: +?RCS: Revision 3.0 1993/08/18 12:05:14 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?X: +?X: Command line parsing. It is really important that the variables used here +?X: be not listed in the MAKE line, or they will be saved in config.sh and +?X: loading this file to fetch default answers would clobber the values set +?X: herein. +?X: +?MAKE:Options: startsh +?MAKE: -pick wipe $@ %< +?V:reuseval alldone error realsilent silent extractsh fastread \ + override knowitall: config_sh +?T:arg argn symbol config_arg0 config_args config_argc xxx yyy zzz uuu +?T:args_exp args_sep arg_exp +?F:!Configure +?F:./optdef.sh ./cmdline.opt ./posthint.sh ./cmdl.opt +: Save command line options in file UU/cmdline.opt for later use in +: generating config.sh. +?X: This temporary file will be read by Oldsym.U. I used a temporary +?X: file to preserve all sorts of potential command line quotes and +?X: also because we don't know in advance how many variables we'll +?X: need, so I can't actually declare them on the MAKE line. +?X: The config_args variable won't be quite correct if Configure is +?X: fed something like ./Configure -Dcc="gcc -B/usr/ccs/bin/" +?X: since the quotes are gone by the time we see them. You'd have to +?X: reconstruct the command line from the config_arg? lines, but since +?X: I don't imagine anyone actually having to do that, I'm not going +?X: to worry too much. +cat > cmdline.opt <<EOSH +: Configure command line arguments. +config_arg0='$0' +config_args='$*' +config_argc=$# +EOSH +argn=1 +args_exp='' +args_sep='' +for arg in "$@"; do + cat >>cmdline.opt <<EOSH +config_arg$argn='$arg' +EOSH +?X: Extreme backslashitis: replace each ' by '"'"' + cat <<EOC | sed -e "s/'/'"'"'"'"'"'"'/g" > cmdl.opt +$arg +EOC + arg_exp=`cat cmdl.opt` + args_exp="$args_exp$args_sep'$arg_exp'" + argn=`expr $argn + 1` + args_sep=' ' +done +?X: args_exp is good for restarting self: eval "set X $args_exp"; shift; $0 "$@" +?X: used by hints/os2.sh in Perl, for instance +rm -f cmdl.opt + +: produce awk script to parse command line options +cat >options.awk <<'EOF' +BEGIN { + optstr = "A:dD:eEf:hKOrsSU:V"; # getopt-style specification + + len = length(optstr); + for (i = 1; i <= len; i++) { + c = substr(optstr, i, 1); +?X: some older awk's do not have the C ?: construct + if (i < len) a = substr(optstr, i + 1, 1); else a = ""; + if (a == ":") { + arg[c] = 1; + i++; + } + opt[c] = 1; + } +} +{ + expect = 0; + str = $0; + if (substr(str, 1, 1) != "-") { + printf("'%s'\n", str); + next; + } + len = length($0); + for (i = 2; i <= len; i++) { + c = substr(str, i, 1); + if (!opt[c]) { + printf("-%s\n", substr(str, i)); + next; + } + printf("-%s\n", c); + if (arg[c]) { + if (i < len) + printf("'%s'\n", substr(str, i + 1)); + else + expect = 1; + next; + } + } +} +END { + if (expect) + print "?"; +} +EOF + +: process the command line options +?X: Use "$@" to keep arguments with spaces in them from being split apart. +?X: For the same reason, awk will output quoted arguments and the final eval +?X: removes them and sets a proper $* array. An 'X' is prependend to each +?X: argument before being fed to echo to guard against 'echo -x', where -x +?X: would be understood as an echo option! It is removed before feeding awk. +set X `for arg in "$@"; do echo "X$arg"; done | + sed -e s/X// | awk -f options.awk` +eval "set $*" +shift +rm -f options.awk + +: set up default values +fastread='' +reuseval=false +config_sh='' +alldone='' +error='' +silent='' +extractsh='' +override='' +knowitall='' +rm -f optdef.sh posthint.sh +cat >optdef.sh <<EOS +$startsh +EOS + +?X: +?X: Given that we now have the possibility to execute Configure remotely +?X: thanks to the new src.U support, we have to face the possibility +?X: of having to ask where the source lie, which means we need the Myread.U +?X: stuff and possibly other things that might echo something on the +?X: screen... +?X: +?X: That's not pretty, and might be confusing in 99% of the time. So... +?X: We introduce a new realsilent variable which is set when -s is given, +?X: and we force silent=true if -S is supplied. The Extractall.U unit +?X: will then undo the >&4 redirection based on the value of the +?X: realsilent variable... -- RAM, 18/93/96 +?X: + +: option parsing +while test $# -gt 0; do + case "$1" in + -d) shift; fastread=yes;; + -e) shift; alldone=cont;; + -f) + shift + cd .. + if test -r "$1"; then + config_sh="$1" + else + echo "$me: cannot read config file $1." >&2 + error=true + fi + cd UU + shift;; + -h) shift; error=true;; + -r) shift; reuseval=true;; + -s) shift; silent=true; realsilent=true;; + -E) shift; alldone=exit;; + -K) shift; knowitall=true;; + -O) shift; override=true;; + -S) shift; silent=true; extractsh=true;; + -D) + shift + case "$1" in + *=) + echo "$me: use '-U symbol=', not '-D symbol='." >&2 + echo "$me: ignoring -D $1" >&2 + ;; + *=*) echo "$1" | \ + sed -e "s/'/'\"'\"'/g" -e "s/=\(.*\)/='\1'/" >> optdef.sh;; + *) echo "$1='define'" >> optdef.sh;; + esac + shift + ;; + -U) + shift + case "$1" in + *=) echo "$1" >> optdef.sh;; + *=*) + echo "$me: use '-D symbol=val', not '-U symbol=val'." >&2 + echo "$me: ignoring -U $1" >&2 + ;; + *) echo "$1='undef'" >> optdef.sh;; + esac + shift + ;; + -A) + shift + xxx='' + yyy="$1" + zzz='' + uuu=undef + case "$yyy" in + *=*) zzz=`echo "$yyy"|sed 's!=.*!!'` + case "$zzz" in + *:*) zzz='' ;; + *) xxx=append + zzz=" "`echo "$yyy"|sed 's!^[^=]*=!!'` + yyy=`echo "$yyy"|sed 's!=.*!!'` ;; + esac + ;; + esac + case "$xxx" in + '') case "$yyy" in + *:*) xxx=`echo "$yyy"|sed 's!:.*!!'` + yyy=`echo "$yyy"|sed 's!^[^:]*:!!'` + zzz=`echo "$yyy"|sed 's!^[^=]*=!!'` + yyy=`echo "$yyy"|sed 's!=.*!!'` ;; + *) xxx=`echo "$yyy"|sed 's!:.*!!'` + yyy=`echo "$yyy"|sed 's!^[^:]*:!!'` ;; + esac + ;; + esac + case "$xxx" in + append) + echo "$yyy=\"\${$yyy}$zzz\"" >> posthint.sh ;; + clear) + echo "$yyy=''" >> posthint.sh ;; + define) + case "$zzz" in + '') zzz=define ;; + esac + echo "$yyy='$zzz'" >> posthint.sh ;; + eval) + echo "eval \"$yyy=$zzz\"" >> posthint.sh ;; + prepend) + echo "$yyy=\"$zzz\${$yyy}\"" >> posthint.sh ;; + undef) + case "$zzz" in + '') zzz="$uuu" ;; + esac + echo "$yyy=$zzz" >> posthint.sh ;; + *) echo "$me: unknown -A command '$xxx', ignoring -A $1" >&2 ;; + esac + shift + ;; + -V) echo "$me generated by metaconfig <VERSION> PL<PATCHLEVEL>." >&2 + exit 0;; + --) break;; + -*) echo "$me: unknown option $1" >&2; shift; error=true;; + *) break;; + esac +done + +case "$error" in +true) + cat >&2 <<EOM +Usage: $me [-dehrsEKOSV] [-f config.sh] [-D symbol] [-D symbol=value] + [-U symbol] [-U symbol=] [-A command:symbol...] + -d : use defaults for all answers. + -e : go on without questioning past the production of config.sh. + -f : specify an alternate default configuration file. + -h : print this help message and exit (with an error status). + -r : reuse C symbols value if possible (skips costly nm extraction). + -s : silent mode, only echoes questions and essential information. + -D : define symbol to have some value: + -D symbol symbol gets the value 'define' + -D symbol=value symbol gets the value 'value' + -E : stop at the end of questions, after having produced config.sh. + -K : do not use unless you know what you are doing. + -O : let -D and -U override definitions from loaded configuration file. + -S : perform variable substitutions on all .SH files (can mix with -f) + -U : undefine symbol: + -U symbol symbol gets the value 'undef' + -U symbol= symbol gets completely empty + -A : manipulate symbol after the platform specific hints have been applied: + -A symbol=value append " "value to symbol + -A append:symbol=value append value to symbol + -A define:symbol=value define symbol to have value + -A clear:symbol define symbol to be '' + -A define:symbol define symbol to be 'define' + -A eval:symbol=value define symbol to be eval of value + -A prepend:symbol=value prepend value to symbol + -A undef:symbol define symbol to be 'undef' + -A undef:symbol= define symbol to be '' + -V : print version number and exit (with a zero status). +EOM + exit 1 + ;; +esac + +?X: +?X: Unless they specified either -S or both -d and -e/E, make sure we're +?X: running interactively, i.e. attached to a terminal. Moved from Head.U to +?X: be able to handle batch configurations... +?X: +?X: We have to hardwire the Configure name and cannot use $me, since if they +?X: said 'sh <Configure', then $me is 'sh'... +?X: +: Sanity checks +case "$fastread$alldone" in +yescont|yesexit) ;; +*) + case "$extractsh" in + true) ;; + *) + if test ! -t 0; then + echo "Say 'sh Configure', not 'sh <Configure'" + exit 1 + fi + ;; + esac + ;; +esac + +?X: In silent mode, the standard output is closed. Questions are asked by +?X: outputing on file descriptor #4, which is the original stdout descriptor. +?X: This filters out all the "junk", since all the needed information is written +?X: on #4. Note that ksh will not let us redirect output if the file descriptor +?X: has not be defined yet, unlike sh, hence the following line...--RAM. +exec 4>&1 +case "$silent" in +true) exec 1>/dev/null;; +esac + +: run the defines and the undefines, if any, but leave the file out there... +touch optdef.sh +. ./optdef.sh +: create the posthint manipulation script and leave the file out there... +?X: this file will be perused by Oldconfig.U +touch posthint.sh + diff --git a/mcon/U/Prefixit.U b/mcon/U/Prefixit.U new file mode 100644 index 0000000..dae8dba --- /dev/null +++ b/mcon/U/Prefixit.U @@ -0,0 +1,68 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: Prefixit.U,v $ +?RCS: Revision 3.0.1.1 1995/01/30 14:29:22 ram +?RCS: patch49: created +?RCS: +?X: +?X: Used as: "set dflt var dir; eval $prefixit" to set $dflt to be +?X: $prefix/dir by default, or the previous $var depending on certain +?X: conditions: +?X: - If the $oldprefix variable is empty, then $prefix holds the same +?X: value as on previous runs. Therefore, reuse $var if set, otherwise +?X: set $dflt to $prefix/dir. +?X: - If $oldprefix is not empty, then set $dflt to $prefix/dir if $var +?X: is empty (first run). Otherwise, if $var is $oldprefix/dir, then +?X: change it to $prefix/dir. If none of the above, reuse the old $var. +?X: +?X: When dir is omitted, the dflt variable is set to $var if prefix did not +?X: change, to an empty value otherwise. If dir=none, then a single space +?X: in var is kept as-is, even if the prefix changes. +?X: +?MAKE:Prefixit: prefix oldprefix +?MAKE: -pick add $@ %< +?LINT:define prefixit +?S:prefixit: +?S: This shell variable is used internally by Configure to reset +?S: the leading installation prefix correctly when it is changed. +?S: set dflt var [dir] +?S: eval $prefixit +?S: That will set $dflt to $var or $prefix/dir depending on the +?S: value of $var and $oldprefix. +?S:. +?V:prefixit +?T:tp +: set the prefixit variable, to compute a suitable default value +prefixit='case "$3" in +""|none) + case "$oldprefix" in + "") eval "$1=\"\$$2\"";; + *) + case "$3" in + "") eval "$1=";; + none) + eval "tp=\"\$$2\""; + case "$tp" in + ""|" ") eval "$1=\"\$$2\"";; + *) eval "$1=";; + esac;; + esac;; + esac;; +*) + eval "tp=\"$oldprefix-\$$2-\""; eval "tp=\"$tp\""; + case "$tp" in + --|/*--|\~*--) eval "$1=\"$prefix/$3\"";; + /*-$oldprefix/*|\~*-$oldprefix/*) + eval "$1=\`echo \$$2 | sed \"s,^$oldprefix,$prefix,\"\`";; + *) eval "$1=\"\$$2\"";; + esac;; +esac' + diff --git a/mcon/U/Prefixup.U b/mcon/U/Prefixup.U new file mode 100644 index 0000000..46b0b15 --- /dev/null +++ b/mcon/U/Prefixup.U @@ -0,0 +1,38 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: Prefixup.U,v $ +?RCS: Revision 3.0.1.1 1995/01/30 14:30:40 ram +?RCS: patch49: created +?RCS: +?X: +?X: Used as: "set dflt; eval $prefixup" to set $dflt to be $prefix/dir +?X: instead of $prefixexp/dir, in case portability was involved somehow +?X: and $prefix uses ~name expansion. +?X: +?MAKE:Prefixup: prefix prefixexp +?MAKE: -pick add $@ %< +?LINT:define prefixup +?S:prefixup: +?S: This shell variable is used internally by Configure to reset +?S: the leading installation prefix correctly when $prefix uses +?S: ~name expansion. +?S: set dflt +?S: eval $prefixup +?S: That will set $dflt to $prefix/dir if it was $prefixexp/dir and +?S: $prefix differs from $prefixexp. +?S:. +?V:prefixup +: set the prefixup variable, to restore leading tilda escape +prefixup='case "$prefixexp" in +"$prefix") ;; +*) eval "$1=\`echo \$$1 | sed \"s,^$prefixexp,$prefix,\"\`";; +esac' + diff --git a/mcon/U/Rcs.U b/mcon/U/Rcs.U new file mode 100644 index 0000000..255fcb6 --- /dev/null +++ b/mcon/U/Rcs.U @@ -0,0 +1,34 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: Rcs.U,v $ +?RCS: Revision 3.0 1993/08/18 12:05:15 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?X: +?X: This is a unit that helps people who write SH scripts and keep them under +?X: RCS, but don't think to protect the $Log and other $Id keywords from +?X: variable substitution (or people like me who do not like to). +?X: +?MAKE:Author Date Header Id Locker Log RCSfile Revision Source State: Oldconfig +?MAKE: -pick weed $@ %< +?LINT:describe Author Date Header Id Locker Log RCSfile Revision Source State +: preserve RCS keywords in files with variable substitution, grrr +?Author:Author='$Author' +?Date:Date='$Date' +?Header:Header='$Header' +?Id:Id='$Id' +?$Locker' +?Log:Log='$Log' +?RCSfile:RCSfile='$RCSfile' +?Revision:Revision='$Revision' +?Source:Source='$Source' +?State:State='$State' + diff --git a/mcon/U/Setvar.U b/mcon/U/Setvar.U new file mode 100644 index 0000000..75b640c --- /dev/null +++ b/mcon/U/Setvar.U @@ -0,0 +1,50 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: Setvar.U,v $ +?RCS: Revision 3.0.1.1 1994/10/29 15:58:28 ram +?RCS: patch36: call ./whoa explicitely instead of relying on PATH +?RCS: +?RCS: Revision 3.0 1993/08/18 12:05:16 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?X: +?X: This unit produces a variable that is intended to be eval'ed in +?X: order to define/undefine a symbol. A consistency check is made +?X: regarding any previous value and a warning is issued if there +?X: is any discrepancy. +?X: +?X: To use it, say: +?X: val=<value> +?X: set d_variable +?X: eval $setvar +?X: +?MAKE:Setvar: Whoa +?MAKE: -pick add $@ %< +?LINT:define setvar +?S:setvar: +?S: This shell variable is used internally by Configure to set a value +?S: to a given symbol that is defined or not. A typical use is: +?S: val=<value computed> +?S: set d_variable +?S: eval $setvar +?S: That will print a message in case the $val value is not the same +?S: as the previous value of $d_variable. +?S:. +?V:setvar:val +?T:var was td tu +: function used to set '$1' to '$val' +setvar='var=$1; eval "was=\$$1"; td=$define; tu=$undef; +case "$val$was" in +$define$undef) . ./whoa; eval "$var=\$td";; +$undef$define) . ./whoa; eval "$var=\$tu";; +*) eval "$var=$val";; +esac' + diff --git a/mcon/U/Signal.U b/mcon/U/Signal.U new file mode 100644 index 0000000..6ac5eb8 --- /dev/null +++ b/mcon/U/Signal.U @@ -0,0 +1,271 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: 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 +?MAKE: -pick add $@ %< +?X:all files declared as "public" since they're used from other units +?F:signal.c signal_cmd signal.lst signal signal.awk +?T: xx xxx xxxfiles +?LINT:use rm run +: Trace out the files included by signal.h, then look for SIGxxx names. +?X: Remove SIGARRAYSIZE used by HPUX. +?X: Remove SIGSTKSIZE used by Linux. +?X: Remove SIGSTKSZ used by Posix. +?X: Remove SIGTYP void lines used by OS2. +?X: Some cpps, like os390, dont give the file name anywhere +if [ "X$fieldn" = X ]; then + : Just make some guesses. We check them later. + xxx='/usr/include/signal.h /usr/include/sys/signal.h' +else + xxx=`echo '#include <signal.h>' | + $cppstdin $cppminus $cppflags 2>/dev/null | + $grep '^[ ]*#.*include' | + $awk "{print \\$$fieldn}" | $sed 's!"!!g' | \ + $sed 's!\\\\\\\\!/!g' | $sort | $uniq` +fi +?X: Check this list of files to be sure we have parsed the cpp output ok. +?X: This will also avoid potentially non-existent files, such +?X: as ../foo/bar.h +xxxfiles='' +?X: Add /dev/null in case the $xxx list is empty. +for xx in $xxx /dev/null ; do + $test -f "$xx" && xxxfiles="$xxxfiles $xx" +done +?X: If we have found no files, at least try signal.h +case "$xxxfiles" in +'') xxxfiles=`./findhdr signal.h` ;; +esac +xxx=`awk ' +$1 ~ /^#define$/ && $2 ~ /^SIG[A-Z0-9]*$/ && $2 !~ /SIGARRAYSIZE/ && $2 !~ /SIGSTKSIZE/ && $2 !~ /SIGSTKSZ/ && $3 !~ /void/ { + print substr($2, 4, 20) +} +$1 == "#" && $2 ~ /^define$/ && $3 ~ /^SIG[A-Z0-9]*$/ && $3 !~ /SIGARRAYSIZE/ && $4 !~ /void/ { + print substr($3, 4, 20) +}' $xxxfiles` +: Append some common names just in case the awk scan failed. +xxx="$xxx ABRT ALRM BUS CANCEL CHLD CLD CONT DIL EMT FPE" +xxx="$xxx FREEZE HUP ILL INT IO IOT KILL LOST LWP PHONE" +xxx="$xxx PIPE POLL PROF PWR QUIT RTMAX RTMIN SEGV STKFLT STOP" +xxx="$xxx SYS TERM THAW TRAP TSTP TTIN TTOU URG USR1 USR2" +xxx="$xxx USR3 USR4 VTALRM WAITING WINCH WIND WINDOW XCPU XFSZ" + +: generate a few handy files for later +$cat > signal.c <<'EOCP' +#include <sys/types.h> +#include <signal.h> +#include <stdio.h> +int main() { + +/* Strange style to avoid deeply-nested #if/#else/#endif */ +#ifndef NSIG +# ifdef _NSIG +# define NSIG (_NSIG) +# endif +#endif + +#ifndef NSIG +# ifdef SIGMAX +# define NSIG (SIGMAX+1) +# endif +#endif + +#ifndef NSIG +# ifdef SIG_MAX +# define NSIG (SIG_MAX+1) +# endif +#endif + +#ifndef NSIG +# ifdef MAXSIG +# define NSIG (MAXSIG+1) +# endif +#endif + +#ifndef NSIG +# ifdef MAX_SIG +# define NSIG (MAX_SIG+1) +# endif +#endif + +#ifndef NSIG +# ifdef SIGARRAYSIZE +# define NSIG (SIGARRAYSIZE+1) /* Not sure of the +1 */ +# endif +#endif + +#ifndef NSIG +# ifdef _sys_nsig +# define NSIG (_sys_nsig) /* Solaris 2.5 */ +# endif +#endif + +/* Default to some arbitrary number that's big enough to get most + of the common signals. +*/ +#ifndef NSIG +# define NSIG 50 +#endif + +printf("NSIG %d\n", NSIG); + +#ifndef JUST_NSIG + +EOCP + +echo $xxx | $tr ' ' $trnl | $sort | $uniq | $awk ' +{ + printf "#ifdef SIG"; printf $1; printf "\n" + printf "printf(\""; printf $1; printf " %%d\\n\",SIG"; + printf $1; printf ");\n" + printf "#endif\n" +} +END { + printf "#endif /* JUST_NSIG */\n"; + printf "exit(0);\n}\n"; +} +' >>signal.c +$cat >signal.awk <<'EOP' +BEGIN { ndups = 0 } +$1 ~ /^NSIG$/ { nsig = $2 } +($1 !~ /^NSIG$/) && (NF == 2) { + if ($2 > maxsig) { maxsig = $2 } + if (sig_name[$2]) { + dup_name[ndups] = $1 + dup_num[ndups] = $2 + ndups++ + } + else { + sig_name[$2] = $1 + sig_num[$2] = $2 + } +} +END { + if (nsig == 0) { + nsig = maxsig + 1 + } + printf("NSIG %d\n", nsig); + for (n = 1; n < nsig; n++) { + if (sig_name[n]) { + printf("%s %d\n", sig_name[n], sig_num[n]) + } + else { + printf("NUM%d %d\n", n, n) + } + } + for (n = 0; n < ndups; n++) { + printf("%s %d\n", dup_name[n], dup_num[n]) + } +} +EOP +$cat >signal_cmd <<EOS +$startsh +if $test -s signal.lst; then + echo "Using your existing signal.lst file" + exit 0 +fi +xxx="$xxx" +EOS +?X: Avoid variable interpolation problems, especially with +?X: xxx, which contains newlines. +$cat >>signal_cmd <<'EOS' + +set signal +if eval $compile_ok; then + $run ./signal$_exe | ($sort -n -k 2 2>/dev/null || $sort -n +1) | \ + $uniq | $awk -f signal.awk >signal.lst +else + echo "(I can't seem be able to compile the whole test program)" >&4 + echo "(I'll try it in little pieces.)" >&4 + set signal -DJUST_NSIG + if eval $compile_ok; then + $run ./signal$_exe > signal.nsg + $cat signal.nsg + else + echo "I can't seem to figure out how many signals you have." >&4 + echo "Guessing 50." >&4 + echo 'NSIG 50' > signal.nsg + fi + : Now look at all the signal names, one at a time. + for xx in `echo $xxx | $tr ' ' $trnl | $sort | $uniq`; do + $cat > signal.c <<EOCP +#include <sys/types.h> +#include <signal.h> +#include <stdio.h> +int main() { +printf("$xx %d\n", SIG${xx}); +return 0; +} +EOCP + set signal + if eval $compile; then + echo "SIG${xx} found." + $run ./signal$_exe >> signal.ls1 + else + echo "SIG${xx} NOT found." + fi + done + if $test -s signal.ls1; then + $cat signal.nsg signal.ls1 | + $sort -n | $uniq | $awk -f signal.awk >signal.lst + fi + +fi +if $test -s signal.lst; then + : +else + echo "(AAK! I can't compile the test programs -- Guessing)" >&4 + echo 'kill -l' >signal + set X `csh -f <signal` + $rm -f signal + shift + case $# in + 0) set HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM;; + esac + echo $@ | $tr ' ' $trnl | \ + $awk '{ printf "%s %d\n", $1, ++s; } + END { printf "NSIG %d\n", ++s }' >signal.lst +fi +$rm -f signal.c signal$_exe signal$_o signal.nsg signal.ls1 +EOS +chmod a+x signal_cmd +$eunicefix signal_cmd + diff --git a/mcon/U/Tr.U b/mcon/U/Tr.U new file mode 100644 index 0000000..a7320fe --- /dev/null +++ b/mcon/U/Tr.U @@ -0,0 +1,103 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: Tr.U,v $ +?RCS: Revision 3.0.1.2 1994/10/29 18:00:54 ram +?RCS: patch43: forgot to quote $@ to protect against "evil" characters +?RCS: +?RCS: Revision 3.0.1.1 1994/10/29 15:58:35 ram +?RCS: patch36: created +?RCS: +?X: +?X: This unit produces a bit of shell code that must be dotted in in order +?X: to do a character translation. It catches translations to uppercase or +?X: to lowercase, and then invokes the real tr to perform the job. +?X: +?X: This unit is necessary on HP machines (HP strikes again!) with non-ascii +?X: ROMAN8-charset, where normal letters are not arranged in a row, so a-z +?X: covers not the whole alphabet but lots of special chars. This was reported +?X: by Andreas Sahlbach <a.sahlbach@tu-bs.de>. +?X: +?X: Units performing a tr '[A-Z]' '[a-z]' or the other way round should include +?X: us in their dependency and use ./tr instead. +?X: +?MAKE:Tr: startsh tr eunicefix +?MAKE: -pick add $@ %< +?F:./tr +?T:up low LC_ALL +: see whether [:lower:] and [:upper:] are supported character classes +echo " " +case "`echo AbyZ | LC_ALL=C $tr '[:lower:]' '[:upper:]' 2>/dev/null`" in +ABYZ) + echo "Good, your tr supports [:lower:] and [:upper:] to convert case." >&4 + up='[:upper:]' + low='[:lower:]' + ;; +*) # There is a discontinuity in EBCDIC between 'I' and 'J' + # (0xc9 and 0xd1), therefore that is a nice testing point. + if test "X$up" = X -o "X$low" = X; then + case "`echo IJ | LC_ALL=C $tr '[I-J]' '[i-j]' 2>/dev/null`" in + ij) up='[A-Z]' + low='[a-z]' + ;; + esac + fi + if test "X$up" = X -o "X$low" = X; then + case "`echo IJ | LC_ALL=C $tr I-J i-j 2>/dev/null`" in + ij) up='A-Z' + low='a-z' + ;; + esac + fi + if test "X$up" = X -o "X$low" = X; then + case "`echo IJ | od -x 2>/dev/null`" in + *C9D1*|*c9d1*) + echo "Hey, this might be EBCDIC." >&4 + if test "X$up" = X -o "X$low" = X; then + case "`echo IJ | \ + LC_ALL=C $tr '[A-IJ-RS-Z]' '[a-ij-rs-z]' 2>/dev/null`" in + ij) up='[A-IJ-RS-Z]' + low='[a-ij-rs-z]' + ;; + esac + fi + if test "X$up" = X -o "X$low" = X; then + case "`echo IJ | LC_ALL=C $tr A-IJ-RS-Z a-ij-rs-z 2>/dev/null`" in + ij) up='A-IJ-RS-Z' + low='a-ij-rs-z' + ;; + esac + fi + ;; + esac + fi +esac +case "`echo IJ | LC_ALL=C $tr \"$up\" \"$low\" 2>/dev/null`" in +ij) + echo "Using $up and $low to convert case." >&4 + ;; +*) + echo "I don't know how to translate letters from upper to lower case." >&4 + echo "Your tr is not acting any way I know of." >&4 + exit 1 + ;; +esac +: set up the translation script tr, must be called with ./tr of course +cat >tr <<EOSC +$startsh +case "\$1\$2" in +'[A-Z][a-z]') LC_ALL=C exec $tr '$up' '$low';; +'[a-z][A-Z]') LC_ALL=C exec $tr '$low' '$up';; +esac +LC_ALL=C exec $tr "\$@" +EOSC +chmod +x tr +$eunicefix tr + diff --git a/mcon/U/Typedef.U b/mcon/U/Typedef.U new file mode 100644 index 0000000..fd16777 --- /dev/null +++ b/mcon/U/Typedef.U @@ -0,0 +1,63 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: Typedef.U,v $ +?RCS: Revision 3.0.1.3 1995/07/25 13:42:07 ram +?RCS: patch56: added backslash escapes within evals to prevent space problems +?RCS: +?RCS: Revision 3.0.1.2 1994/10/29 16:01:16 ram +?RCS: patch36: don't clobber visible 'val' variable, use 'varval' instead +?RCS: +?RCS: Revision 3.0.1.1 1994/08/29 16:05:14 ram +?RCS: patch32: created +?RCS: +?X: +?X: This unit checks for the definition of a given typedef. +?X: +?X: To use it, say: +?X: set typedef val_t default [includes] +?X: eval $typedef +?X: +?MAKE:Typedef: cppstdin cppminus cppflags rm contains Oldconfig +?MAKE: -pick add $@ %< +?F:!temp.c +?LINT:define typedef +?V:typedef +?S:typedef: +?S: This shell variable is used internally by Configure to check +?S: wether a given typedef is defined or not. A typical use is: +?S: set typedef val_t default [includes] +?S: eval $typedef +?S: That will return val_t set to default if the typedef was not found, +?S: to typedef otherwise. If no includes are specified, look in sys/types.h. +?S:. +?T:type var def inclist varval inc +: define an is-a-typedef? function +typedef='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@; +case "$inclist" in +"") inclist="sys/types.h";; +esac; +eval "varval=\$$var"; +case "$varval" in +"") + $rm -f temp.c; + for inc in $inclist; do + echo "#include <$inc>" >>temp.c; + done; + $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null; + if $contains $type temp.E >/dev/null 2>&1; then + eval "$var=\$type"; + else + eval "$var=\$def"; + fi; + $rm -f temp.?;; +*) eval "$var=\$varval";; +esac' + diff --git a/mcon/U/Unix.U b/mcon/U/Unix.U new file mode 100644 index 0000000..4c05c7b --- /dev/null +++ b/mcon/U/Unix.U @@ -0,0 +1,64 @@ +?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 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: Unix.U,v $ +?RCS: Revision 3.0.1.1 1997/02/28 15:20:06 ram +?RCS: patch61: created +?RCS: +?X: +?X: The purpose of this unit is to define things that are common accross all +?X: known UNIX platforms. If Configure is ported/used on a non-UNIX +?X: environment, then some of the following variables can be redefined in hint +?X: files. +?X: +?MAKE:Unix _a _o firstmakefile archobjs: Oldconfig +?MAKE: -pick add $@ %< +?S:_a (lib_ext): +?S: This variable defines the extension used for ordinary libraries. +?S: For unix, it is '.a'. The '.' is included. Other possible +?S: values include '.lib'. +?S:. +?S:_o (obj_ext): +?S: This variable defines the extension used for object files. +?S: For unix, it is '.o'. The '.' is included. Other possible +?S: values include '.obj'. +?S:. +?S:firstmakefile: +?S: This variable defines the first file searched by make. On unix, +?S: it is makefile (then Makefile). On case-insensitive systems, +?S: it might be something else. This is only used to deal with +?S: convoluted make depend tricks. +?S:. +?S:archobjs: +?S: This variable defines any additional objects that must be linked +?S: in with the program on this architecture. On unix, it is usually +?S: empty. It is typically used to include emulations of unix calls +?S: or other facilities. For perl on OS/2, for example, this would +?S: include os2/os2.obj. +?S:. +?INIT:: Extra object files, if any, needed on this platform. +?INIT:archobjs='' +: Define several unixisms. +: Hints files or command line option can be used to override them. +case "$_a" in +'') _a='.a';; +esac +case "$_o" in +'') _o='.o';; +esac + +@if firstmakefile +: Which makefile gets called first. This is used by make depend. +case "$firstmakefile" in +'') firstmakefile='makefile';; +esac + +@end diff --git a/mcon/U/Warn.U b/mcon/U/Warn.U new file mode 100644 index 0000000..ffab53e --- /dev/null +++ b/mcon/U/Warn.U @@ -0,0 +1,57 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: Extract.U,v $ +?X: +?X: This unit produces a shell script which can be run in order to emit +?X: an important warning to the user, which will be remembered and shown +?X: at the end of the Configure run as well. +?X: +?X: A typical use would be: +?X: +?X: ./warn <<EOM +?X: Problem with your C compiler: can't turn debugging on. +?X: EOM +?X: +?X: or: +?X: +?X: ./warn "Problem with your C compiler: can't turn debugging on." +?X: +?X: Which will both display to the user: +?X: +?X: *** WARNING: +?X: *** Problem with your C compiler: can't turn debugging on. +?X: *** +?X: +?MAKE:Warn: startsh eunicefix +?MAKE: -pick add $@ %< +?F:./warn +: script used to emit important warnings +cat >warn <<EOS +$startsh +?X: Read the whole warning message from stdin into a temporary file +?X: when no argument was supplied. +if test \$# -gt 0; then + echo "\$@" >msg +else + cat >msg +fi +?X: Emit the warning, prefixing all lines with '*** ' +echo "*** WARNING:" >&4 +sed -e 's/^/*** /' <msg >&4 +echo "*** " >&4 +?X: Save the warning in the logs, which will be shown again at the end +cat msg >>config.msg +echo " " >>config.msg +rm -f msg +EOS +chmod +x warn +$eunicefix warn + diff --git a/mcon/U/Warn_v7EXT.U b/mcon/U/Warn_v7EXT.U new file mode 100644 index 0000000..d015400 --- /dev/null +++ b/mcon/U/Warn_v7EXT.U @@ -0,0 +1,34 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: Warn_v7EXT.U,v $ +?RCS: Revision 3.0.1.1 1994/10/29 16:01:42 ram +?RCS: patch36: call ./v7 explicitely instead of relying on PATH +?RCS: +?RCS: Revision 3.0 1993/08/18 12:05:17 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?X: +?X: This unit issues warnings to V7 sites that they are living dangerously. +?X: This unit needs to get mentioned in End.U to get included. +?X: +?MAKE:Warn_v7EXT: package Guess +?MAKE: -pick add $@ %< +: Warnings +if ./v7; then + cat <<EOM + +NOTE: the V7 compiler may ignore some #undefs that $package uses. If so, +you may get messages about redefining EXT. Some V7 compilers also have +difficulties with #defines near buffer boundaries, so beware. You may have +to play with the spacing in some .h files, believe it or not. +EOM +fi + diff --git a/mcon/U/Warn_v7ND.U b/mcon/U/Warn_v7ND.U new file mode 100644 index 0000000..d7ef599 --- /dev/null +++ b/mcon/U/Warn_v7ND.U @@ -0,0 +1,33 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: Warn_v7ND.U,v $ +?RCS: Revision 3.0.1.1 1994/10/29 16:01:46 ram +?RCS: patch36: call ./v7 explicitely instead of relying on PATH +?RCS: +?RCS: Revision 3.0 1993/08/18 12:05:18 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?X: +?X: This unit warns V7 sites that they may not have a non-blocking read. +?X: This unit needs to be mentioned in End.U to get included. +?X: +?MAKE:Warn_v7ND: package Guess +?MAKE: -pick add $@ %< +: Warnings +if ./v7; then + cat <<EOM + +NOTE: many V7 systems do not have a way to do a non-blocking read. If you +don't have any of FIONREAD, O_NDELAY, or rdchk(), the $package package +may not work as well as it might. It might not work at all. +EOM +fi + diff --git a/mcon/U/Whoa.U b/mcon/U/Whoa.U new file mode 100644 index 0000000..7519fac --- /dev/null +++ b/mcon/U/Whoa.U @@ -0,0 +1,51 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: Whoa.U,v $ +?RCS: Revision 3.0.1.2 1997/02/28 15:21:21 ram +?RCS: patch61: whoa script now starts with leading "startsh" +?RCS: +?RCS: Revision 3.0.1.1 1994/10/29 16:02:01 ram +?RCS: patch36: added ?F: line for metalint file checking +?RCS: +?RCS: Revision 3.0 1993/08/18 12:05:19 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?X: +?X: This unit produces a bit of shell code that must be dotted in in order +?X: to warn the user in case a change into a variable is noticed. +?X: +?X: To use this unit, $was must hold the old value that has changed. Upon +?X: exit, the two variables $td and $tu are set to the correct value for +?X: respectively defining or undefining a variable. For instance, if $vas was +?X: $undef, but now $var is $define, after calling . whoa, you should use +?X: eval "$var=\$tu" to finally set $var to the correct value. See unit Inlibc. +?X: +?MAKE:Whoa: Myread startsh hint +?MAKE: -pick add $@ %< +?F:./whoa +?T:var was +?LINT:change td tu +: set up the script used to warn in case of inconsistency +cat <<EOS >whoa +$startsh +EOS +cat <<'EOSC' >>whoa +dflt=y +echo " " +echo "*** WHOA THERE!!! ***" >&4 +echo " The $hint value for \$$var on this machine was \"$was\"!" >&4 +rp=" Keep the $hint value?" +. ./myread +case "$ans" in +y) td=$was; tu=$was;; +esac +EOSC + diff --git a/mcon/U/abortsig.U b/mcon/U/abortsig.U new file mode 100644 index 0000000..a13f30f --- /dev/null +++ b/mcon/U/abortsig.U @@ -0,0 +1,79 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: abortsig.U,v $ +?RCS: Revision 3.0.1.1 1994/10/29 16:02:19 ram +?RCS: patch36: call ./usg explicitely instead of relying on PATH +?RCS: +?RCS: Revision 3.0 1993/08/18 12:05:20 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:abortsig: Myread Oldconfig Guess cat +cc ccflags rm +?MAKE: -pick add $@ %< +?S:abortsig: +?S: This variable holds the name of the signal used by the abort() call. +?S:. +?C:ABORTSIG: +?C: This symbol holds the signal number (symbol) used by the abort() call. To +?C: actually define the signal symbol, <signal.h> should be included. +?C:. +?H:#define ABORTSIG $abortsig /**/ +?H:. +?T:signal +: which signal is sent by abort ? +echo " " +case "$abortsig" in +'') + echo "Checking to see which signal is sent to the process by abort()..." >&4 + echo "abort" > abort.sh + chmod +x abort.sh +?X: SIGABRT should replace SIGIOT on USG machines in a near future (1991). + for signal in SIGIOT SIGILL SIGABRT; do + case "$abortsig" in + '') $cat >abort.c <<EOP +#include <signal.h> +caught() { exit(0); } +int main() +{ +#ifdef $signal + signal($signal, caught); +#endif + if (-1 == abort()) + exit(1); + exit(1); +} +EOP +?X: We have to use the abort.sh script otherwise sh behaves strangely on AIX. + if $cc $ccflags -o abort abort.c >/dev/null 2>&1; then + (./abort.sh) >/dev/null 2>&1 + case $? in + 0) abortsig="$signal";; + esac + fi + ;; + esac + done + ;; +esac +case "$abortsig" in +'') echo "(I wasn't able to compute the signal name--guessing)" + if ./usg; then + dflt="SIGIOT" + else + dflt="SIGILL" + fi;; +*) dflt="$abortsig" + ;; +esac +rp="Which signal does abort() send to the process (signal name)?" +. ./myread +abortsig="$ans" +$rm -f core abort.sh abort abort.c + diff --git a/mcon/U/active.U b/mcon/U/active.U new file mode 100644 index 0000000..3a1a65c --- /dev/null +++ b/mcon/U/active.U @@ -0,0 +1,50 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: active.U,v $ +?RCS: Revision 3.0 1993/08/18 12:05:21 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:active activeexp: newslib Oldconfig Getfile +?MAKE: -pick add $@ %< +?S:active: +?S: The name of the active file for the news system. This file contains +?S: the list of active newsgroups. The name may have ~ on the front. +?S: The variable myactive is the expanded form. +?S:. +?S:activeexp (myactive): +?S: This is the same as the active variable, but is filename expanded +?S: so that later Configure units can look at the active file if desired. +?S:. +?C:ACTIVE: +?C: The name of the active file for the news system. This file contains +?C: the list of active newsgroups. The name may have ~ on the front. +?C:. +?C:ACTIVE_EXP: +?C: This is the same as ACTIVE, but is filename expanded at configuration +?C: time, for programs that do not want to deal with it themselves. +?C:. +?H:#define ACTIVE "$active" /**/ +?H:#define ACTIVE_EXP "$activeexp" /**/ +?H:. +: locate active file +echo " " +case "$active" in +'') + dflt=$newslib/active + ;; +*) dflt="$active";; +esac +fn=l~:active +rp='Where is the active file?' +. ./getfile +active="$ans" +activeexp="$ansexp" + diff --git a/mcon/U/afs.U b/mcon/U/afs.U new file mode 100644 index 0000000..4cf024b --- /dev/null +++ b/mcon/U/afs.U @@ -0,0 +1,55 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: afs.U,v $ +?RCS: Revision 3.0.1.2 1997/02/28 15:23:06 ram +?RCS: patch61: can now explicitely tell Configure whether AFS is running +?RCS: +?RCS: Revision 3.0.1.1 1993/08/24 12:24:43 ram +?RCS: patch3: created +?RCS: +?MAKE:afs afsroot: test +?MAKE: -pick add $@ %< +?S:afs: +?S: This variable is set to 'true' if AFS (Andrew File System) is used +?S: on the system, 'false' otherwise. It is possible to override this +?S: with a hint value or command line option, but you'd better know +?S: what you are doing. +?S:. +?S:afsroot: +?S: This variable is by default set to '/afs'. In the unlikely case +?S: this is not the correct root, it is possible to override this with +?S: a hint value or command line option. This will be used in subsequent +?S: tests for AFSness in the configure and test process. +?S:. +: allow them to override the AFS root +case "$afsroot" in +'') afsroot=/afs ;; +*) afsroot=$afsroot ;; +esac + +: is AFS running? +echo " " +case "$afs" in +$define|true) afs=true ;; +$undef|false) afs=false ;; +*) if $test -d $afsroot; then + afs=true + else + afs=false + fi + ;; +esac +if $afs; then + echo "AFS may be running... I'll be extra cautious then..." >&4 +else + echo "AFS does not seem to be running..." >&4 +fi + diff --git a/mcon/U/alignbytes.U b/mcon/U/alignbytes.U new file mode 100644 index 0000000..f31ec80 --- /dev/null +++ b/mcon/U/alignbytes.U @@ -0,0 +1,64 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: 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: Myread cat cc ccflags rm +?MAKE: -pick add $@ %< +?S:alignbytes: +?S: This variable holds the number of bytes required to align a +?S: double. Usual values are 2, 4 and 8. +?S:. +?X: This used to be called ALIGNBYTES, but that conflicts with +?X: <machines/param.h> in NetBSD. +?C:MEM_ALIGNBYTES (ALIGNBYTES): +?C: This symbol contains the number of bytes required to align a +?C: double. Usual values are 2, 4 and 8. +?C:. +?H:#define MEM_ALIGNBYTES $alignbytes /**/ +?H:. +?F:!try +: check for alignment requirements +echo " " +case "$alignbytes" in +'') echo "Checking alignment constraints..." >&4 + $cat >try.c <<'EOCP' +struct foobar { + char foo; + double bar; +} try; +int main() +{ + printf("%d\n", (char *)&try.bar - (char *)&try.foo); +} +EOCP + if $cc $ccflags try.c -o try >/dev/null 2>&1; then + dflt=`./try` + else + dflt='8' + echo "(I can't seem to compile the test program...)" + fi + ;; +*) dflt="$alignbytes" + ;; +esac +rp="Doubles must be aligned on a how-many-byte boundary?" +. ./myread +alignbytes="$ans" +$rm -f try.c try + diff --git a/mcon/U/archlib.U b/mcon/U/archlib.U new file mode 100644 index 0000000..d0c2b29 --- /dev/null +++ b/mcon/U/archlib.U @@ -0,0 +1,125 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu> +?RCS: +?RCS: $Log: archlib.U,v $ +?RCS: Revision 3.0.1.5 1997/02/28 15:23:38 ram +?RCS: patch61: skip existence checks for archlib +?RCS: +?RCS: Revision 3.0.1.4 1995/09/25 09:15:18 ram +?RCS: patch59: unit is now forced to the top of Configure, if possible +?RCS: +?RCS: Revision 3.0.1.3 1995/02/15 14:14:14 ram +?RCS: patch51: architecture name is now computed by a separate unit +?RCS: +?RCS: Revision 3.0.1.2 1995/01/30 14:32:22 ram +?RCS: patch49: archname is now systematically recomputed +?RCS: patch49: can now handle installation prefix changes (from WED) +?RCS: +?RCS: Revision 3.0.1.1 1994/10/29 16:02:36 ram +?RCS: patch36: created by ADO +?RCS: +?MAKE:d_archlib archlib archlibexp installarchlib: archname afs spackage \ + cat Getfile Loc Oldconfig prefixexp privlib test Prefixit Prefixup +?MAKE: -pick add $@ %< +?Y:TOP +?S:d_archlib: +?S: This variable conditionally defines ARCHLIB to hold the pathname +?S: of architecture-dependent library files for $package. If +?S: $archlib is the same as $privlib, then this is set to undef. +?S:. +?S:archlib: +?S: This variable holds the name of the directory in which the user wants +?S: to put architecture-dependent public library files for $package. +?S: It is most often a local directory such as /usr/local/lib. +?S: Programs using this variable must be prepared to deal +?S: with filename expansion. +?S:. +?S:archlibexp: +?S: This variable is the same as the archlib variable, but is +?S: filename expanded at configuration time, for convenient use. +?S:. +?S:installarchlib: +?S: This variable is really the same as archlibexp but may differ on +?S: those systems using AFS. For extra portability, only this variable +?S: should be used in makefiles. +?S:. +?C:ARCHLIB: +?C: This variable, if defined, holds the name of the directory in +?C: which the user wants to put architecture-dependent public +?C: library files for $package. It is most often a local directory +?C: such as /usr/local/lib. Programs using this variable must be +?C: prepared to deal with filename expansion. If ARCHLIB is the +?C: same as PRIVLIB, it is not defined, since presumably the +?C: program already searches PRIVLIB. +?C:. +?C:ARCHLIB_EXP: +?C: This symbol contains the ~name expanded version of ARCHLIB, to be used +?C: in programs that are not prepared to deal with ~ expansion at run-time. +?C:. +?H:#$d_archlib ARCHLIB "$archlib" /**/ +?H:#$d_archlib ARCHLIB_EXP "$archlibexp" /**/ +?H:. +: determine where public architecture dependent libraries go +set archlib archlib +eval $prefixit +case "$archlib" in +'') + case "$privlib" in + '') + dflt=`./loc . "." $prefixexp/lib /usr/local/lib /usr/lib /lib` + set dflt + eval $prefixup + ;; + *) dflt="$privlib/$archname";; + esac + ;; +*) dflt="$archlib";; +esac +cat <<EOM + +$spackage contains architecture-dependent library files. If you are +sharing libraries in a heterogeneous environment, you might store +these files in a separate location. Otherwise, you can just include +them with the rest of the public library files. + +EOM +fn=d+~ +rp='Where do you want to put the public architecture-dependent libraries?' +. ./getfile +archlib="$ans" +archlibexp="$ansexp" + +if $afs; then + $cat <<EOM + +Since you are running AFS, I need to distinguish the directory in which +private files reside from the directory in which they are installed (and from +which they are presumably copied to the former directory by occult means). + +EOM + case "$installarchlib" in + '') dflt=`echo $archlibexp | sed 's#^/afs/#/afs/.#'`;; + *) dflt="$installarchlib";; + esac + fn=de~ + rp='Where will architecture-dependent library files be installed?' + . ./getfile + installarchlib="$ans" +else + installarchlib="$archlibexp" +fi +if $test X"$archlib" = X"$privlib"; then + d_archlib="$undef" +else + d_archlib="$define" +fi + diff --git a/mcon/U/archname.U b/mcon/U/archname.U new file mode 100644 index 0000000..231e159 --- /dev/null +++ b/mcon/U/archname.U @@ -0,0 +1,76 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: archname.U,v $ +?RCS: Revision 3.0.1.3 1997/02/28 15:24:32 ram +?RCS: patch61: changed the way the archname is mangled from uname +?RCS: +?RCS: Revision 3.0.1.2 1995/05/12 12:05:24 ram +?RCS: patch54: protect against spaces in "uname -m" output (ADO) +?RCS: +?RCS: Revision 3.0.1.1 1995/02/15 14:14:21 ram +?RCS: patch51: created +?RCS: +?MAKE:archname myarchname: sed Loc Myread Oldconfig osname test rm +?MAKE: -pick add $@ %< +?S:archname: +?S: This variable is a short name to characterize the current +?S: architecture. It is used mainly to construct the default archlib. +?S:. +?S:myarchname: +?S: This variable holds the architecture name computed by Configure in +?S: a previous run. It is not intended to be perused by any user and +?S: should never be set in a hint file. +?S:. +?C:ARCHNAME: +?C: This symbol holds a string representing the architecture name. +?C: It may be used to construct an architecture-dependant pathname +?C: where library files may be held under a private library, for +?C: instance. +?C:. +?H:#define ARCHNAME "$archname" /**/ +?H:. +?T:xxx tarch +: determine the architecture name +echo " " +?X: We always recompute archname in case osname changes. However, we need +?X: to be careful since, as ADO rightfully pointed out, some systems pick +?X: silly architecture names (0001307135000-aix on AIX or 9000/715-ux under +?X: HP-UX). Therefore, we allow hint files to superseed our guess and ask +?X: the user for confirmation. +if xxx=`./loc arch blurfl $pth`; $test -f "$xxx"; then + tarch=`arch`"-$osname" +elif xxx=`./loc uname blurfl $pth`; $test -f "$xxx" ; then + if uname -m > tmparch 2>&1 ; then + tarch=`$sed -e 's/ *$//' -e 's/ /_/g' \ + -e 's/$/'"-$osname/" tmparch` + else + tarch="$osname" + fi + $rm -f tmparch +else + tarch="$osname" +fi +case "$myarchname" in +''|"$tarch") ;; +*) + echo "(Your architecture name used to be $myarchname.)" + archname='' + ;; +esac +case "$archname" in +'') dflt="$tarch";; +*) dflt="$archname";; +esac +rp='What is your architecture name' +. ./myread +archname="$ans" +myarchname="$tarch" + diff --git a/mcon/U/baserev.U b/mcon/U/baserev.U new file mode 100644 index 0000000..3fc675c --- /dev/null +++ b/mcon/U/baserev.U @@ -0,0 +1,22 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: baserev.U,v $ +?RCS: Revision 3.0 1993/08/18 12:05:24 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:baserev: Null +?MAKE: -pick wipe $@ %< +?S:baserev: +?S: The base revision level of this package, from the .package file. +?S:. +: set the base revision +baserev=<BASEREV> + diff --git a/mcon/U/basicshell.U b/mcon/U/basicshell.U new file mode 100644 index 0000000..b5ccfbc --- /dev/null +++ b/mcon/U/basicshell.U @@ -0,0 +1,47 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: basicshell.U,v $ +?RCS: Revision 3.0 1993/08/18 12:05:25 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:basicshell: Getfile Oldconfig bash csh ksh sh +?MAKE: -pick add $@ %< +?S:basicshell: +?S: This variable contains the eventual value of the BASICSHELL symbol, +?S: which contains the full name of the basic script shell on this +?S: system. Usual values are /bin/sh, /bin/ksh, /bin/csh. +?S:. +?C:BASICSHELL: +?C: This symbol contains the full name of the basic script shell on this +?C: system. Usual values are /bin/sh, /bin/ksh, /bin/csh. +?C:. +?H:#define BASICSHELL "$basicshell" /**/ +?H:. +: find the most basic shell for scripts +echo " " +case "$basicshell" in +'') + case "$sh $bash $csh $ksh" in + */sh*) dflt="$sh" ;; + */ksh*) dflt="$ksh" ;; + */csh*) dflt="$csh" ;; + */bash*) dflt="$bash" ;; + *) dflt='/bin/sh' ;; + esac + ;; +*) + dflt="$basicshell";; +esac +fn=f +rp="Give the full path name of the most basic shell used on your system" +. ./getfile +basicshell=$ans + diff --git a/mcon/U/bin.U b/mcon/U/bin.U new file mode 100644 index 0000000..81c0a96 --- /dev/null +++ b/mcon/U/bin.U @@ -0,0 +1,88 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: 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 explicitely prompted for it. This variable should always +?S: be used in your makefiles for maximum portability. +?S:. +?C:BIN: +?C: This symbol holds the path of the bin directory where the package will +?C: be installed. Program must be prepared to deal with ~name substitution. +?C:. +?C:BIN_EXP: +?C: This symbol is the filename expanded version of the BIN symbol, for +?C: programs that do not want to deal with that at run-time. +?C:. +?H:#define BIN "$bin" /**/ +?H:#define BIN_EXP "$binexp" /**/ +?H:. +?D:bin='/usr/local/bin' +: determine where public executables go +echo " " +set dflt bin bin +eval $prefixit +fn=d~ +rp='Pathname where the public executables will reside?' +. ./getfile +if $test "X$ansexp" != "X$binexp"; then + installbin='' +fi +bin="$ans" +binexp="$ansexp" +if $afs; then + $cat <<EOM + +Since you are running AFS, I need to distinguish the directory in which +executables reside from the directory in which they are installed (and from +which they are presumably copied to the former directory by occult means). + +EOM + case "$installbin" in + '') dflt=`echo $binexp | sed 's#^/afs/#/afs/.#'`;; + *) dflt="$installbin";; + esac + fn=de~ + rp='Where will public executables be installed?' + . ./getfile + installbin="$ans" +else + installbin="$binexp" +fi + diff --git a/mcon/U/bitpbyte.U b/mcon/U/bitpbyte.U new file mode 100644 index 0000000..c56ac01 --- /dev/null +++ b/mcon/U/bitpbyte.U @@ -0,0 +1,74 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: bitpbyte.U,v $ +?RCS: Revision 3.0.1.1 1994/10/29 16:02:54 ram +?RCS: patch36: added ?F: line for metalint file checking +?RCS: +?RCS: Revision 3.0 1993/08/18 12:05:27 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:bitpbyte: cat rm Myread +cc +ccflags +?MAKE: -pick add $@ %< +?S:bitpbyte: +?S: This variable contains the value of the BITS_PER_BYTE symbol, which +?S: indicates to the C program how many bits there are in a byte. +?S:. +?C:BITS_PER_BYTE: +?C: This symbol contains the number of bits in a byte, so that the C +?C: preprocessor can make decisions based on it. +?C:. +?H:#define BITS_PER_BYTE $bitpbyte /**/ +?H:. +?F:!try +: check for length of byte +echo " " +case "$bitpbyte" in +'') + echo "Checking to see how many bits there are in a byte..." >&4 + $cat >try.c <<'EOCP' +#include <stdio.h> +?X: Standard C requires a macro CHAR_BIT in <limits.h> +#ifdef __STDC__ +#include <limits.h> +#ifndef CHAR_BIT +#define CHAR_BIT 8 +#endif +#ifndef BITSPERBYTE +#define BITSPERBYTE CHAR_BIT +#endif +#else +?X: On non standard C, try with <values.h> +#include <values.h> +#ifndef BITSPERBYTE +#define BITSPERBYTE 8 +#endif +#endif +int main() +{ + printf("%d\n", BITSPERBYTE); +} +EOCP + if $cc $ccflags -o try try.c >/dev/null 2>&1 ; then + dflt=`./try` + else + dflt='8' + echo "(I can't seem to compile the test program. Guessing...)" + fi + ;; +*) + dflt="$bitpbyte" + ;; +esac +rp="What is the length of a byte (in bits)?" +. ./myread +bitpbyte="$ans" +$rm -f try.c try + diff --git a/mcon/U/byteorder.U b/mcon/U/byteorder.U new file mode 100644 index 0000000..a337080 --- /dev/null +++ b/mcon/U/byteorder.U @@ -0,0 +1,99 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: byteorder.U,v $ +?RCS: Revision 3.0.1.2 1997/02/28 15:24:55 ram +?RCS: patch61: no longer ask the user if the test runs ok +?RCS: +?RCS: Revision 3.0.1.1 1994/10/29 16:02:58 ram +?RCS: patch36: added ?F: line for metalint file checking +?RCS: +?RCS: Revision 3.0 1993/08/18 12:05:28 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:byteorder: cat Myread Oldconfig Loc +cc +ccflags rm +?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, or 87654321 +?S: on a Cray ... or 3412 with weird order ! +?S:. +?C:BYTEORDER: +?C: This symbol hold the hexadecimal constant defined in byteorder, +?C: i.e. 0x1234 or 0x4321, etc... +?C:. +?H:#define BYTEORDER 0x$byteorder /* large digits for MSB */ +?H:. +?T:xxx_prompt +?F:!try +: check for ordering of bytes in a long +case "$byteorder" in +'') + $cat <<'EOM' + +In the following, larger digits indicate more significance. A big-endian +machine like a Pyramid or a Motorola 680?0 chip will come out to 4321. A +little-endian machine like a Vax or an Intel 80?86 chip would be 1234. Other +machines may have weird orders like 3412. A Cray will report 87654321. If +the test program works the default is probably right. +I'm now running the test program... +EOM + $cat >try.c <<'EOCP' +#include <stdio.h> +int main() +{ + int i; + union { + unsigned long l; + char c[sizeof(long)]; + } u; + + if (sizeof(long) > 4) + u.l = (0x08070605L << 32) | 0x04030201L; + else + u.l = 0x04030201L; + for (i = 0; i < sizeof(long); i++) + printf("%c", u.c[i]+'0'); + printf("\n"); + exit(0); +} +EOCP + xxx_prompt=y + if $cc $ccflags -o try try.c >/dev/null 2>&1 && ./try > /dev/null; then + dflt=`./try` + case "$dflt" in + [1-4][1-4][1-4][1-4]|12345678|87654321) + echo "(The test program ran ok.)" + echo "byteorder=$dflt" + xxx_prompt=n + ;; + ????|????????) echo "(The test program ran ok.)" ;; + *) echo "(The test program didn't run right for some reason.)" ;; + esac + else + dflt='4321' + cat <<'EOM' +(I can't seem to compile the test program. Guessing big-endian...) +EOM + fi + case "$xxx_prompt" in + y) + rp="What is the order of bytes in a long?" + . ./myread + byteorder="$ans" + ;; + *) byteorder=$dflt + ;; + esac + ;; +esac +$rm -f try.c try + diff --git a/mcon/U/cc.U b/mcon/U/cc.U new file mode 100644 index 0000000..15366ff --- /dev/null +++ b/mcon/U/cc.U @@ -0,0 +1,58 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: cc.U,v $ +?RCS: Revision 3.0.1.4 1995/05/12 12:06:47 ram +?RCS: patch54: may now abort Configure when cc does not work +?RCS: +?RCS: Revision 3.0.1.3 1995/01/11 15:20:11 ram +?RCS: patch45: changed gcc checking message to a more explicit one (WED) +?RCS: +?RCS: Revision 3.0.1.2 1994/10/29 16:04:29 ram +?RCS: patch36: detect gcc even when not called as 'gcc' (ADO) +?RCS: patch36: simplified gcc version checking (ADO) +?RCS: patch36: added ?F: line for metalint file checking +?RCS: +?RCS: Revision 3.0.1.1 1994/05/06 14:26:06 ram +?RCS: patch23: added support for gcc version (ADO) +?RCS: +?RCS: Revision 3.0 1993/08/18 12:05:30 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:cc: Myread Oldconfig Checkcc test +?MAKE: -pick add $@ %< +?S:cc: +?S: This variable holds the name of a command to execute a C compiler which +?S: can resolve multiple global references that happen to have the same +?S: name. Usual values are 'cc' and 'gcc'. +?S: Fervent ANSI compilers may be called 'c89'. AIX has xlc. +?S:. +?F:!cc.cbu +?D:cc='cc' +: Determine the C compiler to be used +echo " " +case "$cc" in +'') dflt=cc;; +*) dflt="$cc";; +esac +rp="Use which C compiler?" +. ./myread +cc="$ans" + +: See whether they have no cc but they do have gcc +. ./trygcc +?X: Look for a hint-file generated 'call-back-unit'. Now that the +?X: user has specified the compiler, we may need to set or change some +?X: other defaults. +if $test -f cc.cbu; then + . ./cc.cbu +fi +. ./checkcc + diff --git a/mcon/U/ccflags.U b/mcon/U/ccflags.U new file mode 100644 index 0000000..8e61474 --- /dev/null +++ b/mcon/U/ccflags.U @@ -0,0 +1,403 @@ +?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: 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 versionning 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: explicitely 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 locincpth: test cat \ + Myread Guess Options Oldconfig gccversion mips_type +usrinc \ + package contains rm +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: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='' +?INIT:: Possible local include directories to search. +?INIT:: Set locincpth to "" in a hint file to defeat local include searches. +?INIT:locincpth="/usr/local/include /opt/local/include /usr/gnu/include" +?INIT:locincpth="$locincpth /opt/gnu/include /usr/GNU/include /opt/GNU/include" +?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';; +'') dflt='-O';; +*) dflt="$optimize";; +esac +$cat <<EOH + +Some C compilers have problems with their optimizers. By default, $package +compiles with the -O flag to use the optimizer. Alternately, you might want +to use the symbolic debugger, which uses the -g flag (on traditional Unix +systems). Either flag can be specified here. To use neither flag, specify +the word "none". + +EOH +rp="What optimizer/debugger flag should be used?" +. ./myread +optimize="$ans" +case "$optimize" in +'none') optimize=" ";; +esac + +dflt='' +: We will not override a previous value, but we might want to +: augment a hint file +case "$hint" in +default|recommended) + case "$gccversion" in + 1*) dflt='-fpcc-struct-return' ;; + esac +?X: check for POSIXized ISC + case "$gccversion" in + 2*) if test -d /etc/conf/kconfig.d && + $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1 + then + dflt="$dflt -posix" + fi + ;; + esac +?X: turn warnings on if they're using gcc + case "$gccversion" in + 1*|2*) dflt="$dflt -Wall";; +?X: starting with version 3, add "-W -Wall -Wformat=2" by default + *) dflt="$dflt -W -Wall -Wformat=2";; + 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="$ccflags $dflt" ;; +*) dflt="$ccflags";; +esac + +case "$dflt" in +''|' ') dflt=none;; +esac +$cat <<EOH + +Your C compiler may want other flags. For this question you should include +-I/whatever and -DWHATEVER flags and any other flags used by the C compiler, +but you should NOT include libraries or ld flags like -lwhatever. + +To use no flags, specify the word "none". + +EOH +?X: strip leading space +set X $dflt +shift +dflt=${1+"$@"} +rp="Any additional cc flags?" +. ./myread +case "$ans" in +none) ccflags='';; +*) ccflags="$ans";; +esac + +: the following weeds options from ccflags that are of no interest to cpp +cppflags="$ccflags" +case "$gccversion" in +1*) cppflags="$cppflags -D__GNUC__" +esac +case "$mips_type" in +'');; +*BSD*) cppflags="$cppflags -DSYSTYPE_BSD43";; +esac +case "$cppflags" in +'');; +*) + echo " " + echo "Let me guess what the preprocessor flags are..." >&4 + set X $cppflags + shift + cppflags='' + $cat >cpp.c <<'EOM' +#define BLURFL foo + +BLURFL xx LFRULB +EOM +?X: +?X: For each cc flag, try it out with both cppstdin and cpprun, since the +?X: first is almost surely a cc wrapper. We have to try both in case +?X: of cc flags like '-Olimit 2900' that are actually two words... +?X: + previous='' + for flag in $* + do + case "$flag" in + -*) ftry="$flag";; + *) ftry="$previous $flag";; + esac + if $cppstdin -DLFRULB=bar $ftry $cppminus <cpp.c \ + >cpp1.out 2>/dev/null && \ + $cpprun -DLFRULB=bar $ftry $cpplast <cpp.c \ + >cpp2.out 2>/dev/null && \ + $contains 'foo.*xx.*bar' cpp1.out >/dev/null 2>&1 && \ + $contains 'foo.*xx.*bar' cpp2.out >/dev/null 2>&1 + then + cppflags="$cppflags $ftry" + previous='' + else + previous="$flag" + fi + done + set X $cppflags + shift + cppflags=${1+"$@"} + case "$cppflags" in + *-*) echo "They appear to be: $cppflags";; + esac + $rm -f cpp.c cpp?.out + ;; +esac + +: flags used in final linking phase +case "$ldflags" in +'') if ./venix; then + dflt='-i -z' + else + dflt='' + fi + case "$ccflags" in + *-posix*) dflt="$dflt -posix" ;; + esac + ;; +*) dflt="$ldflags";; +esac + +: Try to guess additional flags to pick up local libraries. +for thislibdir in $libpth; do + case " $loclibpth " in + *" $thislibdir "*) + case "$dflt " in + *"-L$thislibdir "*) ;; + *) dflt="$dflt -L$thislibdir" ;; + esac + ;; + esac +done + +case "$dflt" in +'') dflt='none' ;; +*) set X $dflt; shift; dflt="$@";; +esac + +$cat <<EOH + +Your C linker may need flags. For this question you should +include -L/whatever and any other flags used by the C linker, but you +should NOT include libraries like -lwhatever. + +Make sure you include the appropriate -L/path flags if your C linker +does not normally search all of the directories you specified above, +namely + $libpth +To use no flags, specify the word "none". + +EOH + +rp="Any additional ld flags (NOT including libraries)?" +. ./myread +case "$ans" in +none) ldflags='';; +*) ldflags="$ans";; +esac +rmlist="$rmlist pdp11" + +@if lkflags +: partial linking may need other flags +case "$lkflags" in +'') case "$ldflags" in + '') dflt='none';; + *) dflt="$ldflags";; + esac;; +*) dflt="$lkflags";; +esac +echo " " +rp="Partial linking flags to be used (NOT including -r)?" +. ./myread +case "$ans" in +none) lkflags='';; +*) lkflags="$ans";; +esac + +@end +?X: +?X: If the user changes compilers after selecting a hint file, it's +?X: possible that the suggested ccflags/ldflags will be wrong. Try to +?X: compile and run a simple test program. Let the user see all the +?X: error messages. -- ADO and RAM +?X: +: coherency check +echo " " +echo "Checking your choice of C compiler and flags for coherency..." >&4 +?X: Strip extra blanks in case some of the following variables are empty +set X $cc $optimize $ccflags $ldflags -o try try.c +shift +$cat >try.msg <<EOM +I've tried to compile and run a simple program with: + + $* + ./try + +and I got the following output: + +EOM +$cat > try.c <<'EOF' +#include <stdio.h> +int main() { exit(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 -f try try.* core + diff --git a/mcon/U/cf_email.U b/mcon/U/cf_email.U new file mode 100644 index 0000000..caad32e --- /dev/null +++ b/mcon/U/cf_email.U @@ -0,0 +1,58 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: 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 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 +: determine the e-mail address of the user who is running us +$cat <<EOM + +I need to get your e-mail address in Internet format if possible, i.e. +something like user@host.domain. Please answer accurately since I have +no easy means to double check it. The default value provided below +is most probably close to reality but may not be valid from outside +your organization... + +EOM +cont=x +while test "$cont"; do + case "$cf_email" in + '') dflt="$cf_by@$myhostname$mydomain";; + *) dflt="$cf_email";; + esac + rp='What is your e-mail address?' + . ./myread + cf_email="$ans" + case "$cf_email" in + *@*.*) cont='' ;; + *) + rp='Address does not look like an Internet one. Use it anyway?' + case "$fastread" in + yes) dflt=y ;; + *) dflt=n ;; + esac + . ./myread + case "$ans" in + y*) cont='' ;; + *) echo " " ;; + esac + ;; + esac +done + diff --git a/mcon/U/cf_name.U b/mcon/U/cf_name.U new file mode 100644 index 0000000..c1ea650 --- /dev/null +++ b/mcon/U/cf_name.U @@ -0,0 +1,72 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: Original Author: Graham Stoney <greyham@research.canon.oz.au> +?RCS: +?RCS: $Log: cf_name.U,v $ +?RCS: Revision 3.0.1.2 1994/05/06 14:29:36 ram +?RCS: patch23: fixed user name computation from /etc/passwd in bsd systems +?RCS: +?RCS: Revision 3.0.1.1 1994/01/24 14:05:11 ram +?RCS: patch16: created +?RCS: +?RCS: +?MAKE:+cf_name: cf_by passcat Filexp nametype cat test +?MAKE: -pick add $@ %< +?S:cf_name: +?S: Full name of the person who ran the Configure script and answered the +?S: questions. This can be used by units that require the user's full name. +?S: This variable is for internal use only. +?S:. +?T:xxx fn NAME +: figure out their full name +case "$NAME" in +'') case "$nametype" in + other) + fn=`./filexp ~/.fullname` + xxx=usg + $test -f $fn && xxx=other + ;; + *) + xxx="$nametype" + ;; + esac + + case "$xxx" in + bsd) + cf_name=`$passcat | grep "^$cf_by:" | \ + sed -e 's/^[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\):.*/\1/' \ + -e 's/,.*//'` + ;; + usg) + cf_name=`$passcat | grep "^$cf_by:" | \ + sed -e 's/^[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\):.*/\1/' \ + -e 's/[^-]*-\(.*\)(.*)/\1/'` + ;; + *) + cf_name=`$cat $fn` + ;; + esac + ;; +*) + cf_name="$NAME" + ;; +esac +?X: +?X: In the original unit, Graham asked for the user name, in case the above +?X: code was unable to figure it out correctly. Since now cf_name has been +?X: made an internal variable only (i.e. it is not saved in config.sh), letting +?X: the user override the computed default each time would be a pain. +?X: Therefore, I have decided to trust the above code to get it right, and for +?X: those rare cases where it will fail, too bad :-) --RAM. +?X: +echo " " +echo "Pleased to meet you, $cf_name." + diff --git a/mcon/U/cf_who.U b/mcon/U/cf_who.U new file mode 100644 index 0000000..2643d24 --- /dev/null +++ b/mcon/U/cf_who.U @@ -0,0 +1,62 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: 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: Parens 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. +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 + diff --git a/mcon/U/charorder.U b/mcon/U/charorder.U new file mode 100644 index 0000000..8ed5428 --- /dev/null +++ b/mcon/U/charorder.U @@ -0,0 +1,143 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: charorder.U,v $ +?RCS: Revision 3.0.1.1 1994/10/29 16:07:08 ram +?RCS: patch36: added ?F: line for metalint file checking +?RCS: +?RCS: Revision 3.0 1993/08/18 12:05:33 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:chorder_int chorder_short chorder_long: Myread cat +cc +ccflags rm +?MAKE: -pick add $@ %< +?S:chorder_short (d_cos d_bos): +?S: Holds the value describing the byte ordering of characters in a short. +?S: On a Big-Endian machine, that would be "c0c1". +?S:. +?S:chorder_int (charoder): +?S: Holds the value describing the byte ordering of characters in an int. +?S: For instance, on a Big-Endian machine, this would be: "c0c1c2c3". +?S:. +?S:chorder_long (d_col d_bol): +?S: Holds the value describing the byte ordering of characters in a long. +?S: On a 64 bits Big-Endian machine, that would yield: "c0c1c2c3c4c5c6c7". +?S:. +?C:CHAR_ORDER_SHORT: +?C: Holds the byte ordering of characters in a short. It's a string +?C: value like "c0c1" on a Big-Endian machine. +?C:. +?C:CHAR_ORDER_INT: +?C: Holds the byte ordering of characters in an int. It's a string +?C: value like "c0c1c2c3" on a Big-Endian machine. +?C:. +?C:CHAR_ORDER_LONG: +?C: Holds the byte ordering of characters in a long. It's a string +?C: value like "c0c1c2c3c4c5c6c7" on a 64 bits Big-Endian machine. +?C:. +?H:#define CHAR_ORDER_SHORT "$chorder_short" /* byte order in a short */ +?H:#define CHAR_ORDER_INT "$chorder_int" /* byte order in an int */ +?H:#define CHAR_ORDER_LONG "$chorder_long" /* byte order in a long */ +?H:. +?F:!byteorder +: check for character ordering +echo " " +echo "Checking out byte order..." >&4 +$cat >byteorder.c <<'EOCP' +#include <stdio.h> + +main(argc, argv) + int argc; + char *argv[]; { + int i; + int max; + union { + short u_s; + int u_i; + long u_l; + char u_c[sizeof(long)]; + } u; + switch (argv[1][0]) { + case 'l': + u.u_l = 0L; + /* HMS: ASSERT: sizeof(long) < 10. */ + for(i = 0; i < sizeof(long); ++i) { + u.u_l *= 0x100L; + u.u_l += (0xc0 + i); + } + max = sizeof(long); + break; + case 's': + u.u_s = 0; + /* HMS: ASSERT: sizeof(short) < 10. */ + for(i = 0; i < sizeof(short); ++i) { + u.u_s *= 0x100L; + u.u_s += (0xc0 + i); + } + max = sizeof(short); + break; + case 'i': + u.u_i = 0; + /* RAM: ASSERT: sizeof(int) < 10. */ + for(i = 0; i < sizeof(int); ++i) { + u.u_l *= 0x100L; + u.u_l += (0xc0 + i); + } + max = sizeof(int); + break; + default: + max = 0; + break; + } + for(i = 0; i < max; i++) { + printf("%x", u.u_c[i] & 0x00FF); + } + printf("\n"); + exit(0); +} +EOCP +if $cc $ccflags -o byteorder byteorder.c >/dev/null 2>&1 ; then + : null statement +@if chorder_short + chorder_short=`./byteorder s` +@end +@if chorder_int + chorder_int=`./byteorder i` +@end +@if chorder_long + chorder_long=`./byteorder l` +@end +else + $cat <<EOM +(I can't seem to get my test program to work. Guessing 32 bits big-endian.) +EOM + chorder_short="c0c1" + chorder_int="c0c1c2c3" + chorder_long="c0c1c2c3" +fi +@if chorder_short +dflt=$chorder_short +rp='What is the order of characters in a short?' +. ./myread +chorder_short="$ans" +@end +@if chorder_int +dflt=$chorder_int +rp='What is the order of characters in an int?' +. ./myread +chorder_int="$ans" +@end +@if chorder_long +dflt=$chorder_long +rp='What is the order of characters in a long?' +. ./myread +chorder_long="$ans" +@end +$rm -f byteorder* core + diff --git a/mcon/U/charsize.U b/mcon/U/charsize.U new file mode 100644 index 0000000..ba6b9b3 --- /dev/null +++ b/mcon/U/charsize.U @@ -0,0 +1,58 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: charsize.U,v $ +?RCS: Revision 3.0.1.1 1994/10/29 16:07:13 ram +?RCS: patch36: added ?F: line for metalint file checking +?RCS: +?RCS: Revision 3.0 1993/08/18 12:05:34 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:charsize: cat rm Myread +cc +ccflags +?MAKE: -pick add $@ %< +?S:charsize: +?S: This variable contains the value of the CHARSIZE symbol, which +?S: indicates to the C program how many bytes there are in a character. +?S:. +?C:CHARSIZE: +?C: This symbol contains the size of a char, so that the C preprocessor +?C: can make decisions based on it. +?C:. +?H:#define CHARSIZE $charsize /**/ +?H:. +?F:!try +: check for length of character +echo " " +case "$charsize" in +'') + echo "Checking to see how big your characters are..." >&4 + $cat >try.c <<'EOCP' +#include <stdio.h> +int main() +{ + printf("%d\n", sizeof(char)); +} +EOCP + if $cc $ccflags -o try try.c >/dev/null 2>&1 ; then + dflt=`./try` + else + dflt='1' + echo "(I can't seem to compile the test program. Guessing...)" + fi + ;; +*) + dflt="$charsize" + ;; +esac +rp="What is the size of a character (in bytes)?" +. ./myread +charsize="$ans" +$rm -f try.c try + diff --git a/mcon/U/contains.U b/mcon/U/contains.U new file mode 100644 index 0000000..fcfd216 --- /dev/null +++ b/mcon/U/contains.U @@ -0,0 +1,43 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: contains.U,v $ +?RCS: Revision 3.0 1993/08/18 12:05:35 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:contains: Nothing +?MAKE: -pick add $@ %< +?S:contains: +?S: This variable holds the command to do a grep with a proper return +?S: status. On most sane systems it is simply "grep". On insane systems +?S: it is a grep followed by a cat followed by a test. This variable +?S: is primarily for the use of other Configure units. +?S:. +: Some greps do not return status, grrr. +echo "grimblepritz" >grimble +if grep blurfldyick grimble >/dev/null 2>&1 ; then + contains=contains +elif grep grimblepritz grimble >/dev/null 2>&1 ; then + contains=grep +else + contains=contains +fi +rm -f grimble +: the following should work in any shell +case "$contains" in +contains*) + echo " " + echo "AGH! Grep doesn't return a status. Attempting remedial action." + cat >contains <<'EOSS' +grep "$1" "$2" >.greptmp && cat .greptmp && test -s .greptmp +EOSS +chmod +x contains +esac + diff --git a/mcon/U/cpp_stuff.U b/mcon/U/cpp_stuff.U new file mode 100644 index 0000000..2473ef2 --- /dev/null +++ b/mcon/U/cpp_stuff.U @@ -0,0 +1,157 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: cpp_stuff.U,v $ +?RCS: Revision 3.0.1.2 1997/02/28 15:30:48 ram +?RCS: patch61: added cute quoting trick for wild stringify support +?RCS: +?RCS: Revision 3.0.1.1 1994/10/29 16:08:24 ram +?RCS: patch36: now uses cppstdin instead of plain cpp for consistency (ADO) +?RCS: patch36: remove temporary files when done +?RCS: +?RCS: Revision 3.0 1993/08/18 12:05:36 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:cpp_stuff cpp_quote: cat contains cppstdin cppflags cppminus rm Warn \ + package +?MAKE: -pick add $@ %< +?S:cpp_stuff: +?S: This variable contains an identification of the catenation mechanism +?S: used by the C preprocessor. +?S:. +?S:cpp_quote: +?S: This variable is set to either '"' or '' depending on whether the +?S: pre-processor pre-dates ANSI or not. It is used in the production of +?S: the SQuoTe() and EQuoTe() macros, and was introduced to overcome a bug +?S: in gcc 3.x whereby the pre-processor complained loudly about the +?S: unterminated strings. +?S:. +?C:CAT2: +?C: This macro catenates 2 tokens together. +?C:. +?C:CAT3: +?C: This macro catenates 3 tokens together. +?C:. +?C:CAT4: +?C: This macro catenates 4 tokens together. +?C:. +?C:CAT5: +?C: This macro catenates 5 tokens together. +?C:. +?C:STRINGIFY: +?C: This macro surrounds its token with double quotes. +?C:. +?C:SCAT2: +?C: This macro catenates 2 tokens together and stringifies the result. +?C:. +?C:SCAT3: +?C: This macro catenates 3 tokens together and stringifies the result. +?C:. +?C:SCAT4: +?C: This macro catenates 4 tokens together and stringifies the result. +?C:. +?C:SCAT5: +?C: This macro catenates 5 tokens together and stringifies the result. +?C:. +?H:?%<:#if $cpp_stuff == 1 +?H:?CAT2:#define CAT2(a,b)a/**/b +?H:?CAT3:#define CAT3(a,b,c)a/**/b/**/c +?H:?CAT4:#define CAT4(a,b,c,d)a/**/b/**/c/**/d +?H:?CAT5:#define CAT5(a,b,c,d,e)a/**/b/**/c/**/d/**/e +?H:?STRINGIFY:#define STRINGIFY(a)"a" +?H:?%<:#define SQuoTe(a)${cpp_quote}a +?H:?%<:#define EQuoTe(a)a${cpp_quote} +?H:?SCAT2:#define SCAT2(a,b)EQuoTe(SQuoTe(a)b) +?H:?SCAT3:#define SCAT3(a,b,c)EQuoTe(SQuoTe(a)b/**/c) +?H:?SCAT4:#define SCAT4(a,b,c,d)EQuoTe(SQuoTe(a)b/**/c/**/d) +?H:?SCAT5:#define SCAT5(a,b,c,d,e)EQuoTe(SQuoTe(a)b/**/c/**/d/**/e) +?H:?%<:#endif +?H:?%<:#if $cpp_stuff == 42 +?X: The additional level of indirection enables these macros to be +?X: used as arguments to other macros. See K&R 2nd ed., page 231. +?H:?%<:#define CaTiFy(a,b) a ## b +?H:?%<:#define CAT2(a,b) CaTiFy(a,b) +?H:?CAT3:#define CAT3(a,b,c) CAT2(CaTiFy(a,b),c) +?H:?CAT4:#define CAT4(a,b,c,d) CAT2(CaTiFy(a,b), CaTiFy(c,d)) +?H:?CAT5:#define CAT5(a,b,c,d,e) CAT2(CAT2(CaTiFy(a,b), CaTiFy(c,d)), e) +?H:?%<:#define StGiFy(a)# a +?H:?STRINGIFY:#define STRINGIFY(a)StGiFy(a) +?H:?SCAT2:#define SCAT2(a,b)StGiFy(a) StGiFy(b) +?H:?SCAT3:#define SCAT3(a,b,c)StGiFy(a) StGiFy(b) StGiFy(c) +?H:?SCAT4:#define SCAT4(a,b,c,d)StGiFy(a) StGiFy(b) StGiFy(c) StGiFy(d) +?H:?SCAT5:#define SCAT5(a,b,c,d,e)StGiFy(a) StGiFy(b) StGiFy(c) StGiFy(d) StGiFy(e) +?H:?%<:#endif +?H:?%<:#if $cpp_stuff != 1 && $cpp_stuff != 42 +?H:?%<:#include "Bletch: How does this C preprocessor catenate tokens?" +?H:?%<:#endif +?H:. +?W:%<:CAT2 CAT3 CAT4 CAT5 STRINGIFY SCAT2 SCAT3 SCAT4 SCAT5 +?F:!cpp_stuff.c +?LINT:known StGiFy EQuoTe SQuoTe CaTiFy +: how do we catenate cpp tokens here? +echo " " +echo "Checking to see how your cpp does stuff like catenate tokens..." >&4 +cpp_quote='' +$cat >cpp_stuff.c <<'EOCP' +#define RCAT(a,b)a/**/b +#define ACAT(a,b)a ## b +RCAT(Rei,ser) +ACAT(Cir,cus) +EOCP +$cppstdin $cppflags $cppminus <cpp_stuff.c >cpp_stuff.out 2>&1 +if $contains 'Circus' cpp_stuff.out >/dev/null 2>&1; then + echo "Oh! Smells like ANSI's been here." + echo "We can catify or stringify, separately or together!" + cpp_stuff=42 +elif $contains 'Reiser' cpp_stuff.out >/dev/null 2>&1; then + echo "Ah, yes! The good old days!" + cpp_stuff=1 + $cat >cpp_stuff.c <<'EOCP' +#define SQuoTe(a)"a +#define EQuoTe(a)a" +#define CAT2(a,b)EQuoTe(SQuoTe(a)b) +CAT2(Vic,tory) +EOCP + $cppstdin $cppflags $cppminus <cpp_stuff.c >cpp_stuff.out 2>&1 + if $contains '"Victory"' cpp_stuff.out >/dev/null 2>&1; then + echo "I'll resort to a cute trick to also be able to stringify." + cpp_quote='"' + else + $cat <<EOM +However, in the good old days we don't know how to stringify and +catify at the same time... +@if SCAT2 || SCAT3 || SCAT4 || SCAT5 +You might have to edit the values of the SCAT[2-5] macros in config.h... +@else +Hopefully, $package does not need this feature. +@end +EOM + fi +else + ./warn <<EOM +I can't seem to be able to catenate tokens with your cpp. +@if CAT2 || CAT3 || CAT4 || CAT5 || SCAT2 || SCAT3 || SCAT4 || SCAT5 +You're going to have to edit the values of the following +macros in config.h: + +@if CAT2 || CAT3 || CAT4 || CAT5 + CAT[2-5] +@end +@if SCAT2 || SCAT3 || SCAT4 || SCAT5 + SCAT[2-5] +@end + +in order to let me compile. +@end +EOM + cpp_stuff="/* Help! How do we handle cpp_stuff? */*/" +fi +$rm -f cpp_stuff.* + diff --git a/mcon/U/cpp_trad.U b/mcon/U/cpp_trad.U new file mode 100644 index 0000000..7b0fa85 --- /dev/null +++ b/mcon/U/cpp_trad.U @@ -0,0 +1,41 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: cpp_stuff.U,v $ +?MAKE:cpp_trad: cpp cat contains rm +?MAKE: -pick add $@ %< +?S:cpp_trad: +?S: This variable contains the program to run to get traditional C +?S: preprocessor semantics and not ISO C semantics: we want something +?S: that knows as little about C as possible to use as a more general +?S: purpose preprocessor. +?S:. +?F:!foo.c !foo.cpp +: how do we get traditional cpp semantics? +echo " " +echo "Checking to see how to get traditional cpp semantics..." >&4 +$cat >foo.c <<'EOF' +#define A(x) x +#define B(y) y +A(a)B(b) +EOF +if $cpp foo.c >foo.cpp; $contains ab foo.cpp >/dev/null 2>&1; then + echo "Plain '$cpp' works just fine." + cpp_trad="$cpp" +elif $cpp -traditional foo.c >foo.cpp; \ + $contains ab foo.cpp >/dev/null 2>&1; then + echo "We'll use '$cpp -traditional' to get proper semantics." + cpp_trad="$cpp -traditional" +else + echo "I don't know how to get traditional semantics with '$cpp'." >&4 + cpp_trad="$cpp" +fi +$rm -f foo.c foo.cpp + diff --git a/mcon/U/cppfilecom.U b/mcon/U/cppfilecom.U new file mode 100644 index 0000000..d796ce8 --- /dev/null +++ b/mcon/U/cppfilecom.U @@ -0,0 +1,204 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: Orginal Author: Graham Stoney <greyham@research.canon.oz.au> +?RCS: +?RCS: $Log: cppfilecom.U,v $ +?RCS: Revision 3.0 1993/08/18 12:05:37 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:cppfilecom cppstdinflags d_cppignhdrs d_cppcanstdin: \ + contains package test Myread Oldconfig Loc Setvar cpp cc cat rm +?MAKE: -pick add $@ %< +?S:cppfilecom: +?S: This variable contains the first part of the string which will invoke +?S: the C preprocessor a file and produce to standard output, preserving +?S: comments. Typical value of "cc -E -C" or "/lib/cpp -C". +?S:. +?S:cppstdinflags: +?S: This variable contains any flags necessary to get cppfilecom to read +?S: from the standard input. +?S:. +?S:d_cppignhdrs: +?S: This symbol conditionally defines CPP_IGN_HDRS if CPP_FILE_COM ignores +?S: *.h files. +?S:. +?S:d_cppcanstdin: +?S: This symbol conditionally defines CPP_CAN_STDIN if CPP_FILE_COM can +?S: read standard input directly. +?S:. +?C:CPP_FILE_COM (CPPFILECOM): +?C: This symbol contains the first part of the string which will invoke +?C: the C preprocessor a file and produce to standard output, preserving +?C: comments. Typical value of "cc -E -C" or "/lib/cpp -C". +?C:. +?C:CPP_STDIN_FLAGS (CPPSTDINFLAGS): +?C: This variable contains any flags necessary to get CPP_FILE_COM to +?C: read from the standard input. +?C:. +?C:CPP_IGN_HDRS (CPPIGNHDRS): +?C: This symbol is defined if CPP_FILE_COM ignores *.h files. +?C:. +?C:CPP_CAN_STDIN (CPPCANSTDIN): +?C: This symbol is defined if CPP_FILE_COM can read standard input +?C: directly. +?C:. +?H:#define CPP_FILE_COM "$cppfilecom" +?H:#define CPP_STDIN_FLAGS "$cppstdinflags" +?H:#$d_cppignhdrs CPP_IGN_HDRS /* does CPP ignore .h files? */ +?H:#$d_cppcanstdin CPP_CAN_STDIN /* can CPP read stdin directly? */ +?H:. +?T:cont +?F:!testcpp.c !testcpp.h !testcpp.out +?LINT:set d_cppcanstdin d_cppignhdrs +?LINT:usefile testcpp.c testcpp.out +: see how we invoke the C preprocessor +$cat <<EOM + +$package needs to be able to preprocess its input files in a mode which +preserves comments, which is often not the default behaviour. It should run +the C preprocessor you will use when compiling your own source code, which +should be ISO/ANSI C compliant if you want $package to handle the latest +standard C. I will try to guess, but I might guess wrongly because it is not +necessarily the same preprocessor used to build $package. + +EOM +$cat <<'EOT' >testcpp.c +#define ABC abc +#define XYZ xyz +ABC.XYZ +/* comment */ +EOT +: +if $test "X$cppfilecom" != "X" && \ + $cppfilecom testcpp.c </dev/null >testcpp.out 2>/dev/null && \ + $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 && \ + $contains comment testcpp.out >/dev/null 2>&1 +then + echo "You used to use $cppfilecom so we'll use that again." +elif echo 'Maybe "'$cc' -E -C" will work...' && \ + $cc -E -C testcpp.c </dev/null >testcpp.out 2>/dev/null && \ + $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 && \ + $contains comment testcpp.out >/dev/null 2>&1 +then + echo "It works!" + cppfilecom="$cc -E -C" +elif echo 'Nope...maybe "'"$cc"' -P -C" will work...' && \ + $cc -P -C testcpp.c </dev/null >testcpp.out 2>/dev/null && \ + $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 && \ + $contains comment testcpp.out >/dev/null 2>&1 +then + echo "Yup, that does." + cppfilecom="$cc -P -C" +elif echo 'No such luck, maybe "'"$cpp"' -C" will work...' && \ + $cpp -C testcpp.c </dev/null >testcpp.out 2>/dev/null && \ + $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 && \ + $contains comment testcpp.out >/dev/null 2>&1 +then + echo "Yup, it does." + cppfilecom="$cpp -C" +else + cppfilecom='' + $cat <<'EOM' +I can't find a C preprocessor that will preserve comments. Please name one. +EOM +fi +: +dflt="$cppfilecom" +cont=true +while $test "$cont" ; do + echo " " + rp="How should $package run your preprocessor preserving comments?" + . ./myread + cppfilecom="$ans" + $cppfilecom testcpp.c >testcpp.out 2>&1 + if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 && \ + $contains comment testcpp.out >/dev/null 2>&1 + then + echo "OK, that will do." + cont='' + else + echo "Sorry, I can't get that to work." + fi +done + +@if CPP_IGN_HDRS || d_cppignhdrs +: Now see if it ignores header files. +cp testcpp.c testcpp.h +$cppfilecom testcpp.h >testcpp.out 2>&1 +if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 && \ + $contains comment testcpp.out >/dev/null 2>&1 +then + echo "Terrific; it processes .h files passed on the command line too." + val="$undef" +else + echo "It ignores .h files on the command line; pity." + val="$define" +fi +set d_cppignhdrs +eval $setvar + +@end +@if CPP_STDIN_FLAGS || CPP_CAN_STDIN || cppstdinflags || d_cppcanstdin +: Now see how to send stdin to it. +echo " " +cp testcpp.c testcpp.h +$cppfilecom <testcpp.h >testcpp.out 2>&1 +if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 && \ + $contains comment testcpp.out >/dev/null 2>&1 +then + echo "Great; and it will read stdin if passed no arguments." + val="$define" + cppstdinflags='' +else + $cppfilecom - <testcpp.h >testcpp.out 2>&1 + if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 && \ + $contains comment testcpp.out >/dev/null 2>&1 + then + echo "Great; and it can read stdin by passing it '-'." + val="$define" + cppstdinflags='-' + else + $cat <<FOO +Unfortunately, I can't find an easy way to get that preprocessor to read from +standard input. Do you know any flags I can pass it to get it to do so? +If that preprocessor can't read directly form standard input, answer 'none'. + +FOO + val='dunno' + while $test "$val" = "dunno"; do + rp='Flags to get preprocessor to read stdin?' + dflt='none' + . ./myread + if $test $ans = 'none'; then + echo "Oh well, if $package wants it done, it will do it for itself." + val="$undef" + else + $cppfilecom $ans <testcpp.h >testcpp.out 2>&1 + if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 && \ + $contains comment testcpp.out >/dev/null 2>&1 + then + echo "Good; that works fine." + val="$define" + cppstdinflags="$ans" + else + echo "Sorry, I couldn't get that to work." + fi + fi + done + fi +fi +set d_cppcanstdin +eval $setvar + +@end +: cleanup cpp test files anyway +$rm -f testcpp.* + diff --git a/mcon/U/cppstdin.U b/mcon/U/cppstdin.U new file mode 100644 index 0000000..85d556d --- /dev/null +++ b/mcon/U/cppstdin.U @@ -0,0 +1,249 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: cppstdin.U,v $ +?RCS: Revision 3.0.1.4 1994/10/29 16:08:34 ram +?RCS: patch36: added ?F: line for metalint file checking +?RCS: +?RCS: Revision 3.0.1.3 1994/01/24 14:05:38 ram +?RCS: patch16: comment for CPPLAST was missing +?RCS: +?RCS: Revision 3.0.1.2 1993/12/15 08:18:58 ram +?RCS: patch15: new variables cpprun and cpplast, guaranteed wrapper-free +?RCS: patch15: cppstdin now tries to use cc, even at the cost of a wrapper +?RCS: +?RCS: Revision 3.0.1.1 1993/08/25 14:00:53 ram +?RCS: patch6: remove wrapper when not actually used +?RCS: +?RCS: Revision 3.0 1993/08/18 12:05:38 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:cppstdin cppminus cpprun cpplast: contains test Myread Oldconfig Loc \ + cpp +cc rm hint osname gccversion startsh eunicefix +?MAKE: -pick add $@ %< +?S:cppstdin: +?S: This variable contains the command which will invoke the C +?S: preprocessor on standard input and put the output to stdout. +?S: It is primarily used by other Configure units that ask about +?S: preprocessor symbols. +?S:. +?S:cppminus: +?S: This variable contains the second part of the string which will invoke +?S: the C preprocessor on the standard input and produce to standard +?S: output. This variable will have the value "-" if cppstdin needs +?S: a minus to specify standard input, otherwise the value is "". +?S:. +?S:cpprun: +?S: This variable contains the command which will invoke a C preprocessor +?S: on standard input and put the output to stdout. It is guaranteed not +?S: to be a wrapper and may be a null string if no preprocessor can be +?S: made directly available. This preprocessor might be different from the +?S: one used by the C compiler. Don't forget to append cpplast after the +?S: preprocessor options. +?S:. +?S:cpplast: +?S: This variable has the same functionality as cppminus, only it applies to +?S: cpprun and not cppstdin. +?S:. +?C:CPPSTDIN: +?C: This symbol contains the first part of the string which will invoke +?C: the C preprocessor on the standard input and produce to standard +?C: output. Typical value of "cc -E" or "/lib/cpp", but it can also +?C: call a wrapper. See CPPRUN. +?C:. +?C:CPPMINUS: +?C: This symbol contains the second part of the string which will invoke +?C: the C preprocessor on the standard input and produce to standard +?C: output. This symbol will have the value "-" if CPPSTDIN needs a minus +?C: to specify standard input, otherwise the value is "". +?C:. +?C:CPPRUN: +?C: This symbol contains the string which will invoke a C preprocessor on +?C: the standard input and produce to standard output. It needs to end +?C: with CPPLAST, after all other preprocessor flags have been specified. +?C: The main difference with CPPSTDIN is that this program will never be a +?C: pointer to a shell wrapper, i.e. it will be empty if no preprocessor is +?C: available directly to the user. Note that it may well be different from +?C: the preprocessor used to compile the C program. +?C:. +?C:CPPLAST: +?C: This symbol is intended to be used along with CPPRUN in the same manner +?C: symbol CPPMINUS is used with CPPSTDIN. It contains either "-" or "". +?C:. +?H:#define CPPSTDIN "$cppstdin" +?H:#define CPPMINUS "$cppminus" +?H:#define CPPRUN "$cpprun" +?H:#define CPPLAST "$cpplast" +?H:. +?F:cppstdin !testcpp.out !testcpp.c +?T:wrapper x_cpp x_minus ok +: see how we invoke the C preprocessor +echo " " +echo "Now, how can we feed standard input to your C preprocessor..." >&4 +cat <<'EOT' >testcpp.c +#define ABC abc +#define XYZ xyz +ABC.XYZ +EOT +cd .. +if $test ! -f cppstdin; then + echo "$startsh" >cppstdin +if $test "X$osname" = "Xaix" -a "X$gccversion" = X; then +?X: AIX cc -E doesn't show the absolute headerfile +?X: locations but we'll cheat by using the -M flag. + echo 'cat >.$$.c; rm -f .$$.u; '"$cc"' ${1+"$@"} -M -c .$$.c 2>/dev/null; \ + test -s .$$.u && \ + awk '"'"'$2 ~ /\.h$/ { print "# 0 \""$2"\"" }'"'"' .$$.u; \ + rm -f .$$.o .$$.u; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' >> cppstdin +else + echo 'cat >.$$.c; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' >>cppstdin +fi; else + echo "Keeping your $hint cppstdin wrapper." +fi +chmod 755 cppstdin +$eunicefix cppstdin +wrapper=`pwd`/cppstdin +ok='false' +cd UU + +?X: +?X: We'll run the cpp tests again if we don't have any valid C preprocessor +?X: yet or don't know how to proceed without a wrapper (in which case cpprun +?X: is empty and that's really annoying...) +?X: +if $test "X$cppstdin" != "X" && \ + $cppstdin $cppminus <testcpp.c >testcpp.out 2>&1 && \ + $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 +then + echo "You used to use $cppstdin $cppminus so we'll use that again." + case "$cpprun" in + '') echo "But let's see if we can live without a wrapper..." ;; + *) + if $cpprun $cpplast <testcpp.c >testcpp.out 2>&1 && \ + $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 + then + echo "(And we'll use $cpprun $cpplast to preprocess directly.)" + ok='true' + else + echo "(However, $cpprun $cpplast does not work, let's see...)" + fi + ;; + esac +else + case "$cppstdin" in + '') ;; + *) + echo "Good old $cppstdin $cppminus does not seem to be of any help..." + ;; + esac +fi + +if $ok; then + : nothing +elif echo 'Maybe "'"$cc"' -E" will work...'; \ + $cc -E <testcpp.c >testcpp.out 2>&1; \ + $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then + echo "Yup, it does." + x_cpp="$cc -E" + x_minus=''; +elif echo 'Nope...maybe "'"$cc"' -E -" will work...'; \ + $cc -E - <testcpp.c >testcpp.out 2>&1; \ + $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then + echo "Yup, it does." + x_cpp="$cc -E" + x_minus='-'; +elif echo 'Nope...maybe "'"$cc"' -P" will work...'; \ + $cc -P <testcpp.c >testcpp.out 2>&1; \ + $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then + echo "Yipee, that works!" + x_cpp="$cc -P" + x_minus=''; +elif echo 'Nope...maybe "'"$cc"' -P -" will work...'; \ + $cc -P - <testcpp.c >testcpp.out 2>&1; \ + $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then + echo "At long last!" + x_cpp="$cc -P" + x_minus='-'; +elif echo 'No such luck, maybe "'$cpp'" will work...'; \ + $cpp <testcpp.c >testcpp.out 2>&1; \ + $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then + echo "It works!" + x_cpp="$cpp" + x_minus=''; +elif echo 'Nixed again...maybe "'$cpp' -" will work...'; \ + $cpp - <testcpp.c >testcpp.out 2>&1; \ + $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then + echo "Hooray, it works! I was beginning to wonder." + x_cpp="$cpp" + x_minus='-'; +elif echo 'Uh-uh. Time to get fancy. Trying a wrapper...'; \ + $wrapper <testcpp.c >testcpp.out 2>&1; \ + $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then + x_cpp="$wrapper" + x_minus='' + echo "Eureka!" +else + dflt='' + rp="No dice. I can't find a C preprocessor. Name one:" + . ./myread + x_cpp="$ans" + x_minus='' + $x_cpp <testcpp.c >testcpp.out 2>&1 + if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then + echo "OK, that will do." >&4 + else +echo "Sorry, I can't get that to work. Go find one and rerun Configure." >&4 + exit 1 + fi +fi + +case "$ok" in +false) + cppstdin="$x_cpp" + cppminus="$x_minus" + cpprun="$x_cpp" + cpplast="$x_minus" +?X: +?X: If /lib/cpp is used, try using a wrapper to increase our chances to have +?X: the C compiler and our $cppstdin agree on the same symbols... However, +?X: since cpprun is guaranteed not to be a wrapper, we must clear it if the +?X: only preprocessor we found was a wrapper, with all our luck... +?X: + set X $x_cpp + shift + case "$1" in + "$cpp") + echo "Perhaps can we force $cc -E using a wrapper..." + if $wrapper <testcpp.c >testcpp.out 2>&1; \ + $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 + then + echo "Yup, we can." + cppstdin="$wrapper" + cppminus=''; + else + echo "Nope, we'll have to live without it..." + fi + ;; + esac + case "$cpprun" in + "$wrapper") + cpprun='' + cpplast='' + ;; + esac + ;; +esac + +case "$cppstdin" in +"$wrapper"|'cppstdin') ;; +*) $rm -f $wrapper;; +esac +$rm -f testcpp.c testcpp.out + diff --git a/mcon/U/d_NOFILE.U b/mcon/U/d_NOFILE.U new file mode 100644 index 0000000..7685cd1 --- /dev/null +++ b/mcon/U/d_NOFILE.U @@ -0,0 +1,189 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_NOFILE.U,v $ +?RCS: Revision 3.0.1.1 1994/10/29 16:08:38 ram +?RCS: patch36: added ?F: line for metalint file checking +?RCS: +?RCS: Revision 3.0 1993/08/18 12:05:39 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:nofile d_gettblsz tablesize: Myread Guess cat +cc +ccflags +libs \ + test rm Csym +?MAKE: -pick add $@ %< +?S:nofile: +?S: This variable contains the number of file descriptors available to the +?S: process. +?S:. +?S:d_gettblsz: +?S: This variable conditionally handles remapping of the getdtablesize() +?S: subroutine to ulimit(4,0), or the NOFILE manifest constant. +?S:. +?S:tablesize: +?S: This variable contains either the 'NOFILE' constant or 'ulimit(4, 0L)' +?S: and is used as the remapped value for the getdtablesize() macro. +?S:. +?C:getdtablesize: +?C: This catches use of the getdtablesize() subroutine, and remaps it +?C: to either ulimit(4,0) or NOFILE, if getdtablesize() isn't available. +?C:. +?C:VAL_NOFILE: +?C: This symbol contains the number of file descriptors available to the +?C: process, as determined at configuration time. Unless a static constant +?C: is needed, you should rely on getdtablesize() to obtain that number. +?C:. +?H:#$d_gettblsz getdtablesize() $tablesize /**/ +?H:#define VAL_NOFILE $nofile /* Number of file descriptors */ +?H:. +?F:!nofile +?T:d_ulimit4 val +: see if getdtablesize exists +echo " " +?X: Revert logical value (d_gettblsz is undef iff getdtablesize is present) +case "$d_gettblsz" in +$define) d_gettblsz="$undef";; +$undef) d_gettblsz="$define";; +esac +if set getdtablesize val -f d_gettblsz; eval $csym; $val; then + echo 'getdtablesize() found.' >&4 + d_gettblsz="$undef" + tablesize='' +@if VAL_NOFILE || nofile + $cat >nofile.c <<'EOCP' +#include <stdio.h> +int main() +{ + printf("%d\n", getdtablesize()); +} +EOCP + nofile='' + if $cc $ccflags -o nofile nofile.c $libs >/dev/null 2>&1; then + nofile=`./nofile 2>/dev/null` + fi + if $test "$nofile"; then + echo "(You have $nofile file descriptors available per process.)" + else + nofile='20' + if ./bsd; then + nofile='64' + fi + echo "(Hmm... Let's say you have $nofile file descriptors available.)" + fi +@end +else + echo 'getdtablesize() NOT found...' >&4 + if set ulimit val -f; eval $csym; $val; then + echo 'Maybe ulimit(4,0) will work...' + $cat >nofile.c <<'EOCP' +#include <stdio.h> +#ifdef GETPARAM_H +#include <sys/param.h> +#endif +int main() +{ + printf("%d %d\n", +#ifdef NOFILE + NOFILE, +#else + 0, +#endif + ulimit(4,0)); + exit(0); +} +EOCP + if $cc $ccflags -DGETPARAM_H -o nofile nofile.c $libs >/dev/null 2>&1 \ + || $cc $ccflags -o nofile nofile.c $libs >/dev/null 2>&1 ; then + set `./nofile` + d_gettblsz=$1 + d_ulimit4=$2 + if $test "$d_ulimit4" -lt 0; then + echo "Your ulimit() call doesn't tell me what I want to know." + echo "We'll just use NOFILE in this case." + nofile=$d_gettblsz + d_gettblsz="$define" + tablesize='NOFILE' + else + if $test "$d_gettblsz" -gt 0; then + echo "Your system defines NOFILE to be $d_gettblsz, and" >&4 + else + echo "I had trouble getting NOFILE from your system, but" >&4 + fi +echo "ulimit returns $d_ulimit4 as the number of available file descriptors." >&4 + dflt='y'; + echo " " + rp='Should I use ulimit to get the number of available file descriptors?' + . ./myread + case "$ans" in + y*) + nofile=$d_ulimit4 + d_gettblsz="$define" + tablesize='ulimit(4, 0L)' + echo "Using ulimit(4,0)." + ;; + *) + nofile=$d_gettblsz + d_gettblsz="$define" + tablesize='NOFILE' + echo "Using NOFILE." + ;; + esac + fi + else + echo "Strange, I couldn't get my test program to compile." + echo "We'll just use NOFILE in this case." + d_gettblsz="$define" + tablesize='NOFILE' + nofile='' + fi + else + echo 'Using NOFILE instead.' + d_gettblsz="$define" + tablesize='NOFILE' + nofile='' + fi +fi +@if VAL_NOFILE || nofile +case "$nofile" in +'') + $cat >nofile.c <<'EOCP' +#include <stdio.h> +#ifdef GETPARAM_H +#include <sys/param.h> +#endif +int main() +{ + printf("%d\n", +#ifdef NOFILE + NOFILE, +#else + 0, +#endif + ); + exit(0); +} +EOCP + if $cc $ccflags -DGETPARAM_H -o nofile nofile.c $libs >/dev/null 2>&1 \ + || $cc $ccflags -o nofile nofile.c $libs >/dev/null 2>&1 ; then + nofile=`./nofile 2>/dev/null` + fi + if $test "$nofile"; then + echo "(You have $nofile file descriptors available per process.)" + else + nofile='20' + if ./bsd; then + nofile='64' + fi + echo "(Hmm... Let's say you have $nofile file descriptors available.)" + fi + ;; +esac +@end +$rm -f nofile* + diff --git a/mcon/U/d_NeWS.U b/mcon/U/d_NeWS.U new file mode 100644 index 0000000..29d1539 --- /dev/null +++ b/mcon/U/d_NeWS.U @@ -0,0 +1,101 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_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 + +echo " " +if $test ! -d $d_newshome/lib; then + echo "ARG! No lib directory in $d_newshome!!!" + : heavy medicine. I wonder what the disease is... + $rm -f kit*isdone + $rm -rf UU + : bye bye + set -t; echo "Sorry... no NeWS is bad news..." +fi + +if $test -r $d_newshome/lib/NeWS/colors.ps ; then + echo 'Ahh... your running NeWS 1.1! Boy... that makes stuff easy....' + echo " " + d_news="$define" + d_news0="$undef" + if $test -r $d_newshome/lib/NeWS/textcan.ps; then + d_textcan=$d_newshome/lib/NeWS + echo "The textcan.ps stuff seems to be in : $d_textcan" + else + d_textcan=$d_newshome/clientsrc/client/nterm + if $test ! -r $d_textcan/textcan.ps; then + d_news="$undef" + d_news0="$define" + echo 'Hmm... must have been fooled... gotta be NeWS 1.1 beta!' + else + echo "The textcan.ps stuff seems to be in : $d_textcan" + fi + fi +else + echo 'snif... snif... I smell the dilapidated smell of NeWS 1.0..' + echo 'Some things will not work under NeWS 1.0...' + d_news="$undef" + d_news0="$define" +fi +cd UU + diff --git a/mcon/U/d_PORTAR.U b/mcon/U/d_PORTAR.U new file mode 100644 index 0000000..55251c7 --- /dev/null +++ b/mcon/U/d_PORTAR.U @@ -0,0 +1,79 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_PORTAR.U,v $ +?RCS: Revision 3.0.1.1 1994/10/29 16:08:42 ram +?RCS: patch36: added ?F: line for metalint file checking +?RCS: +?RCS: Revision 3.0 1993/08/18 12:05:40 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_PORTAR: cat +cc rm Setvar +?MAKE: -pick add $@ %< +?S:d_PORTAR: +?S: This variable conditionally handles definition of PORTAR, +?S: a creation of greater minds than I can imagine. +?S:. +?C:PORTAR: +?C: This manifest constant must be defined to 1 for some implementations +?C: of ar.h to get the portable ar most everybody uses. +?C:. +?L:ar_fmag: +?L:ARFMAG: +?L:SARMAG: +?H:#$d_PORTAR PORTAR 1 /**/ +?H:. +?F:!portar +?LINT:set d_PORTAR +: see if we need to define PORTAR +echo " " +echo 'Checking to see if we need to define PORTAR for portable archives...' >&4 +$cat >portar.c <<'EOCP' +#include <ar.h> +int main() { + char *arfmag = ARFMAG; + int sarmag = SARMAG; + struct ar_hdr arh; + + strncpy(arh.ar_fmag, arfmag, 2); + +#ifdef PORTAR + printf("D\n"); +#else + printf("U\n"); +#endif + exit(0);} +EOCP +if $cc -o portar portar.c >/dev/null 2>&1 || \ + $cc -DPORTAR=1 -o portar portar.c >/dev/null 2>&1 ; then + case "`./portar`" in + D) + val="$define" + echo "We'll be defining PORTAR for you." + ;; + U) + val="$undef" + echo "We don't seem to need PORTAR defined here." + ;; + *) + val="$define" + echo "(My test program gave me an unexpected value!)" + echo "I'll just define PORTAR to be sure." + ;; + esac +else + echo "(Strange, I couldn't get my test program to compile.)" + echo "We'll just define PORTAR in this case." + val="$define" +fi +set d_PORTAR +eval $setvar +$rm -f portar* + diff --git a/mcon/U/d_SHM_MAC.U b/mcon/U/d_SHM_MAC.U new file mode 100644 index 0000000..f8e87aa --- /dev/null +++ b/mcon/U/d_SHM_MAC.U @@ -0,0 +1,141 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_SHM_MAC.U,v $ +?RCS: Revision 3.0 1993/08/18 12:05:41 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_SHM_MAC d_SHM_PRM d_SHM_SEG d_SHM_IMMU: cat d_shm test rm +cc +ccflags +?MAKE: -pick add $@ %< +?S:d_SHM_MAC: +?S: Sometimes, the SHMLBA manifest needs sys/sysmacros.h, usually for +?S: the ctob() macro. +?S:. +?S:d_SHM_PRM: +?S: Sometimes, the SHMLBA manifest needs sys/param.h, usually for the +?S: NBPC constant. +?S:. +?S:d_SHM_SEG: +?S: Sometimes, the SHMLBA manifest needs sys/seg.h, usually for the +?S: SNUMSHFT constant. +?S:. +?S:d_SHM_IMMU: +?S: Sometimes, the SHMLBA manifest needs sys/immu.h, usually for the +?S: stob() macro. +?S:. +?C:SHMLBA_WANTS_SYSMACROS: +?C: This value tells us to include <sys/sysmacros.h> because SHMLBA +?C: needs something from there, probably the ctob() macro. +?C:. +?C:SHMLBA_WANTS_PARAM: +?C: This value tells us to include <sys/param.h> because SHMLBA needs +?C: something from there, probably the NBPC constant. +?C:. +?C:SHMLBA_WANTS_SEG: +?C: This value tells us to include <sys/seg.h> because SHMLBA needs +?C: something from there, probably the SNUMSHFT constant. +?C:. +?C:SHMLBA_WANTS_IMMU: +?C: This value tells us to include <sys/immu.h> because SHMLBA needs +?C: something from there, probably the stob() macro. (tower_600 only?) +?C:. +?H:#$d_SHM_MAC SHMLBA_WANTS_SYSMACROS /* SHMLBA wants ctob()? */ +?H:#$d_SHM_PRM SHMLBA_WANTS_PARAM /* SHMLBA wants NBPC? */ +?H:#$d_SHM_SEG SHMLBA_WANTS_SEG /* SHMLBA wants SNUMSHFT? */ +?H:#$d_SHM_IMMU SHMLBA_WANTS_IMMU /* SHMLBA wants stob()? */ +?H:. +?T:flags D_sys_immu D_sys_seg D_sys_sysmacros D_sys_param +: check for SHMLBA braindamage +d_SHM_MAC="$undef" +d_SHM_PRM="$undef" +d_SHM_SEG="$undef" +d_SHM_IMMU="$undef" +if $test "$d_shm" = "$define" ; then + echo " " + $cat >&4 <<EOM +Checking to see if SHMLBA needs additional headers. +The headers I'll be checking are: + + sys/macros.h (for the ctob() macro) + sys/param.h (for NBPC) + sys/seg.h (for SNUMSHFT) + sys/immu.h (for the stob() macro) + +EOM + $cat >shm_mac.c <<'EOCP' +#include <sys/types.h> +#include <sys/ipc.h> +#include <sys/shm.h> +#ifdef I_SYS_IMMU +#include <sys/immu.h> +#endif +#ifdef I_SYS_SYSMACROS +#include <sys/sysmacros.h> +#endif +#ifdef I_SYS_PARAM +#include <sys/param.h> +#endif +#ifdef I_SYS_SEG +#include <sys/seg.h> +#endif + +int main() { + int foo = SHMLBA ; + } +EOCP + flags='xxx' + for D_sys_immu in '' '-DI_SYS_IMMU'; do + for D_sys_seg in '' '-DI_SYS_SEG'; do + for D_sys_sysmacros in '' '-DI_SYS_SYSMACROS'; do + for D_sys_param in '' '-DI_SYS_PARAM'; do + case "$flags" in + 'xxx') + case "$D_sys_immu$D_sys_param$D_sys_sysmacros$D_sys_seg" in + '') + echo "Trying it normally..." + ;; + *) + echo "Trying $D_sys_immu $D_sys_param $D_sys_sysmacros $D_sys_seg" + ;; + esac + if $cc $ccflags \ + $D_sys_immu $D_sys_param $D_sys_sysmacros $D_sys_seg \ + -o shm_mac shm_mac.c >/dev/null 2>&1 ; then + set X $D_sys_immu $D_sys_param $D_sys_sysmacros $D_sys_seg + shift + flags="$*" + echo "Succeeded with $flags" + fi + ;; + esac + done + done + done + done + case "$flags" in + xxx) + echo "I don't know how to keep SHMLBA happy. Good luck!" + ;; + esac + case "$flags" in + *I_SYS_PARAM*) d_SHM_PRM="$define";; + esac + case "$flags" in + *I_SYS_SYSMACROS*) d_SHM_MAC="$define";; + esac + case "$flags" in + *I_SYS_SEG*) d_SHM_SEG="$define";; + esac + case "$flags" in + *I_SYS_IMMU*) d_SHM_IMMU="$define";; + esac +fi +$rm -f shm_mac* + diff --git a/mcon/U/d_access.U b/mcon/U/d_access.U new file mode 100644 index 0000000..2e1db7d --- /dev/null +++ b/mcon/U/d_access.U @@ -0,0 +1,74 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_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 Inlibc Findhdr +?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 +set access d_access +eval $inlibc + +: locate the flags for 'access()' +case "$d_access" in +"$define") + echo " " + $cat >access.c <<'EOCP' +#include <sys/types.h> +#ifdef I_FCNTL +#include <fcntl.h> +#endif +#ifdef I_SYS_FILE +#include <sys/file.h> +#endif +#ifdef I_UNISTD +#include <unistd.h> +#endif +int main() { + exit(R_OK); +} +EOCP + : check sys/file.h first, no particular reason here + if $test `./findhdr sys/file.h` && \ + $cc -o access $cppflags -DI_SYS_FILE access.c >/dev/null 2>&1 ; then + h_sysfile=true; + echo "<sys/file.h> defines the *_OK access constants." >&4 + elif $test `./findhdr fcntl.h` && \ + $cc -o access $cppflags -DI_FCNTL access.c >/dev/null 2>&1 ; then + h_fcntl=true; + echo "<fcntl.h> defines the *_OK access constants." >&4 +@if I_UNISTD + elif $test `./findhdr unistd.h` && \ + $cc -o access $cppflags -DI_UNISTD access.c >/dev/null 2>&1 ; then + echo "<unistd.h> defines the *_OK access constants." >&4 +@end + else + echo "I can't find the four *_OK access constants--I'll use mine." >&4 + fi + ;; +esac +$rm -f access* + diff --git a/mcon/U/d_alarm.U b/mcon/U/d_alarm.U new file mode 100644 index 0000000..589d125 --- /dev/null +++ b/mcon/U/d_alarm.U @@ -0,0 +1,33 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu> +?RCS: +?RCS: $Log: d_alarm.U,v $ +?RCS: Revision 3.0.1.1 1994/08/29 16:06:58 ram +?RCS: patch32: created by ADO +?RCS: +?MAKE:d_alarm: Inlibc +?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 +set alarm d_alarm +eval $inlibc + diff --git a/mcon/U/d_attribut.U b/mcon/U/d_attribut.U new file mode 100644 index 0000000..8ff5422 --- /dev/null +++ b/mcon/U/d_attribut.U @@ -0,0 +1,64 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu> +?RCS: +?RCS: $Log: d_attribut.U,v $ +?RCS: Revision 3.0.1.3 1995/01/30 14:33:45 ram +?RCS: patch49: test C program now includes <stdio.h> (WED) +?RCS: +?RCS: Revision 3.0.1.2 1995/01/11 15:25:47 ram +?RCS: patch45: fixed typo in the d_attribut variable (ADO) +?RCS: +?RCS: Revision 3.0.1.1 1994/10/29 16:08:55 ram +?RCS: patch36: created by ADO +?RCS: +?MAKE:d_attribut: Myread Oldconfig cat cc ccflags rm Setvar contains +?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 +echo " " +echo "Checking whether your compiler can handle __attribute__ ..." >&4 +$cat >attrib.c <<'EOCP' +#include <stdio.h> +void croak (char* pat,...) __attribute__((format(printf,1,2),noreturn)); +EOCP +if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then + if $contains 'warning' attrib.out >/dev/null 2>&1; then + echo "Your C compiler doesn't fully support __attribute__." + val="$undef" + else + echo "Your C compiler supports __attribute__." + val="$define" + fi +else + echo "Your C compiler doesn't seem to understand __attribute__ at all." + val="$undef" +fi +set d_attribut +eval $setvar +$rm -f attrib* + diff --git a/mcon/U/d_bcmp.U b/mcon/U/d_bcmp.U new file mode 100644 index 0000000..ae2e4bd --- /dev/null +++ b/mcon/U/d_bcmp.U @@ -0,0 +1,44 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_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: Inlibc +?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 +set bcmp d_bcmp +eval $inlibc + diff --git a/mcon/U/d_bcopy.U b/mcon/U/d_bcopy.U new file mode 100644 index 0000000..2ae3ad8 --- /dev/null +++ b/mcon/U/d_bcopy.U @@ -0,0 +1,44 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_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: Inlibc +?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 +set bcopy d_bcopy +eval $inlibc + diff --git a/mcon/U/d_brokstat.U b/mcon/U/d_brokstat.U new file mode 100644 index 0000000..a330dba --- /dev/null +++ b/mcon/U/d_brokstat.U @@ -0,0 +1,75 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_brokstat.U,v $ +?RCS: Revision 3.0.1.1 1997/02/28 15:30:53 ram +?RCS: patch61: created +?RCS: +?MAKE:d_brokstat: cat contains cppstdin cppminus +cppflags rm Setvar +?MAKE: -pick add $@ %< +?S:d_brokstat: +?S: This variable conditionally defines STAT_MACROS_BROKEN if some +?S: of the S_IS*() macros from <sys/stat.h> give false positive on +?S: regular files. +?S:. +?C:STAT_MACROS_BROKEN: +?C: This symbol, if defined, indicates that the S_IS*() stat macros +?C: such as S_ISBLK() give false positive and are thus unusable. +?C: Your best bet is then to supply your own set. +?C:. +?H:#$d_brokstat STAT_MACROS_BROKEN /**/ +?H:. +?F:!try.c !try +?LINT:set d_brokstat +?LINT:usefile try +?X: This test inspired by autoconf -- RAM, 28/02/97 +: are stat macros sane? +echo " " +echo "Checking whether your stat() macros are broken..." +$cat >try.c <<'EOC' +#include <sys/types.h> +#include <sys/stat.h> + +#if defined(S_ISBLK) && defined(S_IFDIR) +#if S_ISBLK(S_IFDIR) +Broken +#endif +#endif + +#if defined(S_ISBLK) && defined(S_IFCHR) +#if S_ISBLK(S_IFCHR) +Broken +#endif +#endif + +#if defined(S_ISLNK) && defined(S_IFREG) +#if S_ISLNK(S_IFREG) +Broken. +#endif +#endif + +#if defined(S_ISSOCK) && defined(S_IFREG) +#if S_ISSOCK(S_IFREG) +Broken. +#endif +#endif +EOC +$cppstdin $cppflags $cppminus <try.c 2>/dev/null >try +if $contains Broken try >/dev/null 2>&1; then + echo "Alas, they are. I'll use my own macro set then." >&4 + val="$define" +else + echo "Nope, working just fine." >&4 + val="$undef" +fi +$rm -f try try.c +set d_brokstat +eval $setvar + diff --git a/mcon/U/d_bsdjmp.U b/mcon/U/d_bsdjmp.U new file mode 100644 index 0000000..da2f496 --- /dev/null +++ b/mcon/U/d_bsdjmp.U @@ -0,0 +1,86 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_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 explicitely 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 +?X: We can't check for these symbols with Inlibc because of the leading "_" +echo " " +case "$d_bsdjmp" in +'') + $cat >set.c <<EOP +#include <setjmp.h> +jmp_buf env; +int set = 1; +int main() +{ + if (_setjmp(env)) + exit(set); + set = 0; + _longjmp(env, 1); + exit(1); +} +EOP + if $cc -o set set.c $libs >/dev/null 2>&1; then + if ./set >/dev/null 2>&1; then + echo "Good! You have BSD _setjmp and _longjmp routines." >&4 + val="$define" + else + $cat <<EOM +Uh-Oh! You have BSD _setjmp and _longjmp, but they do not work properly!! +EOM + val="$undef" + fi + else + if ./usg; then + echo "You do not have _setjmp and _longjmp, but that's fine." >&4 + else + cat <<EOM +It sounds strange for a BSD system to miss _setjmp and _longjmp, but that's ok. +EOM + fi + val="$undef" + fi + ;; +*) val="$d_bsdjmp" + case "$d_bsdjmp" in + $define) echo "Good! You have BSD _setjmp and _longjmp routines." >&4;; + $undef) echo "You do not have _setjmp and _longjmp, but that's fine." >&4;; + esac + ;; +esac +set d_bsdjmp +eval $setvar +$rm -f set.c set + diff --git a/mcon/U/d_byacc.U b/mcon/U/d_byacc.U new file mode 100644 index 0000000..aa02d79 --- /dev/null +++ b/mcon/U/d_byacc.U @@ -0,0 +1,33 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1996, Andy Dougherty +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_byacc.U,v $ +?RCS: Revision 3.0.1.1 1997/02/28 15:31:14 ram +?RCS: patch61: created +?RCS: +?MAKE:d_byacc: byacc Setvar +?MAKE: -pick add $@ %< +?S:d_byacc: +?S: This variable indicates whether byacc is available. +?S: If the user has specified 'portability', then Makefile.SH +?S: sees $byacc='byacc' whether or not the user actually has +?S: byacc. This variable allows us to determine in a makefile +?S: if we really have byacc. +?S:. +?LINT:set d_byacc +: Check if we really have byacc +case "$byacc" in +''|'byacc') val="$undef" ;; +*) val="$define" ;; +esac +set d_byacc +eval $setvar + diff --git a/mcon/U/d_bzero.U b/mcon/U/d_bzero.U new file mode 100644 index 0000000..6c7d87b --- /dev/null +++ b/mcon/U/d_bzero.U @@ -0,0 +1,44 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_bzero.U,v $ +?RCS: Revision 3.0.1.2 1993/10/16 13:48:15 ram +?RCS: patch12: added magic support for bzero() +?RCS: +?RCS: Revision 3.0.1.1 1993/09/13 16:01:33 ram +?RCS: patch10: now only defines HAS_BZERO, no macro remap on memset (WAD) +?RCS: +?RCS: Revision 3.0 1993/08/18 12:05:46 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_bzero: Inlibc +?MAKE: -pick add $@ %< +?S:d_bzero: +?S: This variable conditionally defines the HAS_BZERO symbol if +?S: the bzero() routine is available to set memory to 0. +?S:. +?C:HAS_BZERO: +?C: This symbol is defined if the bzero() routine is available to +?C: set a memory block to 0. +?C:. +?H:#$d_bzero HAS_BZERO /**/ +?H:. +?M:bzero: HAS_BZERO +?M:#ifndef HAS_BZERO +?M:#ifndef bzero +?M:#define bzero(s,l) memset((s),0,(l)) +?M:#endif +?M:#endif +?M:. +?LINT:set d_bzero +: see if bzero exists +set bzero d_bzero +eval $inlibc + diff --git a/mcon/U/d_casti32.U b/mcon/U/d_casti32.U new file mode 100644 index 0000000..7d24f08 --- /dev/null +++ b/mcon/U/d_casti32.U @@ -0,0 +1,87 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu> +?RCS: +?RCS: $Log: d_casti32.U,v $ +?RCS: Revision 3.0.1.3 1995/05/12 12:10:45 ram +?RCS: patch54: made sure cc and ccflags are conditional dependencies +?RCS: +?RCS: Revision 3.0.1.2 1994/10/29 16:09:37 ram +?RCS: patch36: declare signal handler correctly (ADO) +?RCS: +?RCS: Revision 3.0.1.1 1994/08/29 16:07:06 ram +?RCS: patch32: created by ADO +?RCS: +?X: +?X: Can the compiler cast large floats to 32-bit integers? +?X: +?MAKE:d_casti32: cat +cc +ccflags rm intsize Setvar test signal_t +?MAKE: -pick add $@ %< +?S:d_casti32: +?S: This variable conditionally defines CASTI32, which indicates +?S: whether the C compiler can cast large floats to 32-bit ints. +?S:. +?C:CASTI32: +?C: This symbol is defined if the C compiler can cast negative +?C: or large floating point numbers to 32-bit ints. +?C:. +?T:xxx yyy +?H:#$d_casti32 CASTI32 /**/ +?H:. +?F:!try +?LINT:set d_casti32 +: check for ability to cast large floats to 32-bit ints. +echo " " +echo 'Checking whether your C compiler can cast large floats to int32.' >&4 +if $test "$intsize" -eq 4; then + xxx=int +else + xxx=long +fi +$cat >try.c <<EOCP +#include <sys/types.h> +#include <signal.h> +$signal_t blech() { exit(3); } +int main() +{ + $xxx i32; + double f; + int result = 0; + signal(SIGFPE, blech); + + f = (double) 0x7fffffff; + f = 10 * f; + i32 = ($xxx) f; + + if (i32 != ($xxx) f) + result |= 1; + exit(result); +} +EOCP +if $cc $ccflags -o try try.c >/dev/null 2>&1; then + ./try + yyy=$? +else + echo "(I can't seem to compile the test program--assuming it can't)" + yyy=1 +fi +case "$yyy" in +0) val="$define" + echo "Yup, it can." + ;; +*) val="$undef" + echo "Nope, it can't." + ;; +esac +set d_casti32 +eval $setvar +$rm -f try try.* + diff --git a/mcon/U/d_castneg.U b/mcon/U/d_castneg.U new file mode 100644 index 0000000..ce879df --- /dev/null +++ b/mcon/U/d_castneg.U @@ -0,0 +1,143 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_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 Setvar signal_t +?MAKE: -pick add $@ %< +?S:d_castneg: +?S: This variable conditionally defines CASTNEG, which indicates +?S: wether the C compiler can cast negative float to unsigned. +?S:. +?S:castflags: +?S: This variable contains a flag that precise difficulties the +?S: compiler has casting odd floating values to unsigned long: +?S: 0 = ok +?S: 1 = couldn't cast < 0 +?S: 2 = couldn't cast >= 0x80000000 +?S: 4 = couldn't cast in argument expression list +?S:. +?C:CASTNEGFLOAT: +?C: This symbol is defined if the C compiler can cast negative +?C: numbers to unsigned longs, ints and shorts. +?C:. +?C:CASTFLAGS: +?C: This symbol contains flags that say what difficulties the compiler +?C: has casting odd floating values to unsigned long: +?C: 0 = ok +?C: 1 = couldn't cast < 0 +?C: 2 = couldn't cast >= 0x80000000 +?C: 4 = couldn't cast in argument expression list +?C:. +?H:#$d_castneg CASTNEGFLOAT /**/ +?H:#define CASTFLAGS $castflags /**/ +?H:. +?F:!try +?LINT:set d_castneg +: check for ability to cast negative floats to unsigned +echo " " +echo 'Checking whether your C compiler can cast negative float to unsigned.' >&4 +$cat >try.c <<EOCP +#include <sys/types.h> +#include <signal.h> +$signal_t blech() { exit(7); } +$signal_t blech_in_list() { exit(4); } +unsigned long dummy_long(p) unsigned long p; { return p; } +unsigned int dummy_int(p) unsigned int p; { return p; } +unsigned short dummy_short(p) unsigned short p; { return p; } +int main() +{ + double f = -123.; + unsigned long along; + unsigned int aint; + unsigned short ashort; + int result = 0; + + signal(SIGFPE, blech); + along = (unsigned long)f; + aint = (unsigned int)f; + ashort = (unsigned short)f; + if (along != (unsigned long)-123) + result |= 1; + if (aint != (unsigned int)-123) + result |= 1; + if (ashort != (unsigned short)-123) + result |= 1; + f = (double)0x40000000; + f = f + f; + along = 0; + along = (unsigned long)f; + if (along != 0x80000000) + result |= 2; + f -= 1.; + along = 0; + along = (unsigned long)f; + if (along != 0x7fffffff) + result |= 1; + f += 2.; + along = 0; + along = (unsigned long)f; + if (along != 0x80000001) + result |= 2; + if (result) + exit(result); +?X: +?X: The following is a test for Interactive Unix Version 4.1, which +?X: has an 'improved' compiler which can correctly cast negative +?X: floats in expression lists, but apparently not in argument lists. +?X: Contributed by Winfried Koenig <win@incom.rhein-main.de> +?X: + signal(SIGFPE, blech_in_list); + f = 123.; + along = dummy_long((unsigned long)f); + aint = dummy_int((unsigned int)f); + ashort = dummy_short((unsigned short)f); + if (along != (unsigned long)123) + result |= 4; + if (aint != (unsigned int)123) + result |= 4; + if (ashort != (unsigned short)123) + result |= 4; + exit(result); + +} +EOCP +if $cc $ccflags -o try try.c >/dev/null 2>&1; then + ./try + castflags=$? +else + echo "(I can't seem to compile the test program--assuming it can't)" + castflags=7 +fi +case "$castflags" in +0) val="$define" + echo "Yup, it can." + ;; +*) val="$undef" + echo "Nope, it can't." + ;; +esac +set d_castneg +eval $setvar +$rm -f try.* + diff --git a/mcon/U/d_cbrt.U b/mcon/U/d_cbrt.U new file mode 100644 index 0000000..11f8baa --- /dev/null +++ b/mcon/U/d_cbrt.U @@ -0,0 +1,32 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: 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: Inlibc +?MAKE: -pick add $@ %< +?S:d_cbrt: +?S: This variable conditionally defines the 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 +set cbrt d_cbrt +eval $inlibc + diff --git a/mcon/U/d_charsprf.U b/mcon/U/d_charsprf.U new file mode 100644 index 0000000..c7d5522 --- /dev/null +++ b/mcon/U/d_charsprf.U @@ -0,0 +1,52 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_charsprf.U,v $ +?RCS: Revision 3.0 1993/08/18 12:05:49 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_charsprf: cat rm +cc Setvar +?MAKE: -pick add $@ %< +?S:d_charsprf: +?S: This variable conditionally defines CHARSPRINTF if this system +?S: declares "char *sprintf()" in stdio.h. The trend seems to be to +?S: declare it as "int sprintf()". +?S:. +?C:CHARSPRINTF: +?C: This symbol is defined if this system declares "char *sprintf()" in +?C: stdio.h. The trend seems to be to declare it as "int sprintf()". It +?C: is up to the package author to declare sprintf correctly based on the +?C: symbol. +?C:. +?H:#$d_charsprf CHARSPRINTF /**/ +?H:. +?F:!ucbsprf.c !ucbsprf +?LINT:set d_charsprf +: see if sprintf is declared as int or pointer to char +echo " " +$cat >ucbsprf.c <<'EOF' +int main() +{ + int sprintf(); + char buf[10]; + exit((unsigned long)sprintf(buf,"%s","foo") > 10L); +} +EOF +if $cc -o ucbsprf ucbsprf.c >/dev/null 2>&1 && ./ucbsprf; then + echo "Your sprintf() returns (int)." >&4 + val="$undef" +else + echo "Your sprintf() returns (char*)." >&4 + val="$define" +fi +set d_charsprf +eval $setvar +$rm -f ucbsprf* + diff --git a/mcon/U/d_chown.U b/mcon/U/d_chown.U new file mode 100644 index 0000000..c0fff39 --- /dev/null +++ b/mcon/U/d_chown.U @@ -0,0 +1,33 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu> +?RCS: +?RCS: $Log: d_chown.U,v $ +?RCS: Revision 3.0.1.1 1994/08/29 16:07:14 ram +?RCS: patch32: created by ADO +?RCS: +?MAKE:d_chown: Inlibc +?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 +set chown d_chown +eval $inlibc + diff --git a/mcon/U/d_chroot.U b/mcon/U/d_chroot.U new file mode 100644 index 0000000..c31ef3c --- /dev/null +++ b/mcon/U/d_chroot.U @@ -0,0 +1,33 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu> +?RCS: +?RCS: $Log: d_chroot.U,v $ +?RCS: Revision 3.0.1.1 1994/08/29 16:07:17 ram +?RCS: patch32: created by ADO +?RCS: +?MAKE:d_chroot: Inlibc +?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 +set chroot d_chroot +eval $inlibc + diff --git a/mcon/U/d_chsize.U b/mcon/U/d_chsize.U new file mode 100644 index 0000000..236effb --- /dev/null +++ b/mcon/U/d_chsize.U @@ -0,0 +1,32 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: 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: Inlibc +?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 +set chsize d_chsize +eval $inlibc + diff --git a/mcon/U/d_ckeypad.U b/mcon/U/d_ckeypad.U new file mode 100644 index 0000000..0430877 --- /dev/null +++ b/mcon/U/d_ckeypad.U @@ -0,0 +1,54 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_ckeypad.U,v $ +?RCS: Revision 3.0 1993/08/18 12:05:50 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_ckeypad: cat cc termlib Setvar +?MAKE: -pick add $@ %< +?S:d_ckeypad: +?S: This variable controls the definition of HAS_CURSES_KEYPAD, +?S: which tells the application that the keypad() curses function +?S: is available. +?S:. +?C:HAS_CURSES_KEYPAD: +?C: This symbol indicates the availability of the keypad() function +?C: of the curses library. +?C:. +?H:#$d_ckeypad HAS_CURSES_KEYPAD /**/ +?H:. +?LINT:set d_ckeypad +: check for the "keypad()" function in the curses library +echo " " +case "$termlib" in +'') + echo "You don't have a curses library, so I won't waste time looking" >&4 + echo "to see if has the keypad() function." >&4 +*) +echo "Checking the curses library ($termlib) for the keypad() function..." >&4 + $cat >c_keypad.c <<'EOCP' +#include <curses.h> +int main() { + keypad(stdscr, TRUE); + exit(0); +} +EOCP + if $cc c_keypad.c >c_keypad.out 2>&1 ; then + val=$define + echo "It appears to have the keypad() function." + else + val=$undef + echo "Your curses library doesn't appear to have the keypad() function." + fi +esac +set d_ckeypad +eval $setvar + diff --git a/mcon/U/d_closedir.U b/mcon/U/d_closedir.U new file mode 100644 index 0000000..071f242 --- /dev/null +++ b/mcon/U/d_closedir.U @@ -0,0 +1,107 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu> +?RCS: +?RCS: $Log: d_closedir.U,v $ +?RCS: Revision 3.0.1.3 1997/02/28 15:31:26 ram +?RCS: patch61: added ?F: metalint hint +?RCS: +?RCS: Revision 3.0.1.2 1994/10/29 16:11:18 ram +?RCS: patch36: added 'ldflags' to the test compile line (ADO) +?RCS: +?RCS: Revision 3.0.1.1 1994/08/29 16:07:21 ram +?RCS: patch32: created by ADO +?RCS: +?MAKE:d_closedir d_void_closedir: Inlibc 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 +set closedir d_closedir +eval $inlibc + +@if VOID_CLOSEDIR || d_void_closedir +?X: The following contortions are designed so we can call closedir() +?X: and check whether it returns a value. The contortions are designed +?X: to portably pick up the correct directory header, for those +?X: systems that support various mutually incompatible directory functions. +?X: This is from perl5's perl.h +case "$d_closedir" in +"$define") + echo " " + echo "Checking whether closedir() returns a status..." >&4 + cat > closedir.c <<EOM +#$i_dirent I_DIRENT /**/ +#$i_sysdir I_SYS_DIR /**/ +#$i_sysndir I_SYS_NDIR /**/ + +#if defined(I_DIRENT) +#include <dirent.h> +#if defined(NeXT) && defined(I_SYS_DIR) /* NeXT needs dirent + sys/dir.h */ +#include <sys/dir.h> +#endif +#else +#ifdef I_SYS_NDIR +#include <sys/ndir.h> +#else +#ifdef I_SYS_DIR +#ifdef hp9000s500 +#include <ndir.h> /* may be wrong in the future */ +#else +#include <sys/dir.h> +#endif +#endif +#endif +#endif +int main() { return closedir(opendir(".")); } +EOM + if $cc $ccflags $ldflags -o closedir closedir.c $libs > /dev/null 2>&1; then + if ./closedir > /dev/null 2>&1 ; then + echo "Yes, it does." + val="$undef" + else + echo "No, it doesn't." + val="$define" + fi + else + echo "(I can't seem to compile the test program--assuming it doesn't)" + val="$define" + fi + ;; +*) + val="$undef"; + ;; +esac +set d_void_closedir +eval $setvar +$rm -f closedir* +@end diff --git a/mcon/U/d_const.U b/mcon/U/d_const.U new file mode 100644 index 0000000..4801d09 --- /dev/null +++ b/mcon/U/d_const.U @@ -0,0 +1,66 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_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() +{ + const char *foo; + const spug y; +} +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 +$rm -f const.c const.o + diff --git a/mcon/U/d_crypt.U b/mcon/U/d_crypt.U new file mode 100644 index 0000000..84906e6 --- /dev/null +++ b/mcon/U/d_crypt.U @@ -0,0 +1,76 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_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 Csym Setvar _a Inlibc +?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 +echo " " +set crypt d_crypt +eval $inlibc +case "$d_crypt" in +$define) cryptlib='' ;; +*) if set crypt val -f d_crypt; eval $csym; $val; then + echo 'crypt() found.' >&4 + val="$define" + cryptlib='' + else + 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 + fi + set d_crypt + eval $setvar + ;; +esac + diff --git a/mcon/U/d_csh.U b/mcon/U/d_csh.U new file mode 100644 index 0000000..c0a792e --- /dev/null +++ b/mcon/U/d_csh.U @@ -0,0 +1,62 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_csh.U,v $ +?RCS: Revision 3.0.1.1 1997/02/28 15:32:18 ram +?RCS: patch61: added full_csh to preserve the full path even when portable +?RCS: +?RCS: Revision 3.0 1993/08/18 12:05:53 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_csh full_csh: csh Setvar +?MAKE: -pick add $@ %< +?S:d_csh: +?S: This variable conditionally defines the CSH symbol, which +?S: indicates to the C program that the C-shell exists. +?S:. +?S:full_csh: +?S: This variable contains the full pathname to 'csh', whether or +?S: not the user has specified 'portability'. This is only used +?S: in the compiled C program, and we assume that all systems which +?S: can share this executable will have the same full pathname to +?S: 'csh.' +?S:. +?C:HAS_CSH: +?C: This symbol, if defined, indicates that the C-shell exists. +?C:. +?C:CSH: +?C: This symbol, if defined, contains the full pathname of csh. +?C:. +?X: Previously, I just did $d_csh CSH "$full_csh", but that caused +?X: problems on VMS where the config.sh extraction program changes +?X: $undef to a real cpp undef, and they then had #undef CSH "" +?X: which the compiler didn't like. It's easy to work around this, +?X: so I did. --AD 3/1998. +?X: And we don't want to define CSH if !HAS_CSH, but we don't want +?X: those lines in config.h if they don't need CSH, so protect with ?CSH +?X: and not ?%<. --RAM, 15/02/2004 +?H:?%<:#$d_csh HAS_CSH /**/ +?H:?CSH:#ifdef HAS_CSH +?H:?CSH:#define CSH "$full_csh" /**/ +?H:?CSH:#endif +?H:. +?LINT:set d_csh +: get csh whereabouts +case "$csh" in +'csh') val="$undef" ;; +*) val="$define" ;; +esac +set d_csh +eval $setvar +: Respect a hint or command line value for full_csh. +case "$full_csh" in +'') full_csh=$csh ;; +esac + diff --git a/mcon/U/d_ctermid.U b/mcon/U/d_ctermid.U new file mode 100644 index 0000000..5f1f7ee --- /dev/null +++ b/mcon/U/d_ctermid.U @@ -0,0 +1,31 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_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: Inlibc +?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 +set ctermid d_ctermid +eval $inlibc + diff --git a/mcon/U/d_cuserid.U b/mcon/U/d_cuserid.U new file mode 100644 index 0000000..a6d46c5 --- /dev/null +++ b/mcon/U/d_cuserid.U @@ -0,0 +1,34 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu> +?RCS: +?RCS: $Log: d_cuserid.U,v $ +?RCS: Revision 3.0.1.1 1994/08/29 16:07:25 ram +?RCS: patch32: created by ADO +?RCS: +?MAKE:d_cuserid: Inlibc +?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 +set cuserid d_cuserid +eval $inlibc + diff --git a/mcon/U/d_dbl_dig.U b/mcon/U/d_dbl_dig.U new file mode 100644 index 0000000..aa53e73 --- /dev/null +++ b/mcon/U/d_dbl_dig.U @@ -0,0 +1,61 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu> +?RCS: +?RCS: $Log: d_dbl_dig.U,v $ +?RCS: Revision 3.0.1.1 1994/08/29 16:07:28 ram +?RCS: patch32: created by ADO +?RCS: +?MAKE:d_dbl_dig: Myread contains cat rm Setvar i_limits i_float \ + cppstdin cppflags cppminus +?MAKE: -pick add $@ %< +?S:d_dbl_dig: +?S: This variable conditionally defines d_dbl_dig if this system's +?S: header files provide DBL_DIG, which is the number of significant +?S: digits in a double precision number. +?S:. +?C:HAS_DBL_DIG: +?C: This symbol, if defined, indicates that this system's <float.h> +?C: or <limits.h> defines the symbol DBL_DIG, which is the number +?C: of significant digits in a double precision number. If this +?C: symbol is not defined, a guess of 15 is usually pretty good. +?C:. +?H:#$d_dbl_dig HAS_DBL_DIG /* */ +?H:. +?F:!dbl_dig.c +?LINT:set d_dbl_dig +: See if number of significant digits in a double precision number is known +echo " " +$cat >dbl_dig.c <<EOM +#$i_limits I_LIMITS +#$i_float I_FLOAT +#ifdef I_LIMITS +#include <limits.h> +#endif +#ifdef I_FLOAT +#include <float.h> +#endif +#ifdef DBL_DIG +printf("Contains DBL_DIG"); +#endif +EOM +$cppstdin $cppflags $cppminus < dbl_dig.c >dbl_dig.E 2>/dev/null +if $contains 'DBL_DIG' dbl_dig.E >/dev/null 2>&1; then + echo "DBL_DIG found." >&4 + val="$define" +else + echo "DBL_DIG NOT found." >&4 + val="$undef" +fi +$rm -f dbl_dig.? +set d_dbl_dig +eval $setvar + diff --git a/mcon/U/d_debugging.U b/mcon/U/d_debugging.U new file mode 100644 index 0000000..fabe096 --- /dev/null +++ b/mcon/U/d_debugging.U @@ -0,0 +1,42 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: +?MAKE:d_debugging: Myread Setvar spackage cat +?MAKE: -pick add $@ %< +?S:d_debugging: +?S: This variable conditionally defines the DEBUGGING symbol. +?S:. +?C:DEBUGGING: +?C: This symbol, when defined, activates extra debugging. +?C:. +?H:#$d_debugging DEBUGGING +?H:. +?LINT:set d_debugging +: see whether debugging should be turned on +$cat <<EOM + +$spackage comes with a debugging option. Enabling that option will +compile extra debugging code that may slow-down the execution and/or +bloat the size of the executable by a significant amount. + +EOM +case "$d_debugging" in +"$define") dflt=y;; +*) dflt=n;; +esac +rp='Enable extra debugging code' +. ./myread +val="$undef" +case "$ans" in +y|Y) val="$define";; +esac +set d_debugging +eval $setvar + diff --git a/mcon/U/d_difftime.U b/mcon/U/d_difftime.U new file mode 100644 index 0000000..364ccbc --- /dev/null +++ b/mcon/U/d_difftime.U @@ -0,0 +1,33 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu> +?RCS: +?RCS: $Log: d_difftime.U,v $ +?RCS: Revision 3.0.1.1 1994/08/29 16:07:31 ram +?RCS: patch32: created by ADO +?RCS: +?MAKE:d_difftime: Inlibc +?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:. +?C:HAS_DIFFTIME : +?C: This symbol, if defined, indicates that the difftime routine is +?C: available. +?C:. +?H:#$d_difftime HAS_DIFFTIME /**/ +?H:. +?LINT:set d_difftime +: see if difftime exists +set difftime d_difftime +eval $inlibc + diff --git a/mcon/U/d_dlerror.U b/mcon/U/d_dlerror.U new file mode 100644 index 0000000..a3bb995 --- /dev/null +++ b/mcon/U/d_dlerror.U @@ -0,0 +1,46 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu> +?RCS: +?RCS: $Log: d_dlerror.U,v $ +?RCS: Revision 3.0.1.2 1995/07/25 13:52:49 ram +?RCS: patch56: force compile-link test since symbol might lie in crt0.o (ADO) +?RCS: +?RCS: Revision 3.0.1.1 1994/10/29 16:11:23 ram +?RCS: patch36: created by ADO +?RCS: +?MAKE:d_dlerror: Inlibc runnm +?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:. +?T: xxx_runnm +?LINT:set d_dlerror +?X: We don't permanently change runnm, but we do temporarily. +?LINT: change runnm +: see if dlerror exists +?X: On NetBSD and FreeBSD, dlerror might be available, but it is in +?X: /usr/lib/crt0.o, not in any of the libraries. Therefore, do not +?X: use the nm extraction, but use a real compile and link test instead. +xxx_runnm="$runnm" +runnm=false +set dlerror d_dlerror +eval $inlibc +runnm="$xxx_runnm" + diff --git a/mcon/U/d_dlopen.U b/mcon/U/d_dlopen.U new file mode 100644 index 0000000..ad62c53 --- /dev/null +++ b/mcon/U/d_dlopen.U @@ -0,0 +1,45 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu> +?RCS: +?RCS: $Log: d_dlopen.U,v $ +?RCS: Revision 3.0.1.2 1995/07/25 13:52:56 ram +?RCS: patch56: force compile-link test since symbol might lie in crt0.o (ADO) +?RCS: +?RCS: Revision 3.0.1.1 1994/08/29 16:07:34 ram +?RCS: patch32: created by ADO +?RCS: +?MAKE:d_dlopen: Inlibc runnm +?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:. +?T: xxx_runnm +?LINT:set d_dlopen +?X: We don't permanently change runnm, but we do temporarily. +?LINT: change runnm +: see if dlopen exists +?X: On NetBSD and FreeBSD, dlopen is available, but it is in +?X: /usr/lib/crt0.o, not in any of the libraries. Therefore, do not +?X: use the nm extraction, but use a real compile and link test instead. +xxx_runnm="$runnm" +runnm=false +set dlopen d_dlopen +eval $inlibc +runnm="$xxx_runnm" + diff --git a/mcon/U/d_dosuid.U b/mcon/U/d_dosuid.U new file mode 100644 index 0000000..a584e1a --- /dev/null +++ b/mcon/U/d_dosuid.U @@ -0,0 +1,169 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: Tye McQueen <tye@metronet.com> added safe setuid script checks. +?RCS: +?RCS: $Log: d_dosuid.U,v $ +?RCS: Revision 3.0.1.2 1997/02/28 15:33:03 ram +?RCS: patch61: moved unit to TOP via a ?Y: layout directive +?RCS: patch61: tell them /dev/fd is not about floppy disks +?RCS: +?RCS: Revision 3.0.1.1 1994/10/29 16:12:08 ram +?RCS: patch36: added checks for secure setuid scripts (Tye McQueen) +?RCS: +?RCS: Revision 3.0 1993/08/18 12:05:55 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_dosuid d_suidsafe: cat contains ls rm test Myread Setvar \ + Oldconfig Guess package hint +?MAKE: -pick add $@ %< +?S:d_suidsafe: +?S: This variable conditionally defines SETUID_SCRIPTS_ARE_SECURE_NOW +?S: if setuid scripts can be secure. This test looks in /dev/fd/. +?S:. +?S:d_dosuid: +?S: This variable conditionally defines the symbol DOSUID, which +?S: tells the C program that it should insert setuid emulation code +?S: on hosts which have setuid #! scripts disabled. +?S:. +?C:SETUID_SCRIPTS_ARE_SECURE_NOW: +?C: This symbol, if defined, indicates that the bug that prevents +?C: setuid scripts from being secure is not present in this kernel. +?C:. +?C:DOSUID: +?C: This symbol, if defined, indicates that the C program should +?C: check the script that it is executing for setuid/setgid bits, and +?C: attempt to emulate setuid/setgid on systems that have disabled +?C: setuid #! scripts because the kernel can't do it securely. +?C: It is up to the package designer to make sure that this emulation +?C: is done securely. Among other things, it should do an fstat on +?C: the script it just opened to make sure it really is a setuid/setgid +?C: script, it should make sure the arguments passed correspond exactly +?C: to the argument on the #! line, and it should not trust any +?C: subprocesses to which it must pass the filename rather than the +?C: file descriptor of the script to be executed. +?C:. +?H:#$d_suidsafe SETUID_SCRIPTS_ARE_SECURE_NOW /**/ +?H:#$d_dosuid DOSUID /**/ +?H:. +?Y:TOP +?F:!reflect +?LINT: set d_suidsafe +?LINT: set d_dosuid +: see if setuid scripts can be secure +$cat <<EOM + +Some kernels have a bug that prevents setuid #! scripts from being +secure. Some sites have disabled setuid #! scripts because of this. + +First let's decide if your kernel supports secure setuid #! scripts. +(If setuid #! scripts would be secure but have been disabled anyway, +don't say that they are secure if asked.) + +EOM + +val="$undef" +if $test -d /dev/fd; then + echo "#!$ls" >reflect + chmod +x,u+s reflect + ./reflect >flect 2>&1 + if $contains "/dev/fd" flect >/dev/null; then + echo "Congratulations, your kernel has secure setuid scripts!" >&4 + val="$define" + else + $cat <<EOM +If you are not sure if they are secure, I can check but I'll need a +username and password different from the one you are using right now. +If you don't have such a username or don't want me to test, simply +enter 'none'. + +EOM + rp='Other username to test security of setuid scripts with?' + dflt='none' + . ./myread + case "$ans" in + n|none) + case "$d_suidsafe" in + '') echo "I'll assume setuid scripts are *not* secure." >&4 + dflt=n;; + "$undef") + echo "Well, the $hint value is *not* secure." >&4 + dflt=n;; + *) echo "Well, the $hint value *is* secure." >&4 + dflt=y;; + esac + ;; + *) + $rm -f reflect flect + echo "#!$ls" >reflect + chmod +x,u+s reflect + echo >flect + chmod a+w flect + echo '"su" will (probably) prompt you for '"$ans's password." + su $ans -c './reflect >flect' + if $contains "/dev/fd" flect >/dev/null; then + echo "Okay, it looks like setuid scripts are secure." >&4 + dflt=y + else + echo "I don't think setuid scripts are secure." >&4 + dflt=n + fi + ;; + esac + rp='Does your kernel have *secure* setuid scripts?' + . ./myread + case "$ans" in + [yY]*) val="$define";; + *) val="$undef";; + esac + fi +else + echo "I don't think setuid scripts are secure (no /dev/fd directory)." >&4 + echo "(That's for file descriptors, not floppy disks.)" + val="$undef" +fi +set d_suidsafe +eval $setvar + +$rm -f reflect flect + +: now see if they want to do setuid emulation +echo " " +val="$undef" +case "$d_suidsafe" in +"$define") + val="$undef" + echo "No need to emulate SUID scripts since they are secure here." >& 4 + ;; +*) + $cat <<EOM +Some systems have disabled setuid scripts, especially systems where +setuid scripts cannot be secure. On systems where setuid scripts have +been disabled, the setuid/setgid bits on scripts are currently +useless. It is possible for $package to detect those bits and emulate +setuid/setgid in a secure fashion. This emulation will only work if +setuid scripts have been disabled in your kernel. + +EOM + case "$d_dosuid" in + "$define") dflt=y ;; + *) dflt=n ;; + esac + rp="Do you want to do setuid/setgid emulation?" + . ./myread + case "$ans" in + [yY]*) val="$define";; + *) val="$undef";; + esac + ;; +esac +set d_dosuid +eval $setvar + diff --git a/mcon/U/d_drem.U b/mcon/U/d_drem.U new file mode 100644 index 0000000..4da2414 --- /dev/null +++ b/mcon/U/d_drem.U @@ -0,0 +1,35 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu> +?RCS: +?RCS: $Log: d_drem.U,v $ +?RCS: Revision 3.0.1.1 1994/10/29 16:12:14 ram +?RCS: patch36: created by ADO +?RCS: +?MAKE:d_drem: Inlibc +?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 +set drem d_drem +eval $inlibc + diff --git a/mcon/U/d_dup2.U b/mcon/U/d_dup2.U new file mode 100644 index 0000000..070bfaa --- /dev/null +++ b/mcon/U/d_dup2.U @@ -0,0 +1,31 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_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: Inlibc +?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 +set dup2 d_dup2 +eval $inlibc + diff --git a/mcon/U/d_eofpipe.U b/mcon/U/d_eofpipe.U new file mode 100644 index 0000000..86b30a5 --- /dev/null +++ b/mcon/U/d_eofpipe.U @@ -0,0 +1,93 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_eofpipe.U,v $ +?RCS: Revision 3.0.1.1 1994/10/29 16:12:40 ram +?RCS: patch36: call ./bsd explicitely instead of relying on PATH +?RCS: +?RCS: Revision 3.0 1993/08/18 12:05:57 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_eofpipe: cat +cc +ccflags +libs rm Oldconfig Guess echo n c +?MAKE: -pick add $@ %< +?S:d_eofpipe: +?S: This variable conditionally defines the EOFPIPE symbol, which +?S: indicates to the C program that select will correctly detect the EOF +?S: condition when pipe is closed from the other end. +?S:. +?C:EOFPIPE: +?C: This symbol, if defined, indicates that EOF condition will be detected +?C: by the reader of the pipe when it is closed by the writing process. +?C: That is, a select() call on that file descriptor will not block when +?C: only an EOF remains (typical behaviour for BSD systems). +?C:. +?H:#$d_eofpipe EOFPIPE /**/ +?H:. +?F:!mpipe +: see if pipe correctly gives the EOF condition +echo " " +case "$d_eofpipe" in +'') + echo "Let's see if your pipes return EOF to select() upon closing..." >&4 + $cat >pipe.c <<'EOP' +int main() +{ + int pd[2]; + int mask; + + pipe(pd); + if (0 == fork()) { + close(pd[0]); + close(pd[1]); + exit(0); + } + + close(pd[1]); + mask = 1 << pd[0]; + alarm(2); + select(32, &mask, (int *) 0, (int *) 0, (char *) 0); + if (0 == read(pd[0], &mask, 1)) + exit(0); + + exit(1); +} +EOP + if $cc $ccflags -o pipe pipe.c $libs >/dev/null 2>&1; then +?X: Use a script to avoid the possible 'alarm call' message + echo "./pipe || exit 1" > mpipe + chmod +x mpipe + ./mpipe >/dev/null 2>&1 + case $? in + 0) d_eofpipe="$define";; + *) d_eofpipe="$undef";; + esac + else + echo "(The test program did not compile correctly -- Guessing.)" + if ./bsd; then + d_eofpipe="$define" + else + d_eofpipe="$undef" + fi + fi + case "$d_eofpipe" in + "$define") echo "Yes, they do.";; + *) echo "No, they don't! (sigh)";; + esac + ;; +*) + $echo $n "Your pipes $c" + case "$d_eofpipe" in + "$define") echo "allow select() to see EOF upon closing.";; + *) echo "won't let select() see EOF on closing.";; + esac + ;; +esac +$rm -f *pipe* core + diff --git a/mcon/U/d_euc2jis.U b/mcon/U/d_euc2jis.U new file mode 100644 index 0000000..a80406d --- /dev/null +++ b/mcon/U/d_euc2jis.U @@ -0,0 +1,32 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_euc2jis.U,v $ +?RCS: Revision 3.0 1993/08/18 12:05:58 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_euc2jis: Inlibc +?MAKE: -pick add $@ %< +?S:d_euc2jis: +?S: This variable conditionally defines the HAS_EUC2JIS symbol, which +?S: indicates to the C program that the euc2jis() routine is available +?S: to convert EUC to JIS. +?S:. +?C:HAS_EUC2JIS: +?C: This symbol, if defined, indicates that the euc2jis routine is +?C: available to convert EUC to JIS. +?C:. +?H:#$d_euc2jis HAS_EUC2JIS /**/ +?H:. +?LINT:set d_euc2jis +: see if euc2jis exists +set euc2jis d_euc2jis +eval $inlibc + diff --git a/mcon/U/d_fchmod.U b/mcon/U/d_fchmod.U new file mode 100644 index 0000000..1939d78 --- /dev/null +++ b/mcon/U/d_fchmod.U @@ -0,0 +1,32 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: 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: Inlibc +?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 +set fchmod d_fchmod +eval $inlibc + diff --git a/mcon/U/d_fchown.U b/mcon/U/d_fchown.U new file mode 100644 index 0000000..0efbbe2 --- /dev/null +++ b/mcon/U/d_fchown.U @@ -0,0 +1,32 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: 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: Inlibc +?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 +set fchown d_fchown +eval $inlibc + diff --git a/mcon/U/d_fcntl.U b/mcon/U/d_fcntl.U new file mode 100644 index 0000000..24ea9b2 --- /dev/null +++ b/mcon/U/d_fcntl.U @@ -0,0 +1,31 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_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: Inlibc +?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 +set fcntl d_fcntl +eval $inlibc + diff --git a/mcon/U/d_fd_set.U b/mcon/U/d_fd_set.U new file mode 100644 index 0000000..8e13de2 --- /dev/null +++ b/mcon/U/d_fd_set.U @@ -0,0 +1,138 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_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 +?MAKE: -pick add $@ %< +?S:d_fd_set: +?S: This variable contains the eventual value of the HAS_FD_SET symbol, +?S: which indicates if your C compiler knows about the fd_set typedef. +?S:. +?S:d_fd_macros: +?S: This variable contains the eventual value of the HAS_FD_MACROS symbol, +?S: which indicates if your C compiler knows about the macros which +?S: manipulate an fd_set. +?S:. +?S:d_fds_bits: +?S: This variable contains the eventual value of the HAS_FDS_BITS symbol, +?S: which indicates if your fd_set typedef contains the fds_bits member. +?S: If you have an fd_set typedef, but the dweebs who installed it did +?S: a half-fast job and neglected to provide the macros to manipulate +?S: an fd_set, HAS_FDS_BITS will let us know how to fix the gaffe. +?S:. +?C:HAS_FD_SET: +?C: This symbol, when defined, indicates presence of the fd_set typedef +?C: in <sys/types.h> +?C:. +?C:HAS_FD_MACROS: +?C: This symbol, when defined, indicates presence of the macros used to +?C: manipulate an fd_set. +?C:. +?C:HAS_FDS_BITS: +?C: This symbol, when defined, indicates presence of the fds_bits member in +?C: fd_set. This knowledge is useful if fd_set is available but the macros +?C: aren't. +?C:. +?H:#$d_fd_set HAS_FD_SET /**/ +?H:#$d_fd_macros HAS_FD_MACROS /**/ +?H:#$d_fds_bits HAS_FDS_BITS /**/ +?H:. +?F:!fd_set +: check for fd_set items +$cat <<EOM + +Checking to see how well your C compiler handles fd_set and friends ... +EOM +?X: The FD_SET macros can be in strange places. On some SysV-based +?X: systems, they are in <sys/bsdtypes.h>, which is included (perhaps) +?X: by <sys/socket.h>. We won't force people to include +?X: <sys/bsdtypes.h> because it might introduce other +?X: incompatibilities. +$cat >fd_set.c <<EOCP +#$i_systime I_SYS_TIME +#$i_sysselct I_SYS_SELECT +#$d_socket HAS_SOCKET +#include <sys/types.h> +#ifdef HAS_SOCKET +#include <sys/socket.h> /* Might include <sys/bsdtypes.h> */ +#endif +#ifdef I_SYS_TIME +#include <sys/time.h> +#endif +#ifdef I_SYS_SELECT +#include <sys/select.h> +#endif +int main() { + fd_set fds; + +#ifdef TRYBITS + if(fds.fds_bits); +#endif + +#if defined(FD_SET) && defined(FD_CLR) && defined(FD_ISSET) && defined(FD_ZERO) + exit(0); +#else + exit(1); +#endif +} +EOCP +if $cc $ccflags -DTRYBITS -o fd_set fd_set.c >fd_set.out 2>&1 ; then + d_fds_bits="$define" + d_fd_set="$define" + echo "Well, your system knows about the normal fd_set typedef..." >&4 + if ./fd_set; then + echo "and you have the normal fd_set macros (just as I'd expect)." >&4 + d_fd_macros="$define" + else + $cat >&4 <<'EOM' +but not the normal fd_set macros! Gaaack! I'll have to cover for you. +EOM + d_fd_macros="$undef" + fi +else + $cat <<'EOM' +Hmm, your compiler has some difficulty with fd_set. Checking further... +EOM + if $cc $ccflags -o fd_set fd_set.c >fd_set.out 2>&1 ; then + d_fds_bits="$undef" + d_fd_set="$define" + echo "Well, your system has some sort of fd_set available..." >&4 + if ./fd_set; then + echo "and you have the normal fd_set macros." >&4 + d_fd_macros="$define" + else + $cat <<'EOM' +but not the normal fd_set macros! Gross! More work for me... +EOM + d_fd_macros="$undef" + fi + else + echo "Well, you got zip. That's OK, I can roll my own fd_set stuff." >&4 + d_fd_set="$undef" + d_fds_bits="$undef" + d_fd_macros="$undef" + fi +fi +$rm -f fd_set* + + diff --git a/mcon/U/d_ffs.U b/mcon/U/d_ffs.U new file mode 100644 index 0000000..cda3896 --- /dev/null +++ b/mcon/U/d_ffs.U @@ -0,0 +1,33 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_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: Inlibc +?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 +set ffs d_ffs +eval $inlibc + diff --git a/mcon/U/d_fgetpos.U b/mcon/U/d_fgetpos.U new file mode 100644 index 0000000..8553f96 --- /dev/null +++ b/mcon/U/d_fgetpos.U @@ -0,0 +1,31 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_fgetpos.U,v $ +?RCS: Revision 3.0.1.1 1994/06/20 06:57:33 ram +?RCS: patch30: created +?RCS: +?MAKE:d_fgetpos: Inlibc +?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 +set fgetpos d_fgetpos +eval $inlibc + diff --git a/mcon/U/d_flexfnam.U b/mcon/U/d_flexfnam.U new file mode 100644 index 0000000..0f53a0b --- /dev/null +++ b/mcon/U/d_flexfnam.U @@ -0,0 +1,77 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_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 +?LINT:set d_flexfnam +: 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: +rmlist="$rmlist /tmp/cf$$" +$test -d /tmp/cf$$ || mkdir /tmp/cf$$ +first=123456789abcdef +second=/tmp/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 /tmp/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 /tmp/cf$$ 123456789abcde* + diff --git a/mcon/U/d_flock.U b/mcon/U/d_flock.U new file mode 100644 index 0000000..c3252e3 --- /dev/null +++ b/mcon/U/d_flock.U @@ -0,0 +1,31 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_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: Inlibc +?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 +set flock d_flock +eval $inlibc + diff --git a/mcon/U/d_fmod.U b/mcon/U/d_fmod.U new file mode 100644 index 0000000..bad72e7 --- /dev/null +++ b/mcon/U/d_fmod.U @@ -0,0 +1,34 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu> +?RCS: +?RCS: $Log: d_fmod.U,v $ +?RCS: Revision 3.0.1.1 1994/10/29 16:12:46 ram +?RCS: patch36: created by ADO +?RCS: +?MAKE:d_fmod: Inlibc +?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 +set fmod d_fmod +eval $inlibc + diff --git a/mcon/U/d_fork.U b/mcon/U/d_fork.U new file mode 100644 index 0000000..796aee3 --- /dev/null +++ b/mcon/U/d_fork.U @@ -0,0 +1,33 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu> +?RCS: +?RCS: $Log: d_fork.U,v $ +?RCS: Revision 3.0.1.1 1994/08/29 16:07:38 ram +?RCS: patch32: created by ADO +?RCS: +?MAKE:d_fork: Inlibc +?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 +set fork d_fork +eval $inlibc + diff --git a/mcon/U/d_fsetpos.U b/mcon/U/d_fsetpos.U new file mode 100644 index 0000000..ce3d195 --- /dev/null +++ b/mcon/U/d_fsetpos.U @@ -0,0 +1,31 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_fsetpos.U,v $ +?RCS: Revision 3.0.1.1 1994/06/20 06:57:38 ram +?RCS: patch30: created +?RCS: +?MAKE:d_fsetpos: Inlibc +?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 +set fsetpos d_fsetpos +eval $inlibc + diff --git a/mcon/U/d_ftime.U b/mcon/U/d_ftime.U new file mode 100644 index 0000000..0e41cc7 --- /dev/null +++ b/mcon/U/d_ftime.U @@ -0,0 +1,78 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_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: Inlibc Setvar +?MAKE: -pick add $@ %< +?S:d_ftime: +?S: This variable conditionally defines the HAS_FTIME symbol, which indicates +?S: that the ftime() routine exists. The ftime() routine is basically +?S: a sub-second accuracy clock. +?S:. +?S:d_gettimeod: +?S: This variable conditionally defines the HAS_GETTIMEOFDAY symbol, which +?S: indicates that the gettimeofday() system call exists (to obtain a +?S: sub-second accuracy clock). You should probably include <sys/resource.h>. +?S:. +?C:HAS_FTIME (FTIMER): +?C: This symbol, if defined, indicates that the ftime() routine exists. +?C: It is basically a sub-second accuracy clock, but is less accurate +?C: than gettimeofday(2) anyway. The type "Timeval" should be used to +?C: refer to "struct timeb". +?C:. +?C:HAS_GETTIMEOFDAY (GETTIMEOFDAY): +?C: This symbol, if defined, indicates that the gettimeofday() system +?C: call is available for a sub-second accuracy clock. Usually, the file +?C: <sys/resource.h> needs to be included (see I_SYS_RESOURCE). +?C: The type "Timeval" should be used to refer to "struct timeval". +?C:. +?H:#$d_ftime HAS_FTIME /**/ +?H:#$d_gettimeod HAS_GETTIMEOFDAY /**/ +?H:?%<:@if HAS_FTIME +?H:?%<:#ifdef HAS_FTIME +?H:?%<:#define Timeval struct timeb /* Structure used by ftime() */ +?H:?%<:#endif +?H:?%<:@end +?H:?%<:@if HAS_GETTIMEOFDAY +?H:?%<:#ifdef HAS_GETTIMEOFDAY +?H:?%<:#define Timeval struct timeval /* Structure used by gettimeofday() */ +?H:?%<:#endif +?H:?%<:@end +?H:. +?X:FIXME +?X:?I:?d_ftime:i_systimeb +?X:?I:?d_gettimeod:i_sysresrc +?LINT:set d_gettimeod d_ftime +?LINT:known Timeval +: see if gettimeofday or ftime exists +?X: +?X: Give priority to gettimeofday(2) because timing is more accurate +?X: +set gettimeofday d_gettimeod +eval $inlibc +case "$d_gettimeod" in +"$undef") + set ftime d_ftime + eval $inlibc + ;; +*) + val="$undef"; set d_ftime; eval $setvar + ;; +esac +case "$d_gettimeod$d_ftime" in +"$undef$undef") + echo " " + echo 'No ftime() nor gettimeofday() -- timing may be less accurate.' >&4 + ;; +esac + diff --git a/mcon/U/d_ftrncate.U b/mcon/U/d_ftrncate.U new file mode 100644 index 0000000..29202b2 --- /dev/null +++ b/mcon/U/d_ftrncate.U @@ -0,0 +1,31 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_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: Inlibc +?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 +set ftruncate d_ftrncate +eval $inlibc + diff --git a/mcon/U/d_gconvert.U b/mcon/U/d_gconvert.U new file mode 100644 index 0000000..367da20 --- /dev/null +++ b/mcon/U/d_gconvert.U @@ -0,0 +1,147 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu> +?RCS: +?RCS: $Log: d_gconvert.U,v $ +?RCS: Revision 3.0.1.3 1997/02/28 15:33:38 ram +?RCS: patch61: integrated new unit from perl5 +?RCS: +?RCS: Revision 3.0.1.2 1995/07/25 13:55:59 ram +?RCS: patch56: improved comments about the Gconvert macro (ADO) +?RCS: patch56: force compile-link test since it may exist but be unusable (ADO) +?RCS: +?RCS: Revision 3.0.1.1 1994/10/29 16:12:51 ram +?RCS: patch36: created by ADO +?RCS: +?MAKE:d_Gconvert: cat cc ccflags ldflags libs Inlibc rm _o +?MAKE: -pick add $@ %< +?S:d_Gconvert: +?S: This variable holds what Gconvert is defined as to convert +?S: floating point numbers into strings. It could be 'gconvert' +?S: or a more complex macro emulating gconvert with gcvt() or sprintf. +?S:. +?C:Gconvert: +?C: This preprocessor macro is defined to convert a floating point +?C: number to a string without a trailing decimal point. This +?C: emulates the behavior of sprintf("%g"), but is sometimes much more +?C: efficient. If gconvert() is not available, but gcvt() drops the +?C: trailing decimal point, then gcvt() is used. If all else fails, +?C: a macro using sprintf("%g") is used. Arguments for the Gconvert +?C: macro are: value, number of digits, whether trailing zeros should +?C: be retained, and the output buffer. +?C: Possible values are: +?C: d_Gconvert='gconvert((x),(n),(t),(b))' +?C: d_Gconvert='gcvt((x),(n),(b))' +?C: d_Gconvert='sprintf((b),"%.*g",(n),(x))' +?C: The last two assume trailing zeros should not be kept. +?C:. +?H:#define Gconvert(x,n,t,b) $d_Gconvert +?H:. +?T: xxx_list xxx_convert +?F:!try +?X: +: Check how to convert floats to strings. +echo " " +echo "Checking for an efficient way to convert floats to strings." +?X: We want to be sure to drop trailing decimal points (perl5 +?X: needs this). +$cat >try.c <<'EOP' +#ifdef TRY_gconvert +#define Gconvert(x,n,t,b) gconvert((x),(n),(t),(b)) +char *myname = "gconvert"; +#endif +#ifdef TRY_gcvt +#define Gconvert(x,n,t,b) gcvt((x),(n),(b)) +char *myname = "gcvt"; +#endif +#ifdef TRY_sprintf +#define Gconvert(x,n,t,b) sprintf((b),"%.*g",(n),(x)) +char *myname = "sprintf"; +#endif + +#include <stdio.h> + +int +checkit(expect, got) +char *expect; +char *got; +{ + if (strcmp(expect, got)) { + printf("%s oddity: Expected %s, got %s\n", + myname, expect, got); + exit(1); + } +} + +int +int main() +{ + char buf[64]; + buf[63] = '\0'; + + /* This must be 1st test on (which?) platform */ + /* Alan Burlison <AlanBurlsin@unn.unisys.com> */ + Gconvert(0.1, 8, 0, buf); + checkit("0.1", buf); + + Gconvert(1.0, 8, 0, buf); + checkit("1", buf); + + Gconvert(0.0, 8, 0, buf); + checkit("0", buf); + + Gconvert(-1.0, 8, 0, buf); + checkit("-1", buf); + + /* Some Linux gcvt's give 1.e+5 here. */ + Gconvert(100000.0, 8, 0, buf); + checkit("100000", buf); + + /* Some Linux gcvt's give -1.e+5 here. */ + Gconvert(-100000.0, 8, 0, buf); + checkit("-100000", buf); + + exit(0); +} +EOP +?X: List of order in which to search for functions. +?X: Usual order of efficiency is gconvert gcvt sprintf +?X: Respect a previous or hinted value. +case "$d_Gconvert" in +gconvert*) xxx_list='gconvert gcvt sprintf' ;; +gcvt*) xxx_list='gcvt gconvert sprintf' ;; +sprintf*) xxx_list='sprintf gconvert gcvt' ;; +*) xxx_list='gconvert gcvt sprintf' ;; +esac + +for xxx_convert in $xxx_list; do + echo "Trying $xxx_convert" + $rm -f try try$_o + if $cc $ccflags -DTRY_$xxx_convert $ldflags -o try \ + try.c $libs > /dev/null 2>&1 ; then + echo "$xxx_convert" found. >&4 + if ./try; then + echo "I'll use $xxx_convert to convert floats into a string." >&4 + break; + else + echo "...But $xxx_convert didn't work as I expected." + fi + else + echo "$xxx_convert NOT found." >&4 + fi +done + +case "$xxx_convert" in +gconvert) d_Gconvert='gconvert((x),(n),(t),(b))' ;; +gcvt) d_Gconvert='gcvt((x),(n),(b))' ;; +*) d_Gconvert='sprintf((b),"%.*g",(n),(x))' ;; +esac + diff --git a/mcon/U/d_getgrps.U b/mcon/U/d_getgrps.U new file mode 100644 index 0000000..0cd16ea --- /dev/null +++ b/mcon/U/d_getgrps.U @@ -0,0 +1,33 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_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: Inlibc +?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 +set getgroups d_getgrps +eval $inlibc + diff --git a/mcon/U/d_gethbynm.U b/mcon/U/d_gethbynm.U new file mode 100644 index 0000000..a7040ed --- /dev/null +++ b/mcon/U/d_gethbynm.U @@ -0,0 +1,32 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: 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: Inlibc +?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 +set gethostbyname d_gethbynm +eval $inlibc + diff --git a/mcon/U/d_gethent.U b/mcon/U/d_gethent.U new file mode 100644 index 0000000..fa1427f --- /dev/null +++ b/mcon/U/d_gethent.U @@ -0,0 +1,31 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_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: Inlibc +?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 +set gethostent d_gethent +eval $inlibc + diff --git a/mcon/U/d_gethid.U b/mcon/U/d_gethid.U new file mode 100644 index 0000000..d19c9f8 --- /dev/null +++ b/mcon/U/d_gethid.U @@ -0,0 +1,31 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_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: Inlibc +?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 +set gethostid d_gethid +eval $inlibc + diff --git a/mcon/U/d_gethname.U b/mcon/U/d_gethname.U new file mode 100644 index 0000000..8ce181f --- /dev/null +++ b/mcon/U/d_gethname.U @@ -0,0 +1,287 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_gethname.U,v $ +?RCS: Revision 3.0.1.1 1994/10/29 16:13:00 ram +?RCS: patch36: call ./xenix explicitely instead of relying on PATH +?RCS: +?RCS: Revision 3.0 1993/08/18 12:06:11 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_gethname d_uname d_phostname aphostname: phostname cat \ + myhostname package d_portable Loc echo n c +i_whoami +usrinc \ + Myread Guess Oldconfig Csym +?MAKE: -pick add $@ %< +?S:d_gethname: +?S: This variable conditionally defines the HAS_GETHOSTNAME symbol, which +?S: indicates to the C program that the gethostname() routine may be +?S: used to derive the host name. +?S:. +?S:d_uname: +?S: This variable conditionally defines the HAS_UNAME symbol, which +?S: indicates to the C program that the uname() routine may be +?S: used to derive the host name. +?S:. +?S:d_phostname: +?S: This variable conditionally defines the PHOSTNAME symbol, which +?S: contains the shell command which, when fed to popen(), may be +?S: used to derive the host name. +?S:. +?S:aphostname: +?S: Thie variable contains the command which can be used to compute the +?S: host name. The command is fully qualified by its absolute path, to make +?S: it safe when used by a process with super-user privileges. +?S:. +?C:HAS_GETHOSTNAME (GETHOSTNAME): +?C: This symbol, if defined, indicates that the C program may use the +?C: gethostname() routine to derive the host name. See also HAS_UNAME +?C: and PHOSTNAME. +?C:. +?C:HAS_UNAME (UNAME): +?C: This symbol, if defined, indicates that the C program may use the +?C: uname() routine to derive the host name. See also HAS_GETHOSTNAME +?C: and PHOSTNAME. +?C:. +?C:PHOSTNAME: +?C: This symbol, if defined, indicates that the C program may use the +?C: contents of PHOSTNAME as a command to feed to the popen() routine +?C: to derive the host name. See also HAS_GETHOSTNAME and HAS_UNAME. +?C: Note that the command uses a fully qualified path, so that it is safe +?C: even if used by a process with super-user privileges. +?C:. +?H:#$d_gethname HAS_GETHOSTNAME /**/ +?H:#$d_uname HAS_UNAME /**/ +?H:#$d_phostname PHOSTNAME "$aphostname" /* How to get the host name */ +?H:. +?T:file val call +?LINT:change i_whoami +: see how we will look up host name +echo " " +if false; then + : dummy stub to allow use of elif +@if HAS_GETHOSTNAME +elif set gethostname val -f d_gethname; eval $csym; $val; then + echo 'gethostname() found.' >&4 + d_gethname="$define" + call=gethostname +@end +@if HAS_UNAME +elif set uname val -f d_uname; eval $csym; $val; then + if ./xenix; then + $cat <<'EOM' +uname() was found, but you're running xenix, and older versions of xenix +have a broken uname(). If you don't really know whether your xenix is old +enough to have a broken system call, use the default answer. + +EOM + dflt=y + case "$d_uname" in + "$define") dflt=n;; + esac + rp='Is your uname() broken?' + . ./myread + case "$ans" in + n*) d_uname="$define"; call=uname;; + esac + else + echo 'uname() found.' >&4 + d_uname="$define" + call=uname + fi +@end +fi +case "$d_gethname" in +'') d_gethname="$undef";; +esac +case "$d_uname" in +'') d_uname="$undef";; +esac +@if PHOSTNAME || MYHOSTNAME +case "$d_uname$d_gethname" in +*define*) + dflt=n + cat <<EOM + +Every now and then someone has a $call() that lies about the hostname +but can't be fixed for political or economic reasons. If you wish, I can +@if MYHOSTNAME && PHOSTNAME +pretend $call() isn't there and maybe compile in the hostname or +compute it from the '$phostname' command at run-time. +@elsif MYHOSTNAME +pretend $call() isn't there and maybe compile in the hostname. +@elsif PHOSTNAME +pretend $call() isn't there and maybe compute hostname at run-time +thanks to the '$phostname' command. +@elsif WHOAMI +get the hostname from whomai.h (provided you have one). +@else +simply ignore your host name and use someting like "noname" instead. +@end + +EOM + rp="Shall I ignore $call() from now on?" + . ./myread + case "$ans" in + y*) d_uname="$undef" d_gethname="$undef"; $echo $n "Okay...$c";; + esac;; +esac +@end +@if PHOSTNAME || aphostname +?X: Compute the full path name for the command +case "$phostname" in +'') aphostname='';; +*) case "$aphostname" in + /*) ;; + *) set X $phostname + shift + file=$1 + shift + file=`./loc $file $file $pth` + aphostname=`echo $file $*` + ;; + esac + ;; +esac +@end +@if PHOSTNAME && MYHOSTNAME +case "$d_uname$d_gethname" in +*define*) ;; +*) + case "$phostname" in + '') ;; + *) + $cat <<EOT + +There is no gethostname() or uname() on this system. You have two +possibilities at this point: + +1) You can have your host name ($myhostname) compiled into $package, which + lets $package start up faster, but makes your binaries non-portable, or +2) you can have $package use a + + popen("$aphostname","r") + + which will start slower but be more portable. + +@ if WHOAMI +Option 1 will give you the option of using whoami.h if you have one. +@ end +If you want option 2 but with a different command, you can edit config.sh at +the end of this shell script. + +EOT + case "$d_phostname" in + "$define") dflt=n;; + "$undef") dflt=y;; + '') + case "$d_portable" in + "$define") dflt=n ;; + *) dflt=y ;; + esac;; + esac + rp="Do you want your host name compiled in?" + . ./myread + case "$ans" in + n*) d_phostname="$define" ;; + *) aphostname=''; d_phostname="$undef";; + esac;; + esac + case "$aphostname" in + '') +@ if WHOAMI + case "$i_whoami" in + "$define") + dflt=y + $cat <<EOM + +No hostname function--you can either use the whoami.h file, which has this line: + + `grep sysname $usrinc/whoami.h` + +or you can have the name we came up with earlier ($myhostname) hardwired in. +EOM + rp="Use whoami.h to get hostname?" + . ./myread + case "$ans" in + n*) i_whoami="$undef";; + esac + ;; + "$undef") + $cat <<EOM +No hostname function and no whoami.h -- hardwiring "$myhostname". +EOM + ;; + esac;; +@ else + echo 'No hostname function -- hardwiring "'$myhostname'".' >&4;; +@ end + esac;; +esac +@elsif PHOSTNAME +case "$d_uname$d_gethname" in +*define*) ;; +*) + case "$phostname" in + '') +@ if WHOAMI + case "$i_whoami" in + "$define") + $cat <<EOM + +No hostname function--we'll use the whoami.h file, which has this line: + + `grep sysname $usrinc/whoami.h` + +EOM + ;; + *) echo "There will be no way for $package to get your hostname." >&4;; + esac;; +@ else + echo "There will be no way for $package to get your hostname." >&4;; +@ end + *) + echo "I'll use 'popen("'"'$aphostname'", "r")'"' to get your hostname." >&4 + ;; + esac;; +esac +@elsif MYHOSTNAME +case "$d_uname$d_gethname" in +*define*) ;; +*) +@ if WHOAMI + case "$i_whoami" in + "$define") + dflt=y + $cat <<EOM + +No hostname function--you can either use the whoami.h file, which has this line: + + `grep sysname $usrinc/whoami.h` + +or you can have the name we came up with earlier ($myhostname) hardwired in. +EOM + rp="Use whoami.h to get hostname?" + . ./myread + case "$ans" in + n*) i_whoami="$undef";; + esac + ;; + "$undef") + echo 'No whoami.h--hardwiring "'$myhostname'".' >&4;; + esac;; +@ else + echo 'Hardwiring "'$myhostname'".' >&4;; +@ end +esac +@end +case "$d_phostname" in +'') d_phostname="$undef";; +esac + diff --git a/mcon/U/d_getlogin.U b/mcon/U/d_getlogin.U new file mode 100644 index 0000000..abb9dd5 --- /dev/null +++ b/mcon/U/d_getlogin.U @@ -0,0 +1,34 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu> +?RCS: +?RCS: $Log: d_getlogin.U,v $ +?RCS: Revision 3.0.1.1 1994/08/29 16:07:41 ram +?RCS: patch32: created by ADO +?RCS: +?MAKE:d_getlogin: Inlibc +?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 +set getlogin d_getlogin +eval $inlibc + diff --git a/mcon/U/d_getopt.U b/mcon/U/d_getopt.U new file mode 100644 index 0000000..c5438b4 --- /dev/null +++ b/mcon/U/d_getopt.U @@ -0,0 +1,31 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_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: Inlibc +?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 +set getopt d_getopt +eval $inlibc + diff --git a/mcon/U/d_getpagsz.U b/mcon/U/d_getpagsz.U new file mode 100644 index 0000000..6083653 --- /dev/null +++ b/mcon/U/d_getpagsz.U @@ -0,0 +1,104 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_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 Inlibc cat contains +cc +ccflags \ + libs rm Findhdr +?MAKE: -pick add $@ %< +?S:d_getpagsz: +?S: This variable conditionally defines HAS_GETPAGESIZE if getpagesize() +?S: is available to get the system page size. +?S:. +?S:pagesize (pagsize): +?S: This variable holds the size in bytes of a system page. +?S:. +?C:HAS_GETPAGESIZE (GETPAGESIZE): +?C: This symbol, if defined, indicates that the getpagesize system call +?C: is available to get system page size, which is the granularity of +?C: many memory management calls. +?C:. +?X: Don't name it PAGESIZE, this is sometimes used by <sys/param.h> +?C:PAGESIZE_VALUE (PAGSIZE): +?C: This symbol holds the size in bytes of a system page (obtained via +?C: the getpagesize() system call at configuration time or asked to the +?C: user if the system call is not available). +?C:. +?H:#$d_getpagsz HAS_GETPAGESIZE /**/ +?H:#define PAGESIZE_VALUE $pagesize /* System page size, in bytes */ +?H:. +?F:!page +?T:guess +?LINT:set d_getpagsz +: see if getpagesize exists +set getpagesize d_getpagsz +eval $inlibc + +@if pagesize || PAGESIZE_VALUE +: determine the system page size +echo " " +guess=' (OK to guess)' +case "$pagesize" in +'') + $cat >page.c <<EOP +extern int getpagesize(); +int main() +{ + printf("%d\n", getpagesize()); +} +EOP + echo "Computing the granularity of memory management calls..." >&4 + dflt='4096' + case "$d_getpagsz" in + "$define") + if $cc $ccflags -o page page.c $libs >/dev/null 2>&1; then + dflt=`./page` + guess='' + else + echo "(I can't seem to compile the test program--guessing)" + fi + ;; + *) + if $cc $ccflags -o page page.c $libs -lPW >/dev/null 2>&1; then + dflt=`./page` + guess='' + echo "(For your eyes only: I used the getpagesize() from -lPW.)" + else + if $contains PAGESIZE `./findhdr sys/param.h` >/dev/null 2>&1; then + $cat >page.c <<EOP +#include <sys/param.h> +int main() +{ + printf("%d\n", PAGESIZE); +} +EOP + if $cc $ccflags -o page page.c $libs >/dev/null 2>&1; then + dflt=`./page` + guess='' + echo "(Using value of PAGESIZE found in <sys/param.h>.)" + fi + fi + fi + ;; + esac + ;; +*) dflt="$pagesize"; guess='';; +esac +rp="What is the system page size, in bytes$guess?" +. ./myread +pagesize=$ans +$rm -f page.c page + +@end diff --git a/mcon/U/d_getpgid.U b/mcon/U/d_getpgid.U new file mode 100644 index 0000000..de6a1a7 --- /dev/null +++ b/mcon/U/d_getpgid.U @@ -0,0 +1,34 @@ +?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 Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_getpgid.U,v $ +?RCS: Revision 3.0.1.1 1997/02/28 15:33:44 ram +?RCS: patch61: created +?RCS: +?MAKE:d_getpgid: Inlibc +?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 +set getpgid d_getpgid +eval $inlibc + diff --git a/mcon/U/d_getpgrp.U b/mcon/U/d_getpgrp.U new file mode 100644 index 0000000..bc5f5d2 --- /dev/null +++ b/mcon/U/d_getpgrp.U @@ -0,0 +1,108 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_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: Guess Inlibc Setvar cat rm \ + +cc +ccflags +ldflags +libs 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 USG one needs none. +?C:. +?H:#$d_getpgrp HAS_GETPGRP /**/ +?H:#$d_bsdgetpgrp USE_BSD_GETPGRP /**/ +?H:. +?F:!set !set.c +?T:xxx +?LINT:set d_getpgrp d_bsdgetpgrp +: see if getpgrp exists +set getpgrp d_getpgrp +eval $inlibc + +@if USE_BSD_GETPGRP || d_bsdgetpgrp +case "$d_getpgrp" in +"$define") + echo " " + echo "Checking to see which flavor of getpgrp is in use..." + $cat >set.c <<EOP +#$i_unistd I_UNISTD +#include <sys/types.h> +#ifdef I_UNISTD +# include <unistd.h> +#endif +int main() +{ + if (getuid() == 0) { + printf("(I see you are running Configure as super-user...)\n"); + setuid(1); + } +#ifdef TRY_BSD_PGRP + if (getpgrp(1) == 0) + exit(0); +#else + if (getpgrp() > 0) + exit(0); +#endif + exit(1); +} +EOP + if $cc -DTRY_BSD_PGRP $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 + && ./set + then + echo "You have to use getpgrp(pid) instead of getpgrp()." >&4 + val="$define" + elif $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then + echo "You have to use getpgrp() instead of getpgrp(pid)." >&4 + val="$undef" + else + echo "I can't seem to compile and run the test program." + if ./usg; then + xxx="a USG one, i.e. you use getpgrp()." + else + # SVR4 systems can appear rather BSD-ish. + case "$i_unistd" in + $undef) + xxx="a BSD one, i.e. you use getpgrp(pid)." + val="$define" + ;; + $define) + xxx="probably a USG one, i.e. you use getpgrp()." + val="$undef" + ;; + esac + fi + echo "Assuming your getpgrp is $xxx" >&4 + fi + ;; +*) val="$undef";; +esac +set d_bsdgetpgrp +eval $setvar +$rm -f set set.c +@end + diff --git a/mcon/U/d_getpgrp2.U b/mcon/U/d_getpgrp2.U new file mode 100644 index 0000000..3aa5e1d --- /dev/null +++ b/mcon/U/d_getpgrp2.U @@ -0,0 +1,32 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: 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: Inlibc +?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 +set getpgrp2 d_getpgrp2 +eval $inlibc + diff --git a/mcon/U/d_getppid.U b/mcon/U/d_getppid.U new file mode 100644 index 0000000..6754924 --- /dev/null +++ b/mcon/U/d_getppid.U @@ -0,0 +1,34 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu> +?RCS: +?RCS: $Log: d_getppid.U,v $ +?RCS: Revision 3.0.1.1 1994/08/29 16:07:45 ram +?RCS: patch32: created by ADO +?RCS: +?MAKE:d_getppid: Inlibc +?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 +set getppid d_getppid +eval $inlibc + diff --git a/mcon/U/d_getprior.U b/mcon/U/d_getprior.U new file mode 100644 index 0000000..0397f1c --- /dev/null +++ b/mcon/U/d_getprior.U @@ -0,0 +1,31 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_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: Inlibc +?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 +set getpriority d_getprior +eval $inlibc + diff --git a/mcon/U/d_getpwent.U b/mcon/U/d_getpwent.U new file mode 100644 index 0000000..fbec685 --- /dev/null +++ b/mcon/U/d_getpwent.U @@ -0,0 +1,40 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_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: Csym Setvar +?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 +echo " " +if set getpwent val -f d_getpwent; eval $csym; $val; then + echo "getpwent() found." >&4 + val="$define" +else + echo "No getpwent() found -- will use getpw() instead." >&4 + val="$undef" +fi +set d_getpwent +eval $setvar + diff --git a/mcon/U/d_getwd.U b/mcon/U/d_getwd.U new file mode 100644 index 0000000..987e93b --- /dev/null +++ b/mcon/U/d_getwd.U @@ -0,0 +1,41 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_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: Csym Setvar +?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 +echo " " +if set getwd val -f d_getwd; eval $csym; $val; then + echo 'getwd() found.' >&4 + val="$define" +else + echo 'getwd() not found. Assuming getcwd() exists.' >&4 + val="$undef" +fi +set d_getwd +eval $setvar + diff --git a/mcon/U/d_gnulibc.U b/mcon/U/d_gnulibc.U new file mode 100644 index 0000000..ead5dfa --- /dev/null +++ b/mcon/U/d_gnulibc.U @@ -0,0 +1,98 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1996,1998 Andy Dougherty +?RCS: Copyright (c) 1996, Sven Verdoolaege +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: +?MAKE:d_gnulibc gnulibc_version: Myread Oldconfig Setvar rm \ + cat Compile run +?MAKE: -pick add $@ %< +?S:d_gnulibc: +?S: Defined if we're dealing with the GNU C Library. +?S:. +?S:gnulibc_version: +?S: This variable contains the version number of the GNU C library. +?S: It is usually something like '2.2.5'. It is a plain '' if this +?S: is not the GNU C library, or if the version is unknown. +?S:. +?C:HAS_GNULIBC ~ %<: +?C: This symbol, if defined, indicates to the C program that +?C: the GNU C library is being used. A better check is to use +?C: the __GLIBC__ and __GLIBC_MINOR__ symbols supplied with glibc. +?C:. +?H:?%<:#$d_gnulibc HAS_GNULIBC /**/ +?H:?%<:#if defined(HAS_GNULIBC) && !defined(_GNU_SOURCE) +?H:?%<:#define _GNU_SOURCE +?H:?%<:#endif +?H:. +?F:!glibc.ver !try.c !try +?LINT: set d_gnulibc +?LINT: usefile try.c +?LINT: known _GNU_SOURCE +?X: gnulibc can be executed by calling __libc_main(). +?X: Ulrich Drepper doesn't think any other libc does that, +?X: but we check if it says 'GNU C Library' to be sure. +?X: +?X: Alas, as of 3/1998 glibc 2.0.7 reportedly isn't going to +?X: have __libc_main() anymore. :-(. Fortunately, all released +?X: versions of glibc 2.x.x _do_ have CPP variables. For 2.0.6, +?X: they are: +?X: #define __GLIBC__ 2 +?X: #define__GLIBC_MINOR__ 0. +?X: (The '6' isn't available :-(. +?X: glibc2.1 will also have +?X: extern const char * __gnu_get_libc_release(void); +?X: extern const char * __gnu_get_libc_version(void); +?X: functions. --thanks to Andreas Jaeger. --AD 6/1998. +?X: Although the exact format isn't documented, __gnu_get_libc_version() +?X: returns a simple string '2.1.3' in glibc 2.1.3. +?X: +: determine whether we are using a GNU C library +echo " " +echo "Checking for GNU C Library..." >&4 +cat >try.c <<'EOCP' +/* Find out version of GNU C library. __GLIBC__ and __GLIBC_MINOR__ + alone are insufficient to distinguish different versions, such as + 2.0.6 and 2.0.7. The function gnu_get_libc_version() appeared in + libc version 2.1.0. A. Dougherty, June 3, 2002. +*/ +#include <stdio.h> +int main(void) +{ +#ifdef __GLIBC__ +# ifdef __GLIBC_MINOR__ +# if __GLIBC__ >= 2 && __GLIBC_MINOR__ >= 1 +# include <gnu/libc-version.h> + printf("%s\n", gnu_get_libc_version()); +# else + printf("%d.%d\n", __GLIBC__, __GLIBC_MINOR__); +# endif +# else + printf("%d\n", __GLIBC__); +# endif + return 0; +#else + return 1; +#endif +} +EOCP +set try +if eval $compile_ok && $run ./try > glibc.ver; then + val="$define" + gnulibc_version=`$cat glibc.ver` + echo "You are using the GNU C Library version $gnulibc_version" +else + val="$undef" + gnulibc_version='' + echo "You are not using the GNU C Library" +fi +$rm -f try try.* glibc.ver +set d_gnulibc +eval $setvar + diff --git a/mcon/U/d_group.U b/mcon/U/d_group.U new file mode 100644 index 0000000..af841a7 --- /dev/null +++ b/mcon/U/d_group.U @@ -0,0 +1,23 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu> +?RCS: +?RCS: $Log: d_group.U,v $ +?RCS: Revision 3.0.1.2 1997/02/28 15:34:52 ram +?RCS: patch61: useless unit dropped. +?RCS: +?RCS: Revision 3.0.1.1 1994/08/29 16:07:48 ram +?RCS: patch32: created by ADO +?RCS: +?X: +?X: Useless unit dropped. +?X: +?LINT:empty diff --git a/mcon/U/d_havetlib.U b/mcon/U/d_havetlib.U new file mode 100644 index 0000000..b564e65 --- /dev/null +++ b/mcon/U/d_havetlib.U @@ -0,0 +1,125 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_havetlib.U,v $ +?RCS: Revision 3.0.1.2 1997/02/28 15:36:31 ram +?RCS: patch61: replaced .a with $_a all over the place +?RCS: patch61: likewise for .o replaced by $_o +?RCS: +?RCS: Revision 3.0.1.1 1994/05/06 14:44:06 ram +?RCS: patch23: added AIX support to accept shared lib stub as termlib (WED) +?RCS: +?RCS: Revision 3.0 1993/08/18 12:06:19 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_havetlib termlib: cat contains Myread Loc Filexp Oldconfig libpth \ + test uname _a _o +?MAKE: -pick add $@ %< +?S:d_havetlib: +?S: This variable conditionally defines the HAS_TERMLIB symbol, which +?S: indicates to the C program that termlib-style routines are available. +?S:. +?S:termlib: +?S: This variable contains the argument to pass to the loader to get +?S: termlib-style routines. It is up to the Makefile.SH to make sure +?S: the value gets to the right command. Note that on many systems the +?S: termlib routines are emulated by the curses or terminfo library. +?S:. +?C:HAS_TERMLIB (HAVETERMLIB): +?C: This symbol, when defined, indicates that termlib-style routines +?C: are available. There is nothing to include. +?C:. +?H:#$d_havetlib HAS_TERMLIB /**/ +?H:. +?T:xxx +: where do we get termlib routines from +echo " " +xxx=`./loc libcurses$_a x $libpth` +case "$xxx" in +/*) + ar t $xxx >grimble + if $contains tputs$_o grimble >/dev/null 2>&1; then + termlib='-lcurses' + d_havetlib="$define" + echo "Terminfo library found." >&4 + elif $test "x`$uname 2>/dev/null`" = xAIX; then + # Ok, do the AIX shr.o fun thing + /usr/ccs/bin/nm -en $xxx 2>/dev/null >grimble + if $contains '^tputs .*|extern|' grimble >/dev/null 2>&1; then + termlib='-lcurses' + d_havetlib="$define" + echo "AIX Terminfo library found." >&4 + else + xxx=x + fi + else + xxx=x + fi + rm -f grimble + ;; +esac +case "$xxx" in +x) + xxx=`./loc libtermlib$_a x $libpth` + case "$xxx" in + /usr/lib*|/lib*) + termlib='-ltermlib' + d_havetlib="$define" + echo "Termlib library found." >&4 + ;; + /*) + termlib="$xxx" + d_havetlib="$define" + echo "Termlib library found." >&4 + ;; + *) + xxx=`./loc libtermcap$_a x $libpth` + case "$xxx" in + /usr/lib*|/lib*) + termlib='-ltermcap' + d_havetlib="$define" + echo "Termcap library found." >&4 + ;; + /*) + termlib="$xxx" + d_havetlib="$define" + echo "Termcap library found." >&4 + ;; + *) + case "$termlib" in + '') + dflt=y +rp="Your system appears to NOT have termlib-style routines. Is this true?" + . ./myread + case "$ans" in + n*|f*) d_havetlib="$define" + $cat <<'EOM' +Then where are the termlib-style routines kept? Specify either -llibname +or a full pathname (~name ok). + +EOM + dflt='' + rp='Specify termlib path:' + . ./myread + termlib=`./filexp $ans` + ;; + *) + d_havetlib="$undef" + termlib='' + echo "You will have to play around with term.c then." >&4 + ;; + esac + echo " ";; + *) echo "You said termlib was $termlib before." >&4;; + esac;; + esac;; + esac;; +esac + diff --git a/mcon/U/d_hidnet.U b/mcon/U/d_hidnet.U new file mode 100644 index 0000000..ce952f4 --- /dev/null +++ b/mcon/U/d_hidnet.U @@ -0,0 +1,68 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_hidnet.U,v $ +?RCS: Revision 3.0 1993/08/18 12:06:20 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_hidnet hiddennet: cat sed myhostname mydomain Myread Oldconfig +?MAKE: -pick add $@ %< +?S:d_hidnet: +?S: This variable conditionally defines the symbol HIDDEN_NET, which +?S: tells the C program that it should pretend it is on a different +?S: host for purposes of advertising a mailing address. +?S:. +?S:hiddennet: +?S: This variable contains the value eventually given to the symbol +?S: HIDDEN_NET, if d_hidnet defines it. If defined, it's the name +?S: of the host which serves as the mail server for a network that +?S: is invisible to the outside world. +?S:. +?C:HIDDEN_NET (HIDDENNET): +?C: This symbol, if defined, contains the host name that you want to +?C: advertise to the outside world. This name can be different from +?C: your actual host name, as long as the machine you specify knows +?C: how to forward mail to you. +?C:. +?H:#$d_hidnet HIDDEN_NET "$hiddennet" /**/ +?H:. +: now get the host name to advertise as our mailing address +case "$hiddennet" in +'') dflt=n;; +*) dflt=y;; +esac +$cat <<EOM + +Some sites are on "hidden" networks, in the sense that the network appears +to the outside world as a single machine. The advertised name of any host +on this hidden network is the name of one machine on the local network which +knows how to forward mail to any other host on the hidden network. + +Do you wish to advertise a different hostname to the world than the one your +own host ($myhostname$mydomain) has? + +EOM +rp='Use "hidden" network?' +. ./myread +case "$ans" in +n*) d_hidnet="$undef" hiddennet='';; +*) + d_hidnet="$define" + echo " " + case "$hiddennet" in + '') dflt=`echo $mydomain | $sed -e 's/^\.//'`;; + *) dflt="$hiddennet";; + esac + rp='What hostname do you wish to advertise?' + . ./myread + hiddennet="$ans" + ;; +esac + diff --git a/mcon/U/d_htonl.U b/mcon/U/d_htonl.U new file mode 100644 index 0000000..82b176d --- /dev/null +++ b/mcon/U/d_htonl.U @@ -0,0 +1,88 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_htonl.U,v $ +?RCS: Revision 3.0.1.2 1994/08/29 16:09:25 ram +?RCS: patch32: now properly handles htonl() and friends when macros (ADO) +?RCS: +?RCS: Revision 3.0.1.1 1994/05/06 14:45:00 ram +?RCS: patch23: now also check for htonl() macro (ADO) +?RCS: +?RCS: Revision 3.0 1993/08/18 12:06:22 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_htonl: Inlibc Setvar i_niin i_sysin cat rm contains \ + cppstdin cppflags cppminus +?MAKE: -pick add $@ %< +?S:d_htonl: +?S: This variable conditionally defines HAS_HTONL if htonl() and its +?S: friends are available to do network order byte swapping. +?S:. +?C:HAS_HTONL (HTONL): +?C: This symbol, if defined, indicates that the htonl() routine (and +?C: friends htons() ntohl() ntohs()) are available to do network +?C: order byte swapping. +?C:. +?C:HAS_HTONS (HTONS): +?C: This symbol, if defined, indicates that the htons() routine (and +?C: friends htonl() ntohl() ntohs()) are available to do network +?C: order byte swapping. +?C:. +?C:HAS_NTOHL (NTOHL): +?C: This symbol, if defined, indicates that the ntohl() routine (and +?C: friends htonl() htons() ntohs()) are available to do network +?C: order byte swapping. +?C:. +?C:HAS_NTOHS (NTOHS): +?C: This symbol, if defined, indicates that the ntohs() routine (and +?C: friends htonl() htons() ntohl()) are available to do network +?C: order byte swapping. +?C:. +?H:#$d_htonl HAS_HTONL /**/ +?H:#$d_htonl HAS_HTONS /**/ +?H:#$d_htonl HAS_NTOHL /**/ +?H:#$d_htonl HAS_NTOHS /**/ +?H:. +?F:!htonl.c +?LINT:set d_htonl +: see if htonl --and friends-- exists +val='' +set htonl val +eval $inlibc + +: Maybe they are macros. +case "$val" in +$undef) + $cat >htonl.c <<EOM +#include <stdio.h> +#include <sys/types.h> +#$i_niin I_NETINET_IN +#$i_sysin I_SYS_IN +#ifdef I_NETINET_IN +#include <netinet/in.h> +#endif +#ifdef I_SYS_IN +#include <sys/in.h> +#endif +#ifdef htonl +printf("Defined as a macro."); +#endif +EOM + $cppstdin $cppflags $cppminus < htonl.c >htonl.E 2>/dev/null + if $contains 'Defined as a macro' htonl.E >/dev/null 2>&1; then + val="$define" + echo "But it seems to be defined as a macro." >&4 + fi + $rm -f htonl.? + ;; +esac +set d_htonl +eval $setvar + diff --git a/mcon/U/d_inetaton.U b/mcon/U/d_inetaton.U new file mode 100644 index 0000000..d3a4607 --- /dev/null +++ b/mcon/U/d_inetaton.U @@ -0,0 +1,34 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1996, Spider Boardman +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_inetaton.U,v $ +?RCS: Revision 3.0.1.1 1997/02/28 15:36:35 ram +?RCS: patch61: created +?RCS: +?MAKE:d_inetaton: Inlibc +?MAKE: -pick add $@ %< +?S:d_inetaton: +?S: This variable conditionally defines the HAS_INET_ATON symbol, which +?S: indicates to the C program that the inet_aton() function is available +?S: to parse IP address "dotted-quad" strings. +?S:. +?C:HAS_INET_ATON: +?C: This symbol, if defined, indicates to the C program that the +?C: inet_aton() function is available to parse IP address "dotted-quad" +?C: strings. +?C:. +?H:#$d_inetaton HAS_INET_ATON /**/ +?H:. +?LINT:set d_inetaton +: check whether inet_aton exists +set inet_aton d_inetaton +eval $inlibc + diff --git a/mcon/U/d_inetd.U b/mcon/U/d_inetd.U new file mode 100644 index 0000000..02881ad --- /dev/null +++ b/mcon/U/d_inetd.U @@ -0,0 +1,70 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_inetd.U,v $ +?RCS: Revision 3.0 1993/08/18 12:06:23 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_inetd: cat test package Myread Setvar +?MAKE: -pick add $@ %< +?S:d_inetd: +?S: This symbol conditionally defines USE_INETD which indicates to the C +?S: program that the initial socket connection will be done via inetd. +?S:. +?C:USE_INETD (INETD): +?C: This symbol if defined indicates to the C program that inetd will be +?C: in charge of the initial socket connection. The file descriptors 0 and +?C: 1 have been dup()ed from the original connected socket descriptor and +?C: are ready for send() and recv(). +?C:. +?H:#$d_inetd USE_INETD /**/ +?H:. +?LINT:set d_inetd +: ask whether initial socket connection is to be done via inetd +echo " " +dflt=n +case "$d_inetd" in +'') if $test -f /etc/inetd.conf; then + $cat <<EOM +Your system provides a so called "Internet super-server", the inetd daemon. +Network services like ftp or rlogin are usually handled via ftpd and rlogind +daemons. Without inetd, these daemons must always be running for the service +to be on. On the contrary, inetd listens to specific ports defined in file +/etc/inetd.conf and will run the appropriate daemon upon request. This scheme +avoids eating up the process table and memory with useless daemons. + +I can set up things so that internet connections for $package will be done +using inetd, in which case you will have to edit /etc/inetd.conf to add some +specific informations. + +EOM + dflt=y + else + $cat <<EOM +I do not see any trace of a configuration file for inetd, hence I assume your +system does not support the so called "Internet super-server". This means +$package will need to have a daemon process running on this machine to allow +network connections. + +EOM + fi;; +*) case "$d_inetd" in + "$define") dflt=y;; + esac;; +esac +rp='Do you wish to use inetd for network connections?' +. ./myread +val="$undef" +case "$ans" in +y*|Y*) val="$define";; +esac +set d_inetd +eval $setvar + diff --git a/mcon/U/d_internet.U b/mcon/U/d_internet.U new file mode 100644 index 0000000..ca2d3fc --- /dev/null +++ b/mcon/U/d_internet.U @@ -0,0 +1,52 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_internet.U,v $ +?RCS: Revision 3.0.1.1 1993/09/13 16:02:04 ram +?RCS: patch10: most mailers support Internet addresses nowadays (WAD) +?RCS: +?RCS: Revision 3.0 1993/08/18 12:06:24 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_internet: Myread Oldconfig Setvar +?MAKE: -pick add $@ %< +?S:d_internet: +?S: This variable conditionally defines the INTERNET symbol, which +?S: indicates to the C program that there is a mailer available which +?S: supports internet-style addresses (user@site.domain). +?S:. +?C:INTERNET: +?C: This symbol, if defined, indicates that there is a mailer available +?C: which supports internet-style addresses (user@site.domain). +?C:. +?H:#$d_internet INTERNET /**/ +?H:. +?LINT:set d_internet +: check for internet mailer +dflt=y +case "$d_internet" in +"$undef") dflt=n;; +esac +cat <<EOM + +Most mailers can deliver mail to addresses of the INTERNET persuasion, +such as user@host.edu. Some older mailers, however, require the complete +path to the destination to be specified in the address. + +EOM +rp="Does your mailer understand INTERNET addresses?" +. ./myread +case "$ans" in +y*) val="$define";; +*) val="$undef";; +esac +set d_internet +eval $setvar + diff --git a/mcon/U/d_isascii.U b/mcon/U/d_isascii.U new file mode 100644 index 0000000..a4a0fff --- /dev/null +++ b/mcon/U/d_isascii.U @@ -0,0 +1,57 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu> +?RCS: +?RCS: $Log: d_isascii.U,v $ +?RCS: Revision 3.0.1.2 1994/10/29 16:13:39 ram +?RCS: patch36: added 'ldflags' to the test compile line (ADO) +?RCS: +?RCS: Revision 3.0.1.1 1994/08/29 16:09:32 ram +?RCS: patch32: created by ADO +?RCS: +?MAKE:d_isascii: cc cat ccflags ldflags rm libs Setvar +?MAKE: -pick add $@ %< +?S:d_isascii: +?S: This variable conditionally defines the HAS_ISASCII constant, +?S: which indicates to the C program that isascii() is available. +?S:. +?C:HAS_ISASCII: +?C: This manifest constant lets the C program know that isascii +?C: is available. +?C:. +?H:#$d_isascii HAS_ISASCII /**/ +?H:. +?LINT:set d_isascii +?X: Can't use Inlibc because isascii() might be a macro. +: Look for isascii +echo " " +$cat >isascii.c <<'EOCP' +#include <stdio.h> +#include <ctype.h> +int main() { + int c = 'A'; + if (isascii(c)) + exit(0); + else + exit(1); +} +EOCP +if $cc $ccflags $ldflags -o isascii isascii.c $libs >/dev/null 2>&1 ; then + echo "isascii() found." >&4 + val="$define" +else + echo "isascii() NOT found." >&4 + val="$undef" +fi +set d_isascii +eval $setvar +$rm -f isascii* + diff --git a/mcon/U/d_itimer.U b/mcon/U/d_itimer.U new file mode 100644 index 0000000..027112e --- /dev/null +++ b/mcon/U/d_itimer.U @@ -0,0 +1,32 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_itimer.U,v $ +?RCS: Revision 3.0 1993/08/18 12:06:25 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_itimer: Inlibc +?MAKE: -pick add $@ %< +?S:d_itimer: +?S: This variable conditionally defines the HAS_ITIMER symbol, which +?S: indicates that the setitimer() routine exists. The setitimer() +?S: routine supports sub-second accuracy for one real-time and two +?S: cpu clocks. +?S:. +?C:HAS_ITIMER (ITIMER): +?C: This symbol, if defined, indicates that the setitimer() routine exists. +?C:. +?H:#$d_itimer HAS_ITIMER /**/ +?H:. +?LINT:set d_itimer +: see if setitimer exists +set setitimer d_itimer +eval $inlibc + diff --git a/mcon/U/d_keepsig.U b/mcon/U/d_keepsig.U new file mode 100644 index 0000000..43a8f88 --- /dev/null +++ b/mcon/U/d_keepsig.U @@ -0,0 +1,81 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_keepsig.U,v $ +?RCS: Revision 3.0.1.4 1995/07/25 13:57:56 ram +?RCS: patch56: made cc and ccflags optional dependencies +?RCS: +?RCS: Revision 3.0.1.3 1995/01/11 15:26:25 ram +?RCS: patch45: protected "sh -c" within backquotes for Linux and SGI +?RCS: +?RCS: Revision 3.0.1.2 1994/10/29 16:13:59 ram +?RCS: patch36: call ./bsd explicitely instead of relying on PATH +?RCS: +?RCS: Revision 3.0.1.1 1993/10/16 13:48:47 ram +?RCS: patch12: comment for SIGNALS_KEPT was the other way round +?RCS: +?RCS: Revision 3.0 1993/08/18 12:06:26 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_keepsig: cat Compile rm Guess contains echo n c Setvar run +?MAKE: -pick add $@ %< +?S:d_keepsig: +?S: This variable contains the eventual value of the SIGNALS_KEPT symbol, +?S: which indicates to the C program if signal handlers need not reinstated +?S: after receipt of a signal. +?S:. +?C:SIGNALS_KEPT (PERSISTENT_SIGNAL): +?C: This symbol is defined if signal handlers needn't be reinstated after +?C: receipt of a signal. +?C:. +?H:#$d_keepsig SIGNALS_KEPT /**/ +?H:. +?F:!try !try.out +?LINT:set d_keepsig +: see if signals are kept +val="$undef"; +echo " " +echo "Checking to see if signal handlers stick around..." >&4 +$cat >try.c <<'EOCP' +foo() {} + +int main() +{ + signal(2, foo); + kill(getpid(), 2); + kill(getpid(), 2); + printf("abc\n"); +} +EOCP +set try +if eval $compile; then +?X: On AIX a single ./try will not work (with ksh) +?X: Backquotes required on Linux and SGI (prevents "ambiguous output redirect") +?X: (reported by Xavier LeVourch <xavierl@eiffel.com>) + echo `sh -c $run ./try >try.out 2>/dev/null` >/dev/null + if $contains abc try.out >/dev/null 2>&1; then + echo "Yes, they do." + val="$define"; + else + echo "No, they don't." + fi +else + $echo $n "(I can't seem to compile the test program. Assuming $c" + if ./bsd; then + echo "they do.)" + val="$define" + else + echo "they don't.)" + fi +fi +set d_keepsig +eval $setvar +$rm -f try* + diff --git a/mcon/U/d_killpg.U b/mcon/U/d_killpg.U new file mode 100644 index 0000000..220932a --- /dev/null +++ b/mcon/U/d_killpg.U @@ -0,0 +1,33 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_killpg.U,v $ +?RCS: Revision 3.0 1993/08/18 12:06:27 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_killpg: Inlibc +?MAKE: -pick add $@ %< +?S:d_killpg: +?S: This variable conditionally defines the HAS_KILLPG symbol, which +?S: indicates to the C program that the killpg() routine is available +?S: to kill process groups. +?S:. +?C:HAS_KILLPG (KILLPG): +?C: This symbol, if defined, indicates that the killpg routine is available +?C: to kill process groups. If unavailable, you probably should use kill +?C: with a negative process number. +?C:. +?H:#$d_killpg HAS_KILLPG /**/ +?H:. +?LINT:set d_killpg +: see if killpg exists +set killpg d_killpg +eval $inlibc + diff --git a/mcon/U/d_link.U b/mcon/U/d_link.U new file mode 100644 index 0000000..cd5d889 --- /dev/null +++ b/mcon/U/d_link.U @@ -0,0 +1,31 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_link.U,v $ +?RCS: Revision 3.0.1.1 1993/08/25 14:01:13 ram +?RCS: patch6: created for completeness +?RCS: +?MAKE:d_link: Inlibc +?MAKE: -pick add $@ %< +?S:d_link: +?S: This variable conditionally defines HAS_LINK if link() is +?S: available to create hard links. +?S:. +?C:HAS_LINK: +?C: This symbol, if defined, indicates that the link routine is +?C: available to create hard links. +?C:. +?H:#$d_link HAS_LINK /**/ +?H:. +?LINT:set d_link +: see if link exists +set link d_link +eval $inlibc + diff --git a/mcon/U/d_linuxstd.U b/mcon/U/d_linuxstd.U new file mode 100644 index 0000000..a18890a --- /dev/null +++ b/mcon/U/d_linuxstd.U @@ -0,0 +1,55 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu> +?RCS: +?RCS: $Log: d_linuxstd.U,v $ +?RCS: Revision 3.0.1.1 1994/10/29 16:14:05 ram +?RCS: patch36: created by ADO +?RCS: +?MAKE:d_linuxstd: d_stdstdio cppstdin cppflags cppminus \ + contains rm Setvar Findhdr +?MAKE: -pick add $@ %< +?S:d_linuxstd: +?S: This variable conditionally defines USE_LINUX_STDIO if this system +?S: has a FILE structure declaring _IO_read_base, _IO_read_ptr, +?S: and _IO_read_end in stdio.h. +?S:. +?C:USE_LINUX_STDIO: +?C: This symbol is defined if this system has a FILE structure declaring +?C: _IO_read_base, _IO_read_ptr, and _IO_read_end in stdio.h. +?C:. +?H:#$d_linuxstd USE_LINUX_STDIO /**/ +?H:. +?T:xxx +?LINT:set d_linuxstd +: see if stdio is like that in linux +case "$d_stdstdio" in +"$undef") + echo " " + xxx=`./findhdr stdio.h` + $cppstdin $cppflags $cppminus < "$xxx" > stdio.E + if $contains 'char.*_IO_read_base' stdio.E >/dev/null 2>&1 && \ + $contains '_IO_read_ptr' stdio.E >/dev/null 2>&1 && \ + $contains '_IO_read_end' stdio.E >/dev/null 2>&1 ; then + echo "Your stdio looks like linux." >&4 + val="$define" + else + echo "You don't have linux stdio, either." >&4 + val="$undef" + fi + $rm -f stdio.E + ;; +*) val="$undef" ;; +esac + +set d_linuxstd +eval $setvar + diff --git a/mcon/U/d_locconv.U b/mcon/U/d_locconv.U new file mode 100644 index 0000000..a7bec1f --- /dev/null +++ b/mcon/U/d_locconv.U @@ -0,0 +1,33 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu> +?RCS: +?RCS: $Log: d_locconv.U,v $ +?RCS: Revision 3.0.1.1 1994/10/29 16:14:11 ram +?RCS: patch36: created by ADO +?RCS: +?MAKE:d_locconv: Inlibc +?MAKE: -pick add $@ %< +?S:d_locconv: +?S: This variable conditionally defines HAS_LOCALECONV if localeconv() is +?S: available for numeric and monetary formatting conventions. +?S:. +?C:HAS_LOCALECONV: +?C: This symbol, if defined, indicates that the localeconv routine is +?C: available for numeric and monetary formatting conventions. +?C:. +?H:#$d_locconv HAS_LOCALECONV /**/ +?H:. +?LINT:set d_locconv +: see if localeconv exists +set localeconv d_locconv +eval $inlibc + diff --git a/mcon/U/d_lockf.U b/mcon/U/d_lockf.U new file mode 100644 index 0000000..062f753 --- /dev/null +++ b/mcon/U/d_lockf.U @@ -0,0 +1,33 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu> +?RCS: +?RCS: $Log: d_lockf.U,v $ +?RCS: Revision 3.0.1.1 1994/08/29 16:09:36 ram +?RCS: patch32: created by ADO +?RCS: +?MAKE:d_lockf: Inlibc +?MAKE: -pick add $@ %< +?S:d_lockf: +?S: This variable conditionally defines HAS_LOCKF if lockf() is +?S: available to do file locking. +?S:. +?C:HAS_LOCKF (LOCKF): +?C: This symbol, if defined, indicates that the lockf routine is +?C: available to do file locking. +?C:. +?H:#$d_lockf HAS_LOCKF /**/ +?H:. +?LINT:set d_lockf +: see if lockf exists +set lockf d_lockf +eval $inlibc + diff --git a/mcon/U/d_lstat.U b/mcon/U/d_lstat.U new file mode 100644 index 0000000..4d5bc46 --- /dev/null +++ b/mcon/U/d_lstat.U @@ -0,0 +1,31 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_lstat.U,v $ +?RCS: Revision 3.0 1993/08/18 12:06:28 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_lstat: Inlibc +?MAKE: -pick add $@ %< +?S:d_lstat: +?S: This variable conditionally defines HAS_LSTAT if lstat() is +?S: available to do file stats on symbolic links. +?S:. +?C:HAS_LSTAT (LSTAT): +?C: This symbol, if defined, indicates that the lstat routine is +?C: available to do file stats on symbolic links. +?C:. +?H:#$d_lstat HAS_LSTAT /**/ +?H:. +?LINT:set d_lstat +: see if lstat exists +set lstat d_lstat +eval $inlibc + diff --git a/mcon/U/d_mblen.U b/mcon/U/d_mblen.U new file mode 100644 index 0000000..b990066 --- /dev/null +++ b/mcon/U/d_mblen.U @@ -0,0 +1,34 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu> +?RCS: +?RCS: $Log: d_mblen.U,v $ +?RCS: Revision 3.0.1.1 1994/08/29 16:09:40 ram +?RCS: patch32: created by ADO +?RCS: +?MAKE:d_mblen: Inlibc +?MAKE: -pick add $@ %< +?S:d_mblen: +?S: This variable conditionally defines the HAS_MBLEN symbol, which +?S: indicates to the C program that the mblen() routine is available +?S: to find the number of bytes in a multibye character. +?S:. +?C:HAS_MBLEN: +?C: This symbol, if defined, indicates that the mblen routine is available +?C: to find the number of bytes in a multibye character. +?C:. +?H:#$d_mblen HAS_MBLEN /**/ +?H:. +?LINT:set d_mblen +: see if mblen exists +set mblen d_mblen +eval $inlibc + diff --git a/mcon/U/d_mbstowcs.U b/mcon/U/d_mbstowcs.U new file mode 100644 index 0000000..c73ca45 --- /dev/null +++ b/mcon/U/d_mbstowcs.U @@ -0,0 +1,32 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_mbstowcs.U,v $ +?RCS: Revision 3.0 1993/08/18 12:06:29 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_mbstowcs: Inlibc +?MAKE: -pick add $@ %< +?S:d_mbstowcs: +?S: This variable conditionally defines the HAS_MBSTOWCS symbol, which +?S: indicates to the C program that the mbstowcs() routine is available +?S: to convert a multibyte string into a wide character string. +?S:. +?C:HAS_MBSTOWCS (MBSTOWCS): +?C: This symbol, if defined, indicates that the mbstowcs routine is +?C: available to covert a multibyte string into a wide character string. +?C:. +?H:#$d_mbstowcs HAS_MBSTOWCS /**/ +?H:. +?LINT:set d_mbstowcs +: see if mbstowcs exists +set mbstowcs d_mbstowcs +eval $inlibc + diff --git a/mcon/U/d_mbtowc.U b/mcon/U/d_mbtowc.U new file mode 100644 index 0000000..ea24f92 --- /dev/null +++ b/mcon/U/d_mbtowc.U @@ -0,0 +1,32 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_mbtowc.U,v $ +?RCS: Revision 3.0 1993/08/18 12:06:30 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_mbtowc: Inlibc +?MAKE: -pick add $@ %< +?S:d_mbtowc: +?S: This variable conditionally defines the HAS_MBTOWC symbol, which +?S: indicates to the C program that the mbtowc() routine is available +?S: to convert multibyte to a wide character. +?S:. +?C:HAS_MBTOWC (MBTOWC): +?C: This symbol, if defined, indicates that the mbtowc routine is available +?C: to covert a multibyte to a wide character. +?C:. +?H:#$d_mbtowc HAS_MBTOWC /**/ +?H:. +?LINT:set d_mbtowc +: see if mbtowc exists +set mbtowc d_mbtowc +eval $inlibc + diff --git a/mcon/U/d_memalign.U b/mcon/U/d_memalign.U new file mode 100644 index 0000000..a27a559 --- /dev/null +++ b/mcon/U/d_memalign.U @@ -0,0 +1,29 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_memalign.U,v $ +?RCS: +?MAKE:d_memalign: Inlibc +?MAKE: -pick add $@ %< +?S:d_memalign: +?S: This variable conditionally defines the HAS_MEMALIGN symbol, which +?S: indicates to the C program that the memalign() routine is available. +?S:. +?C:HAS_MEMALIGN : +?C: This symbol, if defined, indicates that the memalign routine is +?C: available to allocate aligned memory. +?C:. +?H:#$d_memalign HAS_MEMALIGN /**/ +?H:. +?LINT:set d_memalign +: see if memalign exists +set memalign d_memalign +eval $inlibc + diff --git a/mcon/U/d_memccpy.U b/mcon/U/d_memccpy.U new file mode 100644 index 0000000..386ee30 --- /dev/null +++ b/mcon/U/d_memccpy.U @@ -0,0 +1,33 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_memccpy.U,v $ +?RCS: Revision 3.0 1993/08/18 12:06:31 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_memccpy: Inlibc +?MAKE: -pick add $@ %< +?S:d_memccpy: +?S: This variable conditionally defines the HAS_MEMCCPY symbol, which +?S: indicates to the C program that the memccpy() routine is available +?S: to copy a character into a block of memory. +?S:. +?C:HAS_MEMCCPY (MEMCCPY): +?C: This symbol, if defined, indicates that the memccpy routine is available +?C: to copy a character into a block of memory. Otherwise you should +?C: roll your own. +?C:. +?H:#$d_memccpy HAS_MEMCCPY /**/ +?H:. +?LINT:set d_memccpy +: see if memccpy exists +set memccpy d_memccpy +eval $inlibc + diff --git a/mcon/U/d_memchr.U b/mcon/U/d_memchr.U new file mode 100644 index 0000000..00b5b87 --- /dev/null +++ b/mcon/U/d_memchr.U @@ -0,0 +1,32 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_memchr.U,v $ +?RCS: Revision 3.0 1993/08/18 12:06:32 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_memchr: Inlibc +?MAKE: -pick add $@ %< +?S:d_memchr: +?S: This variable conditionally defines the HAS_MEMCHR symbol, which +?S: indicates to the C program that the memchr() routine is available +?S: to scan a block of memory for a character. +?S:. +?C:HAS_MEMCHR: +?C: This symbol, if defined, indicates that the memchr routine is available +?C: to scan a block of memory for a character. If undefined, roll your own. +?C:. +?H:#$d_memchr HAS_MEMCHR /**/ +?H:. +?LINT:set d_memchr +: see if memchr exists +set memchr d_memchr +eval $inlibc + diff --git a/mcon/U/d_memcmp.U b/mcon/U/d_memcmp.U new file mode 100644 index 0000000..1761865 --- /dev/null +++ b/mcon/U/d_memcmp.U @@ -0,0 +1,35 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_memcmp.U,v $ +?RCS: Revision 3.0.1.1 1993/09/13 16:02:35 ram +?RCS: patch10: removed text recommending bcmp over memcmp (WAD) +?RCS: +?RCS: Revision 3.0 1993/08/18 12:06:33 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_memcmp: Inlibc +?MAKE: -pick add $@ %< +?S:d_memcmp: +?S: This variable conditionally defines the HAS_MEMCMP symbol, which +?S: indicates to the C program that the memcmp() routine is available +?S: to compare blocks of memory. +?S:. +?C:HAS_MEMCMP (MEMCMP): +?C: This symbol, if defined, indicates that the memcmp routine is available +?C: to compare blocks of memory. +?C:. +?H:#$d_memcmp HAS_MEMCMP /**/ +?H:. +?LINT:set d_memcmp +: see if memcmp exists +set memcmp d_memcmp +eval $inlibc + diff --git a/mcon/U/d_memcpy.U b/mcon/U/d_memcpy.U new file mode 100644 index 0000000..b500662 --- /dev/null +++ b/mcon/U/d_memcpy.U @@ -0,0 +1,35 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_memcpy.U,v $ +?RCS: Revision 3.0.1.1 1993/09/13 16:02:58 ram +?RCS: patch10: removed text recommending bcopy over memcpy (WAD) +?RCS: +?RCS: Revision 3.0 1993/08/18 12:06:34 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_memcpy: Inlibc +?MAKE: -pick add $@ %< +?S:d_memcpy: +?S: This variable conditionally defines the HAS_MEMCPY symbol, which +?S: indicates to the C program that the memcpy() routine is available +?S: to copy blocks of memory. +?S:. +?C:HAS_MEMCPY (MEMCPY): +?C: This symbol, if defined, indicates that the memcpy routine is available +?C: to copy blocks of memory. +?C:. +?H:#$d_memcpy HAS_MEMCPY /**/ +?H:. +?LINT:set d_memcpy +: see if memcpy exists +set memcpy d_memcpy +eval $inlibc + diff --git a/mcon/U/d_memmove.U b/mcon/U/d_memmove.U new file mode 100644 index 0000000..34280e0 --- /dev/null +++ b/mcon/U/d_memmove.U @@ -0,0 +1,34 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_memmove.U,v $ +?RCS: Revision 3.0 1993/08/18 12:06:35 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_memmove: Inlibc +?MAKE: -pick add $@ %< +?S:d_memmove: +?S: This variable conditionally defines the HAS_MEMMOVE symbol, which +?S: indicates to the C program that the memmove() routine is available +?S: to copy potentatially overlapping blocks of memory. +?S:. +?C:HAS_MEMMOVE: +?C: This symbol, if defined, indicates that the memmove routine is available +?C: to copy potentially overlapping blocks of memory. This should be used +?C: only when HAS_SAFE_BCOPY is not defined. If neither is there, roll your +?C: own version. +?C:. +?H:#$d_memmove HAS_MEMMOVE /**/ +?H:. +?LINT:set d_memmove +: see if memmove exists +set memmove d_memmove +eval $inlibc + diff --git a/mcon/U/d_memset.U b/mcon/U/d_memset.U new file mode 100644 index 0000000..812c4de --- /dev/null +++ b/mcon/U/d_memset.U @@ -0,0 +1,35 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_memset.U,v $ +?RCS: Revision 3.0.1.1 1993/09/13 16:03:11 ram +?RCS: patch10: removed text recommending bzero over memset (WAD) +?RCS: +?RCS: Revision 3.0 1993/08/18 12:06:36 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_memset: Inlibc +?MAKE: -pick add $@ %< +?S:d_memset: +?S: This variable conditionally defines the HAS_MEMSET symbol, which +?S: indicates to the C program that the memset() routine is available +?S: to set blocks of memory. +?S:. +?C:HAS_MEMSET (MEMSET): +?C: This symbol, if defined, indicates that the memset routine is available +?C: to set blocks of memory. +?C:. +?H:#$d_memset HAS_MEMSET /**/ +?H:. +?LINT:set d_memset +: see if memset exists +set memset d_memset +eval $inlibc + diff --git a/mcon/U/d_mkdir.U b/mcon/U/d_mkdir.U new file mode 100644 index 0000000..9cb6961 --- /dev/null +++ b/mcon/U/d_mkdir.U @@ -0,0 +1,33 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_mkdir.U,v $ +?RCS: Revision 3.0 1993/08/18 12:06:37 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_mkdir: Inlibc +?MAKE: -pick add $@ %< +?S:d_mkdir: +?S: This variable conditionally defines the HAS_MKDIR symbol, which +?S: indicates to the C program that the mkdir() routine is available +?S: to create directories.. +?S:. +?C:HAS_MKDIR (MKDIR): +?C: This symbol, if defined, indicates that the mkdir routine is available +?C: to create directories. Otherwise you should fork off a new process to +?C: exec /bin/mkdir. +?C:. +?H:#$d_mkdir HAS_MKDIR /**/ +?H:. +?LINT:set d_mkdir +: see if mkdir exists +set mkdir d_mkdir +eval $inlibc + diff --git a/mcon/U/d_mkfifo.U b/mcon/U/d_mkfifo.U new file mode 100644 index 0000000..cca2262 --- /dev/null +++ b/mcon/U/d_mkfifo.U @@ -0,0 +1,36 @@ +?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: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu> +?RCS: +?RCS: $Log: d_mkfifo.U,v $ +?RCS: Revision 3.0.1.1 1994/10/29 16:14:17 ram +?RCS: patch36: created by ADO +?RCS: +?RCS: +?MAKE:d_mkfifo: Inlibc +?MAKE: -pick add $@ %< +?S:d_mkfifo: +?S: This variable conditionally defines the HAS_MKFIFO symbol, which +?S: indicates to the C program that the mkfifo() routine is available. +?S:. +?C:HAS_MKFIFO : +?C: This symbol, if defined, indicates that the mkfifo routine is +?C: available to create FIFOs. Otherwise, mknod should be able to +?C: do it for you. However, if mkfifo is there, mknod might require +?C: super-user privileges which mkfifo will not. +?C:. +?H:#$d_mkfifo HAS_MKFIFO /**/ +?H:. +?LINT:set d_mkfifo +: see if mkfifo exists +set mkfifo d_mkfifo +eval $inlibc + diff --git a/mcon/U/d_mktime.U b/mcon/U/d_mktime.U new file mode 100644 index 0000000..fd62716 --- /dev/null +++ b/mcon/U/d_mktime.U @@ -0,0 +1,33 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu> +?RCS: +?RCS: $Log: d_mktime.U,v $ +?RCS: Revision 3.0.1.1 1994/08/29 16:09:44 ram +?RCS: patch32: created by ADO +?RCS: +?MAKE:d_mktime: Inlibc +?MAKE: -pick add $@ %< +?S:d_mktime: +?S: This variable conditionally defines the HAS_MKTIME symbol, which +?S: indicates to the C program that the mktime() routine is available. +?S:. +?C:HAS_MKTIME : +?C: This symbol, if defined, indicates that the mktime routine is +?C: available. +?C:. +?H:#$d_mktime HAS_MKTIME /**/ +?H:. +?LINT:set d_mktime +: see if mktime exists +set mktime d_mktime +eval $inlibc + diff --git a/mcon/U/d_mmap.U b/mcon/U/d_mmap.U new file mode 100644 index 0000000..ad5448e --- /dev/null +++ b/mcon/U/d_mmap.U @@ -0,0 +1,31 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_mmap.U,v $ +?RCS: Revision 3.0.1.1 1993/12/15 08:19:12 ram +?RCS: patch15: created +?RCS: +?MAKE:d_mmap: Inlibc +?MAKE: -pick add $@ %< +?S:d_mmap: +?S: This variable conditionally defines HAS_MMAP if mmap() is +?S: available to map a file into memory. +?S:. +?C:HAS_MMAP: +?C: This symbol, if defined, indicates that the mmap system call is +?C: available to map a file into memory. +?C:. +?H:#$d_mmap HAS_MMAP /**/ +?H:. +?LINT:set d_mmap +: see if mmap exists +set mmap d_mmap +eval $inlibc + diff --git a/mcon/U/d_msem_lck.U b/mcon/U/d_msem_lck.U new file mode 100644 index 0000000..80308a4 --- /dev/null +++ b/mcon/U/d_msem_lck.U @@ -0,0 +1,28 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_msem_lck.U,v $ +?MAKE:d_msem_lck: Inlibc +?MAKE: -pick add $@ %< +?S:d_msem_lck: +?S: This variable conditionally defines HAS_MSEM_LOCK if msem_lock() is +?S: available, thereby indicating kernel support for memory semaphores. +?S:. +?C:HAS_MSEM_LOCK: +?C: This symbol, if defined, indicates that memory semaphores are +?C: available to protect mmap()'ed regions. +?C:. +?H:#$d_msem_lck HAS_MSEM_LOCK /**/ +?H:. +?LINT:set d_msem_lck +: see if msem_lock exists +set msem_lock d_msem_lck +eval $inlibc + diff --git a/mcon/U/d_msg.U b/mcon/U/d_msg.U new file mode 100644 index 0000000..7f090da --- /dev/null +++ b/mcon/U/d_msg.U @@ -0,0 +1,45 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_msg.U,v $ +?RCS: Revision 3.0 1993/08/18 12:06:37 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_msg: test d_msgctl d_msgget d_msgsnd d_msgrcv Setvar Findhdr +?MAKE: -pick add $@ %< +?S:d_msg: +?S: This variable conditionally defines the HAS_MSG symbol, which +?S: indicates that the entire msg*(2) library is present. +?S:. +?C:HAS_MSG: +?C: This symbol, if defined, indicates that the entire msg*(2) library is +?C: supported (IPC mechanism based on message queues). +?C:. +?H:#$d_msg HAS_MSG /**/ +?H:. +?T:h_msg +?LINT:set d_msg +: see how much of the 'msg*(2)' library is present. +h_msg=true +echo " " +case "$d_msgctl$d_msgget$d_msgsnd$d_msgrcv" in +*"$undef"*) h_msg=false;; +esac +: we could also check for sys/ipc.h ... +if $h_msg && $test `./findhdr sys/msg.h`; then + echo "You have the full msg*(2) library." >&4 + val="$define" +else + echo "You don't have the full msg*(2) library." >&4 + val="$undef" +fi +set d_msg +eval $setvar + diff --git a/mcon/U/d_msgctl.U b/mcon/U/d_msgctl.U new file mode 100644 index 0000000..4f50ad3 --- /dev/null +++ b/mcon/U/d_msgctl.U @@ -0,0 +1,31 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_msgctl.U,v $ +?RCS: Revision 3.0 1993/08/18 12:06:38 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_msgctl: Inlibc +?MAKE: -pick add $@ %< +?S:d_msgctl: +?S: This variable conditionally defines the HAS_MSGCTL symbol, which +?S: indicates to the C program that the msgctl() routine is available. +?S:. +?C:HAS_MSGCTL: +?C: This symbol, if defined, indicates that the msgctl() routine is +?C: available to perform message control operations. +?C:. +?H:#$d_msgctl HAS_MSGCTL /**/ +?H:. +?LINT:set d_msgctl +: see if msgctl exists +set msgctl d_msgctl +eval $inlibc + diff --git a/mcon/U/d_msgget.U b/mcon/U/d_msgget.U new file mode 100644 index 0000000..8313591 --- /dev/null +++ b/mcon/U/d_msgget.U @@ -0,0 +1,31 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_msgget.U,v $ +?RCS: Revision 3.0 1993/08/18 12:06:39 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_msgget: Inlibc +?MAKE: -pick add $@ %< +?S:d_msgget: +?S: This variable conditionally defines the HAS_MSGGET symbol, which +?S: indicates to the C program that the msgget() routine is available. +?S:. +?C:HAS_MSGGET: +?C: This symbol, if defined, indicates that the msgget() routine is +?C: available to get a new message queue. +?C:. +?H:#$d_msgget HAS_MSGGET /**/ +?H:. +?LINT:set d_msgget +: see if msgget exists +set msgget d_msgget +eval $inlibc + diff --git a/mcon/U/d_msgrcv.U b/mcon/U/d_msgrcv.U new file mode 100644 index 0000000..9f7c27e --- /dev/null +++ b/mcon/U/d_msgrcv.U @@ -0,0 +1,31 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_msgrcv.U,v $ +?RCS: Revision 3.0 1993/08/18 12:06:40 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_msgrcv: Inlibc +?MAKE: -pick add $@ %< +?S:d_msgrcv: +?S: This variable conditionally defines the HAS_MSGRCV symbol, which +?S: indicates to the C program that the msgrcv() routine is available. +?S:. +?C:HAS_MSGRCV: +?C: This symbol, if defined, indicates that the msgrcv() routine is +?C: available to extract a message from the message queue. +?C:. +?H:#$d_msgrcv HAS_MSGRCV /**/ +?H:. +?LINT:set d_msgrcv +: see if msgrcv exists +set msgrcv d_msgrcv +eval $inlibc + diff --git a/mcon/U/d_msgsnd.U b/mcon/U/d_msgsnd.U new file mode 100644 index 0000000..924d59a --- /dev/null +++ b/mcon/U/d_msgsnd.U @@ -0,0 +1,31 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_msgsnd.U,v $ +?RCS: Revision 3.0 1993/08/18 12:06:41 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_msgsnd: Inlibc +?MAKE: -pick add $@ %< +?S:d_msgsnd: +?S: This variable conditionally defines the HAS_MSGSND symbol, which +?S: indicates to the C program that the msgsnd() routine is available. +?S:. +?C:HAS_MSGSND: +?C: This symbol, if defined, indicates that the msgsnd() routine is +?C: available to send a message into the message queue. +?C:. +?H:#$d_msgsnd HAS_MSGSND /**/ +?H:. +?LINT:set d_msgsnd +: see if msgsnd exists +set msgsnd d_msgsnd +eval $inlibc + diff --git a/mcon/U/d_msync.U b/mcon/U/d_msync.U new file mode 100644 index 0000000..49db7e2 --- /dev/null +++ b/mcon/U/d_msync.U @@ -0,0 +1,31 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_msync.U,v $ +?RCS: Revision 3.0.1.1 1993/12/15 08:19:17 ram +?RCS: patch15: created +?RCS: +?MAKE:d_msync: Inlibc +?MAKE: -pick add $@ %< +?S:d_msync: +?S: This variable conditionally defines HAS_MSYNC if msync() is +?S: available to synchronize a mapped file. +?S:. +?C:HAS_MSYNC: +?C: This symbol, if defined, indicates that the msync system call is +?C: available to synchronize a mapped file. +?C:. +?H:#$d_msync HAS_MSYNC /**/ +?H:. +?LINT:set d_msync +: see if msync exists +set msync d_msync +eval $inlibc + diff --git a/mcon/U/d_munmap.U b/mcon/U/d_munmap.U new file mode 100644 index 0000000..d1cc5a0 --- /dev/null +++ b/mcon/U/d_munmap.U @@ -0,0 +1,31 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_munmap.U,v $ +?RCS: Revision 3.0.1.1 1993/12/15 08:19:22 ram +?RCS: patch15: created +?RCS: +?MAKE:d_munmap: Inlibc +?MAKE: -pick add $@ %< +?S:d_munmap: +?S: This variable conditionally defines HAS_MUNMAP if munmap() is +?S: available to unmap a region mapped by mmap(). +?S:. +?C:HAS_MUNMAP: +?C: This symbol, if defined, indicates that the munmap system call is +?C: available to unmap a region, usually mapped by mmap(). +?C:. +?H:#$d_munmap HAS_MUNMAP /**/ +?H:. +?LINT:set d_munmap +: see if munmap exists +set munmap d_munmap +eval $inlibc + diff --git a/mcon/U/d_newsadm.U b/mcon/U/d_newsadm.U new file mode 100644 index 0000000..cd13f41 --- /dev/null +++ b/mcon/U/d_newsadm.U @@ -0,0 +1,72 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_newsadm.U,v $ +?RCS: Revision 3.0.1.2 1997/02/28 15:36:53 ram +?RCS: patch61: added Guess dependency +?RCS: +?RCS: Revision 3.0.1.1 1994/10/29 16:14:33 ram +?RCS: patch36: call ./eunice explicitely instead of relying on PATH +?RCS: +?RCS: Revision 3.0 1993/08/18 12:06:42 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_newsadm newsadmin: cat contains Guess Setvar Myread Oldconfig +?MAKE: -pick add $@ %< +?S:d_newsadm: +?S: This variable conditionally defines the NEWS_ADMIN symbol, which +?S: indicates to the C program that there is a user who is in charge +?S: of news administration. +?S:. +?S:newsadmin: +?S: This variable holds the login name of the news administrator, if any. +?S:. +?C:NEWS_ADMIN (NEWSADMIN): +?C: This symbol, if defined, contains the login name of the news +?C: administrator. +?C:. +?H:#$d_newsadm NEWS_ADMIN "$newsadmin" /**/ +?H:. +?LINT:set d_newsadm +: get news administrator name +case "$newsadmin" in +'') + if $contains "^news:" /etc/passwd >/dev/null 2>&1 ; then + dflt=news + elif $contains "^usenet:" /etc/passwd >/dev/null 2>&1 ; then + dflt=usenet + elif ./eunice; then + dflt=system + else + dflt=root + fi + ;; +*) + dflt="$newsadmin" + ;; +esac +$cat <<'EOM' + +Many systems keep their news in a private directory, or have a non-superuser +in charge of administering news. (If you don't have such a user, take the +default answer.) I need the login name (not directory) which is used for +news administration. + +EOM +rp="News admin login?" +. ./myread +newsadmin="$ans" +case "$newsadmin" in +root) val="$undef" ;; +*) val="$define" ;; +esac +set d_newsadm +eval $setvar + diff --git a/mcon/U/d_nice.U b/mcon/U/d_nice.U new file mode 100644 index 0000000..3ca22a6 --- /dev/null +++ b/mcon/U/d_nice.U @@ -0,0 +1,33 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu> +?RCS: +?RCS: $Log: d_nice.U,v $ +?RCS: Revision 3.0.1.1 1994/08/29 16:09:48 ram +?RCS: patch32: created by ADO +?RCS: +?MAKE:d_nice: Inlibc +?MAKE: -pick add $@ %< +?S:d_nice: +?S: This variable conditionally defines the HAS_NICE symbol, which +?S: indicates to the C program that the nice() routine is available. +?S:. +?C:HAS_NICE : +?C: This symbol, if defined, indicates that the nice routine is +?C: available. +?C:. +?H:#$d_nice HAS_NICE /**/ +?H:. +?LINT:set d_nice +: see if nice exists +set nice d_nice +eval $inlibc + diff --git a/mcon/U/d_nolnbuf.U b/mcon/U/d_nolnbuf.U new file mode 100644 index 0000000..9e63280 --- /dev/null +++ b/mcon/U/d_nolnbuf.U @@ -0,0 +1,99 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_nolnbuf.U,v $ +?RCS: Revision 3.0.1.1 1994/05/06 14:46:07 ram +?RCS: patch23: avoid looping in the "see that again?" prompt (WED) +?RCS: +?RCS: Revision 3.0 1993/08/18 12:06:43 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_nolnbuf: test +cc cat rm Setvar Myread +?MAKE: -pick add $@ %< +?S:d_nolnbuf: +?S: This variable conditionally defines the NOLINEBUF symbol, which +?S: indicates to the C program that stdout is not buffered, so that +?S: the program can call setbuf() or setlinebuf() for efficiency. +?S:. +?C:NOLINEBUF: +?C: This symbol, if defined, indicates that stdout is not buffered, so that +?C: the program can call setbuf() or setlinebuf() for efficiency. +?C:. +?H:#$d_nolnbuf NOLINEBUF /**/ +?H:. +?T:xxx +?F:!blurfl +?LINT:set d_nolnbuf +: check for buffering of stdout +echo " " +case "$d_nolnbuf" in +'') + $cat <<'EOT' >blurfl.c +#include <stdio.h> +int main() +{ + int i; + + for (i = 0; i < 5; i++) { + putchar(i+'a'); + sleep(1); + } + putchar('\n'); +} +EOT + $cc -o blurfl blurfl.c >/dev/null 2>&1; + $rm -f blurfl.c + $cat >&4 <<'EOM' +Checking for buffering of stdout to terminal. + +Observe the following characters as they are printed out, to see whether they +print out all at once, or with a 1 second pause between each of them. If they +print out one by one, you don't have buffering. If they print together (after +about a 5 second pause), you do have buffering. + +EOM + dflt='Type return to start printing the test characters' + rp='' + . ./myread + xxx=y + while $test "$xxx" = 'y'; do + ./blurfl 1>&4 + dflt=n + rp='Would you like to see that again?' + . ./myread + case "$ans" in + [yY]*) xxx="y";; + *) xxx="n";; + esac + done + dflt=y + rp="Do you have buffering (printed all at once)?" + . ./myread + case "$ans" in + n*) val="$define";; + *) val="$undef";; + esac + ;; +*) + case "$d_nolnbuf" in + "$define") dflt=n;; + *) dflt=y;; + esac + rp="Do you have buffering on stdout to terminals?" + . ./myread + case "$ans" in + n*) val="$define";; + *) val="$undef";; + esac + ;; +esac +set d_nolnbuf +eval $setvar + diff --git a/mcon/U/d_normsig.U b/mcon/U/d_normsig.U new file mode 100644 index 0000000..ae3c7e5 --- /dev/null +++ b/mcon/U/d_normsig.U @@ -0,0 +1,57 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_normsig.U,v $ +?RCS: Revision 3.0.1.2 1997/02/28 15:37:03 ram +?RCS: patch61: replaced .a with $_a all over the place +?RCS: +?RCS: Revision 3.0.1.1 1994/10/29 16:14:48 ram +?RCS: patch36: call ./bsd explicitely instead of relying on PATH +?RCS: +?RCS: Revision 3.0 1993/08/18 12:06:44 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_normsig jobslib: test Setvar Guess _a +?MAKE: -pick add $@ %< +?S:d_normsig: +?S: This variable conditionally defines the NORMSIG symbol, which +?S: indicates to the C program that the normal signal handling routines +?S: should be used, as opposed to the ones in 4.1bsd (sigset, etc.). +?S:. +?S:jobslib: +?S: This variable holds the argument to be passed to the loader to include +?S: the strange signal handling routines from 4.1bsd. On systems that +?S: have NORMSIG defined this variable is null. +?S:. +?C:NORMSIG: +?C: This symbol, if defined, indicates that normal signal handling routines +?C: should be used, as opposed to the ones in 4.1bsd (sigset, etc.). +?C:. +?H:#$d_normsig NORMSIG /**/ +?H:. +?LINT:set d_normsig +: see if we need -ljobs and if we have sigset, etc. +echo " " +if $test -r /usr/lib/libjobs$_a || $test -r /usr/local/lib/libjobs$_a ; then + echo "Jobs library found." >&4 + val="$undef" + jobslib='-ljobs' +else + if ./bsd; then + echo "No jobs library found. (I suppose this is at least 4.2...)" >&4 + else + echo "No jobs library found. (That's okay, we all have our faults.)" >&4 + fi + val="$define" + jobslib='' +fi +set d_normsig +eval $setvar + diff --git a/mcon/U/d_open3.U b/mcon/U/d_open3.U new file mode 100644 index 0000000..4d24d51 --- /dev/null +++ b/mcon/U/d_open3.U @@ -0,0 +1,90 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_open3.U,v $ +?RCS: Revision 3.0.1.2 1997/02/28 15:37:12 ram +?RCS: patch61: added ?F: metalint hint +?RCS: +?RCS: Revision 3.0.1.1 1995/07/25 13:58:26 ram +?RCS: patch56: added knowledge of the O_NONBLOCK symbol +?RCS: +?RCS: Revision 3.0 1993/08/18 12:06:44 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_open3: test +cc cat +cppflags h_fcntl h_sysfile rm Setvar Findhdr Warn +?MAKE: -pick add $@ %< +?X: It would be easy to separate the h_O_stuff from this. +?X: Is there a reason to do so? -- HMS +?S:d_open3: +?S: This variable conditionally defines the HAS_OPEN3 manifest constant, +?S: which indicates to the C program that the 3 argument version of +?S: the open(2) function is available. +?S:. +?C:HAS_OPEN3 (OPEN3): +?C: This manifest constant lets the C program know that the three +?C: argument form of open(2) is available. +?C:. +?H:#$d_open3 HAS_OPEN3 /**/ +?H:. +?W:%<:O_RDONLY O_WRONLY O_RDWR O_NDELAY O_APPEND O_SYNC O_CREAT O_TRUNC +?W:%<:O_EXCL O_NONBLOCK +?F:!open3 +?LINT:set d_open3 +?LINT:change h_fcntl h_sysfile +: Locate the flags for 'open()' +echo " " +$cat >open3.c <<'EOCP' +#include <sys/types.h> +#ifdef I_FCNTL +#include <fcntl.h> +#endif +#ifdef I_SYS_FILE +#include <sys/file.h> +#endif +int main() { + if(O_RDONLY); +#ifdef O_TRUNC + exit(0); +#else + exit(1); +#endif +} +EOCP +: check sys/file.h first to get FREAD on Sun +if $test `./findhdr sys/file.h` && \ + $cc $cppflags "-DI_SYS_FILE" -o open3 open3.c >/dev/null 2>&1 ; then + h_sysfile=true; + echo "<sys/file.h> defines the O_* constants..." >&4 + if ./open3; then + echo "and you have the 3 argument form of open()." >&4 + val="$define" + else + echo "but not the 3 argument form of open(). Oh, well." >&4 + val="$undef" + fi +elif $test `./findhdr fcntl.h` && \ + $cc "-DI_FCNTL" -o open3 open3.c >/dev/null 2>&1 ; then + h_fcntl=true; + echo "<fcntl.h> defines the O_* constants..." >&4 + if ./open3; then + echo "and you have the 3 argument form of open()." >&4 + val="$define" + else + echo "but not the 3 argument form of open(). Oh, well." >&4 + val="$undef" + fi +else + val="$undef" + ./warn "I can't find the O_* constant definitions! You got problems." +fi +set d_open3 +eval $setvar +$rm -f open3* + diff --git a/mcon/U/d_passwd.U b/mcon/U/d_passwd.U new file mode 100644 index 0000000..2504e6c --- /dev/null +++ b/mcon/U/d_passwd.U @@ -0,0 +1,23 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu> +?RCS: +?RCS: $Log: d_passwd.U,v $ +?RCS: Revision 3.0.1.2 1997/02/28 15:37:21 ram +?RCS: patch61: useless unit dropped. +?RCS: +?RCS: Revision 3.0.1.1 1994/08/29 16:09:51 ram +?RCS: patch32: created by ADO +?RCS: +?X: +?X: Useless unit dropped. +?X: +?LINT:empty diff --git a/mcon/U/d_pathconf.U b/mcon/U/d_pathconf.U new file mode 100644 index 0000000..b39ccb5 --- /dev/null +++ b/mcon/U/d_pathconf.U @@ -0,0 +1,55 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu> +?RCS: +?RCS: $Log: d_pathconf.U,v $ +?RCS: Revision 3.0.1.1 1994/10/29 16:14:54 ram +?RCS: patch36: created by ADO +?RCS: +?MAKE:d_pathconf d_fpathconf: Inlibc +?MAKE: -pick add $@ %< +?S:d_pathconf: +?S: This variable conditionally defines the HAS_PATHCONF symbol, which +?S: indicates to the C program that the pathconf() routine is available +?S: to determine file-system related limits and options associated +?S: with a given filename. +?S:. +?S:d_fpathconf: +?S: This variable conditionally defines the HAS_FPATHCONF symbol, which +?S: indicates to the C program that the pathconf() routine is available +?S: to determine file-system related limits and options associated +?S: with a given open file descriptor. +?S:. +?C:HAS_PATHCONF: +?C: This symbol, if defined, indicates that pathconf() is available +?C: to determine file-system related limits and options associated +?C: with a given filename. +?C:. +?C:HAS_FPATHCONF: +?C: This symbol, if defined, indicates that pathconf() is available +?C: to determine file-system related limits and options associated +?C: with a given open file descriptor. +?C:. +?H:#$d_pathconf HAS_PATHCONF /**/ +?H:#$d_fpathconf HAS_FPATHCONF /**/ +?H:. +?LINT:set d_pathconf +?LINT:set d_fpathconf +: see if pathconf exists +set pathconf d_pathconf +eval $inlibc + +@if d_fpathconf || HAS_FPATHCONF +: see if fpathconf exists +set fpathconf d_fpathconf +eval $inlibc + +@end diff --git a/mcon/U/d_pause.U b/mcon/U/d_pause.U new file mode 100644 index 0000000..f161b4f --- /dev/null +++ b/mcon/U/d_pause.U @@ -0,0 +1,34 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu> +?RCS: +?RCS: $Log: d_pause.U,v $ +?RCS: Revision 3.0.1.1 1994/08/29 16:09:54 ram +?RCS: patch32: created by ADO +?RCS: +?MAKE:d_pause: Inlibc +?MAKE: -pick add $@ %< +?S:d_pause: +?S: This variable conditionally defines the HAS_PAUSE symbol, which +?S: indicates to the C program that the pause() routine is available +?S: to suspend a process until a signal is received. +?S:. +?C:HAS_PAUSE : +?C: This symbol, if defined, indicates that the pause routine is +?C: available to suspend a process until a signal is received. +?C:. +?H:#$d_pause HAS_PAUSE /**/ +?H:. +?LINT:set d_pause +: see if pause exists +set pause d_pause +eval $inlibc + diff --git a/mcon/U/d_perror.U b/mcon/U/d_perror.U new file mode 100644 index 0000000..56df478 --- /dev/null +++ b/mcon/U/d_perror.U @@ -0,0 +1,44 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_perror.U,v $ +?RCS: Revision 3.0.1.1 1994/08/29 16:11:38 ram +?RCS: patch32: always define HAS_PERROR even when not used in C code +?RCS: +?RCS: Revision 3.0 1993/08/18 12:06:45 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_perror: Inlibc +?MAKE: -pick add $@ %< +?S:d_perror: +?S: This variable conditionally remaps perror to a null action and +?S: defines the symbol HAS_PERROR, which indicates to the C program +?S: that the perror() routine is not available to print system +?S: error messages. +?S:. +?C:HAS_PERROR ~ %<: +?C: This symbol, if defined, indicates that the perror() routine is +?C: available to print system error messages. If not defined, you should +?C: use your own diagnostic routine... +?C:. +?C:perror ~ %<: +?C: This symbol is maped to null if the perror() routine is not +?C: available to print system error messages. +?C:. +?H:?%<:#$d_perror HAS_PERROR /**/ +?H:?%<:#ifndef HAS_PERROR +?H:?%<:#define perror(s) ; /* mapped to a null statement */ +?H:?%<:#endif +?H:. +?LINT:set d_perror +: see if perror exists +set perror d_perror +eval $inlibc + diff --git a/mcon/U/d_pidcheck.U b/mcon/U/d_pidcheck.U new file mode 100644 index 0000000..6744334 --- /dev/null +++ b/mcon/U/d_pidcheck.U @@ -0,0 +1,75 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_pidcheck.U,v $ +?RCS: Revision 3.0.1.1 1997/02/28 15:37:55 ram +?RCS: patch61: replaced .o with $_o all over the place +?RCS: patch61: added ?F: metalint hint +?RCS: +?RCS: Revision 3.0 1993/08/18 12:06:46 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_pidcheck: cat rm +cc _o +?MAKE: -pick add $@ %< +?S:d_pidcheck: +?S: This variable conditionally defines the variable PIDCHECK +?S: which indicates that kill(pid, 0) will check for an active pid. +?S:. +?C:PIDCHECK: +?C: This symbol, if defined, means that the kill(pid, 0) will +?C: check for an active pid (i.e. the kernel will run all the +?C: necessary pid checks, but no signal is actually sent). +?C:. +?H:#$d_pidcheck PIDCHECK /**/ +?H:. +?F:!try +: check for "kill(pid, 0)" +echo " " +case "$d_pidcheck" in +"$define") +echo "I already know your system supports kill(pid, 0) for pid checks." >&4 + ;; +"$undef") +echo "We both know your system does not support signal #0 for pid checks." >&4 + ;; +*) + echo "Checking to see if kill(pid, 0) works..." >&4 + $cat >try.c <<'EOCP' +int main() + { + int pid, status0, status9; + + if ((pid = fork()) == 0) + { + sleep(30); + exit(1); + } + status0 = kill(pid, 0); + status9 = kill(pid, 9); + exit(status0 == status9); + } +EOCP + if $cc -o try try.c >/dev/null 2>&1 ; then + if ./try >/dev/null 2>&1 ; then + echo "Yes, it does marvels." + d_pidcheck="$undef" + else + d_pidcheck="$define" + echo "No, it doesn't." + fi + else + echo "(I was unable to compile the test program.)" + echo "Your system does not appear to support kill(pid, 0)." + d_pidcheck="$undef" + fi + $rm -f try.c try$_o try + ;; +esac + diff --git a/mcon/U/d_pipe.U b/mcon/U/d_pipe.U new file mode 100644 index 0000000..e139dd0 --- /dev/null +++ b/mcon/U/d_pipe.U @@ -0,0 +1,34 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu> +?RCS: +?RCS: $Log: d_pipe.U,v $ +?RCS: Revision 3.0.1.1 1994/08/29 16:11:44 ram +?RCS: patch32: created by ADO +?RCS: +?MAKE:d_pipe: Inlibc +?MAKE: -pick add $@ %< +?S:d_pipe: +?S: This variable conditionally defines the HAS_PIPE symbol, which +?S: indicates to the C program that the pipe() routine is available +?S: to create an inter-process channel. +?S:. +?C:HAS_PIPE : +?C: This symbol, if defined, indicates that the pipe routine is +?C: available to create an inter-process channel. +?C:. +?H:#$d_pipe HAS_PIPE /**/ +?H:. +?LINT:set d_pipe +: see if pipe exists +set pipe d_pipe +eval $inlibc + diff --git a/mcon/U/d_poll.U b/mcon/U/d_poll.U new file mode 100644 index 0000000..f07ef0e --- /dev/null +++ b/mcon/U/d_poll.U @@ -0,0 +1,36 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_poll.U,v $ +?RCS: Revision 3.0.1.2 1997/02/28 15:38:17 ram +?RCS: patch61: mention that <poll.h> can be included if HAS_POLL defined +?RCS: +?RCS: Revision 3.0.1.1 1995/01/11 15:26:31 ram +?RCS: patch45: created +?RCS: +?MAKE:d_poll: Inlibc +?MAKE: -pick add $@ %< +?S:d_poll: +?S: This variable conditionally defines the HAS_POLL symbol, which +?S: indicates to the C program that the poll() routine is available +?S: to poll active file descriptors. +?S:. +?C:HAS_POLL : +?C: This symbol, if defined, indicates that the poll routine is +?C: available to poll active file descriptors. You may safely +?C: include <poll.h> when this symbol is defined. +?C:. +?H:#$d_poll HAS_POLL /**/ +?H:. +?LINT:set d_poll +: see if poll exists +set poll d_poll +eval $inlibc + diff --git a/mcon/U/d_popen.U b/mcon/U/d_popen.U new file mode 100644 index 0000000..73d5d43 --- /dev/null +++ b/mcon/U/d_popen.U @@ -0,0 +1,31 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_popen.U,v $ +?RCS: Revision 3.0 1993/08/18 12:06:47 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_popen: Inlibc +?MAKE: -pick add $@ %< +?S:d_popen: +?S: This variable conditionally defines HAS_POPEN if popen() is +?S: available to open a pipe from a process. +?S:. +?C:HAS_POPEN (POPEN): +?C: This symbol, if defined, indicates that the popen routine is +?C: available to open a pipe from a process. +?C:. +?H:#$d_popen HAS_POPEN /**/ +?H:. +?LINT:set d_popen +: see if popen exists +set popen d_popen +eval $inlibc + diff --git a/mcon/U/d_portable.U b/mcon/U/d_portable.U new file mode 100644 index 0000000..36389b4 --- /dev/null +++ b/mcon/U/d_portable.U @@ -0,0 +1,71 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_portable.U,v $ +?RCS: Revision 3.0.1.2 1995/01/11 15:28:52 ram +?RCS: patch45: executable path stripping moved to the end in Config_sh.U +?RCS: +?RCS: Revision 3.0.1.1 1993/12/15 08:21:17 ram +?RCS: patch15: did not strip variables properly when needed +?RCS: patch15: now also strips down variables from trylist +?RCS: +?RCS: Revision 3.0 1993/08/18 12:06:48 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?X: +?X: The Loc unit is wanted to get the definition of all the locating variables. +?X: +?MAKE:d_portable: cat Loc Myread Oldconfig +?MAKE: -pick add $@ %< +?S:d_portable: +?S: This variable conditionally defines the PORTABLE symbol, which +?S: indicates to the C program that it should not assume that it is +?S: running on the machine it was compiled on. +?S:. +?C:PORTABLE: +?C: This symbol, if defined, indicates to the C program that it should +?C: not assume that it is running on the machine it was compiled on. +?C: The program should be prepared to look up the host name, translate +?C: generic filenames, use PATH, etc. +?C:. +?H:#$d_portable PORTABLE /**/ +?H:. +?D:d_portable='' +: decide how portable to be +case "$d_portable" in +"$define") dflt=y;; +*) dflt=n;; +esac +$cat <<'EOH' + +I can set things up so that your shell scripts and binaries are more portable, +at what may be a noticable cost in performance. In particular, if you +ask to be portable, the following happens: + + 1) Shell scripts will rely on the PATH variable rather than using + the paths derived above. + 2) ~username interpretations will be done at run time rather than + by Configure. +@if PHOSTNAME + 3) The system name will be determined at run time, if at all possible. +@end + +EOH +rp="Do you expect to run these scripts and binaries on multiple machines?" +. ./myread +case "$ans" in + y*) d_portable="$define" +?X: +?X: Paths will be stripped down (/usr/bin/vi -> vi) in Config_sh.U if needed. +?X: + ;; + *) d_portable="$undef" ;; +esac + diff --git a/mcon/U/d_pread.U b/mcon/U/d_pread.U new file mode 100644 index 0000000..6f55bb6 --- /dev/null +++ b/mcon/U/d_pread.U @@ -0,0 +1,29 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_pread.U,v $ +?RCS: +?MAKE:d_pread: Inlibc +?MAKE: -pick add $@ %< +?S:d_pread: +?S: This variable conditionally defines the HAS_PREAD symbol, which +?S: indicates to the C program that the pread() routine is available. +?S:. +?C:HAS_PREAD : +?C: This symbol, if defined, indicates that the pread routine is +?C: available to perform reads on a file descriptor at a given offset. +?C:. +?H:#$d_pread HAS_PREAD /**/ +?H:. +?LINT:set d_pread +: see if pread exists +set pread d_pread +eval $inlibc + diff --git a/mcon/U/d_preadv.U b/mcon/U/d_preadv.U new file mode 100644 index 0000000..f0ee540 --- /dev/null +++ b/mcon/U/d_preadv.U @@ -0,0 +1,30 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_preadv.U,v $ +?RCS: +?MAKE:d_preadv: Inlibc +?MAKE: -pick add $@ %< +?S:d_preadv: +?S: This variable conditionally defines the HAS_PREADV symbol, which +?S: indicates to the C program that the preadv() routine is available. +?S:. +?C:HAS_PREADV : +?C: This symbol, if defined, indicates that the preadv routine is +?C: available to perform vectored reads on a file descriptor at a +?C: given offset. +?C:. +?H:#$d_preadv HAS_PREADV /**/ +?H:. +?LINT:set d_preadv +: see if preadv exists +set preadv d_preadv +eval $inlibc + diff --git a/mcon/U/d_psignal.U b/mcon/U/d_psignal.U new file mode 100644 index 0000000..b6bbdc5 --- /dev/null +++ b/mcon/U/d_psignal.U @@ -0,0 +1,31 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_psignal.U,v $ +?RCS: Revision 3.0 1993/08/18 12:06:49 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_psignal: Inlibc +?MAKE: -pick add $@ %< +?S:d_psignal: +?S: This variable conditionally defines the HAS_PSIGNAL symbol, which +?S: indicates that the psignal() routine exists. The psignal() routine +?S: prints a description of a signal on the standard error output. +?S:. +?C:HAS_PSIGNAL (PSIGNAL): +?C: This symbol, if defined, indicates that the psignal() routine exists. +?C:. +?H:#$d_psignal HAS_PSIGNAL /**/ +?H:. +?LINT:set d_psignal +: see if psignal exists +set psignal d_psignal +eval $inlibc + diff --git a/mcon/U/d_pwrite.U b/mcon/U/d_pwrite.U new file mode 100644 index 0000000..f72fe58 --- /dev/null +++ b/mcon/U/d_pwrite.U @@ -0,0 +1,29 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_pwrite.U,v $ +?RCS: +?MAKE:d_pwrite: Inlibc +?MAKE: -pick add $@ %< +?S:d_pwrite: +?S: This variable conditionally defines the HAS_PWRITE symbol, which +?S: indicates to the C program that the pwrite() routine is available. +?S:. +?C:HAS_PWRITE : +?C: This symbol, if defined, indicates that the pwrite routine is +?C: available to perform writes on a file descriptor at a given offset. +?C:. +?H:#$d_pwrite HAS_PWRITE /**/ +?H:. +?LINT:set d_pwrite +: see if pwrite exists +set pwrite d_pwrite +eval $inlibc + diff --git a/mcon/U/d_pwritev.U b/mcon/U/d_pwritev.U new file mode 100644 index 0000000..15e96dc --- /dev/null +++ b/mcon/U/d_pwritev.U @@ -0,0 +1,30 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_pwritev.U,v $ +?RCS: +?MAKE:d_pwritev: Inlibc +?MAKE: -pick add $@ %< +?S:d_pwritev: +?S: This variable conditionally defines the HAS_PWRITEV symbol, which +?S: indicates to the C program that the pwritev() routine is available. +?S:. +?C:HAS_PWRITEV : +?C: This symbol, if defined, indicates that the pwritev routine is +?C: available to perform vectored writes on a file descriptor at a +?C: given offset. +?C:. +?H:#$d_pwritev HAS_PWRITEV /**/ +?H:. +?LINT:set d_pwritev +: see if pwritev exists +set pwritev d_pwritev +eval $inlibc + diff --git a/mcon/U/d_raster.U b/mcon/U/d_raster.U new file mode 100644 index 0000000..7159de7 --- /dev/null +++ b/mcon/U/d_raster.U @@ -0,0 +1,57 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_raster.U,v $ +?RCS: Revision 3.0 1993/08/18 12:06:50 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_raster rasterlib: cat test Setvar Myread Oldconfig +?MAKE: -pick add $@ %< +?S:d_raster: +?S: Conditionally defines RASTER_TEK if this is a raster tech machine. +?S:. +?S:rasterlib (d_rasterlib): +?S: Set to the needed compile flag if this is a raster tech machine. +?S: It is up to the Makefile to use this variable. +?S:. +?C:RASTER_TEK: +?C: Defined if this is a rastertech machine. +?C:. +?H:#$d_raster RASTER_TEK /**/ +?H:. +?LINT:set d_raster +: See if this is a raster tech machine. +val="$undef" +rasterlib='' +if $test -r /dev/mirage; then + $cat <<'EOM' + +You seem to have a mirage device... this is normally associated with a raster +technologies graphics workstation. If this is right, you may want to use raster +tech in this program. + +EOM + dflt=y + case "$d_raster" in + "$undef") dflt=n;; + esac + rp='Use raster tech?' + . ./myread + case "$ans" in + y*) val="$define";; + esac +fi +set d_raster +eval $setvar + +case "$d_raster" in +"$define") rasterlib='-lphigs';; +esac + diff --git a/mcon/U/d_rdchk.U b/mcon/U/d_rdchk.U new file mode 100644 index 0000000..0d45342 --- /dev/null +++ b/mcon/U/d_rdchk.U @@ -0,0 +1,33 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_rdchk.U,v $ +?RCS: Revision 3.0 1993/08/18 12:06:51 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_rdchk: Inlibc +?MAKE: -pick add $@ %< +?S:d_rdchk: +?S: This variable conditionally defines the HAS_RDCHK symbol, which +?S: indicates to the C program that the rdchk() routine is available +?S: to find out if there is input pending on an IO channel. +?S:. +?C:HAS_RDCHK (RDCHK): +?C: This symbol, if defined, indicates that the rdchk routine is available +?C: to find out if there is input pending on an IO channel. Generally +?C: the routine is used only if FIONREAD and O_NDELAY aren't available. +?C:. +?H:#$d_rdchk HAS_RDCHK /**/ +?H:. +?LINT:set d_rdchk +: see if rdchk exists +set rdchk d_rdchk +eval $inlibc + diff --git a/mcon/U/d_readdir.U b/mcon/U/d_readdir.U new file mode 100644 index 0000000..3b2b484 --- /dev/null +++ b/mcon/U/d_readdir.U @@ -0,0 +1,79 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_readdir.U,v $ +?RCS: Revision 3.0.1.1 1994/05/06 14:46:37 ram +?RCS: patch23: added support for seekdir, telldir and rewinddir (ADO) +?RCS: +?RCS: Revision 3.0 1993/08/18 12:06:52 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?X: Force checking for <dirent.h> inclusion +?X:INC: i_dirent +?MAKE:d_readdir d_seekdir d_telldir d_rewinddir: Inlibc +?MAKE: -pick add $@ %< +?S:d_readdir: +?S: This variable conditionally defines HAS_READDIR if readdir() is +?S: available to read directory entries. +?S:. +?C:HAS_READDIR (READDIR): +?C: This symbol, if defined, indicates that the readdir routine is +?C: available to read directory entries. You may have to include +?C: <dirent.h>. See I_DIRENT. +?C:. +?H:#$d_readdir HAS_READDIR /**/ +?H:. +?S:d_seekdir: +?S: This variable conditionally defines HAS_SEEKDIR if seekdir() is +?S: available. +?S:. +?C:HAS_SEEKDIR: +?C: This symbol, if defined, indicates that the seekdir routine is +?C: available. You may have to include <dirent.h>. See I_DIRENT. +?C:. +?H:#$d_seekdir HAS_SEEKDIR /**/ +?H:. +?S:d_telldir: +?S: This variable conditionally defines HAS_TELLDIR if telldir() is +?S: available. +?S:. +?C:HAS_TELLDIR: +?C: This symbol, if defined, indicates that the telldir routine is +?C: available. You may have to include <dirent.h>. See I_DIRENT. +?C:. +?H:#$d_telldir HAS_TELLDIR /**/ +?H:. +?S:d_rewinddir: +?S: This variable conditionally defines HAS_REWINDDIR if rewinddir() is +?S: available. +?S:. +?C:HAS_REWINDDIR: +?C: This symbol, if defined, indicates that the rewinddir routine is +?C: available. You may have to include <dirent.h>. See I_DIRENT. +?C:. +?H:#$d_rewinddir HAS_REWINDDIR /**/ +?H:. +?LINT:set d_readdir d_seekdir d_telldir d_rewinddir +: see if readdir and friends exist +set readdir d_readdir +eval $inlibc +@if d_seekdir || HAS_SEEKDIR +set seekdir d_seekdir +eval $inlibc +@end +@if d_telldir || HAS_TELLDIR +set telldir d_telldir +eval $inlibc +@end +@if d_rewinddir || HAS_REWINDDIR +set rewinddir d_rewinddir +eval $inlibc +@end + diff --git a/mcon/U/d_readlink.U b/mcon/U/d_readlink.U new file mode 100644 index 0000000..ed6f06a --- /dev/null +++ b/mcon/U/d_readlink.U @@ -0,0 +1,34 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu> +?RCS: +?RCS: $Log: d_readlink.U,v $ +?RCS: Revision 3.0.1.1 1994/08/29 16:11:52 ram +?RCS: patch32: created by ADO +?RCS: +?MAKE:d_readlink: Inlibc +?MAKE: -pick add $@ %< +?S:d_readlink: +?S: This variable conditionally defines the HAS_READLINK symbol, which +?S: indicates to the C program that the readlink() routine is available +?S: to read the value of a symbolic link. +?S:. +?C:HAS_READLINK : +?C: This symbol, if defined, indicates that the readlink routine is +?C: available to read the value of a symbolic link. +?C:. +?H:#$d_readlink HAS_READLINK /**/ +?H:. +?LINT:set d_readlink +: see if readlink exists +set readlink d_readlink +eval $inlibc + diff --git a/mcon/U/d_regcmp.U b/mcon/U/d_regcmp.U new file mode 100644 index 0000000..50fe24c --- /dev/null +++ b/mcon/U/d_regcmp.U @@ -0,0 +1,80 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_regcmp.U,v $ +?RCS: Revision 3.0.1.1 1995/01/30 14:34:45 ram +?RCS: patch49: now looks for POSIX regcomp() routine +?RCS: +?RCS: Revision 3.0 1993/08/18 12:06:53 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_regcmp d_re_comp d_regcomp: Csym cat +?MAKE: -pick add $@ %< +?S:d_regcomp: +?S: This variable conditionally defines the HAS_REGCOMP symbol, which +?S: indicates to the C program that the regcomp() routine is available +?S: for regular patern matching (usally on POSIX.2 conforming systems). +?S:. +?S:d_regcmp: +?S: This variable conditionally defines the HAS_REGCMP symbol, which +?S: indicates to the C program that the regcmp() routine is available +?S: for regular patern matching (usally on System V). +?S:. +?S:d_re_comp: +?S: This variable conditionally defines the HAS_RECOMP symbol, which +?S: indicates to the C program that the re_comp() routine is available +?S: for regular patern matching (usally on BSD). If so, it is likely that +?S: re_exec() exists. +?S:. +?C:HAS_REGCOMP (REGCOMP): +?C: This symbol, if defined, indicates that the regcomp() routine is +?C: available to do some regular patern matching (usually on POSIX.2 +?C: conforming systems). +?C:. +?C:HAS_REGCMP (REGCMP): +?C: This symbol, if defined, indicates that the regcmp() routine is +?C: available to do some regular patern matching (usually on System V). +?C:. +?C:HAS_RECOMP (RECOMP): +?C: This symbol, if defined, indicates that the re_comp() routine is +?C: available to do some regular patern matching (usually on BSD). If so, +?C: it is likely that re_exec() be available. +?C:. +?H:#$d_regcomp HAS_REGCOMP /* POSIX.2 */ +?H:#$d_regcmp HAS_REGCMP /* sysV */ +?H:#$d_re_comp HAS_RECOMP /* BSD */ +?H:. +?T:val +: see if regcomp, regcmp, or re_comp exist, for regular pattern matching +echo " " +if set regcomp val -f d_regcomp; eval $csym; $val; then + echo 'regcomp() found.' >&4 + d_regcomp="$define" + d_regcmp="$undef" + d_re_comp="$undef" +elif set regcmp val -f d_regcmp; eval $csym; $val; then + echo 'regcmp() found.' >&4 + d_regcmp="$define" + d_regcomp="$undef" + d_re_comp="$undef" +elif set re_comp val -f d_re_comp; eval $csym; $val; then + echo 're_comp() found, assuming re_exec() also exists.' >&4 + d_re_comp="$define" + d_regcomp="$undef" + d_regcmp="$undef" +else + $cat >&4 <<EOM +No regcomp(), regcmp() nor re_comp() found !! No regular pattern matching. +EOM + d_regcmp="$undef" + d_re_comp="$undef" + d_regcomp="$undef" +fi + diff --git a/mcon/U/d_rename.U b/mcon/U/d_rename.U new file mode 100644 index 0000000..20b3305 --- /dev/null +++ b/mcon/U/d_rename.U @@ -0,0 +1,33 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_rename.U,v $ +?RCS: Revision 3.0 1993/08/18 12:06:54 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_rename: Inlibc +?MAKE: -pick add $@ %< +?S:d_rename: +?S: This variable conditionally defines the HAS_RENAME symbol, which +?S: indicates to the C program that the rename() routine is available +?S: to rename files. +?S:. +?C:HAS_RENAME (RENAME): +?C: This symbol, if defined, indicates that the rename routine is available +?C: to rename files. Otherwise you should do the unlink(), link(), unlink() +?C: trick. +?C:. +?H:#$d_rename HAS_RENAME /**/ +?H:. +?LINT:set d_rename +: see if rename exists +set rename d_rename +eval $inlibc + diff --git a/mcon/U/d_rmdir.U b/mcon/U/d_rmdir.U new file mode 100644 index 0000000..078a6a0 --- /dev/null +++ b/mcon/U/d_rmdir.U @@ -0,0 +1,32 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_rmdir.U,v $ +?RCS: Revision 3.0 1993/08/18 12:06:56 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_rmdir: Inlibc +?MAKE: -pick add $@ %< +?S:d_rmdir: +?S: This variable conditionally defines HAS_RMDIR if rmdir() is +?S: available to remove directories. +?S:. +?C:HAS_RMDIR (RMDIR): +?C: This symbol, if defined, indicates that the rmdir routine is +?C: available to remove directories. Otherwise you should fork off a +?C: new process to exec /bin/rmdir. +?C:. +?H:#$d_rmdir HAS_RMDIR /**/ +?H:. +?LINT:set d_rmdir +: see if rmdir exists +set rmdir d_rmdir +eval $inlibc + diff --git a/mcon/U/d_rusage.U b/mcon/U/d_rusage.U new file mode 100644 index 0000000..a2d1c33 --- /dev/null +++ b/mcon/U/d_rusage.U @@ -0,0 +1,36 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_rusage.U,v $ +?RCS: Revision 3.0 1993/08/18 12:06:57 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?X: We may need to include <sys/resource.h> and <sys/time.h> FIXME +?X:INC: i_sysresrc i_systime +?MAKE:d_rusage: Inlibc +?MAKE: -pick add $@ %< +?S:d_rusage (d_getrusg): +?S: This variable conditionally defines the HAS_GETRUSAGE symbol, which +?S: indicates that the getrusage() routine exists. The getrusage() routine +?S: supports sub-second accuracy for process cpu accounting. You may need +?S: to include <sys/resource.h> and <sys/time.h>. +?S:. +?C:HAS_GETRUSAGE (RUSAGE GETRUSAGE): +?C: This symbol, if defined, indicates that the getrusage() routine is +?C: available to get process statistics with a sub-second accuracy. +?C: Inclusion of <sys/resource.h> and <sys/time.h> may be necessary. +?C:. +?H:#$d_rusage HAS_GETRUSAGE /**/ +?H:. +?LINT:set d_rusage +: see if getrusage exists +set getrusage d_rusage +eval $inlibc + diff --git a/mcon/U/d_safebcpy.U b/mcon/U/d_safebcpy.U new file mode 100644 index 0000000..f30aff7 --- /dev/null +++ b/mcon/U/d_safebcpy.U @@ -0,0 +1,124 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_safebcpy.U,v $ +?RCS: Revision 3.0.1.4 1997/02/28 15:40:58 ram +?RCS: patch61: improved overlapping copy check +?RCS: patch61: comfort them if they have memmove +?RCS: patch61: added ?F: metalint hint +?RCS: +?RCS: Revision 3.0.1.3 1995/07/25 13:58:40 ram +?RCS: patch56: re-arranged compile line to include ldflags before objects +?RCS: +?RCS: Revision 3.0.1.2 1995/01/11 15:29:23 ram +?RCS: patch45: added 'ldflags' to the test compile line (ADO) +?RCS: +?RCS: Revision 3.0.1.1 1994/05/06 14:49:03 ram +?RCS: patch23: ensure string is not optimized in read-only memory (ADO) +?RCS: +?RCS: Revision 3.0 1993/08/18 12:06:58 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_safebcpy: cat d_bcopy +cc +optimize +ccflags +ldflags +libs rm \ + d_memmove i_memory i_stdlib i_string i_unistd Oldconfig Setvar +?MAKE: -pick add $@ %< +?S:d_safebcpy: +?S: This variable conditionally defines the HAS_SAFE_BCOPY symbol if +?S: the bcopy() routine can do overlapping copies. +?S:. +?C:HAS_SAFE_BCOPY (SAFE_BCOPY): +?C: This symbol, if defined, indicates that the bcopy routine is available +?C: to copy potentially overlapping memory blocks. Otherwise you should +?C: probably use memmove() or memcpy(). If neither is defined, roll your +?C: own version. +?C:. +?H:#$d_safebcpy HAS_SAFE_BCOPY /**/ +?H:. +?F:!safebcpy +?LINT: set d_safebcpy +: can bcopy handle overlapping blocks? +?X: assume the worst +val="$undef" +case "$d_bcopy" in +"$define") + echo " " + echo "Checking to see if your bcopy() can do overlapping copies..." >&4 + $cat >foo.c <<EOCP +#$i_memory I_MEMORY +#$i_stdlib I_STDLIB +#$i_string I_STRING +#$i_unistd I_UNISTD +EOCP + $cat >>foo.c <<'EOCP' +#include <stdio.h> +#ifdef I_MEMORY +# include <memory.h> +#endif +#ifdef I_STDLIB +# include <stdlib.h> +#endif +#ifdef I_STRING +# include <string.h> +#else +# include <strings.h> +#endif +#ifdef I_UNISTD +# include <unistd.h> /* Needed for NetBSD */ +#endif +int main() +{ +char buf[128], abc[128]; +char *b; +int len; +int off; +int align; + +?X: Copy "abcde..." string to char abc[] so that gcc doesn't +?X: try to store the string in read-only memory. +bcopy("abcdefghijklmnopqrstuvwxyz0123456789", abc, 36); + +for (align = 7; align >= 0; align--) { + for (len = 36; len; len--) { + b = buf+align; + bcopy(abc, b, len); + for (off = 1; off <= len; off++) { + bcopy(b, b+off, len); + bcopy(b+off, b, len); + if (bcmp(b, abc, len)) + exit(1); + } + } +} +exit(0); +} +EOCP + if $cc $optimize $ccflags $ldflags \ + -o safebcpy foo.c $libs >/dev/null 2>&1; then + if ./safebcpy 2>/dev/null; then + echo "Yes, it can." + val="$define" + else + echo "It can't, sorry." + case "$d_memmove" in + "$define") echo "But that's Ok since you have memmove()." ;; + esac + fi + else + echo "(I can't compile the test program, so we'll assume not...)" + case "$d_memmove" in + "$define") echo "But that's Ok since you have memmove()." ;; + esac + fi + ;; +esac +$rm -f foo.* safebcpy core +set d_safebcpy +eval $setvar + diff --git a/mcon/U/d_safemcpy.U b/mcon/U/d_safemcpy.U new file mode 100644 index 0000000..d59475b --- /dev/null +++ b/mcon/U/d_safemcpy.U @@ -0,0 +1,127 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_safemcpy.U,v $ +?RCS: Revision 3.0.1.5 1997/02/28 15:41:12 ram +?RCS: patch61: improved overlapping copy check +?RCS: patch61: comfort them if they have memmove +?RCS: patch61: added ?F: metalint hint +?RCS: +?RCS: Revision 3.0.1.4 1995/07/25 13:58:46 ram +?RCS: patch56: re-arranged compile line to include ldflags before objects +?RCS: +?RCS: Revision 3.0.1.3 1995/03/21 08:47:26 ram +?RCS: patch52: swapped two first arguments of memcpy() calls +?RCS: +?RCS: Revision 3.0.1.2 1994/10/29 16:15:10 ram +?RCS: patch36: added 'ldflags' to the test compile line (ADO) +?RCS: +?RCS: Revision 3.0.1.1 1994/05/06 14:53:12 ram +?RCS: patch23: ensure string is not optimized in read-only memory (ADO) +?RCS: +?RCS: Revision 3.0 1993/08/18 12:06:58 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_safemcpy: cat d_memcpy +cc +optimize +ccflags +libs +ldflags rm \ + d_memmove i_memory i_stdlib i_string i_unistd Oldconfig Setvar +?MAKE: -pick add $@ %< +?S:d_safemcpy: +?S: This variable conditionally defines the HAS_SAFE_MEMCPY symbol if +?S: the memcpy() routine can do overlapping copies. +?S:. +?C:HAS_SAFE_MEMCPY (SAFE_MEMCPY): +?C: This symbol, if defined, indicates that the memcpy routine is available +?C: to copy potentially overlapping memory blocks. Otherwise you should +?C: probably use memmove() or memcpy(). If neither is defined, roll your +?C: own version. +?C:. +?H:#$d_safemcpy HAS_SAFE_MEMCPY /**/ +?H:. +?F:!safemcpy +?LINT: set d_safemcpy +: can memcpy handle overlapping blocks? +?X: assume the worst +val="$undef" +case "$d_memcpy" in +"$define") + echo " " + echo "Checking to see if your memcpy() can do overlapping copies..." >&4 + $cat >foo.c <<EOCP +#$i_memory I_MEMORY +#$i_stdlib I_STDLIB +#$i_string I_STRING +#$i_unistd I_UNISTD +EOCP + $cat >>foo.c <<'EOCP' +#include <stdio.h> +#ifdef I_MEMORY +# include <memory.h> +#endif +#ifdef I_STDLIB +# include <stdlib.h> +#endif +#ifdef I_STRING +# include <string.h> +#else +# include <strings.h> +#endif +#ifdef I_UNISTD +# include <unistd.h> /* Needed for NetBSD */ +#endif +int main() +{ +char buf[128], abc[128]; +char *b; +int len; +int off; +int align; + +/* Copy "abcde..." string to char abc[] so that gcc doesn't + try to store the string in read-only memory. */ +memcpy(abc, "abcdefghijklmnopqrstuvwxyz0123456789", 36); + +for (align = 7; align >= 0; align--) { + for (len = 36; len; len--) { + b = buf+align; + memcpy(b, abc, len); + for (off = 1; off <= len; off++) { + memcpy(b+off, b, len); + memcpy(b, b+off, len); + if (memcmp(b, abc, len)) + exit(1); + } + } +} +exit(0); +} +EOCP + if $cc $optimize $ccflags $ldflags \ + -o safemcpy foo.c $libs >/dev/null 2>&1; then + if ./safemcpy 2>/dev/null; then + echo "Yes, it can." + val="$define" + else + echo "It can't, sorry." + case "$d_memmove" in + "$define") echo "But that's Ok since you have memmove()." ;; + esac + fi + else + echo "(I can't compile the test program, so we'll assume not...)" + case "$d_memmove" in + "$define") echo "But that's Ok since you have memmove()." ;; + esac + fi + ;; +esac +$rm -f foo.* safemcpy core +set d_safemcpy +eval $setvar + diff --git a/mcon/U/d_sanemcmp.U b/mcon/U/d_sanemcmp.U new file mode 100644 index 0000000..07d1f84 --- /dev/null +++ b/mcon/U/d_sanemcmp.U @@ -0,0 +1,88 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_sanemcmp.U,v $ +?RCS: Revision 3.0.1.1 1997/02/28 15:41:19 ram +?RCS: patch61: created +?RCS: +?RCS: +?MAKE:d_sanemcmp: cat d_memcmp +cc +optimize +ccflags +libs +ldflags rm \ + i_memory i_stdlib i_string i_unistd Oldconfig Setvar +?MAKE: -pick add $@ %< +?S:d_sanemcmp: +?S: This variable conditionally defines the HAS_SANE_MEMCMP symbol if +?S: the memcpy() routine is available and can be used to compare relative +?S: magnitudes of chars with their high bits set. +?S:. +?C:HAS_SANE_MEMCMP: +?C: This symbol, if defined, indicates that the memcmp routine is available +?C: and can be used to compare relative magnitudes of chars with their high +?C: bits set. If it is not defined, roll your own version. +?C:. +?H:#$d_sanemcmp HAS_SANE_MEMCMP /**/ +?H:. +?F:!sanemcmp +?LINT: set d_sanemcmp +: can memcmp be trusted to compare relative magnitude? +?X: assume the worst +val="$undef" +case "$d_memcmp" in +"$define") + echo " " + echo \ + "Checking to see if your memcmp() can compare relative magnitude..." >&4 + $cat >foo.c <<EOCP +#$i_memory I_MEMORY +#$i_stdlib I_STDLIB +#$i_string I_STRING +#$i_unistd I_UNISTD +EOCP + $cat >>foo.c <<'EOCP' +#include <stdio.h> +#ifdef I_MEMORY +# include <memory.h> +#endif +#ifdef I_STDLIB +# include <stdlib.h> +#endif +#ifdef I_STRING +# include <string.h> +#else +# include <strings.h> +#endif +#ifdef I_UNISTD +# include <unistd.h> /* Needed for NetBSD */ +#endif +int main() +{ +char a = -1; +char b = 0; +if ((a < b) && memcmp(&a, &b, 1) < 0) + exit(1); +exit(0); +} +EOCP + if $cc $optimize $ccflags $ldflags \ + -o sanemcmp foo.c $libs >/dev/null 2>&1; then + if ./sanemcmp 2>/dev/null; then + echo "Yes, it can." + val="$define" + else + echo "No, it can't (it uses signed chars)." + fi + else + echo "(I can't compile the test program, so we'll assume not...)" + fi + ;; +esac +$rm -f foo.* sanemcmp core +set d_sanemcmp +eval $setvar + diff --git a/mcon/U/d_sbrk.U b/mcon/U/d_sbrk.U new file mode 100644 index 0000000..3e3ab1f --- /dev/null +++ b/mcon/U/d_sbrk.U @@ -0,0 +1,31 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_sbrk.U,v $ +?RCS: Revision 3.0.1.1 1994/01/24 14:06:31 ram +?RCS: patch16: created +?RCS: +?MAKE:d_sbrk: Inlibc +?MAKE: -pick add $@ %< +?S:d_sbrk: +?S: This variable conditionally defines HAS_SBRK if sbrk() is +?S: available to add more core to the process. +?S:. +?C:HAS_SBRK: +?C: This symbol, if defined, indicates that the sbrk system call is +?C: available to add/relase core. Always true on Unix. +?C:. +?H:#$d_sbrk HAS_SBRK /**/ +?H:. +?LINT:set d_sbrk +: see if sbrk exists +set sbrk d_sbrk +eval $inlibc + diff --git a/mcon/U/d_scandir.U b/mcon/U/d_scandir.U new file mode 100644 index 0000000..5bffb17 --- /dev/null +++ b/mcon/U/d_scandir.U @@ -0,0 +1,31 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_scandir.U,v $ +?RCS: Revision 3.0.1.1 1994/01/24 14:06:35 ram +?RCS: patch16: created +?RCS: +?MAKE:d_scandir: Inlibc +?MAKE: -pick add $@ %< +?S:d_scandir: +?S: This variable conditionally defines HAS_SCANDIR if scandir() is +?S: available to scan a directory. +?S:. +?C:HAS_SCANDIR: +?C: This symbol, if defined, indicates that the scandir routine is +?C: available to scan a directory. +?C:. +?H:#$d_scandir HAS_SCANDIR /**/ +?H:. +?LINT:set d_scandir +: see if scandir exists +set scandir d_scandir +eval $inlibc + diff --git a/mcon/U/d_scannl.U b/mcon/U/d_scannl.U new file mode 100644 index 0000000..74c0a3f --- /dev/null +++ b/mcon/U/d_scannl.U @@ -0,0 +1,74 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_scannl.U,v $ +?RCS: Revision 3.0.1.2 1997/02/28 15:41:27 ram +?RCS: patch61: added ?F: metalint hint +?RCS: +?RCS: Revision 3.0.1.1 1995/07/25 13:59:12 ram +?RCS: patch56: made cc and ccflags optional dependencies +?RCS: +?RCS: Revision 3.0 1993/08/18 12:07:00 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?X: +?X: Does the scanf routine read "\n" corretly ? This is was not +?X: the case on AIX... +?X: +?MAKE:d_scannl: cat +cc +ccflags rm Setvar +?MAKE: -pick add $@ %< +?S:d_scannl: +?S: This variable conditionally defines SCAN_NL, which indicates +?S: wether the C library routines scanf() and friends can deal with +?S: a '\n' in the input correctly. They do most of the time. +?S:. +?C:SCAN_NL: +?C: This symbol is defined if the C library routines scanf() and friends +?C: can deal with a '\n' in the input correctly, so that you can say +?C: scanf("%d\n"); instead of scanf("%d"); getc(c); to handle the '\n'. +?C:. +?H:#$d_scannl SCAN_NL /* scanf("%d\n") works */ +?H:. +?F:!try +?LINT:set d_scannl +: does scanf handle "\n" correctly ? +echo " " +val="$define" +?X: I really want to say "\n" instead of '\n', becasue I am refering +?X: to the string given as argument to scanf(). +echo 'Let'"'"'s see if scanf() handles "\\n" correctly...' >&4 +$cat >try.c <<'EOCP' +int main() +{ + int i = 0, j = 0; + scanf("%d\n%d", &i, &j); + if (j != 3) + exit(1); + exit(0); +} +EOCP +if $cc $ccflags -o try try.c >/dev/null 2>&1; then + if ./try <<'EOD' +2 +3 +EOD + then + echo "Yes, it does." + else + echo "No, it doesn't." + val="$undef" + fi +else + echo "(I can't seem to compile the test program. Assuming it does.)" +fi +set d_scannl +eval $setvar +$rm -f try.* try + diff --git a/mcon/U/d_scorfl.U b/mcon/U/d_scorfl.U new file mode 100644 index 0000000..c42e1bf --- /dev/null +++ b/mcon/U/d_scorfl.U @@ -0,0 +1,58 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_scorfl.U,v $ +?RCS: Revision 3.0 1993/08/18 12:07:01 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_scorfl: cat Myread Oldconfig nametype Setvar +?MAKE: -pick add $@ %< +?S:d_scorfl: +?S: This variable conditionally defines the SCOREFULL symbol, which +?S: indicates to the C program that any scoreboard kept by the program +?S: should be kept on the basis of the user's full name as opposed to +?S: the user's login name. +?S:. +?C:SCOREFULL: +?C: This symbol, if defined, indicates that any scoreboard kept by the +?C: program should be kept on the basis of the user's full name as opposed +?C: to the user's login name. If the user can change his full name he +?C: can enter multiple scores if this is defined. +?C:. +?H:#$d_scorfl SCOREFULL /**/ +?H:. +?LINT:set d_scorfl +: see how they want the scoreboard kept +case "$d_scorfl" in +"$define") dflt=y ;; +*) dflt=n ;; +esac +case "$nametype" in +other) val="$undef" ;; +*) + $cat <<'EOM' + +The scoreboard can be kept with one score per login name, or one score per full +name. If users can change their full name, or if there is more than one person +on your system with the same full name, you should keep the score by login name +(the full name is still printed). + +EOM + rp='Do you want the scoreboard kept by full name?' + . ./myread + case "$ans" in + y*) val="$define" ;; + *) val="$undef" ;; + esac + ;; +esac +set d_scorfl +eval $setvar + diff --git a/mcon/U/d_select.U b/mcon/U/d_select.U new file mode 100644 index 0000000..86b2d73 --- /dev/null +++ b/mcon/U/d_select.U @@ -0,0 +1,33 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_select.U,v $ +?RCS: Revision 3.0 1993/08/18 12:07:02 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_select: Inlibc +?MAKE: -pick add $@ %< +?S:d_select: +?S: This variable conditionally defines HAS_SELECT if select() is +?S: available to select active file descriptors. A <sys/time.h> +?S: inclusion may be necessary for the timeout field. +?S:. +?C:HAS_SELECT: +?C: This symbol, if defined, indicates that the select routine is +?C: available to select active file descriptors. If the timeout field +?C: is used, <sys/time.h> may need to be included. +?C:. +?H:#$d_select HAS_SELECT /**/ +?H:. +?LINT:set d_select +: see if select exists +set select d_select +eval $inlibc + diff --git a/mcon/U/d_sem.U b/mcon/U/d_sem.U new file mode 100644 index 0000000..f00a820 --- /dev/null +++ b/mcon/U/d_sem.U @@ -0,0 +1,45 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_sem.U,v $ +?RCS: Revision 3.0 1993/08/18 12:07:03 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_sem: test d_semctl d_semget d_semop Setvar Findhdr +?MAKE: -pick add $@ %< +?S:d_sem: +?S: This variable conditionally defines the HAS_SEM symbol, which +?S: indicates that the entire sem*(2) library is present. +?S:. +?C:HAS_SEM: +?C: This symbol, if defined, indicates that the entire sem*(2) library is +?C: supported. +?C:. +?H:#$d_sem HAS_SEM /**/ +?H:. +?T:h_sem +?LINT:set d_sem +: see how much of the 'sem*(2)' library is present. +h_sem=true +echo " " +case "$d_semctl$d_semget$d_semop" in +*"$undef"*) h_sem=false;; +esac +: we could also check for sys/ipc.h ... +if $h_sem && $test `./findhdr sys/sem.h`; then + echo "You have the full sem*(2) library." >&4 + val="$define" +else + echo "You don't have the full sem*(2) library." >&4 + val="$undef" +fi +set d_sem +eval $setvar + diff --git a/mcon/U/d_semctl.U b/mcon/U/d_semctl.U new file mode 100644 index 0000000..4029c55 --- /dev/null +++ b/mcon/U/d_semctl.U @@ -0,0 +1,31 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_semctl.U,v $ +?RCS: Revision 3.0 1993/08/18 12:07:04 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_semctl: Inlibc +?MAKE: -pick add $@ %< +?S:d_semctl: +?S: This variable conditionally defines the HAS_SEMCTL symbol, which +?S: indicates to the C program that the semctl() routine is available. +?S:. +?C:HAS_SEMCTL: +?C: This symbol, if defined, indicates that the semctl() routine is +?C: available to perform semaphore control operations. +?C:. +?H:#$d_semctl HAS_SEMCTL /**/ +?H:. +?LINT:set d_semctl +: see if semctl exists +set semctl d_semctl +eval $inlibc + diff --git a/mcon/U/d_semget.U b/mcon/U/d_semget.U new file mode 100644 index 0000000..2d78fcb --- /dev/null +++ b/mcon/U/d_semget.U @@ -0,0 +1,31 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_semget.U,v $ +?RCS: Revision 3.0 1993/08/18 12:07:05 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_semget: Inlibc +?MAKE: -pick add $@ %< +?S:d_semget: +?S: This variable conditionally defines the HAS_SEMGET symbol, which +?S: indicates to the C program that the semget() routine is available. +?S:. +?C:HAS_SEMGET: +?C: This symbol, if defined, indicates that the semget() routine is +?C: available to get a set of semaphores. +?C:. +?H:#$d_semget HAS_SEMGET /**/ +?H:. +?LINT:set d_semget +: see if semget exists +set semget d_semget +eval $inlibc + diff --git a/mcon/U/d_semop.U b/mcon/U/d_semop.U new file mode 100644 index 0000000..ba05864 --- /dev/null +++ b/mcon/U/d_semop.U @@ -0,0 +1,31 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_semop.U,v $ +?RCS: Revision 3.0 1993/08/18 12:07:05 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_semop: Inlibc +?MAKE: -pick add $@ %< +?S:d_semop: +?S: This variable conditionally defines the HAS_SEMOP symbol, which +?S: indicates to the C program that the semop() routine is available. +?S:. +?C:HAS_SEMOP: +?C: This symbol, if defined, indicates that the semop() routine is +?C: available to execute semaphore operations. +?C:. +?H:#$d_semop HAS_SEMOP /**/ +?H:. +?LINT:set d_semop +: see if semop exists +set semop d_semop +eval $inlibc + diff --git a/mcon/U/d_setegid.U b/mcon/U/d_setegid.U new file mode 100644 index 0000000..f4c63a8 --- /dev/null +++ b/mcon/U/d_setegid.U @@ -0,0 +1,32 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_setegid.U,v $ +?RCS: Revision 3.0 1993/08/18 12:07:07 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_setegid: Inlibc +?MAKE: -pick add $@ %< +?S:d_setegid: +?S: This variable conditionally defines the HAS_SETEGID symbol, which +?S: indicates to the C program that the setegid() routine is available +?S: to change the effective gid of the current program. +?S:. +?C:HAS_SETEGID (SETEGID): +?C: This symbol, if defined, indicates that the setegid routine is available +?C: to change the effective gid of the current program. +?C:. +?H:#$d_setegid HAS_SETEGID /**/ +?H:. +?LINT:set d_setegid +: see if setegid exists +set setegid d_setegid +eval $inlibc + diff --git a/mcon/U/d_seteuid.U b/mcon/U/d_seteuid.U new file mode 100644 index 0000000..b1a34c3 --- /dev/null +++ b/mcon/U/d_seteuid.U @@ -0,0 +1,32 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_seteuid.U,v $ +?RCS: Revision 3.0 1993/08/18 12:07:08 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_seteuid: Inlibc +?MAKE: -pick add $@ %< +?S:d_seteuid: +?S: This variable conditionally defines the HAS_SETEUID symbol, which +?S: indicates to the C program that the seteuid() routine is available +?S: to change the effective uid of the current program. +?S:. +?C:HAS_SETEUID (SETEUID): +?C: This symbol, if defined, indicates that the seteuid routine is available +?C: to change the effective uid of the current program. +?C:. +?H:#$d_seteuid HAS_SETEUID /**/ +?H:. +?LINT:set d_seteuid +: see if seteuid exists +set seteuid d_seteuid +eval $inlibc + diff --git a/mcon/U/d_setgrps.U b/mcon/U/d_setgrps.U new file mode 100644 index 0000000..7fc874e --- /dev/null +++ b/mcon/U/d_setgrps.U @@ -0,0 +1,33 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_setgrps.U,v $ +?RCS: Revision 3.0 1993/08/18 12:06:08 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_setgrps: Inlibc +?MAKE: -pick add $@ %< +?S:d_setgrps: +?S: This variable conditionally defines the HAS_SETGROUPS symbol, which +?S: indicates to the C program that the setgroups() routine is available +?S: to set the list of process groups. +?S:. +?C:HAS_SETGROUPS: +?C: This symbol, if defined, indicates that the setgroups() routine is +?C: available to set the list of process groups. If unavailable, multiple +?C: groups are probably not supported. +?C:. +?H:#$d_setgrps HAS_SETGROUPS /**/ +?H:. +?LINT:set d_setgrps +: see if setgroups exists +set setgroups d_setgrps +eval $inlibc + diff --git a/mcon/U/d_setlnbuf.U b/mcon/U/d_setlnbuf.U new file mode 100644 index 0000000..dffe971 --- /dev/null +++ b/mcon/U/d_setlnbuf.U @@ -0,0 +1,36 @@ +?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: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu> +?RCS: +?RCS: $Log: d_setlnbuf.U,v $ +?RCS: Revision 3.0.1.1 1994/08/29 16:11:57 ram +?RCS: patch32: created by ADO +?RCS: +?MAKE:d_setlinebuf: Inlibc +?MAKE: -pick add $@ %< +?S:d_setlinebuf: +?S: This variable conditionally defines the HAS_SETLINEBUF symbol, which +?S: indicates to the C program that the setlinebuf() routine is available +?S: to change stderr or stdout from block-buffered or unbuffered to a +?S: line-buffered mode. +?S:. +?C:HAS_SETLINEBUF : +?C: This symbol, if defined, indicates that the setlinebuf routine is +?C: available to change stderr or stdout from block-buffered or unbuffered +?C: to a line-buffered mode. +?C:. +?H:#$d_setlinebuf HAS_SETLINEBUF /**/ +?H:. +?LINT:set d_setlinebuf +: see if setlinebuf exists +set setlinebuf d_setlinebuf +eval $inlibc + diff --git a/mcon/U/d_setlocale.U b/mcon/U/d_setlocale.U new file mode 100644 index 0000000..09228cb --- /dev/null +++ b/mcon/U/d_setlocale.U @@ -0,0 +1,33 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu> +?RCS: +?RCS: $Log: d_setlocale.U,v $ +?RCS: Revision 3.0.1.1 1994/06/20 06:57:51 ram +?RCS: patch30: created +?RCS: +?MAKE:d_setlocale: Inlibc +?MAKE: -pick add $@ %< +?S:d_setlocale: +?S: This variable conditionally defines HAS_SETLOCALE if setlocale() is +?S: available to handle locale-specific ctype implementations. +?S:. +?C:HAS_SETLOCALE: +?C: This symbol, if defined, indicates that the setlocale routine is +?C: available to handle locale-specific ctype implementations. +?C:. +?H:#$d_setlocale HAS_SETLOCALE /**/ +?H:. +?LINT:set d_setlocale +: see if setlocale exists +set setlocale d_setlocale +eval $inlibc + diff --git a/mcon/U/d_setpgid.U b/mcon/U/d_setpgid.U new file mode 100644 index 0000000..f34e9a3 --- /dev/null +++ b/mcon/U/d_setpgid.U @@ -0,0 +1,37 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_setpgid.U,v $ +?RCS: Revision 3.0.1.2 1997/02/28 15:41:49 ram +?RCS: patch61: reworded symbol comments +?RCS: +?RCS: Revision 3.0.1.1 1994/01/24 14:06:40 ram +?RCS: patch16: created +?RCS: +?RCS: Revision 3.0 1993/08/18 12:05:56 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_setpgid: Inlibc +?MAKE: -pick add $@ %< +?S:d_setpgid: +?S: This variable conditionally defines the HAS_SETPGID symbol if the +?S: setpgid(pid, gpid) function is available to set process group ID. +?S:. +?C:HAS_SETPGID: +?C: This symbol, if defined, indicates that the setpgid(pid, gpid) +?C: routine is available to set process group ID. +?C:. +?H:#$d_setpgid HAS_SETPGID /**/ +?H:. +?LINT:set d_setpgid +: see if setpgid exists +set setpgid d_setpgid +eval $inlibc + diff --git a/mcon/U/d_setpgrp.U b/mcon/U/d_setpgrp.U new file mode 100644 index 0000000..08716e4 --- /dev/null +++ b/mcon/U/d_setpgrp.U @@ -0,0 +1,116 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_setpgrp.U,v $ +?RCS: Revision 3.0.1.3 1997/02/28 15:44:16 ram +?RCS: patch61: obsoleted USE_BSDGRP in favor of USE_BSD_SETPGRP +?RCS: patch61: another unit now also defines a USE_BSD_GETPGRP +?RCS: patch61: fallback for test program failure improved +?RCS: +?RCS: Revision 3.0.1.2 1995/07/25 13:59:30 ram +?RCS: patch56: re-arranged compile line to include ldflags before objects +?RCS: +?RCS: Revision 3.0.1.1 1994/10/29 16:15:37 ram +?RCS: patch36: added 'ldflags' to the test compile line (ADO) +?RCS: patch36: call ./usg explicitely instead of relying on PATH +?RCS: +?RCS: Revision 3.0 1993/08/18 12:07:09 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_setpgrp d_bsdsetpgrp: cat rm +cc +libs +ccflags \ + +ldflags Inlibc Guess Setvar i_unistd +?MAKE: -pick add $@ %< +?S:d_setpgrp: +?S: This variable conditionally defines HAS_SETPGRP if setpgrp() is +?S: available to set the current process group. +?S:. +?S:d_bsdsetpgrp (d_bsdpgrp): +?S: This variable conditionally defines USE_BSD_SETPGRP if +?S: setpgrp needs two arguments whereas USG one needs none. +?S: See also d_setpgid for a POSIX interface. +?S:. +?C:HAS_SETPGRP (SETPGRP): +?C: This symbol, if defined, indicates that the setpgrp routine is +?C: available to set the current process group. +?C:. +?C:USE_BSD_SETPGRP (USE_BSDPGRP BSDPGRP): +?C: This symbol, if defined, indicates that setpgrp needs two +?C: arguments whereas USG one needs none. See also HAS_SETPGID +?C: for a POSIX interface. +?C:. +?H:#$d_setpgrp HAS_SETPGRP /**/ +?H:#$d_bsdsetpgrp USE_BSD_SETPGRP /**/ +?H:. +?F:!set.c !set +?T:xxx +?LINT:set d_setpgrp d_bsdsetpgrp +: see if setpgrp exists +set setpgrp d_setpgrp +eval $inlibc + +@if USE_BSD_SETPGRP || d_bsdsetpgrp +case "$d_setpgrp" in +"$define") + echo " " + echo "Checking to see which flavor of setpgrp is in use..." + $cat >set.c <<EOP +#$i_unistd I_UNISTD +#include <sys/types.h> +#ifdef I_UNISTD +# include <unistd.h> +#endif +int main() +{ + if (getuid() == 0) { + printf("(I see you are running Configure as super-user...)\n"); + setuid(1); + } +#ifdef TRY_BSD_PGRP + if (-1 == setpgrp(1, 1)) + exit(0); +#else + if (setpgrp() != -1) + exit(0); +#endif + exit(1); +} +EOP + if $cc -DTRY_BSD_PGRP $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then + echo 'You have to use setpgrp(pid,pgrp) instead of setpgrp().' >&4 + val="$define" + elif $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then + echo 'You have to use setpgrp() instead of setpgrp(pid,pgrp).' >&4 + val="$undef" + else + echo "(I can't seem to compile and run the test program.)" + if ./usg; then + xxx="a USG one, i.e. you use setpgrp()." + else + # SVR4 systems can appear rather BSD-ish. + case "$i_unistd" in + $undef) + xxx="a BSD one, i.e. you use setpgrp(pid,pgrp)." + val="$define" + ;; + $define) + xxx="probably a USG one, i.e. you use setpgrp()." + val="$undef" + ;; + esac + fi + echo "Assuming your setpgrp is $xxx" >&4 + fi + ;; +*) val="$undef";; +esac +set d_bsdsetpgrp +eval $setvar +$rm -f set set.c +@end diff --git a/mcon/U/d_setpgrp2.U b/mcon/U/d_setpgrp2.U new file mode 100644 index 0000000..665077d --- /dev/null +++ b/mcon/U/d_setpgrp2.U @@ -0,0 +1,32 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_setpgrp2.U,v $ +?RCS: Revision 3.0 1993/08/18 12:07:10 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_setpgrp2: Inlibc +?MAKE: -pick add $@ %< +?S:d_setpgrp2: +?S: This variable conditionally defines the HAS_SETPGRP2 symbol, which +?S: indicates to the C program that the setpgrp2() (as in DG/UX) routine +?S: is available to set the current process group. +?S:. +?C:HAS_SETPGRP2 (SETPGRP2): +?C: This symbol, if defined, indicates that the setpgrp2() (as in DG/UX) +?C: routine is available to set the current process group. +?C:. +?H:#$d_setpgrp2 HAS_SETPGRP2 /**/ +?H:. +?LINT:set d_setpgrp2 +: see if setpgrp2 exists +set setpgrp2 d_setpgrp2 +eval $inlibc + diff --git a/mcon/U/d_setprior.U b/mcon/U/d_setprior.U new file mode 100644 index 0000000..9f0ad79 --- /dev/null +++ b/mcon/U/d_setprior.U @@ -0,0 +1,31 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_setprior.U,v $ +?RCS: Revision 3.0 1993/08/18 12:07:11 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_setprior: Inlibc +?MAKE: -pick add $@ %< +?S:d_setprior: +?S: This variable conditionally defines HAS_SETPRIORITY if setpriority() +?S: is available to set a process's priority. +?S:. +?C:HAS_SETPRIORITY (SETPRIORITY): +?C: This symbol, if defined, indicates that the setpriority routine is +?C: available to set a process's priority. +?C:. +?H:#$d_setprior HAS_SETPRIORITY /**/ +?H:. +?LINT:set d_setprior +: see if setpriority exists +set setpriority d_setprior +eval $inlibc + diff --git a/mcon/U/d_setregid.U b/mcon/U/d_setregid.U new file mode 100644 index 0000000..642a006 --- /dev/null +++ b/mcon/U/d_setregid.U @@ -0,0 +1,46 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_setregid.U,v $ +?RCS: Revision 3.0 1993/08/18 12:07:12 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_setregid d_setresgid: Inlibc +?MAKE: -pick add $@ %< +?S:d_setregid: +?S: This variable conditionally defines HAS_SETREGID if setregid() is +?S: available to change the real and effective gid of the current +?S: process. +?S:. +?S:d_setresgid: +?S: This variable conditionally defines HAS_SETRESGID if setresgid() is +?S: available to change the real, effective and saved gid of the current +?S: process. +?S:. +?C:HAS_SETREGID (SETREGID): +?C: This symbol, if defined, indicates that the setregid routine is +?C: available to change the real and effective gid of the current +?C: process. +?C:. +?C:HAS_SETRESGID (SETRESGID): +?C: This symbol, if defined, indicates that the setresgid routine is +?C: available to change the real, effective and saved gid of the current +?C: process. +?C:. +?H:#$d_setregid HAS_SETREGID /**/ +?H:#$d_setresgid HAS_SETRESGID /**/ +?H:. +?LINT: set d_setregid d_setresgid +: see if setregid exists +set setregid d_setregid +eval $inlibc +set setresgid d_setresgid +eval $inlibc + diff --git a/mcon/U/d_setreuid.U b/mcon/U/d_setreuid.U new file mode 100644 index 0000000..2d829d6 --- /dev/null +++ b/mcon/U/d_setreuid.U @@ -0,0 +1,46 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_setreuid.U,v $ +?RCS: Revision 3.0 1993/08/18 12:07:13 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_setreuid d_setresuid: Inlibc +?MAKE: -pick add $@ %< +?S:d_setreuid: +?S: This variable conditionally defines HAS_SETREUID if setreuid() is +?S: available to change the real and effective uid of the current +?S: process. +?S:. +?S:d_setresuid: +?S: This variable conditionally defines HAS_SETREUID if setresuid() is +?S: available to change the real, effective and saved uid of the current +?S: process. +?S:. +?C:HAS_SETREUID (SETREUID): +?C: This symbol, if defined, indicates that the setreuid routine is +?C: available to change the real and effective uid of the current +?C: process. +?C:. +?C:HAS_SETRESUID (SETRESUID): +?C: This symbol, if defined, indicates that the setresuid routine is +?C: available to change the real, effective and saved uid of the current +?C: process. +?C:. +?H:#$d_setreuid HAS_SETREUID /**/ +?H:#$d_setresuid HAS_SETRESUID /**/ +?H:. +?LINT:set d_setreuid d_setresuid +: see if setreuid exists +set setreuid d_setreuid +eval $inlibc +set setresuid d_setresuid +eval $inlibc + diff --git a/mcon/U/d_setrgid.U b/mcon/U/d_setrgid.U new file mode 100644 index 0000000..04d1770 --- /dev/null +++ b/mcon/U/d_setrgid.U @@ -0,0 +1,32 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_setrgid.U,v $ +?RCS: Revision 3.0 1993/08/18 12:07:14 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_setrgid: Inlibc +?MAKE: -pick add $@ %< +?S:d_setrgid: +?S: This variable conditionally defines the HAS_SETRGID symbol, which +?S: indicates to the C program that the setrgid() routine is available +?S: to change the real gid of the current program. +?S:. +?C:HAS_SETRGID (SETRGID): +?C: This symbol, if defined, indicates that the setrgid routine is available +?C: to change the real gid of the current program. +?C:. +?H:#$d_setrgid HAS_SETRGID /**/ +?H:. +?LINT:set d_setrgid +: see if setrgid exists +set setrgid d_setrgid +eval $inlibc + diff --git a/mcon/U/d_setruid.U b/mcon/U/d_setruid.U new file mode 100644 index 0000000..900ca25 --- /dev/null +++ b/mcon/U/d_setruid.U @@ -0,0 +1,32 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_setruid.U,v $ +?RCS: Revision 3.0 1993/08/18 12:07:15 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_setruid: Inlibc +?MAKE: -pick add $@ %< +?S:d_setruid: +?S: This variable conditionally defines the HAS_SETRUID symbol, which +?S: indicates to the C program that the setruid() routine is available +?S: to change the real uid of the current program. +?S:. +?C:HAS_SETRUID (SETRUID): +?C: This symbol, if defined, indicates that the setruid routine is available +?C: to change the real uid of the current program. +?C:. +?H:#$d_setruid HAS_SETRUID /**/ +?H:. +?LINT:set d_setruid +: see if setruid exists +set setruid d_setruid +eval $inlibc + diff --git a/mcon/U/d_setsid.U b/mcon/U/d_setsid.U new file mode 100644 index 0000000..c9e4113 --- /dev/null +++ b/mcon/U/d_setsid.U @@ -0,0 +1,34 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_setsid.U,v $ +?RCS: Revision 3.0.1.1 1994/01/24 14:06:49 ram +?RCS: patch16: created +?RCS: +?RCS: Revision 3.0 1993/08/18 12:05:56 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_setsid: Inlibc +?MAKE: -pick add $@ %< +?S:d_setsid: +?S: This variable conditionally defines HAS_SETSID if setsid() is +?S: available to set the process group ID. +?S:. +?C:HAS_SETSID: +?C: This symbol, if defined, indicates that the setsid routine is +?C: available to set the process group ID. +?C:. +?H:#$d_setsid HAS_SETSID /**/ +?H:. +?LINT:set d_setsid +: see if setsid exists +set setsid d_setsid +eval $inlibc + diff --git a/mcon/U/d_sgndchr.U b/mcon/U/d_sgndchr.U new file mode 100644 index 0000000..08179c9 --- /dev/null +++ b/mcon/U/d_sgndchr.U @@ -0,0 +1,59 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_sgndchr.U,v $ +?RCS: Revision 3.0.1.2 1997/02/28 15:44:25 ram +?RCS: patch61: added a ?F: metalint hint +?RCS: +?RCS: Revision 3.0.1.1 1995/07/25 14:00:24 ram +?RCS: patch56: made cc and ccflags optional dependencies +?RCS: +?RCS: Revision 3.0 1993/08/18 12:07:16 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_sgndchr: cat rm +cc +ccflags Setvar +?MAKE: -pick add $@ %< +?S:d_sgndchr: +?S: This variable conditionally defines the SIGNEDCHAR symbol, which +?S: indicates to the C program that signed characters are available. +?S:. +?C:SIGNEDCHAR: +?C: This symbol, if defined, indicates that characters are a signed type. +?C: If not defined, things declared as signed characters (and that make +?C: use of negative values) should probably be declared as shorts instead. +?C:. +?H:#$d_sgndchr SIGNEDCHAR /**/ +?H:. +?F:!try +?LINT:set d_sgndchr +: check for signed chars +echo " " +echo "Checking to see if your C compiler can do signed chars..." >&4 +$cat >try.c <<'EOCP' +int main() +{ + char c = 0; + + c--; + exit(c >= 0); +} +EOCP +$cc $ccflags -o try try.c +if ./try; then + val="$define" + echo "It certainly can." +else + val="$undef" + echo "It can't. I'll have to make some things type short." +fi +set d_sgndchr +eval $setvar +$rm -f try* + diff --git a/mcon/U/d_shm.U b/mcon/U/d_shm.U new file mode 100644 index 0000000..eba4c56 --- /dev/null +++ b/mcon/U/d_shm.U @@ -0,0 +1,45 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_shm.U,v $ +?RCS: Revision 3.0 1993/08/18 12:07:17 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_shm: test d_shmctl d_shmget d_shmat d_shmdt Setvar Findhdr +?MAKE: -pick add $@ %< +?S:d_shm: +?S: This variable conditionally defines the HAS_SHM symbol, which +?S: indicates that the entire shm*(2) library is present. +?S:. +?C:HAS_SHM: +?C: This symbol, if defined, indicates that the entire shm*(2) library is +?C: supported. +?C:. +?H:#$d_shm HAS_SHM /**/ +?H:. +?T:h_shm +?LINT:set d_shm +: see how much of the 'shm*(2)' library is present. +h_shm=true +echo " " +case "$d_shmctl$d_shmget$d_shmat$d_shmdt" in +*"$undef"*) h_shm=false;; +esac +: we could also check for sys/ipc.h ... +if $h_shm && $test `./findhdr sys/shm.h`; then + echo "You have the full shm*(2) library." >&4 + val="$define" +else + echo "You don't have the full shm*(2) library." >&4 + val="$undef" +fi +set d_shm +eval $setvar + diff --git a/mcon/U/d_shmat.U b/mcon/U/d_shmat.U new file mode 100644 index 0000000..4646fc5 --- /dev/null +++ b/mcon/U/d_shmat.U @@ -0,0 +1,93 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_shmat.U,v $ +?RCS: Revision 3.0.1.3 1995/07/25 14:04:23 ram +?RCS: patch56: use findhdr to find <sys/shm.h>, to get the right one (ADO) +?RCS: +?RCS: Revision 3.0.1.2 1994/05/13 15:18:56 ram +?RCS: patch27: added new symbol HAS_SHMAT_PROTOTYPE (ADO) +?RCS: +?RCS: Revision 3.0.1.1 1994/05/06 14:54:18 ram +?RCS: patch23: new Shmat_t symbol to declare return type of shmat() +?RCS: +?RCS: Revision 3.0 1993/08/18 12:07:18 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_shmat shmattype d_shmatprototype: Inlibc cat +cc +ccflags \ + rm cppstdin cppflags cppminus Findhdr Setvar contains +?MAKE: -pick add $@ %< +?S:d_shmat: +?S: This variable conditionally defines the HAS_SHMAT symbol, which +?S: indicates to the C program that the shmat() routine is available. +?S:. +?S:shmattype: +?S: This symbol contains the type of pointer returned by shmat(). +?S: It can be 'void *' or 'char *'. +?S:. +?S:d_shmatprototype: +?S: This variable conditionally defines the HAS_SHMAT_PROTOTYPE +?S: symbol, which indicates that sys/shm.h has a prototype for +?S: shmat. +?S:. +?C:HAS_SHMAT: +?C: This symbol, if defined, indicates that the shmat() routine is +?C: available to attach a shared memory segment to the process space. +?C:. +?C:Shmat_t: +?C: This symbol holds the return type of the shmat() system call. +?C: Usually set to 'void *' or 'char *'. +?C:. +?C:HAS_SHMAT_PROTOTYPE: +?C: This symbol, if defined, indicates that the sys/shm.h includes +?C: a prototype for shmat(). Otherwise, it is up to the program to +?C: guess one. Shmat_t shmat _((int, Shmat_t, int)) is a good guess, +?C: but not always right so it should be emitted by the program only +?C: when HAS_SHMAT_PROTOTYPE is not defined to avoid conflicting defs. +?C:. +?H:#$d_shmat HAS_SHMAT /**/ +?H:#define Shmat_t $shmattype /**/ +?H:#$d_shmatprototype HAS_SHMAT_PROTOTYPE /**/ +?H:. +?LINT:set d_shmat d_shmatprototype +?T:xxx +: see if shmat exists +set shmat d_shmat +eval $inlibc +: see what shmat returns +case "$d_shmat" in +"$define") + $cat >shmat.c <<'END' +#include <sys/shm.h> +void *shmat(); +END + if $cc $ccflags -c shmat.c >/dev/null 2>&1; then + shmattype='void *' + else + shmattype='char *' + fi + echo "and it returns ($shmattype)." >&4 + : see if a prototype for shmat is available + xxx=`./findhdr sys/shm.h` + $cppstdin $cppflags $cppminus < $xxx > shmat.c 2>/dev/null + if $contains 'shmat.*(' shmat.c >/dev/null 2>&1; then + val="$define" + else + val="$undef" + fi + $rm -f shmat.[co] + ;; +*) + val="$undef" + ;; +esac +set d_shmatprototype +eval $setvar + diff --git a/mcon/U/d_shmctl.U b/mcon/U/d_shmctl.U new file mode 100644 index 0000000..fc7415e --- /dev/null +++ b/mcon/U/d_shmctl.U @@ -0,0 +1,31 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_shmctl.U,v $ +?RCS: Revision 3.0 1993/08/18 12:07:18 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_shmctl: Inlibc +?MAKE: -pick add $@ %< +?S:d_shmctl: +?S: This variable conditionally defines the HAS_SHMCTL symbol, which +?S: indicates to the C program that the shmctl() routine is available. +?S:. +?C:HAS_SHMCTL: +?C: This symbol, if defined, indicates that the shmctl() routine is +?C: available to perform shared memory control operations. +?C:. +?H:#$d_shmctl HAS_SHMCTL /**/ +?H:. +?LINT:set d_shmctl +: see if shmctl exists +set shmctl d_shmctl +eval $inlibc + diff --git a/mcon/U/d_shmdt.U b/mcon/U/d_shmdt.U new file mode 100644 index 0000000..aab2aa6 --- /dev/null +++ b/mcon/U/d_shmdt.U @@ -0,0 +1,31 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_shmdt.U,v $ +?RCS: Revision 3.0 1993/08/18 12:07:19 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_shmdt: Inlibc +?MAKE: -pick add $@ %< +?S:d_shmdt: +?S: This variable conditionally defines the HAS_SHMDT symbol, which +?S: indicates to the C program that the shmdt() routine is available. +?S:. +?C:HAS_SHMDT: +?C: This symbol, if defined, indicates that the shmdt() routine is +?C: available to detach a shared memory segment from the process space. +?C:. +?H:#$d_shmdt HAS_SHMDT /**/ +?H:. +?LINT:set d_shmdt +: see if shmdt exists +set shmdt d_shmdt +eval $inlibc + diff --git a/mcon/U/d_shmget.U b/mcon/U/d_shmget.U new file mode 100644 index 0000000..86359a0 --- /dev/null +++ b/mcon/U/d_shmget.U @@ -0,0 +1,31 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_shmget.U,v $ +?RCS: Revision 3.0 1993/08/18 12:07:20 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_shmget: Inlibc +?MAKE: -pick add $@ %< +?S:d_shmget: +?S: This variable conditionally defines the HAS_SHMGET symbol, which +?S: indicates to the C program that the shmget() routine is available. +?S:. +?C:HAS_SHMGET: +?C: This symbol, if defined, indicates that the shmget() routine is +?C: available to request a shared memory segment from the kernel. +?C:. +?H:#$d_shmget HAS_SHMGET /**/ +?H:. +?LINT:set d_shmget +: see if shmget exists +set shmget d_shmget +eval $inlibc + diff --git a/mcon/U/d_sigaction.U b/mcon/U/d_sigaction.U new file mode 100644 index 0000000..782f27e --- /dev/null +++ b/mcon/U/d_sigaction.U @@ -0,0 +1,61 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_sigaction.U,v $ +?RCS: Revision 3.0.1.1 1997/02/28 15:44:29 ram +?RCS: patch61: created +?RCS: +?RCS: +?MAKE:d_sigaction: Csym Setvar cat cc ccflags ldflags libs rm _o +?MAKE: -pick add $@ %< +?S:d_sigaction: +?S: This variable conditionally defines the HAS_SIGACTION symbol, which +?S: indicates that the Vr4 sigaction() routine is available. +?S:. +?C:HAS_SIGACTION: +?C: This symbol, if defined, indicates that Vr4's sigaction() routine +?C: is available. +?C:. +?H:#$d_sigaction HAS_SIGACTION /**/ +?H:. +?T:val +?LINT:set d_sigaction +: see if we have sigaction +echo " " +if set sigaction val -f d_sigaction; eval $csym; $val; then + echo 'sigaction() found.' >&4 + val="$define" +else + echo 'sigaction NOT found.' >&4 + val="$undef" +fi +?X: +?X: Solaris 2.5_x86 with SunWorks Pro C 3.0.1 doesn't have a complete +?X: sigaction structure if compiled with cc -Xc. This compile test +?X: will fail then. <doughera@lafcol.lafayette.edu> +?X: +$cat > set.c <<'EOP' +#include <stdio.h> +#include <sys/types.h> +#include <signal.h> +int main() +{ + struct sigaction act, oact; +} +EOP +if $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1; then + : +else + echo "But you don't seem to have a useable struct sigaction." >&4 + val="$undef" +fi +set d_sigaction; eval $setvar +$rm -f set set$_o set.c + diff --git a/mcon/U/d_sigblock.U b/mcon/U/d_sigblock.U new file mode 100644 index 0000000..15554b7 --- /dev/null +++ b/mcon/U/d_sigblock.U @@ -0,0 +1,31 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_sigblock.U,v $ +?RCS: Revision 3.0 1993/08/18 12:07:21 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_sigblock: Inlibc +?MAKE: -pick add $@ %< +?S:d_sigblock: +?S: This variable conditionally defines HAS_SIGBLOCK if sigblock() is +?S: available to block signal reception. +?S:. +?C:HAS_SIGBLOCK: +?C: This symbol, if defined, indicates that the sigblock routine is +?C: available to block signal reception. +?C:. +?H:#$d_sigblock HAS_SIGBLOCK /**/ +?H:. +?LINT:set d_sigblock +: see if sigblock exists +set sigblock d_sigblock +eval $inlibc + diff --git a/mcon/U/d_sighold.U b/mcon/U/d_sighold.U new file mode 100644 index 0000000..31dabaa --- /dev/null +++ b/mcon/U/d_sighold.U @@ -0,0 +1,31 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_sighold.U,v $ +?RCS: Revision 3.0 1993/08/18 12:07:21 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_sighold: Inlibc +?MAKE: -pick add $@ %< +?S:d_sighold: +?S: This variable conditionally defines HAS_SIGHOLD if sighold() is +?S: available to hold signals. +?S:. +?C:HAS_SIGHOLD: +?C: This symbol, if defined, indicates that the sighold routine is +?C: available to hold signals. +?C:. +?H:#$d_sighold HAS_SIGHOLD /**/ +?H:. +?LINT:set d_sighold +: see if sighold exists +set sighold d_sighold +eval $inlibc + diff --git a/mcon/U/d_siglist.U b/mcon/U/d_siglist.U new file mode 100644 index 0000000..6b24db8 --- /dev/null +++ b/mcon/U/d_siglist.U @@ -0,0 +1,39 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_siglist.U,v $ +?RCS: Revision 3.0 1993/08/18 12:07:22 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_siglist: Csym Setvar +?MAKE: -pick add $@ %< +?S:d_siglist: +?S: This variable conditionally defines HAS_SYS_SIGLIST if sys_siglist[] is +?S: available to translate signal numbers to strings. +?S:. +?C:HAS_SYS_SIGLIST (SYS_SIGLIST): +?C: This symbol, if defined, indicates that the sys_siglist array is +?C: available to translate signal numbers to strings. +?C:. +?H:#$d_siglist HAS_SYS_SIGLIST /**/ +?H:. +?LINT:set d_siglist +: see if sys_siglist[] exist +echo " " +if set sys_siglist val -a d_siglist; eval $csym; $val; then + echo "You have sys_siglist[] for signal description." >&4 + val="$define" +else + echo "You don't have sys_siglist[]." >&4 + val="$undef" +fi +set d_siglist +eval $setvar + diff --git a/mcon/U/d_sigsetjmp.U b/mcon/U/d_sigsetjmp.U new file mode 100644 index 0000000..427933f --- /dev/null +++ b/mcon/U/d_sigsetjmp.U @@ -0,0 +1,105 @@ +?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 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: You may distribute under the terms of either the GNU General Public +?RCS: License or the Artistic License, as specified in the README file. +?RCS: +?RCS: $Log: d_sigsetjmp.U,v $ +?RCS: Revision 3.0.1.1 1997/02/28 15:44:33 ram +?RCS: patch61: created +?RCS: +?MAKE:d_sigsetjmp: Setvar cat +cc +ccflags +ldflags libs rm +?MAKE: -pick add $@ %< +?S:d_sigsetjmp: +?S: This variable conditionally defines the HAS_SIGSETJMP symbol, +?S: which indicates that the sigsetjmp() routine is available to +?S: call setjmp() and optionally save the process's signal mask. +?S:. +?C:HAS_SIGSETJMP: +?C: This variable indicates to the C program that the sigsetjmp() +?C: routine is available to save the calling process's registers +?C: and stack environment for later use by siglongjmp(), and +?C: to optionally save the process's signal mask. See +?C: Sigjmp_buf, Sigsetjmp, and Siglongjmp. +?C:. +?C:Sigjmp_buf: +?C: This is the buffer type to be used with Sigsetjmp and Siglongjmp. +?C:. +?C:Sigsetjmp: +?C: This macro is used in the same way as sigsetjmp(), but will invoke +?C: traditional setjmp() if sigsetjmp isn't available. +?C: See HAS_SIGSETJMP. +?C:. +?C:Siglongjmp: +?C: This macro is used in the same way as siglongjmp(), but will invoke +?C: traditional longjmp() if siglongjmp isn't available. +?C: See HAS_SIGSETJMP. +?C:. +?H:?%<:#$d_sigsetjmp HAS_SIGSETJMP /**/ +?H:?%<:#ifdef HAS_SIGSETJMP +?H:?%<:#define Sigjmp_buf sigjmp_buf +?H:?%<:#define Sigsetjmp(buf,save_mask) sigsetjmp((buf),(save_mask)) +?H:?%<:#define Siglongjmp(buf,retval) siglongjmp((buf),(retval)) +?H:?%<:#else +?H:?%<:#define Sigjmp_buf jmp_buf +?H:?%<:#define Sigsetjmp(buf,save_mask) setjmp((buf)) +?H:?%<:#define Siglongjmp(buf,retval) longjmp((buf),(retval)) +?H:?%<:#endif +?H:. +?W:%<:Sigjmp_buf Sigsetjmp Siglongjmp +?F:!set +?LINT:set d_sigsetjmp +: see if sigsetjmp exists +?X: We can't check for these symbols with Inlibc because sigsetjmp +?X: is (sometimes? always?) a macro under GCC +echo " " +case "$d_sigsetjmp" in +'') + $cat >set.c <<'EOP' +#include <setjmp.h> +sigjmp_buf env; +int set = 1; +int main() +{ + if (sigsetjmp(env,1)) + exit(set); + set = 0; + siglongjmp(env, 1); + exit(1); +} +EOP + if $cc $ccflags $ldflags -o set set.c $libs > /dev/null 2>&1 ; then + if ./set >/dev/null 2>&1; then + echo "POSIX sigsetjmp found." >&4 + val="$define" + else + $cat >&4 <<EOM +Uh-Oh! You have POSIX sigsetjmp and siglongjmp, but they do not work properly!! +I'll ignore them. +EOM + val="$undef" + fi + else + echo "sigsetjmp not found." >&4 + val="$undef" + fi + ;; +*) val="$d_sigsetjmp" + case "$d_sigsetjmp" in + $define) echo "POSIX sigsetjmp found." >&4;; + $undef) echo "sigsetjmp not found." >&4;; + esac + ;; +esac +set d_sigsetjmp +eval $setvar +$rm -f set.c set + diff --git a/mcon/U/d_sigsetmk.U b/mcon/U/d_sigsetmk.U new file mode 100644 index 0000000..ff07e8d --- /dev/null +++ b/mcon/U/d_sigsetmk.U @@ -0,0 +1,41 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_sigsetmk.U,v $ +?RCS: Revision 3.0 1993/08/18 12:07:23 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_sigsetmk: Csym Setvar +?MAKE: -pick add $@ %< +?S:d_sigsetmk: +?S: This variable conditionally defines the HAS_SIGSETMASK symbol, which +?S: indicates to the C program that the sigsetmask() routine is available +?S: to set current signal mask. +?S:. +?C:HAS_SIGSETMASK (SIGSETMASK): +?C: This symbol, if defined, indicates that the sigsetmask() routine is +?C: available to set current signal mask. Otherwise, you should probably +?C: emulate this by using signal(), but fear race conditions... +?C:. +?H:#$d_sigsetmk HAS_SIGSETMASK /**/ +?H:. +?LINT:set d_sigsetmk +: see if sigsetmask exists +echo " " +if set sigsetmask val -f d_sigsetmk; eval $csym; $val; then + echo 'sigsetmask() found.' >&4 + val="$define" +else + echo "sigsetmask() not found -- We'll use signal()." >&4 + val="$undef" +fi +set d_sigsetmk +eval $setvar + diff --git a/mcon/U/d_sigvec.U b/mcon/U/d_sigvec.U new file mode 100644 index 0000000..cfff2f1 --- /dev/null +++ b/mcon/U/d_sigvec.U @@ -0,0 +1,79 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_sigvec.U,v $ +?RCS: Revision 3.0.1.1 1997/02/28 15:45:37 ram +?RCS: patch61: there is now a separate routine for sigaction() +?RCS: +?RCS: Revision 3.0 1993/08/18 12:07:24 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?X: d_sigvec.U, from d_ftime.U 1.0 +?X: +?MAKE:d_sigvec d_sigvectr d_sigintrp: Csym Inlibc Setvar +?MAKE: -pick add $@ %< +?S:d_sigvec: +?S: This variable conditionally defines the HAS_SIGVEC symbol, which indicates +?S: that BSD reliable signals are supported. +?S:. +?S:d_sigvectr: +?S: This variable conditionally defines the HAS_SIGVECTOR symbol, which +?S: indicates that the sigvec() routine is called sigvector() instead, for +?S: reasons known only to Hewlett-Packard. +?S:. +?S:d_sigintrp: +?S: This variable conditionally defines the HAS_SIGINTRP symbol, which +?S: indicates that the siginterrupt() routine is available. +?S:. +?C:HAS_SIGVEC (SIGVEC): +?C: This symbol, if defined, indicates that BSD reliable signals are +?C: supported. +?C:. +?C:HAS_SIGVECTOR (SIGVECTOR): +?C: This symbol, if defined, indicates that the sigvec() routine is called +?C: sigvector() instead, and that sigspace() is provided instead of +?C: sigstack(). This is probably only true for HP-UX. +?C:. +?C:HAS_SIGINTRP (SIGINTRP): +?C: This symbol, if defined, indicates that the siginterrupt() routine +?C: is available. +?C:. +?H:#$d_sigvec HAS_SIGVEC /**/ +?H:#$d_sigvectr HAS_SIGVECTOR /**/ +?H:#$d_sigintrp HAS_SIGINTRP /**/ +?H:. +?T:val +?LINT:set d_sigvec d_sigintrp +@if d_sigvectr || d_sigvec || HAS_SIGVEC || HAS_SIGVECTOR +: see if sigvector exists -- since sigvec will match the substring +echo " " +if set sigvector val -f d_sigvectr; eval $csym; $val; then + echo 'sigvector() found--you must be running HP-UX.' >&4 + val="$define"; set d_sigvectr; eval $setvar + val="$define"; set d_sigvec; eval $setvar +else +: try the original name + d_sigvectr="$undef" + if set sigvec val -f d_sigvec; eval $csym; $val; then + echo 'sigvec() found.' >&4 + val="$define"; set d_sigvec; eval $setvar + else + echo 'sigvec() not found--race conditions with signals may occur.' >&4 + val="$undef"; set d_sigvec; eval $setvar + fi +fi + +@end +@if d_sigintrp || HAS_SIGINTRP +: see if we have siginterrupt +set siginterrupt d_sigintrp +eval $inlibc + +@end diff --git a/mcon/U/d_sjis2jis.U b/mcon/U/d_sjis2jis.U new file mode 100644 index 0000000..e74eeb7 --- /dev/null +++ b/mcon/U/d_sjis2jis.U @@ -0,0 +1,32 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_sjis2jis.U,v $ +?RCS: Revision 3.0 1993/08/18 12:07:25 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_sjis2jis: Inlibc +?MAKE: -pick add $@ %< +?S:d_sjis2jis: +?S: This variable conditionally defines the HAS_SJIS2JIS symbol, which +?S: indicates to the C program that the sjis2jis() routine is available +?S: to convert SJIS to JIS. +?S:. +?C:HAS_SJIS2JIS: +?C: This symbol, if defined, indicates that the sjis2jis routine is +?C: available to convert SJIS to JIS. +?C:. +?H:#$d_sjis2jis HAS_SJIS2JIS /**/ +?H:. +?LINT:set d_sjis2jis +: see if sjis2jis exists +set sjis2jis d_sjis2jis +eval $inlibc + diff --git a/mcon/U/d_socket.U b/mcon/U/d_socket.U new file mode 100644 index 0000000..f7d59d4 --- /dev/null +++ b/mcon/U/d_socket.U @@ -0,0 +1,123 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_socket.U,v $ +?RCS: Revision 3.0.1.2 1997/02/28 15:46:00 ram +?RCS: patch61: replaced .a with $_a all over the place +?RCS: +?RCS: Revision 3.0.1.1 1994/01/24 14:08:04 ram +?RCS: patch16: can now safely declare private nm_extract in dependencies +?RCS: +?RCS: Revision 3.0 1993/08/18 12:07:26 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_socket d_oldsock d_sockpair socketlib sockethdr: contains libc \ + echo n c nm_opt nm_extract Inlibc Csym _a +?MAKE: -pick add $@ %< +?S:d_socket: +?S: This variable conditionally defines HAS_SOCKET, which indicates +?S: that the BSD socket interface is supported. +?S:. +?S:d_sockpair: +?S: This variable conditionally defines the HAS_SOCKETPAIR symbol, which +?S: indicates that the BSD socketpair() is supported. +?S:. +?S:d_oldsock: +?S: This variable conditionally defines the OLDSOCKET symbol, which +?S: indicates that the BSD socket interface is based on 4.1c and not 4.2. +?S:. +?S:socketlib: +?S: This variable has the names of any libraries needed for socket support. +?S:. +?S:sockethdr: +?S: This variable has any cpp -I flags needed for socket support. +?S:. +?C:HAS_SOCKET (SOCKET): +?C: This symbol, if defined, indicates that the BSD socket interface is +?C: supported. +?C:. +?C:HAS_SOCKETPAIR (SOCKETPAIR): +?C: This symbol, if defined, indicates that the BSD socketpair() call is +?C: supported. +?C:. +?C:USE_OLDSOCKET (OLDSOCKET): +?C: This symbol, if defined, indicates that the 4.1c BSD socket interface +?C: is supported instead of the 4.2/4.3 BSD socket interface. For instance, +?C: there is no setsockopt() call. +?C:. +?H:#$d_socket HAS_SOCKET /**/ +?H:#$d_sockpair HAS_SOCKETPAIR /**/ +?H:#$d_oldsock USE_OLDSOCKET /**/ +?H:. +?T:val +?LINT:use libc +?LINT:set d_sockpair +: see whether socket exists +socketlib='' +sockethdr='' +echo " " +$echo $n "Hmm... $c" >&4 +if set socket val -f d_socket; eval $csym; $val; then + echo "Looks like you have Berkeley networking support." >&4 + d_socket="$define" +?X: now check for advanced features + if set setsockopt val -f; eval $csym; $val; then + d_oldsock="$undef" + else + echo "...but it uses the old 4.1c interface, rather than 4.2" >&4 + d_oldsock="$define" + fi +else +?X: HP-UX, for one, puts all the socket stuff in socklib.o. Note that if we +?X: come here on HP-UX, then we must have used nm to get symbols, or we really +?X: don't have sockets anyway... + if $contains socklib libc.list >/dev/null 2>&1; then + echo "Looks like you have Berkeley networking support." >&4 + d_socket="$define" + : we will have to assume that it supports the 4.2 BSD interface + d_oldsock="$undef" + else + echo "You don't have Berkeley networking in libc$_a..." >&4 +?X: look for an optional networking library + if test -f /usr/lib/libnet$_a; then +?X: space between two '(' needed for ksh + ( (nm $nm_opt /usr/lib/libnet$_a | eval $nm_extract) || \ + ar t /usr/lib/libnet$_a) 2>/dev/null >> libc.list + if $contains socket libc.list >/dev/null 2>&1; then + echo "...but the Wollongong group seems to have hacked it in." >&4 + socketlib="-lnet" + sockethdr="-I/usr/netinclude" + d_socket="$define" +?X: now check for advanced features + if $contains setsockopt libc.list >/dev/null 2>&1; then + d_oldsock="$undef" + else + echo "...using the old 4.1c interface, rather than 4.2" >&4 + d_oldsock="$define" + fi + else + echo "or even in libnet$_a, which is peculiar." >&4 + d_socket="$undef" + d_oldsock="$undef" + fi + else + echo "or anywhere else I see." >&4 + d_socket="$undef" + d_oldsock="$undef" + fi + fi +fi + +@if HAS_SOCKETPAIR || d_sockpair +: see if socketpair exists +set socketpair d_sockpair +eval $inlibc + +@end diff --git a/mcon/U/d_speedopt.U b/mcon/U/d_speedopt.U new file mode 100644 index 0000000..4c2043c --- /dev/null +++ b/mcon/U/d_speedopt.U @@ -0,0 +1,62 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_speedopt.U,v $ +?RCS: Revision 3.0.1.1 1994/10/29 16:15:51 ram +?RCS: patch36: call ./Cppsym explicitely instead of relying on PATH +?RCS: +?RCS: Revision 3.0 1993/08/18 12:07:27 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_speedopt: Myread Cppsym Oldconfig cat models Setvar +?MAKE: -pick add $@ %< +?S:d_speedopt: +?S: This variable conditionally defines the SPEED_OVER_MEM symbol, which +?S: indicates to the C program that it can burn memory in order to save +?S: CPU time. +?S:. +?C:SPEED_OVER_MEM (SPEEDOVERMEM): +?C: This symbol, if defined, indicates that the program can use more +?C: memory in order to reduce CPU time. The symbol doesn't say whether +?C: we are more interested in saving text space or data space. +?C:. +?H:#$d_speedopt SPEED_OVER_MEM /**/ +?H:. +?LINT:set d_speedopt +: do we want speed at the expense of memory +$cat <<'EOM' + +I can try to optimize this package for either speed or memory. If you have +limited address space you may wish to optimize for memory. Otherwise you +should probably optimize for speed. + +EOM +case "$d_speedopt" in +'') if ./Cppsym $smallmach; then + case "$models" in + *large*|*huge*) dflt=speed;; + *) dflt=memory;; + esac + else + dflt=speed + fi + ;; +*define*) dflt=speed;; +*) dflt=memory;; +esac +rp="What to optimize for?" +. ./myread +case "$ans" in +mem*) val="$undef";; +*) val="$define";; +esac +set d_speedopt +eval $setvar + diff --git a/mcon/U/d_stat.U b/mcon/U/d_stat.U new file mode 100644 index 0000000..d669876 --- /dev/null +++ b/mcon/U/d_stat.U @@ -0,0 +1,31 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_stat.U,v $ +?RCS: Revision 3.0 1993/08/18 12:07:28 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_stat: Inlibc +?MAKE: -pick add $@ %< +?S:d_stat: +?S: This variable conditionally defines HAS_STAT if stat() is +?S: available to get file status. +?S:. +?C:HAS_STAT (STAT): +?C: This symbol, if defined, indicates that the stat routine is +?C: available to get file status. +?C:. +?H:#$d_stat HAS_STAT /**/ +?H:. +?LINT:set d_stat +: see if stat exists +set stat d_stat +eval $inlibc + diff --git a/mcon/U/d_statblks.U b/mcon/U/d_statblks.U new file mode 100644 index 0000000..9a22166 --- /dev/null +++ b/mcon/U/d_statblks.U @@ -0,0 +1,46 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_statblks.U,v $ +?RCS: Revision 3.0 1993/08/18 12:07:29 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_statblks: contains Setvar Findhdr +?MAKE: -pick add $@ %< +?S:d_statblks: +?S: This variable conditionally defines USE_STAT_BLOCKS if this system +?S: has a stat structure declaring st_blksize and st_blocks. +?S:. +?C:USE_STAT_BLOCKS (STATBLOCKS): +?C: This symbol is defined if this system has a stat structure declaring +?C: st_blksize and st_blocks. +?C:. +?H:#$d_statblks USE_STAT_BLOCKS /**/ +?H:. +?T:xxx +?LINT:set d_statblks +: see if stat knows about block sizes +echo " " +xxx=`./findhdr sys/stat.h` +if $contains 'st_blocks;' "$xxx" >/dev/null 2>&1 ; then + if $contains 'st_blksize;' "$xxx" >/dev/null 2>&1 ; then + echo "Your stat() knows about block sizes." >&4 + val="$define" + else + echo "Your stat() doesn't know about block sizes." >&4 + val="$undef" + fi +else + echo "Your stat() doesn't know about block sizes." >&4 + val="$undef" +fi +set d_statblks +eval $setvar + diff --git a/mcon/U/d_stdstdio.U b/mcon/U/d_stdstdio.U new file mode 100644 index 0000000..b04acbc --- /dev/null +++ b/mcon/U/d_stdstdio.U @@ -0,0 +1,325 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: Original Author: Tye McQueen <tye@metronet.com> +?RCS: +?RCS: $Log: d_stdstdio.U,v $ +?RCS: Revision 3.0.1.3 1997/02/28 15:46:32 ram +?RCS: patch61: merged with perl5's unit +?RCS: +?RCS: Revision 3.0.1.2 1995/07/25 14:06:54 ram +?RCS: patch56: typo fix on ?C: line for FILE_bufsiz +?RCS: patch56: fixed unbalanced parenthesis (ADO) +?RCS: patch56: check whether FILE_cnt and FILE_ptr can be assigned to (ADO) +?RCS: +?RCS: Revision 3.0.1.1 1995/05/12 12:12:11 ram +?RCS: patch54: complete rewrite by Tye McQueen to fit modern systems +?RCS: +?RCS: Revision 3.0 1993/08/18 12:07:31 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_stdstdio d_stdiobase stdio_ptr stdio_cnt stdio_base \ + stdio_bufsiz d_stdio_cnt_lval d_stdio_ptr_lval stdio_filbuf: cat \ + +cc +ccflags contains +ldflags +libs rm \ + Setvar Findhdr Oldconfig +?MAKE: -pick add $@ %< +?S:d_stdstdio: +?S: This variable conditionally defines USE_STDIO_PTR if this system +?S: has a FILE structure declaring usable _ptr and _cnt fields (or +?S: equivalent) in stdio.h. +?S:. +?S:stdio_ptr: +?S: This variable defines how, given a FILE pointer, fp, to access the +?S: _ptr field (or equivalent) of stdio.h's FILE structure. This will +?S: be used to define the macro FILE_ptr(fp). +?S:. +?S:d_stdio_ptr_lval: +?S: This variable conditionally defines STDIO_PTR_LVALUE if the +?S: FILE_ptr macro can be used as an lvalue. +?S:. +?S:stdio_cnt: +?S: This variable defines how, given a FILE pointer, fp, to access the +?S: _cnt field (or equivalent) of stdio.h's FILE structure. This will +?S: be used to define the macro FILE_cnt(fp). +?S:. +?S:d_stdio_cnt_lval: +?S: This variable conditionally defines STDIO_CNT_LVALUE if the +?S: FILE_cnt macro can be used as an lvalue. +?S:. +?S:stdio_filbuf: +?S: This variable defines how, given a FILE pointer, fp, to tell +?S: stdio to refill it's internal buffers (?). This will +?S: be used to define the macro FILE_filbuf(fp). +?S:. +?S:d_stdiobase: +?S: This variable conditionally defines USE_STDIO_BASE if this system +?S: has a FILE structure declaring a usable _base field (or equivalent) +?S: in stdio.h. +?S:. +?S:stdio_base: +?S: This variable defines how, given a FILE pointer, fp, to access the +?S: _base field (or equivalent) of stdio.h's FILE structure. This will +?S: be used to define the macro FILE_base(fp). +?S:. +?S:stdio_bufsiz: +?S: This variable defines how, given a FILE pointer, fp, to determine +?S: the number of bytes store in the I/O buffer pointer to by the +?S: _base field (or equivalent) of stdio.h's FILE structure. This will +?S: be used to define the macro FILE_bufsiz(fp). +?S:. +?C:USE_STDIO_PTR ~ d_stdstdio (USE_STD_STDIO STDSTDIO): +?C: This symbol is defined if the _ptr and _cnt fields (or similar) +?C: of the stdio FILE structure can be used to access the stdio buffer +?C: for a file handle. If this is defined, then the FILE_ptr(fp) +?C: and FILE_cnt(fp) macros will also be defined and should be used +?C: to access these fields. +?C:. +?C:FILE_ptr: +?C: This macro is used to access the _ptr field (or equivalent) of the +?C: FILE structure pointed to by its argument. This macro will always be +?C: defined if USE_STDIO_PTR is defined. +?C:. +?C:STDIO_PTR_LVALUE: +?C: This symbol is defined if the FILE_ptr macro can be used as an +?C: lvalue. +?C:. +?C:FILE_cnt: +?C: This macro is used to access the _cnt field (or equivalent) of the +?C: FILE structure pointed to by its argument. This macro will always be +?C: defined if USE_STDIO_PTR is defined. +?C:. +?C:STDIO_CNT_LVALUE: +?C: This symbol is defined if the FILE_cnt macro can be used as an +?C: lvalue. +?C:. +?C:FILE_filbuf: +?C: This macro is used to access the internal stdio _filbuf function +?C: (or equivalent), if STDIO_CNT_LVALUE and STDIO_PTR_LVALUE +?C: are defined. It is typically either _filbuf or __filbuf. +?C: This macro will only be defined if both STDIO_CNT_LVALUE and +?C: STDIO_PTR_LVALUE are defined. +?C:. +?H:?d_stdstdio:#$d_stdstdio USE_STDIO_PTR /**/ +?H:?d_stdstdio:#ifdef USE_STDIO_PTR +?H:#define FILE_ptr(fp) $stdio_ptr +?H:#$d_stdio_ptr_lval STDIO_PTR_LVALUE /**/ +?H:#define FILE_cnt(fp) $stdio_cnt +?H:#$d_stdio_cnt_lval STDIO_CNT_LVALUE /**/ +?H:?d_stdstdio:#if defined(STDIO_PTR_LVALUE) && defined(STDIO_CNT_LVALUE) +?H:#define FILE_filbuf(fp) $stdio_filbuf /**/ +?H:?d_stdstdio:#endif +?H:?d_stdstdio:#endif +?H:. +?W:d_stdstdio:FILE_ptr FILE_cnt FILE_filbuf +?C:USE_STDIO_BASE ~ d_stdiobase: +?C: This symbol is defined if the _base field (or similar) of the +?C: stdio FILE structure can be used to access the stdio buffer for +?C: a file handle. If this is defined, then the FILE_base(fp) macro +?C: will also be defined and should be used to access this field. +?C: Also, the FILE_bufsiz(fp) macro will be defined and should be used +?C: to determine the number of bytes in the buffer. USE_STDIO_BASE +?C: will never be defined unless USE_STDIO_PTR is. +?C:. +?C:FILE_base: +?C: This macro is used to access the _base field (or equivalent) of the +?C: FILE structure pointed to by its argument. This macro will always be +?C: defined if USE_STDIO_BASE is defined. +?C:. +?C:FILE_bufsiz: +?C: This macro is used to determine the number of bytes in the I/O +?C: buffer pointed to by _base field (or equivalent) of the FILE +?C: structure pointed to its argument. This macro will always be defined +?C: if USE_STDIO_BASE is defined. +?C:. +?H:?d_stdiobase:#$d_stdiobase USE_STDIO_BASE /**/ +?H:?d_stdiobase:#ifdef USE_STDIO_BASE +?H:#define FILE_base(fp) $stdio_base +?H:#define FILE_bufsiz(fp) $stdio_bufsiz +?H:?d_stdiobase:#endif +?H:. +?W:d_stdiobase:FILE_base FILE_bufsiz +?LINT:set d_stdstdio d_stdiobase +?T:ptr_lval cnt_lval filbuf xxx +?F:!try +: see if _ptr and _cnt from stdio act std +echo " " +if $contains '_IO_fpos_t' `./findhdr stdio.h` >/dev/null 2>&1 ; then + echo "(Looks like you have stdio.h from Linux.)" + case "$stdio_ptr" in + '') stdio_ptr='((fp)->_IO_read_ptr)' + ptr_lval=$define + ;; + *) ptr_lval=$d_stdio_ptr_lval;; + esac + case "$stdio_cnt" in + '') stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)' + cnt_lval=$undef + ;; + *) cnt_lval=$d_stdio_cnt_lval;; + esac + case "$stdio_base" in + '') stdio_base='((fp)->_IO_read_base)';; + esac + case "$stdio_bufsiz" in + '') stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)';; + esac +else + case "$stdio_ptr" in + '') stdio_ptr='((fp)->_ptr)' + ptr_lval=$define + ;; + *) ptr_lval=$d_stdio_ptr_lval;; + esac + case "$stdio_cnt" in + '') stdio_cnt='((fp)->_cnt)' + cnt_lval=$define + ;; + *) cnt_lval=$d_stdio_cnt_lval;; + esac + case "$stdio_base" in + '') stdio_base='((fp)->_base)';; + esac + case "$stdio_bufsiz" in + '') stdio_bufsiz='((fp)->_cnt + (fp)->_ptr - (fp)->_base)';; + esac +fi +: test whether _ptr and _cnt really work +echo "Checking how std your stdio is..." >&4 +$cat >try.c <<EOP +#include <stdio.h> +#define FILE_ptr(fp) $stdio_ptr +#define FILE_cnt(fp) $stdio_cnt +int main() { + FILE *fp = fopen("try.c", "r"); + char c = getc(fp); + if ( + 18 <= FILE_cnt(fp) && + strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0 + ) + exit(0); + exit(1); +} +EOP +val="$undef" +if $cc $ccflags $ldflags -o try try.c $libs >/dev/null 2>&1; then + if ./try; then + echo "Your stdio acts pretty std." + val="$define" + else + echo "Your stdio isn't very std." + fi +else + echo "Your stdio doesn't appear very std." +fi +$rm -f try.c try +set d_stdstdio +eval $setvar + +@if STDIO_PTR_LVALUE || d_stdio_ptr_lval +: Can _ptr be used as an lvalue? +?X: Only makes sense if we have a known stdio implementation. +case "$d_stdstdio$ptr_lval" in +$define$define) val=$define ;; +*) val=$undef ;; +esac +set d_stdio_ptr_lval +eval $setvar + +@end +@if STDIO_CNT_LVALUE || d_stdio_cnt_lval +: Can _cnt be used as an lvalue? +?X: Only makes sense if we have a known stdio implementation. +case "$d_stdstdio$cnt_lval" in +$define$define) val=$define ;; +*) val=$undef ;; +esac +set d_stdio_cnt_lval +eval $setvar + +@end +@if FILE_filbuf +: How to access the stdio _filbuf or __filbuf function. +: If this fails, check how the getc macro in stdio.h works. +case "${d_stdio_ptr_lval}${d_stdio_cnt_lval}" in +${define}${define}) + : Try hint value, if any, then _filbuf, __filbuf, _fill, then punt. + : _fill is for OS/2. + xxx='notok' + for filbuf in $stdio_filbuf '_filbuf(fp)' '__filbuf(fp) ' '_fill(fp)' ; do + $cat >try.c <<EOP +#include <stdio.h> +#define FILE_ptr(fp) $stdio_ptr +#define FILE_cnt(fp) $stdio_cnt +#define FILE_filbuf(fp) $filbuf +int main() { + FILE *fp = fopen("try.c", "r"); + int c; + c = getc(fp); + c = FILE_filbuf(fp); /* Just looking for linker errors.*/ + exit(0); +} +EOP + if $cc $ccflags $ldflags -o try try.c $libs >/dev/null 2>&1 && ./try; then + echo "Your stdio appears to use $filbuf" + stdio_filbuf="$filbuf" + xxx='ok' + break + else + echo "Hmm. $filbuf doesn't seem to work." + fi + $rm -f try.c try + done + case "$xxx" in + notok) echo "I can't figure out how to access _filbuf" + echo "I'll just have to work around it." + d_stdio_ptr_lval="$undef" + d_stdio_cnt_lval="$undef" + ;; + esac + ;; +esac +@end +@if d_stdiobase || USE_STDIO_BASE || FILE_base || FILE_bufsiz +: see if _base is also standard +val="$undef" +case "$d_stdstdio" in +$define) + $cat >try.c <<EOP +#include <stdio.h> +#define FILE_base(fp) $stdio_base +#define FILE_bufsiz(fp) $stdio_bufsiz +int main() { + FILE *fp = fopen("try.c", "r"); + char c = getc(fp); + if ( + 19 <= FILE_bufsiz(fp) && + strncmp(FILE_base(fp), "#include <stdio.h>\n", 19) == 0 + ) + exit(0); + exit(1); +} +EOP + if $cc $ccflags $ldflags -o try try.c $libs > /dev/null 2>&1; then + if ./try; then + echo "And its _base field acts std." + val="$define" + else + echo "But its _base field isn't std." + fi + else + echo "However, it seems to be lacking the _base field." + fi + $rm -f try.c try + ;; +esac +set d_stdiobase +eval $setvar + +@end diff --git a/mcon/U/d_strccmp.U b/mcon/U/d_strccmp.U new file mode 100644 index 0000000..0b36c24 --- /dev/null +++ b/mcon/U/d_strccmp.U @@ -0,0 +1,38 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_strccmp.U,v $ +?RCS: Revision 3.0.1.2 1994/05/06 14:54:34 ram +?RCS: patch23: fixed a typo (WED) +?RCS: +?RCS: Revision 3.0.1.1 1993/09/13 16:04:39 ram +?RCS: patch10: created (WAD) +?RCS: +?RCS: Revision 3.0 1993/08/18 12:06:24 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_strccmp: Inlibc +?MAKE: -pick add $@ %< +?S:d_strccmp: +?S: This variable conditionally defines the HAS_STRCASECMP symbol, which +?S: indicates to the C program that the strcasecmp() routine is available +?S: for case-insensitive string compares. +?S:. +?C:HAS_STRCASECMP: +?C: This symbol, if defined, indicates that the strcasecmp() routine is +?C: available for case-insensitive string compares. +?C:. +?H:#$d_strccmp HAS_STRCASECMP /**/ +?H:. +?LINT:set d_strccmp +: see if strcasecmp exists +set strcasecmp d_strccmp +eval $inlibc + diff --git a/mcon/U/d_strchr.U b/mcon/U/d_strchr.U new file mode 100644 index 0000000..ce28b6e --- /dev/null +++ b/mcon/U/d_strchr.U @@ -0,0 +1,95 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_strchr.U,v $ +?RCS: Revision 3.0.1.2 1993/10/16 13:49:20 ram +?RCS: patch12: added support for HAS_INDEX +?RCS: patch12: added magic for index() and rindex() +?RCS: +?RCS: Revision 3.0.1.1 1993/09/13 16:05:26 ram +?RCS: patch10: now only defines HAS_STRCHR, no macro remap of index (WAD) +?RCS: +?RCS: Revision 3.0 1993/08/18 12:07:32 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_strchr d_index: contains strings Setvar Myread Oldconfig Csym +?MAKE: -pick add $@ %< +?S:d_strchr: +?S: This variable conditionally defines HAS_STRCHR if strchr() and +?S: strrchr() are available for string searching. +?S:. +?S:d_index: +?S: This variable conditionally defines HAS_INDEX if index() and +?S: rindex() are available for string searching. +?S:. +?C:HAS_STRCHR: +?C: This symbol is defined to indicate that the strchr()/strrchr() +?C: functions are available for string searching. If not, try the +?C: index()/rindex() pair. +?C:. +?C:HAS_INDEX: +?C: This symbol is defined to indicate that the index()/rindex() +?C: functions are available for string searching. +?C:. +?H:#$d_strchr HAS_STRCHR /**/ +?H:#$d_index HAS_INDEX /**/ +?H:. +?M:index: HAS_INDEX +?M:#ifndef HAS_INDEX +?M:#ifndef index +?M:#define index strchr +?M:#endif +?M:#endif +?M:. +?M:rindex: HAS_INDEX +?M:#ifndef HAS_INDEX +?M:#ifndef rindex +?M:#define rindex strrchr +?M:#endif +?M:#endif +?M:. +?T:vali +?LINT:set d_strchr d_index +: index or strchr +echo " " +if set index val -f; eval $csym; $val; then + if set strchr val -f d_strchr; eval $csym; $val; then + if $contains strchr "$strings" >/dev/null 2>&1 ; then +?X: has index, strchr, and strchr in string header + val="$define" + vali="$undef" + echo "strchr() found." >&4 + else +?X: has index, strchr, and no strchr in string header + val="$undef" + vali="$define" + echo "index() found." >&4 + fi + else +?X: has only index, no strchr, string header is a moot point + val="$undef" + vali="$define" + echo "index() found." >&4 + fi +else + if set strchr val -f d_strchr; eval $csym; $val; then + val="$define" + vali="$undef" + echo "strchr() found." >&4 + else + echo "No index() or strchr() found!" >&4 + val="$undef" + vali="$undef" + fi +fi +set d_strchr; eval $setvar +val="$vali" +set d_index; eval $setvar + diff --git a/mcon/U/d_strcoll.U b/mcon/U/d_strcoll.U new file mode 100644 index 0000000..0ba2ba1 --- /dev/null +++ b/mcon/U/d_strcoll.U @@ -0,0 +1,33 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu> +?RCS: +?RCS: $Log: d_strcoll.U,v $ +?RCS: Revision 3.0.1.1 1994/08/29 16:12:01 ram +?RCS: patch32: created by ADO +?RCS: +?MAKE:d_strcoll: Inlibc +?MAKE: -pick add $@ %< +?S:d_strcoll: +?S: This variable conditionally defines HAS_STRCOLL if strcoll() is +?S: available to compare strings using collating information. +?S:. +?C:HAS_STRCOLL: +?C: This symbol, if defined, indicates that the strcoll routine is +?C: available to compare strings using collating information. +?C:. +?H:#$d_strcoll HAS_STRCOLL /**/ +?H:. +?LINT:set d_strcoll +: see if strcoll exists +set strcoll d_strcoll +eval $inlibc + diff --git a/mcon/U/d_strcspn.U b/mcon/U/d_strcspn.U new file mode 100644 index 0000000..04097ef --- /dev/null +++ b/mcon/U/d_strcspn.U @@ -0,0 +1,32 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_strcspn.U,v $ +?RCS: Revision 3.0 1993/08/18 12:07:33 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_strcspn: Inlibc +?MAKE: -pick add $@ %< +?S:d_strcspn: +?S: This variable conditionally defines the HAS_STRCSPN symbol, which +?S: indicates to the C program that the strcspn() routine is available +?S: to scan strings. +?S:. +?C:HAS_STRCSPN (STRCSPN): +?C: This symbol, if defined, indicates that the strcspn routine is +?C: available to scan strings. +?C:. +?H:#$d_strcspn HAS_STRCSPN /**/ +?H:. +?LINT:set d_strcspn +: see if strcspn exists +set strcspn d_strcspn +eval $inlibc + diff --git a/mcon/U/d_strctcpy.U b/mcon/U/d_strctcpy.U new file mode 100644 index 0000000..a44597e --- /dev/null +++ b/mcon/U/d_strctcpy.U @@ -0,0 +1,53 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_strctcpy.U,v $ +?RCS: Revision 3.0 1993/08/18 12:07:34 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_strctcpy: cat rm cc Setvar +?MAKE: -pick add $@ %< +?S:d_strctcpy: +?S: This variable conditionally defines the USE_STRUCT_COPY symbol, which +?S: indicates to the C program that this C compiler knows how to copy +?S: structures. +?S:. +?C:USE_STRUCT_COPY (STRUCTCOPY): +?C: This symbol, if defined, indicates that this C compiler knows how +?C: to copy structures. If undefined, you'll need to use a block copy +?C: routine of some sort instead. +?C:. +?H:#$d_strctcpy USE_STRUCT_COPY /**/ +?H:. +?LINT:set d_strctcpy +: check for structure copying +echo " " +echo "Checking to see if your C compiler can copy structs..." >&4 +$cat >try.c <<'EOCP' +int main() +{ + struct blurfl { + int dyick; + } foo, bar; + + foo = bar; +} +EOCP +if $cc -c try.c >/dev/null 2>&1 ; then + val="$define" + echo "Yup, it can." +else + val="$undef" + echo "Nope, it can't." +fi +set d_strctcpy +eval $setvar +$rm -f try.* + diff --git a/mcon/U/d_strdup.U b/mcon/U/d_strdup.U new file mode 100644 index 0000000..9a948a9 --- /dev/null +++ b/mcon/U/d_strdup.U @@ -0,0 +1,32 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_strdup.U,v $ +?RCS: Revision 3.0.1.1 1993/12/15 08:21:41 ram +?RCS: patch15: created +?RCS: +?MAKE:d_strdup: Inlibc +?MAKE: -pick add $@ %< +?S:d_strdup: +?S: This variable conditionally defines HAS_STRDUP if strdup() is +?S: available to duplicate strings in memory. +?S:. +?C:HAS_STRDUP: +?C: This symbol, if defined, indicates that the strdup routine is +?C: available to duplicate strings in memory. Otherwise, roll up +?C: your own... +?C:. +?H:#$d_strdup HAS_STRDUP /**/ +?H:. +?LINT:set d_strdup +: see if strdup exists +set strdup d_strdup +eval $inlibc + diff --git a/mcon/U/d_strerror.U b/mcon/U/d_strerror.U new file mode 100644 index 0000000..4949630 --- /dev/null +++ b/mcon/U/d_strerror.U @@ -0,0 +1,117 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_strerror.U,v $ +?RCS: Revision 3.0.1.3 1994/05/13 15:20:27 ram +?RCS: patch27: now uses new macro support for cleaner Strerror def +?RCS: +?RCS: Revision 3.0.1.2 1994/05/06 14:58:26 ram +?RCS: patch23: renamed strerror into Strerror to protect name space (ADO) +?RCS: +?RCS: Revision 3.0.1.1 1994/01/24 14:08:56 ram +?RCS: patch16: protected code looking for sys_errnolist[] with @if +?RCS: patch16: added default value for d_sysernlst +?RCS: +?RCS: Revision 3.0 1993/08/18 12:07:35 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_strerror d_syserrlst d_sysernlst d_strerrm: contains Csym Findhdr +?MAKE: -pick add $@ %< +?S:d_strerror: +?S: This variable conditionally defines HAS_STRERROR if strerror() is +?S: available to translate error numbers to strings. +?S:. +?S:d_syserrlst: +?S: This variable conditionally defines HAS_SYS_ERRLIST if sys_errlist[] is +?S: available to translate error numbers to strings. +?S:. +?S:d_sysernlst: +?S: This variable conditionally defines HAS_SYS_ERRNOLIST if sys_errnolist[] +?S: is available to translate error numbers to the symbolic name. +?S:. +?S:d_strerrm: +?S: This variable holds what Strerrr is defined as to translate an error +?S: code condition into an error message string. It could be 'strerror' +?S: or a more complex macro emulating strrror with sys_errlist[], or the +?S: "unknown" string when both strerror and sys_errlist are missing. +?S:. +?C:HAS_STRERROR (STRERROR): +?C: This symbol, if defined, indicates that the strerror routine is +?C: available to translate error numbers to strings. See the writeup +?C: of Strerror() in this file before you try to define your own. +?C:. +?C:HAS_SYS_ERRLIST (SYSERRLIST): +?C: This symbol, if defined, indicates that the sys_errlist array is +?C: available to translate error numbers to strings. The extern int +?C: sys_nerr gives the size of that table. +?C:. +?C:HAS_SYS_ERRNOLIST (SYSERRNOLIST): +?C: This symbol, if defined, indicates that the sys_errnolist array is +?C: available to translate an errno code into its symbolic name (e.g. +?C: ENOENT). The extern int sys_nerrno gives the size of that table. +?C:. +?C:Strerror: +?C: This preprocessor symbol is defined as a macro if strerror() is +?C: not available to translate error numbers to strings but sys_errlist[] +?C: array is there. +?C:. +?H:#$d_strerror HAS_STRERROR /**/ +?H:#$d_syserrlst HAS_SYS_ERRLIST /**/ +?H:#$d_sysernlst HAS_SYS_ERRNOLIST /**/ +?H:#define Strerror(e) $d_strerrm +?H:. +?D:d_sysernlst='' +?T:xxx val +: see if strerror and/or sys_errlist[] exist +echo " " +if set strerror val -f d_strerror; eval $csym; $val; then + echo 'strerror() found.' >&4 + d_strerror="$define" + d_strerrm='strerror(e)' + if set sys_errlist val -a d_syserrlst; eval $csym; $val; then + echo "(You also have sys_errlist[], so we could roll our own strerror.)" + d_syserrlst="$define" + else + echo "(Since you don't have sys_errlist[], sterror() is welcome.)" + d_syserrlst="$undef" + fi +elif xxx=`./findhdr string.h`; test "$xxx" || xxx=`./findhdr strings.h`; \ + $contains '#[ ]*define.*strerror' "$xxx" >/dev/null 2>&1; then + echo 'strerror() found in string header.' >&4 + d_strerror="$define" + d_strerrm='strerror(e)' + if set sys_errlist val -a d_syserrlst; eval $csym; $val; then + echo "(Most probably, strerror() uses sys_errlist[] for descriptions.)" + d_syserrlst="$define" + else + echo "(You don't appear to have any sys_errlist[], how can this be?)" + d_syserrlst="$undef" + fi +elif set sys_errlist val -a d_syserrlst; eval $csym; $val; then +echo "strerror() not found, but you have sys_errlist[] so we'll use that." >&4 + d_strerror="$undef" + d_syserrlst="$define" + d_strerrm='((e)<0||(e)>=sys_nerr?"unknown":sys_errlist[e])' +else + echo 'strerror() and sys_errlist[] NOT found.' >&4 + d_strerror="$undef" + d_syserrlst="$undef" + d_strerrm='"unknown"' +fi +@if d_sysernlst || HAS_SYS_ERRNOLIST +if set sys_errnolist val -a d_sysernlst; eval $csym; $val; then + echo "(Symbolic error codes can be fetched via the sys_errnolist[] array.)" + d_sysernlst="$define" +else + echo "(However, I can't extract the symbolic error code out of errno.)" + d_sysernlst="$undef" +fi +@end + diff --git a/mcon/U/d_strftime.U b/mcon/U/d_strftime.U new file mode 100644 index 0000000..c634105 --- /dev/null +++ b/mcon/U/d_strftime.U @@ -0,0 +1,31 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_strftime.U,v $ +?RCS: Revision 3.0 1993/08/18 12:07:36 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_strftime: Inlibc +?MAKE: -pick add $@ %< +?S:d_strftime: +?S: This variable conditionally defines HAS_STRFTIME if strftime() is +?S: available to format locale-specific times. +?S:. +?C:HAS_STRFTIME: +?C: This symbol, if defined, indicates that the strftime routine is +?C: available to format locale-specific times. +?C:. +?H:#$d_strftime HAS_STRFTIME /**/ +?H:. +?LINT:set d_strftime +: see if strftime exists +set strftime d_strftime +eval $inlibc + diff --git a/mcon/U/d_strstr.U b/mcon/U/d_strstr.U new file mode 100644 index 0000000..022359a --- /dev/null +++ b/mcon/U/d_strstr.U @@ -0,0 +1,31 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_strstr.U,v $ +?RCS: Revision 3.0 1993/08/18 12:07:37 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_strstr: Inlibc +?MAKE: -pick add $@ %< +?S:d_strstr: +?S: This variable conditionally defines HAS_STRSTR if strstr() is +?S: available to find substrings. +?S:. +?C:HAS_STRSTR (STRSTR): +?C: This symbol, if defined, indicates that the strstr routine is +?C: available to find substrings. +?C:. +?H:#$d_strstr HAS_STRSTR /**/ +?H:. +?LINT:set d_strstr +: see if strstr exists +set strstr d_strstr +eval $inlibc + diff --git a/mcon/U/d_strtod.U b/mcon/U/d_strtod.U new file mode 100644 index 0000000..13e6dee --- /dev/null +++ b/mcon/U/d_strtod.U @@ -0,0 +1,34 @@ +?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 Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_strtod.U,v $ +?RCS: Revision 3.0.1.1 1997/02/28 15:46:36 ram +?RCS: patch61: created +?RCS: +?RCS: +?MAKE:d_strtod: Inlibc +?MAKE: -pick add $@ %< +?S:d_strtod: +?S: This variable conditionally defines the HAS_STRTOD symbol, which +?S: indicates to the C program that the strtod() routine is available +?S: to provide better numeric string conversion than atof(). +?S:. +?C:HAS_STRTOD (STRTOD): +?C: This symbol, if defined, indicates that the strtod routine is +?C: available to provide better numeric string conversion than atof(). +?C:. +?H:#$d_strtod HAS_STRTOD /**/ +?H:. +?LINT:set d_strtod +: see if strtod exists +set strtod d_strtod +eval $inlibc + diff --git a/mcon/U/d_strtok.U b/mcon/U/d_strtok.U new file mode 100644 index 0000000..d6cf2f1 --- /dev/null +++ b/mcon/U/d_strtok.U @@ -0,0 +1,35 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_strtok.U,v $ +?RCS: Revision 3.0 1993/08/18 12:07:38 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?X: +?X: The strtok routine now appears to be a standard one, but it was +?X: missing in early BSD systems. +?X: +?MAKE:d_strtok: Inlibc +?MAKE: -pick add $@ %< +?S:d_strtok: +?S: This variable conditionally defines HAS_STRTOK if strtok() is +?S: available to scan strings for tokens. +?S:. +?C:HAS_STRTOK (STRTOK): +?C: This symbol, if defined, indicates that the strtok routine is +?C: available to scan strings for tokens. +?C:. +?H:#$d_strtok HAS_STRTOK /**/ +?H:. +?LINT:set d_strtok +: see if strtok exists +set strtok d_strtok +eval $inlibc + diff --git a/mcon/U/d_strtol.U b/mcon/U/d_strtol.U new file mode 100644 index 0000000..1d84274 --- /dev/null +++ b/mcon/U/d_strtol.U @@ -0,0 +1,32 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_strtol.U,v $ +?RCS: Revision 3.0 1993/08/18 12:07:39 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_strtol: Inlibc +?MAKE: -pick add $@ %< +?S:d_strtol: +?S: This variable conditionally defines the HAS_STRTOL symbol, which +?S: indicates to the C program that the strtol() routine is available +?S: to provide better numeric string conversion than atoi() and friends. +?S:. +?C:HAS_STRTOL (STRTOL): +?C: This symbol, if defined, indicates that the strtol routine is available +?C: to provide better numeric string conversion than atoi() and friends. +?C:. +?H:#$d_strtol HAS_STRTOL /**/ +?H:. +?LINT:set d_strtol +: see if strtol exists +set strtol d_strtol +eval $inlibc + diff --git a/mcon/U/d_strtoul.U b/mcon/U/d_strtoul.U new file mode 100644 index 0000000..54d79e4 --- /dev/null +++ b/mcon/U/d_strtoul.U @@ -0,0 +1,34 @@ +?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 Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_strtoul.U,v $ +?RCS: Revision 3.0.1.1 1997/02/28 15:46:43 ram +?RCS: patch61: created +?RCS: +?RCS: +?MAKE:d_strtoul: Inlibc +?MAKE: -pick add $@ %< +?S:d_strtoul: +?S: This variable conditionally defines the HAS_STRTOUL symbol, which +?S: indicates to the C program that the strtoul() routine is available +?S: to provide conversion of strings to unsigned long. +?S:. +?C:HAS_STRTOUL (STRTOUL): +?C: This symbol, if defined, indicates that the strtoul routine is +?C: available to provide conversion of strings to unsigned long. +?C:. +?H:#$d_strtoul HAS_STRTOUL /**/ +?H:. +?LINT:set d_strtoul +: see if strtoul exists +set strtoul d_strtoul +eval $inlibc + diff --git a/mcon/U/d_strxfrm.U b/mcon/U/d_strxfrm.U new file mode 100644 index 0000000..898a30f --- /dev/null +++ b/mcon/U/d_strxfrm.U @@ -0,0 +1,33 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu> +?RCS: +?RCS: $Log: d_strxfrm.U,v $ +?RCS: Revision 3.0.1.1 1994/08/29 16:12:04 ram +?RCS: patch32: created by ADO +?RCS: +?MAKE:d_strxfrm: Inlibc +?MAKE: -pick add $@ %< +?S:d_strxfrm: +?S: This variable conditionally defines HAS_STRXFRM if strxfrm() is +?S: available to transform strings. +?S:. +?C:HAS_STRXFRM: +?C: This symbol, if defined, indicates that the strxfrm() routine is +?C: available to transform strings. +?C:. +?H:#$d_strxfrm HAS_STRXFRM /**/ +?H:. +?LINT:set d_strxfrm +: see if strxfrm exists +set strxfrm d_strxfrm +eval $inlibc + diff --git a/mcon/U/d_su_chown.U b/mcon/U/d_su_chown.U new file mode 100644 index 0000000..b43993c --- /dev/null +++ b/mcon/U/d_su_chown.U @@ -0,0 +1,41 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_su_chown.U,v $ +?RCS: Revision 3.0 1993/08/18 12:07:40 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_su_chown: Csym Setvar +?MAKE: -pick add $@ %< +?S:d_su_chown (d_rootchown): +?S: This variable conditionally defines the SU_CHOWN symbol, which +?S: indicates to the C program that only root can chown() the owner +?S: of a file. +?S:. +?C:SU_CHOWN (ROOT_CHOWN): +?C: This symbol, if defined, indicates that the system allows only root +?C: can change the owner of a file with chown(). +?C:. +?H:#$d_su_chown SU_CHOWN /**/ +?H:. +?LINT:set d_su_chown +: see if 'chown()' is restricted. +: but not too hard, as it is late and I am tired. -- HMS +echo " " +if set setreuid val -f d_su_chown; eval $csym; $val; then + echo 'It looks like only root can chown() the owner of a file.' >&4 + val="$define" +else + echo 'It looks like root or the owner can chown() a file away.' >&4 + val="$undef" +fi +set d_su_chown +eval $setvar + diff --git a/mcon/U/d_symlink.U b/mcon/U/d_symlink.U new file mode 100644 index 0000000..f95c4da --- /dev/null +++ b/mcon/U/d_symlink.U @@ -0,0 +1,32 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_symlink.U,v $ +?RCS: Revision 3.0 1993/08/18 12:07:41 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_symlink: Inlibc +?MAKE: -pick add $@ %< +?S:d_symlink: +?S: This variable conditionally defines the HAS_SYMLINK symbol, which +?S: indicates to the C program that the symlink() routine is available +?S: to create symbolic links. +?S:. +?C:HAS_SYMLINK (SYMLINK): +?C: This symbol, if defined, indicates that the symlink routine is available +?C: to create symbolic links. +?C:. +?H:#$d_symlink HAS_SYMLINK /**/ +?H:. +?LINT:set d_symlink +: see if symlink exists +set symlink d_symlink +eval $inlibc + diff --git a/mcon/U/d_syscall.U b/mcon/U/d_syscall.U new file mode 100644 index 0000000..4620b04 --- /dev/null +++ b/mcon/U/d_syscall.U @@ -0,0 +1,31 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_syscall.U,v $ +?RCS: Revision 3.0 1993/08/18 12:07:42 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_syscall: Inlibc +?MAKE: -pick add $@ %< +?S:d_syscall: +?S: This variable conditionally defines HAS_SYSCALL if syscall() is +?S: available call arbitrary system calls. +?S:. +?C:HAS_SYSCALL (SYSCALL): +?C: This symbol, if defined, indicates that the syscall routine is +?C: available to call arbitrary system calls. If undefined, that's tough. +?C:. +?H:#$d_syscall HAS_SYSCALL /**/ +?H:. +?LINT:set d_syscall +: see if syscall exists +set syscall d_syscall +eval $inlibc + diff --git a/mcon/U/d_sysconf.U b/mcon/U/d_sysconf.U new file mode 100644 index 0000000..13c6177 --- /dev/null +++ b/mcon/U/d_sysconf.U @@ -0,0 +1,34 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu> +?RCS: +?RCS: $Log: d_sysconf.U,v $ +?RCS: Revision 3.0.1.1 1994/10/29 16:15:57 ram +?RCS: patch36: created by ADO +?RCS: +?MAKE:d_sysconf: Inlibc +?MAKE: -pick add $@ %< +?S:d_sysconf: +?S: This variable conditionally defines the HAS_SYSCONF symbol, which +?S: indicates to the C program that the sysconf() routine is available +?S: to determine system related limits and options. +?S:. +?C:HAS_SYSCONF: +?C: This symbol, if defined, indicates that sysconf() is available +?C: to determine system related limits and options. +?C:. +?H:#$d_sysconf HAS_SYSCONF /**/ +?H:. +?LINT:set d_sysconf +: see if sysconf exists +set sysconf d_sysconf +eval $inlibc + diff --git a/mcon/U/d_syslog.U b/mcon/U/d_syslog.U new file mode 100644 index 0000000..8245d48 --- /dev/null +++ b/mcon/U/d_syslog.U @@ -0,0 +1,44 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_syslog.U,v $ +?RCS: Revision 3.0.1.1 1997/02/28 15:46:56 ram +?RCS: patch61: replaced .o with $_o all over the place +?RCS: +?RCS: Revision 3.0 1993/08/18 12:07:43 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_syslog: test Csym Setvar Findhdr +?MAKE: -pick add $@ %< +?S:d_syslog: +?S: This variable conditionally defines the HAS_SYSLOG symbol, which +?S: indicates to the C program that syslog() exists on this system. +?S:. +?C:HAS_SYSLOG (LIBSYSLOG): +?C: This symbol, if defined, indicates that the program can rely on the +?C: system providing syslog(). Otherwise, the syslog code provided by +?C: the package should be used. +?C:. +?H:#$d_syslog HAS_SYSLOG /**/ +?H:. +?LINT:set d_syslog +: see if syslog is available +echo " " +if $test `./findhdr syslog.h` && \ + (set syslog val -f d_syslog; eval $csym; $val); then + echo "syslog() found." >&4 + val="$define" +else + echo "syslog() not found in your C library." >&4 + val="$undef" +fi +set d_syslog +eval $setvar + diff --git a/mcon/U/d_system.U b/mcon/U/d_system.U new file mode 100644 index 0000000..cd8737c --- /dev/null +++ b/mcon/U/d_system.U @@ -0,0 +1,31 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_system.U,v $ +?RCS: Revision 3.0 1993/08/18 12:07:44 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_system: Inlibc +?MAKE: -pick add $@ %< +?S:d_system: +?S: This variable conditionally defines HAS_SYSTEM if system() is +?S: available to issue a shell command. +?S:. +?C:HAS_SYSTEM (SYSTEM): +?C: This symbol, if defined, indicates that the system routine is +?C: available to issue a shell command. +?C:. +?H:#$d_system HAS_SYSTEM /**/ +?H:. +?LINT:set d_system +: see if system exists +set system d_system +eval $inlibc + diff --git a/mcon/U/d_table.U b/mcon/U/d_table.U new file mode 100644 index 0000000..1144456 --- /dev/null +++ b/mcon/U/d_table.U @@ -0,0 +1,34 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_table.U,v $ +?RCS: Revision 3.0.1.2 1993/11/10 17:34:14 ram +?RCS: patch14: wrongly mentionned an obsolete symbol +?RCS: +?RCS: Revision 3.0.1.1 1993/10/16 13:49:29 ram +?RCS: patch12: created +?RCS: +?MAKE:d_table: Inlibc +?MAKE: -pick add $@ %< +?S:d_table: +?S: This variable conditionally defines HAS_TABLE if table() is +?S: available to examine/update elements from a system table. +?S:. +?C:HAS_TABLE: +?C: This symbol, if defined, indicates that the OSF/1 table() system +?C: call is available to examine/update items from a system table. +?C:. +?H:#$d_table HAS_TABLE /**/ +?H:. +?LINT:set d_table +: see if table exists +set table d_table +eval $inlibc + diff --git a/mcon/U/d_tcgtpgrp.U b/mcon/U/d_tcgtpgrp.U new file mode 100644 index 0000000..61d0f59 --- /dev/null +++ b/mcon/U/d_tcgtpgrp.U @@ -0,0 +1,34 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu> +?RCS: +?RCS: $Log: d_tcgtpgrp.U,v $ +?RCS: Revision 3.0.1.1 1994/08/29 16:12:08 ram +?RCS: patch32: created by ADO +?RCS: +?MAKE:d_tcgetpgrp: Inlibc +?MAKE: -pick add $@ %< +?S:d_tcgetpgrp: +?S: This variable conditionally defines the HAS_TCGETPGRP symbol, which +?S: indicates to the C program that the tcgetpgrp() routine is available. +?S: to get foreground process group ID. +?S:. +?C:HAS_TCGETPGRP : +?C: This symbol, if defined, indicates that the tcgetpgrp routine is +?C: available to get foreground process group ID. +?C:. +?H:#$d_tcgetpgrp HAS_TCGETPGRP /**/ +?H:. +?LINT:set d_tcgetpgrp +: see if tcgetpgrp exists +set tcgetpgrp d_tcgetpgrp +eval $inlibc + diff --git a/mcon/U/d_tcstpgrp.U b/mcon/U/d_tcstpgrp.U new file mode 100644 index 0000000..ba7aa42 --- /dev/null +++ b/mcon/U/d_tcstpgrp.U @@ -0,0 +1,34 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu> +?RCS: +?RCS: $Log: d_tcstpgrp.U,v $ +?RCS: Revision 3.0.1.1 1994/08/29 16:12:11 ram +?RCS: patch32: created by ADO +?RCS: +?MAKE:d_tcsetpgrp: Inlibc +?MAKE: -pick add $@ %< +?S:d_tcsetpgrp: +?S: This variable conditionally defines the HAS_TCSETPGRP symbol, which +?S: indicates to the C program that the tcsetpgrp() routine is available +?S: to set foreground process group ID. +?S:. +?C:HAS_TCSETPGRP : +?C: This symbol, if defined, indicates that the tcsetpgrp routine is +?C: available to set foreground process group ID. +?C:. +?H:#$d_tcsetpgrp HAS_TCSETPGRP /**/ +?H:. +?LINT:set d_tcsetpgrp +: see if tcsetpgrp exists +set tcsetpgrp d_tcsetpgrp +eval $inlibc + diff --git a/mcon/U/d_time.U b/mcon/U/d_time.U new file mode 100644 index 0000000..8e5efa7 --- /dev/null +++ b/mcon/U/d_time.U @@ -0,0 +1,66 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_time.U,v $ +?RCS: Revision 3.0.1.2 1995/07/25 14:07:43 ram +?RCS: patch56: typo fix, sytem -> system +?RCS: +?RCS: Revision 3.0.1.1 1994/10/29 16:16:38 ram +?RCS: patch36: now uses new Typedef unit to compute type information (ADO) +?RCS: +?RCS: Revision 3.0 1993/08/18 12:07:45 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?X: Maybe <sys/types.h> should be included? +?X:INC: i_systypes +?MAKE:d_time timetype: Csym Setvar Findhdr Myread Typedef +?MAKE: -pick add $@ %< +?S:d_time: +?S: This variable conditionally defines the HAS_TIME symbol, which indicates +?S: that the time() routine exists. The time() routine is normaly +?S: provided on UNIX systems. +?S:. +?S:timetype: +?S: This variable holds the type returned by time(). It can be long, +?S: or time_t on BSD sites (in which case <sys/types.h> should be +?S: included). Anyway, the type Time_t should be used. +?S:. +?C:HAS_TIME (TIMER): +?C: This symbol, if defined, indicates that the time() routine exists. +?C:. +?C:Time_t (TIMETYPE): +?C: This symbol holds the type returned by time(). It can be long, +?C: or time_t on BSD sites (in which case <sys/types.h> should be +?C: included). +?C:. +?H:#$d_time HAS_TIME /**/ +?H:#define Time_t $timetype /* Time type */ +?H:. +?LINT:set d_time +: see if time exists +echo " " +if set time val -f d_time; eval $csym; $val; then + echo 'time() found.' >&4 + val="$define" + set time_t timetype long stdio.h sys/types.h + eval $typedef + dflt="$timetype" + echo " " + rp="What type is returned by time() on this system?" + . ./myread + timetype="$ans" +else + echo 'time() not found, hope that will do.' >&4 + val="$undef" + timetype='int'; +fi +set d_time +eval $setvar + diff --git a/mcon/U/d_times.U b/mcon/U/d_times.U new file mode 100644 index 0000000..c22c31f --- /dev/null +++ b/mcon/U/d_times.U @@ -0,0 +1,74 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_times.U,v $ +?RCS: Revision 3.0.1.2 1995/07/25 14:07:50 ram +?RCS: patch56: typo fix, sytem -> system +?RCS: +?RCS: Revision 3.0.1.1 1994/08/29 16:14:00 ram +?RCS: patch32: now uses new Typedef unit to compute type information +?RCS: +?RCS: Revision 3.0 1993/08/18 12:07:46 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?X: +?X: What is the type returned by times() ? +?X: +?X: Force inclusion of <sys/types.h> +?X:INC: i_systypes +?MAKE:d_times clocktype: Csym Myread Typedef i_systimes +?MAKE: -pick add $@ %< +?S:d_times: +?S: This variable conditionally defines the HAS_TIMES symbol, which indicates +?S: that the times() routine exists. The times() routine is normaly +?S: provided on UNIX systems. You may have to include <sys/times.h>. +?S:. +?S:clocktype: +?S: This variable holds the type returned by times(). It can be long, +?S: or clock_t on BSD sites (in which case <sys/types.h> should be +?S: included). +?S:. +?C:HAS_TIMES (TIMES): +?C: This symbol, if defined, indicates that the times() routine exists. +?C: Note that this became obsolete on some systems (SUNOS), which now +?C: use getrusage(). It may be necessary to include <sys/times.h>. +?C:. +?C:Clock_t (CLOCKTYPE): +?C: This symbol holds the type returned by times(). It can be long, +?C: or clock_t on BSD sites (in which case <sys/types.h> should be +?C: included). +?C:. +?H:#$d_times HAS_TIMES /**/ +?H:#define Clock_t $clocktype /* Clock time */ +?H:. +?T:val inc +: see if times exists +echo " " +if set times val -f d_times; eval $csym; $val; then + echo 'times() found.' >&4 + d_times="$define" + inc='' + case "$i_systimes" in + "$define") inc='sys/times.h';; + esac + set clock_t clocktype long stdio.h sys/types.h $inc + eval $typedef + dflt="$clocktype" + echo " " + rp="What type is returned by times() on this system?" + . ./myread + clocktype="$ans" +else + echo 'times() NOT found, hope that will do.' >&4 + d_times="$undef" +?X: The following is needed for typedef (won't like an empty variable) + clocktype='int' +fi + diff --git a/mcon/U/d_tminsys.U b/mcon/U/d_tminsys.U new file mode 100644 index 0000000..3c81057 --- /dev/null +++ b/mcon/U/d_tminsys.U @@ -0,0 +1,41 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_tminsys.U,v $ +?RCS: Revision 3.0 1993/08/18 12:07:47 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_tminsys: contains Setvar Findhdr +?MAKE: -pick add $@ %< +?S:d_tminsys: +?S: This variable conditionally defines TM_IN_SYS if this system +?S: declares "struct tm" in <sys/time.h> rather than <time.h>. +?S:. +?C:TM_IN_SYS (TMINSYS): +?C: This symbol is defined if this system declares "struct tm" in +?C: in <sys/time.h> rather than <time.h>. We can't just say +?C: -I/usr/include/sys because some systems have both time files, and +?C: the -I trick gets the wrong one. +?C:. +?H:#$d_tminsys TM_IN_SYS /**/ +?H:. +?LINT:set d_tminsys +: see if struct tm is defined in sys/time.h +echo " " +if $contains 'struct tm' `./findhdr time.h` >/dev/null 2>&1 ; then + echo "You have struct tm defined in <time.h> rather than <sys/time.h>." >&4 + val="$undef" +else + echo "You have struct tm defined in <sys/time.h> rather than <time.h>." >&4 + val="$define" +fi +set d_tminsys +eval $setvar + diff --git a/mcon/U/d_truncate.U b/mcon/U/d_truncate.U new file mode 100644 index 0000000..75ca730 --- /dev/null +++ b/mcon/U/d_truncate.U @@ -0,0 +1,31 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_truncate.U,v $ +?RCS: Revision 3.0 1993/08/18 12:07:48 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_truncate: Inlibc +?MAKE: -pick add $@ %< +?S:d_truncate: +?S: This variable conditionally defines HAS_TRUNCATE if truncate() is +?S: available to truncate files. +?S:. +?C:HAS_TRUNCATE (TRUNCATE): +?C: This symbol, if defined, indicates that the truncate routine is +?C: available to truncate files. +?C:. +?H:#$d_truncate HAS_TRUNCATE /**/ +?H:. +?LINT:set d_truncate +: see if truncate exists +set truncate d_truncate +eval $inlibc + diff --git a/mcon/U/d_tzmin.U b/mcon/U/d_tzmin.U new file mode 100644 index 0000000..23f4c9d --- /dev/null +++ b/mcon/U/d_tzmin.U @@ -0,0 +1,53 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_tzmin.U,v $ +?RCS: Revision 3.0.1.1 1994/10/29 16:16:58 ram +?RCS: patch36: call ./bsd explicitely instead of relying on PATH +?RCS: +?RCS: Revision 3.0 1993/08/18 12:07:49 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_tzmin: contains cppstdin cppminus timeincl rm Setvar Guess +?MAKE: -pick add $@ %< +?S:d_tzmin: +?S: This symbol conditionally defines TZ_MINUTESWEST if the system uses +?S: tz_minuteswest in time header instead of timezone. +?S:. +?C:TZ_MINUTESWEST: +?C: This symbol is defined if this system uses tz_minuteswest +?C: in time header instead of timezone. +?C: If not defined, you may have to use struct timeb and ftime() rather +?C: than the new gettimeofday() system call. +?C:. +?H:#$d_tzmin TZ_MINUTESWEST /**/ +?H:. +?LINT:set d_tzmin +: see if tz_minuteswest is defined in time header +echo " " +val="$undef" +$cppstdin $cppminus < $timeincl > try 2>&1 +if $contains 'tz_minuteswest' try >/dev/null 2>&1; then +echo "You have tz_minuteswest defined in $timeincl rather than timezone." >&4 + val="$define" +elif $contains 'timezone' try >/dev/null 2>&1; then +echo "You have timezone defined in $timeincl rather than tz_minuteswest." >&4 +else + echo "Your $timeincl file looks strange." >&4 +fi +if ./bsd; then + case "$d_tzmin" in + "$undef") echo "(Maybe your system is an USG one after all?)";; + esac +fi +set d_tzmin +eval $setvar +$rm -f try + diff --git a/mcon/U/d_tzname.U b/mcon/U/d_tzname.U new file mode 100644 index 0000000..4cc2302 --- /dev/null +++ b/mcon/U/d_tzname.U @@ -0,0 +1,42 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_tzname.U,v $ +?RCS: Revision 3.0.1.2 1994/08/29 16:14:43 ram +?RCS: patch32: forgot to set proper value in the val variable +?RCS: +?RCS: Revision 3.0.1.1 1994/06/20 06:57:55 ram +?RCS: patch30: created +?RCS: +?MAKE:d_tzname: Csym Setvar +?MAKE: -pick add $@ %< +?S:d_tzname: +?S: This variable conditionally defines HAS_TZNAME if tzname[] is +?S: available to access timezone names. +?S:. +?C:HAS_TZNAME: +?C: This symbol, if defined, indicates that the tzname[] array is +?C: available to access timezone names. +?C:. +?H:#$d_tzname HAS_TZNAME /**/ +?H:. +?LINT:set d_tzname +: see if tzname[] exists +echo " " +if set tzname val -a d_tzname; eval $csym; $val; then + val="$define" + echo 'tzname[] found.' >&4 +else + val="$undef" + echo 'tzname[] NOT found.' >&4 +fi +set d_tzname +eval $setvar + diff --git a/mcon/U/d_ulimit.U b/mcon/U/d_ulimit.U new file mode 100644 index 0000000..da2e54a --- /dev/null +++ b/mcon/U/d_ulimit.U @@ -0,0 +1,31 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_ulimit.U,v $ +?RCS: Revision 3.0 1993/08/18 12:07:51 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_ulimit: Inlibc +?MAKE: -pick add $@ %< +?S:d_ulimit: +?S: This variable conditionally defines HAS_ULIMIT if ulimit() is +?S: available to get the user limits. +?S:. +?C:HAS_ULIMIT (ULIMIT): +?C: This symbol, if defined, indicates that the ulimit system call is +?C: available to get the user limits. +?C:. +?H:#$d_ulimit HAS_ULIMIT /**/ +?H:. +?LINT:set d_ulimit +: see if ulimit exists +set ulimit d_ulimit +eval $inlibc + diff --git a/mcon/U/d_umask.U b/mcon/U/d_umask.U new file mode 100644 index 0000000..bee9d02 --- /dev/null +++ b/mcon/U/d_umask.U @@ -0,0 +1,34 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu> +?RCS: +?RCS: $Log: d_umask.U,v $ +?RCS: Revision 3.0.1.1 1994/08/29 16:14:50 ram +?RCS: patch32: created by ADO +?RCS: +?MAKE:d_umask: Inlibc +?MAKE: -pick add $@ %< +?S:d_umask: +?S: This variable conditionally defines the HAS_UMASK symbol, which +?S: indicates to the C program that the umask() routine is available. +?S: to set and get the value of the file creation mask. +?S:. +?C:HAS_UMASK : +?C: This symbol, if defined, indicates that the umask routine is +?C: available to set and get the value of the file creation mask. +?C:. +?H:#$d_umask HAS_UMASK /**/ +?H:. +?LINT:set d_umask +: see if umask exists +set umask d_umask +eval $inlibc + diff --git a/mcon/U/d_usendir.U b/mcon/U/d_usendir.U new file mode 100644 index 0000000..21484c3 --- /dev/null +++ b/mcon/U/d_usendir.U @@ -0,0 +1,79 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_usendir.U,v $ +?RCS: Revision 3.0.1.1 1997/02/28 15:47:34 ram +?RCS: patch61: replaced .a with $_a all over the place +?RCS: patch61: likewise for .o replaced by $_o +?RCS: +?RCS: Revision 3.0 1993/08/18 12:07:52 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_usendir i_ndir ndirlib: test Setvar Findhdr d_readdir _a +?MAKE: -pick add $@ %< +?S:d_usendir: +?S: This variable conditionally defines the EMULATE_NDIR symbol, which +?S: indicates to the C program that it should compile the ndir.c code +?S: provided with the package. +?S:. +?S:i_ndir (d_libndir): +?S: This variable conditionally defines the I_NDIR symbol, which +?S: indicates to the C program that it should include the system's +?S: version of ndir.h, rather than the one with this package. +?S:. +?S:ndirlib: +?S: The name of the library to include at linking stage to resolve ndir +?S: symbols. It is up to the makefile to use this value. +?S:. +?C:EMULATE_NDIR (USENDIR): +?C: This symbol, if defined, indicates that the program should compile +?C: the ndir.c code provided with the package. +?C:. +?C:I_NDIR (LIBNDIR): +?C: This symbol, if defined, indicates that the program should include the +?C: system's version of ndir.h, rather than the one with this package. +?C:. +?H:#$d_usendir EMULATE_NDIR /**/ +?H:#$i_ndir I_NDIR /**/ +?H:. +?T:val2 +?LINT: set d_usendir i_ndir +: see if there are directory access routines out there +echo " " +if $test `./findhdr ndir.h` && \ + ( $test -r /usr/lib/libndir$_a || $test -r /usr/local/lib/libndir$_a ); then + echo "Ndir library found." >&4 + if $test -r /usr/lib/libndir$_a; then + ndirlib='-lndir' + else + ndirlib="/usr/local/lib/libndir$_a" + fi + val2="$define" + val="$undef" +else + ndirlib='' + val2="$undef" + case "$d_readdir" in + "$define") + echo "No ndir library found, but you have readdir() so we'll use that." >&4 + val="$undef"; + ;; + *) + echo "No ndir library found." >&4 + val="$define" + ;; + esac +fi +set d_usendir +eval $setvar +val="$val2" +set i_ndir +eval $setvar + diff --git a/mcon/U/d_usleep.U b/mcon/U/d_usleep.U new file mode 100644 index 0000000..b6dee14 --- /dev/null +++ b/mcon/U/d_usleep.U @@ -0,0 +1,31 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_usleep.U,v $ +?RCS: Revision 3.0 1993/08/18 12:07:53 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_usleep: Inlibc +?MAKE: -pick add $@ %< +?S:d_usleep: +?S: This variable conditionally defines HAS_USLEEP if usleep() is +?S: available to do high granularity sleeps. +?S:. +?C:HAS_USLEEP (USLEEP): +?C: This symbol, if defined, indicates that the usleep routine is +?C: available to let the process sleep on a sub-second accuracy. +?C:. +?H:#$d_usleep HAS_USLEEP /**/ +?H:. +?LINT:set d_usleep +: see if usleep exists +set usleep d_usleep +eval $inlibc + diff --git a/mcon/U/d_uwait.U b/mcon/U/d_uwait.U new file mode 100644 index 0000000..e05eb8d --- /dev/null +++ b/mcon/U/d_uwait.U @@ -0,0 +1,123 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_uwait.U,v $ +?RCS: Revision 3.0.1.1 1994/01/24 14:10:49 ram +?RCS: patch16: added knowledge about wait3() +?RCS: patch16: revised 'union wait' look-up algorithm +?RCS: patch16: fixed make dependency line accordingly +?RCS: +?RCS: Revision 3.0 1993/08/18 12:07:54 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_uwait d_uwait3: cat contains cppstdin cppminus +cppflags rm \ + Setvar Findhdr +?MAKE: -pick add $@ %< +?S:d_uwait: +?S: This symbol conditionally defines UNION_WAIT which indicates to the C +?S: program that argument for the wait() system call should be declared as +?S: 'union wait status' instead of 'int status'. +?S:. +?S:d_uwait3: +?S: This symbol conditionally defines UNION_WAIT3 which indicates to the C +?S: program that the first argument for the wait3() system call should be +?S: declared as 'union wait status' instead of 'int status'. +?S:. +?C:UNION_WAIT: +?C: This symbol if defined indicates to the C program that the argument +?C: for the wait() system call should be declared as 'union wait status' +?C: instead of 'int status'. You probably need to include <sys/wait.h> +?C: in the former case (see I_SYSWAIT). +?C:. +?C:UNION_WAIT3: +?C: This symbol if defined indicates to the C program that the first argument +?C: for the wait3() system call should be declared as 'union wait status' +?C: instead of 'int status'. You probably need to include <sys/wait.h> +?C: in the former case (see I_SYSWAIT). It seems safe to assume that the +?C: same rule applies to the second parameter of wait4(). +?C:. +?H:#$d_uwait UNION_WAIT /**/ +?H:#$d_uwait3 UNION_WAIT3 /**/ +?H:. +?T:val2 flags f also +?LINT:set d_uwait d_uwait3 +: see if union wait is available +echo " " +?X: +?X: Unfortunately, we can't just grep <sys/wait.h> for "union wait" because +?X: some weird systems (did I hear HP-UX?) define union wait only when _BSD +?X: is defined. The same thing happens on OSF/1, who is pushing weirdness to +?X: its limits by requiring wait() to use (int *) but wait3() to use +?X: (union wait *), unless _BSD is defined and -lbsd is used, in which case +?X: wait() also expects (union wait *). Aaargh!!--RAM +?X: +set X $cppflags +shift +flags='' +also='' +for f in $*; do + case "$f" in + *NO_PROTO*) ;; + *) flags="$flags $f";; + esac +done +$cat `./findhdr sys/wait.h` /dev/null | \ + $cppstdin $flags $cppminus >wait.out 2>/dev/null +if $contains 'union.*wait.*{' wait.out >/dev/null 2>&1 ; then + echo "Looks like your <sys/wait.h> knows about 'union wait'..." >&4 + val="$define" +@if UNION_WAIT + also='also ' + if $contains 'extern.*wait[ ]*([ ]*int' wait.out >/dev/null 2>&1 + then + echo "But wait() seems to expect an 'int' pointer (POSIX way)." >&4 + val="$undef" + also='' + elif $contains 'extern.*wait[ ]*([ ]*union' wait.out >/dev/null 2>&1 + then + echo "And indeed wait() expects an 'union wait' pointer (BSD way)." >&4 + else + echo "So we'll use that for wait()." >&4 + fi +@end +@if UNION_WAIT3 || d_uwait3 + val2="$define" +@end +@if UNION_WAIT3 + if $contains 'extern.*wait3[ ]*([ ]*int' wait.out >/dev/null 2>&1 + then + echo "However wait3() seems to expect an 'int' pointer, weird." >&4 + val2="$undef" + elif $contains 'extern.*wait3[ ]*([ ]*union' wait.out >/dev/null 2>&1 + then + echo "And wait3() ${also}expects an 'union wait' pointer, fine." >&4 + else + echo "As expected, wait3() ${also}uses an 'union wait' pointer." >&4 + fi +@end +else + echo "No trace of 'union wait' in <sys/wait.h>..." >&4 + val="$undef" +@if UNION_WAIT && UNION_WAIT3 + echo "Both wait() and wait3() will use a plain 'int' pointer then." >&4 +@elsif UNION_WAIT + echo "Your wait() should be happy with a plain 'int' pointer." >&4 +@elsif UNION_WAIT3 + echo "Your wait3() should be happy with a plain 'int' pointer." >&4 +@end +fi +set d_uwait +eval $setvar +@if UNION_WAIT3 || d_uwait3 +val="$val2"; set d_uwait3 +eval $setvar +@end +$rm -f wait.out + diff --git a/mcon/U/d_vfork.U b/mcon/U/d_vfork.U new file mode 100644 index 0000000..9bd7089 --- /dev/null +++ b/mcon/U/d_vfork.U @@ -0,0 +1,91 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_vfork.U,v $ +?RCS: Revision 3.0.1.6 1994/08/29 16:18:21 ram +?RCS: patch32: set default to 'y' the first time +?RCS: +?RCS: Revision 3.0.1.5 1994/06/20 06:59:14 ram +?RCS: patch30: usevfork was not always properly set +?RCS: +?RCS: Revision 3.0.1.4 1994/05/13 15:20:56 ram +?RCS: patch27: modified to avoid spurious Whoa warnings (ADO) +?RCS: +?RCS: Revision 3.0.1.3 1994/05/06 14:59:09 ram +?RCS: patch23: now explicitely ask whether vfork() should be used (ADO) +?RCS: +?RCS: Revision 3.0.1.2 1993/10/16 13:49:39 ram +?RCS: patch12: added magic for vfork() +?RCS: +?RCS: Revision 3.0.1.1 1993/09/13 16:06:57 ram +?RCS: patch10: removed automatic remapping of vfork on fork (WAD) +?RCS: patch10: added compatibility code for older config.sh (WAD) +?RCS: +?RCS: Revision 3.0 1993/08/18 12:07:55 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_vfork usevfork: Inlibc Myread Oldconfig Setvar +?MAKE: -pick add $@ %< +?S:d_vfork: +?S: This variable conditionally defines the HAS_VFORK symbol, which +?S: indicates the vfork() routine is available. +?S:. +?S:usevfork: +?S: This variable is set to true when the user accepts to use vfork. +?S: It is set to false when no vfork is available or when the user +?S: explicitely requests not to use vfork. +?S:. +?C:HAS_VFORK (VFORK): +?C: This symbol, if defined, indicates that vfork() exists. +?C:. +?H:#$d_vfork HAS_VFORK /**/ +?H:. +?M:vfork: HAS_VFORK +?M:#ifndef HAS_VFORK +?M:#define vfork fork +?M:#endif +?M:. +?LINT:set d_vfork +: see if there is a vfork +val='' +set vfork val +eval $inlibc + +: Ok, but do we want to use it. vfork is reportedly unreliable in +: perl on Solaris 2.x, and probably elsewhere. +case "$val" in +$define) + echo " " + case "$usevfork" in + false) dflt='n';; + *) dflt='y';; + esac + rp="Some systems have problems with vfork(). Do you want to use it?" + . ./myread + case "$ans" in + y|Y) ;; + *) + echo "Ok, we won't use vfork()." + val="$undef" + ;; + esac + ;; +esac +?X: +?X: Only set it when final value is known to avoid spurious Whoas +?X: Then set usevfork accordingly to the current value, for next run +?X: +set d_vfork +eval $setvar +case "$d_vfork" in +$define) usevfork='true';; +*) usevfork='false';; +esac + diff --git a/mcon/U/d_voidsig.U b/mcon/U/d_voidsig.U new file mode 100644 index 0000000..d91dc51 --- /dev/null +++ b/mcon/U/d_voidsig.U @@ -0,0 +1,89 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_voidsig.U,v $ +?RCS: Revision 3.0.1.3 1995/05/12 12:12:46 ram +?RCS: patch54: made cppflags dependency optional +?RCS: +?RCS: Revision 3.0.1.2 1994/08/29 16:20:35 ram +?RCS: patch32: now sets signal_t only once d_voidsig is known (WED) +?RCS: +?RCS: Revision 3.0.1.1 1994/06/20 06:59:54 ram +?RCS: patch30: now properly sets signal_t when re-using previous value +?RCS: +?RCS: Revision 3.0 1993/08/18 12:07:56 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_voidsig signal_t: rm contains cppstdin cppminus +cppflags test Myread \ + Oldconfig Setvar Findhdr +?MAKE: -pick add $@ %< +?S:d_voidsig: +?S: This variable conditionally defines VOIDSIG if this system +?S: declares "void (*signal(...))()" in signal.h. The old way was to +?S: declare it as "int (*signal(...))()". +?S:. +?S:signal_t: +?S: This variable holds the type of the signal handler (void or int). +?S:. +?C:VOIDSIG: +?C: This symbol is defined if this system declares "void (*signal(...))()" in +?C: signal.h. The old way was to declare it as "int (*signal(...))()". It +?C: is up to the package author to declare things correctly based on the +?C: symbol. +?C:. +?C:Signal_t (SIGNAL_T): +?C: This symbol's value is either "void" or "int", corresponding to the +?C: appropriate return type of a signal handler. Thus, you can declare +?C: a signal handler using "Signal_t (*handler)()", and define the +?C: handler using "Signal_t handler(sig)". +?C:. +?H:#$d_voidsig VOIDSIG /**/ +?H:#define Signal_t $signal_t /* Signal handler's return type */ +?H:. +?T:xxx +?LINT:set d_voidsig +: see if signal is declared as pointer to function returning int or void +echo " " +xxx=`./findhdr signal.h` +$test "$xxx" && $cppstdin $cppminus $cppflags < $xxx >$$.tmp 2>/dev/null +if $contains 'int.*\*[ ]*signal' $$.tmp >/dev/null 2>&1 ; then + echo "You have int (*signal())() instead of void." >&4 + val="$undef" +elif $contains 'void.*\*[ ]*signal' $$.tmp >/dev/null 2>&1 ; then + echo "You have void (*signal())() instead of int." >&4 + val="$define" +elif $contains 'extern[ ]*[(\*]*signal' $$.tmp >/dev/null 2>&1 ; then + echo "You have int (*signal())() instead of void." >&4 + val="$undef" +else + case "$d_voidsig" in + '') + echo "I can't determine whether signal handler returns void or int..." >&4 + dflt=void + rp="What type does your signal handler return?" + . ./myread + case "$ans" in + v*) val="$define";; + *) val="$undef";; + esac;; + "$define") + echo "As you already told me, signal handler returns void." >&4;; + *) + echo "As you already told me, signal handler returns int." >&4;; + esac +fi +set d_voidsig +eval $setvar +case "$d_voidsig" in +"$define") signal_t="void";; +*) signal_t="int";; +esac +$rm -f $$.tmp + diff --git a/mcon/U/d_volatile.U b/mcon/U/d_volatile.U new file mode 100644 index 0000000..f94ca4f --- /dev/null +++ b/mcon/U/d_volatile.U @@ -0,0 +1,74 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_volatile.U,v $ +?RCS: Revision 3.0.1.2 1995/07/25 14:08:49 ram +?RCS: patch56: made cc and ccflags optional dependencies +?RCS: +?RCS: Revision 3.0.1.1 1993/09/09 11:49:51 ram +?RCS: patch9: volatile definition was swapped over with undef +?RCS: +?RCS: Revision 3.0 1993/08/18 12:07:57 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_volatile: cat +cc +ccflags rm Setvar +?MAKE: -pick add $@ %< +?S:d_volatile: +?S: This variable conditionally defines the HASVOLATILE symbol, which +?S: indicates to the C program that this C compiler knows about the +?S: volatile declaration. +?S:. +?C:HASVOLATILE ~ %<: +?C: This symbol, if defined, indicates that this C compiler knows about +?C: the volatile declaration. +?C:. +?H:?%<:#$d_volatile HASVOLATILE /**/ +?H:?%<:#ifndef HASVOLATILE +?H:?%<:#define volatile +?H:?%<:#endif +?H:. +?W:%<:volatile +?LINT:set d_volatile +?LINT:known volatile +: check for volatile keyword +echo " " +echo 'Checking to see if your C compiler knows about "volatile"...' >&4 +$cat >try.c <<'EOCP' +int main() +{ +?X: +?X: The following seven lines added by Bill Campbell <billc@sierra.com> +?X: detect that MIPS compilers do not handle volatile in all situations. +?X: + typedef struct _goo_struct goo_struct; + goo_struct * volatile goo = ((goo_struct *)0); + struct _goo_struct { + long long_int; + int reg_int; + char char_var; + }; + typedef unsigned short foo_t; + char *volatile foo; + volatile int bar; + volatile foo_t blech; + foo = foo; +} +EOCP +if $cc -c $ccflags try.c >/dev/null 2>&1 ; then + val="$define" + echo "Yup, it does." +else + val="$undef" + echo "Nope, it doesn't." +fi +set d_volatile +eval $setvar +$rm -f try.* + diff --git a/mcon/U/d_vprintf.U b/mcon/U/d_vprintf.U new file mode 100644 index 0000000..f74422d --- /dev/null +++ b/mcon/U/d_vprintf.U @@ -0,0 +1,81 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_vprintf.U,v $ +?RCS: Revision 3.0 1993/08/18 12:07:59 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_vprintf d_charvspr: Guess cat +cc +ccflags Csym Setvar +?MAKE: -pick add $@ %< +?S:d_vprintf: +?S: This variable conditionally defines the HAS_VPRINTF symbol, which +?S: indicates to the C program that the vprintf() routine is available +?S: to printf with a pointer to an argument list. +?S:. +?S:d_charvspr: +?S: This variable conditionally defines CHARVSPRINTF if this system +?S: has vsprintf returning type (char*). The trend seems to be to +?S: declare it as "int vsprintf()". +?S:. +?C:HAS_VPRINTF (VPRINTF): +?C: This symbol, if defined, indicates that the vprintf routine is available +?C: to printf with a pointer to an argument list. If unavailable, you +?C: may need to write your own, probably in terms of _doprnt(). +?C:. +?C:USE_CHAR_VSPRINTF (CHARVSPRINTF): +?C: This symbol is defined if this system has vsprintf() returning type +?C: (char*). The trend seems to be to declare it as "int vsprintf()". It +?C: is up to the package author to declare vsprintf correctly based on the +?C: symbol. +?C:. +?H:#$d_vprintf HAS_VPRINTF /**/ +?H:#$d_charvspr USE_CHAR_VSPRINTF /**/ +?H:. +?F:!vprintf !vprintf.c +?T:val2 +?LINT:set d_vprintf d_charvspr +: see if vprintf exists +echo " " +if set vprintf val -f d_vprintf; eval $csym; $val; then + echo 'vprintf() found.' >&4 + val="$define" + $cat >vprintf.c <<'EOF' +#include <varargs.h> + +int main() { xxx("foo"); } + +xxx(va_alist) +va_dcl +{ + va_list args; + char buf[10]; + + va_start(args); + exit((unsigned long)vsprintf(buf,"%s",args) > 10L); +} +EOF + if $cc $ccflags -o vprintf vprintf.c >/dev/null 2>&1 && ./vprintf; then + echo "Your vsprintf() returns (int)." >&4 + val2="$undef" + else + echo "Your vsprintf() returns (char*)." >&4 + val2="$define" + fi +else + echo 'vprintf() NOT found.' >&4 + val="$undef" + val2="$undef" +fi +set d_vprintf +eval $setvar +val=$val2 +set d_charvspr +eval $setvar + diff --git a/mcon/U/d_wait3.U b/mcon/U/d_wait3.U new file mode 100644 index 0000000..16a92b0 --- /dev/null +++ b/mcon/U/d_wait3.U @@ -0,0 +1,31 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_wait3.U,v $ +?RCS: Revision 3.0 1993/08/18 12:08:01 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_wait3: Inlibc +?MAKE: -pick add $@ %< +?S:d_wait3: +?S: This variable conditionally defines the HAS_WAIT3 symbol, which +?S: indicates to the C program that the wait3() subroutine exists. +?S:. +?C:HAS_WAIT3: +?C: This symbol, if defined, indicates that the wait3() subroutine +?C: exists. +?C:. +?H:#$d_wait3 HAS_WAIT3 /**/ +?H:. +?LINT:set d_wait3 +: see if 'wait3()' exists +set wait3 d_wait3 +eval $inlibc + diff --git a/mcon/U/d_wait4.U b/mcon/U/d_wait4.U new file mode 100644 index 0000000..eadb82b --- /dev/null +++ b/mcon/U/d_wait4.U @@ -0,0 +1,30 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_wait4.U,v $ +?RCS: Revision 3.0 1993/08/18 12:08:01 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_wait4: Inlibc +?MAKE: -pick add $@ %< +?S:d_wait4: +?S: This variable conditionally defines the HAS_WAIT4 symbol, which +?S: indicates the wait4() routine is available. +?S:. +?C:HAS_WAIT4 (WAIT4): +?C: This symbol, if defined, indicates that wait4() exists. +?C:. +?H:#$d_wait4 HAS_WAIT4 /**/ +?H:. +?LINT:set d_wait4 +: see if there is a wait4 +set wait4 d_wait4 +eval $inlibc + diff --git a/mcon/U/d_waitpid.U b/mcon/U/d_waitpid.U new file mode 100644 index 0000000..f0e4c53 --- /dev/null +++ b/mcon/U/d_waitpid.U @@ -0,0 +1,31 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_waitpid.U,v $ +?RCS: Revision 3.0 1993/08/18 12:08:02 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_waitpid: Inlibc +?MAKE: -pick add $@ %< +?S:d_waitpid: +?S: This variable conditionally defines HAS_WAITPID if waitpid() is +?S: available to wait for child process. +?S:. +?C:HAS_WAITPID (WAITPID): +?C: This symbol, if defined, indicates that the waitpid routine is +?C: available to wait for child process. +?C:. +?H:#$d_waitpid HAS_WAITPID /**/ +?H:. +?LINT:set d_waitpid +: see if waitpid exists +set waitpid d_waitpid +eval $inlibc + diff --git a/mcon/U/d_wcstombs.U b/mcon/U/d_wcstombs.U new file mode 100644 index 0000000..e68ff9d --- /dev/null +++ b/mcon/U/d_wcstombs.U @@ -0,0 +1,32 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_wcstombs.U,v $ +?RCS: Revision 3.0 1993/08/18 12:08:03 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_wcstombs: Inlibc +?MAKE: -pick add $@ %< +?S:d_wcstombs: +?S: This variable conditionally defines the HAS_WCSTOMBS symbol, which +?S: indicates to the C program that the wcstombs() routine is available +?S: to convert wide character strings to multibyte strings. +?S:. +?C:HAS_WCSTOMBS: +?C: This symbol, if defined, indicates that the wcstombs routine is +?C: available to convert wide character strings to multibyte strings. +?C:. +?H:#$d_wcstombs HAS_WCSTOMBS /**/ +?H:. +?LINT:set d_wcstombs +: see if wcstombs exists +set wcstombs d_wcstombs +eval $inlibc + diff --git a/mcon/U/d_wctomb.U b/mcon/U/d_wctomb.U new file mode 100644 index 0000000..41724ab --- /dev/null +++ b/mcon/U/d_wctomb.U @@ -0,0 +1,34 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu> +?RCS: +?RCS: $Log: d_wctomb.U,v $ +?RCS: Revision 3.0.1.1 1994/08/29 16:20:43 ram +?RCS: patch32: created by ADO +?RCS: +?MAKE:d_wctomb: Inlibc +?MAKE: -pick add $@ %< +?S:d_wctomb: +?S: This variable conditionally defines the HAS_WCTOMB symbol, which +?S: indicates to the C program that the wctomb() routine is available +?S: to convert a wide character to a multibyte. +?S:. +?C:HAS_WCTOMB (WCTOMB): +?C: This symbol, if defined, indicates that the wctomb routine is available +?C: to covert a wide character to a multibyte. +?C:. +?H:#$d_wctomb HAS_WCTOMB /**/ +?H:. +?LINT:set d_wctomb +: see if wctomb exists +set wctomb d_wctomb +eval $inlibc + diff --git a/mcon/U/d_wifstat.U b/mcon/U/d_wifstat.U new file mode 100644 index 0000000..c78684e --- /dev/null +++ b/mcon/U/d_wifstat.U @@ -0,0 +1,87 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_wifstat.U,v $ +?RCS: Revision 3.0.1.3 1997/02/28 15:47:43 ram +?RCS: patch61: added a ?F: metalint hint +?RCS: +?RCS: Revision 3.0.1.2 1995/07/25 14:09:10 ram +?RCS: patch56: re-arranged compile line to include ldflags before objects +?RCS: +?RCS: Revision 3.0.1.1 1995/03/21 08:47:46 ram +?RCS: patch52: created +?RCS: +?MAKE:d_wifstat: d_uwait +cc +ccflags +ldflags +libs Oldconfig cat rm +?MAKE: -pick add $@ %< +?S:d_wifstat: +?S: This symbol conditionally defines USE_WIFSTAT if the C program can +?S: safely use the WIFxxx macros with the kind of wait() parameter +?S: declared in the program (see UNION_WAIT), or if it can't. Should +?S: only matter on HP-UX, where the macros are incorrectly written and +?S: therefore cause programs using them with an 'union wait' variable +?S: to not compile properly. +?S:. +?C:USE_WIFSTAT: +?C: This symbol, if defined, indicates to the C program that the argument +?C: for the WIFxxx set of macros such as WIFSIGNALED or WIFEXITED can +?C: be of the same kind as the one used to hold the wait() status. Should +?C: only matter on HP-UX, where the macros are incorrectly written and +?C: therefore cause programs using them with an 'union wait' variable +?C: to not compile properly. See also UNION_WAIT. +?C:. +?H:#$d_wifstat USE_WIFSTAT /**/ +?H:. +?T:type +?F:!foo +: see if we can use WIFxxx macros +echo " " +case "$d_wifstat" in +"$define") echo "As before, you can safely use WIFEXITED and friends!" >&4;; +"$undef") echo "You still can't use WIFEXITED and friends!" >&4;; +*) + echo "Let's see whether you can use the WIFEXITED(status) macro and its" + case "$d_uwait" in + "$define") type='union wait';; + *) type='int';; + esac + echo "friends with status declared as '$type status'..." + $cat >foo.c <<EOCP +#include <sys/types.h> +#include <sys/wait.h> + +int main() +{ + $type status; + int e = 0; + +#ifdef WIFEXITED + if (WIFEXITED(status)) + printf("\n"); + exit(0); +#else + exit(2); +#endif +} +EOCP + d_wifstat="$undef" + if $cc $ccflags $ldflags -o foo foo.c $libs >/dev/null 2>&1; then + if ./foo >/dev/null; then + echo "Great! Looks like we can use the WIFxxx macros." >&4 + d_wifstat="$define" + else + echo "You don't seem to have WIFxxx macros, but that's ok." >&4 + fi + else + echo "Apparently you can't use WIFxxx macros properly." >&4 + fi + $rm -f foo.* foo core + ;; +esac + diff --git a/mcon/U/d_xdrs.U b/mcon/U/d_xdrs.U new file mode 100644 index 0000000..cef7c0e --- /dev/null +++ b/mcon/U/d_xdrs.U @@ -0,0 +1,42 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_xdrs.U,v $ +?RCS: Revision 3.0 1993/08/18 12:08:04 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_xdrs: cat Csym Setvar +?MAKE: -pick add $@ %< +?S:d_xdrs: +?S: This symbol conditionally defines HAS_XDRS which indicates to the C +?S: program that XDR serialization routines are available. +?S:. +?C:HAS_XDRS (XDRS): +?C: This symbol if defined indicates to the C program that the XDR +?C: serialization routines are available to transfer data accross +?C: various architectures. +?C:. +?H:#$d_xdrs HAS_XDRS /**/ +?H:. +?LINT:set d_xdrs +: see if XDR is available +echo " " +if set xdr_int val -f d_xdrs; eval $csym; $val; then + echo "Ahh! You have XDR routines for network communications." >&4 + val="$define" +else + $cat >&4 <<EOM +Sigh! You do not have XDR routines -- Network communications may be hazardous. +EOM + val="$undef" +fi +set d_xdrs +eval $setvar + diff --git a/mcon/U/defeditor.U b/mcon/U/defeditor.U new file mode 100644 index 0000000..799afd3 --- /dev/null +++ b/mcon/U/defeditor.U @@ -0,0 +1,45 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: defeditor.U,v $ +?RCS: Revision 3.0.1.1 1995/01/11 15:30:16 ram +?RCS: patch45: can now use the 'vi' variable since path stripping is deferred +?RCS: +?RCS: Revision 3.0 1993/08/18 12:08:05 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:defeditor: Getfile Oldconfig Loc vi +?MAKE: -pick add $@ %< +?S:defeditor: +?S: This variable contains the eventual value of the DEFEDITOR symbol, +?S: which contains the name of the default editor. +?S:. +?C:DEFEDITOR: +?C: This symbol contains the full pathname of the default editor. +?C:. +?H:#define DEFEDITOR "$defeditor" /**/ +?H:. +: determine default editor +echo " " +case "$defeditor" in +'') + case "$vi" in + */*) dflt="$vi";; + *) dflt=/usr/ucb/vi;; + esac + ;; +*) dflt="$defeditor" + ;; +esac +fn=f/ +rp="What is the default editor on your system?" +. ./getfile +defeditor="$ans" + diff --git a/mcon/U/doublesize.U b/mcon/U/doublesize.U new file mode 100644 index 0000000..8637c1e --- /dev/null +++ b/mcon/U/doublesize.U @@ -0,0 +1,58 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: doublesize.U,v $ +?RCS: Revision 3.0.1.1 1994/10/29 16:17:06 ram +?RCS: patch36: added ?F: line for metalint file checking +?RCS: +?RCS: Revision 3.0 1993/08/18 12:08:06 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:doublesize: cat rm Myread +cc +ccflags +?MAKE: -pick add $@ %< +?S:doublesize: +?S: This variable contains the value of the DOUBLESIZE symbol, which +?S: indicates to the C program how many bytes there are in a double. +?S:. +?C:DOUBLESIZE: +?C: This symbol contains the size of a double, so that the C preprocessor +?C: can make decisions based on it. +?C:. +?H:#define DOUBLESIZE $doublesize /**/ +?H:. +?F:!try +: check for length of double +echo " " +case "$doublesize" in +'') + echo "Checking to see how big your double precision numbers are..." >&4 + $cat >try.c <<'EOCP' +#include <stdio.h> +int main() +{ + printf("%d\n", sizeof(double)); +} +EOCP + if $cc $ccflags -o try try.c >/dev/null 2>&1 ; then + dflt=`./try` + else + dflt='8' + echo "(I can't seem to compile the test program. Guessing...)" + fi + ;; +*) + dflt="$doublesize" + ;; +esac +rp="What is the size of a double precision number (in bytes)?" +. ./myread +doublesize="$ans" +$rm -f try.c try + diff --git a/mcon/U/ebcdic.U b/mcon/U/ebcdic.U new file mode 100644 index 0000000..6a05eef --- /dev/null +++ b/mcon/U/ebcdic.U @@ -0,0 +1,58 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: Copyright (c) 1998 Andy Dougherty +?RCS: +?RCS: Original author Jarkko Hietaniemi <jhi@iki.fi> +?RCS: Merged into dist by Andy Dougherty July 13, 1998 +?RCS: +?MAKE:ebcdic: Compile Setvar cat rm run +?MAKE: -pick add $@ %< +?S:ebcdic: +?S: This variable conditionally defines EBCDIC if this +?S: system uses EBCDIC encoding. Among other things, this +?S: means that the character ranges are not contiguous. +?S: See trnl.U +?S:. +?C:EBCDIC: +?C: This symbol, if defined, indicates that this system uses +?C: EBCDIC encoding. +?C:. +?H:#$ebcdic EBCDIC /**/ +?H:. +?F:!try +?LINT:set ebcdic +: look whether system uses EBCDIC +echo " " +echo "Determining whether or not we are on an EBCDIC system..." >&4 +$cat >try.c <<'EOM' +int main() +{ + if ('M'==0xd4) return 0; + return 1; +} +EOM +val=$undef +set try +if eval $compile_ok; then + if $run ./try; then + echo "You seem to speak EBCDIC." >&4 + val="$define" + else + echo "Nope, no EBCDIC, probably ASCII or some ISO Latin. Or UTF-8." >&4 + fi +else + echo "I'm unable to compile the test program." >&4 + echo "I'll assume ASCII or some ISO Latin. Or UTF8." >&4 +fi +$rm -f try try.* +set ebcdic +eval $setvar + diff --git a/mcon/U/errnolist.U b/mcon/U/errnolist.U new file mode 100644 index 0000000..d9f5a37 --- /dev/null +++ b/mcon/U/errnolist.U @@ -0,0 +1,106 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: errnolist.U,v $ +?RCS: Revision 3.0.1.2 1997/02/28 15:48:01 ram +?RCS: patch61: replaced .a with $_a all over the place +?RCS: patch61: likewise for .o replaced by $_o +?RCS: +?RCS: Revision 3.0.1.1 1994/01/24 14:10:54 ram +?RCS: patch16: created +?RCS: +?MAKE:errnolist errnolist_SH errnolist_a errnolist_c errnolist_o: cat +cc \ + +ccflags +libs +d_sysernlst _a _o +?MAKE: -pick add $@ %< +?S:errnolist: +?S: This variable holds the base name of a file containing the +?S: definition of the sys_errnolist array, if the C library +?S: doesn't provide it already. Otherwise, its value is empty. +?S: The following lines should be included in your Makefile.SH: +?S: +?S: case "$errnolist" in +?S: '') ;; +?S: *) +?S: $spitshell >>Makefile <<!GROK!THIS! +?S: $errnolist_c: $errnolist_SH $errnolist_a +?S: sh ./$errnolist_SH +?S: +?S: !GROK!THIS! +?S: ;; +?S: esac +?S: +?S: You may define the 'errnolist' variable in your Myinit.U if you +?S: wish to override its default value "errnolist". +?S:. +?S:errnolist_SH: +?S: This is the name of a file which will generate errnolistc. +?S:. +?S:errnolist_a: +?S: This is the name of the awk script called by errnolist_SH. +?S:. +?S:errnolist_c: +?S: This is the name of a generated C file which provides the +?S: definition of the sys_errnolist array. +?S:. +?S:errnolist_o: +?S: This is the name of the object file which provides the +?S: definition of the sys_errnolist array, if the C library +?S: doesn't provide it already. Otherwise, its value is empty. +?S:. +?INIT:errnolist=errnolist +: check for sys_errnolist +@if d_sysernlst || HAS_SYS_ERRNOLIST +case "$d_sysernlst" in +"$define") + errnolist='' + errnolist_SH='' + errnolist_a='' + errnolist_c='' + errnolist_o='' + ;; +*) + echo " " + echo "I'll make sure your Makefile provides sys_errnolist in $errnolist.c" + errnolist_SH=$errnolist.SH + errnolist_a=$errnolist$_a + errnolist_c=$errnolist.c + errnolist_o=$errnolist$_o + ;; +esac +@else +echo " " +$cat <<EOM +Checking to see if your C library provides us with sys_errnolist[]... +EOM +$cat >errnolist.c <<'EOCP' +extern char *sys_errnolist[]; +int main() { + char *p0 = sys_errnolist[0]; + char *p1 = sys_errnolist[1]; + + return (p0 == p1); /* Make sure they're not optimized away */ +} +EOCP +if $cc $ccflags -o errnolist errnolist.c $libs >/dev/null 2>&1 ; then + echo "It does." + errnolist='' + errnolist_SH='' + errnolist_a='' + errnolist_c='' + errnolist_o='' +else + echo "I'll make sure your Makefile provides sys_errnolist in $errnolist.c" + errnolist_SH=$errnolist.SH + errnolist_a=$errnolist$_a + errnolist_c=$errnolist.c + errnolist_o=$errnolist$_o +fi +@end + diff --git a/mcon/U/etc.U b/mcon/U/etc.U new file mode 100644 index 0000000..4414fbd --- /dev/null +++ b/mcon/U/etc.U @@ -0,0 +1,42 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: etc.U,v $ +?RCS: Revision 3.0 1993/08/18 12:08:07 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:etc etcexp: Getfile Loc Oldconfig +?MAKE: -pick add $@ %< +?S:etc: +?S: This variable holds the name of the directory in which the user wants +?S: to put "administrative" executable images for the package in question. +?S: It is most often a local directory such as /usr/local/etc. Programs +?S: relying on this variable must be prepared to deal with ~name +?S: substitutions. +?S:. +?S:etcexp: +?S: This is the same as the etc variable, but is filename expanded at +?S: configuration time, for convenient use in makefiles. +?S:. +: determine where administrative executables go +case "$etc" in +'') + dflt=`./loc . /local/etc /usr/local/etc /local/etc /usr/etc /etc` + ;; +*) + dflt="$etc" + ;; +esac +fn=d~ +rp='Where should the administrative executables go?' +. ./getfile +etc="$ans" +etcexp="$ansexp" + diff --git a/mcon/U/filexp.U b/mcon/U/filexp.U new file mode 100644 index 0000000..73bf64d --- /dev/null +++ b/mcon/U/filexp.U @@ -0,0 +1,30 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: filexp.U,v $ +?RCS: Revision 3.0 1993/08/18 12:08:08 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:filexp: privlib +?MAKE: -pick add $@ %< +?S:filexp: +?S: This symbol contains the full pathname of the filexp script, in case we +?S: are saving the script for posterity. +?S:. +: must not allow self reference +case "$privlib" in + /*) + filexp=$privlib/filexp + ;; + *) + filexp=`pwd`/filexp + ;; +esac + diff --git a/mcon/U/floatsize.U b/mcon/U/floatsize.U new file mode 100644 index 0000000..efc958a --- /dev/null +++ b/mcon/U/floatsize.U @@ -0,0 +1,58 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: floatsize.U,v $ +?RCS: Revision 3.0.1.1 1994/10/29 16:17:09 ram +?RCS: patch36: added ?F: line for metalint file checking +?RCS: +?RCS: Revision 3.0 1993/08/18 12:08:09 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:floatsize: cat rm Myread +cc +ccflags +?MAKE: -pick add $@ %< +?S:floatsize: +?S: This variable contains the value of the FLOATSIZE symbol, which +?S: indicates to the C program how many bytes there are in a float. +?S:. +?C:FLOATSIZE: +?C: This symbol contains the size of a float, so that the C preprocessor +?C: can make decisions based on it. +?C:. +?H:#define FLOATSIZE $floatsize /**/ +?H:. +?F:!try +: check for length of float +echo " " +case "$floatsize" in +'') + echo "Checking to see how big your floating point numbers are..." >&4 + $cat >try.c <<'EOCP' +#include <stdio.h> +int main() +{ + printf("%d\n", sizeof(float)); +} +EOCP + if $cc $ccflags -o try try.c >/dev/null 2>&1 ; then + dflt=`./try` + else + dflt='4' + echo "(I can't seem to compile the test program. Guessing...)" + fi + ;; +*) + dflt="$floatsize" + ;; +esac +rp="What is the size of a floating point number (in bytes)?" +. ./myread +floatsize="$ans" +$rm -f try.c try + diff --git a/mcon/U/fpostype.U b/mcon/U/fpostype.U new file mode 100644 index 0000000..8270ba9 --- /dev/null +++ b/mcon/U/fpostype.U @@ -0,0 +1,39 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: fpostype.U,v $ +?RCS: Revision 3.0.1.2 1994/08/29 16:20:52 ram +?RCS: patch32: now uses new Typedef unit to compute type information +?RCS: +?RCS: Revision 3.0.1.1 1994/06/20 06:59:59 ram +?RCS: patch30: created +?RCS: +?MAKE:fpostype: Myread Typedef +?MAKE: -pick add $@ %< +?S:fpostype: +?S: This variable defines Fpos_t to be something like fpost_t, long, +?S: uint, or whatever type is used to declare file positions in libc. +?S:. +?C:Fpos_t: +?C: This symbol holds the type used to declare file positions in libc. +?C: It can be fpos_t, long, uint, etc... It may be necessary to include +?C: <sys/types.h> to get any typedef'ed information. +?C:. +?H:#define Fpos_t $fpostype /* File position type */ +?H:. +: see what type file positions are declared as in the library +set fpos_t fpostype long stdio.h sys/types.h +eval $typedef +echo " " +dflt="$fpostype" +rp="What is the type for file position used by fsetpos()?" +. ./myread +fpostype="$ans" + diff --git a/mcon/U/fpu.U b/mcon/U/fpu.U new file mode 100644 index 0000000..5e6cb09 --- /dev/null +++ b/mcon/U/fpu.U @@ -0,0 +1,73 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: fpu.U,v $ +?RCS: Revision 3.0 1993/08/18 12:08:10 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:fpu: test cat cc Myread +?MAKE: -pick add $@ %< +?S:fpu (fpunit): +?S: Set to be the compile flag for the local floating point unit. +?S:. +?C:FPU (FPUNIT): +?C: String containing the flags for the local floating point unit. +?C:. +?H:#define FPU "$fpu" /**/ +?H:. +: see what floating point compile flags should be used. +fpu='' +if $test -r /dev/fpa; then + $cat>fpa.c << GOOP + main(){return(1);} +GOOP + $cc -ffpa -o fpa fpa.c + fpa > fpa.out 2>&1 + if $test ! -s fpa.out; then + dflt='y' + $cat <<'EOM' + +You seem to have a sun fpa... I can compile the code to use the fpa but it will +mean that the code can ONLY run on a machine with a fpa... + +EOM + rp="Should I compile for fpa?" + . ./myread + if $test $ans = "n"; then + fpu='' + else + fpu='-ffpa' + fi + else + $cat <<'EOM' + +You have the fpa device but I can't seem to use it. Maybe you should talk to +your sysadmin about this. For now, I am not going to compile it in. + +EOM + fi +fi +if $test "$fpu" = ''; then + if $test -r /usr/etc/mc68881version; then + dflt='y' + $cat <<'EOM' + +There also seems to be the pieces for a 68881. If I compile this in, it will +work on almost all Sun 3's except for a few Sun-3/50s without a 68881... + +EOM + rp="Should I compile for a 68881?" + . ./myread + if $test $ans = "y"; then + fpu='-f68881' + fi + fi +fi + diff --git a/mcon/U/gccvers.U b/mcon/U/gccvers.U new file mode 100644 index 0000000..afd520f --- /dev/null +++ b/mcon/U/gccvers.U @@ -0,0 +1,117 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: Copyright (c) 2000, Jarkko Hietaniemi +?RCS: +?MAKE:gccversion gccosandvers: cat cpp rm +cc \ + Mcc Myread Guess Options Oldconfig Loc osname osvers grep run ccname +?MAKE: -pick add $@ %< +?S:gccversion: +?S: If GNU cc (gcc) is used, this variable holds '1' or '3' (for instance) +?S: to indicate whether the compiler is version 1 or 3. This is used in +?S: setting some of the default cflags. It is set to '' if not gcc. +?S:. +?S:gccosandvers: +?S: If GNU cc (gcc) is used, this variable the operating system and +?S: version used to compile the gcc. It is set to '' if not gcc, +?S: or if nothing useful can be parsed as the os version. +?S:. +?T:gccshortvers incdir d +?F:!try.c !try +?LINT:extern locincpth ccflags ldflags +?LINT:change locincpth ccname cpp +: Check whether they have gcc in any guise. +echo " " +echo "Checking for GNU cc in disguise and/or its version number..." >&4 +$cat >try.c <<EOM +#include <stdio.h> +int main() { +#ifdef __GNUC__ +#ifdef __VERSION__ + printf("%s\n", __VERSION__); +#else + printf("%s\n", "1"); +#endif +#endif + exit(0); +} +EOM +if $cc -o try $ccflags $ldflags try.c >/dev/null 2>&1; then + gccversion=`$run ./try` + case "$gccversion" in + '') echo "You are not using GNU cc." ;; + *) echo "You are using GNU cc $gccversion." + ccname=gcc + ;; + esac +else + echo " " + echo "*** WHOA THERE!!! ***" >&4 + echo " Your C compiler \"$cc\" doesn't seem to be working!" >&4 +?X: using -K will prevent aborting--maybe they're cross compiling? + case "$knowitall" in + '') + echo " You'd better start hunting for one and let me know about it." >&4 + exit 1 + ;; + esac +fi +$rm -f try try.* +case "$gccversion" in +1*) cpp=`./loc gcc-cpp $cpp $pth` ;; +esac +case "$gccversion" in +'') gccosandvers='' ;; +*) gccshortvers=`echo "$gccversion"|sed 's/ .*//'` + gccosandvers=`$cc -v 2>&1 | \ + $grep '/specs$'|sed "s!.*/[^-/]*-[^-/]*-\([^-/]*\)/$gccshortvers/specs!\1!"` + gccshortvers='' + case "$gccosandvers" in + $osname) gccosandvers='' ;; # linux gccs seem to have no linux osvers, grr + $osname$osvers) ;; # looking good + $osname*) cat <<EOM >&4 + +*** WHOA THERE!!! *** + + Your gcc has not been compiled for the exact release of + your operating system ($gccosandvers versus $osname$osvers). + + In general it is a good idea to keep gcc synchronized with + the operating system because otherwise serious problems + may ensue when trying to compile software, like Perl. + + I'm trying to be optimistic here, though, and will continue. + If later during the configuration and build icky compilation + problems appear (headerfile conflicts being the most common + manifestation), I suggest reinstalling the gcc to match + your operating system release. + +EOM + ;; + *) gccosandvers='' ;; # failed to parse, better be silent + esac + ;; +esac +case "$ccname" in +'') ccname="$cc" ;; +esac + +: gcc 3.1 complains about adding -Idirectories that it already knows about, +: so we will take those off from locincpth. +case "$gccversion" in +3*) + echo "main(){}">try.c + for incdir in `$cc -v -c try.c 2>&1 | \ + sed '1,/^#include <\.\.\.>/d;/^End of search list/,$d;s/^ //'` ; do + locincpth=`echo $locincpth | sed s!$incdir!!` + done + $rm -f try try.* +esac + diff --git a/mcon/U/gidtype.U b/mcon/U/gidtype.U new file mode 100644 index 0000000..58b693e --- /dev/null +++ b/mcon/U/gidtype.U @@ -0,0 +1,61 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: gidtype.U,v $ +?RCS: Revision 3.0.1.3 1994/08/29 16:21:44 ram +?RCS: patch32: now uses new Typedef unit to compute type information +?RCS: patch32: removed useless usage of Setvar (for now) +?RCS: +?RCS: Revision 3.0.1.2 1994/05/13 15:21:07 ram +?RCS: patch27: added lint hint +?RCS: +?RCS: Revision 3.0.1.1 1994/05/06 15:01:51 ram +?RCS: patch23: protected gidtype setting via setvar (ADO) +?RCS: patch23: made Gid_t comment more explicit (ADO) +?RCS: +?RCS: Revision 3.0 1993/08/18 12:08:11 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:gidtype: Myread Typedef Findhdr +?MAKE: -pick add $@ %< +?S:gidtype: +?S: This variable defines Gid_t to be something like gid_t, int, +?S: ushort, or whatever type is used to declare the return type +?S: of getgid(). Typically, it is the type of group ids in the kernel. +?S:. +?C:Gid_t (GIDTYPE): +?C: This symbol holds the return type of getgid() and the type of +?C: argument to setrgid() and related functions. Typically, +?C: it is the type of group ids in the kernel. It can be int, ushort, +?C: uid_t, etc... It may be necessary to include <sys/types.h> to get +?C: any typedef'ed information. +?C:. +?H:#define Gid_t $gidtype /* Type for getgid(), etc... */ +?H:. +?T:xxx +: see what type gids are declared as in the kernel +set gid_t gidtype xxx stdio.h sys/types.h +eval $typedef +case "$gidtype" in +xxx) + xxx=`./findhdr sys/user.h` + set `grep 'groups\[NGROUPS\];' "$xxx" 2>/dev/null` unsigned short + case $1 in + unsigned) dflt="$1 $2" ;; + *) dflt="$1" ;; + esac + ;; +*) dflt="$gidtype";; +esac +echo " " +rp="What is the type for group ids returned by getgid()?" +. ./myread +gidtype="$ans" + diff --git a/mcon/U/groupstype.U b/mcon/U/groupstype.U new file mode 100644 index 0000000..39727f1 --- /dev/null +++ b/mcon/U/groupstype.U @@ -0,0 +1,63 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu> +?RCS: +?RCS: $Log: groupstype.U,v $ +?RCS: Revision 3.0.1.2 1994/10/29 16:18:08 ram +?RCS: patch36: no longer uses Setvar to set 'groupstype' (ADO) +?RCS: patch36: typo fix in the word 'argument' (ADO) +?RCS: +?RCS: Revision 3.0.1.1 1994/06/20 07:00:18 ram +?RCS: patch30: created by ADO +?RCS: +?MAKE:groupstype: gidtype d_getgrps Myread Oldconfig Findhdr cat d_setgrps +?MAKE: -pick add $@ %< +?INIT:groupstype='' +?S:groupstype: +?S: This variable defines Groups_t to be something like gid_t, int, +?S: ushort, or whatever type is used for the second argument to +?S: getgroups() and setgroups(). Usually, this is the same as +?S: gidtype (gid_t), but sometimes it isn't. +?S:. +?C:Groups_t (GROUPSTYPE): +?C: This symbol holds the type used for the second argument to +?C: getgroups() and setgroups(). Usually, this is the same as +?C: gidtype (gid_t) , but sometimes it isn't. +?C: It can be int, ushort, gid_t, etc... +?C: It may be necessary to include <sys/types.h> to get any +?C: typedef'ed information. This is only required if you have +?C: getgroups() or setgroups().. +?C:. +?H:?%<:#if defined(HAS_GETGROUPS) || defined(HAS_SETGROUPS) +?H:?%<:#define Groups_t $groupstype /* Type for 2nd arg to [sg]etgroups() */ +?H:?%<:#endif +?H:. +?W:%<:getgroups HAS_GETGROUPS setgroups HAS_SETGROUPS +: Find type of 2nd arg to 'getgroups()' and 'setgroups()' +echo " " +case "$d_getgrps$d_setgrps" in +*define*) + case "$groupstype" in + '') dflt="$gidtype" ;; + *) dflt="$groupstype" ;; + esac + $cat <<EOM +What type of pointer is the second argument to getgroups() and setgroups()? +Usually this is the same as group ids, $gidtype, but not always. + +EOM + rp='What type pointer is the second argument to getgroups() and setgroups()?' + . ./myread + groupstype="$ans" + ;; +*) groupstype="$gidtype";; +esac + diff --git a/mcon/U/h_fcntl.U b/mcon/U/h_fcntl.U new file mode 100644 index 0000000..293ebd5 --- /dev/null +++ b/mcon/U/h_fcntl.U @@ -0,0 +1,23 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: h_fcntl.U,v $ +?RCS: Revision 3.0 1993/08/18 12:08:12 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:h_fcntl: Nothing +?MAKE: -pick add $@ %< +?S:h_fcntl: +?S: This is variable gets set in various places to tell i_fcntl that +?S: <fcntl.h> should be included. +?S:. +: Initialize h_fcntl +h_fcntl=false + diff --git a/mcon/U/h_sysfile.U b/mcon/U/h_sysfile.U new file mode 100644 index 0000000..c35135b --- /dev/null +++ b/mcon/U/h_sysfile.U @@ -0,0 +1,23 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: h_sysfile.U,v $ +?RCS: Revision 3.0 1993/08/18 12:08:13 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:h_sysfile: Nothing +?MAKE: -pick add $@ %< +?S:h_sysfile: +?S: This is variable gets set in various places to tell i_sys_file that +?S: <sys/file.h> should be included. +?S:. +: Initialize h_sysfile +h_sysfile=false + diff --git a/mcon/U/i_arpainet.U b/mcon/U/i_arpainet.U new file mode 100644 index 0000000..a00ff0d --- /dev/null +++ b/mcon/U/i_arpainet.U @@ -0,0 +1,31 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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_arpainet.U,v $ +?RCS: Revision 3.0 1993/08/18 12:08:15 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:i_arpainet: Inhdr +?MAKE: -pick add $@ %< +?S:i_arpainet: +?S: This variable conditionally defines the I_ARPA_INET symbol, +?S: and indicates whether a C program should include <arpa/inet.h>. +?S:. +?C:I_ARPA_INET: +?C: This symbol, if defined, indicates to the C program that it should +?C: include <arpa/inet.h> to get inet_addr and friends declarations. +?C:. +?H:#$i_arpainet I_ARPA_INET /**/ +?H:. +?LINT:set i_arpainet +: see if arpa/inet.h has to be included +set arpa/inet.h i_arpainet +eval $inhdr + diff --git a/mcon/U/i_db.U b/mcon/U/i_db.U new file mode 100644 index 0000000..98c52c2 --- /dev/null +++ b/mcon/U/i_db.U @@ -0,0 +1,146 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu> +?RCS: +?RCS: $Log: i_db.U,v $ +?RCS: Revision 3.0.1.3 1995/07/25 14:10:22 ram +?RCS: patch56: conditionally use const in test programs (ADO) +?RCS: +?RCS: Revision 3.0.1.2 1995/05/12 12:14:42 ram +?RCS: patch54: extended for more intimate DB probing (ADO) +?RCS: +?RCS: Revision 3.0.1.1 1994/08/29 16:21:50 ram +?RCS: patch32: created by ADO +?RCS: +?MAKE:i_db db_hashtype db_prefixtype: Inhdr +cc +ccflags rm contains cat \ + d_const +?MAKE: -pick add $@ %< +?S:i_db: +?S: This variable conditionally defines the I_DB symbol, and indicates +?S: whether a C program may include Berkeley's DB include file <db.h>. +?S:. +?S:db_hashtype: +?S: This variable contains the type of the hash structure element +?S: in the <db.h> header file. In older versions of DB, it was +?S: int, while in newer ones it is u_int32_t. +?S:. +?S:db_prefixtype: +?S: This variable contains the type of the prefix structure element +?S: in the <db.h> header file. In older versions of DB, it was +?S: int, while in newer ones it is size_t. +?S:. +?C:I_DB: +?C: This symbol, if defined, indicates to the C program that it should +?C: include Berkeley's DB include file <db.h>. +?C:. +?C:DB_Prefix_t: +?C: This symbol contains the type of the prefix structure element +?C: in the <db.h> header file. In older versions of DB, it was +?C: int, while in newer ones it is u_int32_t. +?C:. +?C:DB_Hash_t: +?C: This symbol contains the type of the prefix structure element +?C: in the <db.h> header file. In older versions of DB, it was +?C: int, while in newer ones it is size_t. +?C:. +?H:#$i_db I_DB /**/ +?H:#define DB_Hash_t $db_hashtype /**/ +?H:#define DB_Prefix_t $db_prefixtype /**/ +?H:. +?LINT:set i_db +: see if this is a db.h system +set db.h i_db +eval $inhdr + +@if DB_Hash_t +case "$i_db" in +define) + : Check the return type needed for hash + echo " " + echo "Checking return type needed for hash for Berkeley DB ..." >&4 + $cat >try.c <<EOCP +#$d_const HASCONST +#ifndef HASCONST +#define const +#endif +#include <sys/types.h> +#include <db.h> +u_int32_t hash_cb (ptr, size) +const void *ptr; +size_t size; +{ +} +HASHINFO info; +int main() +{ + info.hash = hash_cb; +} +EOCP + if $cc $ccflags -c try.c >try.out 2>&1 ; then + if $contains warning try.out >>/dev/null 2>&1 ; then + db_hashtype='int' + else + db_hashtype='u_int32_t' + fi + else + echo "I can't seem to compile the test program." >&4 + db_hashtype=int + fi + $rm -f try.* + echo "Your version of Berkeley DB uses $db_hashtype for hash." + ;; +*) db_hashtype=int + ;; +esac + +@end +@if DB_Prefix_t +case "$i_db" in +define) + : Check the return type needed for prefix + echo " " + echo "Checking return type needed for prefix for Berkeley DB ..." >&4 + cat >try.c <<EOCP +#$d_const HASCONST +#ifndef HASCONST +#define const +#endif +#include <sys/types.h> +#include <db.h> +size_t prefix_cb (key1, key2) +const DBT *key1; +const DBT *key2; +{ +} +BTREEINFO info; +int main() +{ + info.prefix = prefix_cb; +} +EOCP + if $cc $ccflags -c try.c >try.out 2>&1 ; then + if $contains warning try.out >>/dev/null 2>&1 ; then + db_prefixtype='int' + else + db_prefixtype='size_t' + fi + else + echo "I can't seem to compile the test program." >&4 + db_prefixtype='int' + fi + $rm -f try.* + echo "Your version of Berkeley DB uses $db_prefixtype for prefix." + ;; +*) db_prefixtype='int' + ;; +esac + +@end diff --git a/mcon/U/i_dbm.U b/mcon/U/i_dbm.U new file mode 100644 index 0000000..a0e5c13 --- /dev/null +++ b/mcon/U/i_dbm.U @@ -0,0 +1,79 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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_dbm.U,v $ +?RCS: Revision 3.0.1.2 1997/02/28 15:48:20 ram +?RCS: patch61: added I_RPCSVC_DBM check +?RCS: +?RCS: Revision 3.0.1.1 1995/05/12 12:16:05 ram +?RCS: patch54: made more robust by checking both header and lib (ADO) +?RCS: +?RCS: Revision 3.0 1993/08/18 12:08:15 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:i_dbm i_rpcsvcdbm: Inhdr Inlibc Setvar +?MAKE: -pick add $@ %< +?S:i_dbm (d_odbm): +?S: This variable conditionally defines the I_DBM symbol, which +?S: indicates to the C program that <dbm.h> exists and should +?S: be included. +?S:. +?S:i_rpcsvcdbm: +?S: This variable conditionally defines the I_RPCSVC_DBM symbol, which +?S: indicates to the C program that <rpcsvc/dbm.h> exists and should +?S: be included. Some System V systems might need this instead of <dbm.h>. +?S:. +?C:I_DBM (HAS_ODBM ODBM): +?C: This symbol, if defined, indicates that <dbm.h> exists and should +?C: be included. +?C:. +?C:I_RPCSVC_DBM: +?C: This symbol, if defined, indicates that <rpcsvc/dbm.h> exists and +?C: should be included. +?C:. +?H:#$i_dbm I_DBM /**/ +?H:#$i_rpcsvcdbm I_RPCSVC_DBM /**/ +?H:. +?T:d_dbmclose +?LINT:set i_dbm i_rpcsvcdbm +: see if dbm.h is available +?X: We might just have the header, not the library. +?X: We look for dbmclose() rather than dbminit() because +?X: some versions of SCO Unix have -ldbm, but are missing dbmclose(). -- ADO +?X: Some System V systems have <rpcsvc/dbm.h> instead of <dbm.h>. +: see if dbmclose exists +set dbmclose d_dbmclose +eval $inlibc + +case "$d_dbmclose" in +$define) + set dbm.h i_dbm + eval $inhdr + case "$i_dbm" in + $define) + val="$undef" + set i_rpcsvcdbm + eval $setvar + ;; + *) set rpcsvc/dbm.h i_rpcsvcdbm + eval $inhdr + ;; + esac + ;; +*) echo "We won't be including <dbm.h>" + val="$undef" + set i_dbm + eval $setvar + val="$undef" + set i_rpcsvcdbm + eval $setvar + ;; +esac + diff --git a/mcon/U/i_dirent.U b/mcon/U/i_dirent.U new file mode 100644 index 0000000..65e192e --- /dev/null +++ b/mcon/U/i_dirent.U @@ -0,0 +1,146 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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_dirent.U,v $ +?RCS: Revision 3.0.1.4 1994/10/29 16:20:01 ram +?RCS: patch36: failed scanning for 'd_namlen' with missing <dirent.h> (ADO) +?RCS: +?RCS: Revision 3.0.1.3 1994/06/20 07:01:25 ram +?RCS: patch30: added direntrytype for hints, merely for NeXT (ADO) +?RCS: patch30: now checks for both struct dirent and direct (ADO) +?RCS: +?RCS: Revision 3.0.1.2 1994/05/13 15:22:37 ram +?RCS: patch27: new variable direntrytype for proper type setting (ADO) +?RCS: +?RCS: Revision 3.0.1.1 1994/01/24 14:11:15 ram +?RCS: patch16: added new Direntry_t pseudo-type for directory entries +?RCS: +?RCS: Revision 3.0 1993/08/18 12:08:17 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?X: +?X: This unit looks whether there is a dirent system or not +?X: +?MAKE:i_dirent d_dirnamlen direntrytype: test contains Setvar \ + Myread Findhdr cppstdin cppflags cppminus rm +?MAKE: -pick add $@ %< +?S:i_dirent: +?S: This variable conditionally defines I_DIRENT, which indicates +?S: to the C program that it should include <dirent.h>. +?S:. +?S:d_dirnamlen: +?S: This variable conditionally defines DIRNAMLEN, which indicates +?S: to the C program that the length of directory entry names is +?S: provided by a d_namelen field. +?S:. +?S:direntrytype: +?S: This symbol is set to 'struct direct' or 'struct dirent' depending on +?S: whether dirent is available or not. You should use this pseudo type to +?S: portably declare your directory entries. +?S:. +?C:I_DIRENT: +?C: This symbol, if defined, indicates to the C program that it should +?C: include <dirent.h>. Using this symbol also triggers the definition +?C: of the Direntry_t define which ends up being 'struct dirent' or +?C: 'struct direct' depending on the availability of <dirent.h>. +?C:. +?C:DIRNAMLEN: +?C: This symbol, if defined, indicates to the C program that the length +?C: of directory entry names is provided by a d_namlen field. Otherwise +?C: you need to do strlen() on the d_name field. +?C:. +?C:Direntry_t: +?C: This symbol is set to 'struct direct' or 'struct dirent' depending on +?C: whether dirent is available or not. You should use this pseudo type to +?C: portably declare your directory entries. +?C:. +?H:#$i_dirent I_DIRENT /**/ +?H:#$d_dirnamlen DIRNAMLEN /**/ +?H:?%<:@if I_DIRENT && Direntry_t +?H:?%<:#define Direntry_t $direntrytype +?H:?%<:@end +?H:. +?T:xinc guess1 guess2 +?LINT:set i_dirent d_dirnamlen +: see if this is a dirent system +echo " " +if xinc=`./findhdr dirent.h`; $test "$xinc"; then + val="$define" + echo "<dirent.h> found." >&4 +else + val="$undef" + if xinc=`./findhdr sys/dir.h`; $test "$xinc"; then + echo "<sys/dir.h> found." >&4 + echo " " + else + xinc=`./findhdr sys/ndir.h` + fi + echo "<dirent.h> NOT found." >&4 +fi +set i_dirent +eval $setvar + +?X: Use struct dirent or struct direct? If we're using dirent.h, +?X: it's probably struct dirent, but apparently not always. +?X: Assume $xinc still contains the name of the header file we're using. +@if direntrytype || Direntry_t +: Look for type of directory structure. +echo " " +$cppstdin $cppflags $cppminus < "$xinc" > try.c + +case "$direntrytype" in +''|' ') + case "$i_dirent" in + $define) guess1='struct dirent' ;; + *) guess1='struct direct' ;; + esac + ;; +*) guess1="$direntrytype" + ;; +esac + +case "$guess1" in +'struct dirent') guess2='struct direct' ;; +*) guess2='struct dirent' ;; +esac + +if $contains "$guess1" try.c >/dev/null 2>&1; then + direntrytype="$guess1" + echo "Your directory entries are $direntrytype." >&4 +elif $contains "$guess2" try.c >/dev/null 2>&1; then + direntrytype="$guess2" + echo "Your directory entries seem to be $direntrytype." >&4 +else + echo "I don't recognize your system's directory entries." >&4 + rp="What type is used for directory entries on this system?" + dflt="$guess1" + . ./myread + direntrytype="$ans" +fi +$rm -f try.c + +@end + +@if d_dirnamlen || DIRNAMLEN +: see if the directory entry stores field length +echo " " +$cppstdin $cppflags $cppminus < "$xinc" > try.c +if $contains 'd_namlen' try.c >/dev/null 2>&1; then + echo "Good, your directory entry keeps length information in d_namlen." >&4 + val="$define" +else + echo "Your directory entry does not know about the d_namlen field." >&4 + val="$undef" +fi +set d_dirnamlen +eval $setvar +$rm -f try.c + +@end diff --git a/mcon/U/i_dld.U b/mcon/U/i_dld.U new file mode 100644 index 0000000..531d914 --- /dev/null +++ b/mcon/U/i_dld.U @@ -0,0 +1,34 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu> +?RCS: +?RCS: $Log: i_dld.U,v $ +?RCS: Revision 3.0.1.1 1994/10/29 16:20:07 ram +?RCS: patch36: created by ADO +?RCS: +?MAKE:i_dld: Inhdr +?MAKE: -pick add $@ %< +?S:i_dld: +?S: This variable conditionally defines the I_DLD symbol, which +?S: indicates to the C program that <dld.h> (GNU dynamic loading) +?S: exists and should be included. +?S:. +?C:I_DLD: +?C: This symbol, if defined, indicates that <dld.h> exists and should +?C: be included before using GNU dynamic loading features. +?C:. +?H:#$i_dld I_DLD /**/ +?H:. +?LINT:set i_dld +: see if dld is available +set dld.h i_dld +eval $inhdr + diff --git a/mcon/U/i_dlfcn.U b/mcon/U/i_dlfcn.U new file mode 100644 index 0000000..c0808ce --- /dev/null +++ b/mcon/U/i_dlfcn.U @@ -0,0 +1,34 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu> +?RCS: +?RCS: $Log: i_dlfcn.U,v $ +?RCS: Revision 3.0.1.1 1994/08/29 16:21:53 ram +?RCS: patch32: created by ADO +?RCS: +?MAKE:i_dlfcn: Inhdr +?MAKE: -pick add $@ %< +?S:i_dlfcn: +?S: This variable conditionally defines the I_DLFCN symbol, which +?S: indicates to the C program that <dlfcn.h> exists and should +?S: be included. +?S:. +?C:I_DLFCN: +?C: This symbol, if defined, indicates that <dlfcn.h> exists and should +?C: be included. +?C:. +?H:#$i_dlfcn I_DLFCN /**/ +?H:. +?LINT:set i_dlfcn +: see if dlfcn is available +set dlfcn.h i_dlfcn +eval $inhdr + diff --git a/mcon/U/i_fcntl.U b/mcon/U/i_fcntl.U new file mode 100644 index 0000000..048eaff --- /dev/null +++ b/mcon/U/i_fcntl.U @@ -0,0 +1,61 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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_fcntl.U,v $ +?RCS: Revision 3.0 1993/08/18 12:08:18 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:i_fcntl: h_fcntl h_sysfile +i_sysfile Inhdr Setvar +?MAKE: -pick add $@ %< +?S:i_fcntl: +?S: This variable controls the value of I_FCNTL (which tells +?S: the C program to include <fcntl.h>). +?S:. +?C:I_FCNTL (HDR_O_STUFF FCNTL): +?C: This manifest constant tells the C program to include <fcntl.h>. +?C:. +?H:#$i_fcntl I_FCNTL /**/ +?H:. +?T:val +?X: Make line lists +i_sysfile to ensure tests for <sys/file.h> will be +?X: conducted prior tests for <fcntl.h>, hece making sure the h_sysfile +?X: variable is correctly set when we reach that unit. +?LINT:set i_fcntl +?LINT:use i_sysfile +?LINT:change h_fcntl +: see if fcntl.h is there +val='' +set fcntl.h val +eval $inhdr + +: see if we can include fcntl.h +case "$val" in +"$define") + echo " " + if $h_fcntl; then + val="$define" + echo "We'll be including <fcntl.h>." >&4 + else + val="$undef" + if $h_sysfile; then + echo "We don't need to include <fcntl.h> if we include <sys/file.h>." >&4 + else + echo "We won't be including <fcntl.h>." >&4 + fi + fi + ;; +*) + h_fcntl=false + val="$undef" + ;; +esac +set i_fcntl +eval $setvar + diff --git a/mcon/U/i_float.U b/mcon/U/i_float.U new file mode 100644 index 0000000..1b060d3 --- /dev/null +++ b/mcon/U/i_float.U @@ -0,0 +1,35 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu> +?RCS: +?RCS: $Log: i_float.U,v $ +?RCS: Revision 3.0.1.1 1994/08/29 16:21:57 ram +?RCS: patch32: created by ADO +?RCS: +?MAKE:i_float: Inhdr +?MAKE: -pick add $@ %< +?S:i_float: +?S: This variable conditionally defines the I_FLOAT symbol, and indicates +?S: whether a C program may include <float.h> to get symbols like DBL_MAX +?S: or DBL_MIN, i.e. machine dependent floating point values. +?S:. +?C:I_FLOAT: +?C: This symbol, if defined, indicates to the C program that it should +?C: include <float.h> to get definition of symbols like DBL_MAX or +?C: DBL_MIN, i.e. machine dependent floating point values. +?C:. +?H:#$i_float I_FLOAT /**/ +?H:. +?LINT:set i_float +: see if this is a float.h system +set float.h i_float +eval $inhdr + diff --git a/mcon/U/i_gdbm.U b/mcon/U/i_gdbm.U new file mode 100644 index 0000000..c9cdbf0 --- /dev/null +++ b/mcon/U/i_gdbm.U @@ -0,0 +1,53 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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_gdbm.U,v $ +?RCS: Revision 3.0.1.1 1995/05/12 12:16:39 ram +?RCS: patch54: made more robust by checking both header and lib (ADO) +?RCS: +?RCS: Revision 3.0 1993/08/18 12:08:19 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:i_gdbm: Inhdr Inlibc Setvar +?MAKE: -pick add $@ %< +?S:i_gdbm (d_gdbm): +?S: This variable conditionally defines the I_GDBM symbol, which +?S: indicates to the C program that <gdbm.h> exists and should +?S: be included. +?S:. +?C:I_GDBM (HAS_GDBM): +?C: This symbol, if defined, indicates that <gdbm.h> exists and should +?C: be included. +?C:. +?H:#$i_gdbm I_GDBM /**/ +?H:. +?T:t_gdbm d_gdbm_open +?LINT:set i_gdbm +: see if gdbm.h is available +?X: t_gdbm is a tentative check. We might just have the .h, not the lib -- ADO +set gdbm.h t_gdbm +eval $inhdr +case "$t_gdbm" in +$define) + : see if gdbm_open exists + set gdbm_open d_gdbm_open + eval $inlibc + case "$d_gdbm_open" in + $undef) + t_gdbm="$undef" + echo "We won't be including <gdbm.h>" + ;; + esac + ;; +esac +val="$t_gdbm" +set i_gdbm +eval $setvar + diff --git a/mcon/U/i_grp.U b/mcon/U/i_grp.U new file mode 100644 index 0000000..95cdb07 --- /dev/null +++ b/mcon/U/i_grp.U @@ -0,0 +1,31 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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_grp.U,v $ +?RCS: Revision 3.0 1993/08/18 12:08:20 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:i_grp: Inhdr +?MAKE: -pick add $@ %< +?S:i_grp: +?S: This variable conditionally defines the I_GRP symbol, and indicates +?S: whether a C program should include <grp.h>. +?S:. +?C:I_GRP: +?C: This symbol, if defined, indicates to the C program that it should +?C: include <grp.h>. +?C:. +?H:#$i_grp I_GRP /**/ +?H:. +?LINT:set i_grp +: see if this is an grp system +set grp.h i_grp +eval $inhdr + diff --git a/mcon/U/i_inttypes.U b/mcon/U/i_inttypes.U new file mode 100644 index 0000000..d9f0573 --- /dev/null +++ b/mcon/U/i_inttypes.U @@ -0,0 +1,35 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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_sysun.U,v $ +?RCS: Revision 3.0 1993/08/18 12:08:42 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?X: +?X: This unit looks wether <inttypes.h> is available or not +?X: +?MAKE:i_inttypes: Inhdr +?MAKE: -pick add $@ %< +?S:i_inttypes: +?S: This variable conditionally defines I_INTTYPES, which indicates +?S: to the C program that it should include <inttypes.h> to get +?S: format conversions of integer types. +?S:. +?C:I_INTTYPES: +?C: This symbol, if defined, indicates to the C program that it should +?C: include <inttypes.h> to get format conversions of integer types. +?C:. +?H:#$i_inttypes I_INTTYPES /**/ +?H:. +?LINT:set i_inttypes +: see if this is a inttypes.h system +set inttypes.h i_inttypes +eval $inhdr + diff --git a/mcon/U/i_limits.U b/mcon/U/i_limits.U new file mode 100644 index 0000000..eb15e2d --- /dev/null +++ b/mcon/U/i_limits.U @@ -0,0 +1,33 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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_limits.U,v $ +?RCS: Revision 3.0 1993/08/18 12:08:20 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:i_limits: Inhdr +?MAKE: -pick add $@ %< +?S:i_limits: +?S: This variable conditionally defines the I_LIMITS symbol, and indicates +?S: whether a C program may include <limits.h> to get symbols like WORD_BIT +?S: and friends. +?S:. +?C:I_LIMITS: +?C: This symbol, if defined, indicates to the C program that it should +?C: include <limits.h> to get definition of symbols like WORD_BIT or +?C: LONG_MAX, i.e. machine dependant limitations. +?C:. +?H:#$i_limits I_LIMITS /**/ +?H:. +?LINT:set i_limits +: see if this is a limits.h system +set limits.h i_limits +eval $inhdr + diff --git a/mcon/U/i_locale.U b/mcon/U/i_locale.U new file mode 100644 index 0000000..e0eb168 --- /dev/null +++ b/mcon/U/i_locale.U @@ -0,0 +1,32 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1996, Andy Dougherty +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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_locale.U,v $ +?RCS: Revision 3.0.1.1 1997/02/28 15:48:23 ram +?RCS: patch61: created +?RCS: +?MAKE:i_locale: Inhdr +?MAKE: -pick add $@ %< +?S:i_locale: +?S: This variable conditionally defines the I_LOCALE symbol, +?S: and indicates whether a C program should include <locale.h>. +?S:. +?C:I_LOCALE: +?C: This symbol, if defined, indicates to the C program that it should +?C: include <locale.h>. +?C:. +?H:#$i_locale I_LOCALE /**/ +?H:. +?LINT:set i_locale +: see if locale.h is available +set locale.h i_locale +eval $inhdr + diff --git a/mcon/U/i_malloc.U b/mcon/U/i_malloc.U new file mode 100644 index 0000000..ad98898 --- /dev/null +++ b/mcon/U/i_malloc.U @@ -0,0 +1,31 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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_malloc.U,v $ +?RCS: Revision 3.0 1993/08/18 12:08:21 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:i_malloc: Inhdr +?MAKE: -pick add $@ %< +?S:i_malloc: +?S: This variable conditionally defines the I_MALLOC symbol, and indicates +?S: whether a C program should include <malloc.h>. +?S:. +?C:I_MALLOC: +?C: This symbol, if defined, indicates to the C program that it should +?C: include <malloc.h>. +?C:. +?H:#$i_malloc I_MALLOC /**/ +?H:. +?LINT:set i_malloc +: see if this is a malloc.h system +set malloc.h i_malloc +eval $inhdr + diff --git a/mcon/U/i_math.U b/mcon/U/i_math.U new file mode 100644 index 0000000..c3cd1d5 --- /dev/null +++ b/mcon/U/i_math.U @@ -0,0 +1,34 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu> +?RCS: +?RCS: $Log: i_math.U,v $ +?RCS: Revision 3.0.1.1 1994/08/29 16:21:59 ram +?RCS: patch32: created by ADO +?RCS: +?MAKE:i_math: Inhdr +?MAKE: -pick add $@ %< +?X: Are there really systems that *DON'T* have math.h? +?S:i_math: +?S: This variable conditionally defines the I_MATH symbol, and indicates +?S: whether a C program may include <math.h>. +?S:. +?C:I_MATH: +?C: This symbol, if defined, indicates to the C program that it should +?C: include <math.h>. +?C:. +?H:#$i_math I_MATH /**/ +?H:. +?LINT:set i_math +: see if this is a math.h system +set math.h i_math +eval $inhdr + diff --git a/mcon/U/i_memory.U b/mcon/U/i_memory.U new file mode 100644 index 0000000..ab5244d --- /dev/null +++ b/mcon/U/i_memory.U @@ -0,0 +1,65 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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_memory.U,v $ +?RCS: Revision 3.0.1.3 1994/06/20 07:01:55 ram +?RCS: patch30: cosmetic changes +?RCS: +?RCS: Revision 3.0.1.2 1994/05/13 15:23:56 ram +?RCS: patch27: modified to avoid spurious Whoa warnings (ADO) +?RCS: +?RCS: Revision 3.0.1.1 1994/05/06 15:02:25 ram +?RCS: patch23: avoid conflicts with <string.h> +?RCS: +?RCS: Revision 3.0 1993/08/18 12:08:22 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:i_memory: Inhdr strings cppstdin cppflags cppminus contains rm Setvar +?MAKE: -pick add $@ %< +?S:i_memory: +?S: This variable conditionally defines the I_MEMORY symbol, and indicates +?S: whether a C program should include <memory.h>. +?S:. +?C:I_MEMORY: +?C: This symbol, if defined, indicates to the C program that it should +?C: include <memory.h>. +?C:. +?H:#$i_memory I_MEMORY /**/ +?H:. +?LINT:set i_memory +?X: +?X: Unfortunately, the definitions of memory functions sometimes +?X: conflict with those in <string.h>. We'll assume that if +?X: <string.h> contains memcpy, then we don't need memory.h +?X: +: see if memory.h is available. +val='' +set memory.h val +eval $inhdr + +: See if it conflicts with string.h +case "$val" in +$define) + case "$strings" in + '') ;; + *) + $cppstdin $cppflags $cppminus < $strings > mem.h + if $contains 'memcpy' mem.h >/dev/null 2>&1; then + echo " " + echo "We won't be including <memory.h>." + val="$undef" + fi + $rm -f mem.h + ;; + esac +esac +set i_memory +eval $setvar + diff --git a/mcon/U/i_ndbm.U b/mcon/U/i_ndbm.U new file mode 100644 index 0000000..8b7eda4 --- /dev/null +++ b/mcon/U/i_ndbm.U @@ -0,0 +1,53 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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_ndbm.U,v $ +?RCS: Revision 3.0.1.1 1995/05/12 12:16:53 ram +?RCS: patch54: made more robust by checking both header and lib (ADO) +?RCS: +?RCS: Revision 3.0 1993/08/18 12:08:23 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:i_ndbm: Inhdr Inlibc Setvar +?MAKE: -pick add $@ %< +?S:i_ndbm (d_ndbm): +?S: This variable conditionally defines the I_NDBM symbol, which +?S: indicates to the C program that <ndbm.h> exists and should +?S: be included. +?S:. +?C:I_NDBM (HAS_NDBM NDBM): +?C: This symbol, if defined, indicates that <ndbm.h> exists and should +?C: be included. +?C:. +?H:#$i_ndbm I_NDBM /**/ +?H:. +?T:t_ndbm d_dbm_open +?LINT:set i_ndbm +: see if ndbm.h is available +?X: t_ndbm is a tentative check. We might just have the .h, not the lib -- ADO +set ndbm.h t_ndbm +eval $inhdr +case "$t_ndbm" in +$define) + : see if dbm_open exists + set dbm_open d_dbm_open + eval $inlibc + case "$d_dbm_open" in + $undef) + t_ndbm="$undef" + echo "We won't be including <ndbm.h>" + ;; + esac + ;; +esac +val="$t_ndbm" +set i_ndbm +eval $setvar + diff --git a/mcon/U/i_neterrno.U b/mcon/U/i_neterrno.U new file mode 100644 index 0000000..a8de2aa --- /dev/null +++ b/mcon/U/i_neterrno.U @@ -0,0 +1,65 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu> +?RCS: +?RCS: $Log: i_neterrno.U,v $ +?RCS: Revision 3.0.1.3 1994/10/29 16:20:29 ram +?RCS: patch36: forgot to initialize 'val' to an empty value (ADO) +?RCS: +?RCS: Revision 3.0.1.2 1994/08/29 16:22:10 ram +?RCS: patch32: removed spurious echo +?RCS: +?RCS: Revision 3.0.1.1 1994/06/20 07:02:05 ram +?RCS: patch30: created by ADO +?RCS: +?MAKE:i_neterrno: Inhdr +cc +ccflags rm Setvar +?MAKE: -pick add $@ %< +?S:i_neterrno: +?S: This variable conditionally defines the I_NET_ERRNO symbol, which +?S: indicates to the C program that <net/errno.h> exists and should +?S: be included. +?S:. +?C:I_NET_ERRNO: +?C: This symbol, if defined, indicates that <net/errno.h> exists and +?C: should be included. +?C:. +?H:#$i_neterrno I_NET_ERRNO /**/ +?H:. +?LINT:set i_neterrno +: see if net/errno.h is available +val='' +set net/errno.h val +eval $inhdr + +: Unfortunately, it causes problems on some systems. Arrgh. +case "$val" in +$define) + cat > try.c <<'EOM' +#include <stdio.h> +#include <errno.h> +#include <net/errno.h> +int func() +{ + return ENOTSOCK; +} +EOM + if $cc $ccflags -c try.c >/dev/null 2>&1; then + echo "We'll be including <net/errno.h>." >&4 + else + echo "We won't be including <net/errno.h>." >&4 + val="$undef" + fi + $rm -f try.* try + ;; +esac +set i_neterrno +eval $setvar + diff --git a/mcon/U/i_niin.U b/mcon/U/i_niin.U new file mode 100644 index 0000000..0e90b3a --- /dev/null +++ b/mcon/U/i_niin.U @@ -0,0 +1,45 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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_niin.U,v $ +?RCS: Revision 3.0 1993/08/18 12:08:24 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?X: +?X: This unit looks wether <netinet/in.h> is available or not +?X: +?MAKE:i_niin i_sysin: Inhdr +?MAKE: -pick add $@ %< +?S:i_niin: +?S: This variable conditionally defines I_NETINET_IN, which indicates +?S: to the C program that it should include <netinet/in.h>. Otherwise, +?S: you may try <sys/in.h>. +?S:. +?S:i_sysin: +?S: This variable conditionally defines I_SYS_IN, which indicates +?S: to the C program that it should include <sys/in.h> instead of +?S: <netinet/in.h>. +?S:. +?C:I_NETINET_IN: +?C: This symbol, if defined, indicates to the C program that it should +?C: include <netinet/in.h>. Otherwise, you may try <sys/in.h>. +?C:. +?C:I_SYS_IN (I_SYSIN): +?C: This symbol, if defined, indicates to the C program that it should +?C: include <sys/in.h> instead of <netinet/in.h>. +?C:. +?H:#$i_niin I_NETINET_IN /**/ +?H:#$i_sysin I_SYS_IN /**/ +?H:. +?LINT:set i_niin i_sysin +: see if this is a netinet/in.h or sys/in.h system +set netinet/in.h i_niin sys/in.h i_sysin +eval $inhdr + diff --git a/mcon/U/i_pwd.U b/mcon/U/i_pwd.U new file mode 100644 index 0000000..09f4219 --- /dev/null +++ b/mcon/U/i_pwd.U @@ -0,0 +1,162 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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_pwd.U,v $ +?RCS: Revision 3.0.1.2 1995/07/25 14:10:57 ram +?RCS: patch56: use setvar so hint file values can override our guesses (ADO) +?RCS: +?RCS: Revision 3.0.1.1 1994/05/06 15:03:27 ram +?RCS: patch23: had forgotten cppminus in cppstdin test (ADO) +?RCS: +?RCS: Revision 3.0 1993/08/18 12:08:25 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?X: +?X: This unit checks whether there is a pwd system or not +?X: +?MAKE:i_pwd d_pwquota d_pwage d_pwchange d_pwclass d_pwexpire d_pwcomment: \ + contains rm cppstdin cppflags cppminus Inhdr Findhdr Setvar +?MAKE: -pick add $@ %< +?S:i_pwd: +?S: This variable conditionally defines I_PWD, which indicates +?S: to the C program that it should include <pwd.h>. +?S:. +?S:d_pwquota: +?S: This varaible conditionally defines PWQUOTA, which indicates +?S: that struct passwd contains pw_quota. +?S:. +?S:d_pwage: +?S: This varaible conditionally defines PWAGE, which indicates +?S: that struct passwd contains pw_age. +?S:. +?S:d_pwchange: +?S: This varaible conditionally defines PWCHANGE, which indicates +?S: that struct passwd contains pw_change. +?S:. +?S:d_pwclass: +?S: This varaible conditionally defines PWCLASS, which indicates +?S: that struct passwd contains pw_class. +?S:. +?S:d_pwexpire: +?S: This varaible conditionally defines PWEXPIRE, which indicates +?S: that struct passwd contains pw_expire. +?S:. +?S:d_pwcomment: +?S: This varaible conditionally defines PWCOMMENT, which indicates +?S: that struct passwd contains pw_comment. +?S:. +?C:I_PWD: +?C: This symbol, if defined, indicates to the C program that it should +?C: include <pwd.h>. +?C:. +?C:PWQUOTA: +?C: This symbol, if defined, indicates to the C program that struct passwd +?C: contains pw_quota. +?C:. +?C:PWAGE: +?C: This symbol, if defined, indicates to the C program that struct passwd +?C: contains pw_age. +?C:. +?C:PWCHANGE: +?C: This symbol, if defined, indicates to the C program that struct passwd +?C: contains pw_change. +?C:. +?C:PWCLASS: +?C: This symbol, if defined, indicates to the C program that struct passwd +?C: contains pw_class. +?C:. +?C:PWEXPIRE: +?C: This symbol, if defined, indicates to the C program that struct passwd +?C: contains pw_expire. +?C:. +?C:PWCOMMENT: +?C: This symbol, if defined, indicates to the C program that struct passwd +?C: contains pw_comment. +?C:. +?H:#$i_pwd I_PWD /**/ +?H:#$d_pwquota PWQUOTA /**/ +?H:#$d_pwage PWAGE /**/ +?H:#$d_pwchange PWCHANGE /**/ +?H:#$d_pwclass PWCLASS /**/ +?H:#$d_pwexpire PWEXPIRE /**/ +?H:#$d_pwcomment PWCOMMENT /**/ +?H:. +?LINT: set i_pwd d_pwquota d_pwage d_pwchange d_pwclass d_pwexpire d_pwcomment +?T:xxx +: see if this is a pwd.h system +set pwd.h i_pwd +eval $inhdr + +case "$i_pwd" in +$define) + xxx=`./findhdr pwd.h` + $cppstdin $cppflags $cppminus < $xxx >$$.h + + if $contains 'pw_quota' $$.h >/dev/null 2>&1; then + val="$define" + else + val="$undef" + fi + set d_pwquota + eval $setvar + + if $contains 'pw_age' $$.h >/dev/null 2>&1; then + val="$define" + else + val="$undef" + fi + set d_pwage + eval $setvar + + if $contains 'pw_change' $$.h >/dev/null 2>&1; then + val="$define" + else + val="$undef" + fi + set d_pwchange + eval $setvar + + if $contains 'pw_class' $$.h >/dev/null 2>&1; then + val="$define" + else + val="$undef" + fi + set d_pwclass + eval $setvar + + if $contains 'pw_expire' $$.h >/dev/null 2>&1; then + val="$define" + else + val="$undef" + fi + set d_pwexpire + eval $setvar + + if $contains 'pw_comment' $$.h >/dev/null 2>&1; then + val="$define" + else + val="$undef" + fi + set d_pwcomment + eval $setvar + + $rm -f $$.h + ;; +*) + val="$undef"; + set d_pwquota; eval $setvar + set d_pwage; eval $setvar + set d_pwchange; eval $setvar + set d_pwclass; eval $setvar + set d_pwexpire; eval $setvar + set d_pwcomment; eval $setvar + ;; +esac + diff --git a/mcon/U/i_regex.U b/mcon/U/i_regex.U new file mode 100644 index 0000000..2599bbc --- /dev/null +++ b/mcon/U/i_regex.U @@ -0,0 +1,35 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: Original Author: Sidney C. Smith <scsmith@cbda9.apgea.army.mil> +?RCS: +?RCS: $Log: i_regex.U,v $ +?RCS: Revision 3.0.1.1 1995/01/30 14:35:45 ram +?RCS: patch49: created +?RCS: +?RCS: +?MAKE:i_regex: Inhdr +?MAKE: -pick add $@ %< +?S:i_regex: +?S: This variable conditionally defines the I_REGEX symbol, which +?S: indicates to the C program that <regex.h> exists and should +?S: be included. +?S:. +?C:I_REGEX: +?C: This symbol, if defined, indicates that <regex.h> exists and should +?C: be included. +?C:. +?H:#$i_regex I_REGEX /**/ +?H:. +?LINT:set i_regex +: see if regex is available +set regex.h i_regex +eval $inhdr + diff --git a/mcon/U/i_sfio.U b/mcon/U/i_sfio.U new file mode 100644 index 0000000..0dde99f --- /dev/null +++ b/mcon/U/i_sfio.U @@ -0,0 +1,32 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1996, Andy Dougherty +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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_sfio.U,v $ +?RCS: Revision 3.0.1.1 1997/02/28 15:48:27 ram +?RCS: patch61: created +?RCS: +?MAKE:i_sfio: Inhdr Setvar +?MAKE: -pick add $@ %< +?S:i_sfio: +?S: This variable conditionally defines the I_SFIO symbol, +?S: and indicates whether a C program should include <sfio.h>. +?S:. +?C:I_SFIO: +?C: This symbol, if defined, indicates to the C program that it should +?C: include <sfio.h>. +?C:. +?H:#$i_sfio I_SFIO /**/ +?H:. +?LINT:set i_sfio +: see if sfio.h is available +set sfio.h i_sfio +eval $inhdr + diff --git a/mcon/U/i_stddef.U b/mcon/U/i_stddef.U new file mode 100644 index 0000000..5d34a99 --- /dev/null +++ b/mcon/U/i_stddef.U @@ -0,0 +1,32 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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_stddef.U,v $ +?RCS: Revision 3.0 1993/08/18 12:08:27 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:i_stddef: Inhdr +?MAKE: -pick add $@ %< +?S:i_stddef: +?S: This variable conditionally defines the I_STDDEF symbol, which +?S: indicates to the C program that <stddef.h> exists and should +?S: be included. +?S:. +?C:I_STDDEF: +?C: This symbol, if defined, indicates that <stddef.h> exists and should +?C: be included. +?C:. +?H:#$i_stddef I_STDDEF /**/ +?H:. +?LINT:set i_stddef +: see if stddef is available +set stddef.h i_stddef +eval $inhdr + diff --git a/mcon/U/i_stdlib.U b/mcon/U/i_stdlib.U new file mode 100644 index 0000000..d570918 --- /dev/null +++ b/mcon/U/i_stdlib.U @@ -0,0 +1,32 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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_stdlib.U,v $ +?RCS: Revision 3.0 1993/08/18 12:08:27 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:i_stdlib: Inhdr +?MAKE: -pick add $@ %< +?S:i_stdlib: +?S: This variable conditionally defines the I_STDLIB symbol, which +?S: indicates to the C program that <stdlib.h> exists and should +?S: be included. +?S:. +?C:I_STDLIB: +?C: This symbol, if defined, indicates that <stdlib.h> exists and should +?C: be included. +?C:. +?H:#$i_stdlib I_STDLIB /**/ +?H:. +?LINT:set i_stdlib +: see if stdlib is available +set stdlib.h i_stdlib +eval $inhdr + diff --git a/mcon/U/i_string.U b/mcon/U/i_string.U new file mode 100644 index 0000000..ce8bdfa --- /dev/null +++ b/mcon/U/i_string.U @@ -0,0 +1,62 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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_string.U,v $ +?RCS: Revision 3.0.1.2 1993/10/16 13:50:12 ram +?RCS: patch12: special units Loc and Guess were missing from dependencies +?RCS: +?RCS: Revision 3.0.1.1 1993/09/13 16:07:26 ram +?RCS: patch10: removed "(Actually, this looks more like...)" messages (WAD) +?RCS: +?RCS: Revision 3.0 1993/08/18 12:08:28 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?X: +?X: See if we should include <string.h> or <strings.h> +?X: +?MAKE:i_string strings: test Setvar Findhdr Warn +?MAKE: -pick add $@ %< +?S:i_string: +?S: This variable conditionally defines the I_STRING symbol, which +?S: indicates that <string.h> should be included rather than <strings.h>. +?S:. +?S:strings: +?S: This variable holds the full path of the string header that will be +?S: used. Typically /usr/include/string.h or /usr/include/strings.h. +?S:. +?C:I_STRING: +?C: This symbol, if defined, indicates to the C program that it should +?C: include <string.h> (USG systems) instead of <strings.h> (BSD systems). +?C:. +?H:#$i_string I_STRING /**/ +?H:. +?LINT:set i_string +: see which of string.h or strings.h is needed +echo " " +strings=`./findhdr string.h` +if $test "$strings" && $test -r "$strings"; then + echo "Using <string.h> instead of <strings.h>." >&4 + val="$define" +else + val="$undef" + strings=`./findhdr strings.h` + if $test "$strings" && $test -r "$strings"; then + echo "Using <strings.h> instead of <string.h>." >&4 + else + ./warn "No string header found -- You'll surely have problems." + fi +fi +set i_string +eval $setvar +case "$i_string" in +"$undef") strings=`./findhdr strings.h`;; +*) strings=`./findhdr string.h`;; +esac + diff --git a/mcon/U/i_sysdir.U b/mcon/U/i_sysdir.U new file mode 100644 index 0000000..1fa9092 --- /dev/null +++ b/mcon/U/i_sysdir.U @@ -0,0 +1,34 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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_sysdir.U,v $ +?RCS: Revision 3.0.1.1 1994/08/29 16:22:30 ram +?RCS: patch32: fixed typo in I_SYS_DIR symbol name +?RCS: +?RCS: Revision 3.0 1993/08/18 12:08:30 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:i_sysdir: Inhdr +?MAKE: -pick add $@ %< +?S:i_sysdir: +?S: This variable conditionally defines the I_SYS_DIR symbol, and indicates +?S: whether a C program should include <sys/dir.h>. +?S:. +?C:I_SYS_DIR (I_SYSDIR): +?C: This symbol, if defined, indicates to the C program that it should +?C: include <sys/dir.h>. +?C:. +?H:#$i_sysdir I_SYS_DIR /**/ +?H:. +?LINT:set i_sysdir +: see if this is an sysdir system +set sys/dir.h i_sysdir +eval $inhdr + diff --git a/mcon/U/i_sysfile.U b/mcon/U/i_sysfile.U new file mode 100644 index 0000000..b8d8b9a --- /dev/null +++ b/mcon/U/i_sysfile.U @@ -0,0 +1,60 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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_sysfile.U,v $ +?RCS: Revision 3.0.1.2 1995/07/25 14:11:36 ram +?RCS: patch56: removed <> characters from comment, per metalint suggestion +?RCS: +?RCS: Revision 3.0.1.1 1993/08/25 14:01:23 ram +?RCS: patch6: added default for i_sysfile +?RCS: +?RCS: Revision 3.0 1993/08/18 12:08:31 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:i_sysfile: h_sysfile Inhdr Setvar +?MAKE: -pick add $@ %< +?S:i_sysfile: +?S: This variable conditionally defines the I_SYS_FILE symbol, and indicates +?S: whether a C program should include <sys/file.h> to get R_OK and friends. +?S:. +?C:I_SYS_FILE (I_SYSFILE): +?C: This symbol, if defined, indicates to the C program that it should +?C: include <sys/file.h> to get definition of R_OK and friends. +?C:. +?H:#$i_sysfile I_SYS_FILE /**/ +?H:. +?T:val +?D:i_sysfile='' +?LINT:change h_sysfile +?LINT:set i_sysfile +: see if this is a sys/file.h system +val='' +set sys/file.h val +eval $inhdr + +: do we need to include sys/file.h ? +case "$val" in +"$define") + echo " " + if $h_sysfile; then + val="$define" + echo "We'll be including <sys/file.h>." >&4 + else + val="$undef" + echo "We won't be including <sys/file.h>." >&4 + fi + ;; +*) + h_sysfile=false + ;; +esac +set i_sysfile +eval $setvar + diff --git a/mcon/U/i_sysioctl.U b/mcon/U/i_sysioctl.U new file mode 100644 index 0000000..a7c35e0 --- /dev/null +++ b/mcon/U/i_sysioctl.U @@ -0,0 +1,202 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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_sysioctl.U,v $ +?RCS: Revision 3.0.1.2 1994/05/06 15:04:57 ram +?RCS: patch23: added knowledge for <sys/filio.h> (WED) +?RCS: patch23: optimized amount of findhdr calls +?RCS: +?RCS: Revision 3.0.1.1 1993/11/10 17:36:09 ram +?RCS: patch14: now use a compiler check for TIOCNOTTY because of HP-UX 9.x +?RCS: +?RCS: Revision 3.0 1993/08/18 12:08:32 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:i_sysioctl i_bsdioctl i_sysfilio i_syssockio d_voidtty: test contains \ + cat i_termio i_termios i_sgtty Setvar Findhdr +cc rm Inhdr +?MAKE: -pick add $@ %< +?S:i_sysioctl: +?S: This variable conditionally defines the I_SYS_IOCTL symbol, which +?S: indicates to the C program that <sys/ioctl.h> exists and should +?S: be included. +?S:. +?S:i_sysfilio: +?S: This variable conditionally defines the I_SYS_FILIO symbol, which +?S: indicates to the C program that <sys/filio.h> exists and should +?S: be included in preference to <sys/ioctl.h>. +?S:. +?S:i_bsdioctl: +?S: This variable conditionally defines the I_SYS_BSDIOCTL symbol, which +?S: indicates to the C program that <sys/bsdioctl.h> exists and should +?S: be included. +?S:. +?S:i_syssockio: +?S: This variable conditionally defines I_SYS_SOCKIO to indicate to the +?S: C program that socket ioctl codes may be found in <sys/sockio.h> +?S: instead of <sys/ioctl.h>. +?S:. +?S:d_voidtty: +?S: This variable conditionally defines USE_IOCNOTTY to indicate that the +?S: ioctl() call with TIOCNOTTY should be used to void tty association. +?S: Otherwise (on USG probably), it is enough to close the standard file +?S: decriptors and do a setpgrp(). +?S:. +?C:I_SYS_IOCTL (I_SYSIOCTL): +?C: This symbol, if defined, indicates that <sys/ioctl.h> exists and should +?C: be included. Otherwise, include <sgtty.h> or <termio.h>. +?C:. +?C:I_SYS_FILIO: +?C: This symbol, if defined, indicates that <sys/filio.h> exists and +?C: should be included instead of <sys/ioctl.h>. +?C:. +?C:I_SYS_BSDIOCTL (I_BSDIOCTL): +?C: This symbol, if defined, indicates that <sys/bsdioctl.h> exists and should +?C: be included. Otherwise, try <sys/ioctl.h>. This is primarly intended for +?C: definitions of sockets options, like SIOCATMARK. +?C:. +?C:I_SYS_SOCKIO (I_SYSSOCKIO): +?C: This symbol, if defined, indicates the <sys/sockio.h> should be included +?C: to get socket ioctl options, like SIOCATMARK. +?C:. +?C:USE_TIOCNOTTY (VOIDTTY): +?C: This symbol, if defined indicate to the C program that the ioctl() +?C: call with TIOCNOTTY should be used to void tty association. +?C: Otherwise (on USG probably), it is enough to close the standard file +?C: decriptors and do a setpgrp(). +?C:. +?H:#$i_sysioctl I_SYS_IOCTL /**/ +?H:#$i_sysfilio I_SYS_FILIO /**/ +?H:#$i_bsdioctl I_SYS_BSDIOCTL /**/ +?H:#$i_syssockio I_SYS_SOCKIO /**/ +?H:#$d_voidtty USE_TIOCNOTTY /**/ +?H:. +?T:xxx +: see if ioctl defs are in sgtty, termio, sys/filio or sys/ioctl +?LINT:set i_sysfilio +set sys/filio.h i_sysfilio +eval $inhdr +echo " " +if $test `./findhdr sys/ioctl.h`; then + val="$define" + echo '<sys/ioctl.h> found.' >&4 +else + val="$undef" + if $test $i_sysfilio = "$define"; then + echo '<sys/ioctl.h> NOT found.' >&4 + else + $test $i_sgtty = "$define" && xxx="sgtty.h" + $test $i_termio = "$define" && xxx="termio.h" + $test $i_termios = "$define" && xxx="termios.h" +echo "No <sys/ioctl.h> found, assuming ioctl args are defined in <$xxx>." >&4 + fi +fi +?LINT:set i_sysioctl +set i_sysioctl +eval $setvar + +@if I_BSDIOCTL || i_bsdioctl +?X: +?X: The only machine I know where this inclusion was necessary is a +?X: BULL DPX 5000 (a French machine). +?X: +: see if socket ioctl defs are in sys/bsdioctl or sys/ioctl +echo " " +xxx=`./findhdr sys/bsdioctl.h` +if $test "$xxx"; then + if $contains SIOCATMARK $xxx >/dev/null 2>&1; then + val="$define" + echo "You have socket ioctls defined in <sys/bsdioctl.h>." >&4 + else + val="$undef" + echo "No socket ioctls found in <sys/bsdioctl.h>." >&4 + fi +else + val="$undef" + echo "<sys/bsdioctl.h> not found, but that's ok." >&4 +fi +?LINT:set i_bsdioctl +set i_bsdioctl +eval $setvar + +@end +@if I_SYSSOCKIO || i_syssockio +: see if socket ioctl defs are in sys/sockio.h +echo " " +xxx=`./findhdr sys/sockio.h` +if $test "$xxx"; then + if $contains SIOCATMARK $xxx >/dev/null 2>&1; then + val="$define" + echo "You have socket ioctls defined in <sys/sockio.h>." >&4 + else + val="$undef" + echo "No socket ioctls found in <sys/sockio.h>." >&4 + fi +else + val="$undef" +@if I_BSDIOCTL + case "$i_bsdioctl" in + "$define") $cat <<EOM +<sys/sockio.h> not found, using ioctls from <sys/bsdioctl.h>. +EOM + ;; + *) $cat <<EOM +<sys/sockio.h> not found, assuming socket ioctls are in <sys/ioctl.h>. +EOM + ;; + esac +@else + $cat <<EOM +<sys/sockio.h> not found, assuming socket ioctls are in <sys/ioctl.h>. +EOM +@end +fi +?LINT:set i_syssockio +set i_syssockio +eval $setvar + +@end +@if VOIDTTY || d_voidtty +: check how to void tty association +echo " " +case "$i_sysioctl" in +"$define") xxx='sys/ioctl.h';; +?X: otherwise $xxx was set during the determination of i_sysioctl, above. +esac +?X: +?X: Can't use $contains here since HP-UX 9.x has TIOCNOTTY between a pair +?X: of #ifdef/#endif and is never actually defined. Oh well... +?X: +$cat > tcio.c <<EOM +#include <sys/types.h> /* Just in case */ +#include <$xxx> + +int main() +{ +#ifdef TIOCNOTTY + exit(0); +#else + exit(1); +#endif +} +EOM +if ($cc -o tcio tcio.c && ./tcio) >/dev/null 2>&1; then + val="$define" + echo "TIOCNOTTY found in <$xxx>." >&4 + echo "Using ioctl() call on /dev/tty to void tty association." >&4 +else + val="$undef" + echo "Closing standard file descriptors should void tty association." >&4 +fi +?LINT:set d_voidtty +set d_voidtty +eval $setvar +$rm -f tcio tcio.? core + +@end diff --git a/mcon/U/i_sysmman.U b/mcon/U/i_sysmman.U new file mode 100644 index 0000000..8e88249 --- /dev/null +++ b/mcon/U/i_sysmman.U @@ -0,0 +1,34 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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_sysmman.U,v $ +?RCS: Revision 3.0.1.1 1994/01/24 14:11:20 ram +?RCS: patch16: created +?RCS: +?X: +?X: Look wether <sys/mman.h> needs to be included. +?X: +?MAKE:i_sysmman: Inhdr +?MAKE: -pick add $@ %< +?S:i_sysmman: +?S: This variable conditionally defines the I_SYS_MMAN symbol, +?S: and indicates whether a C program should include <sys/mman.h>. +?S:. +?C:I_SYS_MMAN: +?C: This symbol, if defined, indicates to the C program that it should +?C: include <sys/mman.h>. +?C:. +?H:#$i_sysmman I_SYS_MMAN /**/ +?H:. +?LINT:set i_sysmman +: see if sys/mman.h has to be included +set sys/mman.h i_sysmman +eval $inhdr + diff --git a/mcon/U/i_sysndir.U b/mcon/U/i_sysndir.U new file mode 100644 index 0000000..8c24648 --- /dev/null +++ b/mcon/U/i_sysndir.U @@ -0,0 +1,31 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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_sysndir.U,v $ +?RCS: Revision 3.0 1993/08/18 12:08:33 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:i_sysndir: Inhdr +?MAKE: -pick add $@ %< +?S:i_sysndir: +?S: This variable conditionally defines the I_SYS_NDIR symbol, and indicates +?S: whether a C program should include <sys/ndir.h>. +?S:. +?C:I_SYS_NDIR (I_SYSNDIR): +?C: This symbol, if defined, indicates to the C program that it should +?C: include <sys/ndir.h>. +?C:. +?H:#$i_sysndir I_SYS_NDIR /**/ +?H:. +?LINT:set i_sysndir +: see if this is an sysndir system +set sys/ndir.h i_sysndir +eval $inhdr + diff --git a/mcon/U/i_sysparam.U b/mcon/U/i_sysparam.U new file mode 100644 index 0000000..ffa6f39 --- /dev/null +++ b/mcon/U/i_sysparam.U @@ -0,0 +1,31 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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_sysparam.U,v $ +?RCS: Revision 3.0.1.1 1994/08/29 16:22:43 ram +?RCS: patch32: created +?RCS: +?MAKE:i_sysparam: Inhdr +?MAKE: -pick add $@ %< +?S:i_sysparam: +?S: This variable conditionally defines the I_SYS_PARAM symbol, and indicates +?S: whether a C program should include <sys/param.h>. +?S:. +?C:I_SYS_PARAM: +?C: This symbol, if defined, indicates to the C program that it should +?C: include <sys/param.h>. +?C:. +?H:#$i_sysparam I_SYS_PARAM /**/ +?H:. +?LINT:set i_sysparam +: see if this is a sys/param system +set sys/param.h i_sysparam +eval $inhdr + diff --git a/mcon/U/i_sysresrc.U b/mcon/U/i_sysresrc.U new file mode 100644 index 0000000..8d6f59b --- /dev/null +++ b/mcon/U/i_sysresrc.U @@ -0,0 +1,34 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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_sysresrc.U,v $ +?RCS: Revision 3.0 1993/08/18 12:08:34 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?X: +?X: Look wether <sys/resource.h> needs to be included +?X: +?MAKE:i_sysresrc: Inhdr +?MAKE: -pick add $@ %< +?S:i_sysresrc: +?S: This variable conditionally defines the I_SYS_RESOURCE symbol, +?S: and indicates whether a C program should include <sys/resource.h>. +?S:. +?C:I_SYS_RESOURCE (I_SYSRESOURCE): +?C: This symbol, if defined, indicates to the C program that it should +?C: include <sys/resource.h>. +?C:. +?H:#$i_sysresrc I_SYS_RESOURCE /**/ +?H:. +?LINT:set i_sysresrc +: see if sys/resource.h has to be included +set sys/resource.h i_sysresrc +eval $inhdr + diff --git a/mcon/U/i_sysselct.U b/mcon/U/i_sysselct.U new file mode 100644 index 0000000..9f24002 --- /dev/null +++ b/mcon/U/i_sysselct.U @@ -0,0 +1,39 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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_sysselct.U,v $ +?RCS: Revision 3.0.1.1 1993/08/25 14:01:33 ram +?RCS: patch6: added default for i_sysselct +?RCS: +?RCS: Revision 3.0 1993/08/18 12:08:35 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?X: +?X: Look wether <sys/select.h> exists +?X: +?MAKE:i_sysselct: Inhdr +?MAKE: -pick add $@ %< +?S:i_sysselct: +?S: This variable conditionally defines I_SYS_SELECT, which indicates +?S: to the C program that it should include <sys/select.h> in order to +?S: get the definition of struct timeval. +?S:. +?C:I_SYS_SELECT (I_SYSSELECT): +?C: This symbol, if defined, indicates to the C program that it should +?C: include <sys/select.h> in order to get definition of struct timeval. +?C:. +?H:#$i_sysselct I_SYS_SELECT /**/ +?H:. +?D:i_sysselct='' +?LINT:set i_sysselct +: see if sys/select.h has to be included +set sys/select.h i_sysselct +eval $inhdr + diff --git a/mcon/U/i_syssock.U b/mcon/U/i_syssock.U new file mode 100644 index 0000000..5788eca --- /dev/null +++ b/mcon/U/i_syssock.U @@ -0,0 +1,32 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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_syssock.U,v $ +?RCS: Revision 3.0 1993/08/18 12:08:36 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:i_syssock: Inhdr +?MAKE: -pick add $@ %< +?S:i_syssock: +?S: This variable conditionally defines the I_SYS_SOCKET symbol, and indicates +?S: whether a C program should include <sys/socket.h> before performing socket +?S: operations. +?S:. +?C:I_SYS_SOCKET: +?C: This symbol, if defined, indicates to the C program that it should +?C: include <sys/socket.h> before performing socket calls. +?C:. +?H:#$i_syssock I_SYS_SOCKET /**/ +?H:. +?LINT:set i_syssock +: see if this is a sys/socket.h system +set sys/socket.h i_syssock +eval $inhdr + diff --git a/mcon/U/i_sysstat.U b/mcon/U/i_sysstat.U new file mode 100644 index 0000000..c010999 --- /dev/null +++ b/mcon/U/i_sysstat.U @@ -0,0 +1,32 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1996, Andy Dougherty +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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_sysstat.U,v $ +?RCS: Revision 3.0.1.1 1997/02/28 15:48:30 ram +?RCS: patch61: created +?RCS: +?MAKE:i_sysstat: Inhdr +?MAKE: -pick add $@ %< +?S:i_sysstat: +?S: This variable conditionally defines the I_SYS_STAT symbol, +?S: and indicates whether a C program should include <sys/stat.h>. +?S:. +?C:I_SYS_STAT (I_SYSSTAT): +?C: This symbol, if defined, indicates to the C program that it should +?C: include <sys/stat.h>. +?C:. +?H:#$i_sysstat I_SYS_STAT /**/ +?H:. +?LINT:set i_sysstat +: see if sys/stat.h is available +set sys/stat.h i_sysstat +eval $inhdr + diff --git a/mcon/U/i_systable.U b/mcon/U/i_systable.U new file mode 100644 index 0000000..7e94d4a --- /dev/null +++ b/mcon/U/i_systable.U @@ -0,0 +1,32 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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_systable.U,v $ +?RCS: Revision 3.0.1.1 1993/10/16 13:50:20 ram +?RCS: patch12: created +?RCS: +?RCS: +?MAKE:i_systable: Inhdr +?MAKE: -pick add $@ %< +?S:i_systable: +?S: This variable conditionally defines the I_SYS_TABLE symbol, and +?S: indicates whether a C program should include <sys/table.h>. +?S:. +?C:I_SYS_TABLE: +?C: This symbol, if defined, indicates to the C program that it should +?C: include <sys/table.h> for the OSF/1 table() system call. +?C:. +?H:#$i_systable I_SYS_TABLE /**/ +?H:. +?LINT:set i_systable +: see if this is an OSF sys/table system +set sys/table.h i_systable +eval $inhdr + diff --git a/mcon/U/i_systimeb.U b/mcon/U/i_systimeb.U new file mode 100644 index 0000000..29a89c8 --- /dev/null +++ b/mcon/U/i_systimeb.U @@ -0,0 +1,55 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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_systimeb.U,v $ +?RCS: Revision 3.0 1993/08/18 12:08:37 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?X: +?X: This unit looks wether <sys/timeb.h> should be included +?X: or not when using ftime() (for struct timeb definition). +?X: +?X: Force looking for <sys/time.h> for struct timeb. +?X:INC: i_systime +?MAKE:i_systimeb: test contains Loc Setvar Findhdr +?MAKE: -pick add $@ %< +?S:i_systimeb: +?S: This variable conditionally defines I_SYS_TIMEB, which indicates +?S: to the C program that it should include <sys/timeb.h>. +?S:. +?C:I_SYS_TIMEB (I_SYSTIMEB): +?C: This symbol, if defined, indicates to the C program that it should +?C: include <sys/timeb.h>, in order to define struct timeb (some systems +?C: define this in <sys/time.h>). This is useful when using ftime(). +?C: You should include <sys/time.h> if I_SYS_TIMEB is not defined, +?C: nor is I_SYS_TIME. +?C:. +?H:#$i_systimeb I_SYS_TIMEB /**/ +?H:. +?T:xxx +?LINT:set i_systimeb +: see where struct timeb is defined +echo " " +xxx=`./findhdr sys/timeb.h` +if $test "$xxx"; then + if $contains 'struct timeb' $xxx >/dev/null 2>&1; then + val="$define" + echo "You have struct timeb defined in <sys/timeb.h>." >&4 + else + val="$undef" + echo "Assuming struct timeb is defined in <sys/time.h>." >&4 + fi +else + val="$undef" +echo "No <sys/timeb.h> -- Assuming struct timeb is defined in <sys/time.h>." >&4 +fi +set i_systimeb +eval $setvar + diff --git a/mcon/U/i_systimes.U b/mcon/U/i_systimes.U new file mode 100644 index 0000000..41066e2 --- /dev/null +++ b/mcon/U/i_systimes.U @@ -0,0 +1,31 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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_systimes.U,v $ +?RCS: Revision 3.0 1993/08/18 12:08:39 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:i_systimes: Inhdr +?MAKE: -pick add $@ %< +?S:i_systimes: +?S: This variable conditionally defines the I_SYS_TIMES symbol, and indicates +?S: whether a C program should include <sys/times.h>. +?S:. +?C:I_SYS_TIMES (I_SYSTIMES): +?C: This symbol, if defined, indicates to the C program that it should +?C: include <sys/times.h>. +?C:. +?H:#$i_systimes I_SYS_TIMES /**/ +?H:. +?LINT:set i_systimes +: see if this is a sys/times.h system +set sys/times.h i_systimes +eval $inhdr + diff --git a/mcon/U/i_systwgcf.U b/mcon/U/i_systwgcf.U new file mode 100644 index 0000000..eac12fb --- /dev/null +++ b/mcon/U/i_systwgcf.U @@ -0,0 +1,31 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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_systwgcf.U,v $ +?RCS: Revision 3.0 1993/08/18 12:08:39 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:i_systwgcf: Inhdr +?MAKE: -pick add $@ %< +?S:i_systwgcf: +?S: This variable conditionally defines the I_SYS_TWG_CF symbol, and +?S: indicates whether a C program should include sys/twg_config.h. +?S:. +?C:I_SYS_TWG_CF: +?C: This symbol, if defined, indicates to the C program that it should +?C: include sys/twg_config.h. +?C:. +?H:#$i_systwgcf I_SYS_TWG_CF /**/ +?H:. +?LINT:set i_systwgcf +: see if this is a sys/twg_config.h system +set sys/twg_config.h i_systwgcf +eval $inhdr + diff --git a/mcon/U/i_systypes.U b/mcon/U/i_systypes.U new file mode 100644 index 0000000..c94e654 --- /dev/null +++ b/mcon/U/i_systypes.U @@ -0,0 +1,34 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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_systypes.U,v $ +?RCS: Revision 3.0 1993/08/18 12:08:41 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?X: +?X: Look wether <sys/types.h> needs to be included. +?X: +?MAKE:i_systypes: Inhdr +?MAKE: -pick add $@ %< +?S:i_systypes: +?S: This variable conditionally defines the I_SYS_TYPES symbol, +?S: and indicates whether a C program should include <sys/types.h>. +?S:. +?C:I_SYS_TYPES (I_SYSTYPES): +?C: This symbol, if defined, indicates to the C program that it should +?C: include <sys/types.h>. +?C:. +?H:#$i_systypes I_SYS_TYPES /**/ +?H:. +?LINT:set i_systypes +: see if sys/types.h has to be included +set sys/types.h i_systypes +eval $inhdr + diff --git a/mcon/U/i_sysun.U b/mcon/U/i_sysun.U new file mode 100644 index 0000000..2da3b11 --- /dev/null +++ b/mcon/U/i_sysun.U @@ -0,0 +1,35 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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_sysun.U,v $ +?RCS: Revision 3.0 1993/08/18 12:08:42 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?X: +?X: This unit looks wether <sys/un.h> is available or not +?X: +?MAKE:i_sysun: Inhdr +?MAKE: -pick add $@ %< +?S:i_sysun: +?S: This variable conditionally defines I_SYS_UN, which indicates +?S: to the C program that it should include <sys/un.h> to get UNIX +?S: domain socket definitions. +?S:. +?C:I_SYS_UN: +?C: This symbol, if defined, indicates to the C program that it should +?C: include <sys/un.h> to get UNIX domain socket definitions. +?C:. +?H:#$i_sysun I_SYS_UN /**/ +?H:. +?LINT:set i_sysun +: see if this is a sys/un.h system +set sys/un.h i_sysun +eval $inhdr + diff --git a/mcon/U/i_syswait.U b/mcon/U/i_syswait.U new file mode 100644 index 0000000..9830fac --- /dev/null +++ b/mcon/U/i_syswait.U @@ -0,0 +1,34 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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_syswait.U,v $ +?RCS: Revision 3.0 1993/08/18 12:08:42 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?X: +?X: This unit looks wether <sys/wait.h> is available or not +?X: +?MAKE:i_syswait: Inhdr +?MAKE: -pick add $@ %< +?S:i_syswait: +?S: This variable conditionally defines I_SYS_WAIT, which indicates +?S: to the C program that it should include <sys/wait.h>. +?S:. +?C:I_SYS_WAIT (I_SYSWAIT): +?C: This symbol, if defined, indicates to the C program that it should +?C: include <sys/wait.h>. +?C:. +?H:#$i_syswait I_SYS_WAIT /**/ +?H:. +?LINT:set i_syswait +: see if this is a syswait system +set sys/wait.h i_syswait +eval $inhdr + diff --git a/mcon/U/i_termio.U b/mcon/U/i_termio.U new file mode 100644 index 0000000..1f564ea --- /dev/null +++ b/mcon/U/i_termio.U @@ -0,0 +1,123 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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_termio.U,v $ +?RCS: Revision 3.0.1.4 1994/10/29 16:20:54 ram +?RCS: patch36: call ./usg and ./Cppsym explicitely instead of relying on PATH +?RCS: +?RCS: Revision 3.0.1.3 1994/08/29 16:26:38 ram +?RCS: patch32: don't include all threee I_* symbols in config.h +?RCS: patch32: (had forgotten to undo this part last time) +?RCS: +?RCS: Revision 3.0.1.2 1994/05/13 15:25:03 ram +?RCS: patch27: undone ADO's fix in previous patch since it was useless +?RCS: +?RCS: Revision 3.0.1.1 1994/05/06 15:05:23 ram +?RCS: patch23: now include all three defines in config.h (ADO) +?RCS: +?RCS: Revision 3.0 1993/08/18 12:08:44 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:i_termio i_sgtty i_termios: test Inlibc Cppsym Guess Setvar Findhdr Warn +?MAKE: -pick add $@ %< +?S:i_termio: +?S: This variable conditionally defines the I_TERMIO symbol, which +?S: indicates to the C program that it should include <termio.h> rather +?S: than <sgtty.h>. +?S:. +?S:i_termios: +?S: This variable conditionally defines the I_TERMIOS symbol, which +?S: indicates to the C program that the POSIX <termios.h> file is +?S: to be included. +?S:. +?S:i_sgtty: +?S: This variable conditionally defines the I_SGTTY symbol, which +?S: indicates to the C program that it should include <sgtty.h> rather +?S: than <termio.h>. +?S:. +?C:I_TERMIO: +?C: This symbol, if defined, indicates that the program should include +?C: <termio.h> rather than <sgtty.h>. There are also differences in +?C: the ioctl() calls that depend on the value of this symbol. +?C:. +?C:I_TERMIOS: +?C: This symbol, if defined, indicates that the program should include +?C: the POSIX termios.h rather than sgtty.h or termio.h. +?C: There are also differences in the ioctl() calls that depend on the +?C: value of this symbol. +?C:. +?C:I_SGTTY: +?C: This symbol, if defined, indicates that the program should include +?C: <sgtty.h> rather than <termio.h>. There are also differences in +?C: the ioctl() calls that depend on the value of this symbol. +?C:. +?H:#$i_termio I_TERMIO /**/ +?H:#$i_termios I_TERMIOS /**/ +?H:#$i_sgtty I_SGTTY /**/ +?H:. +?T:val2 val3 +?LINT:set i_termio i_sgtty i_termios +: see if this is a termio system +val="$undef" +val2="$undef" +val3="$undef" +?X: Prefer POSIX-approved termios.h over all else +if $test `./findhdr termios.h`; then + set tcsetattr i_termios + eval $inlibc + val3="$i_termios" +fi +echo " " +case "$val3" in +"$define") echo "You have POSIX termios.h... good!" >&4;; +*) if ./Cppsym pyr; then + case "`/bin/universe`" in + ucb) if $test `./findhdr sgtty.h`; then + val2="$define" + echo "<sgtty.h> found." >&4 + else + echo "System is pyramid with BSD universe." + ./warn "<sgtty.h> not found--you could have problems." + fi;; + *) if $test `./findhdr termio.h`; then + val="$define" + echo "<termio.h> found." >&4 + else + echo "System is pyramid with USG universe." + ./warn "<termio.h> not found--you could have problems." + fi;; + esac +?X: Start with USG to avoid problems if both usg/bsd was guessed + elif ./usg; then + if $test `./findhdr termio.h`; then + echo "<termio.h> found." >&4 + val="$define" + elif $test `./findhdr sgtty.h`; then + echo "<sgtty.h> found." >&4 + val2="$define" + else + ./warn "Neither <termio.h> nor <sgtty.h> found--cross fingers!" + fi + else + if $test `./findhdr sgtty.h`; then + echo "<sgtty.h> found." >&4 + val2="$define" + elif $test `./findhdr termio.h`; then + echo "<termio.h> found." >&4 + val="$define" + else + ./warn "Neither <sgtty.h> nor <termio.h> found--cross fingers!" + fi + fi;; +esac +set i_termio; eval $setvar +val=$val2; set i_sgtty; eval $setvar +val=$val3; set i_termios; eval $setvar + diff --git a/mcon/U/i_time.U b/mcon/U/i_time.U new file mode 100644 index 0000000..cdf1519 --- /dev/null +++ b/mcon/U/i_time.U @@ -0,0 +1,171 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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_time.U,v $ +?RCS: Revision 3.0 1993/08/18 12:08:45 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?X: +?X: This unit finds which "time" include to use. If 'timezone' is used by the +?X: program, we also try to find which header should be included. Eventually, +?X: we look for <sys/select.h> if I_SYSSELECT is used, to get struct timeval. +?X: +?MAKE:i_time i_systime i_systimek timeincl: cat cc ccflags contains rm \ + echo n c +i_sysselct Findhdr +?MAKE: -pick add $@ %< +?S:i_time: +?S: This variable conditionally defines I_TIME, which indicates +?S: to the C program that it should include <time.h>. +?S:. +?S:i_systime: +?S: This variable conditionally defines I_SYS_TIME, which indicates +?S: to the C program that it should include <sys/time.h>. +?S:. +?S:i_systimek: +?S: This variable conditionally defines I_SYS_TIME_KERNEL, which +?S: indicates to the C program that it should include <sys/time.h> +?S: with KERNEL defined. +?S:. +?S:timeincl: +?S: This variable holds the full path of the included time header(s). +?S:. +?C:I_TIME (USE_TIME_H): +?C: This symbol, if defined, indicates to the C program that it should +?C: include <time.h>. +?C:. +?C:I_SYS_TIME (I_SYSTIME USE_SYS_TIME_H NO_TIME_WITH_SYS_TIME): +?C: This symbol, if defined, indicates to the C program that it should +?C: include <sys/time.h>. +?C:. +?C:I_SYS_TIME_KERNEL (I_SYSTIMEKERNEL): +?C: This symbol, if defined, indicates to the C program that it should +?C: include <sys/time.h> with KERNEL defined. +?C:. +?H:#$i_time I_TIME /**/ +?H:#$i_systime I_SYS_TIME /**/ +?H:#$i_systimek I_SYS_TIME_KERNEL /**/ +?H:. +?W::timezone +?T:xselect flags sysselect s_timeval s_timezone +?LINT:change i_sysselct +: see if we should include time.h, sys/time.h, or both +echo " " +echo "Testing to see if we should include <time.h>, <sys/time.h> or both." >&4 +$echo $n "I'm now running the test program...$c" +$cat >try.c <<'EOCP' +#include <sys/types.h> +#ifdef I_TIME +#include <time.h> +#endif +#ifdef I_SYSTIME +#ifdef SYSTIMEKERNEL +#define KERNEL +#endif +#include <sys/time.h> +#endif +#ifdef I_SYSSELECT +#include <sys/select.h> +#endif +int main() +{ + struct tm foo; +#ifdef S_TIMEVAL + struct timeval bar; +#endif +#ifdef S_TIMEZONE + struct timezone tzp; +#endif + if (foo.tm_sec == foo.tm_sec) + exit(0); +#ifdef S_TIMEVAL + if (bar.tv_sec == bar.tv_sec) + exit(0); +#endif + exit(1); +} +EOCP +flags='' +@if I_SYSSELECT +if $contains 'timeval.*{' `./findhdr sys/select.h` >/dev/null 2>&1; then + xselect='-DI_SYSSELECT' +else + xselect='' +fi +@end +@if timezone +for s_timezone in '-DS_TIMEZONE' ''; do +@else +s_timezone='' +@end +?X: Every package is given a try with 'struct timeval' +@if I_SYSSELECT +for sysselect in $xselect ''; do +@else +sysselect='' +@end +for s_timeval in '-DS_TIMEVAL' ''; do +for i_systimek in '' '-DSYSTIMEKERNEL'; do +for i_time in '' '-DI_TIME'; do +for i_systime in '-DI_SYSTIME' ''; do + case "$flags" in + '') $echo $n ".$c" + if $cc $ccflags \ + $i_time $i_systime $i_systimek $sysselect $s_timeval $s_timezone \ + -o try try.c >/dev/null 2>&1 ; then + set X $i_time $i_systime $i_systimek $sysselect $s_timeval + shift + flags="$*" + echo " " + $echo $n "Succeeded with $flags$c" + fi + ;; + esac +done +done +done +done +@if I_SYSSELECT +done +@end +@if timezone +done +@end +timeincl='' +echo " " +case "$flags" in +*SYSTIMEKERNEL*) i_systimek="$define" + timeincl=`./findhdr sys/time.h` + echo "We'll include <sys/time.h> with KERNEL defined." >&4;; +*) i_systimek="$undef";; +esac +case "$flags" in +*I_TIME*) i_time="$define" + timeincl=`./findhdr time.h`" $timeincl" + echo "We'll include <time.h>." >&4;; +*) i_time="$undef";; +esac +case "$flags" in +*I_SYSTIME*) i_systime="$define" + timeincl=`./findhdr sys/time.h`" $timeincl" + echo "We'll include <sys/time.h>." >&4;; +*) i_systime="$undef";; +esac +@if I_SYSSELECT +case "$flags" in +*I_SYSSELECT*) i_sysselct="$define" + timeincl=`./findhdr sys/select.h`" $timeincl" + echo "We'll also include <sys/select.h> to get struct timeval." >&4;; +*) case "$i_sysselct" in + '') i_sysselct="$undef";; + esac +esac +@end +$rm -f try.c try + diff --git a/mcon/U/i_unistd.U b/mcon/U/i_unistd.U new file mode 100644 index 0000000..3e199ab --- /dev/null +++ b/mcon/U/i_unistd.U @@ -0,0 +1,31 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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_unistd.U,v $ +?RCS: Revision 3.0 1993/08/18 12:08:46 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:i_unistd: Inhdr +?MAKE: -pick add $@ %< +?S:i_unistd: +?S: This variable conditionally defines the I_UNISTD symbol, and indicates +?S: whether a C program should include <unistd.h>. +?S:. +?C:I_UNISTD: +?C: This symbol, if defined, indicates to the C program that it should +?C: include <unistd.h>. +?C:. +?H:#$i_unistd I_UNISTD /**/ +?H:. +?LINT:set i_unistd +: see if this is a unistd.h system +set unistd.h i_unistd +eval $inhdr + diff --git a/mcon/U/i_utime.U b/mcon/U/i_utime.U new file mode 100644 index 0000000..23601e7 --- /dev/null +++ b/mcon/U/i_utime.U @@ -0,0 +1,31 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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_utime.U,v $ +?RCS: Revision 3.0 1993/08/18 12:08:47 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:i_utime: Inhdr +?MAKE: -pick add $@ %< +?S:i_utime: +?S: This variable conditionally defines the I_UTIME symbol, and indicates +?S: whether a C program should include <utime.h>. +?S:. +?C:I_UTIME: +?C: This symbol, if defined, indicates to the C program that it should +?C: include <utime.h>. +?C:. +?H:#$i_utime I_UTIME /**/ +?H:. +?LINT:set i_utime +: see if this is an utime system +set utime.h i_utime +eval $inhdr + diff --git a/mcon/U/i_values.U b/mcon/U/i_values.U new file mode 100644 index 0000000..6ff6d2b --- /dev/null +++ b/mcon/U/i_values.U @@ -0,0 +1,35 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1996, Andy Dougherty +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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_values.U,v $ +?RCS: Revision 3.0.1.1 1997/02/28 15:48:34 ram +?RCS: patch61: created +?RCS: +?MAKE:i_values: Inhdr +?MAKE: -pick add $@ %< +?S:i_values: +?S: This variable conditionally defines the I_VALUES symbol, and indicates +?S: whether a C program may include <values.h> to get symbols like MAXLONG +?S: and friends. +?S:. +?C:I_VALUES: +?C: This symbol, if defined, indicates to the C program that it should +?C: include <values.h> to get definition of symbols like MINFLOAT or +?C: MAXLONG, i.e. machine dependant limitations. Probably, you +?C: should use <limits.h> instead, if it is available. +?C:. +?H:#$i_values I_VALUES /**/ +?H:. +?LINT:set i_values +: see if this is a values.h system +set values.h i_values +eval $inhdr + diff --git a/mcon/U/i_varhdr.U b/mcon/U/i_varhdr.U new file mode 100644 index 0000000..d7629d4 --- /dev/null +++ b/mcon/U/i_varhdr.U @@ -0,0 +1,164 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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_varhdr.U,v $ +?RCS: Revision 3.0.1.3 1997/02/28 15:54:42 ram +?RCS: patch61: varargs script now starts with leading "startsh" +?RCS: +?RCS: Revision 3.0.1.2 1994/10/29 16:21:02 ram +?RCS: patch36: added ?F: line for metalint file checking +?RCS: +?RCS: Revision 3.0.1.1 1994/05/13 15:26:05 ram +?RCS: patch27: this unit now supersedes old i_stdarg.U and i_varargs.U +?RCS: patch27: modified to avoid spurious Whoa warnings (ADO) +?RCS: +?RCS: Revision 3.0 1993/08/18 12:08:49 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:i_stdarg i_varargs i_varhdr: cat +cc +ccflags rm test Setvar \ + Findhdr Warn startsh _o +?MAKE: -pick add $@ %< +?S:i_stdarg: +?S: This variable conditionally defines the I_STDARG symbol, which +?S: indicates to the C program that <stdarg.h> exists and should +?S: be included. +?S:. +?S:i_varargs: +?S: This variable conditionally defines I_VARARGS, which indicates +?S: to the C program that it should include <varargs.h>. +?S:. +?S:i_varhdr: +?S: Contains the name of the header to be included to get va_dcl definition. +?S: Typically one of varargs.h or stdarg.h. +?S:. +?C:I_STDARG: +?C: This symbol, if defined, indicates that <stdarg.h> exists and should +?C: be included. +?C:. +?C:I_VARARGS: +?C: This symbol, if defined, indicates to the C program that it should +?C: include <varargs.h>. +?C:. +?H:#$i_stdarg I_STDARG /**/ +?H:#$i_varargs I_VARARGS /**/ +?H:. +?W:%<:va_dcl +?F:!varargs +?T:valstd +?LINT:set i_stdarg i_varargs +?X: +?X: Don't use setvar because the varags test below might override these. +?X: Actually, the messages here are just informative. We don't wish to set +?X: i_varargs or i_stdarg to their final value before knowing which of the +?X: two we'll include. +?X: +: see if stdarg is available +echo " " +if $test `./findhdr stdarg.h`; then + echo "<stdarg.h> found." >&4 + valstd="$define" +else + echo "<stdarg.h> NOT found." >&4 + valstd="$undef" +fi + +: see if varags is available +echo " " +if $test `./findhdr varargs.h`; then + echo "<varargs.h> found." >&4 +else + echo "<varargs.h> NOT found, but that's ok (I hope)." >&4 +fi + +?X: +?X: if you have stdarg.h, you need to support prototypes to actually use it; +?X: but if stdarg.h exists and the compiler doesn't support prototypes (for some +?X: bizarre reason), we'll fall back to varargs.h anyway so it's not so bad. +?X: +: set up the varargs testing programs +$cat > varargs.c <<EOP +#ifdef I_STDARG +#include <stdarg.h> +#endif +#ifdef I_VARARGS +#include <varargs.h> +#endif + +#ifdef I_STDARG +int f(char *p, ...) +#else +int f(va_alist) +va_dcl +#endif +{ + va_list ap; +#ifndef I_STDARG + char *p; +#endif +#ifdef I_STDARG + va_start(ap,p); +#else + va_start(ap); + p = va_arg(ap, char *); +#endif + va_end(ap); +} +EOP +$cat > varargs <<EOP +$startsh +if $cc -c $ccflags -D\$1 varargs.c >/dev/null 2>&1; then + echo "true" +else + echo "false" +fi +$rm -f varargs$_o +EOP +chmod +x varargs + +: now check which varargs header should be included +echo " " +i_varhdr='' +case "$valstd" in +"$define") + if `./varargs I_STDARG`; then + val='stdarg.h' + elif `./varargs I_VARARGS`; then + val='varargs.h' + fi + ;; +*) + if `./varargs I_VARARGS`; then + val='varargs.h' + fi + ;; +esac +case "$val" in +'') + ./warn "I could not find the definition for va_dcl... You have problems..." + val="$undef"; set i_stdarg; eval $setvar + val="$undef"; set i_varargs; eval $setvar + ;; +*) + set i_varhdr + eval $setvar + case "$i_varhdr" in + stdarg.h) + val="$define"; set i_stdarg; eval $setvar + val="$undef"; set i_varargs; eval $setvar + ;; + varargs.h) + val="$undef"; set i_stdarg; eval $setvar + val="$define"; set i_varargs; eval $setvar + ;; + esac + echo "We'll include <$i_varhdr> to get va_dcl definition." >&4;; +esac +$rm -f varargs* + diff --git a/mcon/U/i_vfork.U b/mcon/U/i_vfork.U new file mode 100644 index 0000000..4a628fd --- /dev/null +++ b/mcon/U/i_vfork.U @@ -0,0 +1,40 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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_vfork.U,v $ +?RCS: Revision 3.0.1.1 1994/05/06 15:05:44 ram +?RCS: patch23: avoid inclusion of <vfork.h> if no vfork() used (ADO) +?RCS: +?RCS: Revision 3.0 1993/08/18 12:08:50 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:i_vfork: Inhdr d_vfork +?MAKE: -pick add $@ %< +?S:i_vfork: +?S: This variable conditionally defines the I_VFORK symbol, and indicates +?S: whether a C program should include vfork.h. +?S:. +?C:I_VFORK: +?C: This symbol, if defined, indicates to the C program that it should +?C: include vfork.h. +?C:. +?H:#$i_vfork I_VFORK /**/ +?H:. +: see if this is a vfork system +case "$d_vfork" in +"$define") + set vfork.h i_vfork + eval $inhdr + ;; +*) + i_vfork="$undef" + ;; +esac + diff --git a/mcon/U/i_whoami.U b/mcon/U/i_whoami.U new file mode 100644 index 0000000..e30fd19 --- /dev/null +++ b/mcon/U/i_whoami.U @@ -0,0 +1,35 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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_whoami.U,v $ +?RCS: Revision 3.0.1.1 1993/08/25 14:02:21 ram +?RCS: patch6: added default for i_whoami +?RCS: +?RCS: Revision 3.0 1993/08/18 12:08:50 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:i_whoami: Inhdr +?MAKE: -pick add $@ %< +?S:i_whoami (d_whoami): +?S: This variable conditionally defines the I_WHOAMI symbol, which +?S: indicates to the C program that it should include <whoami.h>. +?S:. +?C:I_WHOAMI (WHOAMI): +?C: This symbol, if defined, indicates that the program may include +?C: <whoami.h>. +?C:. +?H:#$i_whoami I_WHOAMI /**/ +?H:. +?D:i_whoami='' +?LINT:set i_whoami +: see if there is a whoami.h file +set whoami.h i_whoami +eval $inhdr + diff --git a/mcon/U/inc.U b/mcon/U/inc.U new file mode 100644 index 0000000..2c1f4ce --- /dev/null +++ b/mcon/U/inc.U @@ -0,0 +1,39 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: inc.U,v $ +?RCS: Revision 3.0 1993/08/18 12:08:51 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:inc incexp: Loc Oldconfig Getfile usrinc +?MAKE: -pick add $@ %< +?S:inc: +?S: This variable holds the name of the directory in which the user wants +?S: to put public header files for the package in question. It is most +?S: often a local directory such as /usr/local/include. +?S:. +?S:incexp: +?S: This is the same as the inc variable, but is filename expaned +?S: at configuration time for convenient use in your makefiles. +?S:. +: determine where public header files go +case "$inc" in +'') + dflt=`./loc . "." /usr/local/include /usr/include/local $usrinc` + ;; +*) dflt="$inc" + ;; +esac +fn=d~ +rp='Where do you want to put the public header files?' +. ./getfile +inc="$ans" +incexp="$ansexp" + diff --git a/mcon/U/install.U b/mcon/U/install.U new file mode 100644 index 0000000..5b4fdf9 --- /dev/null +++ b/mcon/U/install.U @@ -0,0 +1,194 @@ +?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: install.U,v $ +?RCS: Revision 3.0.1.2 1995/09/25 09:16:37 ram +?RCS: patch59: all possible install programs are now looked for +?RCS: +?RCS: Revision 3.0.1.1 1995/01/11 15:30:41 ram +?RCS: patch45: created +?RCS: +?MAKE:install installdir: Loc Oldconfig Getfile cat test startsh rm +cc \ + eunicefix package contains mkdir echo n c +?MAKE: -pick add $@ %< +?S:install: +?S: This variable contains the name of an install program that can accept +?S: BSD-style arguments. It must correctly support -c, -s, and -m at least. +?S: It is a fully qualified pathname when found. If you have a local +?S: install.SH file at the root directory of your package, it is assumed to +?S: be the default script emulating a BSD install and the variable will be +?S: set to ./install. Otherwise, it is set to plain 'install', relying on +?S: the user's PATH to perform miracles. +?S:. +?S:installdir: +?S: This variable contains the name of a program that can install nested +?S: directories. Often set to 'mkdir -p', it can also be 'install -d' if +?S: you have such a beast and lack the former. If you have an install.SH +?S: file at the root directory of your package, it will be used in last +?S: resort, setting the variable to './install -d'. Otherwise, it is set to +?S: plain 'mkdir', and cross your fingers! +?S:. +?T:dir file tryit prog creatdir either +?F:!tryinst +: locate a BSD compatible install program +echo " " +echo "Looking for a BSD-compatible install program..." >&4 +@if installdir +creatdir='' +@end +case "$install" in +'') + tryit='' + for dir in $pth; do + for file in ginstall installbsd scoinst install; do + if $test -f $dir/$file; then + tryit="$tryit $dir/$file" + fi + done + done + $cat >try.c <<EOC +int main() +{ + printf("OK\n"); + exit(0); +} +EOC + if $cc -o try try.c >/dev/null 2>&1; then + cp try try.ns + strip try >/dev/null 2>&1 + else + echo "(I can't seem to compile a trivial C program -- bypassing.)" + echo "try" >try + cp try try.ns + fi + $cat >tryinst <<EOS +$startsh +$rm -rf foo d +@if installdir +\$1 -d foo/bar +@end +$mkdir d +\$1 -c -m 764 try.ns d +\$1 -c -s -m 642 try.ns d/try +EOS + chmod +x tryinst + $eunicefix tryinst + dflt='' + either='' + for prog in $tryit; do + $echo $n "Checking $prog... $c" + ./tryinst $prog >/dev/null 2>&1 +@if installdir + if $test -d foo/bar; then + creatdir="$prog -d" + fi +@end + (ls -l d/try >try.ls; ls -l d/try.ns >tryno.ls) 2>/dev/null + if (cmp -s d/try try && cmp -s d/try.ns try.ns && \ + $contains 'rwxrw-r--' tryno.ls && \ + $contains 'rw-r---w-' try.ls) >/dev/null 2>&1 + then + dflt="$prog" + echo "ok, that will do." + break + fi + echo "not good$either." + either=' either' + $rm -f try*.ls + done + $rm -rf foo d tryinst try try*.ls try.* + case "$dflt" in + '') +@if {test -f ../install.SH} + echo "Hopefully, $package comes with its own install script!" + dflt='./install' +@else + dflt='install' +@end + ;; + esac + ;; +*) dflt="$install";; +esac +$cat <<EOM + +I will be requiring a BSD-compatible install program (one that allows +options like -s to strip executables or -m to specify a file mode) to +install $package. + +If the question below contains a fully qualified default path, then it +is probably ok. If it is an unqualified name such as 'install', then it +means I was unable to find out a good install program I could use. If +@if {test -f ../install.SH} +you know of one, please tell me about it. If the default is './install', +then I shall be using the install script supplied with $package. +@else +you know of one, please tell me about it. +@end + +EOM +@if {test -f ../install.SH} +fn='/fe~(install,./install)' +@else +fn='/fe~(install)' +@end +rp='Which install program shall I use?' +. ./getfile +install="$ans" + +@if installdir +: how can we create nested directories? +echo " " +echo "Ok, let's see how we can create nested directories..." >&4 +case "$installdir" in +'') +?X: First time, maybe we already found out a working one in $creatdir above... +?X: Prefer "mkdir -p" because of bugs in GNU install when not running as root + $mkdir -p foo/bar >/dev/null 2>&1 + if $test -d foo/bar; then + echo "Great, we can build them using 'mkdir -p'." + creatdir='mkdir -p' + else + case "$creatdir" in + '') + if eval "$install -d foo/bar"; $test -d foo/bar; then + creatdir="install -d" + echo "It looks like '$creatdir' will do it for us." + fi + ;; + *) + eval "$creatdir foo/bar" >/dev/null 2>&1 + if $test -d foo/bar; then + echo "Ah! We can use '$creatdir' to do just that." + else + creatdir='' + fi + ;; + esac + fi + $rm -rf foo + case "$creatdir" in + '') + echo "Heck! Another ancient system lacking the comfort of modern ones!" +@if {test -f ../install.SH} + echo "You can thank $package for bringing you its own install script!" + installdir='./install -d' +@else + echo "We have no choice but to use plain old 'mkdir' -- wish me luck!" + installdir=mkdir +@end + ;; + *) installdir="$creatdir";; + esac + ;; +*) echo "As you already told me, '$installdir' should work.";; +esac + +@end diff --git a/mcon/U/intsize.U b/mcon/U/intsize.U new file mode 100644 index 0000000..38c5414 --- /dev/null +++ b/mcon/U/intsize.U @@ -0,0 +1,124 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: intsize.U,v $ +?RCS: Revision 3.0.1.2 1997/02/28 15:55:26 ram +?RCS: patch61: avoid prompting the user if the test runs ok +?RCS: patch61: moved code from longsize.U into there +?RCS: patch61: new tests for shortsize as well +?RCS: +?RCS: Revision 3.0.1.1 1994/10/29 16:21:06 ram +?RCS: patch36: added ?F: line for metalint file checking +?RCS: +?RCS: Revision 3.0 1993/08/18 12:08:52 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:intsize longsize shortsize: \ + Myread cat rm +cc +optimize +ccflags +ldflags +libs +?MAKE: -pick add $@ %< +?S:intsize: +?S: This variable contains the value of the INTSIZE symbol, which +?S: indicates to the C program how many bytes there are in an int. +?S:. +?S:longsize: +?S: This variable contains the value of the LONGSIZE symbol, which +?S: indicates to the C program how many bytes there are in a long. +?S:. +?S:shortsize: +?S: This variable contains the value of the SHORTSIZE symbol which +?S: indicates to the C program how many bytes there are in a short. +?S:. +?C:INTSIZE: +?C: This symbol contains the value of sizeof(int) so that the C +?C: preprocessor can make decisions based on it. +?C:. +?C:LONGSIZE: +?C: This symbol contains the value of sizeof(long) so that the C +?C: preprocessor can make decisions based on it. +?C:. +?C:SHORTSIZE: +?C: This symbol contains the value of sizeof(short) so that the C +?C: preprocessor can make decisions based on it. +?C:. +?H:#define INTSIZE $intsize /**/ +?H:#define LONGSIZE $longsize /**/ +?H:#define SHORTSIZE $shortsize /**/ +?H:. +?F:!intsize.out !intsize +: check for lengths of integral types +echo " " +case "$intsize" in +'') + echo "Checking to see how big your integers are..." >&4 + $cat >intsize.c <<'EOCP' +#include <stdio.h> +int main() +{ +@if INTSIZE || intsize + printf("intsize=%d;\n", sizeof(int)); +@end +@if LONGSIZE || longsize + printf("longsize=%d;\n", sizeof(long)); +@end +@if SHORTSIZE || shortsize + printf("shortsize=%d;\n", sizeof(short)); +@end + fflush(stdout); + exit(0); +} +EOCP +# If $libs contains -lsfio, and sfio is mis-configured, then it +# sometimes (apparently) runs and exits with a 0 status, but with no +# output!. Thus we check with test -s whether we actually got any +# output. I think it has to do with sfio's use of _exit vs. exit, +# but I don't know for sure. --Andy Dougherty 1/27/97. + if $cc $optimize $ccflags $ldflags -o intsize intsize.c $libs >/dev/null 2>&1 && + ./intsize > intsize.out 2>/dev/null && test -s intsize.out ; then + eval `$cat intsize.out` +@if INTSIZE || intsize + echo "Your integers are $intsize bytes long." +@end +@if LONGSIZE || longsize + echo "Your long integers are $longsize bytes long." +@end +@if SHORTSIZE || shortsize + echo "Your short integers are $shortsize bytes long." +@end + else + $cat >&4 <<EOM +! +Help! I can't compile and run the intsize test program: please enlighten me! +(This is probably a misconfiguration in your system or libraries, and +you really ought to fix it. Still, I'll try anyway.) +! +EOM +@if INTSIZE || intsize + dflt=4 + rp="What is the size of an integer (in bytes)?" + . ./myread + intsize="$ans" +@end +@if LONGSIZE || longsize + dflt=$intsize + rp="What is the size of a long integer (in bytes)?" + . ./myread + longsize="$ans" +@end +@if SHORTSIZE || shortsize + dflt=2 + rp="What is the size of a short integer (in bytes)?" + . ./myread + shortsize="$ans" +@end + fi + ;; +esac +$rm -f intsize intsize.[co] intsize.out + diff --git a/mcon/U/ipc.U b/mcon/U/ipc.U new file mode 100644 index 0000000..3593441 --- /dev/null +++ b/mcon/U/ipc.U @@ -0,0 +1,171 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: ipc.U,v $ +?RCS: Revision 3.0 1993/08/18 12:08:53 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:ipc serve_shm serve_msg serve_inet_udp serve_inet_tcp serve_unix_udp \ + serve_unix_tcp: test Myread Oldconfig d_socket d_msg d_shm d_sem +?MAKE: -pick add $@ %< +?LINT:use d_msg d_sem +?S:ipc: +?S: This variable holds the type of IPC service we'll be using. Values +?S: include "ip", "shm", "msg", "cms" and "os9". We don't worry about +?S: cms or os9 here, because Configure doesn't run in those places--HMS. +?S:. +?S:serve_shm: +?S: This variable controls the definition of SERVE_SHM, which tells the +?S: C program to use USG shared memory for IPC. +?S:. +?S:serve_msg: +?S: This variable controls the definition of SERVE_MSG, which tells the +?S: C program to use USG message queues for IPC. +?S:. +?S:serve_inet_udp: +?S: This variable controls the definition of SERVE_INET_UDP, which tells +?S: the C program to enable InterNet-domain UDP support for IPC. +?S:. +?S:serve_inet_tcp: +?S: This variable controls the definition of SERVE_INET_TCP, which tells +?S: the C program to enable InterNet-domain TCP support for IPC. +?S:. +?S:serve_unix_udp: +?S: This variable controls the definition of SERVE_UNIX_UDP, which tells +?S: the C program to enable Unix-domain UDP support for IPC. +?S:. +?S:serve_unix_tcp: +?S: This variable controls the definition of SERVE_UNIX_TCP, which tells +?S: the C program to enable Unix-domain TCP support for IPC. +?S:. +?C:SERVE_SHM: +?C: If defined, tells the C program to use USG shared memory for IPC. +?C:. +?C:SERVE_MSG: +?C: If defined, tells the C program to use USG message queues for IPC. +?C:. +?C:SERVE_INET_UDP: +?C: If defined, tells the C program to enable InterNet-domain UDP +?C: support for IPC. +?C:. +?C:SERVE_INET_TCP: +?C: If defined, tells the C program to enable InterNet-domain TCP +?C: support for IPC. +?C:. +?C:SERVE_UNIX_UDP: +?C: If defined, tells the C program to enable Unix-domain UDP +?C: support for IPC. +?C:. +?C:SERVE_UNIX_TCP: +?C: If defined, tells the C program to enable Unix-domain TCP +?C: support for IPC. +?C:. +?H:#$serve_shm SERVE_SHM /**/ +?H:#$serve_msg SERVE_MSG /**/ +?H:#$serve_inet_udp SERVE_INET_UDP /**/ +?H:#$serve_inet_tcp SERVE_INET_TCP /**/ +?H:#$serve_unix_udp SERVE_UNIX_UDP /**/ +?H:#$serve_unix_tcp SERVE_UNIX_TCP /**/ +?H:. +?X: FIXME -- RAM +?INIT:serve_shm='' +?INIT:serve_msg="$undef" +?INIT:serve_inet_udp='' +?INIT:serve_inet_tcp='' +?INIT:serve_unix_udp='' +?INIT:serve_unix_tcp='' +: get IPC mechanism +echo " " +ipc='' +while $test -z "$ipc" +do + if $test "$ipc" != "shm" -a "$d_socket" = "$define"; then + ipc='' + if $test "$serve_inet_udp" = "$undef"; then + dflt=n + else + dflt=y + fi + rp='Provide InterNet-domain UDP service?' + . ./myread + dflt='' + case "$ans" in + n*) serve_inet_udp="$undef";; + *) + serve_inet_udp="$define" + ipc='ip' + ;; + esac + + if $test "$serve_inet_tcp" = "$define"; then + dflt=y + else + dflt=n + fi + rp='Provide InterNet-domain TCP service?' + . ./myread + dflt='' + case "$ans" in + n*) serve_inet_tcp="$undef";; + *) + serve_inet_tcp="$define" + ipc='ip' + ;; + esac + + if $test "$serve_unix_udp" = "$define"; then + dflt=y + else + dflt=n + fi + rp='Provide Unix-domain UDP service?' + . ./myread + dflt='' + case "$ans" in + n*) serve_unix_udp="$undef";; + *) + serve_unix_udp="$define" + ipc='ip' + ;; + esac + + if $test "$serve_unix_tcp" = "$define"; then + dflt=y + else + dflt=n + fi + rp='Provide Unix-domain TCP service?' + . ./myread + dflt='' + case "$ans" in + n*) serve_unix_tcp="$undef";; + *) + serve_unix_tcp="$define" + ipc='ip' + ;; + esac + else + serve_inet_udp="$undef" + serve_inet_tcp="$undef" + serve_unix_udp="$undef" + serve_unix_tcp="$undef" + fi + if $test "$ipc" != "ip" -a "$d_shm" = "$define"; then + echo "Providing USG shared memory IPC support." >&4 + serve_shm="$define" + ipc='shm' + else + serve_shm="$undef" + fi + if $test -z "$ipc"; then + echo "You must select an IPC mechanism." >&4 + fi +done + diff --git a/mcon/U/issymlink.U b/mcon/U/issymlink.U new file mode 100644 index 0000000..3655450 --- /dev/null +++ b/mcon/U/issymlink.U @@ -0,0 +1,85 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu> +?RCS: +?RCS: $Log: lns.U,v $ +?RCS: Revision 3.0.1.1 1994/06/20 07:05:52 ram +?RCS: patch30: created by ADO +?RCS: +?MAKE:issymlink: lns test rm +?MAKE: -pick add $@ %< +?S:issymlink: +?S: This variable holds the test command to test for a symbolic link +?S: (if they are supported). Typical values include 'test -h' and +?S: 'test -L'. +?S:. +?T:pth p +?LINT:change PATH test +: determine whether symbolic links are supported +echo " " +case "$lns" in +*"ln"*" -s") + echo "Checking how to test for symbolic links..." >&4 + $lns blurfl sym + if $test "X$issymlink" = X; then +?X: +?X: In some AIX 4 versions the (ksh) builtin test (-h) is broken. +?X: + case "$newsh" in + '') sh -c "PATH= test -h sym" >/dev/null 2>&1 ;; + *) $newsh -c "PATH= test -h sym" >/dev/null 2>&1 ;; + esac + if test $? = 0; then + issymlink="test -h" + else + echo "Your builtin 'test -h' may be broken." >&4 + case "$test" in + /*) ;; + *) pth=`echo $PATH | sed -e "s/$p_/ /g"` + for p in $pth + do + if test -f "$p/$test"; then + test="$p/$test" + break + fi + done + ;; + esac + case "$test" in + /*) + echo "Trying external '$test -h'." >&4 + issymlink="$test -h" + if $test ! -h sym >/dev/null 2>&1; then + echo "External '$test -h' is broken, too." >&4 + issymlink='' + fi + ;; + *) issymlink='' ;; + esac + fi + fi + if $test "X$issymlink" = X; then + if $test -L sym 2>/dev/null; then + issymlink="$test -L" + echo "The builtin '$test -L' worked." >&4 + fi + fi + if $test "X$issymlink" != X; then + echo "You can test for symbolic links with '$issymlink'." >&4 + else + echo "I do not know how you can test for symbolic links." >&4 + fi + $rm -f blurfl sym + ;; +*) echo "No symbolic links, so not testing for their testing..." >&4 + ;; +esac + diff --git a/mcon/U/kernel.U b/mcon/U/kernel.U new file mode 100644 index 0000000..f8e5ba6 --- /dev/null +++ b/mcon/U/kernel.U @@ -0,0 +1,63 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: kernel.U,v $ +?RCS: Revision 3.0 1993/08/18 12:08:54 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:kernel: Getfile test +?MAKE: -pick add $@ %< +?S:kernel: +?S: This variable becomes the (fully rooted) path name of the kernel. +?S:. +: find the name of the kernel. +echo " " +case "$kernel" in +'') + if $test -r /unix; then + dflt=/unix + elif $test -r /vmunix; then + dflt=/vmunix + elif $test -r /xenix; then + dflt=/xenix + elif $test -r /mach; then + dflt=/mach + elif $test -r /dgux; then + dflt=/dgux + elif $test -r /hp-ux; then + dflt=/hp-ux + elif $test -r /syst; then + dflt=/syst + elif $test -r /arix; then + dflt=/arix + elif $test -r /irix; then + dflt=/arix + else + dflt='unknown' + set X /*x + shift + case $# in + 1) + if $test -r "$1"; then + dflt="$1" + fi + ;; + esac + fi + ;; +*) + dflt="$kernel" + ;; +esac +fn=f +rp='What is the name of your kernel?' +. ./getfile +kernel="$ans" + diff --git a/mcon/U/lex.U b/mcon/U/lex.U new file mode 100644 index 0000000..0968494 --- /dev/null +++ b/mcon/U/lex.U @@ -0,0 +1,67 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: Orginal Author: Graham Stoney <greyham@research.canon.oz.au> +?RCS: +?RCS: $Log: lex.U,v $ +?RCS: Revision 3.0.1.3 1994/10/29 16:22:50 ram +?RCS: patch36: spurious single quote could cause Configure to crash +?RCS: patch36: (reported by Xavier Le Vourch <xavierl@eiffel.com>.) +?RCS: +?RCS: Revision 3.0.1.2 1994/08/29 16:27:09 ram +?RCS: patch32: added lexflags variable for lex flags setting +?RCS: +?RCS: Revision 3.0.1.1 1994/05/06 15:06:01 ram +?RCS: patch23: added trailing blank line for metalint +?RCS: +?RCS: Revision 3.0 1993/08/18 12:08:55 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:lex lexflags: Guess Myread Oldconfig flex test +?MAKE: -pick add $@ %< +?S:lex: +?S: This variable holds the name of the lexical analyser generator we +?S: want to use in the Makefile. It can be lex or flex. +?S:. +?S:lexflags: +?S: This variable holds any flags that should be passed to the lexical +?S: analyzer. It is up to the Makefile to use it. +?S:. +: determine lexical analyser generator +case "$lex" in +'') + dflt=lex;; +*) + dflt="$lex";; +esac +echo " " +if $test -f "$flex"; then + rp='Which lexical analyser generator (lex or flex) shall I use?' +else + rp='Which lexical analyser generator shall I use?' +fi +. ./myread +lex="$ans" + +@if lexflags +: if using lex this will normally be useless, but flex frequently takes args +echo " " +case "$lexflags" in +'') dflt='none';; +*) dflt="$lexflags";; +esac +rp="What flags should be given to $lex?" +. ./myread +case "$ans" in +none) lexflags='';; +*) lexflags="$ans";; +esac + +@end diff --git a/mcon/U/lib.U b/mcon/U/lib.U new file mode 100644 index 0000000..ab6257e --- /dev/null +++ b/mcon/U/lib.U @@ -0,0 +1,54 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: lib.U,v $ +?RCS: Revision 3.0.1.3 1995/09/25 09:16:47 ram +?RCS: patch59: unit is now forced to the top of Configure, if possible +?RCS: +?RCS: Revision 3.0.1.2 1995/01/30 14:38:08 ram +?RCS: patch49: can now handle installation prefix changes (from WED) +?RCS: +?RCS: Revision 3.0.1.1 1994/08/29 16:27:40 ram +?RCS: patch32: now uses installation prefix to set the default +?RCS: +?RCS: Revision 3.0 1993/08/18 12:08:56 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:lib libexp: Getfile Loc Oldconfig Prefixit Prefixup prefixexp +?MAKE: -pick add $@ %< +?Y:TOP +?S:lib: +?S: This variable holds the name of the directory in which the user wants +?S: to put public library files for the package in question. It is most +?S: often a local directory such as /usr/local/lib. Programs using this +?S: variable must be prepared to deal with filename expansion. +?S:. +?S:libexp: +?S: This variable is the same as the lib variable, but is filename expanded +?S: at configuration time, for convenient use in your makefiles. +?S:. +: determine where public libraries go +set lib lib +eval $prefixit +case "$lib" in +'') + dflt=`./loc . "." $prefixexp/lib /usr/local/lib /usr/lib /lib` + set dflt + eval $prefixup + ;; +*) dflt="$lib";; +esac +echo " " +fn=d~ +rp='Where do you want to put the public libraries?' +. ./getfile +lib="$ans" +libexp="$ansexp" + diff --git a/mcon/U/libc.U b/mcon/U/libc.U new file mode 100644 index 0000000..dafd669 --- /dev/null +++ b/mcon/U/libc.U @@ -0,0 +1,405 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: libc.U,v $ +?RCS: Revision 3.0.1.10 1997/02/28 15:56:48 ram +?RCS: patch61: replaced .a with $_a all over the place +?RCS: patch61: added support for HPUX-10 nm output +?RCS: +?RCS: Revision 3.0.1.9 1995/07/25 14:11:56 ram +?RCS: patch56: now knows about OS/2 platforms +?RCS: +?RCS: Revision 3.0.1.8 1995/05/12 12:20:47 ram +?RCS: patch54: made sure only most recent version of shared lib is picked +?RCS: patch54: final "nm -p" check now uses xscan and xrun like everybody +?RCS: patch54: can now grok linux nm output with lead __IO (ADO) +?RCS: patch54: added support for linux ELF output, using 'W' for alias (ADO) +?RCS: +?RCS: Revision 3.0.1.7 1994/10/29 16:23:40 ram +?RCS: patch36: now looks for shared libraries before anything else (ADO) +?RCS: patch36: added new nm output format (ADO) +?RCS: +?RCS: Revision 3.0.1.6 1994/08/29 16:28:10 ram +?RCS: patch32: added I-type symbols for nm output parsing on Linux +?RCS: +?RCS: Revision 3.0.1.5 1994/06/20 07:03:24 ram +?RCS: patch30: checks are now presented by succession of if/elif +?RCS: patch30: uniformized checks for shared objects with new so symbol +?RCS: +?RCS: Revision 3.0.1.4 1994/05/06 15:06:33 ram +?RCS: patch23: added shared library knowledge (ADO and WED) +?RCS: +?RCS: Revision 3.0.1.3 1994/01/24 14:12:17 ram +?RCS: patch16: can now export nm_extract as an internal-use only variable +?RCS: +?RCS: Revision 3.0.1.2 1993/09/13 16:09:03 ram +?RCS: patch10: added special handling for Apollo systems (WAD) +?RCS: +?RCS: Revision 3.0.1.1 1993/08/27 14:40:03 ram +?RCS: patch7: added entry for /usr/shlib/libc.so (OSF/1 machines) +?RCS: +?RCS: Revision 3.0 1993/08/18 12:08:57 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:libc libnames +nm_extract: echo n c rm test grep Getfile Myread \ + Oldconfig Loc sed libs incpath libpth ar runnm nm nm_opt nm_so_opt \ + contains xlibpth so osname trnl tr sort uniq _o _a +?MAKE: -pick add $@ %< +?S:libc: +?S: This variable contains the location of the C library. +?S:. +?S:libnames: +?S: The constructed list of library names. Normally empty, but hint files +?S: may set this for later perusal by Configure. +?S:. +?S:nm_extract: +?S: This variable holds the name of the extraction command used to process +?S: the output of nm and yield the list of defined symbols. It is used +?S: internally by Configure. +?S:. +?T:thislib try libnames xxx xscan xrun thisname com tans file +?F:!libnames !libc.tmp !tmp.imp +?LINT:change nm_opt runnm +?INIT:libnames='' +: Figure out where the libc is located +case "$runnm" in +true) +?X: indentation is wrong on purpose--RAM +: get list of predefined functions in a handy place +echo " " +case "$libc" in +'') libc=unknown + case "$libs" in + *-lc_s*) libc=`./loc libc_s$_a $libc $libpth` + esac + ;; +esac +case "$libs" in +'') ;; +*) for thislib in $libs; do + case "$thislib" in + -lc|-lc_s) + : Handle C library specially below. + ;; + -l*) + thislib=`echo $thislib | $sed -e 's/^-l//'` + if try=`./loc lib$thislib.$so.'*' X $libpth`; $test -f "$try"; then + : + elif try=`./loc lib$thislib.$so X $libpth`; $test -f "$try"; then + : + elif try=`./loc lib$thislib$_a X $libpth`; $test -f "$try"; then + : + elif try=`./loc $thislib$_a X $libpth`; $test -f "$try"; then + : + elif try=`./loc lib$thislib X $libpth`; $test -f "$try"; then + : + elif try=`./loc $thislib X $libpth`; $test -f "$try"; then + : + elif try=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$try"; then + : + else + try='' + fi + libnames="$libnames $try" + ;; + *) libnames="$libnames $thislib" ;; + esac + done + ;; +esac +?X: +?X: Some systems (e.g. DG/UX) use "environmental" links, which make the test +?X: -f fail. Ditto for symbolic links. So in order to reliably check the +?X: existence of a file, we use test -r. It will still fail with DG/UX links +?X: though, but at least it will detect symbolic links. At some strategic +?X: points, we make use of (test -h), using a sub-shell in case builtin test +?X: does not implement the -h check for symbolic links. This makes it +?X: possible to preset libc in a hint file for instance and have it show up +?X: as-is in the question. +?X: +xxx=normal +case "$libc" in +unknown) +?X: +?X: The sed below transforms .so.9 .so.12 into something like .so.0009 .so.0012, +?X: then sorts on it to allow keeping .so.12 instead of .so.9 as the latest +?X: up-to-date library. The initial filename (before sed munging, saved in hold +?X: space via 'h') is appended via 'G' before sorting, then the leading munged +?X: part is removed after sorting. Nice efficient work from Tye McQueen. +?X: The initial blurfl is here to prevent the trailing pipe from producing an +?X: empty string, causing Configure to output all its set variables! +?X: + set /lib/libc.$so + for xxx in $libpth; do + $test -r $1 || set $xxx/libc.$so + : The messy sed command sorts on library version numbers. + $test -r $1 || \ + set `echo blurfl; echo $xxx/libc.$so.[0-9]* | \ + tr ' ' $trnl | egrep -v '\.[A-Za-z]*$' | $sed -e ' + h + s/[0-9][0-9]*/0000&/g + s/0*\([0-9][0-9][0-9][0-9][0-9]\)/\1/g + G + s/\n/ /' | \ + $sort | $sed -e 's/^.* //'` + eval set \$$# + done + $test -r $1 || set /usr/ccs/lib/libc.$so + $test -r $1 || set /lib/libsys_s$_a + ;; +*) +?X: ensure the test below for the (shared) C library will fail + set blurfl + ;; +esac +if $test -r "$1"; then + echo "Your (shared) C library seems to be in $1." + libc="$1" +elif $test -r /lib/libc && $test -r /lib/clib; then +?X: +?X: Apollo has its C library in /lib/clib AND /lib/libc +?X: not to mention its math library in /lib/syslib... +?X: + echo "Your C library seems to be in both /lib/clib and /lib/libc." + xxx=apollo + libc='/lib/clib /lib/libc' + if $test -r /lib/syslib; then + echo "(Your math library is in /lib/syslib.)" +?X: Put syslib in libc -- not quite right, but won't hurt + libc="$libc /lib/syslib" + fi +elif $test -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then + echo "Your C library seems to be in $libc, as you said before." +?X: For mips, and... +elif $test -r $incpath/usr/lib/libc$_a; then + libc=$incpath/usr/lib/libc$_a; + echo "Your C library seems to be in $libc. That's fine." +elif $test -r /lib/libc$_a; then + libc=/lib/libc$_a; + echo "Your C library seems to be in $libc. You're normal." +else + if tans=`./loc libc$_a blurfl/dyick $libpth`; $test -r "$tans"; then + : + elif tans=`./loc libc blurfl/dyick $libpth`; $test -r "$tans"; then + libnames="$libnames "`./loc clib blurfl/dyick $libpth` + elif tans=`./loc clib blurfl/dyick $libpth`; $test -r "$tans"; then + : + elif tans=`./loc Slibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then + : + elif tans=`./loc Mlibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then + : + else + tans=`./loc Llibc$_a blurfl/dyick $xlibpth` + fi + if $test -r "$tans"; then + echo "Your C library seems to be in $tans, of all places." + libc=$tans + else + libc='blurfl' + fi +fi +if $test $xxx = apollo -o -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then + dflt="$libc" + cat <<EOM + +If the guess above is wrong (which it might be if you're using a strange +compiler, or your machine supports multiple models), you can override it here. + +EOM +else + dflt='' + echo $libpth | $tr ' ' $trnl | $sort | $uniq > libpath + cat >&4 <<EOM +I can't seem to find your C library. I've looked in the following places: + +EOM + $sed 's/^/ /' libpath + cat <<EOM + +None of these seems to contain your C library. I need to get its name... + +EOM +fi +fn=f +rp='Where is your C library?' +. ./getfile +libc="$ans" + +echo " " +echo $libc $libnames | $tr ' ' $trnl | $sort | $uniq > libnames +set X `cat libnames` +shift +xxx=files +case $# in 1) xxx=file; esac +echo "Extracting names from the following $xxx for later perusal:" >&4 +echo " " +$sed 's/^/ /' libnames >&4 +echo " " +$echo $n "This may take a while...$c" >&4 + +?X: +?X: Linux may need the special Dynamic option to nm for shared libraries. +?X: In general, this is stored in the nm_so_opt variable. +?X: Unfortunately, that option may be fatal on non-shared libraries. +?X: +for file in $*; do + case $file in + *$so*) $nm $nm_so_opt $nm_opt $file 2>/dev/null;; + *) $nm $nm_opt $file 2>/dev/null;; + esac +done >libc.tmp + +$echo $n ".$c" +?X: +?X: To accelerate processing, we look at the correct 'sed' command +?X: by using a small subset of libc.tmp, i.e. fprintf function. +?X: When we know which sed command to use, do the name extraction +?X: +$grep fprintf libc.tmp > libc.ptf +?X: +?X: In order to ehance readability and save some space, we define +?X: some variables that will be "eval"ed. +?X: +xscan='eval "<libc.ptf $com >libc.list"; $echo $n ".$c" >&4' +xrun='eval "<libc.tmp $com >libc.list"; echo "done." >&4' +?X: BSD-like output, I and W types added for Linux +?X: Some versions of Linux include a leading __IO in the symbol name. +?X: HPUX10 reportedly has trailing spaces, though I'm suprised it has +?X: BSD-like output. (AD). +xxx='[ADTSIW]' +if com="$sed -n -e 's/__IO//' -e 's/^.* $xxx *_[_.]*//p' -e 's/^.* $xxx *//p'";\ + eval $xscan;\ + $contains '^fprintf$' libc.list >/dev/null 2>&1; then + eval $xrun +?X: SYSV-like output +elif com="$sed -n -e 's/^__*//' -e 's/^\([a-zA-Z_0-9$]*\).*xtern.*/\1/p'";\ + eval $xscan;\ + $contains '^fprintf$' libc.list >/dev/null 2>&1; then + eval $xrun +elif com="$sed -n -e '/|UNDEF/d' -e '/FUNC..GL/s/^.*|__*//p'";\ + eval $xscan;\ + $contains '^fprintf$' libc.list >/dev/null 2>&1; then + eval $xrun +elif com="$sed -n -e 's/^.* D __*//p' -e 's/^.* D //p'";\ + eval $xscan;\ + $contains '^fprintf$' libc.list >/dev/null 2>&1; then + eval $xrun +elif com="$sed -n -e 's/^_//' -e 's/^\([a-zA-Z_0-9]*\).*xtern.*text.*/\1/p'";\ + eval $xscan;\ + $contains '^fprintf$' libc.list >/dev/null 2>&1; then + eval $xrun +elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p'";\ + eval $xscan;\ + $contains '^fprintf$' libc.list >/dev/null 2>&1; then + eval $xrun +elif com="$grep '|' | $sed -n -e '/|COMMON/d' -e '/|DATA/d' \ + -e '/ file/d' -e 's/^\([^ ]*\).*/\1/p'";\ + eval $xscan;\ + $contains '^fprintf$' libc.list >/dev/null 2>&1; then + eval $xrun +elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p' -e 's/^.*|FUNC |WEAK .*|//p'";\ + eval $xscan;\ + $contains '^fprintf$' libc.list >/dev/null 2>&1; then + eval $xrun +?X: mips nm output (sysV) +elif com="$sed -n -e 's/^__//' -e '/|Undef/d' -e '/|Proc/s/ .*//p'";\ + eval $xscan;\ + $contains '^fprintf$' libc.list >/dev/null 2>&1; then + eval $xrun +elif com="$sed -n -e 's/^.*|Proc .*|Text *| *//p'";\ + eval $xscan;\ + $contains '^fprintf$' libc.list >/dev/null 2>&1; then + eval $xrun +elif com="$sed -n -e '/Def. Text/s/.* \([^ ]*\)\$/\1/p'";\ + eval $xscan;\ + $contains '^fprintf$' libc.list >/dev/null 2>&1; then + eval $xrun +?X: OS/2 nm output +elif com="$sed -n -e 's/^[-0-9a-f ]*_\(.*\)=.*/\1/p'";\ + eval $xscan;\ + $contains '^fprintf$' libc.list >/dev/null 2>&1; then + eval $xrun +elif com="$sed -n -e 's/.*\.text n\ \ \ \.//p'";\ + eval $xscan;\ + $contains '^fprintf$' libc.list >/dev/null 2>&1; then + eval $xrun +?X: AIX nm output +elif com="sed -n -e 's/^__.*//' -e 's/[ ]*D[ ]*[0-9]*.*//p'";\ + eval $xscan;\ + $contains '^fprintf$' libc.list >/dev/null 2>&1; then + eval $xrun +else + $nm -p $* 2>/dev/null >libc.tmp + $grep fprintf libc.tmp > libc.ptf + if com="$sed -n -e 's/^.* [ADTSIW] *_[_.]*//p' -e 's/^.* [ADTSIW] //p'";\ + eval $xscan; $contains '^fprintf$' libc.list >/dev/null 2>&1 + then + nm_opt='-p' + eval $xrun + else + echo " " + echo "$nm didn't seem to work right. Trying $ar instead..." >&4 + com='' + if $ar t $libc > libc.tmp && \ + $contains '^fprintf$' libc.tmp >/dev/null 2>&1 + then + for thisname in $libnames $libc; do + $ar t $thisname >>libc.tmp + done + $sed -e "s/\\$_o\$//" < libc.tmp > libc.list + echo "Ok." >&4 + elif test "X$osname" = "Xos2" && $ar tv $libc > libc.tmp; then +?X: Repeat libc to extract forwarders to DLL entries too + for thisname in $libnames $libc; do + $ar tv $thisname >>libc.tmp +?X: Revision 50 of EMX has bug in ar: it will not extract forwarders +?X: to DLL entries. Use emximp which will extract exactly them. + emximp -o tmp.imp $thisname \ + 2>/dev/null && \ + $sed -e 's/^\([_a-zA-Z0-9]*\) .*$/\1/p' \ + < tmp.imp >>libc.tmp + $rm -f tmp.imp + done + $sed -e "s/\\$_o\$//" -e 's/^ \+//' < libc.tmp > libc.list + echo "Ok." >&4 + else + echo "$ar didn't seem to work right." >&4 + echo "Maybe this is a Cray...trying bld instead..." >&4 + if + bld t $libc | \ + $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" > libc.list && + $test -s libc.list + then + for thisname in $libnames; do + bld t $libnames | \ + $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" >>libc.list + $ar t $thisname >>libc.tmp + done + echo "Ok." >&4 + else + echo "That didn't work either." >&4 + echo "No problem, I'll be compiling test programs then..." >&4 + runnm=false + fi + fi + fi +fi +nm_extract="$com" +if $test -f /lib/syscalls.exp; then + echo " " + echo "Also extracting names from /lib/syscalls.exp for good ole AIX..." >&4 + $sed -n 's/^\([^ ]*\)[ ]*syscall[0-9]*[ ]*$/\1/p' \ + /lib/syscalls.exp >>libc.list +fi +?X: remember, indentation is wrong on purpose--RAM +;; +esac +$rm -f libnames libpath + diff --git a/mcon/U/libdbm.U b/mcon/U/libdbm.U new file mode 100644 index 0000000..07568e5 --- /dev/null +++ b/mcon/U/libdbm.U @@ -0,0 +1,47 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: libdbm.U,v $ +?RCS: Revision 3.0.1.1 1997/02/28 15:56:57 ram +?RCS: patch61: replaced .a with $_a all over the place +?RCS: +?RCS: Revision 3.0 1993/08/18 12:08:58 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:libdbm: test Loc libpth _a +?MAKE: -pick add $@ %< +?S:libdbm: +?S: This variable contains the argument to pass to the loader in order +?S: to get the dbm library routines. If there is no dbm or ndbm +?S: library, it is null. +?S:. +?T:xxx +: see if we should include -ldbm +echo " " +if $test -r /usr/lib/libndbm$_a || $test -r /usr/local/lib/libndbm$_a ; then + echo "-lndbm found." >&4 + libdbm='-lndbm' +elif $test -r /usr/lib/libdbm$_a || $test -r /usr/local/lib/libdbm$_a ; then + echo "-ldbm found." >&4 + libdbm='-ldbm' +else + xxx=`./loc libdbm$_a x $libpth` + case "$xxx" in + x) + echo "No dbm library found." >&4 + libdbm='' + ;; + *) + echo "DBM library found in $xxx." >&4 + libdbm="$xxx" + ;; + esac +fi + diff --git a/mcon/U/libflex.U b/mcon/U/libflex.U new file mode 100644 index 0000000..cf2c844 --- /dev/null +++ b/mcon/U/libflex.U @@ -0,0 +1,65 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: libflex.U,v $ +?RCS: Revision 3.0.1.3 1997/02/28 15:57:48 ram +?RCS: patch61: replaced .a with $_a all over the place +?RCS: +?RCS: Revision 3.0.1.2 1994/05/06 15:07:02 ram +?RCS: patch23: now uses full library path instead of -l notation +?RCS: +?RCS: Revision 3.0.1.1 1994/01/24 14:13:25 ram +?RCS: patch16: un-obsoleted this unit to allow smooth lex/flex compilations +?RCS: +?RCS: Revision 3.0 1993/08/18 12:08:59 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:libflex: Loc lex libpth _a +?MAKE: -pick add $@ %< +?S:libflex: +?S: This variable contains the argument to pass to the loader in order +?S: to get the flex/lex library routines. If there is no flex or flex +?S: library, it is null. +?S:. +?T:xxx +: see if we should include -lfl +echo " " +case "$lex" in +*flex) + xxx=`./loc libfl$_a x $libpth` + case "$xxx" in + x) + echo "No flex library found." >&4 + libflex='' + ;; + *) + echo "flex library found in $xxx." >&4 + libflex="$xxx" + ;; + esac + ;; +*lex) + xxx=`./loc libl$_a x $libpth` + case "$xxx" in + x) + echo "No lex library found." >&4 + libflex='' + ;; + *) + echo "lex library found in $xxx." >&4 + libflex="$xxx" + ;; + esac + ;; +*) +echo "You don't seem to have lex or flex, so I won't look for libraries." >&4 + ;; +esac + diff --git a/mcon/U/libnlist.U b/mcon/U/libnlist.U new file mode 100644 index 0000000..f0f81e6 --- /dev/null +++ b/mcon/U/libnlist.U @@ -0,0 +1,49 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: libnlist.U,v $ +?RCS: Revision 3.0.1.1 1997/02/28 16:08:02 ram +?RCS: patch61: added usrinc and mips on the dependency line +?RCS: patch61: make sure we call ./mips +?RCS: patch61: added a ?LINT: hint +?RCS: +?RCS: Revision 3.0 1993/08/18 12:09:00 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:libnlist: Loc libpth Guess usrinc _a +?MAKE: -pick add $@ %< +?S:libnlist (libmld): +?S: This variable contains the name of the library required to get the +?S: definition of the nlist() function. On a MIPS RISC/OS box, it is -lmld. +?S: Under Sys Vr4, it is -lelf. Otherwise, its value is empty. +?S:. +?T:xxx +?LINT:use usrinc +: see if we need a special library for 'nlist()' +echo " " +: How about doing this if nlist is not in libc... +if ./mips ; then + libnlist='-lmld' +else + xxx=`./loc libelf$_a x $libpth` + case "$xxx" in + x) ;; + *) + libnlist="$xxx" + ;; + esac +fi +case "$libnlist" in +'') echo "No special library for nlist() seems necessary." >&4 + ;; +*) echo "nlist() can be found in $libnlist." >&4 + ;; +esac + diff --git a/mcon/U/libnm.U b/mcon/U/libnm.U new file mode 100644 index 0000000..ac5d73b --- /dev/null +++ b/mcon/U/libnm.U @@ -0,0 +1,45 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: libnm.U,v $ +?RCS: Revision 3.0.1.1 1997/02/28 16:08:26 ram +?RCS: patch61: replaced .a with $_a all over the place +?RCS: +?RCS: Revision 3.0 1993/08/18 12:09:01 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:libnm: test Loc libpth _a +?MAKE: -pick add $@ %< +?S:libnm: +?S: This variable contains the argument to pass to the loader in order +?S: to get the new math library routines. If there is no new math +?S: library, it is null. +?S:. +?T:ans +?O: use libswanted='-lnm' instead (see libs.U). +: see if we should include -lnm +echo " " +if $test -r /usr/lib/libnm$_a || $test -r /usr/local/lib/libnm$_a ; then + echo "New math library found." >&4 + libnm='-lnm' +else + ans=`./loc libnm$_a x $libpth` + case "$ans" in + x) + echo "No nm library found--the normal math library will have to do." >&4 + libnm='' + ;; + *) + echo "New math library found in $ans." >&4 + libnm="$ans" + ;; + esac +fi + diff --git a/mcon/U/libpth.U b/mcon/U/libpth.U new file mode 100644 index 0000000..d80bb00 --- /dev/null +++ b/mcon/U/libpth.U @@ -0,0 +1,132 @@ +?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: libpth.U,v $ +?RCS: Revision 3.0.1.6 1997/02/28 16:08:49 ram +?RCS: patch61: new loclibpth variable +?RCS: +?RCS: Revision 3.0.1.5 1995/01/11 15:31:30 ram +?RCS: patch45: call ./mips instead of just mips (WED) +?RCS: +?RCS: Revision 3.0.1.4 1994/08/29 16:29:15 ram +?RCS: patch32: added /lib/pa1.1 for HP-UX specially tuned PA-RISC libs (ADO) +?RCS: patch32: fixed information message, making it clearer (ADO) +?RCS: +?RCS: Revision 3.0.1.3 1994/06/20 07:03:54 ram +?RCS: patch30: added /usr/shlib to glibpth for shared-only libraries +?RCS: +?RCS: Revision 3.0.1.2 1994/05/13 15:26:57 ram +?RCS: patch27: fixed a typo (libpth -> glibpth) +?RCS: +?RCS: Revision 3.0.1.1 1994/05/06 15:07:53 ram +?RCS: patch23: now asks for library directories to be searched (ADO) +?RCS: +?RCS: Revision 3.0 1993/08/18 12:09:02 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?X: +?X: This unit initializes the path for C library lookup. +?X: +?MAKE:libpth glibpth xlibpth plibpth loclibpth: \ + usrinc incpath test cat Myread Oldconfig +?MAKE: -pick add $@ %< +?S:libpth: +?S: This variable holds the general path (space-separated) used to find +?S: libraries. It is intended to be used by other units. +?S:. +?S:glibpth: +?S: This variable holds the general path (space-separated) used to +?S: find libraries. It may contain directories that do not exist on +?S: this platform, libpth is the cleaned-up version. +?S:. +?S:xlibpth: +?S: This variable holds extra path (space-separated) used to find +?S: libraries on this platform, for example CPU-specific libraries +?S: (on multi-CPU platforms) may be listed here. +?S:. +?S:loclibpth: +?S: This variable holds the paths (space-separated) used to find local +?S: libraries. It is prepended to libpth, and is intended to be easily +?S: set from the command line. +?S:. +?S:plibpth: +?S: Holds the private path used by Configure to find out the libraries. +?S: Its value is prepend to libpth. This variable takes care of special +?S: machines, like the mips. Usually, it should be empty. +?S:. +?T: xxx dlist +?LINT:use usrinc +?INIT:: change the next line if compiling for Xenix/286 on Xenix/386 +?INIT:xlibpth='/usr/lib/386 /lib/386' +?INIT:: Possible local library directories to search. +?INIT:loclibpth="/usr/local/lib /opt/local/lib /usr/gnu/lib" +?INIT:loclibpth="$loclibpth /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib" +?INIT: +?INIT:: general looking path for locating libraries +?INIT:glibpth="/lib /usr/lib $xlibpth" +?INIT:glibpth="$glibpth /usr/ccs/lib /usr/ucblib /usr/local/lib" +?X: /shlib is for Digital Unix 4.0 +?X: /usr/shlib is for OSF/1 systems. +?INIT:test -f /usr/shlib/libc.so && glibpth="/usr/shlib $glibpth" +?INIT:test -f /shlib/libc.so && glibpth="/shlib $glibpth" +?INIT: +?INIT:: Private path used by Configure to find libraries. Its value +?INIT:: is prepended to libpth. This variable takes care of special +?INIT:: machines, like the mips. Usually, it should be empty. +?INIT:plibpth='' +?INIT: +: Set private lib path +case "$plibpth" in +'') if ./mips; then +?X: on mips, we DO NOT want /lib, and we want $incpath/usr/lib + plibpth="$incpath/usr/lib /usr/local/lib /usr/ccs/lib" + fi;; +esac +case "$libpth" in +' ') dlist='';; +'') dlist="$loclibpth $plibpth $glibpth";; +*) dlist="$libpth";; +esac + +: Now check and see which directories actually exist, avoiding duplicates +libpth='' +for xxx in $dlist +do + if $test -d $xxx; then + case " $libpth " in + *" $xxx "*) ;; + *) libpth="$libpth $xxx";; + esac + fi +done +$cat <<'EOM' + +Some systems have incompatible or broken versions of libraries. Among +the directories listed in the question below, please remove any you +know not to be holding relevant libraries, and add any that are needed. +Say "none" for none. + +EOM +case "$libpth" in +'') dflt='none';; +*) +?X: strip leading space + set X $libpth + shift + dflt=${1+"$@"} + ;; +esac +rp="Directories to use for library searches?" +. ./myread +case "$ans" in +none) libpth=' ';; +*) libpth="$ans";; +esac + diff --git a/mcon/U/libs.U b/mcon/U/libs.U new file mode 100644 index 0000000..0a8feaa --- /dev/null +++ b/mcon/U/libs.U @@ -0,0 +1,242 @@ +?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: libs.U,v $ +?RCS: Revision 3.0.1.6 1997/02/28 16:09:11 ram +?RCS: patch61: replaced .a with $_a all over the place +?RCS: +?RCS: Revision 3.0.1.5 1995/07/25 14:12:05 ram +?RCS: patch56: now knows about OS/2 platforms +?RCS: +?RCS: Revision 3.0.1.4 1994/10/29 16:24:22 ram +?RCS: patch36: removed old broken thislib/thatlib processing (ADO) +?RCS: +?RCS: Revision 3.0.1.3 1994/06/20 07:05:44 ram +?RCS: patch30: code cleanup with if/elif by ADO and RAM +?RCS: patch30: undone patch23 for libswanted default setting +?RCS: +?RCS: Revision 3.0.1.2 1994/05/06 15:08:45 ram +?RCS: patch23: now includes ordered default libswanted variable (ADO) +?RCS: patch23: major cleanup for library lookups (ADO) +?RCS: +?RCS: Revision 3.0.1.1 1993/08/25 14:02:31 ram +?RCS: patch6: added default for libs +?RCS: +?RCS: Revision 3.0 1993/08/18 12:09:03 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:libs libsfound libsfiles libsdirs libspath libscheck: \ + test cat Myread Oldconfig Loc libpth package xlibpth so _a \ + +usesocks sed +cc +ccflags +ldflags rm +?MAKE: -pick add $@ %< +?S:libs: +?S: This variable holds the additional libraries we want to use. +?S: It is up to the Makefile to deal with it. The list can be empty. +?S:. +?S:libsfound: +?S: This variable holds the full pathnames of the libraries +?S: we found and accepted. +?S:. +?S:libsfiles: +?S: This variable holds the filenames aka basenames of the libraries +?S: we found and accepted. +?S:. +?S:libsdirs: +?S: This variable holds the directory names aka dirnames of the libraries +?S: we found and accepted, duplicates are removed. +?S:. +?S:libspath: +?S: This variable holds the directory names probed for libraries. +?S:. +?S:libscheck: +?S: This variable is intended to be set by hint files, if needed. +?S: It should contain shell code that will be eval'ed with $xxx holding +?S: some library file. It may change $xxx if needed. +?S: For instance, on an Irix platform, you may make sure the right +?S: library file is used depending on the cc command line, so that the +?S: correct library is used depending on the selected ABI (for 32 and +?S: 64-bit compilations). +?S: +?S: Here is an example of code that could be found in a hint file on Irix +?S: when the selected compiler was for 32-bit -- that code is put in the +?S: cc.cbu call-back unit to be invoked AFTER the C compiler and its +?S: flags have been chosen: +?S: +?S: libscheck='case "$xxx" in +?S: *.a) /bin/ar p $xxx `/bin/ar t $xxx | sed q` >$$.o; +?S: case "`/usr/bin/file $$.o`" in +?S: *N32*) rm -f $$.o ;; +?S: *) rm -f $$.o; xxx=/no/n32$xxx ;; +?S: esac ;; +?S: *) case "`/usr/bin/file $xxx`" in +?S: *N32*) ;; +?S: *) xxx=/no/n32$xxx ;; +?S: esac ;; +?S: esac' +?S:. +?D:libs='' +?LINT:extern libswanted +?LINT:change libswanted +?INIT:: default library list +?INIT:libswanted='' +?X: This order is chosen so that libraries -lndir, -ldir, -lucb, -lbsd, +?X: -lBSD, -lPW, and -lx only get used if there are unresolved +?X: routines at link time. Usually, these are backwards compatability +?X: libraries, and may not be as reliable as the standard c library. +?X: +?X: The -lsocket -linet -lnsl order has been reported to be necessary +?X: for at least one SVR4 implementation. +?X: -lc must proceed -lucb or -lbsd for most Solaris applications. +?X: -lc_s proceeds -lc so we pick up the shared library version, if +?X: it is available. +?X: +?X: The ordering of c, posix, and cposix is a guess and almost +?X: certainly wrong on about half of all systems. +?X: +?X: Set proper libswanted in your private Myinit.U if needed. +?X: +?X:: default ordered library list +?X:libswanted='net socket inet bind nsl nm sdbm gdbm ndbm dbm malloc dl' +?X:libswanted="$libswanted dld sun m c_s c posix cposix ndir dir ucb" +?X:libswanted="$libswanted bsd BSD PW x" +?X: +?INIT:: should be set by hint files if needed +?INIT:libscheck='' +?T:xxx yyy thislib thisdir libstyle linkmsg +?F:lt.c lt +: Looking for optional libraries +echo " " +echo "Checking for optional libraries..." >&4 +case "$libs" in +' '|'') dflt='';; +*) dflt="$libs";; +esac +case "$libswanted" in +'') libswanted='c_s';; +esac +?X: libsocks has nasty naming scheme. +?X: This does not work if somebody wants SOCKS 4. +case "$usesocks" in +"$define") libswanted="$libswanted socks5 socks5_sh" ;; +esac +?X: Used later for link checks +echo "extern char printf(); int main() { printf(); return 0; }" > lt.c +libsfound='' +libsfiles='' +libsdirs='' +libspath='' +for thisdir in $libpth $xlibpth; do + test -d $thisdir && libspath="$libspath $thisdir" +done +for thislib in $libswanted; do + for thisdir in $libspath; do + xxx='' + if $test ! -f "$xxx" ; then + xxx=`ls $thisdir/lib$thislib.$so.[0-9]* 2>/dev/null | $sed -n '1p'` + $test -f "$xxx" && eval $libscheck + $test -f "$xxx" && libstyle=shared + fi + if test ! -f "$xxx"; then + xxx=$thisdir/lib$thislib.$so + $test -f "$xxx" && eval $libscheck + $test -f "$xxx" && libstyle=shared + fi + if test ! -f "$xxx"; then + xxx=$thisdir/lib$thislib$_a + $test -f "$xxx" && eval $libscheck + $test -f "$xxx" && libstyle=static + fi + if test ! -f "$xxx"; then + xxx=$thisdir/$thislib$_a + $test -f "$xxx" && eval $libscheck + $test -f "$xxx" && libstyle=static + fi + if test ! -f "$xxx"; then + xxx=$thisdir/lib${thislib}_s$_a + $test -f "$xxx" && eval $libscheck + $test -f "$xxx" && libstyle=static + $test -f "$xxx" && thislib=${thislib}_s + fi + if test ! -f "$xxx"; then + xxx=$thisdir/Slib$thislib$_a + $test -f "$xxx" && eval $libscheck + $test -f "$xxx" && libstyle=static + fi + if $test -f "$xxx"; then +?X: +?X: It is not sufficient to find a .so on the disk. We must make sure +?X: that we can indeed supply the -lfoo line on the cc line to link against +?X: that library. On Linux for instance, a versionned .so will not be +?X: implicitly linked against, whereas it will work fine on Solaris 2.6. +?X: --RAM, 10/10/2003 +?X: + if $cc -o lt $ccflags $ldflags lt.c -l$thislib >/dev/null 2>&1; + then + linkmsg="" + else + linkmsg=" but I can't link against it" + fi + case "$libstyle" in + shared) echo "Found -l$thislib (shared)$linkmsg." ;; + static) echo "Found -l$thislib$linkmsg." ;; + *) echo "Found -l$thislib ($libstyle)$linkmsg." ;; + esac + case " $dflt " in + *"-l$thislib "*) ;; + *) + case "$linkmsg" in + '') + dflt="$dflt -l$thislib" + libsfound="$libsfound $xxx" + yyy=`basename $xxx` + libsfiles="$libsfiles $yyy" + yyy=`echo $xxx|$sed -e "s%/$yyy\\$%%"` + case " $libsdirs " in + *" $yyy "*) ;; + *) libsdirs="$libsdirs $yyy" ;; + esac + ;; + esac + ;; + esac + break + fi + done + if $test ! -f "$xxx"; then + echo "No -l$thislib." + fi +done +set X $dflt +shift +dflt="$*" +case "$libs" in +'') dflt="$dflt";; +*) dflt="$libs";; +esac +case "$dflt" in +' '|'') dflt='none';; +esac +$rm -f lt.c lt + +$cat <<EOM + +In order to compile $package on your machine, a number of libraries +are usually needed. Include any other special libraries here as well. +Say "none" for none. The default list is almost always right. +EOM + +echo " " +rp="Which libraries to use?" +. ./myread +case "$ans" in +none) libs=' ';; +*) libs="$ans";; +esac + diff --git a/mcon/U/libyacc.U b/mcon/U/libyacc.U new file mode 100644 index 0000000..a5b0881 --- /dev/null +++ b/mcon/U/libyacc.U @@ -0,0 +1,64 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: libyacc.U,v $ +?RCS: Revision 3.0.1.4 1997/02/28 16:09:19 ram +?RCS: patch61: replaced .a with $_a all over the place +?RCS: +?RCS: Revision 3.0.1.3 1994/05/13 15:27:12 ram +?RCS: patch27: added byacc case (ADO) +?RCS: +?RCS: Revision 3.0.1.2 1994/05/06 15:09:01 ram +?RCS: patch23: now uses full library path instead of -l notation +?RCS: +?RCS: Revision 3.0.1.1 1994/01/24 14:13:49 ram +?RCS: patch16: un-obsoleted this unit for smooth yacc compilations +?RCS: +?RCS: Revision 3.0 1993/08/18 12:09:04 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:libyacc: Loc yacc libpth _a +?MAKE: -pick add $@ %< +?S:libyacc: +?S: This variable contains the argument to pass to the loader in order +?S: to get the yacc library routines. If there is no yacc or yacc +?S: library, it is null. +?S:. +?T:xxx +: see if we should include -ly +echo " " +case "$yacc" in +*byacc*) + echo "You are using byacc, so I won't look for a yacc library." >&4 + libyacc='' + ;; +*yacc) + xxx=`./loc liby$_a x $libpth` + case "$xxx" in + x) + echo "No yacc library found." >&4 + libyacc='' + ;; + *) + echo "yacc library found in $xxx." >&4 + libyacc="$xxx" + ;; + esac + ;; +*bison*) + echo "You are using bison, so I won't look for a yacc library." >&4 + libyacc='' + ;; +*) +echo "You don't seem to have yacc, so I won't look for the yacc library." >&4 + libyacc='' + ;; +esac + diff --git a/mcon/U/lintlib.U b/mcon/U/lintlib.U new file mode 100644 index 0000000..09107a1 --- /dev/null +++ b/mcon/U/lintlib.U @@ -0,0 +1,38 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: lintlib.U,v $ +?RCS: Revision 3.0 1993/08/18 12:09:05 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:lintlib lintlibexp: Getfile Loc Oldconfig +?MAKE: -pick add $@ %< +?S:lintlib: +?S: This variable holds the name of the directory in which the user wants +?S: to put public lint-library files for the package in question. It is +?S: most often a local directory such as /usr/local/lib/lint. Programs using +?S: this variable must be prepared to deal with ~name expansion. +?S:. +?S:lintlibexp: +?S: This variable is the same as the lintlib variable, but is filename +?S: expanded at configuration time, for convenient use in your makefiles. +?S:. +: determine where public lint libraries go +case "$lintlib" in +'') dflt=`./loc . "." /usr/local/lib/lint /usr/lib/lint /usr/lib`;; +*) dflt="$lintlib" ;; +esac +echo " " +fn=d~ +rp='Where do you want to put the public lint libraries?' +. ./getfile +lintlib="$ans" +lintlibexp="$ansexp" + diff --git a/mcon/U/lns.U b/mcon/U/lns.U new file mode 100644 index 0000000..6160bd4 --- /dev/null +++ b/mcon/U/lns.U @@ -0,0 +1,41 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu> +?RCS: +?RCS: $Log: lns.U,v $ +?RCS: Revision 3.0.1.1 1994/06/20 07:05:52 ram +?RCS: patch30: created by ADO +?RCS: +?X: +?X: This unit checks whether symbolic links are really supported. +?X: We can't rely on d_symlink because that may be listed in the +?X: C library but unimplemented. +?X: +?MAKE:lns: ln rm touch test +?MAKE: -pick add $@ %< +?S:lns: +?S: This variable holds the name of the command to make +?S: symbolic links (if they are supported). It can be used +?S: in the Makefile. It is either 'ln -s' or 'ln' +?S:. +: determine whether symbolic links are supported +echo " " +$touch blurfl +$rm -f sym +if $ln -s blurfl sym > /dev/null 2>&1 && $test -f sym; then + echo "Symbolic links are supported." >&4 + lns="$ln -s" +else + echo "Symbolic links are NOT supported." >&4 + lns="$ln" +fi +$rm -f blurfl sym + diff --git a/mcon/U/locdist.U b/mcon/U/locdist.U new file mode 100644 index 0000000..0975e6a --- /dev/null +++ b/mcon/U/locdist.U @@ -0,0 +1,174 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: locdist.U,v $ +?RCS: Revision 3.0.1.1 1994/05/06 15:09:20 ram +?RCS: patch23: added support for multi-state regions (WED) +?RCS: +?RCS: Revision 3.0 1993/08/18 12:09:06 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:locdist orgdist citydist statedist multistatedist cntrydist contdist: \ + test newslibexp cat Myread Oldconfig +?MAKE: -pick add $@ %< +?S:locdist: +?S: This variable contains the eventual value of the LOCDIST symbol, +?S: which is the local organization's distribution name for news. +?S:. +?S:orgdist: +?S: This variable contains the eventual value of the ORGDIST symbol, +?S: which is the organization's distribution name for news. +?S:. +?S:citydist: +?S: This variable contains the eventual value of the CITYDIST symbol, +?S: which is the city's distribution name for news. +?S:. +?S:statedist: +?S: This variable contains the eventual value of the STATEDIST symbol, +?S: which is the state's or province's distribution name for news. +?S:. +?S:multistatedist: +?S: This variable contains the eventual value of the MULTISTATEDIST symbol, +?S: which is the news distribution code for multi-state region. +?S:. +?S:cntrydist: +?S: This variable contains the eventual value of the CNTRYDIST symbol, +?S: which is the country's distribution name for news. +?S:. +?S:contdist: +?S: This variable contains the eventual value of the CONTDIST symbol, +?S: which is the continent's distribution name for news. +?S:. +?C:LOCDIST: +?C: This symbol contains the distribution name for the news system that +?C: restricts article distribution to the local organization. +?C:. +?C:ORGDIST: +?C: This symbol contains the distribution name for the news system that +?C: restricts article distribution to the organization. +?C:. +?C:CITYDIST: +?C: This symbol contains the distribution name for the news system that +?C: restricts article distribution to the city. +?C:. +?C:STATEDIST: +?C: This symbol contains the distribution name for the news system that +?C: restricts article distribution to the state or province. +?C:. +?C:MULTISTATEDIST: +?C: This symbol contains the distribution name for the news system that +?C: restricts article distribution to a multi-state region. +?C:. +?C:CNTRYDIST: +?C: This symbol contains the distribution name for the news system that +?C: restricts article distribution to the country. +?C:. +?C:CONTDIST: +?C: This symbol contains the distribution name for the news system that +?C: restricts article distribution to the continent. +?C:. +?H:#define LOCDIST "$locdist" /**/ +?H:#define ORGDIST "$orgdist" /**/ +?H:#define CITYDIST "$citydist" /**/ +?H:#define MULTISTATEDIST "$multistatedist" /**/ +?H:#define STATEDIST "$statedist" /**/ +?H:#define CNTRYDIST "$cntrydist" /**/ +?H:#define CONTDIST "$contdist" /**/ +?H:. +: get the local distributions +$cat <<'EOH' + +Distribution groups are the things you use on the Distribution line to limit +where an article will go to. You are likely to be a member of several +distribution groups, such as organization, city, state, province, country, +continent, etc. For example, Los Angeles has the distribution code "la", +New Jersey has the code "nj", and Europe has the code "eunet". + +The categories you will be asked are: + +local organization (Could be just one machine or a cluster or an office) +organization att, dec, kgb, ... +city la, ny, mosc, ... +state/province ca, nj, bc, ... +multi-state region pnw, ne, ... +country usa, can, rok, whatever +continent na (North America), asia, etc. + +EOH +if $test -f $newslibexp/distributions; then + case "$silent" in + true) ;; + *) dflt='Hit return to continue' + rp='' + . ./myread + ;; + esac + echo "Here is your distributions file:" >&4 + echo " " >&4 + $cat >&4 $newslibexp/distributions + echo " " >&4 +fi +echo "Use 'none' for any distributions you don't have." +echo " " +case "$locdist" in +'') dflt="none";; +*) dflt="$locdist";; +esac +rp="What is the distribution code for your local organization?" +. ./myread +locdist="$ans" +case "$orgdist" in +'') dflt="none";; +*) dflt="$orgdist";; +esac +rp="What is the distribution code for your organization?" +. ./myread +orgdist="$ans" +case "$citydist" in +'') dflt="none";; +*) dflt="$citydist";; +esac +rp="What is the distribution code for your city?" +. ./myread +citydist="$ans" +case "$statedist" in +'') dflt="none";; +*) dflt="$statedist";; +esac +rp="What is the distribution code for your state/province?" +. ./myread +statedist="$ans" +case "$multistatedist" in +'') dflt="none";; +*) dflt="$multistatedist";; +esac +rp="What is the distribution code for your multi-state region?" +. ./myread +multistatedist="$ans" +case "$cntrydist" in +'') dflt="none";; +*) dflt="$cntrydist";; +esac +rp="What is the distribution code for your country?" +. ./myread +cntrydist="$ans" +case "$contdist" in +'') dflt="none";; +*) dflt="$contdist";; +esac +rp="What is the distribution code for your continent?" +. ./myread +contdist="$ans" +$cat <<'EOM' + +If you have any other distribution groups you will need to edit Pnews +and newsetup to add them. +EOM + diff --git a/mcon/U/longsize.U b/mcon/U/longsize.U new file mode 100644 index 0000000..1fe9df5 --- /dev/null +++ b/mcon/U/longsize.U @@ -0,0 +1,24 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: longsize.U,v $ +?RCS: Revision 3.0.1.2 1997/02/28 16:09:35 ram +?RCS: patch61: code moved to intsize.U +?RCS: +?RCS: Revision 3.0.1.1 1994/10/29 16:24:31 ram +?RCS: patch36: added ?F: line for metalint file checking +?RCS: +?RCS: Revision 3.0 1993/08/18 12:09:07 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?X: +?X: 'longsize' is now defined within intsize.U +?X: +?LINT: empty diff --git a/mcon/U/lseektype.U b/mcon/U/lseektype.U new file mode 100644 index 0000000..861395e --- /dev/null +++ b/mcon/U/lseektype.U @@ -0,0 +1,40 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: lseektype.U,v $ +?RCS: Revision 3.0.1.1 1994/08/29 16:30:10 ram +?RCS: patch32: now uses new Typedef unit to compute type information +?RCS: +?RCS: Revision 3.0 1993/08/18 12:09:08 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:lseektype: Myread Typedef +?MAKE: -pick add $@ %< +?S:lseektype: +?S: This variable defines lseektype to be something like off_t, long, +?S: or whatever type is used to declare lseek offset's type in the +?S: kernel (which also appears to be lseek's return type). +?S:. +?C:Off_t (LSEEKTYPE): +?C: This symbol holds the type used to declare offsets in the kernel. +?C: It can be int, long, off_t, etc... It may be necessary to include +?C: <sys/types.h> to get any typedef'ed information. +?C:. +?H:#define Off_t $lseektype /* <offset> type */ +?H:. +: see what type lseek is declared as in the kernel +set off_t lseektype long stdio.h sys/types.h +eval $typedef +echo " " +dflt="$lseektype" +rp="What type is lseek's offset on this system declared as?" +. ./myread +lseektype="$ans" + diff --git a/mcon/U/maildir.U b/mcon/U/maildir.U new file mode 100644 index 0000000..4c6499e --- /dev/null +++ b/mcon/U/maildir.U @@ -0,0 +1,41 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: maildir.U,v $ +?RCS: Revision 3.0.1.1 1993/12/15 08:21:56 ram +?RCS: patch15: now also looks under /var/mail for BSD/386 +?RCS: +?RCS: Revision 3.0 1993/08/18 12:09:09 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:maildir maildirexp: Getfile Loc Oldconfig +?MAKE: -pick add $@ %< +?S:maildir: +?S: This variable contains the name of the directory in which mail is +?S: spooled. Programs using this variable must be prepared to deal with +?S: ~name substitutions. +?S:. +?S:maildirexp: +?S: This is the same as the maildir variable, but is filename expanded +?S: at configuration time, for programs not willing to deal with it at +?S: run-time. +?S:. +: determine where mail is spooled +case "$maildir" in +'') dflt=`./loc . /usr/spool/mail /usr/spool/mail /usr/mail /var/mail`;; +*) dflt="$maildir";; +esac +echo " " +fn=d~ +rp='Where is yet-to-be-read mail spooled?' +. ./getfile +maildir="$ans" +maildirexp="$ansexp" + diff --git a/mcon/U/mailer.U b/mcon/U/mailer.U new file mode 100644 index 0000000..1840ee7 --- /dev/null +++ b/mcon/U/mailer.U @@ -0,0 +1,61 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: mailer.U,v $ +?RCS: Revision 3.0.1.3 1995/01/11 15:32:11 ram +?RCS: patch45: can now use Loc variables since path stripping is deferred +?RCS: +?RCS: Revision 3.0.1.2 1994/05/06 15:10:04 ram +?RCS: patch23: ensure full path value is used for rmail also +?RCS: +?RCS: Revision 3.0.1.1 1994/01/24 14:14:18 ram +?RCS: patch16: now use _sendmail vars and friends for portability issues +?RCS: +?RCS: Revision 3.0 1993/08/18 12:09:10 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:mailer: test cat rmail mail smail sendmail Getfile Oldconfig +?MAKE: -pick add $@ %< +?S:mailer: +?S: This variable contains the full pathname of a reasonable mailer. +?S: By reasonable, we mean some program which can understand internet +?S: addresses or at least forward them to some internet router. This +?S: mailer should be invoked as "mailer [options] recipients <mail". +?S:. +: determine the name of a reasonable mailer +case "$mailer" in +'') + if $test -f "$sendmail"; then + dflt="$sendmail" + elif $test -f "$smail"; then + dflt="$smail" + elif $test -f "$rmail"; then + dflt="$rmail" + elif $test -f /bin/mail; then + dflt=/bin/mail + else + dflt=$mail + fi + ;; +*) dflt="$mailer";; +esac +$cat <<EOM + +I need the full pathname of the program used to deliver mail on your system. +A typical answer would be /usr/lib/sendmail or /bin/rmail, but you may choose +any other program, as long as it can be fed from standard input and will +honour any user-supplied headers. + +EOM +fn=f +rp='Mail transport agent to be used?' +. ./getfile +mailer="$ans" + diff --git a/mcon/U/mailfile.U b/mcon/U/mailfile.U new file mode 100644 index 0000000..ebe1535 --- /dev/null +++ b/mcon/U/mailfile.U @@ -0,0 +1,56 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: mailfile.U,v $ +?RCS: Revision 3.0.1.2 1994/10/29 16:24:57 ram +?RCS: patch36: the Loc unit was missing from the dependency line +?RCS: +?RCS: Revision 3.0.1.1 1993/12/15 08:22:08 ram +?RCS: patch15: now also looks under /var/mail for BSD/386 +?RCS: +?RCS: Revision 3.0 1993/08/18 12:09:11 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:mailfile: Myread Oldconfig Filexp Loc +?MAKE: -pick add $@ %< +?S:mailfile: +?S: This variable contains the eventual value of the MAILFILE symbol, +?S: which contains an interpretable name of the mail spool file for the +?S: current user. +?S:. +?C:MAILFILE: +?C: This symbol contains the interpretable name of the mail spool file +?C: for the current user. The program must be prepared to substitute +?C: the HOME directory for %~, and the login id for %L. +?C:. +?H:#define MAILFILE "$mailfile" /**/ +?H:. +: determine where mail is spooled +case "$mailfile" in +'') + dflt=`./loc . XXX /usr/spool/mail /usr/mail /var/mail` + case "$dflt" in + XXX) dflt='%~/mailbox';; + *) dflt="$dflt/%L";; + esac + ;; +*) dflt="$mailfile" + ;; +esac +cat <<'EOM' + +In the following question, you may use %~ to represent the user's home +directory, and %L to represent a users name. + +EOM +rp='In which file is yet-to-be-read mail spooled? (~name ok)' +. ./myread +mailfile=`./filexp "$ans"` + diff --git a/mcon/U/make.U b/mcon/U/make.U new file mode 100644 index 0000000..98eb0a8 --- /dev/null +++ b/mcon/U/make.U @@ -0,0 +1,60 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1996, Andy Dougherty +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: make.U,v $ +?RCS: Revision 3.0.1.1 1997/02/28 16:09:40 ram +?RCS: patch61: created +?RCS: +?MAKE:make_set_make : Loc rm sed make +?MAKE: -pick add $@ %< +?S:make_set_make: +?S: Some versions of 'make' set the variable MAKE. Others do not. +?S: This variable contains the string to be included in Makefile.SH +?S: so that MAKE is set if needed, and not if not needed. +?S: Possible values are: +?S: +?S: make_set_make='#' # If your make program handles this for you, +?S: +?S: make_set_make="MAKE=$make" # if it doesn't. +?S: +?S: This uses a comment character so that we can distinguish a +?S: 'set' value (from a previous config.sh or Configure -D option) +?S: from an uncomputed value. +?S:. +?LINT: extern MAKE +?LINT: change MAKE +?X: This test is based on one from an autoconf-generated configure +?X: script. Autoconf stole a lot from Configure, but now it's our +?X: turn to do so... ;-) -- RAM, 21/02/97 +: check whether make sets MAKE +echo " " +echo "Checking if your $make program sets \$(MAKE)..." >&4 +case "$make_set_make" in +'') +?X: Use sed so we don't have a line begining with @echo. Metaconfig +?X: will think that's a command like @if or @end. + $sed 's/^X //' > testmake.mak << 'EOF' +Xall: +X @echo 'maketemp="$(MAKE)"' +EOF +?X: GNU make sometimes prints "make[1]: Entering...", which would confuse us + case "`$make -f testmake.mak 2>/dev/null`" in + *maketemp=*) make_set_make='#' ;; + *) make_set_make="MAKE=$make" ;; + esac + $rm -f testmake.mak + ;; +esac +case "$make_set_make" in +'#') echo "Yup, it does.";; +*) echo "Nope, it doesn't.";; +esac + diff --git a/mcon/U/mallocsrc.U b/mcon/U/mallocsrc.U new file mode 100644 index 0000000..79da8a1 --- /dev/null +++ b/mcon/U/mallocsrc.U @@ -0,0 +1,171 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: mallocsrc.U,v $ +?RCS: Revision 3.0.1.2 1997/02/28 16:10:26 ram +?RCS: patch61: added support for Free_t, the type of free() +?RCS: patch61: replaced .o with $_o all over the place +?RCS: +?RCS: Revision 3.0.1.1 1994/05/06 15:10:46 ram +?RCS: patch23: added support for MYMALLOC, mainly for perl5 (ADO) +?RCS: +?RCS: Revision 3.0 1993/08/18 12:09:12 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:mallocsrc mallocobj usemymalloc malloctype d_mymalloc \ + freetype: Myread \ + Oldconfig package Guess Setvar rm cat +cc +ccflags Findhdr \ + i_malloc i_stdlib sed libs _o ptrsize +?MAKE: -pick add $@ %< +?X: Put near top so that other tests don't erroneously include +?X: -lmalloc. --AD 22 June 1998 +?Y:TOP +?S:usemymalloc: +?S: This variable contains y if the malloc that comes with this package +?S: is desired over the system's version of malloc. People often include +?S: special versions of malloc for effiency, but such versions are often +?S: less portable. See also mallocsrc and mallocobj. +?S: If this is 'y', then -lmalloc is removed from $libs. +?S:. +?S:mallocsrc: +?S: This variable contains the name of the malloc.c that comes with +?S: the package, if that malloc.c is preferred over the system malloc. +?S: Otherwise the value is null. This variable is intended for generating +?S: Makefiles. +?S:. +?S:d_mymalloc: +?S: This variable conditionally defines MYMALLOC in case other parts +?S: of the source want to take special action if MYMALLOC is used. +?S: This may include different sorts of profiling or error detection. +?S:. +?S:mallocobj: +?S: This variable contains the name of the malloc.o that this package +?S: generates, if that malloc.o is preferred over the system malloc. +?S: Otherwise the value is null. This variable is intended for generating +?S: Makefiles. See mallocsrc. +?S:. +?S:freetype: +?S: This variable contains the return type of free(). It is usually +?S: void, but occasionally int. +?S:. +?S:malloctype: +?S: This variable contains the kind of ptr returned by malloc and realloc. +?S:. +?C:Free_t: +?C: This variable contains the return type of free(). It is usually +?C: void, but occasionally int. +?C:. +?C:Malloc_t (MALLOCPTRTYPE): +?C: This symbol is the type of pointer returned by malloc and realloc. +?C:. +?H:#define Malloc_t $malloctype /**/ +?H:#define Free_t $freetype /**/ +?H:. +?C:MYMALLOC: +?C: This symbol, if defined, indicates that we're using our own malloc. +?C:. +?H:#$d_mymalloc MYMALLOC /**/ +?H:. +?LINT:change libs +?X: Cannot test for mallocsrc; it is the unit's name and there is a bug in +?X: the interpreter which defines all the names, even though they are not used. +@if mallocobj +: determine which malloc to compile in +echo " " +case "$usemymalloc" in +[yY]*|true|$define) dflt='y' ;; +[nN]*|false|$undef) dflt='n' ;; +*) + case "$ptrsize" in + 4) dflt='y' ;; + *) dflt='n' ;; + esac + ;; +esac +rp="Do you wish to attempt to use the malloc that comes with $package?" +. ./myread +usemymalloc="$ans" +case "$ans" in +y*|true) + usemymalloc='y' + mallocsrc='malloc.c' + mallocobj="malloc$_o" + d_mymalloc="$define" +?X: Maybe libs.U should be dependent on mallocsrc.U, but then +?X: most packages that use dist probably don't supply their own +?X: malloc, so this is probably an o.k. comprpomise + case "$libs" in + *-lmalloc*) + : Remove malloc from list of libraries to use + echo "Removing unneeded -lmalloc from library list" >&4 + set `echo X $libs | $sed -e 's/-lmalloc / /' -e 's/-lmalloc$//'` + shift + libs="$*" + echo "libs = $libs" >&4 + ;; + esac + ;; +*) + usemymalloc='n' + mallocsrc='' + mallocobj='' + d_mymalloc="$undef" + ;; +esac + +@end +@if MALLOCPTRTYPE || Malloc_t || Free_t +: compute the return types of malloc and free +echo " " +$cat >malloc.c <<END +#$i_malloc I_MALLOC +#$i_stdlib I_STDLIB +#include <stdio.h> +#include <sys/types.h> +#ifdef I_MALLOC +#include <malloc.h> +#endif +#ifdef I_STDLIB +#include <stdlib.h> +#endif +#ifdef TRY_MALLOC +void *malloc(); +#endif +#ifdef TRY_FREE +void free(); +#endif +END +@if MALLOCPTRTYPE || Malloc_t +case "$malloctype" in +'') + if $cc $ccflags -c -DTRY_MALLOC malloc.c >/dev/null 2>&1; then + malloctype='void *' + else + malloctype='char *' + fi + ;; +esac +echo "Your system wants malloc to return '$malloctype', it would seem." >&4 +@end + +@if Free_t +case "$freetype" in +'') + if $cc $ccflags -c -DTRY_FREE malloc.c >/dev/null 2>&1; then + freetype='void' + else + freetype='int' + fi + ;; +esac +echo "Your system uses $freetype free(), it would seem." >&4 +@end +$rm -f malloc.[co] +@end diff --git a/mcon/U/man1dir.U b/mcon/U/man1dir.U new file mode 100644 index 0000000..23b2765 --- /dev/null +++ b/mcon/U/man1dir.U @@ -0,0 +1,147 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1996, Andy Dougherty +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: man1dir.U,v $ +?RCS: Revision 3.0.1.1 1997/02/28 16:10:29 ram +?RCS: patch61: created +?RCS: +?X: +?X: This was originally specific to perl5. Since perl5 has man pages that +?X: go in both man1/ and man3/ directories, we need both man1dir +?X: and man3dir. This unit is basically dist's mansrc.U with +?X: man1 used instead of man everywhere. +?X: +?MAKE:man1dir man1direxp man1ext installman1dir: afs cat nroff Loc Oldconfig \ + spackage test Getfile Prefixit prefixexp Prefixup sysman Myread +?MAKE: -pick add $@ %< +?Y:TOP +?S:man1dir: +?S: This variable contains the name of the directory in which manual +?S: source pages are to be put. It is the responsibility of the +?S: Makefile.SH to get the value of this into the proper command. +?S: You must be prepared to do the ~name expansion yourself. +?S:. +?S:man1direxp: +?S: This variable is the same as the man1dir variable, but is filename +?S: expanded at configuration time, for convenient use in makefiles. +?S:. +?S:installman1dir: +?S: This variable is really the same as man1direxp, unless you are using +?S: AFS in which case it points to the read/write location whereas +?S: man1direxp only points to the read-only access location. For extra +?S: portability, you should only use this variable within your makefiles. +?S:. +?S:man1ext: +?S: This variable contains the extension that the manual page should +?S: have: one of 'n', 'l', or '1'. The Makefile must supply the '.'. +?S: See man1dir. +?S:. +?T:lookpath +: determine where manual pages go +set man1dir man1dir none +eval $prefixit +$cat <<EOM + +$spackage has manual pages available in source form. +EOM +case "$nroff" in +nroff) + echo "However, you don't have nroff, so they're probably useless to you." + case "$man1dir" in + '') man1dir="none";; + esac;; +esac +echo "If you don't want the manual sources installed, answer 'none'." +case "$man1dir" in +' ') dflt=none + ;; +'') + lookpath="$prefixexp/man/man1 $prefixexp/man/l_man/man1" + lookpath="$lookpath $prefixexp/man/p_man/man1" + lookpath="$lookpath $prefixexp/man/u_man/man1" + lookpath="$lookpath $prefixexp/man/man.1" +?X: Experience has shown people expect man1dir to be under prefix, +?X: so we now always put it there. Users who want other behavior +?X: can answer interactively or use a command line option. +?X: Does user have System V-style man paths. + case "$sysman" in + */?_man*) dflt=`./loc . $prefixexp/l_man/man1 $lookpath` ;; + *) dflt=`./loc . $prefixexp/man/man1 $lookpath` ;; + esac + set dflt + eval $prefixup + ;; +*) dflt="$man1dir" + ;; +esac +echo " " +fn=dn+~ +rp="Where do the main $spackage manual pages (source) go?" +. ./getfile +if $test "X$man1direxp" != "X$ansexp"; then + installman1dir='' +fi +man1dir="$ans" +man1direxp="$ansexp" +case "$man1dir" in +'') man1dir=' ' + installman1dir='';; +esac +if $afs; then + $cat <<EOM + +Since you are running AFS, I need to distinguish the directory in which +manual pages reside from the directory in which they are installed (and from +which they are presumably copied to the former directory by occult means). + +EOM + case "$installman1dir" in + '') dflt=`echo $man1direxp | sed 's#^/afs/#/afs/.#'`;; + *) dflt="$installman1dir";; + esac + fn=de~ + rp='Where will man pages be installed?' + . ./getfile + installman1dir="$ans" +else + installman1dir="$man1direxp" +fi + +: What suffix to use on installed man pages + +case "$man1dir" in +' ') + man1ext='0' + ;; +*) + rp="What suffix should be used for the main $spackage man pages?" + case "$man1ext" in + '') case "$man1dir" in + *1) dflt=1 ;; + *1p) dflt=1p ;; + *1pm) dflt=1pm ;; + *l) dflt=l;; + *n) dflt=n;; + *o) dflt=o;; + *p) dflt=p;; + *C) dflt=C;; + *L) dflt=L;; + *L1) dflt=L1;; + *) dflt=1;; + esac + ;; + *) dflt="$man1ext";; + esac + . ./myread + man1ext="$ans" + ;; +esac + diff --git a/mcon/U/man3dir.U b/mcon/U/man3dir.U new file mode 100644 index 0000000..5017f2b --- /dev/null +++ b/mcon/U/man3dir.U @@ -0,0 +1,158 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1996, Andy Dougherty +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: man3dir.U,v $ +?RCS: Revision 3.0.1.1 1997/02/28 16:10:34 ram +?RCS: patch61: created +?RCS: +?X: +?X: This was originally specific to perl5. Since perl5 has man pages that +?X: go in both man1/ and man3/ directories, we need both man1dir +?X: and man3dir. This unit is basically dist's mansrc.U with +?X: man3 used instead of man everywhere. +?X: I then added various tests because perl5 has *lots* of man3 +?X: pages with long file names. -- ADO +?X: +?MAKE:man3dir man3direxp man3ext installman3dir: afs cat nroff Loc Oldconfig \ + sed man1dir spackage package Getfile prefix Prefixit Prefixup \ + d_flexfnam privlib Myread +?MAKE: -pick add $@ %< +?Y:TOP +?S:man3dir: +?S: This variable contains the name of the directory in which manual +?S: source pages are to be put. It is the responsibility of the +?S: Makefile.SH to get the value of this into the proper command. +?S: You must be prepared to do the ~name expansion yourself. +?S:. +?S:man3direxp: +?S: This variable is the same as the man3dir variable, but is filename +?S: expanded at configuration time, for convenient use in makefiles. +?S:. +?S:installman3dir: +?S: This variable is really the same as man3direxp, unless you are using +?S: AFS in which case it points to the read/write location whereas +?S: man3direxp only points to the read-only access location. For extra +?S: portability, you should only use this variable within your makefiles. +?S:. +?S:man3ext: +?S: This variable contains the extension that the manual page should +?S: have: one of 'n', 'l', or '3'. The Makefile must supply the '.'. +?S: See man3dir. +?S:. +: determine where library module manual pages go +set man3dir man3dir none +eval $prefixit +$cat <<EOM + +$spackage has manual pages for many of the library modules. +EOM + +case "$nroff" in +nroff) + $cat <<'EOM' +However, you don't have nroff, so they're probably useless to you. +EOM + case "$man3dir" in + '') man3dir="none";; + esac;; +esac + +case "$d_flexfnam" in +undef) + $cat <<'EOM' +However, your system can't handle the long file names like File::Basename.3. +EOM + case "$man3dir" in + '') man3dir="none";; + esac;; +esac + +echo "If you don't want the manual sources installed, answer 'none'." +?X: We dont use /usr/local/man/man3 because some man programs will +?X: only show the /usr/local/man/man3 contents, and not the system ones, +?X: thus man less will show the perl module less.pm, but not the system +?X: less command. We might also conflict with TCL man pages. +?X: However, something like /opt/perl/man/man3 is fine. +case "$man3dir" in +'') case "$prefix" in + *$package*) dflt=`echo $man1dir | + $sed -e 's/man1/man3/g' -e 's/man\.1/man\.3/g'` ;; + *) dflt="$privlib/man/man3" ;; + esac + ;; +' ') dflt=none;; +*) dflt="$man3dir" ;; +esac +echo " " + +fn=dn+~ +rp="Where do the $package library man pages (source) go?" +. ./getfile +if test "X$man3direxp" != "X$ansexp"; then + installman3dir='' +fi + +man3dir="$ans" +man3direxp="$ansexp" +case "$man3dir" in +'') man3dir=' ' + installman3dir='';; +esac +if $afs; then + $cat <<EOM + +Since you are running AFS, I need to distinguish the directory in which +manual pages reside from the directory in which they are installed (and from +which they are presumably copied to the former directory by occult means). + +EOM + case "$installman3dir" in + '') dflt=`echo $man3direxp | sed 's#^/afs/#/afs/.#'`;; + *) dflt="$installman3dir";; + esac + fn=de~ + rp='Where will man pages be installed?' + . ./getfile + installman3dir="$ans" +else + installman3dir="$man3direxp" +fi + +: What suffix to use on installed man pages + +case "$man3dir" in +' ') + man3ext='0' + ;; +*) + rp="What suffix should be used for the $package library man pages?" + case "$man3ext" in + '') case "$man3dir" in + *3) dflt=3 ;; + *3p) dflt=3p ;; + *3pm) dflt=3pm ;; + *l) dflt=l;; + *n) dflt=n;; + *o) dflt=o;; + *p) dflt=p;; + *C) dflt=C;; + *L) dflt=L;; + *L3) dflt=L3;; + *) dflt=3;; + esac + ;; + *) dflt="$man3ext";; + esac + . ./myread + man3ext="$ans" + ;; +esac + diff --git a/mcon/U/manfmt.U b/mcon/U/manfmt.U new file mode 100644 index 0000000..d8f4d9a --- /dev/null +++ b/mcon/U/manfmt.U @@ -0,0 +1,118 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: manfmt.U,v $ +?RCS: Revision 3.0.1.5 1997/02/28 16:11:57 ram +?RCS: patch61: don't ask for AFS when they choose to not install pages +?RCS: +?RCS: Revision 3.0.1.4 1995/09/25 09:16:52 ram +?RCS: patch59: unit is now forced to the top of Configure, if possible +?RCS: +?RCS: Revision 3.0.1.3 1995/01/30 14:39:20 ram +?RCS: patch49: new installmanfmt and AFS-lookup for formatted man pages +?RCS: patch49: can now handle installation prefix changes (from WED) +?RCS: +?RCS: Revision 3.0.1.2 1994/08/29 16:30:31 ram +?RCS: patch32: now uses installation prefix for default setting +?RCS: +?RCS: Revision 3.0.1.1 1993/09/13 16:09:22 ram +?RCS: patch10: allows for L1 man page extension (WAD) +?RCS: +?RCS: Revision 3.0 1993/08/18 12:09:13 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:manfmt manfmtexp installmanfmt: Getfile Loc Oldconfig cat manext \ + spackage Prefixit prefixexp Prefixup afs test +?MAKE: -pick add $@ %< +?Y:TOP +?S:manfmt: +?S: This variable contains the name of the directory in which formatted +?S: manual pages are to be put. It is the responsibility of the +?S: Makefile.SH to get the value of this into the proper command. Note +?S: that you may have to do ~name substitution. Use manfmtexp otherwise. +?S:. +?S:manfmtexp: +?S: This is the same as the manfmt variable, but is filename expanded +?S: at configuration time, for programs not willing to deal with it at +?S: run-time. +?S:. +?S:installmanfmt: +?S: This variable is really the same as manfmtexp, unless you are using +?S: AFS in which case it points to the read/write location whereas +?S: mansrcexp only points to the read-only access location. For extra +?S: portability, you should only use this variable within your makefiles. +?S:. +?LINT:change manext +?T:lookpath +: determine where manual pages go +set manfmt manfmt +eval $prefixit +$cat <<EOM + +$spackage has pre-formatted manual pages. If you don't want these installed, +answer 'none' to the next question. + +EOM +case "$manfmt" in +'') + lookpath="$prefixexp/catman/man1 $prefixexp/man/cat1" + lookpath="$lookpath $prefixexp/catman/u_man/man1" + lookpath="$lookpath $prefixexp/catman/l_man/man1" + lookpath="$lookpath $prefixexp/catman/cat1 /usr/catman/local/man1" + lookpath="$lookpath /usr/catman/manl /usr/man/cat1" + lookpath="$lookpath /usr/catman/mann /usr/catman/l_man/man1" + lookpath="$lookpath /usr/catman/u_man/man1 /usr/catman/man1" + dflt=`./loc . none $lookpath` + set dflt + eval $prefixup + ;; +*) dflt="$manfmt" + ;; +esac +fn=dn~ +rp='Where do pre-formatted manual pages go?' +. ./getfile +if test "X$manfmtexp" != "X$ansexp"; then + installmanfmt='' +fi +manfmt="$ans" +manfmtexp="$ansexp" +if $afs && $test "$manfmt"; then + $cat <<EOM + +Since you are running AFS, I need to distinguish the directory in which +manual pages reside from the directory in which they are installed (and from +which they are presumably copied to the former directory by occult means). + +EOM + case "$installmanfmt" in + '') dflt=`echo $manfmtexp | sed 's#^/afs/#/afs/.#'`;; + *) dflt="$installmanfmt";; + esac + fn=de~ + rp='Where will pre-formatted man pages be installed?' + . ./getfile + installmanfmt="$ans" +else + installmanfmt="$manfmtexp" +fi + +case "$manfmt" in +'') manext='0';; +*l) manext=l;; +*n) manext=n;; +*o) manext=l;; +*p) manext=n;; +*C) manext=C;; +*L) manext=L;; +*L1) manext=L1;; +*) manext=1;; +esac + diff --git a/mcon/U/mansrc.U b/mcon/U/mansrc.U new file mode 100644 index 0000000..c5830da --- /dev/null +++ b/mcon/U/mansrc.U @@ -0,0 +1,150 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: mansrc.U,v $ +?RCS: Revision 3.0.1.9 1997/02/28 16:12:03 ram +?RCS: patch61: don't ask for AFS when they choose to not install pages +?RCS: +?RCS: Revision 3.0.1.8 1995/09/25 09:16:58 ram +?RCS: patch59: unit is now forced to the top of Configure, if possible +?RCS: +?RCS: Revision 3.0.1.7 1995/02/15 14:15:31 ram +?RCS: patch51: was mistakenly duplicating /usr/local/man/man1 (ADO) +?RCS: patch51: added /opt/man/man1 to the lookpath (ADO) +?RCS: +?RCS: Revision 3.0.1.6 1995/01/30 14:39:34 ram +?RCS: patch49: can now handle installation prefix changes (from WED) +?RCS: +?RCS: Revision 3.0.1.5 1995/01/11 15:32:25 ram +?RCS: patch45: can now use Loc variables since path stripping is deferred +?RCS: +?RCS: Revision 3.0.1.4 1994/08/29 16:30:38 ram +?RCS: patch32: now uses installation prefix for default setting +?RCS: +?RCS: Revision 3.0.1.3 1994/05/06 15:11:10 ram +?RCS: patch23: added lint hint, assuring that nroff is used +?RCS: +?RCS: Revision 3.0.1.2 1994/01/24 14:14:39 ram +?RCS: patch16: now uses _nroff in case user asked for portability +?RCS: +?RCS: Revision 3.0.1.1 1993/09/13 16:09:31 ram +?RCS: patch10: allows for L1 man page extension (WAD) +?RCS: +?RCS: Revision 3.0 1993/08/18 12:09:14 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:mansrc mansrcexp manext installmansrc: afs cat nroff Loc Oldconfig \ + sysman spackage test Getfile Prefixit prefixexp Prefixup +?MAKE: -pick add $@ %< +?Y:TOP +?S:mansrc: +?S: This variable contains the name of the directory in which manual +?S: source pages are to be put. It is the responsibility of the +?S: Makefile.SH to get the value of this into the proper command. +?S: You must be prepared to do the ~name expansion yourself. +?S:. +?S:mansrcexp: +?S: This variable is the same as the mansrc variable, but is filename +?S: expanded at configuration time, for convenient use in makefiles. +?S:. +?S:installmansrc: +?S: This variable is really the same as mansrcexp, unless you are using +?S: AFS in which case it points to the read/write location whereas +?S: mansrcexp only points to the read-only access location. For extra +?S: portability, you should only use this variable within your makefiles. +?S:. +?S:manext: +?S: This variable contains the extension that the manual page should +?S: have: one of 'n', 'l', or '1'. The Makefile must supply the '.'. +?S: See mansrc. +?S:. +?T:lookpath +: determine where manual pages go +set mansrc mansrc none +eval $prefixit +$cat <<EOM + +$spackage has manual pages available in source form. +EOM +case "$nroff" in +nroff) + echo "However, you don't have nroff, so they're probably useless to you." + case "$mansrc" in + '') mansrc="none";; + esac;; +esac +echo "If you don't want the manual sources installed, answer 'none'." +case "$mansrc" in +'') + lookpath="$prefixexp/share/man/man1 $prefixexp/man/man1" + lookpath="$lookpath $prefixexp/man/u_man/man1 $prefixexp/man/l_man/man1" + lookpath="$lookpath /usr/local/man/man1 /opt/man/man1 /usr/man/manl" + lookpath="$lookpath /usr/share/man/man1 /usr/local/share/man/man1" + lookpath="$lookpath /usr/man/local/man1 /usr/man/l_man/man1" + lookpath="$lookpath /usr/local/man/u_man/man1 /usr/local/man/l_man/man1" + lookpath="$lookpath /usr/man/man.L" + mansrc=`./loc . $prefixexp/man/man1 $lookpath` + if $test -d "$mansrc"; then + dflt="$mansrc" + else + dflt="$sysman" + fi + set dflt + eval $prefixup + ;; +' ') dflt=none;; +*) dflt="$mansrc" + ;; +esac +echo " " +fn=dn~ +rp='Where do the manual pages (source) go?' +. ./getfile +if test "X$mansrcexp" != "X$ansexp"; then + installmansrc='' +fi +mansrc="$ans" +mansrcexp="$ansexp" +case "$mansrc" in +'') mansrc=' ' + installmansrc='';; +esac +if $afs && $test "$mansrc"; then + $cat <<EOM + +Since you are running AFS, I need to distinguish the directory in which +manual pages reside from the directory in which they are installed (and from +which they are presumably copied to the former directory by occult means). + +EOM + case "$installmansrc" in + '') dflt=`echo $mansrcexp | sed 's#^/afs/#/afs/.#'`;; + *) dflt="$installmansrc";; + esac + fn=de~ + rp='Where will man pages be installed?' + . ./getfile + installmansrc="$ans" +else + installmansrc="$mansrcexp" +fi + +case "$mansrc" in +' ') manext='0';; +*l) manext=l;; +*n) manext=n;; +*o) manext=l;; +*p) manext=n;; +*C) manext=C;; +*L) manext=L;; +*L1) manext=L1;; +*) manext=1;; +esac + diff --git a/mcon/U/mboxchar.U b/mcon/U/mboxchar.U new file mode 100644 index 0000000..ed33695 --- /dev/null +++ b/mcon/U/mboxchar.U @@ -0,0 +1,70 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: mboxchar.U,v $ +?RCS: Revision 3.0.1.2 1995/07/25 14:13:12 ram +?RCS: patch56: ensure ctrl-A characters are visible in prompt (WED) +?RCS: +?RCS: Revision 3.0.1.1 1994/05/06 15:11:22 ram +?RCS: patch23: added support for MMDF mailboxes (WED) +?RCS: +?RCS: Revision 3.0 1993/08/18 12:09:15 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:mboxchar: cat package shsharp Myread Oldconfig +?MAKE: -pick add $@ %< +?S:mboxchar: +?S: This variable contains the eventual value of the MBOXCHAR symbol, +?S: which is how a C program can identify a file as a mailbox. +?S:. +?C:MBOXCHAR: +?C: This symbol contains a character which will match the beginning +?C: of a mailbox file. +?C:. +?H:#define MBOXCHAR '$mboxchar' /**/ +?H:. +?T:CTRLA +?INIT:CTRLA=`echo a | tr a '\001'` +: determine how to determine when a file is a mailbox +case "$mboxchar" in +'') dflt=F;; +?X: The following ^A is two-chars to ensure it will print out -- WED +"$CTRLA") dflt='^A';; +*) dflt="$mboxchar";; +esac +$cat <<EOM + +In saving articles, $package wants to differentiate between saving to +mailbox format files and normal files. It does this by examining the +first character of the file in question. On most systems the first line +starts with "From ...", so the first character is an F. Other systems +use magic cookies like control codes between articles, so one of those +would be first. For example, MMDF messages are separated with lines of +four control-A's (you may specify one as ^A, i.e. caret A). + +EOM +rp="What's the first character of a mailbox file?" +. ./myread +mboxchar="$ans" +case "$mboxchar" in +'F') ;; +"$CTRLA") ;; +'^A'|'^a') mboxchar="$CTRLA";; +*) cat <<'EOM' + +You will need to edit the shell script mbox.saver to properly append an +article to a mailbox. The arguments to the script are documented in +EOM + case "$shsharp" in + false) echo "comments in mbox.saver.std.";; + true) echo "comments in the shell script itself.";; + esac +esac + diff --git a/mcon/U/mkdep.U b/mcon/U/mkdep.U new file mode 100644 index 0000000..23d1a26 --- /dev/null +++ b/mcon/U/mkdep.U @@ -0,0 +1,268 @@ +?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: mkdep.U,v $ +?RCS: Revision 3.0.1.4 1997/02/28 16:13:07 ram +?RCS: patch61: replaced .o with $_o all over the place +?RCS: +?RCS: Revision 3.0.1.3 1994/10/29 16:25:02 ram +?RCS: patch36: added ?F: line for metalint file checking +?RCS: +?RCS: Revision 3.0.1.2 1994/01/24 14:15:12 ram +?RCS: patch16: cppflags is now an optional dependency +?RCS: +?RCS: Revision 3.0.1.1 1993/12/15 08:22:39 ram +?RCS: patch15: force zero exit status in all mkdep scripts +?RCS: +?RCS: Revision 3.0 1993/08/18 12:09:16 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?X: +?X: This unit generates the script 'mkdep' in the top-level directory. +?X: It is up to the makefile to use it for automatic dependencies +?X: generation (usage: 'mkdep [cppflags] -- *.c'). +?X: +?MAKE:mkdep: spitshell startsh cpp +cppflags grep contains rm sed sort uniq \ + Getfile Oldconfig eunicefix cat +cc cppminus test pkgsrc _o +?MAKE: -pick add $@ %< +?S:mkdep: +?S: This variable holds the name of a command to generate makefile +?S: dependencies on the standard output. It is the pathname of the +?S: generated mkdep script. +?S:. +?F:mkdep +?T:IFS arg flags takeflags srcfile toplev filebase inc dir files file dep c +: find out how to generate dependencies +echo " " +echo "Checking how to generate makefile dependencies on your machine..." >&4 +?X: We are in the UU directory +toplev=`cd ..;pwd` +$cat >dep.c <<'EOCP' +#include "dep.h" +EOCP +?X: Empty dep.h causes RIOS to barf +$cat >dep.h <<'EOCP' + +EOCP +takeflags='flags="" +case "$@" in +*--*) + for arg + do + shift + case "$arg" in + --) break;; + *) flags="$flags $arg";; + esac + done;; +esac' +case "$mkdep" in +'') + ;; +*) + if test -f "$mkdep" && + $mkdep dep.c >dep.out 2>/dev/null && + $contains "dep$_o:.*dep\.h" dep.out >/dev/null 2>&1 + then + echo "$mkdep works." +?X: If they copied a config.sh from some other place, they'll have a working +?X: mkdep script probably, but not located at the top of the sources. And +?X: the Makefiles generated by jmake expect an mkdep script in the top dir. + case "$mkdep" in + "$pkgsrc/mkdep");; + *) echo "(copying it to $pkgsrc)" + cp $mkdep $pkgsrc/mkdep 2>/dev/null + if $pkgsrc/mkdep dep.c >dep.out 2>/dev/null && + $contains "dep$_o:.*dep\.h" dep.out >/dev/null 2>&1; then + mkdep=$pkgsrc/mkdep + else + echo "Hmm... The copy failed or something... Guessing again..." + mkdep= + fi + ;; + esac + else + mkdep= + fi +esac + +case "$mkdep" in +'') +?X: have to figure something out: Try cpp +?X: have to pass source names one by one to cpp... + $spitshell > ../mkdep <<EOM +$startsh +$takeflags +for srcfile +do + $cpp -M $cppflags \$flags \$srcfile 2>/dev/null +done +exit 0 +EOM + mkdep=$toplev/mkdep + chmod +x $mkdep + $eunicefix $mkdep + if $mkdep dep.c >dep.out 2>/dev/null && + $contains "dep$_o:.*dep\.h" dep.out >/dev/null 2>&1 + then + echo "Looks like we can use $cpp -M." + else + mkdep= + fi + ;; +esac + +case "$mkdep" in +'') +?X: have to figure something out: on NeXT, use cc -MM +?X: have to pass source names one by one to cc... + $spitshell > ../mkdep <<EOM +$startsh +$takeflags +for srcfile +do + $cc -MM $cppflags \$flags \$srcfile 2>/dev/null +done +exit 0 +EOM + mkdep=$toplev/mkdep + chmod +x $mkdep + $eunicefix $mkdep + if $mkdep dep.c >dep.out 2>/dev/null && + $contains "dep$_o: dep.h" dep.out >/dev/null 2>&1 + then + echo "Looks like we can use $cc -MM." + else + mkdep= + fi + ;; +esac + +case "$mkdep" in +'') +?X: still no luck -- try something fancier. + $spitshell >../mkdep <<EOS +$startsh +$takeflags +for srcfile +do + case "\$srcfile" in + *.c) c='.c';; + *.y) c='.y';; + *.l) c='.l';; + esac + filebase=\`basename \$srcfile \$c\` + <\$srcfile $cpp $cppminus $cppflags \$flags 2>/dev/null | \\ + $sed -e '/^# *[0-9]/!d' \\ + -e 's/^.*"\(.*\)".*\$/'\$filebase'$_o: \1/' \\ + -e 's|: \./|: |' \\ + -e 's|: *$|: '\$srcfile'|' | \\ + $grep -v '^#' | $sort | $uniq +done +exit 0 +EOS + mkdep=$toplev/mkdep + chmod +x $mkdep + $eunicefix $mkdep + if $mkdep dep.c >dep.out 2>/dev/null && + $contains "dep$_o:.*dep\.h" dep.out >/dev/null 2>&1 + then + echo "A shell script using $cpp does the trick." + else + echo "$cpp doesn't seem to be any use at all." + $spitshell >../mkdep <<EOS +$startsh +$takeflags +files="\$@" +set X \$flags +shift +inc='.' +while test \$# -gt 0 +do + case "\$1" in + -I) + shift + inc="\$inc:\$1" + ;; + -I*) + dir=\`echo \$1 | sed -e 's/^-I//'\` + inc="\$inc:\$dir" + ;; + esac + shift +done +set X \$files +shift +trap "$rm -f /tmp/mkdep\$\$; exit 1" 1 2 3 15 +for srcfile +do + case "\$srcfile" in + *.c) c='.c';; + *.y) c='.y';; + *.l) c='.l';; + esac + filebase=\`basename \$srcfile \$c\` + echo \$filebase$_o: \$srcfile + $grep '^#[ ]*include' \$srcfile /dev/null | \ + $sed -n -e 's/#[ ]*include[ ]*//' \\ + -e '/<\(.*\)>/ d' \\ + -e 's/:[^"]*"\([^"]*\)".*/: \1/' \\ + -e "s/\\.c:/$_o:/p" > /tmp/mkdep\$\$ +?X: Deal with directories specified via -I requests to locate files + IFS=': ' + while read file dep; do + for dir in \$inc; do + if $test -f "\$dir/\$dep"; then + dep="\$dir/\$dep" + break + fi + done + echo "\$file: \$dep" | $sed -e 's,: \./,: ,' + done </tmp/mkdep\$\$ + IFS=' ' + $rm -f /tmp/mkdep\$\$ +done +exit 0 +EOS + mkdep=$toplev/mkdep + chmod +x $mkdep + $eunicefix $mkdep + if $mkdep dep.c >dep.out 2>/dev/null && + $contains "dep$_o:.*dep\.h" dep.out >/dev/null 2>&1 + then + cat << EOM + +I can use a script with grep instead, but it will make some incorrect +dependencies, since it doesn't understand about conditional compilation. +Moreover, some dependencies may be missing, because scanning won't be +a recursive process. +If you have a program which generates makefile dependencies, you may want +to use it. If not, you can use the script and edit the Makefile by hand +if you need to. +EOM + else + mkdep= + cat << EOM + +I can't seem to generate makefile dependencies at all! Perhaps you have a +program that does? If you don't, you might look at the mkdep script to +see if you can create one which works. +EOM + fi + fi +esac +echo " " +dflt="$mkdep" +fn=f~/ +rp="Name of program to make makefile dependencies?" +. ./getfile +mkdep="$ans" +$rm -f dep.c dep.h dep$_o dep.out + diff --git a/mcon/U/models.U b/mcon/U/models.U new file mode 100644 index 0000000..8887a16 --- /dev/null +++ b/mcon/U/models.U @@ -0,0 +1,214 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: models.U,v $ +?RCS: Revision 3.0.1.2 1997/02/28 16:13:17 ram +?RCS: patch61: added ?F: metalint hint +?RCS: +?RCS: Revision 3.0.1.1 1993/08/25 14:02:39 ram +?RCS: patch6: added default for large +?RCS: +?RCS: Revision 3.0 1993/08/18 12:09:17 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:models split small medium large huge: test cat Myread sysman Oldconfig \ + Loc Warn contains rm +?MAKE: -pick add $@ %< +?S:models: +?S: This variable contains the list of memory models supported by this +?S: system. Possible component values are none, split, unsplit, small, +?S: medium, large, and huge. The component values are space separated. +?S:. +?S:split: +?S: This variable contains a flag which will tell the C compiler and loader +?S: to produce a program that will run in separate I and D space, for those +?S: machines that support separation of instruction and data space. It is +?S: up to the Makefile to use this. +?S:. +?S:small: +?S: This variable contains a flag which will tell the C compiler and loader +?S: to produce a program running with a small memory model. It is up to +?S: the Makefile to use this. +?S:. +?S:medium: +?S: This variable contains a flag which will tell the C compiler and loader +?S: to produce a program running with a medium memory model. If the +?S: medium model is not supported, contains the flag to produce large +?S: model programs. It is up to the Makefile to use this. +?S:. +?S:large: +?S: This variable contains a flag which will tell the C compiler and loader +?S: to produce a program running with a large memory model. It is up to +?S: the Makefile to use this. +?S:. +?S:huge: +?S: This variable contains a flag which will tell the C compiler and loader +?S: to produce a program running with a huge memory model. If the +?S: huge model is not supported, contains the flag to produce large +?S: model programs. It is up to the Makefile to use this. +?S:. +?T:unsplit tans modelcc +?F:!pdp11 +?D:large='' +?LINT:extern cc +: see what memory models we can support +case "$models" in +'') +?X: We may not use Cppsym or we get a circular dependency through cc. +?X: But this should work regardless of which cc we eventually use. + $cat >pdp11.c <<'EOP' +int main() { +#ifdef pdp11 + exit(0); +#else + exit(1); +#endif +} +EOP +?X: Run cc in a subshell in case they don't have a 'cc' command. +?X: Presumably they do have gcc or something. + case "$cc" in + '') modelcc="$cc" ;; + *) modelcc="cc" ;; + esac + ( $modelcc -o pdp11 pdp11.c ) >/dev/null 2>&1 + if $test -f pdp11 && ./pdp11 2>/dev/null; then + dflt='unsplit split' + else + tans=`./loc . X /lib/small /lib/large /usr/lib/small /usr/lib/large /lib/medium /usr/lib/medium /lib/huge` + case "$tans" in + X) dflt='none';; + *) if $test -d /lib/small || $test -d /usr/lib/small; then + dflt='small' + else + dflt='' + fi + if $test -d /lib/medium || $test -d /usr/lib/medium; then + dflt="$dflt medium" + fi + if $test -d /lib/large || $test -d /usr/lib/large; then + dflt="$dflt large" + fi + if $test -d /lib/huge || $test -d /usr/lib/huge; then + dflt="$dflt huge" + fi + esac + fi;; +*) dflt="$models";; +esac +$cat <<EOM + +Some systems have different model sizes. On most systems they are called +small, medium, large, and huge. On the PDP11 they are called unsplit and +split. If your system doesn't support different memory models, say "none". +If you wish to force everything to one memory model, say "none" here and +put the appropriate flags later when it asks you for other cc and ld flags. +Venix systems may wish to put "none" and let the compiler figure things out. +(In the following question multiple model names should be space separated.) + +The default for most systems is "none". + +EOM +rp="Which memory models are supported?" +. ./myread +models="$ans" + +case "$models" in +none) + small='' + medium='' + large='' + huge='' + unsplit='' + split='' + ;; +*split) + case "$split" in + '') if $contains '\-i' $sysman/ld.1 >/dev/null 2>&1 || \ + $contains '\-i' $sysman/cc.1 >/dev/null 2>&1; then + dflt='-i' + else + dflt='none' + fi;; + *) dflt="$split";; + esac + rp="What flag indicates separate I and D space?" + . ./myread + tans="$ans" + case "$tans" in + none) tans='';; + esac + split="$tans" + unsplit='';; +*large*|*small*|*medium*|*huge*) + case "$models" in + *large*) + case "$large" in + '') dflt='-Ml';; + *) dflt="$large";; + esac + rp="What flag indicates large model?" + . ./myread + tans="$ans" + case "$tans" in + none) tans=''; + esac + large="$tans";; + *) large='';; + esac + case "$models" in + *huge*) case "$huge" in + '') dflt='-Mh';; + *) dflt="$huge";; + esac + rp="What flag indicates huge model?" + . ./myread + tans="$ans" + case "$tans" in + none) tans=''; + esac + huge="$tans";; + *) huge="$large";; + esac + case "$models" in + *medium*) case "$medium" in + '') dflt='-Mm';; + *) dflt="$medium";; + esac + rp="What flag indicates medium model?" + . ./myread + tans="$ans" + case "$tans" in + none) tans=''; + esac + medium="$tans";; + *) medium="$large";; + esac + case "$models" in + *small*) case "$small" in + '') dflt='none';; + *) dflt="$small";; + esac + rp="What flag indicates small model?" + . ./myread + tans="$ans" + case "$tans" in + none) tans=''; + esac + small="$tans";; + *) small='';; + esac + ;; +*) + ./warn "Unrecognized memory models--you may have to edit Makefile.SH" + ;; +esac +$rm -f pdp11.* pdp11 + diff --git a/mcon/U/modetype.U b/mcon/U/modetype.U new file mode 100644 index 0000000..efdebf2 --- /dev/null +++ b/mcon/U/modetype.U @@ -0,0 +1,40 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu> +?RCS: +?RCS: $Log: modetype.U,v $ +?RCS: Revision 3.0.1.1 1994/10/29 16:25:07 ram +?RCS: patch36: created by ADO +?RCS: +?MAKE:modetype: Myread Typedef +?MAKE: -pick add $@ %< +?S:modetype: +?S: This variable defines modetype to be something like mode_t, +?S: int, unsigned short, or whatever type is used to declare file +?S: modes for system calls. +?S:. +?C:Mode_t: +?C: This symbol holds the type used to declare file modes +?C: for systems calls. It is usually mode_t, but may be +?C: int or unsigned short. It may be necessary to include <sys/types.h> +?C: to get any typedef'ed information. +?C:. +?H:#define Mode_t $modetype /* file mode parameter for system calls */ +?H:. +: see what type is used for mode_t +set mode_t modetype int stdio.h sys/types.h +eval $typedef +dflt="$modetype" +echo " " +rp="What type is used for file modes?" +. ./myread +modetype="$ans" + diff --git a/mcon/U/myhostname.U b/mcon/U/myhostname.U new file mode 100644 index 0000000..3e33f70 --- /dev/null +++ b/mcon/U/myhostname.U @@ -0,0 +1,284 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: myhostname.U,v $ +?RCS: Revision 3.0.1.3 1997/02/28 16:15:55 ram +?RCS: patch61: improved hostname lookup by using ypmatch when NIS is used +?RCS: +?RCS: Revision 3.0.1.2 1994/10/29 16:25:43 ram +?RCS: patch36: call ./xenix explicitely instead of relying on PATH +?RCS: patch36: now uses new Tr unit to convert to/from lowercase +?RCS: +?RCS: Revision 3.0.1.1 1994/06/20 07:06:20 ram +?RCS: patch30: now a little more clever for domain name guessing +?RCS: +?RCS: Revision 3.0 1993/08/18 12:09:18 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:myhostname phostname mydomain: contains sed test Myread Oldconfig \ + Guess Loc awk echo sort uniq +usrinc rm hostcat Tr osname +?MAKE: -pick add $@ %< +?S:myhostname (hostname): +?S: This variable contains the eventual value of the MYHOSTNAME symbol, +?S: which is the name of the host the program is going to run on. +?S: The domain is not kept with hostname, but must be gotten from mydomain. +?S: The dot comes with mydomain, and need not be supplied by the program. +?S:. +?S:mydomain: +?S: This variable contains the eventual value of the MYDOMAIN symbol, +?S: which is the domain of the host the program is going to run on. +?S: The domain must be appended to myhostname to form a complete host name. +?S: The dot comes with mydomain, and need not be supplied by the program. +?S:. +?S:phostname: +?S: This variable contains the eventual value of the PHOSTNAME symbol, +?S: which is a command that can be fed to popen() to get the host name. +?S: The program should probably not presume that the domain is or isn't +?S: there already. +?S:. +?C:MYHOSTNAME (HOSTNAME): +?C: This symbol contains name of the host the program is going to run on. +?C: The domain is not kept with hostname, but must be gotten from MYDOMAIN. +?C: The dot comes with MYDOMAIN, and need not be supplied by the program. +?C: If gethostname() or uname() exist, MYHOSTNAME may be ignored. If MYDOMAIN +?C: is not used, MYHOSTNAME will hold the name derived from PHOSTNAME. +?C:. +?C:MYDOMAIN: +?C: This symbol contains the domain of the host the program is going to +?C: run on. The domain must be appended to HOSTNAME to form a complete +?C: host name. The dot comes with MYDOMAIN, and need not be supplied by +?C: the program. If the host name is derived from PHOSTNAME, the domain +?C: may or may not already be there, and the program should check. +?C:. +?H:#define MYHOSTNAME "$myhostname" /**/ +?H:#define MYDOMAIN "$mydomain" /**/ +?H:. +?T:cont i tans tmp_re file +: now get the host name +echo " " +echo "Figuring out host name..." >&4 +case "$myhostname" in +'') cont=true + echo 'Maybe "hostname" will work...' + if tans=`sh -c hostname 2>&1` ; then + myhostname=$tans + phostname=hostname + cont='' + fi + ;; +*) cont='';; +esac +if $test "$cont"; then + if ./xenix; then + echo 'Oh, dear. Maybe "/etc/systemid" is the key...' + if tans=`cat /etc/systemid 2>&1` ; then + myhostname=$tans + phostname='cat /etc/systemid' + echo "Whadyaknow. Xenix always was a bit strange..." + cont='' + fi + elif $test -r /etc/systemid; then + echo "(What is a non-Xenix system doing with /etc/systemid?)" + fi +fi +if $test "$cont"; then + echo 'No, maybe "uuname -l" will work...' + if tans=`sh -c 'uuname -l' 2>&1` ; then + myhostname=$tans + phostname='uuname -l' + else + echo 'Strange. Maybe "uname -n" will work...' + if tans=`sh -c 'uname -n' 2>&1` ; then + myhostname=$tans + phostname='uname -n' + else + echo 'Oh well, maybe I can mine it out of whoami.h...' + if tans=`sh -c $contains' sysname $usrinc/whoami.h' 2>&1` ; then + myhostname=`echo "$tans" | $sed 's/^.*"\(.*\)"/\1/'` + phostname="sed -n -e '"'/sysname/s/^.*\"\\(.*\\)\"/\1/{'"' -e p -e q -e '}' <$usrinc/whoami.h" + else + case "$myhostname" in + '') echo "Does this machine have an identity crisis or something?" + phostname='';; + *) + echo "Well, you said $myhostname before..." + phostname='echo $myhostname';; + esac + fi + fi + fi +fi +case "$myhostname" in +'') myhostname=noname ;; +esac +: you do not want to know about this +set $myhostname +myhostname=$1 + +: verify guess +if $test "$myhostname" ; then + dflt=y + rp='Your host name appears to be "'$myhostname'".'" Right?" + . ./myread + case "$ans" in + y*) ;; + *) myhostname='';; + esac +fi + +: bad guess or no guess +while $test "X$myhostname" = X ; do + dflt='' + rp="Please type the (one word) name of your host:" + . ./myread + myhostname="$ans" +done + +: translate upper to lower if necessary +case "$myhostname" in +*[A-Z]*) + echo "(Normalizing case in your host name)" + myhostname=`echo $myhostname | ./tr '[A-Z]' '[a-z]'` + ;; +esac + +?X: Do not ask for domain name if this is not used later on. In that +?X: case, the hostname may keep its domain name, but it doesn't matter. +@if MYDOMAIN || mydomain +case "$myhostname" in +*.*) + dflt=`expr "X$myhostname" : "X[^.]*\(\..*\)"` + myhostname=`expr "X$myhostname" : "X\([^.]*\)\."` + echo "(Trimming domain name from host name--host name is now $myhostname)" + ;; +*) case "$mydomain" in + '') +?X: +?X: There is currently no way to say we do not want hostcat if mydomain is not +?X: used. One way to achieve that would be to put that code in a mydomain.U +?X: unit. However, we want to stick the sanity checks right after the domain +?X: name computation, or if none is done, right after the hostname computation. +?X: + { +?X: If we use NIS, try ypmatch. + test "X$hostcat" = "Xypcat hosts" && + ypmatch "$myhostname" hosts 2>/dev/null |\ + $sed -e 's/[ ]*#.*//; s/$/ /' > hosts && \ + $test -s hosts + } || { +?X: Extract only the relevant hosts, reducing file size, +?X: remove comments, insert trailing space for later use. + $hostcat | $sed -n -e "s/[ ]*#.*//; s/\$/ / + /[ ]$myhostname[ . ]/p" > hosts + } + tmp_re="[ . ]" + $test x`$awk "/[0-9].*[ ]$myhostname$tmp_re/ { sum++ } + END { print sum }" hosts` = x1 || tmp_re="[ ]" + dflt=.`$awk \ + "/[0-9].*[ ]$myhostname$tmp_re/ {for(i=2; i<=NF;i++) print \\\$i}" \ + hosts | $sort | $uniq | \ + $sed -n -e "s/$myhostname\.\([-a-zA-Z0-9_.]\)/\1/p"` + case `$echo X$dflt` in + X*\ *) echo "(Several hosts in /etc/hosts matched hostname)" + dflt=. + ;; +?X: There is no /etc/hosts on os390 + X.) + if $test -f /etc/hosts; then + echo "(You do not have fully-qualified names in /etc/hosts)" + else + echo "(I cannot locate a hosts database anywhere)" + fi + ;; + esac + case "$dflt" in + .) + tans=`./loc resolv.conf X /etc /usr/etc` + if $test -f "$tans"; then + echo "(Attempting domain name extraction from $tans)" +?X: Look for either a search or a domain directive. + dflt=.`$sed -n -e 's/ / /g' \ + -e 's/^search *\([^ ]*\).*/\1/p' $tans \ + | ./tr '[A-Z]' '[a-z]' 2>/dev/null` + case "$dflt" in + .) dflt=.`$sed -n -e 's/ / /g' \ + -e 's/^domain *\([^ ]*\).*/\1/p' $tans \ + | ./tr '[A-Z]' '[a-z]' 2>/dev/null` + ;; + esac + fi + ;; + esac + case "$dflt" in + .) echo "(No help from resolv.conf either -- attempting clever guess)" + dflt=.`sh -c domainname 2>/dev/null` + case "$dflt" in + '') dflt='.';; + .nis.*|.yp.*|.main.*) dflt=`echo $dflt | $sed -e 's/^\.[^.]*//'`;; + esac + ;; + esac + case "$dflt$osname" in + .os390) + file="//'SYS1.TCPPARMS(TCPDATA)'" + echo "(Attempting domain name extraction from $file)" + dflt=.`awk '/^DOMAINORIGIN/ {print $2}' "$file" 2>/dev/null` + ;; + esac + case "$dflt" in + .) echo "(Lost all hope -- silly guess then)" + dflt='.nonet' + ;; + esac + $rm -f hosts + ;; + *) dflt="$mydomain";; + esac;; +esac +echo " " +rp="What is your domain name?" +. ./myread +tans="$ans" +case "$ans" in +'') ;; +.*) ;; +*) tans=".$tans";; +esac +mydomain="$tans" + +: translate upper to lower if necessary +case "$mydomain" in +*[A-Z]*) + echo "(Normalizing case in your domain name)" + mydomain=`echo $mydomain | ./tr '[A-Z]' '[a-z]'` + ;; +esac + +@end +: a little sanity check here +case "$phostname" in +'') ;; +*) + case `$phostname | ./tr '[A-Z]' '[a-z]'` in + $myhostname$mydomain|$myhostname) ;; + *) + case "$phostname" in + sed*) + echo "(That doesn't agree with your whoami.h file, by the way.)" + ;; + *) + echo "(That doesn't agree with your $phostname command, by the way.)" + ;; + esac + ;; + esac + ;; +esac + diff --git a/mcon/U/n.U b/mcon/U/n.U new file mode 100644 index 0000000..67418f7 --- /dev/null +++ b/mcon/U/n.U @@ -0,0 +1,45 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: n.U,v $ +?RCS: Revision 3.0 1993/08/18 12:09:19 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:n c: contains +?MAKE: -pick add $@ %< +?S:n: +?S: This variable contains the -n flag if that is what causes the echo +?S: command to suppress newline. Otherwise it is null. Correct usage is +?S: $echo $n "prompt for a question: $c". +?S:. +?S:c: +?S: This variable contains the \c string if that is what causes the echo +?S: command to suppress newline. Otherwise it is null. Correct usage is +?S: $echo $n "prompt for a question: $c". +?S:. +: first determine how to suppress newline on echo command +echo " " +echo "Checking echo to see how to suppress newlines..." +(echo "hi there\c" ; echo " ") >.echotmp +if $contains c .echotmp >/dev/null 2>&1 ; then + echo "...using -n." + n='-n' + c='' +else + cat <<'EOM' +...using \c +EOM + n='' + c='\c' +fi +echo $n "The star should be here-->$c" +echo '*' +rm -f .echotmp + diff --git a/mcon/U/nametype.U b/mcon/U/nametype.U new file mode 100644 index 0000000..49bc8a2 --- /dev/null +++ b/mcon/U/nametype.U @@ -0,0 +1,134 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: nametype.U,v $ +?RCS: Revision 3.0.1.3 1994/10/29 16:26:09 ram +?RCS: patch36: call ./usg and ./bsd explicitely instead of relying on PATH +?RCS: +?RCS: Revision 3.0.1.2 1994/08/29 16:36:48 ram +?RCS: patch32: fixed typo: /etc/password -> /etc/passwd (WED) +?RCS: +?RCS: Revision 3.0.1.1 1993/09/13 16:10:09 ram +?RCS: patch10: made questions more explicit for 'Configure -s' prompting (WAD) +?RCS: +?RCS: Revision 3.0 1993/08/18 12:09:20 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:nametype d_passnames d_berknames d_usgnames: Myread Guess Oldconfig cat +?MAKE: -pick add $@ %< +?S:nametype: +?S: This variable indicates how full names are stored on this system. +?S: Values are bsd, usg, and other. +?S:. +?S:d_passnames: +?S: This variable conditionally defines the PASSNAMES symbol, +?S: which indicates to the C program that full names are stored in +?S: the /etc/passwd file. +?S:. +?S:d_berknames: +?S: This variable conditionally defines the PASSNAMES symbol, +?S: which indicates to the C program that full names are stored in +?S: the /etc/passwd file in Berkeley format. +?S:. +?S:d_usgnames: +?S: This variable conditionally defines the PASSNAMES symbol, +?S: which indicates to the C program that full names are stored in +?S: the /etc/passwd file in USG format. +?S:. +?C:PASSNAMES: +?C: This symbol, if defined, indicates that full names are stored in +?C: the /etc/passwd file. +?C:. +?C:BERKNAMES: +?C: This symbol, if defined, indicates that full names are stored in +?C: the /etc/passwd file in Berkeley format (name first thing, everything +?C: up to first comma, with & replaced by capitalized login id, yuck). +?C:. +?C:USGNAMES: +?C: This symbol, if defined, indicates that full names are stored in +?C: the /etc/passwd file in USG format (everything after - and before ( is +?C: the name). +?C:. +?H:#$d_passnames PASSNAMES /* (undef to take name from ~/.fullname) */ +?H:#$d_berknames BERKNAMES /* (that is, ":name,stuff:") */ +?H:#$d_usgnames USGNAMES /* (that is, ":stuff-name(stuff):") */ +?H:. +: find out how to find out full name +case "$d_berknames" in +"$define") + dflt=y;; +"$undef") + dflt=n;; +*) + if ./bsd; then + dflt=y + elif ./xenix; then + dflt=y + else + dflt=n + fi + ;; +esac +$cat <<'EOM' + +Does your /etc/passwd file keep full names in Berkeley/V7 format (name first +thing after ':' in GCOS field)? In that case, a typical entry in the password +file looks like this: + + guest:**paswword**:10:100:Mister Guest User:/usr/users:/bin/sh + ^^^^^^^^^^^^^^^^^ +EOM +rp="Berkeley/V7 format for full name in /etc/passwd?" +. ./myread +case "$ans" in +y*) d_passnames="$define" + d_berknames="$define" + d_usgnames="$undef" + nametype=bsd + ;; +*) + case "$d_usgnames" in + "$define") dflt=y;; + "$undef") dflt=n;; + *) + if ./usg; then + dflt=y + else + dflt=n + fi + ;; + esac +$cat <<'EOM' + +Does your passwd file keep full names in USG format (name sandwiched between a +'-' and a '(')? In that case, a typical entry in the password file looks like +this: + + guest:**paswword**:10:100:000-Mister Guest User(000):/usr/users:/bin/sh + ^^^^^^^^^^^^^^^^^ +EOM + rp="USG format for full name in /etc/passwd?" + . ./myread + case "$ans" in + n*) echo "Full name will be taken from ~/.fullname" + d_passnames="$undef" + d_berknames="$undef" + d_usgnames="$undef" + nametype=other + ;; + *) + d_passnames="$define" + d_berknames="$undef" + d_usgnames="$define" + nametype=usg + ;; + esac;; +esac + diff --git a/mcon/U/nblock_io.U b/mcon/U/nblock_io.U new file mode 100644 index 0000000..5c488de --- /dev/null +++ b/mcon/U/nblock_io.U @@ -0,0 +1,254 @@ +?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: nblock_io.U,v $ +?RCS: Revision 3.0.1.2 1997/02/28 16:17:14 ram +?RCS: patch61: simplify here document for shells that can't handle them well +?RCS: patch61: force use of "startsh" at the head of the generated script +?RCS: patch61: added new files to the ?F: metalint hint +?RCS: +?RCS: Revision 3.0.1.1 1995/07/25 14:13:22 ram +?RCS: patch56: created +?RCS: +?X: +?X: Simplify here document for shells that can't handle them well. +?X: (Problem reported on FreeBSD; it's unclear if this helps.) --AD +?X: +?MAKE:o_nonblock eagain rd_nodata d_eofnblk: cat rm +cc +ccflags +ldflags \ + d_open3 h_sysfile h_fcntl signal_t hint Oldconfig Setvar startsh Warn +?MAKE: -pick add $@ %< +?S:o_nonblock: +?S: This variable bears the symbol value to be used during open() or fcntl() +?S: to turn on non-blocking I/O for a file descriptor. If you wish to switch +?S: between blocking and non-blocking, you may try ioctl(FIOSNBIO) instead, +?S: but that is only supported by some devices. +?S:. +?S:eagain: +?S: This variable bears the symbolic errno code set by read() when no +?S: data is present on the file and non-blocking I/O was enabled (otherwise, +?S: read() blocks naturally). +?S:. +?S:rd_nodata: +?S: This variable holds the return code from read() when no data is +?S: present. It should be -1, but some systems return 0 when O_NDELAY is +?S: used, which is a shame because you cannot make the difference between +?S: no data and an EOF.. Sigh! +?S:. +?S:d_eofnblk: +?S: This variable conditionally defines EOF_NONBLOCK if EOF can be seen +?S: when reading from a non-blocking I/O source. +?S:. +?C:VAL_O_NONBLOCK: +?C: This symbol is to be used during open() or fcntl(F_SETFL) to turn on +?C: non-blocking I/O for the file descriptor. Note that there is no way +?C: back, i.e. you cannot turn it blocking again this way. If you wish to +?C: alternatively switch between blocking and non-blocking, use the +?C: ioctl(FIOSNBIO) call instead, but that is not supported by all devices. +?C:. +?C:VAL_EAGAIN: +?C: This symbol holds the errno error code set by read() when no data was +?C: present on the non-blocking file descriptor. +?C:. +?C:RD_NODATA: +?C: This symbol holds the return code from read() when no data is present +?C: on the non-blocking file descriptor. Be careful! If EOF_NONBLOCK is +?C: not defined, then you can't distinguish between no data and EOF by +?C: issuing a read(). You'll have to find another way to tell for sure! +?C:. +?C:EOF_NONBLOCK: +?C: This symbol, if defined, indicates to the C program that a read() on +?C: a non-blocking file descriptor will return 0 on EOF, and not the value +?C: held in RD_NODATA (-1 usually, in that case!). +?C:. +?H:#define VAL_O_NONBLOCK $o_nonblock +?H:#define VAL_EAGAIN $eagain +?H:#define RD_NODATA $rd_nodata +?H:#$d_eofnblk EOF_NONBLOCK +?H:. +?F:!try !try.out !try.ret !try.err !mtry +?T:status +?LINT:use d_open3 +: check for non-blocking I/O stuff +case "$h_sysfile" in +true) echo "#include <sys/file.h>" > head.c;; +*) + case "$h_fcntl" in + true) echo "#include <fcntl.h>" > head.c;; + *) echo "#include <sys/fcntl.h>" > head.c;; + esac + ;; +esac +echo " " +echo "Figuring out the flag used by open() for non-blocking I/O..." >&4 +case "$o_nonblock" in +'') + $cat head.c > try.c + $cat >>try.c <<'EOCP' +int main() { +#ifdef O_NONBLOCK + printf("O_NONBLOCK\n"); + exit(0); +#endif +#ifdef O_NDELAY + printf("O_NDELAY\n"); + exit(0); +#endif +?X: Stevens "Advanced Programming in the UNIX Environment" page 364 mentions +?X: the FNDELAY symbol, used in 4.33BSD (source: Paul Marquess). +#ifdef FNDELAY + printf("FNDELAY\n"); + exit(0); +#endif + exit(0); +} +EOCP + if $cc $ccflags $ldflags -o try try.c >/dev/null 2>&1; then + o_nonblock=`./try` + case "$o_nonblock" in + '') echo "I can't figure it out, assuming O_NONBLOCK will do.";; + *) echo "Seems like we can use $o_nonblock.";; + esac + else + echo "(I can't compile the test program; pray O_NONBLOCK is right!)" + fi + ;; +*) echo "Using $hint value $o_nonblock.";; +esac +$rm -f try try.* .out core + +echo " " +echo "Let's see what value errno gets from read() on a $o_nonblock file..." >&4 +case "$eagain" in +'') + $cat head.c > try.c + $cat >>try.c <<EOCP +#include <errno.h> +#include <sys/types.h> +#include <signal.h> +#define MY_O_NONBLOCK $o_nonblock +extern int errno; +$signal_t blech(x) int x; { exit(3); } +EOCP + $cat >> try.c <<'EOCP' +int main() +{ + int pd[2]; + int pu[2]; + char buf[1]; + char string[100]; + + pipe(pd); /* Down: child -> parent */ + pipe(pu); /* Up: parent -> child */ + if (0 != fork()) { + int ret; + close(pd[1]); /* Parent reads from pd[0] */ + close(pu[0]); /* Parent writes (blocking) to pu[1] */ + if (-1 == fcntl(pd[0], F_SETFL, MY_O_NONBLOCK)) + exit(1); + signal(SIGALRM, blech); + alarm(5); + if ((ret = read(pd[0], buf, 1)) > 0) /* Nothing to read! */ + exit(2); + sprintf(string, "%d\n", ret); + write(2, string, strlen(string)); + alarm(0); +#ifdef EAGAIN + if (errno == EAGAIN) { + printf("EAGAIN\n"); + goto ok; + } +#endif +#ifdef EWOULDBLOCK + if (errno == EWOULDBLOCK) + printf("EWOULDBLOCK\n"); +#endif + ok: + write(pu[1], buf, 1); /* Unblocks child, tell it to close our pipe */ + sleep(2); /* Give it time to close our pipe */ + alarm(5); + ret = read(pd[0], buf, 1); /* Should read EOF */ + alarm(0); + sprintf(string, "%d\n", ret); + write(3, string, strlen(string)); + exit(0); + } + + close(pd[0]); /* We write to pd[1] */ + close(pu[1]); /* We read from pu[0] */ + read(pu[0], buf, 1); /* Wait for parent to signal us we may continue */ + close(pd[1]); /* Pipe pd is now fully closed! */ + exit(0); /* Bye bye, thank you for playing! */ +} +EOCP + if $cc $ccflags $ldflags -o try try.c >/dev/null 2>&1; then +?X: Use script to avoid the possible 'alarm call' message + echo "$startsh" >mtry + echo "./try >try.out 2>try.ret 3>try.err || exit 4" >>mtry + chmod +x mtry + ./mtry >/dev/null 2>&1 + case $? in + 0) eagain=`$cat try.out`;; + 1) echo "Could not perform non-blocking setting!";; + 2) echo "I did a successful read() for something that was not there!";; + 3) echo "Hmm... non-blocking I/O does not seem to be working!";; + *) echo "Something terribly wrong happened during testing.";; + esac + rd_nodata=`$cat try.ret` + echo "A read() system call with no data present returns $rd_nodata." + case "$rd_nodata" in + 0|-1) ;; + *) + echo "(That's peculiar, fixing that to be -1.)" + rd_nodata=-1 + ;; + esac + case "$eagain" in + '') + echo "Forcing errno EAGAIN on read() with no data available." + eagain=EAGAIN + ;; + *) + echo "Your read() sets errno to $eagain when no data is available." + ;; + esac + status=`$cat try.err` + case "$status" in + 0) echo "And it correctly returns 0 to signal EOF.";; + -1) echo "But it also returns -1 to signal EOF, so be careful!";; + *) echo "However, your read() returns '$status' on EOF??";; + esac + val="$define" + if test "$status" = "$rd_nodata"; then + ./warn "your read() can't distinguish between EOF and no data!" + val="$undef" + fi + else + echo "I can't compile the test program--assuming errno EAGAIN will do." + eagain=EAGAIN + fi + set d_eofnblk + eval $setvar + ;; +*) + echo "Using $hint value $eagain." + echo "Your read() returns $rd_nodata when no data is present." + case "$d_eofnblk" in + "$define") echo "And you can see EOF because read() returns 0.";; + "$undef") echo "But you can't see EOF status from read() returned value.";; + *) +?X: Should not happen, but if it does, assume the worst! + echo "(Assuming you can't see EOF status from read anyway.)" + d_eofnblk=$undef + ;; + esac + ;; +esac +$rm -f try try.* .out core head.c mtry + diff --git a/mcon/U/newslevel.U b/mcon/U/newslevel.U new file mode 100644 index 0000000..763995e --- /dev/null +++ b/mcon/U/newslevel.U @@ -0,0 +1,53 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: newslevel.U,v $ +?RCS: Revision 3.0 1993/08/18 12:09:21 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:newslevel: cat contains test activeexp newslib Myread Oldconfig +?MAKE: -pick add $@ %< +?S:newslevel: +?S: The current revision level of the Usenet news system, encoded +?S: as 1000 * major rev + 10 * minor rev + sub rev. For instance, +?S: news 2.10.3 is encode as 2103, and 2.11 as 2110. +?S:. +?C:NEWSLEVEL: +?C: The current revision level of the Usenet news system, encoded +?C: as 1000 * major rev + 10 * minor rev + sub rev. For instance, +?C: news 2.10.3 is encode as 2103, and 2.11 as 2110. +?C:. +?H:#define NEWSLEVEL $newslevel /**/ +?H:. +: check for news version +if $test -f $activeexp; then + if ??? >/dev/null 2>&1; then + dflt=2110 + elif $test -f $newslib/cunbatch; then + dflt=2103 + elif $contains ' [0-9][0-9]* [0-9]' "$activeexp" >/dev/null 2>&1; then + dflt=2102 + else + dflt=2101 + fi +else + dflt=$newslevel +fi +$cat <<EOM + +The following news version number is a multiplexed integer: + 1000 * major rev + 10 * minor rev + sub rev. +News 2.10.3 would be 2103. 2.11 comes out as 2110. + +EOM +rp="What version of news are you going to be running?" +. ./myread +newslevel="$ans" + diff --git a/mcon/U/newslib.U b/mcon/U/newslib.U new file mode 100644 index 0000000..1c7ee7e --- /dev/null +++ b/mcon/U/newslib.U @@ -0,0 +1,61 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: newslib.U,v $ +?RCS: Revision 3.0 1993/08/18 12:09:23 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:newslib newslibexp: test inews Oldconfig Getfile +?MAKE: -pick add $@ %< +?S:newslib: +?S: This variable contains the eventual value of the NEWSLIB symbol, +?S: which holds the name of the directory serving as the news library. +?S: It may have a ~ on the front. See newslibexp for expanded version. +?S:. +?S:newslibexp: +?S: This variable contains the ~ expanded name of the news library +?S: directory. See newslib. +?S:. +?C:NEWSLIB: +?C: This symbol contains the name of the directory serving as the news +?C: library. The program must be prepared to do ~ expansion on it. +?C:. +?C:NEWSLIB_EXP: +?C: This symbol is the ~ expanded version of NEWSLIB, for programs that +?C: do not wish to deal with it at run-time. +?C:. +?H:#define NEWSLIB "$newslib" /**/ +?H:#define NEWSLIB_EXP "$newslibexp" /**/ +?H:. +?LINT:change inews +: figure out news library +case "$newslib" in +'') + dflt=/usr/lib/news + ;; +*) dflt=$newslib ;; +esac +echo " " +fn=d~ +rp='Where is your news library?' +. ./getfile +newslib="$ans" +newslibexp="$ansexp" +if $test -f $newslibexp/inews; then + echo "Aha! Inews is really in $newslibexp! Maybe this is 2.10.2..." >&4 + case "$inews" in + inews) + : null + ;; + *) echo "(Make sure $inews isn't an old version.)";; + esac + inews=$newslibexp/inews +fi + diff --git a/mcon/U/newsspool.U b/mcon/U/newsspool.U new file mode 100644 index 0000000..8e17b97 --- /dev/null +++ b/mcon/U/newsspool.U @@ -0,0 +1,52 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: newsspool.U,v $ +?RCS: Revision 3.0 1993/08/18 12:09:24 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:newsspool newsspoolexp: Getfile Oldconfig +?MAKE: -pick add $@ %< +?S:newsspool: +?S: This variable contains the eventual value of the NEWSSPOOL symbol, +?S: which is the directory name where news articles are spooled. It +?S: may have a ~ on the front of it. +?S:. +?S:newsspoolexp: +?S: This is the same as the newsspool variable, but is filename expanded +?S: at configuration time, for programs not wanting to deal with it at +?S: run-time. +?S:. +?C:NEWSSPOOL: +?C: This symbol contains the directory name where news articles are +?C: spooled. The program must be prepared to do ~ expansion on it. +?C:. +?C:NEWSSPOOL_EXP: +?C: This is the same as NEWSSPOOL, but is filename expanded at +?C: configuration time, for use in programs not willing to do so +?C: at run-time. +?C:. +?H:#define NEWSSPOOL "$newsspool" /**/ +?H:#define NEWSSPOOL_EXP "$newsspoolexp" /**/ +?H:. +: locate news spool directory +case "$newsspool" in +'') + dflt=/usr/spool/news + ;; +*) dflt="$newsspool";; +esac +echo " " +fn=d~ +rp='Where are news spooled?' +. ./getfile +newsspool="$ans" +newsspoolexp="$ansexp" + diff --git a/mcon/U/nis.U b/mcon/U/nis.U new file mode 100644 index 0000000..f33eb0d --- /dev/null +++ b/mcon/U/nis.U @@ -0,0 +1,168 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: nis.U,v $ +?RCS: Revision 3.0.1.3 1997/02/28 16:17:38 ram +?RCS: patch61: ensure suitable defaults for hostcat and friends +?RCS: +?RCS: Revision 3.0.1.2 1995/03/21 08:48:34 ram +?RCS: patch52: continued fix for NeXT NIS/NetInfo handling +?RCS: +?RCS: Revision 3.0.1.1 1995/02/15 14:16:23 ram +?RCS: patch51: now correctly handles NeXT using NIS rather than NetInfo +?RCS: +?RCS: Revision 3.0 1993/08/18 12:09:24 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:passcat groupcat hostcat: Myread Oldconfig test contains +?MAKE: -pick add $@ %< +?S:passcat: +?S: This variable contains a command that produces the text of the +?S: /etc/passwd file. This is normally "cat /etc/passwd", but can be +?S: "ypcat passwd" when NIS is used. +?S:. +?S:groupcat: +?S: This variable contains a command that produces the text of the +?S: /etc/group file. This is normally "cat /etc/group", but can be +?S: "ypcat group" when NIS is used. +?S:. +?S:hostcat: +?S: This variable contains a command that produces the text of the +?S: /etc/hosts file. This is normally "cat /etc/hosts", but can be +?S: "ypcat hosts" when NIS is used. +?S:. +: see if we have to deal with yellow pages, now NIS. +?X: NeXT gives us some fun here, as always, by having both NIS (former YP) +?X: and NetInfo. But since it has both, it's ok to put the test inside the if. +?X: Contributed by Thomas Neumann <tom@smart.bo.open.de>. +if $test -d /usr/etc/yp || $test -d /etc/yp || $test -d /usr/lib/yp; then + if $test -f /usr/etc/nibindd; then + echo " " + echo "I'm fairly confident you're on a NeXT." +@if passcat || groupcat + echo " " + rp='Do you get the passwd file via NetInfo?' + dflt=y + case "$passcat" in + nidump*) ;; + '') ;; + *) dflt=n;; + esac + . ./myread + case "$ans" in + y*) passcat='nidump passwd .' +@if groupcat + echo "(Assuming /etc/group is also distributed.)" + groupcat='nidump group .' +@end + ;; + *) echo "You told me, so don't blame me." + case "$passcat" in + nidump*) passcat='' +@if groupcat + groupcat='';; +@end + esac +@if groupcat + echo "(Assuming /etc/group is handled the same way.)" +@end + ;; + esac +@end +@if hostcat + echo " " + rp='Do you get the hosts file via NetInfo?' + dflt=y + case "$hostcat" in + nidump*) ;; + '') ;; + *) dflt=n;; + esac + . ./myread + case "$ans" in + y*) hostcat='nidump hosts .';; + *) case "$hostcat" in + nidump*) hostcat='';; + esac + ;; + esac +@end + fi +@if passcat || groupcat + case "$passcat" in + nidump*) ;; + *) + case "$passcat" in + *ypcat*) dflt=y;; + '') if $contains '^\+' /etc/passwd >/dev/null 2>&1; then + dflt=y + else + dflt=n + fi;; + *) dflt=n;; + esac + echo " " + rp='Are you getting the passwd file via yellow pages?' + . ./myread + case "$ans" in + y*) passcat='ypcat passwd' +@if groupcat + echo "(Assuming /etc/group is also distributed.)" + groupcat='ypcat group' +@end + ;; + *) passcat='cat /etc/passwd' +@if groupcat + echo "(Assuming /etc/group is also local.)" + groupcat='cat /etc/group' +@end + ;; + esac + ;; + esac +@end +@if hostcat + case "$hostcat" in + nidump*) ;; + *) + case "$hostcat" in + *ypcat*) dflt=y;; + '') if $contains '^\+' /etc/passwd >/dev/null 2>&1; then + dflt=y + else + dflt=n + fi;; + *) dflt=n;; + esac + echo " " + rp='Are you getting the hosts file via yellow pages?' + . ./myread + case "$ans" in + y*) hostcat='ypcat hosts';; + *) hostcat='cat /etc/hosts';; + esac + ;; + esac +@end +fi +?X: Ensure suitable default -- Manoj Srivastava +case "$hostcat" in +'') hostcat=':' + $test -f /etc/hosts && hostcat='cat /etc/hosts';; +esac +case "$groupcat" in +'') groupcat=':' + $test -f /etc/group && groupcat='cat /etc/group';; +esac +case "$passcat" in +'') passcat=':' + $test -f /etc/passwd && passcat='cat /etc/passwd';; +esac + diff --git a/mcon/U/nlist_pfx.U b/mcon/U/nlist_pfx.U new file mode 100644 index 0000000..55a4658 --- /dev/null +++ b/mcon/U/nlist_pfx.U @@ -0,0 +1,135 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: nlist_pfx.U,v $ +?RCS: Revision 3.0.1.1 1994/10/29 16:26:18 ram +?RCS: patch36: added ?F: line for metalint file checking +?RCS: +?RCS: Revision 3.0 1993/08/18 12:09:25 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:nlist_pfx nlist_fnd: cat test Myread Oldconfig libnlist \ + +cc +ccflags +?MAKE: -pick add $@ %< +?S:nlist_pfx: +?S: This variable holds any characters which preceed the symbol name +?S: when doing an nlist search. +?S:. +?S:nlist_fnd: +?S: This variable holds the member of the nlist structure which is +?S: nonzero if an nlist search succeeds. Presently, it is always "n_value". +?S:. +?C:NLIST_PREFIX: +?C: This manifest constant holds the string of characters which should +?C: preceed the symbol name when doing an nlist search. +?C:. +?C:NLIST_FOUND: +?C: This manifest constant holds the member of the nlist structure which +?C: is nonzero if an nlist search succeeds. +?C:. +?H:#define NLIST_PREFIX $nlist_pfx /**/ +?H:#define NLIST_FOUND $nlist_fnd /**/ +?H:. +?F:!nlisttest +?T:nlist_loc +: Nose around for nlist stuff +echo " " +echo "Checking out nlist stuff..." >&4 +$cat >nlisttest.c <<'EOCP' +#include <stdio.h> +#include <nlist.h> + +main(argc, argv) +int argc; +char **argv; +{ + int (*loc)(); + extern int hereIam(); + static struct nlist nl[] = { + { "IamNotFound", 0 }, + { "hereIam", 0 }, + { "_hereIam", 0 }, + { ".hereIam", 0 }, + { "", 0 } + }; + + loc = hereIam; + + if(argc == 1) { + printf("%ld\n", loc);} + else { + int i; + int rc; + + if(nlist("./nlisttest", nl) == -1) exit(-1); + i = argv[1][0] - '0'; + printf("%d %d %d\n", nl[i].n_name, nl[i].n_type, nl[i].n_value); + } + exit(0);} + +int hereIam() { + + return;} +EOCP +nlist_fnd=n_value +if $cc $ccflags -o nlisttest nlisttest.c $libnlist >/dev/null 2>&1 ; then + set `./nlisttest` + nlist_loc=$1 + + set `./nlisttest 0` + if $test "$3" = "0" ; then + echo "$nlist_fnd is 0 if nlist() fails, as I expected." + else + $cat <<EOM +Hello, Jim. We have just discovered that $nlist_fnd was nonzero on an +nlist() lookup failure! Your mission, should you choose to accept it, is to +edit either config.sh (to provide a Good value for nlist_fnd) or The Code +(to find an alternative to NLIST_FOUND), and reporting the full details of +your success to the MetaConfig Police. Of course, should you fail... +EOM + nlist_fnd="/* Bletch! */ */" + fi + + set `./nlisttest 1` + if $test "$nlist_loc" = "$3" ; then + echo "Symbols are stored with no initial characters." + nlist_pfx= + else + set `./nlisttest 2` + if $test "$nlist_loc" = "$3" ; then + echo "Symbols are stored with an initial underscore." + nlist_pfx=_ + else + set `./nlisttest 3` + if $test "$nlist_loc" = "$3" ; then + echo "Symbols are stored with an initial dot." + nlist_pfx=. + else + $cat <<EOM +I can't figure out the symbol prefix! +You get to edit config.sh and fix 'nlist_pfx' (Configure will let you do this +at the end of its configuration questions), or config.h and fix the value of +the NLIST_PREFIX symbol. +EOM + nlist_pfx="/* Bletch! */ */" + fi + fi + fi +else + $cat <<EOM +I can't get the nlist test program working! +You get to edit config.sh and fix 'nlist_pfx' (Configure will let you do this +at the end of its configuration questions) and 'nlist_fnd', or config.h and +fix the value of the NLIST_PREFIX and NLIST_FOUND symbols. +EOM + nlist_pfx="/* Bletch! */ */" + nlist_fnd="/* Bletch! */ */" +fi + diff --git a/mcon/U/orderlib.U b/mcon/U/orderlib.U new file mode 100644 index 0000000..0c77e54 --- /dev/null +++ b/mcon/U/orderlib.U @@ -0,0 +1,95 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: orderlib.U,v $ +?RCS: Revision 3.0.1.4 1997/02/28 16:18:18 ram +?RCS: patch61: replaced .a with $_a all over the place +?RCS: patch61: likewise for .o replaced by $_o +?RCS: patch61: now uses the ar located by Loc.U +?RCS: +?RCS: Revision 3.0.1.3 1995/01/11 15:33:04 ram +?RCS: patch45: allows hint files to specify their own value for 'ranlib' +?RCS: +?RCS: Revision 3.0.1.2 1994/10/29 16:26:48 ram +?RCS: patch36: now performs a real small compile for accurate checks (ADO) +?RCS: +?RCS: Revision 3.0.1.1 1994/08/29 16:31:17 ram +?RCS: patch32: use cc variable instead of hardwired 'cc' in 1st compile +?RCS: +?RCS: Revision 3.0 1993/08/18 12:09:26 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:orderlib ranlib: Loc ar cat test rm +cc +ccflags +ldflags +libs _a _o +?MAKE: -pick add $@ %< +?S:orderlib: +?S: This variable is "true" if the components of libraries must be ordered +?S: (with `lorder $* | tsort`) before placing them in an archive. Set to +?S: "false" if ranlib or ar can generate random libraries. +?S:. +?S:ranlib: +?S: This variable is set to the pathname of the ranlib program, if it is +?S: needed to generate random libraries. Set to ":" if ar can generate +?S: random libraries or if random libraries are not supported +?S:. +?F:!foobar +: see if ar generates random libraries by itself +echo " " +echo "Checking how to generate random libraries on your machine..." >&4 +?X: Some systems (like MIPS) complain when running ar... Others like Ultrix +?X: need an explicit 'ar ts' to add the table of contents. +?X: Still others like Linux run ar ts successfully, but still need ranlib. +?X: This set of tests seems the minimum necessary to check out Linux. +?X: We need to explicitly put the entries in out-of-order so that Sun's ld +?X: will fail. (Otherwise it complains, but gives an exit status of 0.) +echo 'int bar1() { return bar2(); }' > bar1.c +echo 'int bar2() { return 2; }' > bar2.c +$cat > foo.c <<'EOP' +int main() { printf("%d\n", bar1()); exit(0); } +EOP +$cc $ccflags -c bar1.c >/dev/null 2>&1 +$cc $ccflags -c bar2.c >/dev/null 2>&1 +$cc $ccflags -c foo.c >/dev/null 2>&1 +$ar rc bar$_a bar2$_o bar1$_o >/dev/null 2>&1 +if $cc $ccflags $ldflags -o foobar foo$_o bar$_a $libs > /dev/null 2>&1 && + ./foobar >/dev/null 2>&1; then + echo "ar appears to generate random libraries itself." + orderlib=false + ranlib=":" +elif $ar ts bar$_a >/dev/null 2>&1 && + $cc $ccflags $ldflags -o foobar foo$_o bar$_a $libs > /dev/null 2>&1 && + ./foobar >/dev/null 2>&1; then + echo "a table of contents needs to be added with 'ar ts'." + orderlib=false + ranlib="$ar ts" +else +?X: Allow hints to specify their own ranlib "script". For instance, on +?X: some NeXT machines, the timestamp put by ranlib is not correct, and this +?X: may raise tedious recompiles for nothing. Therefore, NeXT may add the +?X: ranlib='sleep 5; /bin/ranlib' line in their hints to "fix" that. +?X: (reported by Andreas Koenig <k@franz.ww.tu-berlin.de>) + case "$ranlib" in + :) ranlib='';; + '') + ranlib=`./loc ranlib X /usr/bin /bin /usr/local/bin` + $test -f $ranlib || ranlib='' + ;; + esac + if $test -n "$ranlib"; then + echo "your system has '$ranlib'; we'll use that." + orderlib=false + else + echo "your system doesn't seem to support random libraries" + echo "so we'll use lorder and tsort to order the libraries." + orderlib=true + ranlib=":" + fi +fi +$rm -f foo* bar* + diff --git a/mcon/U/orgname.U b/mcon/U/orgname.U new file mode 100644 index 0000000..b00e895 --- /dev/null +++ b/mcon/U/orgname.U @@ -0,0 +1,65 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: orgname.U,v $ +?RCS: Revision 3.0.1.1 1993/09/13 16:10:25 ram +?RCS: patch10: added support for /local/src to the search (WAD) +?RCS: +?RCS: Revision 3.0 1993/08/18 12:09:27 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:orgname: sed cat Myread Loc Oldconfig +?MAKE: -pick add $@ %< +?S:orgname: +?S: This variable contains the eventual value of the ORGNAME symbol, +?S: which contains either the organizaton name or the full pathname +?S: of a file containing the organization name. +?S:. +?C:ORGNAME: +?C: This symbol contains either the organizaton name or the full pathname +?C: of a file containing the organization name, which the program must +?C: be prepared to open and substitute the contents of. +?C:. +?H:#define ORGNAME "$orgname" /**/ +?H:. +?T:longshots xxx +: get organization name +longshots='/local/src /usr/src/new /usr/src/local /usr/local/src' +case "$orgname" in +'') if xxx=`./loc news/src/defs.h x $longshots`; then + dflt=`$sed -n 's/^.*MYORG[ ]*"\(.*\)".*$/\1/p' $xxx` + else + dflt='' + fi + ;; +*) dflt="$orgname";; +esac +$cat << 'EOH' + +Please type the name of your organization as you want it to appear on the +Organization line of outgoing articles. (It's nice if this also specifies +your location. Your city name is probably sufficient if well known.) +For example: + + University of Southern North Dakota, Hoople + +You may also put the name of a file, as long as it begins with a slash. +For example: + + /etc/organization + +EOH +orgname="" +while test "X$orgname" = "X"; do + rp='Organization:' + . ./myread + orgname="$ans" +done + diff --git a/mcon/U/packadmin.U b/mcon/U/packadmin.U new file mode 100644 index 0000000..dfffa3e --- /dev/null +++ b/mcon/U/packadmin.U @@ -0,0 +1,33 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1996, Andy Dougherty +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: +?MAKE:packadmin: cf_email Oldconfig Myread cat spackage package +?MAKE: -pick add $@ %< +?Y:TOP +?S:packadmin: +?S: Electronic mail address of the package administrator. +?S:. +: check wehther they will act as local admin for the package +$cat <<EOM + +If you or somebody else will be maintaining $package at your site, please +fill in the correct e-mail address here so that they may be contacted +if necessary. You may enter "none" for no administrator. + +EOM +case "$packadmin" in +'') dflt="$cf_email";; +*) dflt="$packadmin";; +esac +rp="$spackage administrator e-mail address" +. ./myread +packadmin="$ans" + diff --git a/mcon/U/package.U b/mcon/U/package.U new file mode 100644 index 0000000..32a4398 --- /dev/null +++ b/mcon/U/package.U @@ -0,0 +1,56 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: package.U,v $ +?RCS: Revision 3.0.1.3 1994/10/29 16:27:21 ram +?RCS: patch36: beware of non-ascii character sets when translating case +?RCS: +?RCS: Revision 3.0.1.2 1993/11/10 17:37:02 ram +?RCS: patch14: skip definition of spackage if not otherwise used +?RCS: +?RCS: Revision 3.0.1.1 1993/09/13 16:11:10 ram +?RCS: patch10: added spackage, suitable for starting sentences +?RCS: +?RCS: Revision 3.0 1993/08/18 12:09:28 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:package spackage: Nothing +?MAKE: -pick wipe $@ %< +?S:package: +?S: This variable contains the name of the package being constructed. +?S: It is primarily intended for the use of later Configure units. +?S:. +?S:spackage: +?S: This variable contains the name of the package being constructed, +?S: with the first letter uppercased, i.e. suitable for starting +?S: sentences. +?S:. +?C:PACKAGE: +?C: This variable contains the name of the package being built. +?C:. +?H:#define PACKAGE "$package" +?H:. +?T:first last +: set package name +package='<PACKAGENAME>' +@if spackage +first=`echo $package | sed -e 's/^\(.\).*/\1/'` +last=`echo $package | sed -e 's/^.\(.*\)/\1/'` +?X: +?X: So early in the Configure script, we don't have ./tr set up and can't +?X: include Tr in our dependency or that would create a cycle. Therefore, +?X: we have to somehow duplicate the work done in Tr. That's life. +?X: +case "`echo AbyZ | tr '[:lower:]' '[:upper:]' 2>/dev/null`" in +ABYZ) spackage=`echo $first | tr '[:lower:]' '[:upper:]'`$last;; +*) spackage=`echo $first | tr '[a-z]' '[A-Z]'`$last;; +esac +@end + diff --git a/mcon/U/pager.U b/mcon/U/pager.U new file mode 100644 index 0000000..514259e --- /dev/null +++ b/mcon/U/pager.U @@ -0,0 +1,59 @@ +?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: pager.U,v $ +?RCS: Revision 3.0.1.2 1995/01/30 14:41:26 ram +?RCS: patch49: ensure dflt gets initialized in case no pagers are found (WED) +?RCS: +?RCS: Revision 3.0.1.1 1994/10/29 16:27:45 ram +?RCS: patch36: replaced Myread by Getfile in the dependency line +?RCS: +?RCS: Revision 3.0 1993/08/18 12:09:30 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:pager: pg more less Getfile Oldconfig +?MAKE: -pick add $@ %< +?S:pager: +?S: This variable contains the name of the preferred pager on the system. +?S: Usual values are (the full pathnames of) more, less, pg, or cat. +?S:. +: locate the preferred pager for this system +fn=f/ +case "$pager" in +'') + dflt='' + case "$pg" in + /*) dflt=$pg;; + [a-zA-Z]:/*) dflt=$pg;; + esac + case "$more" in + /*) dflt=$more;; + [a-zA-Z]:/*) dflt=$more;; + esac + case "$less" in + /*) dflt=$less;; + [a-zA-Z]:/*) dflt=$less;; + esac + case "$dflt" in + '') dflt=/usr/ucb/more;; + esac + ;; +*) dflt="$pager" +?X: Instruct ./getfile to trust the hinted or previous pager value, +?X: even if it does not begin with a slash. For example, on os2, +?X: pager might be cmd /c more. See comments in Getfile.U. + fn="f/($pager)" + ;; +esac +echo " " +rp='What pager is used on your system?' +. ./getfile +pager="$ans" + diff --git a/mcon/U/patchlevel.U b/mcon/U/patchlevel.U new file mode 100644 index 0000000..459f87f --- /dev/null +++ b/mcon/U/patchlevel.U @@ -0,0 +1,35 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: patchlevel.U,v $ +?RCS: Revision 3.0.1.1 1997/02/28 16:18:41 ram +?RCS: patch61: added support for src.U +?RCS: +?RCS: Revision 3.0 1993/08/18 12:09:31 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:patchlevel: package baserev test rsrc +?MAKE: -pick add $@ %< +?S:patchlevel: +?S: The patchlevel level of this package. +?S: The value of patchlevel comes from the patchlevel.h file. +?S:. +: get the patchlevel +echo " " +echo "Getting the current patchlevel..." >&4 +if $test -r $rsrc/patchlevel.h;then + patchlevel=`awk \ + '/^#[ ]*define[ ][ ]*PATCHLEVEL/ {print $3}' \ + < $rsrc/patchlevel.h` +else + patchlevel=0 +fi +echo "(You have $package $baserev PL$patchlevel.)" + diff --git a/mcon/U/perlpath.U b/mcon/U/perlpath.U new file mode 100644 index 0000000..30334a8 --- /dev/null +++ b/mcon/U/perlpath.U @@ -0,0 +1,56 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: perlpath.U,v $ +?RCS: Revision 3.0.1.2 1995/09/25 09:17:04 ram +?RCS: patch59: unit is now forced to the top of Configure, if possible +?RCS: +?RCS: Revision 3.0.1.1 1995/01/11 15:33:53 ram +?RCS: patch45: can now use Loc variables since path stripping is deferred +?RCS: +?RCS: Revision 3.0 1993/08/18 12:09:32 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?X: +?X: The purpose of this unit is to locate perl good enough to construct a #! +?X: +?MAKE:perlpath: Getfile Oldconfig Loc perl +?MAKE: -pick add $@ %< +?Y:TOP +?S:perlpath: +?S: This variable contains the eventual value of the PERLPATH symbol, +?S: which contains the absolute location of the perl interpeter. +?S:. +?C:PERLPATH: +?C: This symbol contains the absolute location of the perl interpeter. +?C:. +?H:#define PERLPATH "$perlpath" /**/ +?H:. +: determine perl absolute location +case "$perlpath" in +'') + if test -f /usr/bin/perl; then + dflt=/usr/bin/perl + else + case "$perl" in + */*) dflt="$perl";; + *) dflt=/usr/bin/perl;; + esac + fi + ;; +*) dflt="$perlpath" + ;; +esac +echo " " +fn=f~/ +rp="Where is perl located on your system?" +. ./getfile +perlpath="$ans" + diff --git a/mcon/U/pidtype.U b/mcon/U/pidtype.U new file mode 100644 index 0000000..e16bfa9 --- /dev/null +++ b/mcon/U/pidtype.U @@ -0,0 +1,39 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: pidtype.U,v $ +?RCS: Revision 3.0.1.1 1994/08/29 16:31:27 ram +?RCS: patch32: now uses new Typedef unit to compute type information +?RCS: +?RCS: Revision 3.0 1993/08/18 12:09:33 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:pidtype: Myread Typedef +?MAKE: -pick add $@ %< +?S:pidtype: +?S: This variable defines PIDTYPE to be something like pid_t, int, +?S: ushort, or whatever type is used to declare process ids in the kernel. +?S:. +?C:Pid_t (PIDTYPE): +?C: This symbol holds the type used to declare process ids in the kernel. +?C: It can be int, uint, pid_t, etc... It may be necessary to include +?C: <sys/types.h> to get any typedef'ed information. +?C:. +?H:#define Pid_t $pidtype /* PID type */ +?H:. +: see what type pids are declared as in the kernel +set pid_t pidtype int stdio.h sys/types.h +eval $typedef +dflt="$pidtype" +echo " " +rp="What type are process ids on this system declared as?" +. ./myread +pidtype="$ans" + diff --git a/mcon/U/pkgsrc.U b/mcon/U/pkgsrc.U new file mode 100644 index 0000000..6a61e80 --- /dev/null +++ b/mcon/U/pkgsrc.U @@ -0,0 +1,26 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: +?MAKE:pkgsrc: src rsrc +?MAKE: -pick add $@ %< +?S:pkgsrc: +?S: This variable holds the absolute path of the package source. +?S:. +?C:PACKAGE_SOURCE_DIR: +?C: Holds the directory name holding the package source. +?C:. +?H:#define PACKAGE_SOURCE_DIR "$pkgsrc" +?H:. +: define absolute package source directory +case "$src" in +/*) pkgsrc=$src;; +*) pkgsrc=`cd $rsrc; pwd`;; +esac + diff --git a/mcon/U/prefix.U b/mcon/U/prefix.U new file mode 100644 index 0000000..b773ed0 --- /dev/null +++ b/mcon/U/prefix.U @@ -0,0 +1,80 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu> +?RCS: +?RCS: $Log: prefix.U,v $ +?RCS: Revision 3.0.1.2 1995/01/30 14:44:05 ram +?RCS: patch49: new prefixexp variable holding a fully expanded prefix +?RCS: patch49: save off previous prefix value in oldprefix if changed (WED) +?RCS: patch49: added the INSTALLPREFIX define for C programs to use (WED) +?RCS: +?RCS: Revision 3.0.1.1 1994/08/29 16:31:34 ram +?RCS: patch32: created by ADO +?RCS: +?MAKE:prefix prefixexp +oldprefix: Getfile Loc Oldconfig cat package +?MAKE: -pick add $@ %< +?S:prefix: +?S: This variable holds the name of the directory below which the +?S: user will install the package. Usually, this is /usr/local, and +?S: executables go in /usr/local/bin, library stuff in /usr/local/lib, +?S: man pages in /usr/local/man, etc. It is only used to set defaults +?S: for things in bin.U, mansrc.U, privlib.U, or scriptdir.U. +?S:. +?S:prefixexp: +?S: This variable holds the full absolute path of the directory below +?S: which the user will install the package. Derived from prefix. +?S:. +?S:oldprefix: +?S: This variable is set non-null if the prefix was previously defined +?S: and gets set to a new value. Used internally by Configure only. +?S:. +?C:INSTALLPREFIX: +?C: This symbol contains the name of the install prefix for this package. +?C:. +?H:#define INSTALLPREFIX "$prefix" /**/ +?H:. +: determine root of directory hierarchy where package will be installed. +case "$prefix" in +'') + dflt=`./loc . /usr/local /usr/local /local /opt /usr` + ;; +*) + dflt="$prefix" + ;; +esac +$cat <<EOM + +By default, $package will be installed in $dflt/bin, manual +pages under $dflt/man, etc..., i.e. with $dflt as prefix for +all installation directories. Typically set to /usr/local, but you +may choose /usr if you wish to install $package among your system +binaries. If you wish to have binaries under /bin but manual pages +under /usr/local/man, that's ok: you will be prompted separately +for each of the installation directories, the prefix being only used +to set the defaults. + +EOM +fn=d~ +rp='Installation prefix to use?' +. ./getfile +oldprefix='' +case "$prefix" in +'') ;; +*) + case "$ans" in + "$prefix") ;; + *) oldprefix="$prefix";; + esac + ;; +esac +prefix="$ans" +prefixexp="$ansexp" + diff --git a/mcon/U/prefshell.U b/mcon/U/prefshell.U new file mode 100644 index 0000000..eb02c61 --- /dev/null +++ b/mcon/U/prefshell.U @@ -0,0 +1,60 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: prefshell.U,v $ +?RCS: Revision 3.0.1.2 1994/10/29 16:28:13 ram +?RCS: patch36: added SHELL temporary since metalint now sees ${SHELL} +?RCS: +?RCS: Revision 3.0.1.1 1993/09/13 16:11:47 ram +?RCS: patch10: non-portable var substitution was used (WAD) +?RCS: +?RCS: Revision 3.0 1993/08/18 12:09:34 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:prefshell: cat package Getfile Oldconfig ksh csh bash +?MAKE: -pick add $@ %< +?S:prefshell: +?S: This variable contains the eventual value of the PREFSHELL symbol, +?S: which contains the full name of the preferred user shell on this +?S: system. Usual values are /bin/csh, /bin/ksh, /bin/sh. +?S:. +?C:PREFSHELL: +?C: This symbol contains the full name of the preferred user shell on this +?C: system. Usual values are /bin/csh, /bin/ksh, /bin/sh. +?C:. +?H:#define PREFSHELL "$prefshell" /**/ +?H:. +?T:SHELL +: find out which shell people like to use most +case "$prefshell" in +'') + case "$ksh $bash $csh" in + */ksh*) dflt="$ksh" ;; + */bash*) dflt="$bash" ;; + */csh*) dflt="$csh" ;; + *) dflt='/bin/sh' ;; + esac + ;; +*) dflt="$prefshell";; +esac +?X: Some shells (Ultrix) do not understand ${SHELL:-/bin/sh}, sigh! +$cat <<EOM + +Give the full path name of the shell most people like to use on your system. +This will be used by $package whenever the user wants to get a shell +escape (for instance) and is not necessarily the same as the shell you are +currently using (${SHELL-/bin/sh}). + +EOM +fn=f/~ +rp='Preferred shell to be used?' +. ./getfile +prefshell=$ans + diff --git a/mcon/U/privlib.U b/mcon/U/privlib.U new file mode 100644 index 0000000..256550c --- /dev/null +++ b/mcon/U/privlib.U @@ -0,0 +1,96 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: privlib.U,v $ +?RCS: Revision 3.0.1.4 1995/09/25 09:17:09 ram +?RCS: patch59: unit is now forced to the top of Configure, if possible +?RCS: +?RCS: Revision 3.0.1.3 1995/01/30 14:44:23 ram +?RCS: patch49: can now handle installation prefix changes (from WED) +?RCS: +?RCS: Revision 3.0.1.2 1994/08/29 16:31:52 ram +?RCS: patch32: now uses installation prefix +?RCS: +?RCS: Revision 3.0.1.1 1993/09/13 16:12:34 ram +?RCS: patch10: added support for /local/lib (WED) +?RCS: patch10: prompt phrasing made more explicit (WED) +?RCS: +?RCS: Revision 3.0 1993/08/18 12:09:35 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:privlib privlibexp installprivlib: afs package cat Getfile \ + Oldconfig Prefixit test +?MAKE: -pick add $@ %< +?Y:TOP +?S:privlib: +?S: This variable contains the eventual value of the PRIVLIB symbol, +?S: which is the name of the private library for this package. It may +?S: have a ~ on the front. It is up to the makefile to eventually create +?S: this directory while performing installation (with ~ substitution). +?S:. +?S:privlibexp: +?S: This variable is the ~name expanded version of privlib, so that you +?S: may use it directly in Makefiles or shell scripts. +?S:. +?S:installprivlib: +?S: This variable is really the same as privlibexp but may differ on +?S: those systems using AFS. For extra portability, only this variable +?S: should be used in makefiles. +?S:. +?C:PRIVLIB: +?C: This symbol contains the name of the private library for this package. +?C: The library is private in the sense that it needn't be in anyone's +?C: execution path, but it should be accessible by the world. The program +?C: should be prepared to do ~ expansion. +?C:. +?C:PRIVLIB_EXP: +?C: This symbol contains the ~name expanded version of PRIVLIB, to be used +?C: in programs that are not prepared to deal with ~ expansion at run-time. +?C:. +?H:#define PRIVLIB "$privlib" /**/ +?H:#define PRIVLIB_EXP "$privlibexp" /**/ +?H:. +: determine where private executables go +set dflt privlib lib/$package +eval $prefixit +$cat <<EOM + +There are some auxiliary files for $package that need to be put into a +private library directory that is accessible by everyone. + +EOM +fn=d~+ +rp='Pathname where the private library files will reside?' +. ./getfile +if $test "X$privlibexp" != "X$ansexp"; then + installprivlib='' +fi +privlib="$ans" +privlibexp="$ansexp" +if $afs; then + $cat <<EOM + +Since you are running AFS, I need to distinguish the directory in which +private files reside from the directory in which they are installed (and from +which they are presumably copied to the former directory by occult means). + +EOM + case "$installprivlib" in + '') dflt=`echo $privlibexp | sed 's#^/afs/#/afs/.#'`;; + *) dflt="$installprivlib";; + esac + fn=de~ + rp='Where will private files be installed?' + . ./getfile + installprivlib="$ans" +else + installprivlib="$privlibexp" +fi + diff --git a/mcon/U/prototype.U b/mcon/U/prototype.U new file mode 100644 index 0000000..ec65247 --- /dev/null +++ b/mcon/U/prototype.U @@ -0,0 +1,118 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: prototype.U,v $ +?RCS: Revision 3.0.1.3 1994/05/06 15:11:49 ram +?RCS: patch23: ensure cc flags used when looking for prototype support +?RCS: +?RCS: Revision 3.0.1.2 1994/01/24 14:15:36 ram +?RCS: patch16: prototype handling macros now appear only when needed +?RCS: +?RCS: Revision 3.0.1.1 1993/08/25 14:03:12 ram +?RCS: patch6: defines were referring to non-existent VOID symbol +?RCS: +?RCS: Revision 3.0 1993/08/18 12:09:36 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:prototype: Myread Oldconfig cat +cc +ccflags rm Setvar +?MAKE: -pick add $@ %< +?S:prototype: +?S: This variable holds the eventual value of CAN_PROTOTYPE, which +?S: indicates the C compiler can handle funciton prototypes. +?S:. +?C:CAN_PROTOTYPE ~ %<: +?C: If defined, this macro indicates that the C compiler can handle +?C: function prototypes. +?C:. +?C:DOTS: +?C: This macro is used to specify the ... in function prototypes which +?C: have arbitrary additional arguments. +?C:. +?C:NXT_ARG: +?C: This macro is used to separate arguments in the declared argument list. +?C:. +?C:P_FUNC: +?C: This macro is used to declare "private" (static) functions. +?C: It takes three arguments: the function type and name, a parenthesized +?C: traditional (comma separated) argument list, and the declared argument +?C: list (in which arguments are separated with NXT_ARG, and additional +?C: arbitrary arguments are specified with DOTS). For example: +?C: +?C: P_FUNC(int foo, (bar, baz), int bar NXT_ARG char *baz[]) +?C:. +?C:P_FUNC_VOID: +?C: This macro is used to declare "private" (static) functions that have +?C: no arguments. The macro takes one argument: the function type and name. +?C: For example: +?C: +?C: P_FUNC_VOID(int subr) +?C:. +?C:V_FUNC: +?C: This macro is used to declare "public" (non-static) functions. +?C: It takes three arguments: the function type and name, a parenthesized +?C: traditional (comma separated) argument list, and the declared argument +?C: list (in which arguments are separated with NXT_ARG, and additional +?C: arbitrary arguments are specified with DOTS). For example: +?C: +?C: V_FUNC(int main, (argc, argv), int argc NXT_ARG char *argv[]) +?C:. +?C:V_FUNC_VOID: +?C: This macro is used to declare "public" (non-static) functions that have +?C: no arguments. The macro takes one argument: the function type and name. +?C: For example: +?C: +?C: V_FUNC_VOID(int fork) +?C:. +?C:_ (P): +?C: This macro is used to declare function parameters for folks who want +?C: to make declarations with prototypes using a different style than +?C: the above macros. Use double parentheses. For example: +?C: +?C: int main _((int argc, char *argv[])); +?C:. +?H:?%<:#$prototype CAN_PROTOTYPE /**/ +?H:?%<:#ifdef CAN_PROTOTYPE +?H:?NXT_ARG:#define NXT_ARG , +?H:?DOTS:#define DOTS , ... +?H:?V_FUNC:#define V_FUNC(name, arglist, args)name(args) +?H:?P_FUNC:#define P_FUNC(name, arglist, args)static name(args) +?H:?V_FUNC_VOID:#define V_FUNC_VOID(name)name(void) +?H:?P_FUNC_VOID:#define P_FUNC_VOID(name)static name(void) +?H:?_:#define _(args) args +?H:?%<:#else +?H:?NXT_ARG:#define NXT_ARG ; +?H:?DOTS:#define DOTS +?H:?V_FUNC:#define V_FUNC(name, arglist, args)name arglist args; +?H:?P_FUNC:#define P_FUNC(name, arglist, args)static name arglist args; +?H:?V_FUNC_VOID:#define V_FUNC_VOID(name)name() +?H:?P_FUNC_VOID:#define P_FUNC_VOID(name)static name() +?H:?_:#define _(args) () +?H:?%<:#endif +?H:. +?W:%<:NXT_ARG DOTS V_FUNC P_FUNC V_FUNC_VOID P_FUNC_VOID _ +?LINT:set prototype +: Cruising for prototypes +echo " " +echo "Checking out function prototypes..." >&4 +$cat >prototype.c <<'EOCP' +int main(int argc, char *argv[]) { + exit(0);} +EOCP +if $cc $ccflags -c prototype.c >prototype.out 2>&1 ; then + echo "Your C compiler appears to support function prototypes." + val="$define" +else + echo "Your C compiler doesn't seem to understand function prototypes." + val="$undef" +fi +set prototype +eval $setvar +$rm -f prototype* + diff --git a/mcon/U/ptrsize.U b/mcon/U/ptrsize.U new file mode 100644 index 0000000..7a903aa --- /dev/null +++ b/mcon/U/ptrsize.U @@ -0,0 +1,58 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: ptrsize.U,v $ +?RCS: Revision 3.0.1.1 1994/10/29 16:28:19 ram +?RCS: patch36: added ?F: line for metalint file checking +?RCS: +?RCS: Revision 3.0 1993/08/18 12:09:37 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:ptrsize: cat rm Myread +cc +ccflags +?MAKE: -pick add $@ %< +?S:ptrsize: +?S: This variable contains the value of the PTRSIZE symbol, which +?S: indicates to the C program how many bytes there are in a pointer. +?S:. +?C:PTRSIZE: +?C: This symbol contains the size of a pointer, so that the C preprocessor +?C: can make decisions based on it. +?C:. +?H:#define PTRSIZE $ptrsize /**/ +?H:. +?F:!try +: check for length of pointer +echo " " +case "$ptrsize" in +'') + echo "Checking to see how big your pointers are..." >&4 + $cat >try.c <<'EOCP' +#include <stdio.h> +int main() +{ + printf("%d\n", sizeof(char *)); +} +EOCP + if $cc $ccflags -o try try.c >/dev/null 2>&1 ; then + dflt=`./try` + else + dflt='4' + echo "(I can't seem to compile the test program. Guessing...)" + fi + ;; +*) + dflt="$ptrsize" + ;; +esac +rp="What is the size of a pointer (in bytes)?" +. ./myread +ptrsize="$ans" +$rm -f try.c try + diff --git a/mcon/U/randbits.U b/mcon/U/randbits.U new file mode 100644 index 0000000..16d720d --- /dev/null +++ b/mcon/U/randbits.U @@ -0,0 +1,83 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: randbits.U,v $ +?RCS: Revision 3.0.1.1 1997/02/28 16:19:29 ram +?RCS: patch61: added <unistd.h> and <stdlib.h> to the C program test +?RCS: +?RCS: Revision 3.0 1993/08/18 12:09:38 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?X: +?X: This unit has been somewhat made obsolete with creation of the +?X: randfunc function (which finds out how to generate random +?X: numbers between 0 and 1. +?X: +?MAKE:randbits: cat rm Myread cc i_unistd i_stdlib +?MAKE: -pick add $@ %< +?S:randbits: +?S: This variable contains the eventual value of the RANDBITS symbol, +?S: which indicates to the C program how many bits of random number +?S: the rand() function produces. +?S:. +?C:RANDBITS: +?C: This symbol contains the number of bits of random number the rand() +?C: function produces. Usual values are 15, 16, and 31. +?C:. +?H:#define RANDBITS $randbits /**/ +?H:. +: check for size of random number generator +echo " " +case "$randbits" in +'') + echo "Checking to see how many bits your rand function produces..." >&4 + $cat >try.c <<EOCP +#$i_unistd I_UNISTD +#$i_stdlib I_STDLIB +#include <stdio.h> +#ifdef I_UNISTD +# include <unistd.h> +#endif +#ifdef I_STDLIB +# include <stdlib.h> +#endif +EOCP + $cat >>try.c <<'EOCP' +int main() +{ + register int i; + register unsigned long tmp; + register unsigned long max = 0L; + + for (i = 1000; i; i--) { + tmp = (unsigned long)rand(); + if (tmp > max) max = tmp; + } + for (i = 0; max; i++) + max /= 2; + printf("%d\n",i); +} +EOCP + if $cc -o try try.c >/dev/null 2>&1 ; then + dflt=`try` + else + dflt='?' + echo "(I can't seem to compile the test program...)" + fi + ;; +*) + dflt="$randbits" + ;; +esac +rp='How many bits does your rand() function produce?' +. ./myread +randbits="$ans" +$rm -f try.c try + diff --git a/mcon/U/randfunc.U b/mcon/U/randfunc.U new file mode 100644 index 0000000..af3ba62 --- /dev/null +++ b/mcon/U/randfunc.U @@ -0,0 +1,164 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: randfunc.U,v $ +?RCS: Revision 3.0 1993/08/18 12:09:39 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?X: +?X: This is the new unit that should be used when random +?X: functions are to be used. It thus makes randbits.U obsolete. +?X: +?MAKE:randfunc mrand seedfunc nrandbits: cat +cc rm test Myread Csym +?MAKE: -pick add $@ %< +?S:randfunc: +?S: Indicates the name of the random number function to use. +?S: Values include drand48, random, and rand. In C programs, +?S: the 'nrand' macro is defined to generate uniformly distributed +?S: random numbers over the range [0., 1.] (see mrand and nrand). +?S:. +?S:mrand: +?S: Indicates the macro to be used to generate normalized +?S: random numbers. Uses randfunc, often divided by +?S: (double) ((1 << nrandbits) -1) in order to normalize the result. +?S: In C programs, the macro 'nrand' is maped on mrand. +?S:. +?S:seedfunc: +?S: Indicates the random number generating seed function. +?S: Values include srand48, srandom, and srand. +?S:. +?S:nrandbits: +?S: Indicates how many bits are produced by the function used to +?S: generate normalized random numbers. +?S:. +?C:nrand: +?C: This macro is to be used to generate uniformly distributed +?C: random numbers over the range [0., 1.]. +?C:. +?C:seednrand: +?C: This symbol defines the macro to be used in seeding the +?C: random number generator (see nrand). +?C:. +?H:#define nrand() $mrand /**/ +?H:#define seednrand(x) $seedfunc(x) /**/ +?H:. +?T:cont val +?LINT:nothere $nrandbits) +: How can we generate normalized random numbers ? +echo " " +case "$randfunc" in +'') + if set drand48 val -f; eval $csym; $val; then + dflt="drand48" + echo "Good, found drand48()." >&4 + elif set random val -f; eval $csym; $val; then + dflt="random" + echo "OK, found random()." >&4 + else + dflt="rand" + echo "Yick, looks like I have to use rand()." >&4 + fi + echo " " + ;; +*) + dflt="$randfunc" + ;; +esac +cont=true +while $test "$cont"; do + rp="Use which function to generate random numbers?" + . ./myread +?X: Invalidates nrandbits if the answer is not the default so +?X: that the value stored in config.sh will not be used when +?X: we change our random function. + if $test "$ans" = "$dflt"; then + : null + else + nrandbits='' + fi + randfunc="$ans" + if set $ans val -f; eval $csym; $val; then + cont='' + else + dflt=n + rp="Function $ans does not exists. Use that name anyway?" + . ./myread + dflt=rand + case "$ans" in + [yY]*) cont='';; + esac + fi + case "$cont" in + '') + case "$randfunc" in + drand48) + mrand="drand48()" + seedfunc="srand48" + ;; + rand*) + case "$nrandbits" in + '') +echo "Checking to see how many bits your $randfunc() function produces..." >&4 + $cat >try.c <<EOCP +#include <stdio.h> +int main() +{ + register int i; + register unsigned long tmp; + register unsigned long max = 0L; + extern long random(); + + for (i = 1000; i; i--) { + tmp = (unsigned long)$randfunc(); + if (tmp > max) max = tmp; + } + for (i = 0; max; i++) + max /= 2; + printf("%d\n",i); +} +EOCP + if $cc -o try try.c >/dev/null 2>&1 ; then + dflt=`try` + else + dflt='?' + echo "(I can't seem to compile the test program...)" + fi + ;; + *) + dflt="$nrandbits" + ;; + esac + rp="How many bits does your $randfunc() function produce?" + . ./myread + nrandbits="$ans" + $rm -f try.c try + mrand="($randfunc() / (double) ((1 << $nrandbits) -1))" + seedfunc="srand" + ;; +?X: The following is provided just in case... + *) + dflt="31" + rp="How many bits does your $randfunc() function produce?" + . ./myread + nrandbits="$ans" + seedfunc="s$randfunc" + mrand="($randfunc() / (double) ((1 << $nrandbits) -1))" + if set $seedfunc val -f; eval $csym; $val; then + echo "(Using $seedfunc() to seed random generator)" + else + echo "(Warning: no $seedfunc() to seed random generator)" + seedfunc=rand + fi + ;; + esac + ;; + esac +done + diff --git a/mcon/U/rcs_branch.U b/mcon/U/rcs_branch.U new file mode 100644 index 0000000..b53c1af --- /dev/null +++ b/mcon/U/rcs_branch.U @@ -0,0 +1,43 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: rcs_branch.U,v $ +?RCS: Revision 3.0 1993/08/18 12:09:40 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:rcs_branch: Myread contains Loc +?MAKE: -pick add $@ %< +?S:rcs_branch: +?S: This variable will hold "true" if rcs can take the -b<revision> +?S: option, which can make Life Easier on those folks who like to run +?S: rcsdiff manually. +?S:. +?T:xxx +: Tra la la la la +echo " " +echo "Checking to see if RCS understands the -b switch..." >&4 +xxx=`./loc rcs '' $pth` +case "$xxx" in +'') + rcs_branch=false + echo "Oh. You don't seem to have RCS here." + ;; +*) + rcs > rcsbranch.out 2>&1 + if $contains 'b\[rev\]' rcsbranch.out >/dev/null 2>&1 ; then + rcs_branch=true + echo "Nice! Your RCS is spiffy!" + else + rcs_branch=false + echo "Well, at least you have RCS. You know, a newer version is available." + fi + ;; +esac + diff --git a/mcon/U/registers.U b/mcon/U/registers.U new file mode 100644 index 0000000..344ceed --- /dev/null +++ b/mcon/U/registers.U @@ -0,0 +1,103 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: registers.U,v $ +?RCS: Revision 3.0.1.2 1997/02/28 16:19:41 ram +?RCS: patch61: removed empty ?LINT lines +?RCS: +?RCS: Revision 3.0.1.1 1994/10/29 16:28:33 ram +?RCS: patch36: call ./Cppsym explicitely instead of relying on PATH +?RCS: +?RCS: Revision 3.0 1993/08/18 12:09:41 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:registers reg1 reg2 reg3 reg4 reg5 reg6 reg7 reg8 reg9 reg10 reg11 \ + reg12 reg13 reg14 reg15 reg16: awk rm Cppsym Myread Oldconfig +?MAKE: -pick add $@ %< +?S:registers: +?S: This variable contains the number of register declarations paid +?S: attention to by the C compiler. +?S:. +?S:reg1: +?S: This variable, along with reg2, reg3, etc. contains the eventual +?S: value for the symbols register1, register2, register3, etc. It has +?S: either the value "register" or is null. +?S:. +?C:register1: +?C: This symbol, along with register2, register3, etc. is either the word +?C: "register" or null, depending on whether the C compiler pays attention +?C: to this many register declarations. The intent is that you don't have +?C: to order your register declarations in the order of importance, so you +?C: can freely declare register variables in sub-blocks of code and as +?C: function parameters. Do not use register<n> more than once per routine. +?C:. +?LINT:describe reg2 reg3 reg4 reg5 reg6 reg7 reg8 reg9 reg10 reg11 +?LINT:describe reg12 reg13 reg14 reg15 reg16 +?LINT:known register2 register3 register4 register5 register6 register7 +?LINT:known register8 register9 register10 register11 register12 register13 +?LINT:known register14 register15 register16 +?H:#define register1 $reg1 /**/ +?H:#define register2 $reg2 /**/ +?H:#define register3 $reg3 /**/ +?H:#define register4 $reg4 /**/ +?H:#define register5 $reg5 /**/ +?H:#define register6 $reg6 /**/ +?H:#define register7 $reg7 /**/ +?H:#define register8 $reg8 /**/ +?H:#define register9 $reg9 /**/ +?H:#define register10 $reg10 /**/ +?H:#define register11 $reg11 /**/ +?H:#define register12 $reg12 /**/ +?H:#define register13 $reg13 /**/ +?H:#define register14 $reg14 /**/ +?H:#define register15 $reg15 /**/ +?H:#define register16 $reg16 /**/ +?H:. +?F:!.foo +: see how many register declarations we want to use +case "$registers" in +'') + if ./Cppsym vax; then + dflt=6 + elif ./Cppsym sun mc68000 mips; then + dflt=10 + elif ./Cppsym pyr; then + dflt=14 + elif ./Cppsym ns32000 ns16000; then + dflt=5 + elif ./Cppsym $smallmach; then + dflt=3 + else + : if you have any other numbers for me, please send them in + dflt=6 + fi;; +*) dflt=$registers ;; +esac +?LINT:set reg2 reg3 reg4 reg5 reg6 reg7 reg8 reg9 reg10 reg11 +?LINT:set reg12 reg13 reg14 reg15 reg16 +cat <<EOM + +Different C compilers on different machines pay attention to different numbers +of register declarations. About how many register declarations in each routine +does your C compiler pay attention to? (OK to guess) + +EOM +rp="Maximum register declarations?" +. ./myread +registers=$ans +reg1='' +$awk "BEGIN { for (i=1; i<=16; i++) printf \"reg%d=''\n\", i}" \ + </dev/null >.foo +. ./.foo +$awk "BEGIN { for (i=1; i<=$registers; i++) printf \"reg%d=register\n\", i}" \ + </dev/null >.foo +. ./.foo +$rm -f .foo + diff --git a/mcon/U/rootid.U b/mcon/U/rootid.U new file mode 100644 index 0000000..4e15e9d --- /dev/null +++ b/mcon/U/rootid.U @@ -0,0 +1,35 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: rootid.U,v $ +?RCS: Revision 3.0.1.1 1995/01/30 14:45:36 ram +?RCS: patch49: now only prints a single empty line when outputting something +?RCS: +?RCS: Revision 3.0 1993/08/18 12:09:42 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:rootid: sed +?MAKE: -pick add $@ %< +?S:rootid: +?S: This variable contains the eventual value of the ROOTID symbol, +?S: which is the uid of root. +?S:. +?C:ROOTID: +?C: This symbol contains the uid of root, normally 0. +?C:. +?H:#define ROOTID $rootid /**/ +?H:. +: determine root id +rootid=`$sed -e "/^root:/{s/^[^:]*:[^:]*:\([^:]*\).*"'$'"/\1/" -e "q" -e "}" -e "d" </etc/passwd` +case "$rootid" in +'') rootid=0 ;; +*) echo " "; echo "Root uid = $rootid" >&4 ;; +esac + diff --git a/mcon/U/sbrksmart.U b/mcon/U/sbrksmart.U new file mode 100644 index 0000000..9b2bccb --- /dev/null +++ b/mcon/U/sbrksmart.U @@ -0,0 +1,85 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: sbrksmart.U,v $ +?RCS: Revision 3.0.1.2 1995/01/11 15:35:41 ram +?RCS: patch45: now sets sbrksmart to undef explicitely when lacking sbrk() +?RCS: patch45: forgot a cast when using return value from sbrk() +?RCS: +?RCS: Revision 3.0.1.1 1994/01/24 14:16:45 ram +?RCS: patch16: created +?RCS: +?MAKE:sbrksmart: cat d_sbrk +cc +ccflags +libs rm +?MAKE: -pick add $@ %< +?S:sbrksmart: +?S: This variable conditionally defines HAS_SMART_SBRK if the sbrk() +?S: routine honors a negative argument to lower the break value. +?S:. +?C:HAS_SMART_SBRK: +?C: This symbol is defined when the sbrk() system call may be used with +?C: a negative argument to lower the break value, therefore releasing +?C: core to the system. If not, you'd probably be better off using the +?C: mmap() system call. +?C:. +?H:#$sbrksmart HAS_SMART_SBRK /**/ +?H:. +?T:dumb +?F:!sbrk +: see whether sbrk can release core to the kernel +echo " " +case "$d_sbrk" in +"$define") + echo "Let's see if your sbrk() is smart enough to release core..." >&4 + $cat > sbrk.c <<'EOC' +#define INC 256 /* Small enough to be less than a page size */ + +int main() +{ + char *obrk = (char *) sbrk(0); + char *nbrk; + + nbrk = (char *) sbrk(INC); + if (nbrk == (char *) -1) + exit(1); /* Not enough memory */ + if (nbrk != obrk) + exit(2); /* Unreliable sbrk() */ + nbrk = (char *) sbrk(-INC); + if (nbrk == (char *) -1) + exit(3); /* May have understood negative arg as huge positive */ + if (obrk != (char *) sbrk(0)) + exit(4); /* Not smart, definitely */ + + exit(0); /* Ok */ +} +EOC + sbrksmart="$undef" + dumb='-- assuming dumb sbrk().' + if $cc $ccflags -o sbrk sbrk.c $libs >/dev/null 2>&1; then + ./sbrk >/dev/null 2>&1 + case $? in + 0) sbrksmart="$define" + echo "Yes, it can be used with negative values." ;; + 1) echo "Sorry, not enough memory $dumb" ;; + 2) echo "No it's not, and besides it seems to be buggy..." ;; + 3) echo "No, it fails with negative values." ;; + 4) echo "Nope, your sbrk() is too dumb." ;; + *) echo "Err... Unexpected result $dumb" ;; + esac + else + echo "(Could not compile test program $dumb)" + fi + ;; +*) + echo "Since you don't have sbrk(), let's forget about the smart test!" + sbrksmart="$undef" + ;; +esac +$rm -f sbrk sbrk.* core + diff --git a/mcon/U/sbrktype.U b/mcon/U/sbrktype.U new file mode 100644 index 0000000..a32f1ca --- /dev/null +++ b/mcon/U/sbrktype.U @@ -0,0 +1,44 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: sbrktype.U,v $ +?RCS: Revision 3.0 1993/08/18 12:09:43 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:sbrktype: Myread Oldconfig Loc contains Findhdr +?MAKE: -pick add $@ %< +?S:sbrktype: +?S: This variable defines sbrktype to be something like caddr_t, char *, +?S: or whatever type is used to declare sbrk() in the kernel. +?S:. +?C:Caddr_t (SBRKTYPE): +?C: This symbol holds the type of a core address. It is inteded to be used +?C: to safely declare the return type of system calls like sbrk(). It might +?C: be necessary to include <sys/types.h> as well. +?C:. +?H:#define Caddr_t $sbrktype /* <core address> type */ +?H:. +: see what type sbrk is declared as in the kernel +case "$sbrktype" in +'') + if $contains 'caddr_t;' `./findhdr sys/types.h` >/dev/null 2>&1 ; then + dflt='caddr_t'; + else + dflt='char *'; + fi + ;; +*) dflt="$sbrktype" + ;; +esac +echo " " +rp="What is the return type of sbrk() on this system?" +. ./myread +sbrktype="$ans" + diff --git a/mcon/U/scriptdir.U b/mcon/U/scriptdir.U new file mode 100644 index 0000000..fc1c857 --- /dev/null +++ b/mcon/U/scriptdir.U @@ -0,0 +1,110 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: scriptdir.U,v $ +?RCS: Revision 3.0.1.3 1995/09/25 09:17:15 ram +?RCS: patch59: unit is now forced to the top of Configure, if possible +?RCS: +?RCS: Revision 3.0.1.2 1995/01/30 14:46:13 ram +?RCS: patch49: can now handle installation prefix changes (from WED) +?RCS: +?RCS: Revision 3.0.1.1 1994/08/29 16:32:04 ram +?RCS: patch32: now uses installation prefix +?RCS: +?RCS: Revision 3.0 1993/08/18 12:09:45 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:scriptdir scriptdirexp installscript: afs cat test Getfile Loc \ + Oldconfig +bin Prefixit prefixexp Prefixup +?MAKE: -pick add $@ %< +?Y:TOP +?S:scriptdir: +?S: This variable holds the name of the directory in which the user wants +?S: to put publicly scripts for the package in question. It is either +?S: the same directory as for binaries, or a special one that can be +?S: mounted across different architectures, like /usr/share. Programs +?S: must be prepared to deal with ~name expansion. +?S:. +?S:scriptdirexp: +?S: This variable is the same as scriptdir, but is filename expanded +?S: at configuration time, for programs not wanting to bother with it. +?S:. +?S:installscript: +?S: This variable is usually the same as scriptdirexp, unless you are on +?S: a system running AFS, in which case they may differ slightly. You +?S: should always use this variable within your makefiles for portability. +?S:. +?C:SCRIPTDIR: +?C: This symbol holds the name of the directory in which the user wants +?C: to put publicly executable scripts for the package in question. It +?C: is often a directory that is mounted across diverse architectures. +?C: Programs must be prepared to deal with ~name expansion. +?C:. +?C:SCRIPTDIR_EXP: +?C: This is the same as SCRIPTDIR, but is filename expanded at +?C: configuration time, for use in programs not prepared to do +?C: ~name substitutions at run-time. +?C:. +?H:#define SCRIPTDIR "$scriptdir" /**/ +?H:#define SCRIPTDIR_EXP "$scriptdirexp" /**/ +?H:. +: determine where public executable scripts go +set scriptdir scriptdir +eval $prefixit +case "$scriptdir" in +'') + dflt="$bin" + : guess some guesses + $test -d /usr/share/scripts && dflt=/usr/share/scripts + $test -d /usr/share/bin && dflt=/usr/share/bin + $test -d /usr/local/script && dflt=/usr/local/script + $test -d $prefixexp/script && dflt=$prefixexp/script + set dflt + eval $prefixup + ;; +*) dflt="$scriptdir" + ;; +esac +$cat <<EOM + +Some installations have a separate directory just for executable scripts so +that they can mount it across multiple architectures but keep the scripts in +one spot. You might, for example, have a subdirectory of /usr/share for this. +Or you might just lump your scripts in with all your other executables. + +EOM +fn=d~ +rp='Where do you keep publicly executable scripts?' +. ./getfile +if $test "X$ansexp" != "X$scriptdirexp"; then + installscript='' +fi +scriptdir="$ans" +scriptdirexp="$ansexp" +if $afs; then + $cat <<EOM + +Since you are running AFS, I need to distinguish the directory in which +scripts reside from the directory in which they are installed (and from +which they are presumably copied to the former directory by occult means). + +EOM + case "$installscript" in + '') dflt=`echo $scriptdirexp | sed 's#^/afs/#/afs/.#'`;; + *) dflt="$installscript";; + esac + fn=de~ + rp='Where will public scripts be installed?' + . ./getfile + installscript="$ans" +else + installscript="$scriptdirexp" +fi + diff --git a/mcon/U/selecttype.U b/mcon/U/selecttype.U new file mode 100644 index 0000000..4b1eefe --- /dev/null +++ b/mcon/U/selecttype.U @@ -0,0 +1,109 @@ +?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: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu> +?RCS: +?RCS: $Log: selecttype.U,v $ +?RCS: Revision 3.0.1.3 1997/02/28 16:20:09 ram +?RCS: patch61: always include <sys/select.h> when available for test +?RCS: +?RCS: Revision 3.0.1.2 1995/07/25 14:14:06 ram +?RCS: patch56: removed harmful spaces in assignment +?RCS: +?RCS: Revision 3.0.1.1 1994/06/20 07:06:31 ram +?RCS: patch30: created by ADO +?RCS: +?MAKE:selecttype: cat +cc +ccflags rm Oldconfig Myread \ + d_fd_set d_select d_socket i_systime i_sysselct +?MAKE: -pick add $@ %< +?S:selecttype: +?S: This variable holds the type used for the 2nd, 3rd, and 4th +?S: arguments to select. Usually, this is 'fd_set *', if HAS_FD_SET +?S: is defined, and 'int *' otherwise. This is only useful if you +?S: have select(), naturally. +?S:. +?C:Select_fd_set_t: +?C: This symbol holds the type used for the 2nd, 3rd, and 4th +?C: arguments to select. Usually, this is 'fd_set *', if HAS_FD_SET +?C: is defined, and 'int *' otherwise. This is only useful if you +?C: have select(), of course. +?C:. +?H:#define Select_fd_set_t $selecttype /**/ +?H:. +?T:xxx yyy +: check for type of arguments to select. This will only really +: work if the system supports prototypes and provides one for +: select. +case "$d_select" in +$define) + : Make initial guess + case "$selecttype" in + ''|' ') + case "$d_fd_set" in + $define) xxx='fd_set *' ;; + *) xxx='int *' ;; + esac + ;; + *) xxx="$selecttype" + ;; + esac + : backup guess + case "$xxx" in + 'fd_set *') yyy='int *' ;; + 'int *') yyy='fd_set *' ;; + esac + + $cat <<EOM + +Checking to see what type of arguments are expected by select(). +EOM + $cat >try.c <<EOCP +#$i_systime I_SYS_TIME +#$i_sysselct I_SYS_SELECT +#$d_socket HAS_SOCKET +#include <sys/types.h> +#ifdef HAS_SOCKET +#include <sys/socket.h> /* Might include <sys/bsdtypes.h> */ +#endif +#ifdef I_SYS_TIME +#include <sys/time.h> +#endif +#ifdef I_SYS_SELECT +#include <sys/select.h> +#endif +int main() +{ + int width; + Select_fd_set_t readfds; + Select_fd_set_t writefds; + Select_fd_set_t exceptfds; + struct timeval timeout; + select(width, readfds, writefds, exceptfds, &timeout); + exit(0); +} +EOCP + if $cc $ccflags -c -DSelect_fd_set_t="$xxx" try.c >/dev/null 2>&1 ; then + selecttype="$xxx" + echo "Your system uses $xxx for the arguments to select." >&4 + elif $cc $ccflags -c -DSelect_fd_set_t="$yyy" try.c >/dev/null 2>&1 ; then + selecttype="$yyy" + echo "Your system uses $yyy for the arguments to select." >&4 + else + rp='What is the type for the 2nd, 3rd, and 4th arguments to select?' + dflt="$xxx" + . ./myread + selecttype="$ans" + fi + $rm -f try.[co] + ;; +*) selecttype='int *' + ;; +esac + diff --git a/mcon/U/sh.U b/mcon/U/sh.U new file mode 100644 index 0000000..f0b9965 --- /dev/null +++ b/mcon/U/sh.U @@ -0,0 +1,92 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1997, Chip Salzenberg +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: sh.U,v $ +?RCS: Revision 3.0.1.1 1997/02/28 16:20:13 ram +?RCS: patch61: created +?RCS: +?MAKE:sh: Head +?MAKE: -pick wipe $@ %< +?S:sh: +?S: This variable contains the full pathname of the shell used +?S: on this system to execute Bourne shell scripts. Usually, this will be +?S: /bin/sh, though it's possible that some systems will have /bin/ksh, +?S: /bin/pdksh, /bin/ash, /bin/bash, or even something such as +?S: D:/bin/sh.exe. +?S: This unit comes before Options.U, so you can't set sh with a -D +?S: option, though you can override this (and startsh) +?S: with -O -Dsh=/bin/whatever -Dstartsh=whatever +?S:. +?C:SH_PATH: +?C: This symbol contains the full pathname to the shell used on this +?C: on this system to execute Bourne shell scripts. Usually, this will be +?C: /bin/sh, though it's possible that some systems will have /bin/ksh, +?C: /bin/pdksh, /bin/ash, /bin/bash, or even something such as +?C: D:/bin/sh.exe. +?C:. +?H:#define SH_PATH "$sh" /**/ +?H:. +?T:xxx try pth p SYSTYPE +?LINT:extern maintloc maintname +?X: +?X: Be quiet unless something unusual happens because this gets +?X: loaded up even before options are processed. +?X: Can't use ./loc because that depends on startsh, which, in turn +?X: depends on this unit. +?X: +: Find the basic shell for Bourne shell scripts +case "$sh" in +'') +?X: SYSTYPE is for some older MIPS systems. +?X: I do not know if it is still needed. + case "$SYSTYPE" in + *bsd*|sys5*) xxx="/$SYSTYPE/bin/sh";; + *) xxx='/bin/sh';; + esac + if test -f "$xxx"; then + sh="$xxx" + else + : Build up a list and do a single loop so we can 'break' out. + pth=`echo $PATH | sed -e "s/$p_/ /g"` + for xxx in sh bash ksh pdksh ash; do + for p in $pth; do + try="$try ${p}/${xxx}" + done + done + for xxx in $try; do + if test -f "$xxx"; then + sh="$xxx" + break + elif test -f "$xxx$_exe"; then + sh="$xxx" + break + elif test -f "$xxx.exe"; then + sh="$xxx" + break + fi + done + fi + ;; +esac + +?X: fd 4 isn't open yet... +case "$sh" in +'') cat >&2 <<EOM +$me: Fatal Error: I can't find a Bourne Shell anywhere. + +Usually it's in /bin/sh. How did you even get this far? +Please contact me (<$maintname>) at <$maintloc> and +we'll try to straighten this all out. +EOM + exit 1 + ;; +esac + diff --git a/mcon/U/shm_for.U b/mcon/U/shm_for.U new file mode 100644 index 0000000..922f742 --- /dev/null +++ b/mcon/U/shm_for.U @@ -0,0 +1,118 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: shm_for.U,v $ +?RCS: Revision 3.0.1.1 1994/10/29 16:28:37 ram +?RCS: patch36: call ./Cppsym explicitely instead of relying on PATH +?RCS: +?RCS: Revision 3.0 1993/08/18 12:09:46 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:shm_for shm_att shm_lim: Cppsym Myread ipc uname +?MAKE: -pick add $@ %< +?S:shm_for: +?S: This variable tells us the type of machine we're expecting the +?S: shared memory code to run on. The value is available to C programs +?S: in the C_SHM_FOR manifest. +?S:. +?S:shm_att: +?S: This variable tells us where a shared memory segment should be +?S: attached. Good values are HIGH, LOW, and ZERO. +?S:. +?S:shm_lim: +?S: This variable tells us if shared memory attached HIGH should +?S: have an upper limit. +?S:. +?X: ---------------------------------------------------------- +?X: It's a potential lose to define anything beginning with SHM... +?X: At least we can think that S_ stands for "String version of ..." -- HMS +?X: ---------------------------------------------------------- +?C:S_SHM_FOR ~ %<: +?C: This symbol identifies what we chose for the target system's +?C: default shared memory configuration parameters. +?C:. +?C:S_SHM_ATT ~ %<: +?C: This symbol holds the default "place" to attach shared memory. +?C: Values are "HIGH", "ZERO", and "LOW". +?C:. +?C:S_SHM_LIM ~ %<: +?C: This symbol holds the default upper bound address limit if shared +?C: memory is attached HIGH. If zero, there is no upper limit. +?C:. +?H:?%<:#ifdef SERVE_SHM +?H:?%<:#define S_SHM_FOR "$shm_for" +?H:?%<:#define S_SHM_ATT "$shm_att" +?H:?%<:#define S_SHM_LIM "$shm_lim" +?H:?%<:#endif +?H:. +?W:%<:S_SHM_FOR S_SHM_ATT S_SHM_LIM +: see how to attach shared memory +echo " " +echo "Deciding how to attach shared memory..." >&4 + +case "$ipc" in +shm) + shm_for='Default case' + shm_att='HIGH' + shm_lim='0x0' + if ./Cppsym tower32 tower32_600; then + echo "NCR Towers are usually normal..." + : echo "Oh, an NCR Tower." + : This works for the 600 + shm_for='NCR Tower 32' + shm_att='LOW' + else + case "$uname" in + */uname) + case "`uname -m`" in + ACS??68*) + echo "Oh, an Altos 3068." + shm_for='Altos 3068:' + shm_lim='0x800000' + ;; + esac + ;; + *) + echo "Looks normal to me..." + ;; + esac + fi + + dflt="$shm_for" + rp='Description of shared memory configuration?' + . ./myread + shm_for="$ans" + + dflt="$shm_att" + rp='Where should shared memory be attached?' + . ./myread + shm_att="$ans" + + case "$shm_att" in + HIGH) + dflt="$shm_lim" + rp='What is the upper address limit for shared memory?' + . ./myread + shm_lim="$ans" + ;; + *) + shm_lim='' + ;; + esac + ;; + +*) + echo "but you aren't using shared memory so I won't bother." >&4 + shm_for='NOT CONFIGURED' + shm_att='NONE' + shm_lim='-1' + ;; +esac + diff --git a/mcon/U/sig_name.U b/mcon/U/sig_name.U new file mode 100644 index 0000000..b18e30b --- /dev/null +++ b/mcon/U/sig_name.U @@ -0,0 +1,157 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: sig_name.U,v $ +?RCS: Revision 3.0.1.5 1997/02/28 16:21:25 ram +?RCS: patch61: brand new algorithm for sig_name and (new!) sig_num +?RCS: +?RCS: Revision 3.0.1.4 1995/07/25 14:14:54 ram +?RCS: patch56: added <asm/signal.h> lookup for linux +?RCS: +?RCS: Revision 3.0.1.3 1995/05/12 12:24:11 ram +?RCS: patch54: now looks for <linux/signal.h> too (ADO) +?RCS: +?RCS: Revision 3.0.1.2 1994/06/20 07:06:57 ram +?RCS: patch30: final echo was missing to close awk-printed string +?RCS: +?RCS: Revision 3.0.1.1 1994/05/06 15:17:55 ram +?RCS: patch23: signal list now formatted to avoid scroll-ups (ADO) +?RCS: +?RCS: Revision 3.0 1993/08/18 12:09:47 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:sig_name sig_name_init sig_num sig_num_init sig_count sig_size: \ + awk Signal Oldconfig rm +?MAKE: -pick add $@ %< +?S:sig_name: +?S: This variable holds the signal names, space separated. The leading +?S: SIG in signal name is removed. A ZERO is prepended to the +?S: list. This is currently not used. +?S:. +?S:sig_name_init: +?S: This variable holds the signal names, enclosed in double quotes and +?S: separated by commas, suitable for use in the SIG_NAME definition +?S: below. A "ZERO" is prepended to the list, and the list is +?S: terminated with a plain 0. The leading SIG in signal names +?S: is removed. See sig_num. +?S:. +?S:sig_num: +?S: This variable holds the signal numbers, space separated. A ZERO is +?S: prepended to the list (corresponding to the fake SIGZERO), and +?S: the list is terminated with a 0. Those numbers correspond to +?S: the value of the signal listed in the same place within the +?S: sig_name list. +?S:. +?S:sig_num_init: +?S: This variable holds the signal numbers, enclosed in double quotes and +?S: separated by commas, suitable for use in the SIG_NUM definition +?S: below. A "ZERO" is prepended to the list, and the list is +?S: terminated with a plain 0. +?S:. +?S:sig_count (sig_name.U): +?S: This variable holds a number larger than the largest valid +?S: signal number. This is usually the same as the NSIG macro. +?S:. +?S:sig_size: +?S: This variable contains the number of elements of the sig_name +?S: and sig_num arrays, excluding the final NULL entry. +?S:. +?C:SIG_NAME: +?C: This symbol contains a list of signal names in order of +?C: signal number. This is intended +?C: to be used as a static array initialization, like this: +?C: char *sig_name[] = { SIG_NAME }; +?C: The signals in the list are separated with commas, and each signal +?C: is surrounded by double quotes. There is no leading SIG in the signal +?C: name, i.e. SIGQUIT is known as "QUIT". +?C: Gaps in the signal numbers (up to NSIG) are filled in with NUMnn, +?C: etc., where nn is the actual signal number (e.g. NUM37). +?C: The signal number for sig_name[i] is stored in sig_num[i]. +?C: The last element is 0 to terminate the list with a NULL. This +?C: corresponds to the 0 at the end of the sig_num list. +?C:. +?C:SIG_NUM: +?C: This symbol contains a list of signal numbers, in the same order as the +?C: SIG_NAME list. It is suitable for static array initialization, as in: +?C: int sig_num[] = { SIG_NUM }; +?C: The signals in the list are separated with commas, and the indices +?C: within that list and the SIG_NAME list match, so it's easy to compute +?C: the signal name from a number or vice versa at the price of a small +?C: dynamic linear lookup. +?C: Duplicates are allowed, but are moved to the end of the list. +?C: The signal number corresponding to sig_name[i] is sig_number[i]. +?C: if (i < NSIG) then sig_number[i] == i. +?C: The last element is 0, corresponding to the 0 at the end of +?C: the sig_name list. +?C:. +?C:SIG_COUNT: +?C: This variable contains a number larger than the largest +?C: signal number. This is usually the same as the NSIG macro. +?C:. +?C:SIG_SIZE: +?C: This variable contains the number of elements of the sig_name +?C: and sig_num arrays, excluding the final NULL entry. +?C:. +?H:#define SIG_NAME $sig_name_init /**/ +?H:#define SIG_NUM $sig_num_init /**/ +?H:#define SIG_COUNT $sig_count /**/ +?H:#define SIG_SIZE $sig_size /**/ +?H:. +?T:i doinit +?F:!= !signal_cmd +?X: signal.cmd creates a file signal.lst which has two columns: +?X: NAME number, e.g. +?X: HUP 1 +?X: The list is sorted on signal number, with duplicates moved to +?X: the end.. +: generate list of signal names +echo " " +case "$sig_name_init" in +'') doinit=yes ;; +*) case "$sig_num_init" in + ''|*,*) doinit=yes ;; + esac ;; +esac +case "$doinit" in +yes) + echo "Generating a list of signal names and numbers..." >&4 + . ./signal_cmd + sig_count=`$awk '/^NSIG/ { printf "%d", $2 }' signal.lst` + sig_name=`$awk 'BEGIN { printf "ZERO " } + !/^NSIG/ { printf "%s ", $1 }' signal.lst` + sig_num=`$awk 'BEGIN { printf "0 " } + !/^NSIG/ { printf "%d ", $2 }' signal.lst` + sig_name_init=`$awk 'BEGIN { printf "\"ZERO\", " } + !/^NSIG/ { printf "\"%s\", ", $1 } + END { printf "0\n" }' signal.lst` + sig_num_init=`$awk 'BEGIN { printf "0, " } + !/^NSIG/ { printf "%d, ", $2} + END { printf "0\n"}' signal.lst` + ;; +esac +echo "The following $sig_count signals are available:" +echo " " +echo $sig_name | $awk \ +'BEGIN { linelen = 0 } +{ + for (i = 1; i <= NF; i++) { + name = "SIG" $i " " + linelen = linelen + length(name) + if (linelen > 70) { + printf "\n" + linelen = length(name) + } + printf "%s", name + } + printf "\n" +}' +sig_size=`echo $sig_name | awk '{print NF}'` +$rm -f signal signal.c signal.awk signal.lst signal_cmd + diff --git a/mcon/U/sitearch.U b/mcon/U/sitearch.U new file mode 100644 index 0000000..47116dc --- /dev/null +++ b/mcon/U/sitearch.U @@ -0,0 +1,94 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1996, Andy Dougherty +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: sitearch.U,v $ +?RCS: Revision 3.0.1.1 1997/02/28 16:21:30 ram +?RCS: patch61: created +?RCS: +?MAKE:sitearch sitearchexp installsitearch: afs cat Getfile \ + Oldconfig Prefixit prefix test archname sitelib +?MAKE: -pick add $@ %< +?Y:TOP +?S:sitearch: +?S: This variable contains the eventual value of the SITEARCH symbol, +?S: which is the name of the private library for this package. It may +?S: have a ~ on the front. It is up to the makefile to eventually create +?S: this directory while performing installation (with ~ substitution). +?S:. +?S:sitearchexp: +?S: This variable is the ~name expanded version of sitearch, so that you +?S: may use it directly in Makefiles or shell scripts. +?S:. +?S:installsitearch: +?S: This variable is really the same as sitearchexp but may differ on +?S: those systems using AFS. For extra portability, only this variable +?S: should be used in makefiles. +?S:. +?C:SITEARCH: +?C: This symbol contains the name of the private library for this package. +?C: The library is private in the sense that it needn't be in anyone's +?C: execution path, but it should be accessible by the world. The program +?C: should be prepared to do ~ expansion. +?C: The standard distribution will put nothing in this directory. +?C: Individual sites may place their own extensions and modules in +?C: this directory. +?C:. +?C:SITEARCH_EXP: +?C: This symbol contains the ~name expanded version of SITEARCH, to be used +?C: in programs that are not prepared to deal with ~ expansion at run-time. +?C:. +?H:#define SITEARCH "$sitearch" /**/ +?H:#define SITEARCH_EXP "$sitearchexp" /**/ +?H:. +?T:xxx +: determine where site specific architecture-dependent libraries go. +xxx=`echo $sitelib/$archname | sed 's!^$prefix!!'` +: xxx is usuually lib/site_perl/archname. +set sitearch sitearch none +eval $prefixit +case "$sitearch" in +'') dflt="$sitelib/$archname" ;; +*) dflt="$sitearch" ;; +esac +$cat <<EOM + +The installation process will also create a directory for +architecture-dependent site-specific extensions and modules. + +EOM +fn=nd~+ +rp='Pathname for the site-specific architecture-dependent library files?' +. ./getfile +if $test "X$sitearchexp" != "X$ansexp"; then + installsitearch='' +fi +sitearch="$ans" +sitearchexp="$ansexp" +if $afs; then + $cat <<EOM + +Since you are running AFS, I need to distinguish the directory in which +private files reside from the directory in which they are installed (and from +which they are presumably copied to the former directory by occult means). + +EOM + case "$installsitearch" in + '') dflt=`echo $sitearchexp | sed 's#^/afs/#/afs/.#'`;; + *) dflt="$installsitearch";; + esac + fn=de~ + rp='Where will private files be installed?' + . ./getfile + installsitearch="$ans" +else + installsitearch="$sitearchexp" +fi + diff --git a/mcon/U/sitelib.U b/mcon/U/sitelib.U new file mode 100644 index 0000000..f2ba295 --- /dev/null +++ b/mcon/U/sitelib.U @@ -0,0 +1,97 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1996, Andy Dougherty +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: sitelib.U,v $ +?RCS: Revision 3.0.1.1 1997/02/28 16:21:35 ram +?RCS: patch61: created +?RCS: +?MAKE:sitelib sitelibexp installsitelib: afs cat Getfile \ + Oldconfig Prefixit test privlib package sed +?MAKE: -pick add $@ %< +?Y:TOP +?S:sitelib: +?S: This variable contains the eventual value of the SITELIB symbol, +?S: which is the name of the private library for this package. It may +?S: have a ~ on the front. It is up to the makefile to eventually create +?S: this directory while performing installation (with ~ substitution). +?S:. +?S:sitelibexp: +?S: This variable is the ~name expanded version of sitelib, so that you +?S: may use it directly in Makefiles or shell scripts. +?S:. +?S:installsitelib: +?S: This variable is really the same as sitelibexp but may differ on +?S: those systems using AFS. For extra portability, only this variable +?S: should be used in makefiles. +?S:. +?C:SITELIB: +?C: This symbol contains the name of the private library for this package. +?C: The library is private in the sense that it needn't be in anyone's +?C: execution path, but it should be accessible by the world. The program +?C: should be prepared to do ~ expansion. +?C: The standard distribution will put nothing in this directory. +?C: Individual sites may place their own extensions and modules in +?C: this directory. +?C:. +?C:SITELIB_EXP: +?C: This symbol contains the ~name expanded version of SITELIB, to be used +?C: in programs that are not prepared to deal with ~ expansion at run-time. +?C:. +?H:#define SITELIB "$sitelib" /**/ +?H:#define SITELIB_EXP "$sitelibexp" /**/ +?H:. +?T:prog +: determine where site specific libraries go. +set sitelib sitelib +eval $prefixit +case "$sitelib" in +'') +?X: remove any trailing -3.0 or other version indification + prog=`echo $package | $sed 's/-*[0-9.]*$//'` + dflt="$privlib/site_$prog" ;; +*) dflt="$sitelib" ;; +esac +$cat <<EOM + +The installation process will also create a directory for +site-specific extensions and modules. Some users find it convenient +to place all local files in this directory rather than in the main +distribution directory. + +EOM +fn=d~+ +rp='Pathname for the site-specific library files?' +. ./getfile +if $test "X$sitelibexp" != "X$ansexp"; then + installsitelib='' +fi +sitelib="$ans" +sitelibexp="$ansexp" +if $afs; then + $cat <<EOM + +Since you are running AFS, I need to distinguish the directory in which +private files reside from the directory in which they are installed (and from +which they are presumably copied to the former directory by occult means). + +EOM + case "$installsitelib" in + '') dflt=`echo $sitelibexp | sed 's#^/afs/#/afs/.#'`;; + *) dflt="$installsitelib";; + esac + fn=de~ + rp='Where will private files be installed?' + . ./getfile + installsitelib="$ans" +else + installsitelib="$sitelibexp" +fi + diff --git a/mcon/U/sizetype.U b/mcon/U/sizetype.U new file mode 100644 index 0000000..2556023 --- /dev/null +++ b/mcon/U/sizetype.U @@ -0,0 +1,40 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu> +?RCS: +?RCS: $Log: sizetype.U,v $ +?RCS: Revision 3.0.1.1 1994/08/29 16:32:10 ram +?RCS: patch32: created by ADO +?RCS: +?MAKE:sizetype: Myread Typedef +?MAKE: -pick add $@ %< +?S:sizetype: +?S: This variable defines sizetype to be something like size_t, +?S: unsigned long, or whatever type is used to declare length +?S: parameters for string functions. +?S:. +?C:Size_t: +?C: This symbol holds the type used to declare length parameters +?C: for string functions. It is usually size_t, but may be +?C: unsigned long, int, etc. It may be necessary to include +?C: <sys/types.h> to get any typedef'ed information. +?C:. +?H:#define Size_t $sizetype /* length paramater for string functions */ +?H:. +: see what type is used for size_t +set size_t sizetype 'unsigned int' stdio.h sys/types.h +eval $typedef +dflt="$sizetype" +echo " " +rp="What type is used for the length parameter for string functions?" +. ./myread +sizetype="$ans" + diff --git a/mcon/U/so.U b/mcon/U/so.U new file mode 100644 index 0000000..38121d6 --- /dev/null +++ b/mcon/U/so.U @@ -0,0 +1,50 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: so.U,v $ +?RCS: Revision 3.0.1.2 1994/10/29 16:30:04 ram +?RCS: patch36: now tells user how he can suppress shared lib lookup (ADO) +?RCS: patch36: removed echo at the top, since it's now in the here-doc (ADO) +?RCS: +?RCS: Revision 3.0.1.1 1994/06/20 07:07:02 ram +?RCS: patch30: created +?RCS: +?X: +?X: This unit computes the shared-object / shared-lib extension +?X: +?MAKE:so: test libpth Loc Myread Oldconfig cat +?MAKE: -pick add $@ %< +?S:so: +?S: This variable holds the extension used to identify shared libraries +?S: (also known as shared objects) on the system. Usually set to 'so'. +?S:. +?T: xxx +: compute shared library extension +case "$so" in +'') + if xxx=`./loc libc.sl X $libpth`; $test -f "$xxx"; then + dflt='sl' + else + dflt='so' + fi + ;; +*) dflt="$so";; +esac +$cat <<EOM + +On some systems, shared libraries may be available. Answer 'none' if +you want to suppress searching of shared libraries for the remainder +of this configuration. + +EOM +rp='What is the file extension used for shared libraries?' +. ./myread +so="$ans" + diff --git a/mcon/U/sockopt.U b/mcon/U/sockopt.U new file mode 100644 index 0000000..1a6fc35 --- /dev/null +++ b/mcon/U/sockopt.U @@ -0,0 +1,88 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: sockopt.U,v $ +?RCS: Revision 3.0.1.1 1995/07/25 14:16:14 ram +?RCS: patch56: obsoleted KEEPALIVE in favor of CAN_KEEPALIVE for consistency +?RCS: +?RCS: Revision 3.0 1993/08/18 12:09:48 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_keepalive: cat rm contains +cc +ccflags socketlib sockethdr \ + d_oldsock libs Oldconfig Setvar Findhdr +?MAKE: -pick add $@ %< +?S:d_keepalive: +?S: This symbol conditionally defines CAN_KEEPALIVE which indicates to the C +?S: program that setsockopt SO_KEEPALIVE will work properly. +?S:. +?C:CAN_KEEPALIVE (KEEPALIVE): +?C: This symbol if defined indicates to the C program that the SO_KEEPALIVE +?C: option of setsockopt() will work as advertised in the manual. +?C:. +?H:#$d_keepalive CAN_KEEPALIVE /**/ +?H:. +?F:!socket +?LINT:set d_keepalive +: see if setsockopt with SO_KEEPALIVE works as advertised +echo " " +case "$d_oldsock" in +"$undef") + if $contains SO_KEEPALIVE `./findhdr sys/socket.h` \ + /dev/null >/dev/null 2>&1 + then + echo "OK, let's see if SO_KEEPALIVE works as advertised..." >&4 + $cat > socket.c <<EOP +#include <sys/types.h> +#include <sys/socket.h> +#include <netinet/in.h> +#include <netdb.h> + +int main() +{ + int s = socket(AF_INET, SOCK_STREAM, 0); + if (s == -1) + exit(1); + if (-1 == setsockopt(s, SOL_SOCKET, SO_KEEPALIVE, 0, 0)) + exit(2); + exit(0); +} +EOP + if $cc $ccflags $sockethdr -o socket socket.c $libs \ + $socketlib >/dev/null 2>&1; then + ./socket >/dev/null 2>&1 + case $? in + 0) echo "Yes, it does!" + val="$define";; + 1) $cat <<EOM +(Something went wrong -- Assuming SO_KEEPALIVE is broken) +EOM + val="$undef";; + 2) echo "No, it doesn't. Don't trust your manuals!!" + val="$undef";; + esac + else + cat <<EOM +(I can't compile the test program -- Assuming SO_KEEPALIVE is broken) +EOM + val="$undef" + fi + else + echo "Strange!! You have BSD 4.2 sockets but no SO_KEEPALIVE option." + val="$undef" + fi;; +*) cat <<EOM +As you have an old socket interface, you can't have heard of SO_KEEPALIVE. +EOM + val="$undef";; +esac +set d_keepalive +eval $setvar +$rm -f socket socket.c + diff --git a/mcon/U/spitshell.U b/mcon/U/spitshell.U new file mode 100644 index 0000000..1692b52 --- /dev/null +++ b/mcon/U/spitshell.U @@ -0,0 +1,107 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: spitshell.U,v $ +?RCS: Revision 3.0.1.4 1997/02/28 16:22:12 ram +?RCS: patch61: removed useless chatter as this is now done very early +?RCS: +?RCS: Revision 3.0.1.3 1995/01/11 15:37:01 ram +?RCS: patch45: use 'test -f' instead of 'test -r' for exec-only cat progs (WED) +?RCS: patch45: protected "sh -c" within backquotes for Linux and SGI +?RCS: +?RCS: Revision 3.0.1.2 1994/08/29 16:33:00 ram +?RCS: patch32: don't create spitshell under the UU directory +?RCS: patch32: allow for cat in /bin or /usr/bin +?RCS: +?RCS: Revision 3.0.1.1 1993/09/13 16:12:58 ram +?RCS: patch10: made #!-failure message more friendly (WAD) +?RCS: +?RCS: Revision 3.0 1993/08/18 12:09:49 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:spitshell shsharp sharpbang: eunicefix sh Head +?MAKE: -pick add $@ %< +?S:spitshell: +?S: This variable contains the command necessary to spit out a runnable +?S: shell on this system. It is either cat or a grep -v for # comments. +?S:. +?S:shsharp: +?S: This variable tells further Configure units whether your sh can +?S: handle # comments. +?S:. +?S:sharpbang: +?S: This variable contains the string #! if this system supports that +?S: construct. +?S:. +?F:!sharp +?T:xcat p +?X: "paths" comes from Head +?LINT:extern paths _exe +: see if sh knows # comments +?X: This is loaded up early, so avoid being chatty. +?X: echo " " +?X: echo "Checking your $sh to see if it knows about # comments..." >&2 +if `$sh -c '#' >/dev/null 2>&1`; then +?X: echo "Your $sh handles # comments correctly." + shsharp=true + spitshell=cat +?X: echo " " +?X: echo "Okay, let's see if #! works on this system..." + xcat=/bin/cat + test -f $xcat$_exe || xcat=/usr/bin/cat + if test ! -f $xcat$_exe; then + for p in `echo $PATH | sed -e "s/$p_/ /g"` $paths; do + if test -f $p/cat$_exe; then + xcat=$p/cat + break + fi + done + if test ! -f $xcat$_exe; then + echo "Can't find cat anywhere!" + exit 1 + fi + fi + echo "#!$xcat" >sharp + $eunicefix sharp + chmod +x sharp + ./sharp > today 2>/dev/null + if test -s today; then +?X: echo "It does." + sharpbang='#!' + else + echo "#! $xcat" > sharp + $eunicefix sharp + chmod +x sharp + ./sharp > today 2>/dev/null + if test -s today; then +?X: echo "It does." + sharpbang='#! ' + else +?X: echo "Okay, let's see if #! works on this system..." +?X: echo "It's just a comment." + sharpbang=': use ' + fi + fi +else + echo " " + echo "Your $sh doesn't grok # comments--I will strip them later on." + shsharp=false +?X: The spitshell script will be perused, so leave it out the UU directory + cd .. + echo "exec grep -v '^[ ]*#'" >spitshell + chmod +x spitshell + $eunicefix spitshell + spitshell=`pwd`/spitshell + cd UU + echo "I presume that if # doesn't work, #! won't work either!" + sharpbang=': use ' +fi +rm -f sharp today + diff --git a/mcon/U/src.U b/mcon/U/src.U new file mode 100644 index 0000000..e939a4c --- /dev/null +++ b/mcon/U/src.U @@ -0,0 +1,92 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1996, Cygnus Support +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: Original Author: Tom Tromey <tromey@cygnus.com> +?RCS: +?RCS: $Log: src.U,v $ +?RCS: Revision 3.0.1.1 1997/02/28 16:23:54 ram +?RCS: patch61: created +?RCS: +?MAKE:src +rsrc: Options package contains +?MAKE: -pick add $@ %< +?Y:TOP +?S:src (srcdir): +?S: This variable holds the (possibly relative) path of the package source. +?S: It is up to the Makefile to use this variable and set VPATH accordingly +?S: to find the sources remotely. Use $pkgsrc to have an absolute path. +?S:. +?S:rsrc (relsrcdir): +?S: This variable holds a potentially relative path to the package +?S: source. The contents are correct for the configuration environment, +?S: i.e. there might be an extra .. prepended to get out of the UU dir. +?S: Configure units should use this, not the src variable. +?S:. +: Find the path to the source tree +case "$src" in +'') case "$0" in + */*) + src=`echo $0 | sed -e 's%/[^/][^/]*$%%'` + ;; + *) src='.';; + esac;; +esac +case "$src" in +'') src=/ + rsrc=/ + ;; +/*) rsrc="$src";; +*) rsrc="../$src";; +esac +?X: +?X: Now check whether we have found the right source tree (i.e. the one for the +?X: package we're abount to configure). The original unit from Tom Tromey forced +?X: the user to pick a unique file from his distribution, and we were merely +?X: checking the existence of that file. I prefer to rely on Configure (which +?X: we know *is* present since this unit is part of it!) and look for the +?X: definition of the package variable, making sure it's the same as ours. +?X: If it matches, we know we found the right source tree. -- RAM, 15/03/96 +?X: +if test -f $rsrc/Configure && \ + $contains "^package='$package'\$" $rsrc/Configure >/dev/null 2>&1 +then + : found it, so we are ok. +else +?X: Otherwise try "." and up to 4 parent directories... +?X: Note that we prepend a ".." to get out of the configuration environment. + rsrc='' + for src in . .. ../.. ../../.. ../../../..; do + if test -f ../$src/Configure && \ + $contains "^package=$package$" ../$src/Configure >/dev/null 2>&1 + then + rsrc=../$src + break + fi + done +fi +case "$rsrc" in +'') + cat <<EOM >&4 + +Sorry, I can't seem to locate the source dir for $package. Please start +Configure with an explicit path -- i.e. /some/path/Configure. + +EOM + exit 1 + ;; +?X: Don't echo anything if the sources are in . -- they should know already ;-) +?X: In that case, rsrc is ../. since we lookup from within UU +../.) rsrc='..';; +*) + echo " " + echo "Sources for $package found in \"$src\"." >&4 + ;; +esac + diff --git a/mcon/U/ssizetype.U b/mcon/U/ssizetype.U new file mode 100644 index 0000000..70dcc69 --- /dev/null +++ b/mcon/U/ssizetype.U @@ -0,0 +1,91 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu> +?RCS: +?RCS: $Log: ssizetype.U,v $ +?RCS: Revision 3.0.1.3 1997/02/28 16:24:21 ram +?RCS: patch61: integrated perl5 concerns for mis-configured sfio +?RCS: +?RCS: Revision 3.0.1.2 1994/10/29 16:30:28 ram +?RCS: patch36: added ?F: line for metalint file checking +?RCS: patch36: added 'ldflags' to the test compile line (ADO) +?RCS: +?RCS: Revision 3.0.1.1 1994/08/29 16:33:06 ram +?RCS: patch32: created by ADO +?RCS: +?MAKE:ssizetype: Myread Typedef sizetype cat rm \ + +cc +optimize +ccflags +ldflags +libs _o +?MAKE: -pick add $@ %< +?S:ssizetype: +?S: This variable defines ssizetype to be something like ssize_t, +?S: long or int. It is used by functions that return a count +?S: of bytes or an error condition. It must be a signed type. +?S: We will pick a type such that sizeof(SSize_t) == sizeof(Size_t). +?S:. +?C:SSize_t: +?C: This symbol holds the type used by functions that return +?C: a count of bytes or an error condition. It must be a signed type. +?C: It is usually ssize_t, but may be long or int, etc. +?C: It may be necessary to include <sys/types.h> or <unistd.h> +?C: to get any typedef'ed information. +?C: We will pick a type such that sizeof(SSize_t) == sizeof(Size_t). +?C:. +?H:#define SSize_t $ssizetype /* signed count of bytes */ +?H:. +?F:!ssize.out !ssize +: see what type is used for signed size_t +set ssize_t ssizetype int stdio.h sys/types.h +eval $typedef +dflt="$ssizetype" +?X: Now check out whether sizeof(SSize_t) == sizeof(Size_t) +$cat > ssize.c <<EOM +#include <stdio.h> +#include <sys/types.h> +#define Size_t $sizetype +#define SSize_t $dflt +int main() +{ + if (sizeof(Size_t) == sizeof(SSize_t)) + printf("$dflt\n"); + else if (sizeof(Size_t) == sizeof(int)) + printf("int\n"); + else + printf("long\n"); + fflush(stdout); + exit(0); +} +EOM +echo " " +?X: If $libs contains -lsfio, and sfio is mis-configured, then it +?X: sometimes (apparently) runs and exits with a 0 status, but with no +?X: output!. Thus we check with test -s whether we actually got any +?X: output. I think it has to do with sfio's use of _exit vs. exit, +?X: but I don't know for sure. --Andy Dougherty 1/27/97. +if $cc $optimize $ccflags $ldflags -o ssize ssize.c $libs > /dev/null 2>&1 && + ./ssize > ssize.out 2>/dev/null && test -s ssize.out ; then + ssizetype=`$cat ssize.out` + echo "I'll be using $ssizetype for functions returning a byte count." >&4 +else + $cat >&4 <<EOM +Help! I can't compile and run the ssize_t test program: please enlighten me! +(This is probably a misconfiguration in your system or libraries, and +you really ought to fix it. Still, I'll try anyway.) + +I need a type that is the same size as $sizetype, but is guaranteed to +be signed. Common values are ssize_t, int and long. + +EOM + rp="What signed type is the same size as $sizetype?" + . ./myread + ssizetype="$ans" +fi +$rm -f ssize ssize$_o ssize.* + diff --git a/mcon/U/startperl.U b/mcon/U/startperl.U new file mode 100644 index 0000000..dbc6dfb --- /dev/null +++ b/mcon/U/startperl.U @@ -0,0 +1,95 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: startperl.U,v $ +?RCS: Revision 3.0.1.1 1997/02/28 16:25:06 ram +?RCS: patch61: warn them if the #! line is too long for their OS +?RCS: +?RCS: Revision 3.0 1993/08/18 12:09:50 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:startperl: cat rm sharpbang perlpath d_portable Myread +?MAKE: -pick add $@ %< +?S:startperl: +?S: This variable contains the string to put on the front of a perl +?S: script to make sure (hopefully) that it runs with perl and not some +?S: shell. Of course, that leading line must be followed by the classical +?S: perl idiom: +?S: eval 'exec perl -S $0 ${1+"$@"}' +?S: if $running_under_some_shell; +?S: to guarantee perl startup should the shell execute the script. Note +?S: that this magic incatation is not understood by csh. +?S:. +?C:STARTPERL: +?C: This symbol is the string that should be put on the front of a +?C: perl script to make sure (hopefully) that it runs with perl and +?C: not under some shell. That line should be followed by the classical +?C: invocation magic: +?C: eval 'exec perl -S $0 ${1+"$@"}' +?C: if $running_under_some_shell; +?C: to guarantee perl startup should the shell execute the script at first. +?C:. +?H:#define STARTPERL "$startperl" +?H:. +?T:pdflt +?F:!xtry +: figure out how to guarantee perl startup +case "$sharpbang" in +*!) +?X: +?X: Make sure the #!$perlpath magic incantation indeed works on this +?X: system... It might not if the length of the #! hook is greater +?X: than some hardwired kernel limit. -- RAM, 15/03/96 +?X: + $cat >xtry <<EOP +#!$perlpath +system("exit 0"); +EOP + chmod a+x xtry + if ./xtry >/dev/null 2>&1; then + $cat <<EOH + +I can use the #! construct to start perl on your system. This will make +startup of perl scripts faster, but may cause problems if you want to share +those scripts and perl is not in a standard place (/usr/bin/perl) on all your +platforms. The alternative is to force a shell by starting the script with a +single ':' character. + +EOH + pdflt=y + else + $cat <<EOH + +I could use the #! construct to start perl on your system, but using + #!$perlpath +would be too long for your kernel to grok. Indeed, most systems do +limit the size of the leading #! string to 32 characters. + +EOH + pdflt=n + fi + $rm -f xtry + case "$startperl" in + *!*) dflt=y;; + '') case "$d_portable" in + "$define") dflt=n;; + *) dflt=$pdflt;; + esac;; + *) dflt=n;; + esac + rp='Shall I use #! to start up perl?' + . ./myread + case "$ans" in + y*|Y*) startperl="#!$perlpath";; + *) startperl=": # use perl";; + esac;; +*) startperl=": # use perl";; +esac + diff --git a/mcon/U/startsh.U b/mcon/U/startsh.U new file mode 100644 index 0000000..b118449 --- /dev/null +++ b/mcon/U/startsh.U @@ -0,0 +1,50 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: startsh.U,v $ +?RCS: Revision 3.0.1.1 1997/02/28 16:25:31 ram +?RCS: patch61: avoid needless chatter since this is now done very early +?RCS: +?RCS: Revision 3.0 1993/08/18 12:09:51 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:startsh: sh sharpbang eunicefix +?MAKE: -pick add $@ %< +?S:startsh: +?S: This variable contains the string to put on the front of a shell +?S: script to make sure (hopefully) that it runs with sh and not some +?S: other shell. +?S:. +?F:!sharp +: figure out how to guarantee sh startup +?X: Avoid needless chatter since this is now done very early. +?X: echo " " +?X: echo "Checking out how to guarantee sh startup..." >&2 +case "$startsh" in +'') startsh=${sharpbang}${sh} ;; +*) +?X: echo "Let's see if '$startsh' works..." ;; +esac +cat >sharp <<EOSS +$startsh +set abc +test "$?abc" != 1 +EOSS + +chmod +x sharp +$eunicefix sharp +if ./sharp; then + : echo "Yup, it does." +else + echo "Hmm... '$startsh' does not guarantee sh startup..." + echo "You may have to fix up the shell scripts to make sure $sh runs them." +fi +rm -f sharp + diff --git a/mcon/U/stdchar.U b/mcon/U/stdchar.U new file mode 100644 index 0000000..d2328a0 --- /dev/null +++ b/mcon/U/stdchar.U @@ -0,0 +1,40 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: stdchar.U,v $ +?RCS: Revision 3.0 1993/08/18 12:09:52 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:stdchar: contains Findhdr cppstdin cppminus rm +?MAKE: -pick add $@ %< +?S:stdchar: +?S: This variable conditionally defines STDCHAR to be the type of char +?S: used in stdio.h. It has the values "unsigned char" or "char". +?S:. +?C:STDCHAR: +?C: This symbol is defined to be the type of char used in stdio.h. +?C: It has the values "unsigned char" or "char". +?C:. +?H:#define STDCHAR $stdchar /**/ +?H:. +?F:!stdioh +: see what type of char stdio uses. +echo " " +?X: untangle the #include nest +echo '#include <stdio.h>' | $cppstdin $cppminus > stdioh +if $contains 'unsigned.*char.*_ptr;' stdioh >/dev/null 2>&1 ; then + echo "Your stdio uses unsigned chars." >&4 + stdchar="unsigned char" +else + echo "Your stdio uses signed chars." >&4 + stdchar="char" +fi +$rm -f stdioh + diff --git a/mcon/U/sunscanf.U b/mcon/U/sunscanf.U new file mode 100644 index 0000000..a16fdaa --- /dev/null +++ b/mcon/U/sunscanf.U @@ -0,0 +1,55 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: sunscanf.U,v $ +?RCS: Revision 3.0 1993/08/18 12:09:54 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:sunscanf: cat rm Myread +cc +ccflags test Setvar +?MAKE: -pick add $@ %< +?S:sunscanf: +?S: This variable is set if this system runs with the Sun version +?S: of scanf. +?S:. +?C:SUNSCANF: +?C: This variable is set if this system runs with the Sun version +?C: of scanf. +?C:. +?H:#$sunscanf SUNSCANF /**/ +?H:. +?LINT:set sunscanf +: check to see what kinda scanf your using. +echo " " +echo "Checking to see what flavor of scanf you have..." >&4 +$cat >scanf.c <<'EOCP' +int main() +{ + float value; + + sscanf("4.5","%g",&value); + printf("%d\n", value == 4.5); +} +EOCP +if $cc $ccflags -o scanf scanf.c >/dev/null 2>&1 ; then + if $test `scanf` = 0; then + echo "Hmm.. seems your not running the USG flavor.." + val="$undef" + else + echo "Uh... your running the USG flavor of scanf." + val="$define" + fi +else + echo "(I can't seem to compile the test program... Guessing)" + val="$undef" +fi +set sunscanf +eval $setvar +$rm -f scanf* + diff --git a/mcon/U/sysman.U b/mcon/U/sysman.U new file mode 100644 index 0000000..6f50e5d --- /dev/null +++ b/mcon/U/sysman.U @@ -0,0 +1,50 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: sysman.U,v $ +?RCS: Revision 3.0.1.2 1994/06/20 07:08:43 ram +?RCS: patch30: now explicitely states that /usr/man/man1 is the default +?RCS: patch30: added /usr/local/man/man1 to the search list +?RCS: +?RCS: Revision 3.0.1.1 1993/09/13 16:13:50 ram +?RCS: patch10: added support for /local/man/man1 (WAD) +?RCS: patch10: added temporary syspath variable to cut down on line length +?RCS: +?RCS: Revision 3.0 1993/08/18 12:09:55 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:sysman: test Loc Oldconfig +?MAKE: -pick add $@ %< +?S:sysman: +?S: This variable holds the place where the manual is located on this +?S: system. It is not the place where the user wants to put his manual +?S: pages. Rather it is the place where Configure may look to find manual +?S: for unix commands (section 1 of the manual usually). See mansrc. +?S:. +?T:syspath +: determine where manual pages are on this system +echo " " +case "$sysman" in +'') + syspath='/usr/share/man/man1 /usr/man/man1' + syspath="$syspath /usr/man/mann /usr/man/manl /usr/man/local/man1" + syspath="$syspath /usr/man/u_man/man1 /usr/share/man/man1" + syspath="$syspath /usr/catman/u_man/man1 /usr/man/l_man/man1" + syspath="$syspath /usr/local/man/u_man/man1 /usr/local/man/l_man/man1" + syspath="$syspath /usr/man/man.L /local/man/man1 /usr/local/man/man1" + sysman=`./loc . /usr/man/man1 $syspath` + ;; +esac +if $test -d "$sysman"; then + echo "System manual is in $sysman." >&4 +else + echo "Could not find manual pages in source form." >&4 +fi + diff --git a/mcon/U/trnl.U b/mcon/U/trnl.U new file mode 100644 index 0000000..cfdda60 --- /dev/null +++ b/mcon/U/trnl.U @@ -0,0 +1,59 @@ +?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: Copyright (c) 1998 Andy Dougherty +?RCS: +?RCS: Original author Jarkko Hietaniemi <jhi@iki.fi> +?RCS: Merged into dist by Andy Dougherty July 13, 1998 +?RCS: +?MAKE:trnl: Nothing +?MAKE: -pick add $@ %< +?S:trnl: +?S: This variable contains the value to be passed to the tr(1) +?S: command to transliterate a newline. Typical values are +?S: '\012' and '\n'. This is needed for EBCDIC systems where +?S: newline is not necessarily '\012'. +?S:. +?T: DJGPP +: Find the appropriate value for a newline for tr +echo " " +?X: We can't use $tr since that would cause a circular dependency via Myread +?X: dos djgpp uses '\015\012', but reportedly is happy with '\012' in the +?X: tr command. I don't know why it passes the '\n' test but later +?X: refuses to work correctly with it. --AD 6/14/98 +if test -n "$DJGPP"; then + trnl='\012' +fi +if test X"$trnl" = X; then + case "`echo foo | tr '\n' x 2>/dev/null`" in + foox) trnl='\n' ;; + esac +fi +if test X"$trnl" = X; then + case "`echo foo | tr '\012' x 2>/dev/null`" in + foox) trnl='\012' ;; + esac +fi +if test X"$trnl" = X; then + case "`echo foo | tr '\r\n' xy 2>/dev/null`" in + fooxy) trnl='\n\r' ;; + esac +fi +if test X"$trnl" = X; then + cat <<EOM >&2 + +$me: Fatal Error: cannot figure out how to translate newlines with 'tr'. + +EOM + exit 1 +else + echo "We'll use '$trnl' to transliterate a newline." +fi + diff --git a/mcon/U/uidtype.U b/mcon/U/uidtype.U new file mode 100644 index 0000000..6ac2aeb --- /dev/null +++ b/mcon/U/uidtype.U @@ -0,0 +1,57 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: uidtype.U,v $ +?RCS: Revision 3.0.1.3 1994/08/29 16:33:25 ram +?RCS: patch32: now uses new Typedef unit to compute type information +?RCS: +?RCS: Revision 3.0.1.2 1994/06/20 07:09:36 ram +?RCS: patch30: comment for uidtype referred to the obsoleted symbol +?RCS: +?RCS: Revision 3.0.1.1 1994/05/13 15:28:27 ram +?RCS: patch27: made conformant to its gidtype.U companion +?RCS: patch27: question now explicitely mentions getuid() +?RCS: +?RCS: Revision 3.0 1993/08/18 12:09:56 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:uidtype: Myread Typedef Findhdr +?MAKE: -pick add $@ %< +?S:uidtype: +?S: This variable defines Uid_t to be something like uid_t, int, +?S: ushort, or whatever type is used to declare user ids in the kernel. +?S:. +?C:Uid_t (UIDTYPE): +?C: This symbol holds the type used to declare user ids in the kernel. +?C: It can be int, ushort, uid_t, etc... It may be necessary to include +?C: <sys/types.h> to get any typedef'ed information. +?C:. +?H:#define Uid_t $uidtype /* UID type */ +?H:. +?T:xxx +: see what type uids are declared as in the kernel +set uid_t uidtype xxx stdio.h sys/types.h +eval $typedef +case "$uidtype" in +xxx) + xxx=`./findhdr sys/user.h` + set `grep '_ruid;' "$xxx" 2>/dev/null` unsigned short + case $1 in + unsigned) dflt="$1 $2" ;; + *) dflt="$1" ;; + esac + ;; +*) dflt="$uidtype";; +esac +echo " " +rp="What is the type for user ids returned by getuid()?" +. ./myread +uidtype="$ans" + diff --git a/mcon/U/usenm.U b/mcon/U/usenm.U new file mode 100644 index 0000000..a868af5 --- /dev/null +++ b/mcon/U/usenm.U @@ -0,0 +1,144 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: usenm.U,v $ +?RCS: Revision 3.0.1.1 1997/02/28 16:26:40 ram +?RCS: patch61: don't use nm with the GNU C library +?RCS: patch61: added support for Linux shared libs +?RCS: +?RCS: Revision 3.0 1993/08/18 12:09:57 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:usenm runnm nm_opt nm_so_opt: cat test Myread Oldconfig grep \ + d_gnulibc nm egrep rsrc osname Guess +?MAKE: -pick add $@ %< +?S:usenm: +?S: This variable contains 'true' or 'false' depending whether the +?S: nm extraction is wanted or not. +?S:. +?S:runnm: +?S: This variable contains 'true' or 'false' depending whether the +?S: nm extraction should be performed or not, according to the value +?S: of usenm and the flags on the Configure command line. +?S:. +?S:nm_opt: +?S: This variable holds the options that may be necessary for nm. +?S:. +?S:nm_so_opt: +?S: This variable holds the options that may be necessary for nm +?S: to work on a shared library but that can not be used on an +?S: archive library. Currently, this is only used by Linux, where +?S: nm --dynamic is *required* to get symbols from an ELF library which +?S: has been stripped, but nm --dynamic is *fatal* on an archive library. +?S: Maybe Linux should just always set usenm=false. +?S:. +: see if nm is to be used to determine whether a symbol is defined or not +?X: If there is enough enquiries, it might be worth to wait for the nm +?X: extraction. Otherwise, the C compilations might be a better deal. +?X: +?X: Don't bother if we're using GNU libc -- skimo +case "$usenm" in +'') + dflt='' + case "$d_gnulibc" in + "$define") + echo " " + echo "$nm probably won't work on the GNU C Library." >&4 + dflt=n + ;; + esac + case "$dflt" in + '') + if $test "$osname" = aix -a ! -f /lib/syscalls.exp; then + echo " " + echo "Whoops! This is an AIX system without /lib/syscalls.exp!" >&4 + echo "'nm' won't be sufficient on this system." >&4 + dflt=n + fi + ;; + esac + case "$dflt" in + '') + if ./gnu; then + echo " " + echo "Hmm... A GNU system without a GNU C Library? Weird..." >&4 + dflt=n + else + dflt=`$egrep 'inlibc|csym' $rsrc/Configure | wc -l 2>/dev/null` + if $test $dflt -gt 20; then + dflt=y + else + dflt=n + fi + fi + ;; + esac + ;; +*) + case "$usenm" in + true|$define) dflt=y;; + *) dflt=n;; + esac + ;; +esac +$cat <<EOM + +I can use $nm to extract the symbols from your C libraries. This +is a time consuming task which may generate huge output on the disk (up +to 3 megabytes) but that should make the symbols extraction faster. The +alternative is to skip the 'nm' extraction part and to compile a small +test program instead to determine whether each symbol is present. If +you have a fast C compiler and/or if your 'nm' output cannot be parsed, +this may be the best solution. + +EOM +rp='Shall I use nm to extract C symbols from the libraries?' +. ./myread +case "$ans" in +[Nn]*) usenm=false;; +*) usenm=true;; +esac + +?X: Name extraction is to be run if 'nm' usage is wanted and if no -r flag +?X: was provided to configure (in which case we simply re-use the previous +?X: values). +runnm=$usenm +case "$reuseval" in +true) runnm=false;; +esac + +: nm options which may be necessary +case "$nm_opt" in +'') if $test -f /mach_boot; then + nm_opt='' # Mach + elif $test -d /usr/ccs/lib; then + nm_opt='-p' # Solaris (and SunOS?) + elif $test -f /dgux; then + nm_opt='-p' # DG-UX + elif $test -f /lib64/rld; then + nm_opt='-p' # 64-bit Irix + else + nm_opt='' + fi;; +esac + +?X: nm options which may be necessary for shared libraries but illegal +?X: for archive libraries. Thank you, Linux. +case "$nm_so_opt" in +'') case "$osname" in + *linux*) + if $nm --help | $grep 'dynamic' > /dev/null 2>&1; then + nm_so_opt='--dynamic' + fi + ;; + esac + ;; +esac + diff --git a/mcon/U/usesocks.U b/mcon/U/usesocks.U new file mode 100644 index 0000000..cd30e4d --- /dev/null +++ b/mcon/U/usesocks.U @@ -0,0 +1,46 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: Copyright (c) 1999 Jarkko Hietaniemi +?RCS: +?MAKE:usesocks: Myread Oldconfig Setvar spackage package +?MAKE: -pick add $@ %< +?Y:TOP +?S:usesocks: +?S: This variable conditionally defines the USE_SOCKS symbol, +?S: and indicates that Perl should be built to use SOCKS. +?S:. +?C:USE_SOCKS: +?C: This symbol, if defined, indicates that Perl should +?C: be built to use socks. +?C:. +?H:?%<:#$usesocks USE_SOCKS /**/ +?H:. +?D:usesocks='' +?LINT:set usesocks +: check for requested SOCKS support +case "$usesocks" in +$define|true|[yY]*) dflt='y';; +*) dflt='n';; +esac +cat <<EOM + +$spackage can be built to use the SOCKS proxy protocol library. +If this doesn't make any sense to you, just accept the default '$dflt'. +EOM +rp="Build $package for SOCKS?" +. ./myread +case "$ans" in +y|Y) val="$define" ;; +*) val="$undef" ;; +esac +set usesocks +eval $setvar + diff --git a/mcon/U/usrinc.U b/mcon/U/usrinc.U new file mode 100644 index 0000000..4db8078 --- /dev/null +++ b/mcon/U/usrinc.U @@ -0,0 +1,93 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: 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 accross sessions (WED) +?RCS: +?RCS: Revision 3.0 1993/08/18 12:09:58 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:usrinc incpath mips_type: test cat echo n c Getfile Guess \ + Oldconfig eunicefix contains rm +?MAKE: -pick add $@ %< +?S:usrinc: +?S: This variable holds the path of the include files, which is +?S: usually /usr/include. It is mainly used by other Configure units. +?S:. +?S:incpath: +?S: This variable must preceed 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:. +?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:. +?D:usrinc='/usr/include' +?LINT:create mips +?T:xxx_prompt +?F:./mips +: What should the include directory be ? +echo " " +$echo $n "Hmm... $c" +dflt='/usr/include' +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." + xxx_prompt=y + echo "exit 0" >mips +else + echo "Doesn't look like a MIPS system." + xxx_prompt=n + echo "exit 1" >mips +fi +chmod +x mips +$eunicefix mips +case "$usrinc" in +'') ;; +*) dflt="$usrinc";; +esac +case "$xxx_prompt" in +y) fn=d/ + echo " " + rp='Where are the include files you want to use?' + . ./getfile + usrinc="$ans" + ;; +*) usrinc="$dflt" + ;; +esac + diff --git a/mcon/U/vaproto.U b/mcon/U/vaproto.U new file mode 100644 index 0000000..8ae9674 --- /dev/null +++ b/mcon/U/vaproto.U @@ -0,0 +1,65 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: Orginal Author: Graham Stoney <greyham@research.canon.oz.au> +?RCS: +?RCS: $Log: vaproto.U,v $ +?RCS: Revision 3.0.1.1 1994/01/24 14:17:16 ram +?RCS: patch16: definition of _V now appears only when needed +?RCS: +?RCS: Revision 3.0 1993/08/18 12:09:59 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:vaproto: prototype i_stdarg Setvar +?MAKE: -pick add $@ %< +?S:vaproto: +?S: This variable conditionally defines CAN_VAPROTO on systems supporting +?S: prototype declaration of functions with a variable number of +?S: arguments. See also prototype. +?S:. +?C:CAN_VAPROTO ~ %<: +?C: This variable is defined on systems supporting prototype declaration +?C: of functions with a variable number of arguments. +?C:. +?C:_V: +?C: This macro is used to declare function parameters in prototypes for +?C: functions with a variable number of parameters. Use double parentheses. +?C: For example: +?C: +?C: int printf _V((char *fmt, ...)); +?C: +?C: Remember to use the plain simple _() macro when declaring a function +?C: with no variable number of arguments, since it might be possible to +?C: have a non-effect _V() macro and still get prototypes via _(). +?C:. +?H:?%<:#$vaproto CAN_VAPROTO /**/ +?H:?_V:#ifdef CAN_VAPROTO +?H:?_V:#define _V(args) args +?H:?_V:#else +?H:?_V:#define _V(args) () +?H:?_V:#endif +?H:. +?W:%<:_V +?LINT:set vaproto +: see if prototypes support variable argument declarations +echo " " +case "$prototype$i_stdarg" in +$define$define) + echo "It appears we'll be able to prototype varargs functions." >&4 + val="$define" + ;; +*) + echo "Too bad... We won't be using prototyped varargs functions..." >&4 + val="$undef" + ;; +esac +set vaproto +eval $setvar + diff --git a/mcon/U/voidflags.U b/mcon/U/voidflags.U new file mode 100644 index 0000000..6ca70fe --- /dev/null +++ b/mcon/U/voidflags.U @@ -0,0 +1,168 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: voidflags.U,v $ +?RCS: Revision 3.0.1.2 1997/02/28 16:27:58 ram +?RCS: patch61: don't prompt them if the void support is high enough for us +?RCS: +?RCS: Revision 3.0.1.1 1995/01/11 15:37:44 ram +?RCS: patch45: cosmetic change to avoid spurious blank lines when using -s +?RCS: +?RCS: Revision 3.0 1993/08/18 12:10:01 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:voidflags defvoidused: cat sed rm contains +cc +ccflags package \ + Oldconfig Myread +?MAKE: -pick add $@ %< +?S:voidflags: +?S: This variable contains the eventual value of the VOIDFLAGS symbol, +?S: which indicates how much support of the void type is given by this +?S: compiler. See VOIDFLAGS for more info. +?S:. +?S:defvoidused: +?S: This variable contains the default value of the VOIDUSED symbol (15). +?S:. +?X: Exceptionally, we have to explicitely alias the symbol name for +?X: config_h.SH, otherwise the comment would not appear. +?C:VOIDFLAGS ~ %<: +?C: This symbol indicates how much support of the void type is given by this +?C: compiler. What various bits mean: +?C: +?C: 1 = supports declaration of void +?C: 2 = supports arrays of pointers to functions returning void +?C: 4 = supports comparisons between pointers to void functions and +?C: addresses of void functions +?C: 8 = suports declaration of generic void pointers +?C: +?C: The package designer should define VOIDUSED to indicate the requirements +?C: of the package. This can be done either by #defining VOIDUSED before +?C: including config.h, or by defining defvoidused in Myinit.U. If the +?C: latter approach is taken, only those flags will be tested. If the +?C: level of void support necessary is not present, defines void to int. +?C:. +?H:?%<:#ifndef VOIDUSED +?H:?%<:#define VOIDUSED $defvoidused +?H:?%<:#endif +?H:?%<:#define VOIDFLAGS $voidflags +?H:?%<:#if (VOIDFLAGS & VOIDUSED) != VOIDUSED +?H:?%<:#define void int /* is void to be avoided? */ +?H:?%<:#define M_VOID /* Xenix strikes again */ +?H:?%<:#endif +?H:. +?W:%<:void +?F:!.out !try.c !flags +?LINT:usefile .out flags try.c +?INIT:: full support for void wanted by default +?INIT:defvoidused=15 +?INIT: +?LINT:known void M_VOID VOIDUSED +: check for void type +echo " " +echo "Checking to see how well your C compiler groks the void type..." >&4 +$cat >flags <<EOM + + Support flag bits are: + 1: basic void declarations. + 2: arrays of pointers to functions returning void. + 4: operations between pointers to and addresses of void functions. + 8: generic void pointers. + +EOM +case "$voidflags" in +'') + $cat >try.c <<'EOCP' +#if TRY & 1 +void sub() { +#else +sub() { +#endif + extern void moo(); /* function returning void */ + void (*goo)(); /* ptr to func returning void */ +#if TRY & 8 + void *hue; /* generic ptr */ +#endif +#if TRY & 2 + void (*foo[10])(); +#endif + +#if TRY & 4 + if(goo == moo) { + exit(0); + } +#endif + exit(0); +} +int main() { sub(); } +EOCP +?X: This unit used to use cc -S in those tests to try to speed up things, but +?X: unfortunately, AIX 3.2 does not support this option. + if $cc $ccflags -c -DTRY=$defvoidused try.c >.out 2>&1 ; then + voidflags=$defvoidused + echo "Good. It appears to support void to the level $package wants." + if $contains warning .out >/dev/null 2>&1; then + echo "However, you might get some warnings that look like this:" + $sed -e 's/^/ /' .out + fi + else +echo "Hmm, your compiler has some difficulty with void. Checking further..." >&4 + $cat >&4 flags + $rm -f flags + if $cc $ccflags -c -DTRY=1 try.c >/dev/null 2>&1; then + echo "It supports 1..." + if $cc $ccflags -c -DTRY=3 try.c >/dev/null 2>&1; then + echo "It also supports 2..." + if $cc $ccflags -c -DTRY=7 try.c >/dev/null 2>&1; then + voidflags=7 + echo "And it supports 4 but not 8 definitely." + else + echo "It doesn't support 4..." + if $cc $ccflags -c -DTRY=11 try.c >/dev/null 2>&1; then + voidflags=11 + echo "But it supports 8." + else + voidflags=3 + echo "Neither does it support 8." + fi + fi + else + echo "It does not support 2..." + if $cc $ccflags -c -DTRY=13 try.c >/dev/null 2>&1; then + voidflags=13 + echo "But it supports 4 and 8." + else + if $cc $ccflags -c -DTRY=5 try.c >/dev/null 2>&1; then + voidflags=5 + echo "And it supports 4 but has not heard about 8." + else + echo "However it supports 8 but not 4." + fi + fi + fi + else + echo "There is no support at all for void." + voidflags=0 + fi + fi +esac +?X: Only prompt user if support does not match the level we want +case "$voidflags" in +"$defvoidused") + echo "Good. I already know it supports void to the level $package wants." + ;; +*) + dflt="$voidflags"; + test -f flags && $cat flags + rp="Your void support flags add up to what?" + . ./myread + voidflags="$ans" + ;; +esac +$rm -f try.* .out flags + diff --git a/mcon/U/warnflags.U b/mcon/U/warnflags.U new file mode 100644 index 0000000..0f36821 --- /dev/null +++ b/mcon/U/warnflags.U @@ -0,0 +1,55 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: Orginal Author: Graham Stoney <greyham@research.canon.oz.au> +?RCS: +?RCS: $Log: warnflags.U,v $ +?RCS: Revision 3.0 1993/08/18 12:10:02 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:warnflags: cat cc contains Myread Guess Oldconfig Findhdr +?MAKE: -pick add $@ %< +?S:warnflags: +?S: This variable contains any additional C compiler flags to generate +?S: warnings from the compiler. It is up to the Makefile to use this. +?S:. +: offer additional warning flags for compilation +$cat <<EOH + +You may wish to compile with extra compiler warnings enabled. +Note that doing so enhances your chance of receiving your free set of steak +knives, particularly if you find any bugs and report them. +If you don't want extra warnings, answer "none". + +EOH +case "$warnflags" in +'') case "$cc" in + *gcc*) + dflt="-Wall -Wno-comment" + if $contains 'fprintf' `./findhdr stdio.h` >/dev/null 2>&1; then + : + else + dflt="$dflt -Wno-implicit" + fi + ;; + *) dflt="none";; + esac + ;; +' ') dflt="none";; +*) dflt="$warnflags";; +esac + +rp="Any $cc flags to enable warnings?" +. ./myread +case "$ans" in +none) warnflags=' ';; +*) warnflags="$ans";; +esac + diff --git a/mcon/U/yacc.U b/mcon/U/yacc.U new file mode 100644 index 0000000..4447b0b --- /dev/null +++ b/mcon/U/yacc.U @@ -0,0 +1,90 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic 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: yacc.U,v $ +?RCS: Revision 3.0.1.1 1994/05/13 15:28:48 ram +?RCS: patch27: added byacc as another alternative (ADO) +?RCS: +?RCS: Revision 3.0 1993/08/18 12:10:03 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:yacc yaccflags: Guess Myread Loc Oldconfig byacc bison cat test +?MAKE: -pick add $@ %< +?S:yacc: +?S: This variable holds the name of the compiler compiler we +?S: want to use in the Makefile. It can be yacc, byacc, or bison -y. +?S:. +?S:yaccflags: +?S: This variable contains any additional yacc flags desired by the +?S: user. It is up to the Makefile to use this. +?S:. +?T:comp +: determine compiler compiler +echo " " +comp='yacc' +if $test -f "$byacc$_exe"; then + comp="byacc or $comp" +fi +if $test -f "$bison$_exe"; then + comp="$comp or bison -y" +fi +case "$yacc" in +'') + yacc=`./loc yacc yacc $pth` + if $test -f "$yacc$_exe"; then + dflt='yacc' + elif $test -f "$byacc$_exe"; then + dflt='byacc' + elif $test -f "$bison$_exe"; then + dflt='bison' + else + dflt='' + fi + ;; +*) dflt="$yacc";; +esac +rp="Which compiler compiler ($comp) shall I use?" +. ./myread +yacc="$ans" +case "$yacc" in +*bis*) + case "$yacc" in + *-y*) ;; + *) + yacc="$yacc -y" + echo "(Adding -y option to bison to get yacc-compatible behaviour.)" + ;; + esac + ;; +esac + +@if yaccflags +: see if we need extra yacc flags +dflt="$yaccflags" +case "$dflt" in +'') dflt=none;; +esac +$cat <<EOH + +Your yacc program may need extra flags to normally process the parser sources. +Do NOT specify any -d or -v flags here, since those are explicitely known +by the various Makefiles. However, if your machine has strange/undocumented +options (like -Sr# on SCO to specify the maximum number of grammar rules), then +please add them here. To use no flags, specify the word "none". + +EOH +rp="Any additional yacc flags?" +. ./myread +case "$ans" in +none) yaccflags='';; +*) yaccflags="$ans";; +esac + +@end diff --git a/mcon/configure b/mcon/configure new file mode 100644 index 0000000..95b2d63 --- /dev/null +++ b/mcon/configure @@ -0,0 +1,144 @@ +#! /bin/sh +# +# $Id: configure,v 3.0.1.2 1997/02/28 16:28:49 ram Exp ram $ +# +# GNU configure-like front end to metaconfig's Configure. +# +# Written by Andy Dougherty <doughera@lafcol.lafayette.edu> +# Matthew Green <mrg@mame.mu.oz.au> and Tom Tromey <tromey@cygnus.com>. +# +# Reformatted and modified for inclusion in the dist-3.0 package by +# Raphael Manfredi <Raphael_Manfredi@grenoble.hp.com>. +# +# This script belongs to the public domain and may be freely redistributed. +# +# The remaining of this leading shell comment may be removed if you +# include this script in your own package. +# +# $Log: configure,v $ +# Revision 3.0.1.2 1997/02/28 16:28:49 ram +# patch61: added the srcdir support now that we have src.U +# patch61: random cleanup for nicer help message +# +# Revision 3.0.1.1 1995/07/25 14:16:21 ram +# patch56: created +# + +(exit $?0) || exec sh $0 $argv:q +opts='' +verbose='' +create='-e' +srcdir='' +while test $# -gt 0; do + case $1 in + --help) + cat <<EOM +Usage: configure [options] +This is GNU configure-like front end for a metaconfig-generated Configure. +It emulates the following GNU configure options (must be fully spelled out): + + --help --srcdir=DIRECTORY + --no-create --silent + --prefix=PREFIX --verbose + --quiet --version + +And it honours these environment variables: CC, CFLAGS and DEFS. + +Furthermore, it ignores the following arguments, when supplied: + + --cache-file=FILE --target=TARGET + --enable-* --with-* + --host=HOST +EOM + exit 0 + ;; + --no-create) + create='-E' + shift + ;; + --prefix=*) + arg=`echo $1 | sed 's/--prefix=/-Dprefix=/'` + opts="$opts $arg" + shift + ;; + --prefix) + shift + opts="$opts -Dprefix=$1" + shift + ;; + --srcdir=*) + arg=`echo $1 | sed 's/--srcdir=//'` + srcdir=$arg + shift + ;; + --srcdir) + shift + srcdir=$1 + shift + ;; + --quiet|--silent) + exec >/dev/null 2>&1 + shift + ;; + --verbose) + verbose=true + shift + ;; + --version) + copt="$copt -V" + shift + ;; + --host=*|--target=*|--cache-file=*|--enable-*|--with-*) + shift + ;; + --*) + opt=`echo $1 | sed 's/=.*//'` + echo "This GNU configure front end does not understand $opt" + exit 1 + ;; + *) + opts="$opts $1" + shift + ;; + esac +done + +case "$CC" in +'') ;; +*) opts="$opts -Dcc='$CC'";; +esac + +# Join DEFS and CFLAGS together. +ccflags='' +case "$DEFS" in +'') ;; +*) ccflags=$DEFS;; +esac +case "$CFLAGS" in +'') ;; +*) ccflags="$ccflags $CFLAGS";; +esac +case "$ccflags" in +'') ;; +*) opts="$opts -Dccflags='$ccflags'";; +esac + +# Don't use -s if they want verbose mode +case "$verbose" in +'') copt="$copt -ds";; +*) copt="$copt -d";; +esac + +# Figure out srcdir if not set already +case "$srcdir" in +'') srcdir=`echo $0 | sed -e 's%/[^/][^/]*$%%'`;; +esac +case "$srcdir" in +".") ;; +*) opts="$opts -Dsrc=$srcdir";; +esac + +set X sh $srcdir/Configure $copt $create $opts +shift +echo "$@" +exec "$@" diff --git a/mcon/files/Internal.U b/mcon/files/Internal.U new file mode 100644 index 0000000..56d7e6e --- /dev/null +++ b/mcon/files/Internal.U @@ -0,0 +1,20 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: Internal.U,v $ +?RCS: Revision 3.0 1993/08/18 12:10:04 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?X: +?X: This unit does this and that. +?X: +?MAKE:<^INTERNAL>: Myinit +?MAKE: -pick add $@ %< + diff --git a/mcon/files/README b/mcon/files/README new file mode 100644 index 0000000..cdbc905 --- /dev/null +++ b/mcon/files/README @@ -0,0 +1,6 @@ +This directory contains unit templates. + +It is hoped metaconfig will have a tool to generate "standard" units based +on some well-known templates. + +For now, it has a documentary-only value. diff --git a/mcon/files/d_function.U b/mcon/files/d_function.U new file mode 100644 index 0000000..eb5ff4a --- /dev/null +++ b/mcon/files/d_function.U @@ -0,0 +1,31 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: d_function.U,v $ +?RCS: Revision 3.0 1993/08/18 12:10:05 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_<FUNCTION>: Inlibc +?MAKE: -pick add $@ %< +?S:d_<FUNCTION>: +?S: This variable conditionally defines HAS_<%FUNCTION> if <FUNCTION>() is +?S: available to ... +?S:. +?C:HAS_<%FUNCTION>: +?C: This symbol, if defined, indicates that the <FUNCTION>() routine is +?C: available to ... +?C:. +?H:#$d_<FUNCTION> HAS_<%FUNCTION> /**/ +?H:. +?LINT:set d_<FUNCTION> +: see if <FUNCTION> exists +set <FUNCTION> d_<FUNCTION> +eval $inlibc + diff --git a/mcon/files/dir.U b/mcon/files/dir.U new file mode 100644 index 0000000..507f789 --- /dev/null +++ b/mcon/files/dir.U @@ -0,0 +1,47 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: dir.U,v $ +?RCS: Revision 3.0 1993/08/18 12:10:06 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:<DIR> <DIR>exp: Oldconfig Getfile +?MAKE: -pick add $@ %< +?S:<DIR>: +?S: Where <DIR> files are located. The name may have ~ on the front. +?S:. +?S:<DIR>exp: +?S: This is the same as the <DIR> variable, but is filename expanded +?S: so that later Configure units can look at the <DIR> directory if desired. +?S:. +?C:<%DIR>: +?C: The directory where <DIR> files are located. The name may have ~ on +?C: the front so the C program must be prepared to do ~ expansion. +?C:. +?C:<%DIR>_EXP: +?C: The same as <DIR>, but ~name expantion has been done by Configure. +?C:. +?H:#define <%DIR> "$<DIR>" /**/ +?H:#define <%DIR>_EXP "$<DIR>exp" /**/ +?H:. +: locate <DIR> directory +echo " " +case "$<DIR>" in +'') + dflt=<DFLT> + ;; +*) dflt="$<DIR>";; +esac +fn=d~ +rp='Where is the <DIR> directory?' +. getfile +<DIR>="$ans" +<DIR>exp="$ansexp" + diff --git a/mcon/files/file.U b/mcon/files/file.U new file mode 100644 index 0000000..962bea5 --- /dev/null +++ b/mcon/files/file.U @@ -0,0 +1,47 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: file.U,v $ +?RCS: Revision 3.0 1993/08/18 12:10:06 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:<FILE> <FILE>exp: Oldconfig Getfile +?MAKE: -pick add $@ %< +?S:<FILE>: +?S: The name of the <FILE> file. The name may have ~ on the front. +?S:. +?S:<FILE>exp: +?S: This is the same as the <FILE> variable, but is filename expanded +?S: so that later Configure units can look at the <FILE> file if desired. +?S:. +?C:<%FILE>: +?C: The name of the <FILE> file. The name may have ~ on the front so the +?C: program must be prepared to do filename expansion. +?C:. +?C:<%FILE>_EXP: +?C: The same as <FILE> but ~name expansion has been done by Configure. +?C:. +?H:#define <%FILE> "$<FILE>" /**/ +?H:#define <%FILE>_EXP "$<FILE>exp" /**/ +?H:. +: locate <FILE> file +echo " " +case "$<FILE>" in +'') + dflt=<DFLT> + ;; +*) dflt="$<FILE>";; +esac +fn=f~ +rp='Where is the <FILE> file?' +. getfile +<FILE>="$ans" +<FILE>exp="$ansexp" + diff --git a/mcon/files/i_include.U b/mcon/files/i_include.U new file mode 100644 index 0000000..8abd462 --- /dev/null +++ b/mcon/files/i_include.U @@ -0,0 +1,32 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: i_include.U,v $ +?RCS: Revision 3.0 1993/08/18 12:10:07 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:i_<INCLUDE>: Inhdr +?MAKE: -pick add $@ %< +?S:i_<INCLUDE>: +?S: This variable conditionally defines the I_<%INCLUDE> symbol, which +?S: indicates to the C program that <<INC_PATH>.h> exists and should +?S: be included. +?S:. +?C:I_<%INCLUDE>: +?C: This symbol, if defined, indicates that <<INC_PATH>.h> exists and should +?C: be included. +?C:. +?H:#$i_<INCLUDE> I_<%INCLUDE> /**/ +?H:. +?LINT:set i_<INCLUDE> +: see if <INC_PATH>.h is available +set <INC_PATH>.h i_<INCLUDE> +eval $inhdr + diff --git a/mcon/files/keyword.U b/mcon/files/keyword.U new file mode 100644 index 0000000..c94a5c7 --- /dev/null +++ b/mcon/files/keyword.U @@ -0,0 +1,54 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: keyword.U,v $ +?RCS: Revision 3.0 1993/08/18 12:10:08 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_const: cat cc ccflags Setvar +?MAKE: -pick add $@ %< +?S:d_<KEY>: +?S: This variable conditionally defines the HASCONST symbol, which +?S: indicates to the C program that this C compiler knows about the +?S: <KEY> type. +?S:. +?C:HAS<%KEY> ~ %<: +?C: This symbol, if defined, indicates that this C compiler knows about +?C: the <KEY> type. There is no need to actually test for that symbol +?C: within your programs. The mere use of the "<KEY>" keyword will +?C: trigger the necessary tests. +?C:. +?H:?%<:#$d_<KEY> HAS<%KEY> /**/ +?H:?%<:#ifndef HAS<%KEY> +?H:?%<:#define <KEY> +?H:?%<:#endif +?H:. +?W:%<:<KEY> +?LINT:set d_<KEY> +?LINT:known <KEY> +: check for <KEY> keyword +echo " " +echo 'Checking to see if your C compiler knows about "<KEY>"...' +$cat ><KEY>.c <<'EOCP' +main() +{ + <KEY> char *foo; +} +EOCP +if $cc -c $ccflags <KEY>.c >/dev/null 2>&1 ; then + val="$define" + echo "Yup, it does." +else + val="$undef" + echo "Nope, it doesn't." +fi +set d_<KEY> +eval $setvar + diff --git a/mcon/files/locate.U b/mcon/files/locate.U new file mode 100644 index 0000000..3793062 --- /dev/null +++ b/mcon/files/locate.U @@ -0,0 +1,47 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: locate.U,v $ +?RCS: Revision 3.0 1993/08/18 12:10:08 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:<FILE> <FILE>exp: Oldconfig Getfile +?MAKE: -pick add $@ %< +?S:<FILE>: +?S: The name of the <FILE> file. The name may have ~ on the front. +?S:. +?S:<FILE>exp: +?S: This is the same as the <FILE> variable, but is filename expanded +?S: so that later Configure units can look at the <FILE> file if desired. +?S:. +?C:<%FILE>: +?C: The name of the <FILE> file. The name may have ~ on the front so the +?C: program must be prepared to do filename expansion. +?C:. +?C:<%FILE>_EXP: +?C: The same as <FILE> but ~name expansion has been done by Configure. +?C:. +?H:#define <%FILE> "$<FILE>" /**/ +?H:#define <%FILE>_EXP "$<FILE>exp" /**/ +?H:. +: locate <FILE> file +echo " " +case "$<FILE>" in +'') + dflt=<DFLT> + ;; +*) dflt="$<FILE>";; +esac +fn=l~:<FILE> +rp='Where is the <FILE> file?' +. getfile +<FILE>="$ans" +<FILE>exp="$ansexp" + diff --git a/mcon/files/question.U b/mcon/files/question.U new file mode 100644 index 0000000..56e38b5 --- /dev/null +++ b/mcon/files/question.U @@ -0,0 +1,58 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: question.U,v $ +?RCS: Revision 3.0 1993/08/18 12:10:09 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:d_scorfl: cat Myread Oldconfig nametype Setvar +?MAKE: -pick add $@ %< +?S:d_scorfl: +?S: This variable conditionally defines the SCOREFULL symbol, which +?S: indicates to the C program that any scoreboard kept by the program +?S: should be kept on the basis of the user's full name as opposed to +?S: the user's login name. +?S:. +?C:SCOREFULL: +?C: This symbol, if defined, indicates that any scoreboard kept by the +?C: program should be kept on the basis of the user's full name as opposed +?C: to the user's login name. If the user can change his full name he +?C: can enter multiple scores if this is defined. +?C:. +?H:#$d_scorfl SCOREFULL /**/ +?H:. +?LINT:set d_scorfl +: see how they want the scoreboard kept +case "$d_scorfl" in +"$define") dflt=y ;; +*) dflt=n ;; +esac +case "$nametype" in +other) val="$undef" ;; +*) + $cat <<'EOM' + +The scoreboard can be kept with one score per login name, or one score per full +name. If users can change their full name, or if there is more than one person +on your system with the same full name, you should keep the score by login name +(the full name is still printed). + +EOM + rp='Do you want the scoreboard kept by full name?' + . myread + case "$ans" in + y*) val="$define" ;; + *) val="$undef" ;; + esac + ;; +esac +set d_scorfl +eval $setvar + diff --git a/mcon/files/rcshead.U b/mcon/files/rcshead.U new file mode 100644 index 0000000..67a14df --- /dev/null +++ b/mcon/files/rcshead.U @@ -0,0 +1,15 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: rcshead.U,v $ +?RCS: Revision 3.0 1993/08/18 12:10:10 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: + diff --git a/mcon/files/shell.U b/mcon/files/shell.U new file mode 100644 index 0000000..5949b9d --- /dev/null +++ b/mcon/files/shell.U @@ -0,0 +1,68 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: shell.U,v $ +?RCS: Revision 3.0 1993/08/18 12:10:10 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:cc: cat contains sysman +large Mcc Myread Guess Oldconfig Loc +?MAKE: -pick add $@ %< +?DEF:cc=cc +?S:cc: +?S: This variable holds the name of a command to execute a C compiler which +?S: can resolve multiple global references that happen to have the same +?S: name. Usual values are "cc", "Mcc", "cc -M", and "gcc". +?S:. +: see if we need a special compiler +echo " " +if usg; then + case "$cc" in + '') case "$Mcc" in + /*) dflt='Mcc';; + *) case "$large" in + -M*) dflt='cc';; + *) if $contains '\-M' $sysman/cc.1 >/dev/null 2>&1 ; then + if $contains '\-M' $sysman/cpp.1 >/dev/null 2>&1; then + dflt='cc' + else + dflt='cc -M' + fi + else + dflt='cc' + fi;; + esac;; + esac;; + *) dflt="$cc";; + esac + $cat <<'EOM' +On some systems the default C compiler will not resolve multiple global +references that happen to have the same name. On some such systems the "Mcc" +command may be used to force these to be resolved. On other systems a "cc -M" +command is required. (Note that the -M flag on other systems indicates a +memory model to use!) If you have the Gnu C compiler, you might wish to use +that instead. + +EOM + rp="What command will force resolution on this system?" + . myread + cc="$ans" +else + case "$cc" in + '') dflt=cc;; + *) dflt="$cc";; + esac + rp="Use which C compiler?" + . myread + cc="$ans" +fi +case "$cc" in +gcc*) cpp=`loc gcc-cpp $cpp $pth`;; +esac + diff --git a/mcon/files/type.U b/mcon/files/type.U new file mode 100644 index 0000000..583b29a --- /dev/null +++ b/mcon/files/type.U @@ -0,0 +1,47 @@ +?RCS: $Id$ +?RCS: +?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic Licence, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic Licence; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?RCS: $Log: type.U,v $ +?RCS: Revision 3.0 1993/08/18 12:10:11 ram +?RCS: Baseline for dist 3.0 netwide release. +?RCS: +?MAKE:uidtype: Myread Oldconfig contains usrinc +?MAKE: -pick add $@ %< +?S:uidtype: +?S: This variable defines UIDTYPE to be something like uid_t, int, +?S: ushort, or whatever type is used to declare user ids in the kernel. +?S:. +?C:Uid_t (UIDTYPE): +?C: This symbol holds the type used to declare user ids in the kernel. +?C: It can be int, ushort, uid_t, etc... It may be necessary to include +?C: <sys/types.h> to get any typedef'ed information. +?C:. +?H:#define Uid_t $uidtype /* UID type */ +?H:. +: see what type uids are declared as in the kernel +case "$uidtype" in +'') + if $contains 'uid_t;' $usrinc/sys/types.h >/dev/null 2>&1 ; then + dflt='uid_t'; + else + set `grep '_ruid;' $usrinc/sys/user.h 2>/dev/null` unsigned short + case $1 in + unsigned) dflt="$1 $2" ;; + *) dflt="$1" ;; + esac + fi + ;; +*) dflt="$uidtype";; +esac +echo " " +rp="What type are user ids on this system declared as?" +. myread +uidtype="$ans" + diff --git a/mcon/makegloss.SH b/mcon/makegloss.SH new file mode 100755 index 0000000..991a214 --- /dev/null +++ b/mcon/makegloss.SH @@ -0,0 +1,217 @@ +case $CONFIG in +'') + if test -f config.sh; then TOP=.; + elif test -f ../config.sh; then TOP=..; + elif test -f ../../config.sh; then TOP=../..; + elif test -f ../../../config.sh; then TOP=../../..; + elif test -f ../../../../config.sh; then TOP=../../../..; + else + echo "Can't find config.sh."; exit 1 + fi + . $TOP/config.sh + ;; +esac +case "$0" in +*/*) cd `expr X$0 : 'X\(.*\)/'` ;; +esac +echo "Extracting mcon/makegloss (with variable substitutions)" +$spitshell >makegloss <<!GROK!THIS! +$startperl + eval "exec perl -S \$0 \$*" + if \$running_under_some_shell; + +!GROK!THIS! +$spitshell >>makegloss <<'!NO!SUBS!' +# $Id$ +# +# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +# +# You may redistribute only under the terms of the Artistic Licence, +# as specified in the README file that comes with the distribution. +# You may reuse parts of this distribution only within the terms of +# that same Artistic Licence; a copy of which may be found at the root +# of the source tree for dist 4.0. +# +# Original Author: Larry Wall <lwall@netlabs.com> +# +# $Log: makegloss.SH,v $ +# Revision 3.0.1.3 1994/01/24 14:17:49 ram +# patch16: now understands internal-use only defined variables +# +# Revision 3.0.1.2 1993/10/16 13:50:39 ram +# patch12: updated to support new ?M: lines +# +# Revision 3.0.1.1 1993/08/19 06:42:21 ram +# patch1: leading config.sh searching was not aborting properly +# +# Revision 3.0 1993/08/18 12:10:12 ram +# Baseline for dist 3.0 netwide release. +# + +open(G,">Glossary") || die "Can't create Glossary.\n"; +print G +'[This Glossary is automatically generated from the Unit files. Do not edit +this file or your changes will be lost. Edit the appropriate Unit instead.] + +This file contains a listing of all the C preprocessor symbols and shell +variables whose value can be determined by a Configure script. For the +most part, any symbol in UPPERCASE is a C preprocessor symbol, and +will be defined in config.h. Symbols in lowercase are shell variables, +and are defined in config.sh. + +If you write your shell scripts and C programs in terms of these symbols, +metaconfig can automatically build you a Configure script that will determine +the value of those symbols. See the README file for a description of how +to use metaconfig. + +In the following listing, the Unit: line indicates the name of the unit +where this symbol is defined, and the Wants: line indicates what other +symbols must be determined in order to figure out the value of this one. +If there is an "(Also defines ...)" entry, it indicates what other symbols +are defined by the Unit other than the one corresponding to the unit name. + +Variable of the form d_* either have the value "define" or "/*define", and +control whether some C preprocessor symbol gets defined or not. + +'; + +@ARGV = <U/*.U>; +while (<>) { + if (/^\?[\w\-]+:/) { # We may have found a control line + # Long lines may be escaped with a final backslash + $_ .= &complete_line if s/\\\s*$//; + } + if (/^\?MAKE:.*:/) { + ($also, $wants) = /^\?MAKE:\s*(.*):\s*(.*)/; + ($unit = $ARGV) =~ s|.*/(.*)\.U$|$1|; + @Also = split(/ /, $also); + $also = ''; + $internal = ''; + foreach (@Also) { + if (s/^\+//) { + $internal .= "$_ "; + } else { + $also .= "$_ "; + } + } + $also =~ s/$unit\s//; + chop($also); + chop($internal); + @Wants = split(/ /, $wants); + $wants = ''; + $option = ''; + foreach (@Wants) { + if (s/^\+//) { + $option .= "$_ "; + } else { + $wants .= "$_ "; + } + } + chop($option); + chop($wants); + $head = ''; + $_ = "Unit: $unit"; + $_ .= " (Also defines $also)" if $also; + $_ .= " (With private $internal)" if $internal; + $head .= &format($_); + if ($wants) { + $_ = "Wants: $wants"; + $head .= &format($_); + } + if ($option) { + $_ = "Optional: $option"; + $head .= &format($_); + } + $head .= "\n"; + } + + # Example of expression matched by the following pattern: + # ?C:symbol ~ alias (obsolete list): + # The main symbol (optionally aliased) can be followed by a list of + # obsolete symbols (the list is space separated). + + if (/^\?[CS]:(\w+)(\s*~\s*\S+)?\s*(\(.*\))?:\s*$/) { + $sym = $1; + $obsoleted = $3; + push(@syms, $sym); + $header{$sym} .= $head; + if ($obsoleted =~ s/^\((.*)\)$/$1/) { + @obsoleted = split(' ', $obsoleted); + foreach $obs (@obsoleted) { + push(@syms, $obs); + $header{$obs} = "\tObsoleted by $sym.\n\n"; + } + } + } + elsif (s/^\?[CS]://) { # Must be inside definition + if (/^\.$/) { # Closing line + $def{$sym} .= "\n"; + $sym = ''; + } + else { + s/^(\t| ? ? ? ? ? ? ?)//; + $def{$sym} .= "\t" . $_; + } + } + elsif (/^\?M:(\w+):\s*([\w\s]*)\n$/) { # Magic mapping introduction + $sym = $1; + $cdep = $2; + push(@syms, $sym); + $cdep =~ s/^\s*//; + $cdep = ", needs: $cdep" if $cdep ne ''; + $header{$sym} = "\tMagic symbol$cdep\n" . $head; + } + elsif (s/^\?M://) { # Must be a magic mapping definition + if (/^\.$/) { # Closing line + $def{$sym} .= "\n"; + $sym = ''; + } else { + $def{$sym} .= "\t" . $_; + } + } +} + +foreach $sym (sort @syms) { + print G "$sym:\n"; + print G $header{$sym}; + print G $def{$sym}; +} +close G; + +# Format $_ to fit in 80 columns (70 + size of tabs) +# Long lines are split, and the all but the first are indented +# by two leading spaces. The whole thing is then indented by +# one tab. +sub format { + local($tmp); + local($head) = ''; + local($_) = shift(@_); + while (length($_) > 70) { + $tmp = substr($_,0,70); + $tmp =~ s/^(.*) .*/$1/; + $head .= "\t$tmp\n"; + $_ = ' ' . substr($_,length($tmp),9999); + } + $head .= "\t$_\n"; +} + +# The first line was escaped with a final \ character. Every following line +# is to be appended to it (until we found a real \n not escaped). Note that +# the leading spaces of the continuation line are removed, so any space should +# be added before the former \ if needed. +sub complete_line { + local($_); + local($read) = ''; # Concatenation of all the continuation lines found + while (<>) { + s/^\s+//; # Remove leading spaces + if (s/\\\s*$//) { # Still followed by a continuation line + $read .= $_; + } else { # We've reached the end of the continuation + return $read . $_; + } + } +} + +!NO!SUBS! +chmod 755 makegloss +$eunicefix makegloss diff --git a/mcon/man/Jmakefile b/mcon/man/Jmakefile new file mode 100644 index 0000000..737f8c9 --- /dev/null +++ b/mcon/man/Jmakefile @@ -0,0 +1,24 @@ +/* + * Jmakefile for metaconfig manual pages + */ + +;# $Id: Jmakefile,v 3.0 1993/08/18 12:10:13 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: Jmakefile,v $ +;# Revision 3.0 1993/08/18 12:10:13 ram +;# Baseline for dist 3.0 netwide release. +;# + +>L /* I expect to fix this with a |append command */ + +MPAGES = metaconfig.$(L) metalint.$(L) metaxref.$(L) + +ComplexShellManualTarget($(MPAGES)) diff --git a/mcon/man/Makefile.SH b/mcon/man/Makefile.SH new file mode 100755 index 0000000..f146784 --- /dev/null +++ b/mcon/man/Makefile.SH @@ -0,0 +1,167 @@ +: Makefile.SH generated from Jmake.tmpl and Jmakefile [jmake 3.0 PL44] +: $X-Id: Jmake.tmpl,v 3.0.1.1 1993/08/20 07:36:36 ram Exp ram $ + +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,'` +DATE=`date` + +$spitshell >Makefile <<!GROK!THIS! +######################################################################## +# Makefile generated from Makefile.SH on $DATE + +SHELL = /bin/sh +JMAKE = jmake +TOP = ../.. +CURRENT = $CURRENT +DIR = $DIR +INSTALL = $INSTALL + +######################################################################## +# Parameters set by Configure -- edit config.sh if changes are needed + +CTAGS = ctags +L = $manext +MANSRC = $installmansrc +MAKE = make +MV = $mv +RM = $rm -f + +######################################################################## +# Automatically generated parameters -- do not edit + +MANPAGE = \$(MPAGES) + +######################################################################## +# New suffixes and associated building rules -- edit with care + +.SUFFIXES: .SH .$manext + +.SH.$manext: + /bin/sh \$< + +!GROK!THIS! +$spitshell >>Makefile <<'!NO!SUBS!' +######################################################################## +# Jmake rules for building libraries, programs, scripts, and data files +# $X-Id: Jmake.rules,v 3.0.1.1 1994/10/29 15:46:30 ram Exp ram $ + +######################################################################## +# Start of Jmakefile + +# $X-Id: Jmakefile,v 3.0 1993/08/18 12:10:13 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. +# +# $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) + +install.man:: + @if test "$(MANSRC)"; then \ + case '${MFLAGS}' in *[i]*) set +e;; esac; \ + for file in $(MPAGES); do \ + (set -x; $(INSTALL) -c -m 444 $$file $(MANSRC)); \ + done; \ + else exit 0; fi + +deinstall.man:: + @if test "$(MANSRC)"; then \ + case '${MFLAGS}' in *[i]*) set +e;; esac; \ + for file in $(MPAGES); do \ + (set -x; $(RM) $(MANSRC)/$$file); \ + done; \ + else exit 0; fi + +######################################################################## +# Common rules for all Makefiles -- do not edit + +emptyrule:: + +clean: local_clean +realclean: local_realclean +clobber: local_clobber + +local_clean:: + $(RM) core *~ *.o + +local_realclean:: local_clean + +local_clobber:: local_realclean + $(RM) Makefile config.sh + +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 $@; exit 0; 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 + +install:: + @echo "install in $(CURRENT) done." + +deinstall:: + @echo "deinstall in $(CURRENT) done." + +install.man:: + @echo "install.man in $(CURRENT) done." + +deinstall.man:: + @echo "deinstall.man in $(CURRENT) done." + +Makefiles:: + +Makefiles.SH:: + +!NO!SUBS! +chmod 644 Makefile +$eunicefix Makefile + diff --git a/mcon/man/mconfig.SH b/mcon/man/mconfig.SH new file mode 100755 index 0000000..059091b --- /dev/null +++ b/mcon/man/mconfig.SH @@ -0,0 +1,2103 @@ +case $CONFIG in +'') + if test -f config.sh; then TOP=.; + elif test -f ../config.sh; then TOP=..; + elif test -f ../../config.sh; then TOP=../..; + elif test -f ../../../config.sh; then TOP=../../..; + elif test -f ../../../../config.sh; then TOP=../../../..; + else + echo "Can't find config.sh."; exit 1 + fi + . $TOP/config.sh + ;; +esac +case "$0" in +*/*) cd `expr X$0 : 'X\(.*\)/'` ;; +esac +echo "Extracting mcon/man/metaconfig.$manext (with variable substitutions)" +$rm -f metaconfig.$manext +$spitshell >metaconfig.$manext <<!GROK!THIS! +.TH METACONFIG $manext "Version $VERSION PL$PATCHLEVEL" +''' @(#) Manual page for metaconfig +''' +''' $Id$ +''' +''' Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +''' +''' You may redistribute only under the terms of the Artistic Licence, +''' as specified in the README file that comes with the distribution. +''' You may reuse parts of this distribution only within the terms of +''' that same Artistic Licence; a copy of which may be found at the root +''' of the source tree for dist 4.0. +''' +''' $Log: mconfig.SH,v $ +''' Revision 3.0.1.17 1997/02/28 16:29:31 ram +''' patch61: documents the runnning environment and the src.U unit +''' patch61: added warnings for $_a and $_o, as well as "startsh" +''' +''' Revision 3.0.1.16 1995/09/25 09:17:48 ram +''' patch59: documented new ?Y: directive +''' patch59: fixed my e-mail address +''' +''' Revision 3.0.1.15 1995/07/25 14:18:24 ram +''' patch56: added extra nroff escapes at line heads to keep leading dots +''' patch56: documented new -G option +''' patch56: extended description of the Csym.U unit +''' patch56: now mentions what a compile-link test line should look like +''' +''' Revision 3.0.1.14 1995/05/12 12:25:02 ram +''' patch54: documented new -K switch for knowledgeable users +''' +''' Revision 3.0.1.13 1995/01/30 14:46:39 ram +''' patch49: documented new special units Prefixit.U and Prefixup.U +''' +''' Revision 3.0.1.12 1995/01/11 15:39:16 ram +''' patch45: documents new -O option and new Getfile escape supports +''' patch45: documents the & escape in Myread and the new cc symbol lookup +''' +''' Revision 3.0.1.11 1994/10/29 16:32:38 ram +''' patch36: added nroff protection for lines beginning with '.' +''' patch36: documents new ?F: line for file declarations +''' patch36: added example showing how ./loc can be used +''' +''' Revision 3.0.1.10 1994/08/29 16:33:40 ram +''' patch32: documented new Typedef.U unit for typedef lookup +''' +''' Revision 3.0.1.9 1994/06/20 07:10:14 ram +''' patch30: added -L option for easier unit testing +''' patch30: new -D and -U options supported by Configure +''' +''' Revision 3.0.1.8 1994/05/13 15:29:16 ram +''' patch27: now understands macro definitions in ?H: lines +''' +''' Revision 3.0.1.7 1994/05/06 15:19:25 ram +''' patch23: documented the new 'p' option in Getfile.U +''' +''' Revision 3.0.1.6 1994/01/24 14:19:47 ram +''' patch16: symbols defined in a unit can be tagged "internal use only" +''' patch16: documents new MailList.U special unit +''' patch16: new general <\$variable> macro substitution +''' +''' Revision 3.0.1.5 1993/10/16 13:51:50 ram +''' patch12: new option -M to activate ?M: lines +''' patch12: documents new ?M: lines format +''' patch12: new internal Makefile command cm_h_weed for ?M: support +''' patch12: documents usage for new confmagic.h file +''' +''' Revision 3.0.1.4 1993/09/09 11:50:35 ram +''' patch9: lots of typo fixes and abusive variable substitution problems +''' +''' Revision 3.0.1.3 1993/08/30 08:53:51 ram +''' patch8: wrongly stated that patchlevel.h should not be part of MANIFEST.new +''' +''' Revision 3.0.1.2 1993/08/24 12:13:32 ram +''' patch3: typo fixes +''' +''' Revision 3.0.1.1 1993/08/19 06:42:23 ram +''' patch1: leading config.sh searching was not aborting properly +''' +''' Revision 3.0 1993/08/18 12:10:14 ram +''' Baseline for dist 3.0 netwide release. +''' +''' +.de Ex \" Start of Example +.sp +.in +5 +.nf +.. +.de Ef \" End of Example +.sp +.in -5 +.fi +.. +.SH NAME +metaconfig \- a Configure script generator +.SH SYNOPSIS +.B metaconfig +[ \-\fBdhkmostvwGMV\fR ] +[ \-\fBL \fIdir\fR ] +.SH DESCRIPTION +.I Metaconfig +is a program that generates Configure scripts. If you don't know what a +Configure script is, please skip to the \fBTUTORIAL\fR section of this +manual page. If you want a full (formal) description of the way to +use \fImetaconfig\fR and its units, please look at the \fBREFERENCE\fR +section. The following is a quick introduction and reference for +knowledgeable users. +.PP +.B Metaconfig +operates from set of +.I units +which define everything that metaconfig knows about portability. +Each unit is self-contained, and does not have to be registered anywhere +other than by inclusion in either the public U directory or your private +U directory. +If the dist package (of which metaconfig is a part) is installed in LIB, +then the public U directory is LIB/dist/mcon/U. On this machine, the +LIB directory is $privlibexp. +Your private U directory, if you have one, +is in the top level directory of your package. +Before you can run \fImetaconfig\fR you must do a several things: +.IP \(bu 5 +Create a .package file in the package's top level directory by running +\fIpackinit\fR. +This program will ask you about your package and remember what you tell +it so that all the dist programs can be smart. +.IP \(bu +Consult the Glossary (in LIB/dist/mcon) and write your shell scripts and +C programs in terms of the symbols that metaconfig knows how to define. +You don't need to tell metaconfig which symbols you used, since metaconfig +will figure that out for you. +.IP \(bu +Generate any .SH scripts needed to write Makefiles or shell scripts that +will depend on values defined by Configure. +There is a program called \fImakeSH\fR that will help you convert a plain +script into a script.SH template; some editing will still need to be performed +on the resulting .SH file to move the variable configuration part in the +top part of the script (see inline comments generated by \fImakeSH\fR within +your .SH file). +.IP \(bu +Create a MANIFEST.new file in your top level directory that lists all the +files in your package. This file will remain private and will not be +part of the final distribution. +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 ram@acri.fr (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. +''' +''' T u t o r i a l +''' +.SH TUTORIAL +This (long) section is an introduction to \fImetaconfig\fR, in which we will +learn all the basics. If you already know how to use \fImetaconfig\fR, you +may safely skip to the next section. +''' +.SS Overview +.PP +Usually when you want to get some source package to compile on a given +platform you have to edit the main Makefile (assuming there is one!), +choose a C compiler, make sure you have the proper libraries, and then +fire the \fImake\fR command. If the package is reasonably well written, it +will compile (without a warning being an option :-). In itself, the last +sentence is a real performance, since given the variety of UNIX platforms +available today and the diversity of flavours, that means the author of the +package has gone into deep trouble to figure out the right choices given +some standard trial, guessing and messing around with system includes and +types. +.PP +However, despite all his talent, the author cannot possibly know that +some system has a broken system call, or that some sytem structure lacks +one otherwise standard field, or simply wheter a given include file exists +or not. And I'm not considering the implicit assumptions, like the type +returned by the \fImalloc()\fR function or the presence of the \fIrename()\fR +system call to name a few. But that knowledge is necessary to achieve real +portability. +.PP +Now let's not abuse ourselves. Using that information requires greater +skills, yet it can lead to more portable programs since it is then +written in a system-independant fashion and relies only on the fact that +some assumption is true or false on a particular system, each assumption +being unrelated with each other. That is to say, we do not say: We're on +a BSD system or we are on a USG system. That's too fuzzy anyway nowadays. +No, we want to say to the source code: this system does not have the +.I rename() +system call and \fImalloc()\fR returns a \fI(void *)\fR +value. +.PP +Metaconfig is a tool that will let you do just that, with the additional +benefit of not having to hand-edit the Makefile if all goes well. By +running \fImetaconfig\fR, you create a shell script named \fIConfigure\fR. +Lots of efforts have been devoted to the Configure script internals to ensure +it will run on 99% of the existing shells available as of this writing. +Configure will probe the target system, asking questions when in doubt and +gather all the answers in one single shell file, which in turn can be used +to automatically generate configured Makefiles and C include files. +.PP +There is only a limited (but quite large) set of symbols available for your +shell scripts and C programs. They are all documented in the Glossary file. +All you need to do is learn about them and start using them to address +portability and configuration problems. Then, by running \fImetaconfig\fR, +a suitable Configure script will be generated for your package. +.PP +The Configure script is built out several units (more than 300), each +unit being responsible for defining a small number of shell and/or C +symbols. Units are assembled together at the final stage, honoring +the dependency graph (one unit may need the result of several other +units which are then placed before in the script). +''' +.SS Symbols +.PP +Symbols are the most important thing in the \fImetaconfig\fR world. They +are the smallest recognized entity, usually a word, and can be granted +a value at the end of the Configure execution. For instance, the C +pre-processor symbol \fIHAS_RENAME\fR is a \fImetaconfig\fR symbol that is +guranteed to be defined if, and only if, the \fIrename()\fR system call +is present. Likewise, the \fI\$\&ranlib\fR shell variable will be set to +either ':' or 'ranlib' depending on whether the call to the \fIranlib\fR +program is needed to order a library file. How this works is not important +for now, what is important is to understand that those symbols are given +a \fIlife\fR (i.e. a value) upon \fIConfigure\fR execution. +.PP +Using symbols is relatively straightforward. In a C source file, you simply +use the symbol value, as a pre-processor directive (for instance an: \fI#ifdef +HAS_RENAME\fR) or, if the symbol value is a string, directly as you would use +a macro in C. And in a shell file or a Makefile, you may reference a shell +symbol directly. +.PP +Actually, I'm lying, because that's not completely as magic as the previous +paragraph could sound. In a C file, you need to include the Configure-produced +\fIconfig.h\fR file, and you must wrap your shell script or Makefile in a .SH +file and you may reference the shell symbol only in the variable +substitution part of that .SH file. More on this later. +''' +.SS Source Files +.PP +Symbols may only appear in a limited set of source files, because +\fImetaconfig\fR will only scan those when looking for known symbols, trying +to figure out which units it will need. You may use C symbols in C source +files, i.e. files with a \fI.c\fR, \fI.h\fR, \fI.y\fR or \fI.l\fR extension, +and shell symbols are looked for only in .SH files. +.PP +In order to get the value of a symbol, a C file needs to include the special +\fIconfig.h\fR file, which is produced by \fIConfigure\fR when C symbols +are present. And .SH files are run through a shell, producing a new file. +However, in the top section of the .SH file, the special \fIconfig.sh\fR +file (also produced by running \fIConfigure\fR) is sourced, and variable +substitutions apply. Actually, \fIconfig.h\fR is produced by running the +\fImetaconfig\fR-produced \fIconfig_h.SH\fR file, again using variable +substitution. So we're going to look at that a little more closely since +this is the heart of the whole \fIconfiguration\fR scheme... +''' +.SS Variable Substitution +.PP +There is shell construct called \fIhere document\fR which enables a +command to take an input specified within the script itself. That +input is interpreted by the shell as a double-quoted string or a +single quoted string depending on the form of the here document +specification. +.PP +To specify a here document, the '<<' token is used, followed by a single +identifier. From then on, the remaining script lines form the input for +the command, until the here document is found on a line by itself. +Shell substitution (including shell variable substitutions) is done +unless the identifier is surrounded by single quotes. For instance: +.Ex +var='first' +tar='second' +echo "--> first here document:" +cat <<EOM +var='\$var' +tar='\$\&tar' +EOM +echo "--> second here document:" +cat <<'EOM' +echo \$var +echo \$\&tar +EOM +echo "--> end." +.Ef +will produce, when run through a shell: +.Ex +--> first here document: +var='first' +tar='second' +--> second here document: +echo \$var +echo \$\&tar +--> end. +.Ef +The first here document has its content interpreted whilst the second +one is output as-is. Both are useful in a .SH script, as we are about to see. +''' +.SS Using .SH Scripts +.PP +A .SH script is usually produced by running the \fIMakeSH\fR script other +an existing file, transforming \fIfile\fR into a \fIfile.SH\fR. Let's take +a single example. Here is a little script (let's call it \fIintsize\fR) +which prints a single message, the size of the \fBint\fR datatype in C. +Unfortunately, it has the value hardwired in it, thusly: +.Ex +#!/bin/sh +intsize='4' +echo "On this machine, the int type is \$\&intsize bytes" +.Ef +Let's run \fImakeSH\fR on it by typing '\fImakeSH intsize\fR'. We get a single +\fIintsize.SH\fR file that looks like this: +.Ex +case \$CONFIG in +\&'') + if test -f config.sh; then TOP=.; + elif test -f ../config.sh; then TOP=..; + elif test -f ../../config.sh; then TOP=../..; + elif test -f ../../../config.sh; then TOP=../../..; + elif test -f ../../../../config.sh; then TOP=../../../..; + else + echo "Can't find config.sh."; exit 1 + fi + . \$TOP/config.sh + ;; +esac +: This forces SH files to create target in same directory as SH file. +: This is so that make depend always knows where to find SH derivatives. +case "\$0" in +*/*) cd \`expr X\$0 : 'X\\\\(.*\\\\)/'\` ;; +esac +echo "Extracting intsize (with variable substitutions)" +: This section of the file will have variable substitutions done on it. +: Move anything that needs config subs from !NO!SUBS! section to !GROK!THIS!. +: Protect any dollar signs and backticks that you do not want interpreted +: by putting a backslash in front. You may delete these comments. +\$spitshell >intsize <<!GROK!THIS! +\$startsh +\&!GROK!THIS! + +: In the following dollars and backticks do not need the extra backslash. +\$spitshell >>intsize <<'!NO!SUBS!' +intsize='4' +echo "On this machine, the int type is \$\&intsize bytes" +\&!NO!SUBS! +chmod 755 intsize +\$\&eunicefix intsize +.Ef +The first part of this script (in the \fIcase\fR statement) is trying to +locate the \fIconfig.sh\fR file, in order to source it. The \fI\$CONFIG\fR +variable is false by default, by true when \fIconfig.sh\fR has been sourced +already (which would be the case if this file was executed from within +\fIConfigure\fR itself, but let's not confuse the issue here). +.PP +Once the \fIconfig.sh\fR file has been sources, all the shell symbols +defined by \fIConfigure\fR are set. We know reach a second case statement, +used to change the current directory should a path be used to +reach this program (for instance if we said '\fIsh ../scripts/intsize.SH\fR', +we would first run '\fIcd ../scripts\fR' before continuing). If you do not +understand this, don't worry about it. +.PP +Here comes the intersting stuff. This script uses the \fI\$spitshell\fR +variable, and it's not something we know about...yet. If you look through +the Glossary file, you will see that this is a variable known by +\fImetaconfig\fR. If you make this file part of your distribution (by including +it in the MANIFEST.new file, we'll come back to that later on) and run +\fImetaconfig\fR, then the \fIConfigure\fR script will determine a suitable +value for this variable and it will be set in \fIconfig.sh\fR. Same goes for +\fI\$startsh\fR and the mysterious \fI\$\&eunicefix\fR at the end. On a +reasonable system, the relevant part of \fIconfig.sh\fR would look like this: +.Ex +spitshell='cat' +startsh='#!/bin/sh' +eunicefix=':' +.Ef +Ah! We're getting there. Now it looks familiar. We're facing a single +\fIcat\fR command whose input comes from a variable-interpolated here +document and whose output is redirected to \fIintsize\fR. The value +will be that of \fI\$startsh\fR, i.e. '#!/bin/sh'. Fine so far. +.PP +Then we reach the second here document expansion, to get the remaining of +the script. This time, the here document symbol is surrounded by single +quotes so the contents will be appended verbatim to the \fIintsize\fR file. +So, by running '\fIsh intsize.SH\fR', we get the following output: +.Ex +Extracting intsize (with variable substitutions) +.Ef +and by looking at the produced intsize file, we see: +.Ex +#!/bin/sh +intsize='4' +echo "On this machine, the int type is \$\&intsize bytes" +.Ef +which is exactly what we had at the beginning. So far, it's a no-operation +procedure... But, how marvelous! It so happens (pure coincidence, trust me!), +that \fImetaconfig\fR knows about the \fI$\&intsize\fR shell symbol. By moving +the initialization of intsize to the variable-interpolated area of the .SH +script and initializing it with the \fIConfigure\fR-computed value, +and removing the now useless comments added by \fImakeSH\fR, we get: +.Ex +case \$CONFIG in +\&'') + if test -f config.sh; then TOP=.; + elif test -f ../config.sh; then TOP=..; + elif test -f ../../config.sh; then TOP=../..; + elif test -f ../../../config.sh; then TOP=../../..; + elif test -f ../../../../config.sh; then TOP=../../../..; + else + echo "Can't find config.sh."; exit 1 + fi + . \$TOP/config.sh + ;; +esac +case "\$0" in +*/*) cd \`expr X\$0 : 'X\\\\(.*\\\\)/'\` ;; +esac +echo "Extracting intsize (with variable substitutions)" +\$\&spitshell >intsize <<!GROK!THIS! +\$\&startsh +intsize='\$\&intsize' +\&!GROK!THIS! + +\$\&spitshell >>intsize <<'!NO!SUBS!' +echo "On this machine, the int type is \$\&intsize bytes" +\&!NO!SUBS! +chmod 755 intsize +\$\&eunicefix intsize +.Ef +Of course, running this script through a shell will again output the same +script. But if we run \fIConfigure\fR on a machine where an \fBint\fR is +stored as a 64 bits quantity, \fIconfig.sh\fR will set \fIintsize\fR to +8 and the \fIintsize\fR script will bear the right value and print: +.Ex +On this machine, the int type is 8 bytes +.Ef +which is correct. Congratulations! We have just configured a shell script!! +''' +.SS Producing config.h +.PP +We can now have a look at the way \fIconfig.h\fR is produced out of +\fIconfig_h.SH\fR. We know that running \fIConfigure\fR produces a +\fIconfig.sh\fR script (how exactly this is done is not strictly +relevant here, but for the curious, it's another here document +substitution within \fIConfigure\fR itself). The \fIconfig_h.SH\fR +itself is built by \fImetaconfig\fR at the same time \fIConfigure\fR +is, provided you make use of at least one C symbol within your sources. +.PP +Let's have a look at some random \fIconfig_h.SH\fR file to see what +really happens: +.Ex +case \$CONFIG in +\&'') + if test -f config.sh; then TOP=.; + elif test -f ../config.sh; then TOP=..; + elif test -f ../../config.sh; then TOP=../..; + elif test -f ../../../config.sh; then TOP=../../..; + elif test -f ../../../../config.sh; then TOP=../../../..; + else + echo "Can't find config.sh."; exit 1 + fi + . \$TOP/config.sh + ;; +esac +case "\$0" in +*/*) cd \`expr X\$0 : 'X\\\\(.*\\\\)/'\` ;; +esac +echo "Extracting config.h (with variable substitutions)" +sed <<!GROK!THIS! >config.h -e 's!^#undef!/\*#define!' -e 's!^#un-def!#undef!' +/* + * This file was produced by running the config_h.SH script, which + * gets its values from config.sh, which is generally produced by + * running Configure. + * + * Feel free to modify any of this as the need arises. Note, however, + * that running config.h.SH again will wipe out any changes you've made. + * For a more permanent change edit config.sh and rerun config.h.SH. + */ + +/* Configuration time: \$\&cf_time + * Configured by: \$\&cf_by + * Target system: \$\&myuname + */ + +#ifndef _config_h_ +#define _config_h_ + +/* bcopy: + * This symbol is maped to memcpy if the bcopy() routine is not + * available to copy strings. + */ +/* HAS_BCOPY: + * This symbol is defined if the bcopy() routine is available to + * copy blocks of memory. You should not use this symbol under + * normal circumstances and use bcopy() directly instead, which + * will get mapped to memcpy() if bcopy is not available. + */ +#\$\&d_bcopy HAS_BCOPY /**/ +#ifndef HAS_BCOPY +#ifdef bcopy +#un-def bcopy +#endif +#define bcopy(s,d,l) memcpy((d),(s),(l)) /* mapped to memcpy */ +#endif + +/* HAS_DUP2: + * This symbol, if defined, indicates that the dup2 routine is + * available to duplicate file descriptors. + */ +#\$\&d_dup2 HAS_DUP2 /**/ + +/* I_STRING: + * This symbol, if defined, indicates to the C program that it should + * include <string.h> (USG systems) instead of <strings.h> (BSD systems). + */ +#\$\&i_string I_STRING /**/ + +#endif +\&!GROK!THIS! +.Ef +At the top of the file, we recognize the standard .SH construct that we +have already studied in detail. Next comes the extraction of the file +itself, via a here document with variable substitutions. However, here +we do not use a plain \fIcat\fR but a \fIsed\fR instead, since we need +to do some further editing on-the-fly. We'll see why later on, so let's +forget about it right now. +.PP +We now reach the leading comment, and the file is tagged with the +configuration time, the target system, etc... (those variables coming +from the sourced \fIconfig.sh\fR file have been set up by \fIConfigure\fR). +That comment header is followed by a '#ifndef' protection to guard against +multiple inclusions of this file. Then comes the heart of the file... +.PP +It helps to know that \fI\$d_*\fR and \fI\$i_*\fR variables are set to +either '\fIdefine\fR' or '\fIundef\fR' by \fIConfigure\fR, depending on +wether a function or an include file is present on the system or not. +That means the: +.Ex +#\$\&d_bcopy HAS_BCOPY /**/ +.Ef +line will be expanded to either: +.Ex +#define HAS_BCOPY /**/ +.Ef +if the \$\&d_bcopy variable is set to 'define' or: +.Ex +#undef HAS_BCOPY /**/ +.Ef +if \$\&d_bcopy was set to 'undef', because the feature was not there. However, +that's not what gets written in the \fIconfig.h\fR file because of the +\fIsed\fR filter we have already seen, which will transform the second form +into: +.Ex +/*#define HAS_BCOPY /**/ +.Ef +That's a handy form for later editing of \fIconfig.h\fR because you only need +to remove the leading '/*' if you want to override \fIConfigure\fR's choice. +Likewise, you may add a single '/*' at the beginning of a '#define' line +to avoid the definition of a particular symbol. This is why each symbol +definition is protected by a trailing '/**/', to close the leading +comment opened by '/*' (comments are not nested in C). +.PP +Now transforming '#undef' into '/*#define' is nice, but if we want to actually +write a '#undef', we're stuck... unless we write it as '#un-def' and let +\fIsed\fR fix that to '#undef' while producing \fIconfig.h\fR, which is what +is actually done here. +.PP +The same kind of reasoning applies to those two lines: +.Ex +#\$\&d_dup2 HAS_DUP2 /**/ +#\$\&i_string I_STRING /**/ +.Ef +and assuming \fIconfig.sh\fR defines: +.Ex +d_dup2='define' +i_string='undef' +.Ef +we'll get in the produced \fIconfig.h\fR: +.Ex +#define HAS_DUP2 /**/ +/*#define I_STRING /**/ +.Ef +Clear as running water? Good! +.PP +Now it should be obvious that by including \fIconfig.h\fR in all your +C source files, you get to know what \fIConfigure\fR has guessed on +your system. In effect, by using those symbols, you are writing +configured C code, since \fImetaconfig\fR will know that you need +those symbols and will generate a suitable \fIconfig_h.SH\fR file as +well as all the necessary code in \fIConfigure\fR to compute a +proper value for them (by assigning values to associated shell variables). +''' +.SS Running Metaconfig +.PP +Let's focus on the \fImetaconfig\fR program for a while to understand how +it uses its units and your source code to produce all the needed configuration +files. If you intend to write new units, you should have a good understanding +of the whole scheme. +.PP +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 explicitely protected by a '?%<' condition. See +the symbol aliasing paragraph for more details. +The remaining of the line is the optional \fIobsolete symbol list\fR, +which lists old equivalents for the new \fIsymbol_name\fR. +.TP +?C:\fIany text, for Glossary and config_h.SH\fR +Basically a comment describing the C symbol, which will be extracted +by \fImakegloss\fR into the Glossary file and by \fImetaconfig\fR into +the \fIconfig_h.SH\fR file if the symbol is wanted (or if its alias is +wanted when symbol aliasing is used). +.TP +?C:. +Closes the C symbol comment. +.TP +?H:?\fIsymbol\fR:\fIconfig_h.SH stuff\fR +This is the general inclusion request into \fIconfig_h.SH\fR. The line is +only written when the guarding \fIsymbol\fR is really wanted. This general +form is needed when C symbol aliasing was used. Otherwise, if you use one +of the other "standard" forms, the guarding is automatically done by +\fImetaconfig\fR itself. +.TP +?H:#\fI\$d_var VAR\fR "\fI\$var\fR" +Conditionally defines the \fIVAR\fR C symbol into \fI\$var\fR when \fI$d_var\fR +is set to '\fIdefine\fR'. Implies a '?\fIVAR\fR:' guarding condition, and +\fImetaconfig\fR automatically links \fIVAR\fR to its two shell variable +dependencies (i.e. both \fI\$d_var\fR and \fI\$var\fR will be flagged as +\fIwanted\fR if \fIVAR\fR is used in C sources). +.TP +?H:#define \fIVAR\fR [\fIoptional text\fR] +Always defines the \fIVAR\fR C symbol to some value. Implies a '?\fIVAR\fR:' +guarding condition. An automatic shell dependency is made to the unit itself. +.TP +?H:#define \fIVAR(x,y,z)\fR \fI\$var\fR +Always defines the macro \fIVAR\fR to be the value of the \fI\$var\fR variable. +It is up to the unit to ensure \fI\$var\fR holds a sensible value. An +automatic dependency between the C macro \fIVAR\fR and the shell variable +is established, and the whole line is guarded by an implicit '?\fIVAR\fR:'. +.TP +?H:#\fI\$d_var VAR\fR +Conditionally defines \fIVAR\fR if \fI\$d_var\fR is set to '\fIdefine\fR'. +Implies a '?\fIVAR\fR:' guarding condition. An automatic shell dependency is +generated towards \fI\$d_war\fR. +.TP +?H:#define \fIVAR\fR "\fI\$var\fR" +Assigns a configured value to the \fIVAR\fR C symbol. Implies a '?\fIVAR\fR:' +gurading condition. An automatic shell dependency is generated to link +\fIVAR\fR and \fI\$var\fR. +.TP +?H:. +Closes the \fIconfig_h.SH\fR inclusion requests. +.TP +?M:\fIC symbol\fR: \fIC dependencies\fR +Introduces magic definition concerning the C symbol, for \fIconfmagic.h\fR, +and defines the guarding symbol for the remaining ?M: definitions. This +line silently implies '?W:%<:\fIC symbol\fR', i.e. the unit will be loaded +into Configure if the C symbol appears within the C sources, whether magic +is used or not. The C dependencies are activated when magic is used, in order +to force their definition in \fIconfig_h.SH\fR. However, if magic is \fBnot\fR +used but the C symbol appears in the source without the needed C dependencies, +you will be warned every time the Wanted file is built, since it may be a +portability issue (and also because the unit is unconditionally loaded into +Configure whenever the C symbol is used, regardless of the other ?C: lines +from the unit). +.TP +?M:\fIcpp defs\fR +Defines the magic cpp mapping to be introduced in confmagic.h whenever the +concerned symbol is used. There is an implicit '?\fIsym\fR' guarding where +\fIsym\fR is the symbol name defined by the leading ?M: line. +.TP +?M:. +Closes the \fIconfmagic.h\fR inclusion request. +.TP +?W:\fIshell symbol list\fR:\fIC symbol list\fR +Ties up the destiny of the shell symbols with that of the C symbols: if any +of the C symbols listed is wanted, then all the shell symbols are marked +as wanted. Useful to force inclusion of a unit (shell symbol list set to +\&'%<') when the presence of some C symbol is detected. The shell symbol list +may be left empty, to benefit from the side effect of C symbol location +within the builtin pre-processor (symbol being \fIdefined\fR for that +pre-processor if located in the source). To look for patterns with a space +in them, you need to quote the C symbols within simple quotes, as in +\&'struct timezone'. +.TP +?V:\fIread-only symbols\fR:\fIread-write symbols\fR +This is a \fImetalint\fR hint and should be used only in special units +exporting some shell variables. The variables before the middle ':' +are exported read-only (changing them will issue a warning), while +other symbols may be freely read and changed. +.TP +?F:\fIfiles created\fR +This line serves two purposes: it is a \fImetalint\fR hint, and also +a placeholder for future \fIjmake\fR use. It must list three kind of files: +the temporary one which are created for a test, the private UU ones created +in the UU directory for later perusal, and the public ones left in the +root directory of the package. Temporary files must be listed with a +preceding '!' character (meaning "no! they're not re-used later!"), private +UU files should be preceded by a './' (meaning: to use them, say \fI./file\fR, +not just \fIfile\fR), and public ones should be named as-is. +.TP +?T:\fIshell temporaries\fR +Another \fImetalint\fR hint. This line lists all the shell variables used +as temporaries within the shell section of this unit. +.TP +?D:\fIsymbol\fR='\fIvalue\fR' +Initialization value for symbols used as conditional dependencies. If no +?D: line is found, then a null value is used instead. The \fImetalint\fR +program will warn you if a symbol is used at least once as a conditional +dependency and does not have a proper ?D: initialization. It's a good +practice to add those lines even for a null initialization since it +emphasizes on the possibly optional nature of a symbol. +.TP +?O:\fIany message you want\fR +This directive indicates that this unit is obsolete as a whole. Whenever +usage of any of its symbols is made (or indirect usage via dependencies), +the message is output on the screen (on stderr). You can put one ore more +lines, in which case each line will be printed, in order. +.TP +?LINT:\fImetalint hints\fR +See the \fImetalint\fR manual page for an explaination of the distinct +hints that can be used. +.TP +?INIT:\fIinitialization code\fR +The initialization code specified by this line will be loaded at the top +of the \fIConfigure\fR script provided the unit is needed. +''' +.SS C Symbol Aliasing +.PP +Sometimes it is not possible to rely on \fImetaconfig\fR's own default +selection for \fIconfig_h.SH\fR comments and C symbol definition. That's +where aliasing comes into play. Since it's rather tricky to explain, we'll +study an example to understand the underlying mechanism. +.PP +The d_const.U unit tries to determine whether or not your C compiler +known about the \fIconst\fR keyword. If it doesn't we want to remap +that keyword to a null string, in order to let the program compile. +Moreover, we want to automatically trigger the test when the \fIconst\fR +word is used. +.PP +Here are the relevant parts of the d_const.U unit: +.Ex +?MAKE:d_const: cat cc ccflags Setvar +?MAKE: -pick add \$@ %< +?S:d_const: +?S: This variable conditionally defines the HASCONST symbol, which +?S: indicates to the C program that this C compiler knows about the +?S: const type. +?S:. +?C:HASCONST ~ %<: +?C: This symbol, if defined, indicates that this C compiler knows about +?C: the const type. There is no need to actually test for that symbol +?C: within your programs. The mere use of the "const" keyword will +?C: trigger the necessary tests. +?C:. +?H:?%<:#$\&d_const HASCONST /**/ +?H:?%<:#ifndef HASCONST +?H:?%<:#define const +?H:?%<:#endif +?H:. +?W:%<:const +?LINT:set d_const +?LINT:known const +: check for const keyword +echo " " +echo 'Checking to see if your C compiler knows about "const"...' >&4 +$cat >const.c <<'EOCP' +main() +{ + const char *foo; +} +EOCP +if $\&cc -c $\&ccflags const.c >/dev/null 2>&1 ; then + val="$\&define" + echo "Yup, it does." +else + val="$\&undef" + echo "Nope, it doesn't." +fi +set d_const +eval $\&setvar +.Ef +First we notice the use of a ?W: line, which basically says: "This unit +is wanted when the \fIconst\fR keyword is used in a C file.". In order +to conditionally remap \fIconst\fR to a null string in \fIconfig.h\fR, +I chose to conditionally define \fIHASCONST\fR via \fI\$\&d_const\fR. +.PP +However, this raises a problem, because the \fIHASCONST\fR symbol is not +going to be used in the sources, only the \fIconst\fR token is. And the +?H: line defining \fIHASCONST\fR is implicitely guarded by '?HASCONST'. +Therefore, we must add the explicit '?%<' constraint to tell \fImetaconfig\fR +that those lines should be included in \fIconfig_h.SH\fR whenever the +\&'%<' symbol gets wanted (%< refers to the unit's name, here \fId_const\fR). +.PP +That's almost perfect, because the ?W: line will want \fId_const\fR whenever +\fIconst\fR is used, then the ?H: lines will get included in the +\fIconfig_h.SH\fR file. However, the leading comment (?C: lines) attached to +\fIHASCONST\fR is itself also guarded via \fIHASCONST\fR, i.e. it has an +implicit '?HASCONST' constraint. Hence the need for \fIaliasing\fR the +\fIHASCONST\fR symbol to '%<'. +.PP +The remaining part of the unit (the shell part) is really straightforward. +It simply tries to compile a sample C program using the \fIconst\fR keyword. +If it can, then it will define \fI\$\&d_const\fR via the \fI\$\&setvar\fR +fonction (defined by the \fISetvar.U\fR unit). See the paragraph about +special units for more details. +''' +.SS Make Commands +.PP +On the ?MAKE: command line, you may write a shell command to be executed as-is +or a special \fI-pick\fR command which is trapped by \fImetaconfig\fR and +parsed to see what should be done. The leading '-' is only there to prevent +\fImake\fR from failing when the command returns a non-zero status -- it's +not really needed since we use '\fImake -n\fR' to resolve the dependencies, +but I advise you to keep it in case it becomes mandatory in future versions. +The syntax of the \fIpick\fR command is: +.Ex +-pick \fIcmd\fR \$@ \fItarget_file\fR +.Ef +where \fI\$@\fR is the standard macro within Makefiles standing for the current +target (the name of the unit being built, with the final .U extension stripped). +The \fIcmd\fR part is the actual \fImetaconfig\fR command to be run, and the +\fItarget_file\fR is yet another parameter, whose interpretation depends on +the \fIcmd\fR itself. It also has its final .U extension stripped and normally +refers to a unit file, unless it start with './' in which case it references +one of the \fImetaconfig\fR control files in the '\fI.MT\fR directory. +.PP +The available commands are: +.TP 10 +add +Adds the \fItarget_file\fR to \fIConfigure\fR. +.TP +add.Config_sh +Fills in that part of \fIConfigure\fR producing the \fIconfig.sh\fR file. +Only used variables are added, conditional ones (from conditional dependencies) +are skipped. +.TP +add.Null +Adds the section initializing all the shell variables used to an empty string. +.TP +c_h_weed +Produces the \fIconfig_h.SH\fR file. Only the necessary lines are printed. +.TP +cm_h_weed +Produces the \fIconfmagic.h\fR file. Only the necessary lines are printed. +This command is only enabled when the \fB\-M\fR switch is given, or when a +\fIconfmagic.h\fR file already exists. +.TP +close.Config_sh +Adds the final 'EOT' symbol on a line by itself to end the here document +construct producing the \fIconfig.sh\fR file. +.TP +prepend +Prepends the content of the target to the \fItarget_file\fR if that file is +not empty. +.TP +weed +Adds the unit to \fIConfigure\fR like the \fIadd\fR command, but make some +additional tests to remove the '?\fIsymbol\fR' and '%\fIsymbol\fR' lines +from the \fItarget_file\fR if the symbol is not wanted or conditionally +wanted. The '%' form is only used internally by \fImetaconfig\fR while +producing its own .U files in the '\fI.MT\fR' directory. +.TP +wipe +Same as \fIadd\fR really, but performs an additional macro substitution. +The available macros are described in the \fIHardwired Macros\fR paragraph. +.PP +As a side note, \fImetaconfig\fR generates a \fI-cond\fR command internally +to deal with conditional dependencies. You should not use it by yourself, +but you will see it if scanning the generated \fIMakefile\fR in the \fI.MT\fR +directory. +''' +.SS Hardwired Macros +.PP +The following macros are recognized by the \fIwipe\fR command and subsituted +before inclusion in \fIConfigure\fR: +.TP 10 +<BASEREV> +The base revision number of the package, derived from \fI.package\fR. +.TP +<DATE> +The current date. +.TP +<MAINTLOC> +The e-mail address of the maintainer of this package, derived from +your \fI.package\fR. +.TP +<PACKAGENAME> +The name of the package, as derived from your \fI.package\fR file. +.TP +<PATCHLEVEL> +The patch level of the \fImetaconfig\fR program. +.TP +<VERSION> +The version number of the \fImetaconfig\fR program. +.PP +Those macros are mainly used to identify the \fImetaconfig\fR version that +generated a particular \fIConfigure\fR script and for which package it +was done. The e-mail address of the maintainer is hardwired in the leading +instructions that \fIConfigure\fR prints when starting. +.PP +Recent \fImetaconfig\fR versions understand a much more general syntax +of the form: +.Ex + <\$variable> +.Ef +which is replaced at Configure-generation time by the value of \fIvariable\fR +taken from your \fI.package\fR file. Eventually, the old hardwired macro +format will disappear, and <\$baserev> will replace <BASEREV> in all the +supplied units. +''' +.SS Special Units +.PP +The following special units are used to factorize code and provide higher +level functionalities. They either produce a shell script that can be +sourced or a shell variable that can be \fIeval\fR'ed. Parameter passing +is done via well-know variables, either named or anonymous like \$1, \$2, +etc... (which can be easily set via the shell \fIset\fR operator). +When \fIConfigure\fR executes, it creates and goes into a \fIUU\fR directory, +so every produced script lies in there and does not interfere with the +files from your package. +.PP +Here are the sepcial units that you should know about, and the way to use +them. +.TP 5 +Cppsym.U +This unit produces a shell script called \fICppsym\fR, which can be used +to determine whether any symbol in a list is defined by the C preprocessor +or C compiler you have specified. +It can determine the status of any symbol, though the symbols in \fI$al\fR +(attribute list) are more easily determined. +.TP +Csym.U +This sets the \$csym shell variable, used internally by \fIConfigure\fR to +check whether a given C symbol is defined or not. A typical use is: +.Ex +set symbol result [-fva] [previous] +eval \$\&csym +.Ef +That will set the \fIresult\fR variable to 'true' if the +function [-f], +variable [-v] or +array [-a] +is defined, 'false' otherwise. If a previous value is given and the \fB\-r\fR +switch was provided to \fIConfigure\fR (see the \fIConfigure Options\fR +paragraph), then that value is re-used without questioning. +.sp +The way this computation is done depends on the answer the user gives to +the question \fIConfigure\fR will ask about whether it should perform an +.I nm +extraction or not. If the exctraction was performed, the unit simply looks +through the symbol list, otherwise it performs a compile-link test, unless +.B \-r +was given to reuse the previously computed value, naturally... +.TP +End.U +By copying this unit into your private \fIU\fR directory and appending +dependencies on the ?MAKE: line, you can force a given unit to be loaded +into \fIConfigure\fR even if it is not otherwise wanted. Some units may +only be forced into \fIConfigure\fR that way. +.TP +Filexp.U +This unit produces a shell script \fIfilexp\fR which will expand filenames +beginning with tildes. A typical use is: +.Ex +exp_name=\`./filexp \$name\` +.Ef +to assign the expanded file name in \fIexp_name\fR. +.TP +Findhdr.U +This unit produces a \fIfindhdr\fR script which is used to locate the +header files in \fI$\&usrinc\fR or other stranger places using cpp capabilities. +The script is given an include file base name like 'stdio.h' or 'sys/file.h' +and it returns the full path of the inlcude file and a zero status if found, +or an empty string and a non-zero status if the file could not be located. +.TP +Getfile.U +This unit produces a bit of shell code that must be sourced in order to get +a file name and make some sanity checks. Optionally, a ~name expansion is +performed. +.sp +To use this unit, \fI\$rp\fR and \fI\$dflt\fR must hold the question and the +default answer, which will be passed as-is to the \fImyread\fR script +(see forthcoming \fIMyread.U\fR). The \fI\$fn\fR variable controls the +operation and the result is returned into \fI\$ans\fR. +.sp +To locate a file or directory, put 'f' or 'd' in \fI$fn\fR. If a '~' appears, +then ~name substitution is allowed. If a '/' appears, only absolute pathnames +are accepted and ~name subsitutions are always expanded before returning. +If '+' is specified, existence checks are skipped. If 'n' +appears within \fI\$fn\fR, then the user is allowed to answer 'none'. +.sp +Usually, unless you asked for portability, ~name substitution occurs when +requested. However, there are some times you wish to bypass portability and +force the substitution. You may use the 'e' letter (expand) to do that. +.sp +If the special 'l' (locate) type is used, then the \fI\$fn\fR variable must +end with a ':', followed by a file basename. If the answer is a directory, +the file basename will be appended before testing for file existence. This +is useful in locate-style questions like this: +.Ex +dflt='~news/lib' +: no need to specify 'd' or 'f' when 'l' is used +fn='l~:active' +rp='Where is the active file?' +\&. ./getfile +active="\$ans" +.Ef +.sp +Additionally, the 'p' (path) letter may be used in conjunction with 'l' to +tell \fIgetfile\fR that an answer without a '/' in it should be accepted, +assuming that it will be in everyone's PATH at the time this value will be +needed. +.sp +Also useful is the possibility to specify a list of answers that should be +accepted verbatim, bypassing all the checks. This list must be within +parenthesis and items must be comma separated, with no interleaving spaces. +Don't forget to quote the resulting string since parenthesis are meaningful +to the shell. For instance: +.Ex +dflt='/bin/install' +fn='/fe~(install,./install)' +rp='Use which install program?' +\&. ./getfile +install="\$ans" +.Ef +would let the user only specify fully qualified paths referring to existing +files, but still allow the special "install" and "./install" answers as-is +(assuming of course something will deal with them specially later on in the +chain since they do not conform with the general expected frame). +.sp +If the answer to the question is 'none', then the existence checks are skipped +and the empty string is returned. Note that since \fIgetfile\fR calls +\fImyread\fR internally, all the features available with \fImyread\fR apply +here to. +.sp +If a completely expanded value is needed (for instance in a Makefile), you +may use the \fI\$ansexp\fR variable which is always set up properly +by \fIgetfile\fR +as the expanded version of \fI\$ans\fR. Of course, it will not expand ~name if +you did not allow that in the first place in the \fI\$fn\fR variable. +.TP +Inhdr.U +This unit produces the \fI\$inhdr\fR shell variable, used internally by +\fIConfigure\fR to check whether a set of headers exist or not. A typical +use is: +.Ex +set header i_header [ header2 i_header2 ... ] +eval \$\&inhdr +.Ef +That will print a message, saying whether the header was found or not and +set the \fIi_header\fR variable accordingly. If more than one header +is specified and the first header is not found, we try the next one, until +the list is empty or one is found. +.TP +Inlibc.U +This unit produces the \fI\$inlibc\fR shell variable, used internally +by \fIConfigure\fR to check whether a given C function is defined or not. +A typical use is: +.Ex +set function d_func +eval \$\&inlibc +.Ef +That will print a message, saying whether the function was found or not +and set \fI\$d_func\fR accordingly. Internally, it used the \fI\$\&csym\fR +routine. +.TP +Loc.U +This important unit produces a shell script \fIloc\fR which can be used +to find out where in a list of directories a given file lies. The first +argument specifies the file to be located, the second argument is what +will be returned if the search fails, and the reamining arguments are a +list of directories where the file is to be searched. For instance: +.Ex +dflt=\`./loc sendmail.cf X /usr/lib /var/adm/sendmail /lib\` +.Ef +would set \fI\$dflt\fR to \fIX\fR if no \fIsendmail.cf\fR file was found +under the listed directories, or something like \fI/usr/lib/sendmail.cf\fR +on some systems. See also \fIGetfile.U\fR. +.TP +MailAuthor.U +This unit needs to be included on the ?MAKE: line of your own private End.U +to make it into \fIConfigure\fR. It offers the user to register himself to +the author, optionally being notified when new patches arrive or receiving +them automatically when issued. You need to install \fImailagent\fR to do +this (at least version 3.0). +.TP +MailList.U +This unit needs to be included on the ?MAKE: line of your own private End.U +to make it into \fIConfigure\fR. It offers the user to subscribe or +unsubscribe to a mailing list where discussion related to the package are +taking place. You need to run \fIpackinit\fR and answer the mailing list +related questions to set up the proper variables in your \fI.package\fR +before this unit may become operational. +.TP +Myinit.U +Copy this unit into your private \fIU\fR directory to add your own default +values to some internal variables. This unit is loaded into \fIConfigure\fR +after all the default initializations have been done. +.TP +Myread.U +This unit produces the \fImyread\fR shell script that must be sourced in +order to do a read. It allows shell escapes, default assignment and +parameter evaluation, as documented in the Instruct.U unit. It also allows +dynamic setting of the \fB\-d\fR option, which will be used for the remaining +of the script execution. +.sp +To use this unit, \fI\$rp\fR must hold the question and \fI\$dflt\fR should +contain the default answer. The question will be printed by the script +itself, and the result is returned in the \fI\$ans\fR variable. +.sp +Here is a typical usage: +.Ex +dflt='y' +rp='Question?' +\&. ./myread +value="\$ans" +.Ef +See the unit itself for more information. +.TP +Oldconfig.U +This unit must be part of your dependency ?MAKE: line when some of your +units tries to reuse an old symbol value. This unit is responsible for +getting the old answers from \fIconfig.sh\fR or providing useful hints +when running on a given platform for the first time. See the \fIConfigure +Hints\fR paragraph for more information about hints. +.TP +Prefixit.U +The purpose of this unit is to detect changes in the installation prefix +directory to recompute automatically suitable defaults from previous answers. +It relies on the value of the \fI\$oldprefix\fR variable which holds the +previous prefix directory when it changed, and is empty otherwise. For instance, +if the prefix was changed from \fI/opt\fR to \fI/usr/local\fR, then the +previous binary installation directory will be changed from \fI/opt/bin\fR +to \fI/usr/local/bin\fR, or will remain unchanged if it was, say, \fI/bin\fR. +.sp +You need to call \fBset\fR before issuing an \fBeval\fR on \fI\$prefixit\fR, +such as: +.Ex +set dflt var [dir] +eval \$prefixit +.Ef +which would set \fI\$dflt\fR to \fI\$var\fR or \fI\$prefix/dir\fR depending +on whether the prefix remained the same or not. If \fIdir\fR is the +string \fInone\fR, a single space value in \fI\$dflt\fR is kept as-is, even +when the prefix changes. If \fIdir\fR is omitted, then \fI\$dflt\fR is set +to an empty string if the prefix changed, to \fI\$var\fR otherwise. +.TP +Prefixup.U +The intent of thit unit is similar to that of Prefixit.U, i.e. it helps +fixing the default string to accomodate prefix changes. However, the shell +variable \fI\$prefixup\fR, when evaluated, will only restore ~name expansions, +should prefix use such an escape mechanism. Use it as: +.Ex +set dflt +eval \$prefixup +.Ef +before prompting via \fIgetfile\fR for instance. If the prefix does not +make use of ~name expanstion, then the above will be a no-op on the \fI$dflt\fR +variable, naturally. +.TP +Typedef.U +This unit produces the \fI\$typedef\fR shell variable, used internally by +\fIConfigure\fR to check whether a typedef exists or not. A typical +use is: +.Ex +set typedef val_t default [ includes ] +eval \$\&typedef +.Ef +This will set the variable \fIval_t\fR to the value of \fIdefault\fR if the +typedef was not found among the listed include files, or to \fItypedef\fR +if found. If no include files are specified, the unit looks +in \fI<sys/types.h>\fR only. If you specifiy some includes, only those are +looked at. +.TP +Unix.U +The purpose of this unit is to define some of the most common UNIX-isms +via variables which can be altered from the command line or via proper +hint files. In particular, \fI\$_exe\fR, \fI\$_o\fR and \fI\$_a\fR +are set. All the units should refer to \fI\$_o\fR and not to \fI.o\fR +directly. The '.' is part of these variables. +.TP +Setvar.U +This unit produces the \fI$setvar\fR variable, which is used internally +by \fIConfigure\fR to set a \fIdefine\fR/\fRundef\fR value to a given symbol, +emitting a warning when it suddenly changes from a previous value. For instance: +.Ex +val="\$\&define" +set d_variable +eval \$\&setvar +.Ef +If the previous \fI\$d_variable\fR value was non-null and \fI\$val\fR is +different, a "whoa" warning is issued. +.TP +Whoa.U +This unit produces the \fIwhoa\fR script, which emits a warning when the +\fIvalue\fR in variable whose name is \fI\$var\fR is not the same as +its old previous value held in \fI\$was\fR. Upon return, \fI\$td\fR and +\fI\$tu\fR hold the proper value to \fIdefine\fR or \fIundef\fR the variable. +See examples in \fIInlibc.U\fR. +''' +.SS Builtin Pre-processor +.PP +Each unit to be included in \fIConfigure\fR is ran through a built-in +pre-processor. Pre-processor statements are introduced by the '@' character +('#' is the shell comment character). It functions merely as the C +pre-processor does but allows for shell and perl escapes. Here are the +available functions: +.TP 10 +@if \fIexpression\fR +If \fIexpression\fR is true, continue loading code until @end, @elsif or @else. +.TP +@elsif \fIexpression\fR +Alternative choice. If \fIexpression\fR is true, continue loading code until +@end, another @elsif or @else. +.TP +@else +Default code to be loaded if the @if \fIexpression\fR was false and none +of the optional @elsif matched. Load until @end. +.TP +@end +Close the conditional loading statement opened by @if. +.TP +@define \fIsymbol\fR +Tells the pre-processor that \fIsymbol\fR is defined from now on. +.PP +The conditional \fIexpression\fR can include symbol names (value is +true if symbol is wanted or defined via \fI@define\fR or shell/perl +escapes. Those atoms can be combined using the traditional boolean +operators '!' for negation, '&&' for logical and, and '||' for logical +or. +.PP +Text enclosed within single brackets is a shell test, while text between +double brakets is a perl test. Namely the expressions: +.Ex +{ \fIshell text\fR } +{{ \fIperl text\fR }} +.Ef +are translated into: +.Ex +if \fIshell text\fR >/dev/null 2>&1; then exit 0; else exit 1; fi +if (\fIperl text\fR) {exit 0;} else {exit 1;} +.Ef +and the exit status is used in the standard way to get a boolean value, +i.e. 0 is true and everything else is false. Note that only simple +conditions can be expressed in perl, until some complex code can be +loaded within \fImetaconfig\fR and executed. +.PP +The built-in pre-processor can be used to finely tune some units +(see \fId_gethname.U\fR for a complex example) depending on the symbols +actually used by the program or the files present in the distribution. +For instance, the \fIOldconfig.U\fR uses a test like: +.Ex +@if {test -d ../hints} +.Ef +and \fIConfigure\fR will contain hint-dependent code only if there is +a \fIhints\fR directory in the package's top level directory. Note that +tests are ran from within the '\fI.MT\fR' directory, hence the needed +\&'../' in the test. +.PP +The pre-processor can also be used to avoid putting useless code when +a symbol is not defined. Units defining more than one symbol can be +protected that way (since the unit is loaded as a whole) by gathering +symbol-dependent code within an @if/@end pair. For instance: +.Ex +@if I_TIME || I_SYS_TIME || I_SYS_TIME_KERNEL +need_time_h='true' +@else +need_time_h='false' +@end +.Ef +will test whether the source code makes any use of one of the three +symbols that control the \fItime.h\fR or \fIsys/time.h\fR inclusion +and define the shell symbol accordingly. That gives \fIConfigure\fR +a feedback on what the sources need and avoid the drawback of having +fixed frozen units. +.PP +Via the '?W:' lines, you can get intersting combinations. For instance, +the \fIi_time.U\fR unit needs to know whether the C sources make any +use of the \fIstruct timezone\fR type. Therefore, the line: +.Ex +?W::timezone +.Ef +is used for its side-effect of defining the symbol \fItimezone\fR for +the pre-processor. The unit code can then say: +.Ex +@if timezone +for s_timezone in '-DS_TIMEZONE' ''; do +@else +s_timezone='' +@end + +\&... code using s_timezone ... + +@if timezone +done +@end +.Ef +and have an extra loop trying two successive values for the \fIs_timezone\fR +variable, but only if needed. +''' +.SS Obsolete Symbols +.PP +Obsolete symbols are preserved to ease the transition with older +.I metaconfig +units. Unless the \fB\-o\fR switch is passed to \fImetaconfig\fR they will +be ignored. However, an \fIObsolete\fR file will be generated, telling you +which files are making use of those obsolete symbols and what are the new +symbols to be used. +.PP +The lifetime for obsolete symbols is one full revision, i.e. they will +be removed when the next base revision is issued (patch upgrades do not +count of course). Therefore, it is wise to translate your sources and +start using the new symbols as soon as possible. +''' +.SS Configure Hints +.PP +It may happen that the internal configuration logic makes the wrong choices. +For instance, on some platform, the \fIvfork()\fR system call is present but +broken, so it should not be used. It is not possible to include that knowledge +in the units themselves, because that might be a temporary problem which the +vendor will eventually fix, or something that was introduced by a new OS +upgrade. +.PP +Anyway, for all those tiny little problems that are too system-specific, +\fImetaconfig\fR provides hint files support. To use it, you need to create +a \fIhints\fR directory in the package's top level directory, and have it +when you run \fImetaconfig\fR. That will load the hint-related part from +\fIOldconfig.U\fR. +.PP +From then on, you may pre-set some of the shell variables \fIConfigure\fR uses +in an OS-specific .sh file. There is code in \fIOldconfig.U\fR that tries +to guess which hint files are needed by computing a standard name based +on the system OS name, the kernel name, the release number, etc... Since +this information is likely to change rapidly, I'm not documenting it here. +You have to reverse engineer the code from \fIOldconfig.U\fR. +.PP +When you first release your package, your hints file directory should be empty. +If the users of your package complain that they have problem with +\fIConfigure\fR defaults on a particular system, you have to see whether this +is a platform-specific problem or a general one. In the former case, it's +time to introduce a new hint file, while in the latter, the corresponding +unit should be revised. +.PP +For instance, SGI systems are known to have a broken \fIvfork()\fR system +call, as of this writing. And the corresponding hint file name is \fIsgi.sh\fR. +So all you need to do is create a \fIhints/sgi.sh\fR file in which you write: +.Ex +d_vfork="\$\&define" +.Ef +which will always remap \fIvfork\fR on \fIfork\fR (see \fId_vfork.U\fR). When +running on SGI systems for the first time, \fIConfigure\fR will detect that +there is an \fIhints/sgi.sh\fR file, and that we are on an IRIX machine +(the kernel name is often /irix), therefore it will propose \fIsgi\fR as a +possible hint. +If the user accepts it, and since the \fI\$\&d_vfork\fR value is modified +via the \fI$\&setvar\fR call, a \fIwhoa!\fR will be emitted to warn that we +are about to override the value computed by \fIConfigure\fR. +.PP +Note that you don't have to provide \fIall\fR the hints known by +\fIOldconfig.U\fR. If a hint file is missing, it will not be proposed as a +possible choice. The heuristic tests ran to compute the possible hint +candidates are flaky. If you have new values or different tests, please send +them to me... +''' +.SS Overriding Choices +.PP +If you create a \fIconfig.over\fR file in the top level directory, +\fIConfigure\fR will ask you if you wish to load it to override the default +values. This is done prior creation of the \fIconfig.sh\fR file, so it gives +you a chance to patch the values stored in there. +.PP +This is distinct from the hints approach in that it is a local file, which +the user is free to create for his own usage. You should not provide such +a file yourself, but let the user know about this possibility. +''' +.SS Configure Options +.PP +The \fIConfigure\fR script may be called with some options specified on the +command line, to slightly modify its behaviour. Here are the allowed options: +.TP 10 +.B \-d +Use defaults for all answers. +.TP +.B \-e +Go on without questioning past the production of \fIconfig.sh\fR. +.TP +.B \-f \fIfile\fR +Use the specified file as a default configuration. If this switch is not +used, the configuration is taken from \fIconfig.sh\fR, when present. +.TP +.B \-h +Print help message and exit. +.TP +.B \-r +Reuse C symbols value if possible. This will skip the costly \fInm\fR +symbol extraction. If used the first time (with no previous configuration +file), \fIConfigure\fR will try to compile and link a small program in order +to know about the presence of a symbol, or absence thereof. +.TP +.B \-s +Silent mode. Only strings printed on file descriptor #4 will be seen on +the screen (that's the important messages). It's not possible to completely +turn off any output, but you may use '\fIConfigure -ders >/dev/null 2>&1\fR' +to have a full batch run with no output and no user interaction required. +.TP +.B \-D\fI symbol=value\fR +Pre-defines \fIsymbol\fR to bear the specified \fIvalue\fR. It is also +possible to use '\fB-D\fI symbol\fR' which will use a default value +of 'define'. +.TP +.B \-E +Stop at the end of the configuration questions, after having produced +a \fIconfig.sh\fR. This will not perform any '\fImake depend\fR' or .SH files +extraction. +.TP +.B \-K +Knowledgeable user. When you use this option, you know what you are +doing and therefore the \fIconfig.sh\fR file will always be handled as if it +was intended to be re-used, even though it might have been generated on +an alien system. It also prevents aborting when \fIConfigure\fR detects +an unusable C compiler or a wrong set of C flags. +Further shortcuts might be turned on by this option as well in the future. +This option is documented in the \fIConfigure\fR usage message, to remind +us about its existence, but the given description is hoped to be cryptic +enough. :-) +.TP +.B \-O +Allow values specified via a \fB\-D\fR or \fB\-U\fR to override settings from +any loaded configuration file. This is not the default behaviour since the +overriding will not be propagated to variables derived from those you are +presently altering. Naturally, without \fB-O\fR, the setting is only +done when no configuration file is loaded, which is safe since derivative +variables have not been computed yet... +.TP +.B \-S +Perform variable substitution on all the .SH files. You can combine it with the +\fB\-f\fR switch to propagate any configuration you like. +.TP +.B \-U\fI symbol=\fR +Pre-sets \fIsymbol\fR to bear an empty value. It is also +possible to use '\fB-U\fI symbol\fR' which will set \fIsymbol\fR to 'undef'. +.TP +.B \-V +Print the version number of the \fImetaconfig\fR that generated this +.I Configure +script and exit. +''' +.SS Running Environment +Upon starting, \fIConfigure\fR creates a local \fIUU\fR directory and runs +from there. The directory is removed when Configure ends, but this means +you must run the script from a place where you can write, i.e. not from +a read-only file system. +.PP +You can run \fIConfigure\fR remotely though, as in: +.Ex + ../package/Configure +.Ef +to configure sources that are not present locally. All the generated files +will be put in the directory where you're running the script from. This magic +is done thanks to the src.U unit, which is setting the \fI\$src\fR +and \fI\$rsrc\fR variables to point to the package sources. That path is +full or relative, depending on whether \fIConfigure\fR was invoked via a +full or relative path. +.PP +From within the \fIUU\fR subdirectory, you can use \fI\$rsrc\fR to access the +source files (units referring to source files link hints shall always use +this mechanism and not assume the file is present in the parent directory). +All the Makefiles should use the \$src variable as a pointer to the sources +from the top of the build directory (where \fIConfigure\fR is run), either +directly or via a VPATH setting. +.PP +When running \fIConfigure\fR remotely, the .SH files are extracted in the +build directory, not in the source tree. However, it requires some kind of +a \fImake\fR support to be able to compile things in a build directory whilst +the sources lie elsewhere. +''' +.SS Using Magic Redefinitions +.PP +By making use of the \fB\-M\fR switch, some magic remappings may take place +within a \fIconfmagic.h\fR file. That file needs to be included after +\fIconfig.h\fR, of course, but also after all the other needed include files. +Namely: +.Ex +#include "config.h" +\&... +\&... \fIother inclusions\fR ... +\&... +#include "confmagic.h" +.Ef +Typically, \fIconfmagic.h\fR will attempt to remap \fIbcopy()\fR +on \fImemcpy()\fR if no \fIbcopy()\fR is available locally, or transform +\fIvfork\fR into \fIfork\fR when necessary, hence making it useless to +bother about the \fIHAS_VFORK\fR symbol. +.PP +This configuration magic is documented in the Glossary file. +''' +.SS Unit Templates +.PP +There is a set of unit templates in the \fImetaconfig\fR source directory, +which are intended to be used by a (not yet written) program to quickly +produce new units for various kind of situations. No documentation for this +unfinished project, but I thought I would mention it in the manual page in +case you wish to do it yourself and then contribute it... +.SH AUTHORS +Larry Wall <lwall@netlabs.com> for version 2.0. +.br +Harlan Stenn <harlan@mumps.pfcs.com> for important unit extensions. +.br +Raphael Manfredi <ram@hptnos02.grenoble.hp.com>. +.br +Many other contributors for the +\fImetaconfig\fR units. See the credit file for a list. +.SH FILES +.TP 10 +.PD 0 +LIB/dist/mcon/U/*.U +Public unit files +.TP +U/*.U +Private unit files +.TP +LIB/dist/mcon/Glossary +Glossary file, describing all the metaconfig symbols. +.TP +Obsolete +Lists all the obsolete symbols used by the sources. +.TP +Wanted +Lists all the wanted symbols. +.PD +.sp +.in +5 +where LIB is $privlibexp. +.in -5 +.SH BUGS +Units are sometimes included unnecessarily if one of its symbols is +accidentally mentioned, e.g. in a comment. +Better too many units than too few, however. +.SH "SEE ALSO" +pat($manext), makeSH($manext), makedist($manext), metalint($manext) +!GROK!THIS! +chmod 444 metaconfig.$manext diff --git a/mcon/man/mlint.SH b/mcon/man/mlint.SH new file mode 100755 index 0000000..65259d7 --- /dev/null +++ b/mcon/man/mlint.SH @@ -0,0 +1,559 @@ +case $CONFIG in +'') + if test -f config.sh; then TOP=.; + elif test -f ../config.sh; then TOP=..; + elif test -f ../../config.sh; then TOP=../..; + elif test -f ../../../config.sh; then TOP=../../..; + elif test -f ../../../../config.sh; then TOP=../../../..; + else + echo "Can't find config.sh."; exit 1 + fi + . $TOP/config.sh + ;; +esac +case "$0" in +*/*) cd `expr X$0 : 'X\(.*\)/'` ;; +esac +echo "Extracting mcon/man/metalint.$manext (with variable substitutions)" +$rm -f metalint.$manext +$spitshell >metalint.$manext <<!GROK!THIS! +.TH METALINT $manext "Version $VERSION PL$PATCHLEVEL" +''' @(#) Manual page for metalint +''' +''' $Id$ +''' +''' Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +''' +''' You may redistribute only under the terms of the Artistic Licence, +''' as specified in the README file that comes with the distribution. +''' You may reuse parts of this distribution only within the terms of +''' that same Artistic Licence; a copy of which may be found at the root +''' of the source tree for dist 4.0. +''' +''' $Log: mlint.SH,v $ +''' Revision 3.0.1.9 1997/02/28 16:30:25 ram +''' patch61: new "create" and "empty" lint directives +''' patch61: documented new messages +''' +''' Revision 3.0.1.8 1995/09/25 09:18:07 ram +''' patch59: documented new ?Y: directive +''' patch59: fixed my e-mail address +''' +''' Revision 3.0.1.7 1995/07/25 14:18:51 ram +''' patch56: added two new warnings for : comments lines in Configure +''' +''' Revision 3.0.1.6 1994/10/29 16:33:56 ram +''' patch36: documents new ?F: lines and the related metalint warnings +''' patch36: removed statement in BUGS since all warnings may now be shut +''' +''' Revision 3.0.1.5 1994/05/06 15:20:30 ram +''' patch23: added -L switch to override public unit repository path +''' patch23: two new warnings concerning last unit lines +''' +''' Revision 3.0.1.4 1994/01/24 14:20:39 ram +''' patch16: can now easily suppress warning about made "special units" +''' +''' Revision 3.0.1.3 1993/11/10 17:37:39 ram +''' patch14: documents stale ?M: dependency check +''' +''' Revision 3.0.1.2 1993/10/16 13:52:23 ram +''' patch12: added support for ?M: lines and fixed some typos +''' +''' Revision 3.0.1.1 1993/08/19 06:42:24 ram +''' patch1: leading config.sh searching was not aborting properly +''' +''' Revision 3.0 1993/08/18 12:10:15 ram +''' Baseline for dist 3.0 netwide release. +''' +''' +.SH NAME +metalint \- a metaconfig unit consistency checker +.SH SYNOPSIS +.B metalint +[ \-\fBhklsV\fR ] +[ \-\fBL \fIdir\fR ] +.SH DESCRIPTION +.I Metalint +parses the units and performs some extensive consistency checks, to make sure +the whole set is sound. Due to the relatively huge amount of units available, +it is becoming very difficult to maintain the units manually, and an automated +process can be of real help, although not perfect. +.PP +.I Metalint +operates from within your top level package directory and is used to make sure +your own private units are correctly relying on the publicly available units. +If you intensively develop new units, you should run \fImetalint\fR on them +before making them publicly available. +.SH OPTIONS +.I Metalint +recognizes the following set of options: +.TP 15 +.B \-h +Print a short usage description and exit. +.TP +.B \-k +Keep temporary \fI.MT\fR directory. +.TP +.B \-l +(not implemented yet) By default, \fImetalint\fR only reports problems related +to your own private units. This switch directs \fImetalint\fR to also report +problems in publicly available units. +.TP +.B \-s +Silent mode. +.TP +\fB\-L\fI dir\fR +Override default library location. Normally only useful for metaconfig +maintainers to locally check the units being developped instead of the +publicly available ones. The \fIdir\fR specified is the one containing the +units \fIU\fR directory. +.TP +.B \-V +Print version number and exit. +.SH DIAGNOSTICS +The following diagnostics may be emitted by \fImetalint\fR: +.TP 5 +"(?MAKE) ignoring duplicate dependency listing line." +More than one ?MAKE: line bearing dependencies was found in the unit. There +may be only one such line, although multiple ?MAKE action lines may occur. +.TP +"(?MAKE) special unit 'Xxx' should not be listed as made." +A special unit symbol (first letter capitalized) may only be listed as made +in the special unit itself. To suppress this warning in legitimate cases, +add a '+' in front of the offending symbol (note that for non-special units, +the '+' in this position indicates an internal symbol which should not appear +in the config.sh file). +.TP +"(?MAKE) '+xxx' is listed x times." +A conditional dependency is listed more than once. This is harmless though. +.TP +"(?MAKE) 'xxx' is listed x times." +A normal depdendency is listed more than once. Again, an harmless error. +.TP +"(?MAKE) 'xxx' listed as both conditional and full dependency." +Symbol is listed as a normal dependency and as a conditional one. +.I Metaconfig +will consider this as being a full dependency, but that may not be what you +initially wanted... +.TP +"(?Y) unknown layout directive 'xxx'." +Layout directives may only be one of \fItop\fR, \fIdefault\fR or \fIbottom\fR, +but case does not matter. An unknown directive is just ignored and +handled as if \fIdefault\fR had been specified. +.TP +"(?S) duplicate description for variable '\$xxx'." +Shell symbol is described more than once, and that will produce two entries +in the Glossary. +.TP +"(?S) variable '\$xxx' is not listed on ?MAKE: line." +The unit describes a shell symbol entry which cannot be used externally since +not listed as a dependency. +.TP +"(?S) syntax error in ?S: construct." +Self explainatory. +.TP +"(?C) duplicate description for symbol 'XXX'." +C symbol is described more than once, and that will produce two entries for +it in the Glossary. +.TP +"(?C) syntax error in ?C: construct." +Self explainatory. +.TP +"(?H) symbol 'XXX' was already defined." +Apparently, two ?H: lines are defining the same C symbol. +.TP +"(?H) variable '\$xxx' not even listed on ?MAKE: line." +A variable is used, but not listed on the dependency line. +.TP +"(?H) section was already terminated by '?H:.'." +There can be no more ?H: lines after the first '?H:.' marking the end +of that section. +.TP +"(?H) uncommon cpp line should be protected with '?%<:'." +All ?H: lines that are recognized by +.I metaconfig +and thus +.I metalint +have their inclusion in config.h automatically protected by a suitable +symbol if none is provided. However, unrecognized lines must be protected +with the '?%<:' sequence to avoid their inclusion should the unit not be +loaded in Configure. +.TP +"(?H) line should not be listed here but in '?C:'." +Only cpp lines should appear in the ?H: section. If you have a comment +to put regarding the symbol, use ?C:. If you want to comment a particular +generation sequence, put them into ?X: comment so that they don't make it +into config.h. +.TP +"(?H) constraint 'xxx' is an unknown symbol." +All the leading ?sym: constraints on the ?H: lines should be a valid +shell or C symbol, defined in the unit. +.TP +"(?M) syntax error in ?M: construct." +Self explainatory. +.TP +"(?M) symbol 'xxx' already listed on a ?M: line in 'yyy'." +A magic definition for symbol xxx is attempted, but another one was +already provided in unit yyy. +.TP +"(?V) visible declaration in non-special unit ignored." +Visible declarations (?V: lines) may only appear in special units. Otherwise, +they are meaningless. +.TP +"(?V) wanted variable '\$xxx' made visible." +A wanted variable (described as a dependency on the ?MAKE: line) cannot be +made visible since that does not make any sense: the unit cannot depend on +it and then advertise it as being locally defined. +.TP +"(?V) defined variable '\$xxx' made visible." +A defined variable (listed as made on the ?MAKE: line) cannot be made +visible, since it could as well be directly wanted in another unit. +.TP +"(?V) variable '\$xxx' already made visible by unit yyy." +Inconsistent declaration: two units are making one single symbol visible... +.TP +"(?V) variable '\$xxx' already read-write visible in yyy." +The variable was already made visible as read-write by another unit. +.TP +"(?V) variable '\$xxx' already read-only visible in yyy." +The variable was already made visible as read-only by another unit. +.TP +"(?W) variable '\$xxx' already wanted." +Variable is already wanted, there is no need to explicitely ask for it here. +.TP +"(?W) variable '\$xxx' also locally defined." +A wanted variable would conflict with a locally defined variable and could +result in getting a garbage value. +.TP +"(?W) variable '\$xxx' already listed on a ?W: line in 'yyy'." +The variable in the shell symbol section of a ?W: line can only appear in +one unit. +.TP +"(?F) produced file 'xxx' mutiply declared." +The file is listed more than once on the ?F: line, under the same name. +This does not appear when declaring both a private UU file and a public +file with the same name, for instance. +.TP +"(?F) UU file $uufile in non-special unit ignored." +Private UU files (i.e. files like the \fImyread\fR script created for +later perusal by \fIConfigure\fR) may only be created in special units. +Exceptions allowed if the ?F: line is preceded by a proper ?LINT: hint. +.TP +"(?T) temporary symbol '\$xxx' multiply declared." +Self explainatory. +.TP +"directive should come after ?MAKE declarations." +The directive listed between () at the beginning of this message should +really come after the ?MAKE: lines. You must reorder the unit or +.I metalint +will not be able to properly diagnose problems. +.TP +"control sequence '?XXX:' ignored within body." +Attempt to use a control line other than ?X: or ?LINT: in the unit body, +which should be only shell code +.TP +"variable '\$xxx' is changed." +A variable listed as wanted in the dependency line is changed. Such a variable +should be read-only for the unit. Use the \fIchange\fR lint hint to suppress +this message in pathological cases. +.TP +"no ?MAKE: line describing dependencies." +Every unit should have a dependency line, or it will be silently ignored by +\fImetaconfig\fR. This message is suppressed by a ?LINT: empty hint. +.TP +"first body line should be a general ': description'." +The very first shell line of the unit that will be added to the generated +Configure script should hold a description of the unit's purpose, on a ':' +line. There must be a space after the ':', since it is interpreted by the +shell, and the description should avoid meta-characters like '(' or '>' unless +the whole string is quoted. This message is suppressed by a ?LINT: nocomment +hint. +.TP +"missing space after ':' to make it a comment." +A line starting by ':' is interpreted by the shell but will be ignored. There +must be a space after the ':' though, or the shell will try to execute an +unknown command... +.TP +"found unquoted meta-character > on comment line." +A line starting by ':' is interpreted by the shell but will be ignored. +This means that meaningful meta-characters such as '(' or '>' must be +quoted or escaped with a leading backslash. +.TP +"found dangling quote on ':' comment line." +An unclosed single or double quote was spotted on a ':' comment line. +Since those lines are interpreted by the shell, albeit ignored, all quotes +must match perfectly. +.TP +"not ending with a blank line." +Since all units are gathered together to form one big script, it is recommended +(hence enforced by \fImetalint\fR) that every unit file end with an empty line. +.TP +"last line not ending with a new-line character." +This is merely intended to users whose editor does not always append a +new-line at the end of text files. Should not happen when you use \fIvi\fR. +.TP +"symbol '\$xxx' was not described." +The shell symbol defined by this unit was not documented. Use the \fIdescribe\fR +lint hint to suppress this message. +.TP +"C symbol 'XXX' was not described." +The C symbol defined by this unit was not documented. Use the \fIknown\fR lint +hint to suppress this message. +.TP +"C symbol 'XXX' was not defined by any ?H: line." +A C symbol was advertised by never defined, hence it cannot appear in the +\fIconfig.h\fR file and is therefore useless... +.TP +"variable '\$xxx' should have been set." +A variable listed on the make line as made by the unit was not set by the +shell code body. Use the \fIset\fR lint hint to suppress this message in +pathological cases. +.TP +"unused dependency variable '\$xxx'." +Apparently no usage is made from a shell variable. Use the \fIchange\fR or +\fIuse\fR lint hints (depending on the situation) to suppress this message. +.TP +"unused conditional variable '\$xxx'. +Apparently no usage is made from this conditional dependency. The \fIchange\fR +or \fIuse\fR lint hints can be used to suppress this message. +.TP +"unused temporary variable '\$xxx'." +A variable declared as temporary in a ?T: line is not used. The \fIuse\fR lint +hint will fool \fImetalint\fR into thinking it's indeed used. +.TP +"unknown control sequence '?XXX:'." +Attempt to use an unknown control sequence. +.TP +"unknown LINT request '$xxx' ignored." +An unknown ?LINT: tag was used. All such tags must be spelled out in lowercase. +.TP +"symbol '\$xxx' has no default value." +A symbol used as a conditional dependency in some unit has no default value +set by a ?D: line. +.TP +"stale ?MAKE: dependency 'xxx'." +Unit lists a symbol as a dependency, but that symbol is otherwise unknown, i.e. +never appears as made by any other unit. +.TP +"symbol '\$xxx' missing from ?MAKE." +A symbol used or defined was not listed as a dependency in the ?MAKE: line. +.TP +"missing xxx from ?MAKE for visible '\$yyy'." +A symbol defined as visible by a special unit is used, but that special unit +is not part of the dependency line. +.TP +"stale ?M: dependency 'xxx'." +Magic line lists a C symbol as a dependency but that symbol is not known +by any unit. +.TP +"unknown symbol '\$xxx'." +I have no idea about what this symbol is. If the variable is externally +define, this warning can be suppresed via a proper ?LINT: extern. +.TP +"read-only symbol '\$xxx' is set." +A symbol that should be read-only is set by the unit's shell code body. +.TP +"obsolete symbol 'xxx' is used." +An obsolete symbol is used in the unit's shell code. +.TP +"undeclared symbol '\$xxx' is set." +The unit tries to set a shell variable which has not been otherwise declared +as made or as a temporary variable, or whatever. +.TP +"unclosed ?H: section." +The ?H: section was not terminated by a single '?H:.' line before +the body of the unit or the start of another ?C: section. +.TP +"C symbol 'xxx' is defined in the following units:" +The C symbol is defined in more that one unit. Offending units are listed. +.TP +"Shell symbol 'xxx' is defined in the following units:" +A shell symbol is defined in more than one unit. Offending units folllow. +.TP +"Shell symbol 'xxx' is altogether:" +A shell symbol is defined by some units, obsoleted by others and used as +a temporary. +.TP +"Shell symbol 'xxx' is both defined and obsoleted:" +Self explainatory. +.TP +"Shell symbol 'xxx' is both defined and used as temporary:" +Self explainatory. +.TP +"Shell symbol 'xxx' obsoleted also used as temporary:" +Self explainatory. +.TP +"definition of '\$xxx' not closed by '?S:.'." +Self explainatory. +.TP +"definition of 'XXX' not closed by '?C:.'." +Self explainatory. +.TP +"magic definition of 'xxx' not closed by '?M:.'." +Self explainatory. +.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 explicitely anyway so this +message cannot be suppressed via a lint hint. +.TP +"local file 'xxx' may override the one set by 'unit.U'." +You are attempting to create a local file, but the special unit creates one +bearing the exact same name and should it be loaded before +within \fIConfigure\fR, you would override that file. Change the name of your +local file. +.TP +"unused temporary file 'xxx'. +The file was declared on the ?F: line but does not appear to be used +anywhere. +.TP +"mis-used temporary file 'xxx'. +A local temporary file has been declared on the ?F: line and is used in +a way that may not be the proper one. Indeed, all such local files should +be called with an explicit relative path, to avoid PATH lookups which could +get you another file. +.TP +"you might not always get file 'xxx' from 'unit.U'." +You seem to be calling the specified file, but not by using an explicit +relative pathname. Relying on the PATH to find this file is not safe. +To fix this problem, call your file using somthing like \fI./xxx\fR. +.TP +"missing Unit from ?MAKE for private file 'xxx'." +You are using a private UU file without listing the special unit that +produces it in your dependency line. Add the unit to your dependency list. +.TP +"unknown private file 'xxx'." +The file does not appear on any ?F: line; however it should. +.TP +"File 'xxx' is defined in the following units:" +The listed units cannot seem to agree on who is defining the file. +.TP +"empty here-document name discouraged." +You should refrain from using empty names for here documents, as +.I metalint +will not monitor those. +.TP +"unclosed here-document xxx started line x." +The opened here-document at line x was never closed in this unit. +This generally mean that when the unit is used, the generated script will +not work! +.TP +"spurious 'LINT xxx' directive." +You have inserted a ?LINT: directive that is not used to shut-up warnings. +.TP +"Cycle found for:" +There is a dependency cycle found for the symbols listed. Only the symbols +involved in the cycle are listed. +.TP +"Cycle involves:" +An exerpt of the dependencies where the cycle was found is listed. This may +involve far more symbols than the previous message, because \fImetalint\fR +actually rescans the rules to emphasize the cycle and stops whenever it has +found one, i.e. it does not try to minimize it (the cycle is found using +another algorithm, which unfortunately cannot spit it out but only say +for sure there is one). +.SH REFERENCE +.I Metalint +uses the following control lines, which are otherwise ignored by +\fImetaconfig\fR: +.TP 5 +?V:\fIread-only symbols\fR:\fIread-write symbols\fR +This line should be used only in special units. It lists all the shell +variable defined by the unit which should not be used directly as dependencies +by other units: they must include this special unit in their dependency list +if they make use of any of the symbols described here. Those can be viewed +as exported symbols which you inherit from when depending from the unit. +Symbols may be exported read-only or read-write. +.TP +?F:\fIfiles created\fR +This line serves two purposes: it is a \fImetalint\fR hint, and also +a placeholder for future \fIjmake\fR use. It must list three kind of files: +the temporary one which are created for a test, the private UU ones created +in the UU directory for later perusal, and the public ones left in the +root directory of the package. Temporary files must be listed with a +preceding '!' character (meaning "no! they're not re-used later!"), private +UU files should be preceded by a './' (meaning: to use them, say \fI./file\fR, +not just \fIfile\fR), and public ones should be named as-is. +.TP +?T:\fIshell temporaries\fR +This line should list all the shell variables used as temporaries within +the unit's body. This line should be kept accurate, and prevents you from +writing a unit defining a symbol which would be used as a scratch variable +in another unit... +.TP +?LINT:\fIkeyword\fR \fIsymbol_list\fR +Specifies a lint hint. The following keywords are available: +.RS +10 +.TP 15 +.PD 0 +.I change +shell variable ok to be changed +.TP +.I create +persistent file ok to be created by non-special unit +.TP +.I define +shell variables listed are defined in this unit +.TP +.I describe +listed shell variables are described by ?S: +.TP +.I extern +variable known to be externally defined +.TP +.I empty +unit file is empty and kept only as a placeholder. +.TP +.I known +listed C variables are described +.TP +.I nocomment +unit file is special and may miss a leading ': description' line. +.TP +.I nothere +listed names are not here documents (e.g. "1 << foo" in a C program) +.TP +.I set +listed variables are set +.TP +.I use +variables listed are used by this unit +.TP +.I unclosed +listed names of here-documents are not closed in this unit +.TP +.I usefile +listed file is used (do not prepend name with '!' for temporary ones) +.PD +.RS -10 +.SH AUTHORS +Harlan Stenn <harlan@mumps.pfcs.com> wrote the first version, based on +Larry Wall's \fImetaconfig\fR from dist 2.0. +.br +Raphael Manfredi <ram@hptnos02.grenoble.hp.com> rewrote it from scratch for +3.0 with a few enhancements. +.SH FILES +.TP 10 +.PD 0 +LIB/dist/mcon/U/*.U +Public unit files +.TP +U/*.U +Private unit files +.PD +.sp +.in +5 +where LIB is $privlibexp. +.in -5 +.SH BUGS +Maybe. +.SH "SEE ALSO" +metaconfig($manext), metaxref($manext) +!GROK!THIS! +chmod 444 metalint.$manext diff --git a/mcon/man/mxref.SH b/mcon/man/mxref.SH new file mode 100755 index 0000000..b0dbbad --- /dev/null +++ b/mcon/man/mxref.SH @@ -0,0 +1,133 @@ +case $CONFIG in +'') + if test -f config.sh; then TOP=.; + elif test -f ../config.sh; then TOP=..; + elif test -f ../../config.sh; then TOP=../..; + elif test -f ../../../config.sh; then TOP=../../..; + elif test -f ../../../../config.sh; then TOP=../../../..; + else + echo "Can't find config.sh."; exit 1 + fi + . $TOP/config.sh + ;; +esac +case "$0" in +*/*) cd `expr X$0 : 'X\(.*\)/'` ;; +esac +echo "Extracting mcon/man/metaxref.$manext (with variable substitutions)" +$rm -f metaxref.$manext +$spitshell >metaxref.$manext <<!GROK!THIS! +.TH METAXREF $manext "Version $VERSION PL$PATCHLEVEL" +''' @(#) Manual page for metaxref +''' +''' $Id$ +''' +''' Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +''' +''' You may redistribute only under the terms of the Artistic Licence, +''' as specified in the README file that comes with the distribution. +''' You may reuse parts of this distribution only within the terms of +''' that same Artistic Licence; a copy of which may be found at the root +''' of the source tree for dist 4.0. +''' +''' $Log: mxref.SH,v $ +''' Revision 3.0.1.4 1997/02/28 16:30:39 ram +''' patch61: new -L option to match metaconfig and metalint +''' +''' Revision 3.0.1.3 1994/10/29 16:34:26 ram +''' patch36: the leading .TH was referring to metaconfig +''' +''' Revision 3.0.1.2 1993/10/16 13:52:46 ram +''' patch12: added BUGS section +''' +''' Revision 3.0.1.1 1993/08/19 06:42:25 ram +''' patch1: leading config.sh searching was not aborting properly +''' +''' Revision 3.0 1993/08/18 12:10:15 ram +''' Baseline for dist 3.0 netwide release. +''' +''' +.SH NAME +metaxref \- builds cross-reference file/unit/item information +.SH SYNOPSIS +.B metaxref +[ \-\fBdhkmsV\fR ] [ \fB\-f\fI manifest\fR ] +[ \-\fBL \fIdir\fR ] +.SH DESCRIPTION +.I Metaxref +is a program that scans all the files in your MANIFEST file and produces +three files which contains information about how the files in that MANIFEST +reference items defined by metaconfig's unit files. +.PP +The first two files, +.I I.fui +and +.I I.uif +reference the \fIfile\fR, \fIunit\fR and \fIitems\fR sorted differently. The +third file, \fIObsolete\fR, dumps all the known obsolete symbols, in which +file they appear and the new symbol that should be used instead. +.PP +Note that obsolete symbols do not appear in the main cross-reference files, +but are only listed in the \fIObsolete\fR file. That's yet another incentive +to use the new symbols in your sources. :-) +.SH OPTIONS +.I Metaxref +recognizes the following options: +.TP 10 +.B \-d +Turn on debug mode. +.TP +.B \-f\fI manifest\fR +Use an alternate \fImanifest\fR file. +.TP +.B \-h +Print help message and exit. +.TP +.B \-k +Keep temporary \fI.MT\fR directory. +.TP +.B \-m +Assume lots of memory and swap space. This will drastically improve the +symbol lookup time in your source files, at the expense of memory usage. +.TP +.B \-s +Turn on silent mode. +.TP +.B \-L\fI dir\fR +Override default library location (where the \fIU\fR units directory +can be found). +.TP +.B \-V +Print version number and exit. +.SH AUTHOR +Harlan Stenn <harlan@mumps.pfcs.com> +.SH FILES +.TP 10 +.PD 0 +LIB/dist/mcon/U/*.U +Public unit files. +.TP +U/*.U +Private unit files +.TP +I.fui +Lists information sorted by file, unit and item. +.TP +I.uif +Lists information sorted by unit, item and file. +.TP +Obsolete +Lists all the obsolete symbols used by the sources. +.PD +.sp +.in +5 +where LIB is $privlibexp. +.in -5 +.SH BUGS +Metaxref will list among the wanted items all those magic symbols defined +within units on the ?M: lines. Those are relevant only when metaconfig is +invoked with the \fB\-M\fR option. +.SH "SEE ALSO" +metaconfig($manext), metalint($manext) +!GROK!THIS! +chmod 444 metaxref.$manext diff --git a/mcon/mconfig.SH b/mcon/mconfig.SH new file mode 100755 index 0000000..8fb6095 --- /dev/null +++ b/mcon/mconfig.SH @@ -0,0 +1,182 @@ +case $CONFIG in +'') + if test -f config.sh; then TOP=.; + elif test -f ../config.sh; then TOP=..; + elif test -f ../../config.sh; then TOP=../..; + elif test -f ../../../config.sh; then TOP=../../..; + elif test -f ../../../../config.sh; then TOP=../../../..; + else + echo "Can't find config.sh."; exit 1 + fi + . $TOP/config.sh + ;; +esac +case "$0" in +*/*) cd `expr X$0 : 'X\(.*\)/'` ;; +esac +echo "Extracting mcon/mconfig (with variable substitutions)" +cat >mconfig <<!GROK!THIS! +$startperl + eval "exec perl -S \$0 \$*" + if \$running_under_some_shell; + +# $Id$ +# +# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +# +# You may redistribute only under the terms of the Artistic Licence, +# as specified in the README file that comes with the distribution. +# You may reuse parts of this distribution only within the terms of +# that same Artistic Licence; a copy of which may be found at the root +# of the source tree for dist 4.0. +# +# Original Author: Larry Wall <lwall@netlabs.com> +# Key Contributor: Harlan Stenn <harlan@mumps.pfcs.com> +# +# $Log: mconfig.SH,v $ +# Revision 3.0.1.5 1995/07/25 14:19:05 ram +# patch56: new -G option +# +# Revision 3.0.1.4 1994/06/20 07:11:04 ram +# patch30: new -L option to override public library path for testing +# +# Revision 3.0.1.3 1994/01/24 14:20:53 ram +# patch16: added ~/.dist_profile awareness +# +# Revision 3.0.1.2 1993/10/16 13:53:10 ram +# patch12: new -M option for magic symbols and confmagic.h production +# +# Revision 3.0.1.1 1993/08/19 06:42:26 ram +# patch1: leading config.sh searching was not aborting properly +# +# Revision 3.0 1993/08/18 12:10:17 ram +# Baseline for dist 3.0 netwide release. +# + +# Perload ON + +\$MC = '$privlib'; +\$version = '$VERSION'; +\$patchlevel = '$PATCHLEVEL'; +\$grep = '$grep'; +!GROK!THIS! + +$spitshell >>mconfig <<'!NO!SUBS!' +chop($date = `date`); +&profile; # Read ~/.dist_profile +require 'getopts.pl'; +&usage unless &Getopts("dhkmostvwGMVL:"); + +$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 PL$patchlevel\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 +} + +# 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] + -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. +EOH + exit 1; +} + +!NO!SUBS! +$grep -v '^;#' pl/locate.pl >>mconfig +$grep -v '^;#' pl/common.pl >>mconfig +$grep -v '^;#' pl/depend.pl >>mconfig +$grep -v '^;#' pl/init.pl >>mconfig +$grep -v '^;#' pl/extract.pl >>mconfig +$grep -v '^;#' pl/files.pl >>mconfig +$grep -v '^;#' pl/wanted.pl >>mconfig +$grep -v '^;#' pl/obsolete.pl >>mconfig +$grep -v '^;#' pl/makefile.pl >>mconfig +$grep -v '^;#' pl/order.pl >>mconfig +$grep -v '^;#' pl/configure.pl >>mconfig +$grep -v '^;#' pl/cosmetic.pl >>mconfig +$grep -v '^;#' pl/eval.pl >>mconfig +$grep -v '^;#' ../pl/package.pl >>mconfig +$grep -v '^;#' ../pl/manifake.pl >>mconfig +$grep -v '^;#' ../pl/tilde.pl >>mconfig +$grep -v '^;#' ../pl/profile.pl >>mconfig +chmod +x mconfig +$eunicefix mconfig diff --git a/mcon/mlint.SH b/mcon/mlint.SH new file mode 100755 index 0000000..7f1f550 --- /dev/null +++ b/mcon/mlint.SH @@ -0,0 +1,136 @@ +case $CONFIG in +'') + if test -f config.sh; then TOP=.; + elif test -f ../config.sh; then TOP=..; + elif test -f ../../config.sh; then TOP=../..; + elif test -f ../../../config.sh; then TOP=../../..; + elif test -f ../../../../config.sh; then TOP=../../../..; + else + echo "Can't find config.sh."; exit 1 + fi + . $TOP/config.sh + ;; +esac +case "$0" in +*/*) cd `expr X$0 : 'X\(.*\)/'` ;; +esac +echo "Extracting mcon/mlint (with variable substitutions)" +cat >mlint <<!GROK!THIS! +$startperl + eval "exec perl -S \$0 \$*" + if \$running_under_some_shell; + +# $Id$ +# +# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +# +# You may redistribute only under the terms of the Artistic Licence, +# as specified in the README file that comes with the distribution. +# You may reuse parts of this distribution only within the terms of +# that same Artistic Licence; a copy of which may be found at the root +# of the source tree for dist 4.0. +# +# Original Author: Harlan Stenn <harlan@mumps.pfcs.com> +# +# $Log: mlint.SH,v $ +# Revision 3.0.1.3 1994/05/06 15:20:42 ram +# patch23: added -L switch to override public unit repository path +# +# Revision 3.0.1.2 1994/01/24 14:21:00 ram +# patch16: added ~/.dist_profile awareness +# +# Revision 3.0.1.1 1993/08/19 06:42:27 ram +# patch1: leading config.sh searching was not aborting properly +# +# Revision 3.0 1993/08/18 12:10:17 ram +# Baseline for dist 3.0 netwide release. +# + +# Perload ON + +\$MC = '$privlib'; +\$version = '$VERSION'; +\$patchlevel = '$PATCHLEVEL'; +\$grep = '$grep'; +!GROK!THIS! + +$spitshell >>mlint <<'!NO!SUBS!' +&profile; # Read ~/.dist_profile +require 'getopts.pl'; +&usage unless &Getopts("hklVL:"); + +if ($opt_V) { + print STDERR "metalint $version PL$patchlevel\n"; + exit 0; +} elsif ($opt_h) { + &usage; +} + +chop($date = `date`); +$MC = $opt_L if $opt_L; # May override library path +$MC = &tilda_expand($MC); # ~name expansion +chop($WD = `pwd`); # Working directory +chdir $MC || die "Can't chdir to $MC: $!\n"; +chop($MC = `pwd`); # Real metalint lib path (no symbolic links) +chdir $WD || die "Can't chdir back to $WD: $!\n"; + +&init; # Various initializations +`mkdir .MT 2>&1` unless -d '.MT'; # For private temporary files + +&locate_units; # Fill in @ARGV with a unit list +&extract_dependencies; # Extract dependencies from units +&sanity_checks; # Perform sanity checks + +if ($opt_k) { + print "Leaving subdirectory .MT unremoved so you can peruse it.\n" + unless $opt_s; +} else { + `rm -rf .MT 2>&1`; +} +print "Done.\n" unless $opt_s; + +# General initializations +sub init { + &init_except; # Token which have upper-cased letters + &init_depend; # The %Depend array records control line handling +} + +# Record the exceptions -- all symbols but these are lower case +sub init_except { + $Except{'Author'}++; + $Except{'Date'}++; + $Except{'Header'}++; + $Except{'Id'}++; + $Except{'Locker'}++; + $Except{'Log'}++; + $Except{'RCSfile'}++; + $Except{'Revision'}++; + $Except{'Source'}++; + $Except{'State'}++; +} + +# Print out metalint's usage and exits +sub usage { + print STDERR <<EOM; +Usage: metalint [-hklsV] [-L dir] + -h : print this help message and exits. + -k : keep temporary directory. + -l : also report problems from library units. + -s : silent mode. + -L : specify main units repository. + -V : print version number and exits. +EOM + exit 1; +} + +!NO!SUBS! +$grep -v '^;#' pl/locate.pl >>mlint +$grep -v '^;#' pl/lint.pl >>mlint +$grep -v '^;#' pl/init.pl >>mlint +$grep -v '^;#' pl/extract.pl >>mlint +$grep -v '^;#' pl/obsolete.pl >>mlint +$grep -v '^;#' pl/tsort.pl >>mlint +$grep -v '^;#' ../pl/tilde.pl >>mlint +$grep -v '^;#' ../pl/profile.pl >>mlint +chmod +x mlint +$eunicefix mlint diff --git a/mcon/mxref.SH b/mcon/mxref.SH new file mode 100755 index 0000000..06206ee --- /dev/null +++ b/mcon/mxref.SH @@ -0,0 +1,146 @@ +case $CONFIG in +'') + if test -f config.sh; then TOP=.; + elif test -f ../config.sh; then TOP=..; + elif test -f ../../config.sh; then TOP=../..; + elif test -f ../../../config.sh; then TOP=../../..; + elif test -f ../../../../config.sh; then TOP=../../../..; + else + echo "Can't find config.sh."; exit 1 + fi + . $TOP/config.sh + ;; +esac +case "$0" in +*/*) cd `expr X$0 : 'X\(.*\)/'` ;; +esac +echo "Extracting mcon/mxref (with variable substitutions)" +cat >mxref <<!GROK!THIS! +$startperl + eval "exec perl -S \$0 \$*" + if \$running_under_some_shell; + +# $Id$ +# +# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +# +# You may redistribute only under the terms of the Artistic Licence, +# as specified in the README file that comes with the distribution. +# You may reuse parts of this distribution only within the terms of +# that same Artistic Licence; a copy of which may be found at the root +# of the source tree for dist 4.0. +# +# Original Author: Harlan Stenn <harlan@mumps.pfcs.com> +# +# $Log: mxref.SH,v $ +# Revision 3.0.1.3 1997/02/28 16:30:49 ram +# patch61: new -L option to match metaconfig and metalint +# +# Revision 3.0.1.2 1994/01/24 14:21:04 ram +# patch16: added ~/.dist_profile awareness +# +# Revision 3.0.1.1 1993/08/19 06:42:27 ram +# patch1: leading config.sh searching was not aborting properly +# +# Revision 3.0 1993/08/18 12:10:18 ram +# Baseline for dist 3.0 netwide release. +# + +# Perload ON + +\$MC = '$privlib'; +\$version = '$VERSION'; +\$patchlevel = '$PATCHLEVEL'; +\$grep = '$grep'; +!GROK!THIS! + +$spitshell >>mxref <<'!NO!SUBS!' +&profile; # Read ~/.dist_profile +require 'getopts.pl'; +&usage unless &Getopts("df:hkmsVL:"); + +chop($date = `date`); +chop($WD = `pwd`); # Working directory +$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 PL$patchlevel\n"; + exit 0; +} elsif ($opt_h) { + &usage; +} + +$NEWMANI = $opt_f || 'MANIFEST.new'; + +&init; # Various initializations +`mkdir .MT 2>&1` unless -d '.MT'; # For private temporary files +unlink 'Obsolete'; # Obsolete file rebuilt + +&locate_units; # Fill in @ARGV with a unit list +&extract_dependencies; # Extract dependencies from units +&extract_filenames; # Get source files from MANIFEST.new +&build_xref; # Parse files, build I.* output + +if ($opt_k) { + print "Leaving subdirectory .MT unremoved so you can peruse it.\n" + unless $opt_s; +} else { + `rm -rf .MT 2>&1`; +} +print "Done.\n" unless $opt_s; + +# General initializations +sub init { + &init_except; # Token which have upper-cased letters + &init_depend; # The %Depend array records control line handling +} + +# Record the exceptions -- all symbols but these are lower case +sub init_except { + $Except{'Author'}++; + $Except{'Date'}++; + $Except{'Header'}++; + $Except{'Id'}++; + $Except{'Locker'}++; + $Except{'Log'}++; + $Except{'RCSfile'}++; + $Except{'Revision'}++; + $Except{'Source'}++; + $Except{'State'}++; +} + +# Print out metaxref's usage and exits +sub usage { + print STDERR <<EOM; +Usage: metaxref [-dhkmsV] [-f manifest] [-L dir] + -d : debug mode. + -f : use that file as manifest instead of MANIFEST.new. + -h : print this help message and exits. + -k : keep temporary directory. + -m : assume lots of memory and swap space. + -s : silent mode. + -L : specify main units repository. + -V : print version number and exits. +EOM + exit 1; +} + +!NO!SUBS! +$grep -v '^;#' pl/locate.pl >>mxref +$grep -v '^;#' pl/common.pl >>mxref +$grep -v '^;#' pl/xref.pl >>mxref +$grep -v '^;#' pl/files.pl >>mxref +$grep -v '^;#' pl/init.pl >>mxref +$grep -v '^;#' pl/extract.pl >>mxref +$grep -v '^;#' pl/obsolete.pl >>mxref +$grep -v '^;#' pl/xwant.pl >>mxref +$grep -v '^;#' pl/gensym.pl >>mxref +$grep -v '^;#' ../pl/manifake.pl >>mxref +$grep -v '^;#' ../pl/tilde.pl >>mxref +$grep -v '^;#' ../pl/profile.pl >>mxref +chmod +x mxref +$eunicefix mxref diff --git a/mcon/pl/common.pl b/mcon/pl/common.pl new file mode 100644 index 0000000..0d1ea5a --- /dev/null +++ b/mcon/pl/common.pl @@ -0,0 +1,289 @@ +;# $Id$ +;# +;# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +;# +;# You may redistribute only under the terms of the Artistic Licence, +;# as specified in the README file that comes with the distribution. +;# You may reuse parts of this distribution only within the terms of +;# that same Artistic Licence; a copy of which may be found at the root +;# of the source tree for dist 4.0. +;# +;# $Log: common.pl,v $ +;# Revision 3.0.1.4 1994/10/29 16:35:01 ram +;# patch36: metaconfig and metaxref ignore ?F: lines from now on +;# +;# Revision 3.0.1.3 1994/05/13 15:29:04 ram +;# patch27: now understands macro definitions in ?H: lines +;# +;# Revision 3.0.1.2 1994/01/24 14:22:54 ram +;# patch16: can now define "internal use only" variables on ?MAKE: lines +;# +;# Revision 3.0.1.1 1993/10/16 13:53:29 ram +;# patch12: added support for ?M: lines and confmagic.h production +;# +;# Revision 3.0 1993/08/18 12:10:19 ram +;# Baseline for dist 3.0 netwide release. +;# +;# The list of all available units is held in @ARGV. We shall parse them and +;# extract the dependencies. A lot of global data structures are filled in +;# during this phase. +;# +;# The following two H tables are used to record each know symbol (i.e. a +;# symbol known by at least one unit), and also how many times this symbol is +;# found in the sources. If an entry for a given key is positive, then the +;# associated symbol (i.e. the key) is wanted and it will be written in the +;# Wanted file. +;# %shmaster{'$sym'} records how many times '$sym' is found in a .SH file +;# %cmaster{'SYM'} records how many times 'SYM' is found in a .c file +;# %cwanted{'SYM'} records the set of necessary shell symbols needed for SYM +;# %mwanted{'sym'} is set of C symbols needed when sym is found in .c file +;# +;# This data structure records the initializations which are requires at the +;# beginning of a Configure script. The initialization only occurs when the +;# symbol is needed. Those symbols will appear in the produced config.sh file, +;# hence the name of "master" symbols. +;# @Master records shell configuration symbols which will appear in config.sh +;# +;# The @Cond array records the conditional shell symbols, i.e. those whose +;# value may be defaulted. They will appear in the initialization section of +;# the Configure script with the default value if they are not otherwise used +;# but Configure needs a suitable value internally. +;# @Cond records symbols which are flagged as conditional in the dependencies +;# %hasdefault{'sym'} is true when the conditional 'sym' has a default value +;# +;# The %Obsolete array records the obsolecence for units or symbols. The key +;# ends with .U for units, otherwise it is a symbol. Unit's obsolescence is +;# flagged with a ?O: line (the line being the message which will be issued +;# when the unit is used) while symbol obsolecence is indicated on the leading +;# ?C: or ?S: line, between parenthesis. In that case, the value stored is the +;# new symbol which should be used insted. +;# %Obsolete{'unit.U'} is a message to be printed when obsolete unit is used +;# %Obsolete{'sym'} is the symbol to be used in place of the obsoleted 'sym' +;# +;# The $dependencies variable is used to record the dependencies extracted +;# from the units (?MAKE: line). +;# +;# During the dependency extraction. some files are produced in the .MT dir. +;# Init.U records the initialization wanted +;# Config_h.U records the informations which could go in config.h.SH +;# Extern.U records the libraries and includes wanted by each symbol +;# +;# This file is shared by both metaconfig and metaxref +;# +# Initialize the extraction process by setting some variables. +# We return a string to be eval to do more customized initializations. +sub init_extraction { + open(INIT, ">$WD/.MT/Init.U") || + die "Can't create .MT/Init.U\n"; + open(CONF_H, ">$WD/.MT/Config_h.U") || + die "Can't create .MT/Config_h.U\n"; + open(EXTERN, ">$WD/.MT/Extern.U") || + die "Can't create .MT/Extern.U\n"; + open(MAGIC_H, ">$WD/.MT/Magic_h.U") || + die "Can't create .MT/Magic_h.U\n"; + + $c_symbol = ''; # Current symbol seen in ?C: lines + $s_symbol = ''; # Current symbol seen in ?S: lines + $m_symbol = ''; # Current symbol seen in ?M: lines + $heredoc = ''; # Last "here" document symbol seen + $heredoc_nosubst = 0; # True for <<'EOM' here docs + $condlist = ''; # List of conditional symbols + $defined = ''; # List of defined symbols in the unit + $body = ''; # No procedure to handle body + $ending = ''; # No procedure to clean-up +} + +# End the extraction process +sub end_extraction { + close EXTERN; # External dependencies (libraries, includes...) + close CONF_H; # C symbol definition template + close INIT; # Required initializations + close MAGIC; # Magic C symbol redefinition templates + + print $dependencies if $opt_v; # Print extracted dependencies +} + +# Process the ?MAKE: line +sub p_make { + local($_) = @_; + local(@ary); # Locally defined symbols + local(@dep); # Dependencies + if (/^[\w+ ]*:/) { # Main dependency rule + s|^\s*||; # Remove leading spaces + chop; + s/:(.*)//; + @dep = split(' ', $1); # Dependencies + @ary = split(' '); # Locally defined symbols + foreach $sym (@ary) { + # Symbols starting with a '+' are meant for internal use only. + next if $sym =~ s/^\+//; + # Only sumbols starting with a lowercase letter are to + # appear in config.sh, excepted the ones listed in Except. + if ($sym =~ /^[_a-z]/ || $Except{$sym}) { + $shmaster{"\$$sym"} = undef; + push(@Master,"?$unit:$sym=''\n"); # Initializations + } + } + $condlist = ''; # List of conditional symbols + local($sym); # Symbol copy, avoid @dep alteration + foreach $dep (@dep) { + if ($dep =~ /^\+[A-Za-z]/) { + ($sym = $dep) =~ s|^\+||; + $condlist .= "$sym "; + push(@Cond, $sym) unless $condseen{$sym}; + $condseen{$sym}++; # Conditionally wanted + } + } + # Append to already existing dependencies. The 'defined' variable + # is set for &write_out, used to implement ?L: and ?I: canvas. It is + # reset each time a new unit is parsed. + # NB: leading '+' for defined symbols (internal use only) have been + # removed at this point, but conditional dependencies still bear it. + $defined = join(' ', @ary); # Symbols defined by this unit + $dependencies .= $defined . ':' . join(' ', @dep) . "\n"; + $dependencies .= " -cond $condlist\n" if $condlist; + } else { + $dependencies .= $_; # Building rules + } +} + +# Process the ?O: line +sub p_obsolete { + local($_) = @_; + $Obsolete{"$unit.U"} .= $_; # Message(s) to print if unit is used +} + +# Process the ?S: lines +sub p_shell { + local($_) = @_; + unless ($s_symbol) { + if (/^(\w+).*:/) { + $s_symbol = $1; + print " ?S: $s_symbol\n" if $opt_d; + } else { + warn "\"$file\", line $.: syntax error in ?S: construct.\n"; + $s_symbol = $unit; + return; + } + # Deal with obsolete symbol list (enclosed between parenthesis) + &record_obsolete("\$$_") if /\(/; + } + m|^\.\s*$| && ($s_symbol = ''); # End of comment +} + +# Process the ?C: lines +sub p_c { + local($_) = @_; + unless ($c_symbol) { + if (s/^(\w+)\s*~\s*(\S+)\s*(.*):/$1 $3:/) { + # The ~ operator aliases the main C symbol to another symbol which + # is to be used instead for definition in config.h. That is to say, + # the line '?C:SYM ~ other:' would look for symbol 'other' instead, + # and the documentation for symbol SYM would only be included in + # config.h if 'other' were actually wanted. + $c_symbol = $2; # Alias for definition in config.h + print " ?C: $1 ~ $c_symbol\n" if $opt_d; + } elsif (/^(\w+).*:/) { + # Default behaviour. Include in config.h if symbol is needed. + $c_symbol = $1; + print " ?C: $c_symbol\n" if $opt_d; + } else { + warn "\"$file\", line $.: syntax error in ?C: construct.\n"; + $c_symbol = $unit; + return; + } + # Deal with obsolete symbol list (enclosed between parenthesis) and + # make sure that list do not appear in config.h.SH by removing it. + &record_obsolete("$_") if /\(/; + s/\s*\(.*\)//; # Get rid of obsolete symbol list + } + s|^(\w+)\s*|?$c_symbol:/* $1| || # Start of comment + (s|^\.\s*$|?$c_symbol: */\n| && ($c_symbol = '', 1)) || # End of comment + s|^(.*)|?$c_symbol: *$1|; # Middle of comment + &p_config("$_"); # Add comments to config.h.SH +} + +# Process the ?H: lines +sub p_config { + local($_) = @_; + local($constraint); # Constraint to be used for inclusion + ++$old_version if s/^\?%1://; # Old version + if (s/^\?(\w+)://) { # Remove leading '?var:' + $constraint = $1; # Constraint is leading '?var' + } else { + $constraint = ''; # No constraint + } + if (/^#.*\$/) { # Look only for cpp lines + if (m|^#\$(\w+)\s+(\w+).*\$(\w+)|) { + # Case: #$d_var VAR "$var" + $constraint = $2 unless $constraint; + print " ?H: ($constraint) #\$$1 $2 \"\$$3\"\n" if $opt_d; + $cmaster{$2} = undef; + $cwanted{$2} = "$1\n$3"; + } elsif (m|^#define\s+(\w+)\((.*)\)\s+\$(\w+)|) { + # Case: #define VAR(x) $var + $constraint = $1 unless $constraint; + print " ?H: ($constraint) #define $1($2) \$$3\n" if $opt_d; + $cmaster{$1} = undef; + $cwanted{$1} = $3; + } elsif (m|^#\$define\s+(\w+)|) { + # Case: #$define VAR + $constraint = $1 unless $constraint; + print " ?H: ($constraint) #define $1\n" if $opt_d; + $cmaster{$1} = undef; + $cwanted{$1} = "define\n$unit"; + } elsif (m|^#\$(\w+)\s+(\w+)|) { + # Case: #$d_var VAR + $constraint = $2 unless $constraint; + print " ?H: ($constraint) #\$$1 $2\n" if $opt_d; + $cmaster{$2} = undef; + $cwanted{$2} = $1; + } elsif (m|^#define\s+(\w+).*\$(\w+)|) { + # Case: #define VAR "$var" + $constraint = $1 unless $constraint; + print " ?H: ($constraint) #define $1 \"\$$2\"\n" if $opt_d; + $cmaster{$1} = undef; + $cwanted{$1} = $2; + } else { + $constraint = $unit unless $constraint; + print " ?H: ($constraint) $_" if $opt_d; + } + } else { + print " ?H: ($constraint) $_" if $opt_d; + } + # If not a single ?H:. line, add the leading constraint + s/^\.// || s/^/?$constraint:/; + print CONF_H; +} + +# Process the ?M: lines +sub p_magic { + local($_) = @_; + unless ($m_symbol) { + if (/^(\w+):\s*([\w\s]*)\n$/) { + # A '?M:sym:' line implies a '?W:%<:sym' since we'll need to know + # about the wantedness of sym later on when building confmagic.h. + # Buf is sym is wanted, then the C symbol dependencies have to + # be triggered. That is done by introducing sym in the mwanted + # array, known by the Wanted file construction process... + $m_symbol = $1; + print " ?M: $m_symbol\n" if $opt_d; + $mwanted{$m_symbol} = $2; # Record C dependencies + &p_wanted("$unit:$m_symbol"); # Build fake ?W: line + } else { + warn "\"$file\", line $.: syntax error in ?M: construct.\n"; + } + return; + } + (s/^\.\s*$/?$m_symbol:\n/ && ($m_symbol = '', 1)) || # End of block + s/^/?$m_symbol:/; + print MAGIC_H; # Definition goes to confmagic.h + print " ?M: $_" if $opt_d; +} + +sub p_ignore {} # Ignore comment line +sub p_lint {} # Ignore lint directives +sub p_visible {} # No visible checking in metaconfig +sub p_temp {} # No temporary variable control +sub p_file {} # Ignore produced file directives (for now) + diff --git a/mcon/pl/configure.pl b/mcon/pl/configure.pl new file mode 100644 index 0000000..f78925f --- /dev/null +++ b/mcon/pl/configure.pl @@ -0,0 +1,245 @@ +;# $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.\n" unless open(UNIT, $file); + print "\t$cmd $file\n" if $opt_v; + &init_interp; # Initializes the interpreter + + # The 'add' command adds the unit to Configure. + if ($cmd eq 'add') { + while (<UNIT>) { + print CONFIGURE unless &skipped || !&interpret($_); + } + } + + # The 'weed' command adds the unit to Configure, but + # makes some tests for the lines starting with '?' or '%'. + # These lines are kept only if the symbol is wanted. + elsif ($cmd eq 'weed') { + while (<UNIT>) { + if (/^\?(\w+):/) { + s/^\?\w+:// if $symwanted{$1}; + } + if (/^%(\w+):/) { + s/^%\w+:// if $condwanted{$1}; + } + print CONFIGURE unless &skipped || !&interpret($_); + } + } + + # The 'wipe' command adds the unit to Configure, but + # also substitues some hardwired macros. + elsif ($cmd eq 'wipe') { + while (<UNIT>) { + s/<PACKAGENAME>/$package/g; + s/<MAINTLOC>/$maintloc/g; + s/<VERSION>/$version/g; # This is metaconfig's version + s/<PATCHLEVEL>/$patchlevel/g; # And patchlevel information + s/<DATE>/$date/g; + s/<BASEREV>/$baserev/g; + s/<\$(\w+)>/eval("\$$1")/ge; # <$var> -> $var substitution + print CONFIGURE unless &skipped || !&interpret($_); + } + } + + # The 'add.Null' command adds empty initializations + # to Configure for all the shell variable used. + elsif ($cmd eq 'add.Null') { + for (sort @Master) { + if (/^\?(\w+):/) { + s/^\?\w+:// if $symwanted{$1}; + } + print CONFIGURE unless &skipped; + } + for (sort @Cond) { + print CONFIGURE "$_=''\n" + unless $symwanted{$_} || $hasdefault{$_}; + } + while (<UNIT>) { + print CONFIGURE unless &skipped || !&interpret($_); + } + print CONFIGURE "CONFIG=''\n\n"; + } + + # The 'add.Config_sh' command fills in the production of + # the config.sh script within Configure. Only the used + # variable are added, the conditional ones are skipped. + elsif ($cmd eq 'add.Config_sh') { + while (<UNIT>) { + print CONFIGURE unless &skipped || !&interpret($_); + } + for (sort @Master) { + if (/^\?(\w+):/) { + # Can't use $shmaster, because config.sh must + # also contain some internal defaults used by + # Configure (e.g. nm_opt, libc, etc...). + s/^\?\w+:// if $symwanted{$1}; + } + s/^(\w+)=''/$1='\$$1'/; + print CONFIGURE unless &skipped; + } + } + + # The 'close.Config_sh' command adds the final EOT line at + # the end of the here-document construct which produces the + # config.sh file within Configure. + elsif ($cmd eq 'close.Config_sh') { + print CONFIGURE "EOT\n\n"; # Ends up file + } + + # The 'c_h_weed' command produces the config_h.SH file. + # Only the necessary lines are kept. If no conditional line is + # ever printed, then the file is useless and will be removed. + elsif ($cmd eq 'c_h_weed') { + $printed = 0; + while (<UNIT>) { + if (/^\?(\w+):/) { + s/^\?\w+:// if $cmaster{$1} || $symwanted{$1}; + } + unless (&skipped || !&interpret($_)) { + if (/^$/) { + print CONF_H "\n" if $printed; + $printed = 0; + } else { + print CONF_H; + ++$printed; + } + } + } + } + + # The 'cm_h_weed' command produces the confmagic.h file. + # Only the necessary lines are kept. If no conditional line is + # ever printed, then the file is useless and will be removed. + elsif ($cmd eq 'cm_h_weed') { + if ($opt_M) { + $printed = 0; + while (<UNIT>) { + if (/^\?(\w+):/) { + s/^\?\w+:// if $cmaster{$1} || $symwanted{$1}; + } + unless (&skipped || !&interpret($_)) { + if (/^$/) { + print MAGIC_H "\n" if $printed; + $printed = 0; + } else { + print MAGIC_H; + ++$printed; + } + } + } + } + } + + # The 'prepend' command will add the content of the target to + # the current file (held in $file, the one which UNIT refers to), + # if the file is not empty. + elsif ($cmd eq 'prepend') { + if (-s $file) { + open(PREPEND, ">.prepend") || + die "Can't create .MT/.prepend.\n"; + open(TARGET, $Unit{$target}) || + die "Can't open $Unit{$target}.\n"; + while (<TARGET>) { + print PREPEND unless &skipped; + } + print PREPEND <UNIT>; # Now add original file contents + close PREPEND; + close TARGET; + rename('.prepend', $file) || + die "Can't rename .prepend into $file.\n"; + } + } + + # Command not found + else { + die "Unrecognized command from Makefile: $cmd\n"; + } + &check_state; # Make sure there are no pending statements + close UNIT; +} + +# Skip lines starting with ? or %, including all the following continuation +# lines, if any. Return 0 if the line was not to be skipped, 1 otherwise. +sub skipped { + return 0 unless /^\?|^%/; + &complete_line(UNIT) if /\\\s*$/; # Swallow continuation lines + 1; +} + diff --git a/mcon/pl/cosmetic.pl b/mcon/pl/cosmetic.pl new file mode 100644 index 0000000..bfb9575 --- /dev/null +++ b/mcon/pl/cosmetic.pl @@ -0,0 +1,114 @@ +;# $Id$ +;# +;# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +;# +;# You may redistribute only under the terms of the Artistic Licence, +;# as specified in the README file that comes with the distribution. +;# You may reuse parts of this distribution only within the terms of +;# that same Artistic Licence; a copy of which may be found at the root +;# of the source tree for dist 4.0. +;# +;# $Log: cosmetic.pl,v $ +;# Revision 3.0.1.3 1995/07/25 14:19:16 ram +;# patch56: added support for new -G option +;# +;# Revision 3.0.1.2 1995/01/30 14:47:52 ram +;# patch49: forgot to localize the spaces variable +;# +;# Revision 3.0.1.1 1993/11/10 17:39:10 ram +;# patch14: now also adds confmagic.h if not in MANIFEST.new already +;# patch14: new functions mani_add and mani_remove to factorize code +;# +;# Revision 3.0 1993/08/18 12:10:20 ram +;# Baseline for dist 3.0 netwide release. +;# +;# +# Update the MANIFEST.new file if necessary +sub cosmetic_update { + # Check for an "empty" config_h.SH (2 blank lines only). This test relies + # on the actual text held in Config_h.U. If the unit is modified, then the + # following might need adjustments. + local($blank_lines) = 0; + local($spaces) = 0; + open(CONF_H, 'config_h.SH') || die "Can't open config_h.SH\n"; + while(<CONF_H>) { + ++$blank_lines if /^$/; + } + unlink 'config_h.SH' unless $blank_lines > 3; + + open(NEWMANI,$NEWMANI); + $_ = <NEWMANI>; + /(\S+\s+)\S+/ && ($spaces = length($1)); # Spaces wanted + close NEWMANI; + $spaces = 29 if ($spaces < 12); # Default value + open(NEWMANI,$NEWMANI); + $/ = "\001"; # Swallow the whole file + $_ = <NEWMANI>; + $/ = "\n"; + close NEWMANI; + + $* = 1; # Multi-line matching + + &mani_add('Configure', 'Portability tool', $spaces) unless /^Configure\b/; + &mani_add('config_h.SH', 'Produces config.h', $spaces) + unless /^config_h\.SH\b/ || !-f 'config_h.SH'; + &mani_add('confmagic.h', 'Magic symbol remapping', $spaces) + if $opt_M && !/^confmagic\.h\b/; + + &mani_remove('config_h.SH') if /^config_h\.SH\b/ && !-f 'config_h.SH'; + &mani_remove('confmagic.h') if /^confmagic.h\b/ && !$opt_M; + + if ($opt_G) { # Want a GNU-like configure wrapper + &add_configure; + &mani_add('configure', 'GNU configure-like wrapper', $spaces) + if !/^configure\s/ && -f 'configure'; + } else { + &mani_remove('configure') if /^configure\s/ && !-f 'configure'; + } + + $* = 0; +} + +# Add file to MANIFEST.new, with properly indented comment +sub mani_add { + local($file, $comment, $spaces) = @_; + print "Adding $file to your $NEWMANI file...\n" unless $opt_s; + open(NEWMANI, ">>$NEWMANI") || warn "Can't add $file to $NEWMANI: $!\n"; + local($blank) = ' ' x ($spaces - length($file)); + print NEWMANI "${file}${blank}${comment}\n"; + close NEWMANI; +} + +# Remove file from MANIFEST.new +sub mani_remove { + local($file) = @_; + print "Removing $file from $NEWMANI...\n" unless $opt_s; + unless (open(NEWMANI, ">$NEWMANI.x")) { + warn "Can't create backup $NEWMANI copy: $!\n"; + return; + } + unless (open(OLDMANI, $NEWMANI)) { + warn "Can't open $NEWMANI: $!\n"; + return; + } + local($_); + while (<OLDMANI>) { + print NEWMANI unless /^$file\b/ + } + close OLDMANI; + close NEWMANI; + rename("$NEWMANI.x", $NEWMANI) || + warn "Couldn't restore $NEWMANI from $NEWMANI.x\n"; +} + +# Copy GNU-like configure wrapper to the package root directory +sub add_configure { + if (-f "$MC/configure") { + print "Copying GNU configure-like front end...\n" unless $opt_s; + system "cp $MC/configure ./configure"; + `chmod +x configure`; + } else { + warn "Can't locate $MC/configure: $!\n"; + } +} + diff --git a/mcon/pl/depend.pl b/mcon/pl/depend.pl new file mode 100644 index 0000000..fc88f1a --- /dev/null +++ b/mcon/pl/depend.pl @@ -0,0 +1,138 @@ +;# $Id$ +;# +;# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +;# +;# You may redistribute only under the terms of the Artistic Licence, +;# as specified in the README file that comes with the distribution. +;# You may reuse parts of this distribution only within the terms of +;# that same Artistic Licence; a copy of which may be found at the root +;# of the source tree for dist 4.0. +;# +;# $Log: depend.pl,v $ +;# Revision 3.0.1.3 1995/09/25 09:18:56 ram +;# patch59: new ?Y: directive to change unit layout +;# +;# Revision 3.0.1.2 1994/10/29 16:35:23 ram +;# patch36: added various escapes in strings for perl5 support +;# +;# Revision 3.0.1.1 1993/10/16 13:54:35 ram +;# patch12: added minimal support for ?P: lines (not ready yet) +;# +;# Revision 3.0 1993/08/18 12:10:21 ram +;# Baseline for dist 3.0 netwide release. +;# +;# Metaconfig-dependent part of the dependency extraction. +;# +# Process the ?W: lines +sub p_wanted { + # Syntax is ?W:<shell symbols>:<C symbols> + local($active) = $_[0] =~ /^([^:]*):/; # Symbols to activate + local($look_symbols) = $_[0] =~ /:(.*)/; # When those are used + local(@syms) = split(/ /, $look_symbols); # Keep original spacing info + $active =~ s/\s+/\n/g; # One symbol per line + + # Concatenate quoted strings, so saying something like 'two words' will + # be introduced as one single symbol "two words". + local(@symbols); # Concatenated symbols to look for + local($concat) = ''; # Concatenation buffer + foreach (@syms) { + if (s/^\'//) { + $concat = $_; + } elsif (s/\'$//) { + push(@symbols, $concat . ' ' . $_); + $concat = ''; + } else { + push(@symbols, $_) unless $concat; + $concat .= ' ' . $_ if $concat; + } + } + + # Now record symbols in master and wanted tables + foreach (@symbols) { + $cmaster{$_} = undef; # Asks for look-up in C files + $cwanted{$_} = "$active" if $active; # Shell symbols to activate + } +} + +# Process the ?INIT: lines +sub p_init { + local($_) = @_; + print INIT "?$unit:", $_; # Wanted only if unit is loaded +} + +# Process the ?D: lines +sub p_default { + local($_) = @_; + s/^([A-Za-z_]+)=(.*)/\@if !$1\n%$1:$1=$2\n\@define $1\n\@end/ + && ($hasdefault{$1}++, print INIT $_); +} + +# Process the ?P: lines +sub p_public { + local($_) = @_; + local($csym); # C symbol(s) we're trying to look at + local($nosym); # List of symbol(s) which mustn't be wanted + local($cfile); # Name of file implementing csym (no .ext) + ($csym, $nosym, $cfile) = /([^()]+)\s*(\(.*\))\s*:\s*(\S+)/; + unless ($csym eq '' || $cfile eq '') { + # Add dependencies for each C symbol, of the form: + # -pick public <sym> <file> <notdef symbols list> + # and the file will be added to config.c whenever sym is wanted and + # none of the notdef symbols is wanted. + foreach $sym (split(' ', $csym)) { + $dependencies .= "\t-pick public $sym $cfile $nosym\n"; + } + } +} + +# Process the ?Y: lines +# Valid layouts are for now are: top, bottom, default. +# +# NOTA BENE: +# This routine relies on the $defined variable, a global variable set +# during the ?MAKE: processing, which lists all the defined symbols in +# the unit (the optional leading '+' for internal symbols has been removed +# if present). +# +# The routine fills up a %Layout table, indexed by symbol, yielding the +# layout imposed to this unit. That table will then be used later on when +# we sort wanted symbols for the Makefile. +sub p_layout { + local($_) = @_; + local($layout) = /^\s*(\w+)/; + $layout =~ tr/A-Z/a-z/; # Case is not significant for layouts + unless (defined $Lcmp{$layout}) { + warn "\"$file\", line $.: unknown layout directive '$layout'.\n"; + return; + } + foreach $sym (split(' ', $defined)) { + $Layout{$sym} = $Lcmp{$layout}; + } +} + +# Process the ?L: lines +# There should not be any '-l' in front of the library name +sub p_library { + &write_out("L:$_"); +} + +# Process the ?I: lines +sub p_include { + &write_out("I:$_"); +} + +# Write out line in file Extern.U. The information recorded there has the +# following prototypical format: +# ?symbol:L:inet bsd +# If 'symbol' is wanted, then 'inet bsd' will be added to $libswanted. +sub write_out { + local($_) = @_; + local($target) = $defined; # By default, applies to defined symbols + $target = $1 if s/^(.*)://; # List is qualified "?L:target:symbols" + local(@target) = split(' ', $target); + chop; + foreach $key (@target) { + print EXTERN "?$key:$_\n"; # EXTERN file defined in xref.pl + } +} + diff --git a/mcon/pl/eval.pl b/mcon/pl/eval.pl new file mode 100644 index 0000000..c4c1d76 --- /dev/null +++ b/mcon/pl/eval.pl @@ -0,0 +1,300 @@ +;# $Id$ +;# +;# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +;# +;# You may redistribute only under the terms of the Artistic Licence, +;# as specified in the README file that comes with the distribution. +;# You may reuse parts of this distribution only within the terms of +;# that same Artistic Licence; a copy of which may be found at the root +;# of the source tree for dist 4.0. +;# +;# $Log: eval.pl,v $ +;# Revision 3.0.1.1 1995/01/30 14:48:37 ram +;# patch49: removed old "do name()" routine call constructs +;# +;# Revision 3.0 1993/08/18 12:10:22 ram +;# Baseline for dist 3.0 netwide release. +;# +;# +;# The built-in interpreter +;# +package interpreter; + +# States used by our interpeter -- in sync with @Keep +sub main'init_keep { + # Status in which we keep lines -- $Keep[$status] + @Keep = (0, 1, 1, 0, 1); + + # Available status ($status) + $SKIP = 0; + $IF = 1; + $ELSE = 2; + $NOT = 3; + $OUT = 4; +} + +# Priorities for operators -- magic numbers :-) +sub main'init_priority { + $Priority{'&&'} = 4; + $Priority{'||'} = 3; +} + +# Initializes the state stack of the interpreter +sub main'init_interp { + @state = (); + push(@state, $OUT); +} + +# Print error messages -- asssumes $unit and $. correctly set. +sub error { + warn "\"$main'file\", line $.: @_.\n"; +} + +# If some states are still in the stack, warn the user +sub main'check_state { + &error("one statement pending") if $#state == 1; + &error("$#state statements pending") if $#state > 1; +} + +# Add a value on the stack, modified by all the monadic operators. +# We use the locals @val and @mono from eval_expr. +sub push_val { + local($val) = shift(@_); + while ($#mono >= 0) { + # Cheat... the only monadic operator is '!'. + pop(@mono); + $val = !$val; + } + push(@val, $val); +} + +# Execute a stacked operation, leave result in stack. +# We use the locals @val and @op from eval_expr. +# If the value stack holds only one operand, do nothing. +sub execute { + return unless $#val > 0; + local($op) = pop(@op); + local($val1) = pop(@val); + local($val2) = pop(@val); + push(@val, eval("$val1 $op $val2") ? 1: 0); +} + +# Given an operator, either we add it in the stack @op, because its +# priority is lower than the one on top of the stack, or we first execute +# the stacked operations until we reach the end of stack or an operand +# whose priority is lower than ours. +# We use the locals @val and @op from eval_expr. +sub update_stack { + local($op) = shift(@_); # Operator + if (!$Priority{$op}) { + &error("illegal operator $op"); + return; + } else { + if ($#val < 0) { + &error("missing first operand for '$op' (diadic operator)"); + return; + } + # Because of the special behaviour of do-SUBR with the while modifier, + # I'm using a while-BLOCK construct. I consider this to be a bug of perl + # 4.0 PL19, although it is clearly documented in the man page. + while ( + $Priority{$op[$#op]} > $Priority{$op} # Higher priority op + && $#val > 0 # At least 2 values + ) { + &execute; # Execute an higher priority stacked operation + } + push(@op, $op); # Everything at higher priority has been executed + } +} + +# This is the heart of our little interpreter. Here, we evaluate +# a logical expression and return its value. +sub eval_expr { + local(*expr) = shift(@_); # Expression to parse + local(@val) = (); # Stack of values + local(@op) = (); # Stack of diadic operators + local(@mono) =(); # Stack of monadic operators + local($tmp); + $_ = $expr; + while (1) { + s/^\s+//; # Remove spaces between words + # The '(' construct + if (s/^\(//) { + &push_val(&eval_expr(*_)); + # A final '\' indicates an end of line + &error("missing final parenthesis") if !s/^\\//; + } + # Found a ')' or end of line + elsif (/^\)/ || /^$/) { + s/^\)/\\/; # Signals: left parenthesis found + $expr = $_; # Remove interpreted stuff + &execute() while $#val > 0; # Executed stacked operations + while ($#op >= 0) { + $_ = pop(@op); + &error("missing second operand for '$_' (diadic operator)"); + } + return $val[0]; + } + # A perl statement '{{' + elsif (s/^\{\{//) { + if (s/^(.*)\}\}//) { + &push_val((system + ('perl','-e', "if ($1) {exit 0;} else {exit 1;}" + ))? 0 : 1); + } else { + &error("incomplete perl statement"); + } + } + # A shell statement '{' + elsif (s/^\{//) { + if (s/^(.*)\}//) { + &push_val((system + ("if $1 >/dev/null 2>&1; then exit 0; else exit 1; fi" + ))? 0 : 1); + } else { + &error("incomplete shell statement"); + } + } + # Operator '||' and '&&' + elsif (s/^(\|\||&&)//) { + $tmp = $1; # Save for perl5 (Dataloaded update_stack) + &update_stack($tmp); + } + # Unary operator '!' + elsif (s/^!//) { + push(@mono,'!'); + } + # Everything else is a test for a defined value + elsif (s/^([\?%]?\w+)//) { + $tmp = $1; + # Test for wanted + if ($tmp =~ s/^\?//) { + &push_val(($main'symwanted{$tmp})? 1 : 0); + } + # Test for conditionally wanted + elsif ($tmp =~ s/^%//) { + &push_val(($main'condwanted{$tmp})? 1 : 0); + } + # Default: test for definition (see op @define) + else { + &push_val(( + $main'symwanted{$tmp} || + $main'cmaster{$tmp} || + $main'userdef{$tmp}) ? 1 : 0); + } + } + # An error occured -- we did not recognize the expression + else { + s/^([^\s\(\)\{\|&!]+)//; # Skip until next meaningful char + } + } +} + +# Given an expression in a '@' command, returns a boolean which is +# the result of the evaluation. Evaluate is collecting all the lines +# in the expression into a single string, and then calls eval_expr to +# really evaluate it. +sub evaluate { + local($val); # Value returned + local($expr) = ""; # Expression to be parsed + chop; + while (s/\\$//) { # While end of line escaped + $expr .= $_; + $_ = <UNIT>; # Fetch next line + unless ($_) { + &error("EOF in expression"); + last; + } + chop; + } + $expr .= $_; + while ($expr ne '') { + $val = &eval_expr(*expr); # Expression will be modified + # We return from eval_expr either when a closing parenthisis + # is found, or when the expression has been fully analysed. + &error("extra closing parenthesis ignored") if $expr ne ''; + } + $val; +} + +# Given a line, we search for commands (lines starting with '@'). +# If there is no command in the line, then we return the boolean state. +# Otherwise, the command is analysed and a new state is computed. +# The returned value of interpret is 1 if the line is to be printed. +sub main'interpret { + local($value); + local($status) = $state[$#state]; # Current status + if (s|^\s*@\s*(\w+)\s*(.*)|$2|) { + local($cmd) = $1; + $cmd =~ y/A-Z/a-z/; # Canonicalize to lower case + # The 'define' command + if ($cmd eq 'define') { + chop; + $userdef{$_}++ if $Keep[$status]; + return 0; + } + # The 'if' command + elsif ($cmd eq 'if') { + # We always evaluate, in order to find possible errors + $value = &evaluate($_); + if (!$Keep[$status]) { + # We have to skip until next 'end' + push(@state, $SKIP); # Record structure + return 0; + } + if ($value) { # True + push(@state, $IF); + return 0; + } else { # False + push(@state, $NOT); + return 0; + } + } + # The 'else' command + elsif ($cmd eq 'else') { + &error("expression after 'else' ignored") if /\S/; + $state[$#state] = $SKIP if $state[$#state] == $IF; + return 0 if $state[$#state] == $SKIP; + if ($state[$#state] == $OUT) { + &error("unexpected 'else'"); + return 0; + } + $state[$#state] = $ELSE; + return 0; + } + # The 'elsif' command + elsif ($cmd eq 'elsif') { + # We always evaluate, in order to find possible errors + $value = &evaluate($_); + $state[$#state] = $SKIP if $state[$#state] == $IF; + return 0 if $state[$#state] == $SKIP; + if ($state[$#state] == $OUT) { + &error("unexpected 'elsif'"); + return 0; + } + if ($value) { # True + $state[$#state] = $IF; + return 0; + } else { # False + $state[$#state] = $NOT; + return 0; + } + } + # The 'end' command + elsif ($cmd eq 'end') { + &error("expression after 'end' ignored") if /\S/; + pop(@state); + &error("unexpected 'end'") if $#state < 0; + return 0; + } + # Unknown command + else { + &error("unknown command '$cmd'"); + return 0; + } + } + $Keep[$status]; +} + +package main; + diff --git a/mcon/pl/extract.pl b/mcon/pl/extract.pl new file mode 100644 index 0000000..385b751 --- /dev/null +++ b/mcon/pl/extract.pl @@ -0,0 +1,109 @@ +;# $Id$ +;# +;# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +;# +;# You may redistribute only under the terms of the Artistic Licence, +;# as specified in the README file that comes with the distribution. +;# You may reuse parts of this distribution only within the terms of +;# that same Artistic Licence; a copy of which may be found at the root +;# of the source tree for dist 4.0. +;# +;# $Log: extract.pl,v $ +;# Revision 3.0.1.1 1994/05/06 15:21:43 ram +;# patch23: now saves the last unit line value for metalint +;# +;# Revision 3.0 1993/08/18 12:10:22 ram +;# Baseline for dist 3.0 netwide release. +;# +;# +;# This is the heart of the dependency extractor. Each control line is +;# processed. The dependencies are stored in $dependencies. +;# +# Extract dependencies from units held in @ARGV +sub extract_dependencies { + local($proc); # Procedure used to handle a ctrl line + local($file); # Current file scanned + local($dir, $unit); # Directory and unit's name + local($old_version) = 0; # True when old-version unit detected + local($mc) = "$MC/U"; # Public metaconfig directory + local($line); # Last processed line for metalint + + printf "Extracting dependency lists from %d units...\n", $#ARGV+1 + unless $opt_s; + + chdir $WD; # Back to working directory + &init_extraction; # Initialize extraction files + $dependencies = ' ' x (50 * @ARGV); # Pre-extend + $dependencies = ''; + + # We do not want to use the <> construct here, because we need the + # name of the opened files (to get the unit's name) and we want to + # reset the line number for each files, and do some pre-processing. + + file: while ($file = shift(@ARGV)) { + close FILE; # Reset line number + $old_version = 0; # True if unit is an old version + if (open(FILE, $file)) { + ($dir, $unit) = ('', $file) + unless ($dir, $unit) = ($file =~ m|(.*)/(.*)|); + $unit =~ s|\.U$||; # Remove extension + } else { + warn("Can't open $file.\n"); + } + # If unit is in the standard public directory, keep only the unit name + $file = "$unit.U" if $dir eq $mc; + print "$dir/$unit.U:\n" if $opt_d; + line: while (<FILE>) { + $line = $_; # Save last processed unit line + if (s/^\?([\w\-]+)://) { # We may have found a control line + $proc = $Depend{$1}; # Look for a procedure to handle it + unless ($proc) { # Unknown control line + $proc = $1; # p_unknown expects symbol in '$proc' + eval '&p_unknown'; # Signal error (metalint only) + next line; # And go on next line + } + # Long lines may be escaped with a final backslash + $_ .= &complete_line(FILE) if s/\\\s*$//; + # Run macros substitutions + s/%</$unit/g; # %< expands into the unit's name + if (s/%\*/$unit/) { + # %* expanded into the entire set of defined symbols + # in the old version. Now it is only the unit's name. + ++$old_version; + } + eval { &$proc($_) }; # Process the line + } else { + next file unless $body; # No procedure to handle body + do { + $line = $_; # Save last processed unit line + eval { &$body($_) } ; # From now on, it's the unit body + } while (defined ($_ = <FILE>)); + next file; + } + } + } continue { + warn(" Warning: $file is a pre-3.0 version.\n") if $old_version; + &$ending($line) if $ending; # Post-processing for metalint + } + + &end_extraction; # End the extraction process +} + +# The first line was escaped with a final \ character. Every following line +# is to be appended to it (until we found a real \n not escaped). Note that +# the leading spaces of the continuation line are removed, so any space should +# be added before the former \ if needed. +sub complete_line { + local($file) = @_; # File where lines come from + local($_); + local($read) = ''; # Concatenation of all the continuation lines found + while (<$file>) { + s/^\s+//; # Remove leading spaces + if (s/\\\s*$//) { # Still followed by a continuation line + $read .= $_; + } else { # We've reached the end of the continuation + return $read . $_; + } + } +} + diff --git a/mcon/pl/files.pl b/mcon/pl/files.pl new file mode 100644 index 0000000..9e6bd08 --- /dev/null +++ b/mcon/pl/files.pl @@ -0,0 +1,109 @@ +;# $Id$ +;# +;# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +;# +;# You may redistribute only under the terms of the Artistic Licence, +;# as specified in the README file that comes with the distribution. +;# You may reuse parts of this distribution only within the terms of +;# that same Artistic Licence; a copy of which may be found at the root +;# of the source tree for dist 4.0. +;# +;# $Log: 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. +;# +# Extract filenames from manifest +sub extract_filenames { + &build_filext; # Construct &is_cfile and &is_shfile + print "Extracting filenames (C and SH files) from $NEWMANI...\n" + unless $opt_s; + open(NEWMANI,$NEWMANI) || die "Can't open $NEWMANI.\n"; + local($file); + while (<NEWMANI>) { + ($file) = split(' '); + next if $file eq 'config_h.SH'; # skip config_h.SH + next if $file eq 'Configure'; # also skip Configure + next if $file eq 'confmagic.h' && $opt_M; + push(@SHlist, $file) if &is_shfile($file); + push(@clist, $file) if &is_cfile($file); + } +} + +# Construct two file identifiers based on the file suffix: one for C files, +# and one for SH files (using the $cext and $shext variables) defined in +# the .package file. +# The &is_cfile and &is_shfile routine may then be called to known whether +# a given file is a candidate for holding C or SH symbols. +sub build_filext { + &build_extfun('is_cfile', $cext, '.c .h .y .l'); + &build_extfun('is_shfile', $shext, '.SH'); +} + +# Build routine $name to identify extensions listed in $exts, ensuring +# that $minimum is at least matched (both to be backward compatible with +# older .package and because it is really the minimum requirred). +sub build_extfun { + local($name, $exts, $minimum) = @_; + local(@single); # Single letter dot extensions (may be grouped) + local(@others); # Other extensions + local(%seen); # Avoid duplicate extensions + foreach $ext (split(' ', "$exts $minimum")) { + next if $seen{$ext}++; + if ($ext =~ s/^\.(\w)$/$1/) { + push(@single, $ext); + } else { + # Convert into perl's regexp + $ext =~ s/\./\\./g; # Escape . + $ext =~ s/\?/./g; # ? turns into . + $ext =~ s/\*/.*/g; # * turns into .* + push(@others, $ext); + } + } + local($fn) = &q(<<EOF); # Function being built +:sub $name { +: local(\$_) = \@_; +EOF + local($single); # Single regexp: .c .h grouped into .[ch] + $single = '\.[' . join('', @single) . ']' if @single; + $fn .= &q(<<EOL) if @single; +: return 1 if /$single\$/; +EOL + foreach $ext (@others) { + $fn .= &q(<<EOL); +: return 1 if /$ext\$/; +EOL + } + $fn .= &q(<<EOF); +: 0; # None of the extensions may be applied to file name +:} +EOF + print $fn if $opt_d; + eval $fn; + chop($@) && die "Can't compile '$name':\n$fn\n$@.\n"; +} + +# Remove ':' quotations in front of the lines +sub q { + local($_) = @_; + local($*) = 1; + s/^://g; + $_; +} + diff --git a/mcon/pl/gensym.pl b/mcon/pl/gensym.pl new file mode 100644 index 0000000..4f65065 --- /dev/null +++ b/mcon/pl/gensym.pl @@ -0,0 +1,22 @@ +;# $Id$ +;# +;# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +;# +;# You may redistribute only under the terms of the Artistic Licence, +;# as specified in the README file that comes with the distribution. +;# You may reuse parts of this distribution only within the terms of +;# that same Artistic Licence; a copy of which may be found at the root +;# of the source tree for dist 4.0. +;# +;# $Log: gensym.pl,v $ +;# Revision 3.0 1993/08/18 12:10:24 ram +;# Baseline for dist 3.0 netwide release. +;# +;# +# Create a new symbol name each time it is invoked. That name is suitable for +# usage as a perl variable name. +sub gensym { + $Gensym = 'AAAAA' unless $Gensym; + $Gensym++; +} + diff --git a/mcon/pl/init.pl b/mcon/pl/init.pl new file mode 100644 index 0000000..c60d64c --- /dev/null +++ b/mcon/pl/init.pl @@ -0,0 +1,55 @@ +;# $Id$ +;# +;# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +;# +;# You may redistribute only under the terms of the Artistic Licence, +;# as specified in the README file that comes with the distribution. +;# You may reuse parts of this distribution only within the terms of +;# that same Artistic Licence; a copy of which may be found at the root +;# of the source tree for dist 4.0. +;# +;# $Log: init.pl,v $ +;# Revision 3.0.1.2 1995/09/25 09:19:06 ram +;# patch59: new ?Y: directive to change unit layout +;# +;# Revision 3.0.1.1 1993/10/16 13:55:06 ram +;# patch12: now knows about ?M: lines +;# +;# Revision 3.0 1993/08/18 12:10:24 ram +;# Baseline for dist 3.0 netwide release. +;# +;# +# The %Depend array records the functions we use to process the configuration +# lines in the unit, with a special meaning. It is important that all the +# known control symbols be listed below, so that metalint does not complain. +# The %Lcmp array contains valid layouts and their comparaison value. +sub init_depend { + %Depend = ( + 'MAKE', 'p_make', # The ?MAKE: line records dependencies + 'INIT', 'p_init', # Initializations printed verbatim + 'LINT', 'p_lint', # Hints for metalint + 'RCS', 'p_ignore', # RCS comments are ignored + 'C', 'p_c', # C symbols + 'D', 'p_default', # Default value for conditional symbols + 'E', 'p_example', # Example of usage + 'F', 'p_file', # Produced files + 'H', 'p_config', # Process the config.h lines + 'I', 'p_include', # Added includes + 'L', 'p_library', # Added libraries + 'M', 'p_magic', # Process the confmagic.h lines + 'O', 'p_obsolete', # Unit obsolescence + 'P', 'p_public', # Location of PD implementation file + 'S', 'p_shell', # Shell variables + 'T', 'p_temp', # Shell temporaries used + 'V', 'p_visible', # Visible symbols like 'rp', 'dflt' + 'W', 'p_wanted', # Wanted value for interpreter + 'X', 'p_ignore', # User comment is ignored + 'Y', 'p_layout', # User-defined layout preference + ); + %Lcmp = ( + 'top', -1, + 'default', 0, + 'bottom', 1, + ); +} + diff --git a/mcon/pl/lint.pl b/mcon/pl/lint.pl new file mode 100644 index 0000000..ba5c407 --- /dev/null +++ b/mcon/pl/lint.pl @@ -0,0 +1,1411 @@ +;# $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 = qw( # The keywords we recognize for "wiped" units + PACKAGENAME + MAINTLOC + VERSION + PATCHLEVEL + DATE + BASEREV + ); +} + +# End the extraction process +sub end_extraction { +} + +# Process the ?MAKE: line +sub p_make { + local($_) = @_; + local(@ary); # Locally defined symbols + local(@dep); # Dependencies + local($where) = "\"$file\", line $. (?MAKE:)"; + unless (/^[\w+ ]*:/) { + $wiped_unit++ if /^\t+-pick\s+wipe\b/; + return; # We only want the main dependency rule + } + warn "$where: ignoring duplicate dependency listing line.\n" + if $makeseen{$unit}++; + return if $makeseen{$unit} > 1; + + # Reset those once for every unit + # (assuming there is only one depend line) + $h_section = 0; # 0 = no ?H: yet, 1 = in ?H:, 2 = ?H:. seen + $h_section_warned = 0; # Whether we warned about terminated ?H: section + $wiped_unit = 0; # Whether macros like "<MAINTLOC> will be wiped + undef %condseen; + undef %depseen; + undef %defseen; + undef %tempseen; + undef %symset; + undef %symused; + undef %csym; + undef %ssym; + undef %hcsym; + undef %hssym; + undef %lintuse; + undef %lintuse_used; + undef %lintseen; + undef %lintchange; + undef %lintchange_used; + undef %lintextern; + undef %lintcreated; + undef %fileseen; + undef %lintseen_used; + undef %filetmp; + undef %filecreated; + undef %linthere; + undef %lintnothere; + undef %lintfused; + undef %lintsdesc; + undef %lintsdesc_used; + undef %lintcdesc; + undef %lintcdesc_used; + undef %lintset; + undef %lintset_used; + + s|^\s*||; # Remove leading spaces + chop; + s/:(.*)//; + @dep = split(' ', $1); # Dependencies + @ary = split(' '); # Locally defined symbols + local($nowarn); # True when +Special is seen + foreach $sym (@ary) { + # Ignore "internal use only" symbols as far as metalint goes. + # Actually, we record the presence of a '+' in front of a special + # unit name and use that as a hint to suppress the presence of that + # special unit in the defined symbol section. + $nowarn = ($sym =~ s/^\+//); + + # We record for each shell symbol the list of units which claim to make + # it, so as to report duplicates. + if ($sym =~ /^[_a-z]/ || $Except{$sym}) { + $shmaster{"\$$sym"} .= "$unit "; + ++$defseen{$sym}; + } else { + warn "$where: special unit '$sym' should not be listed as made.\n" + unless $sym eq $unit || $nowarn; + } + } + # Record dependencies for later perusal + push(@make, join(' ', @ary) . ':' . join(' ', @dep)); + foreach $sym (@dep) { + if ($sym =~ /^\+[_A-Za-z]/) { + $sym =~ s|^\+||; + ++$condseen{$sym}; # Conditional symbol wanted + ++$condsym{$sym}; # %condsym has a greater lifetime + } else { + ++$depseen{$sym}; # Full dependency + } + + # Each 'wanted' special unit (i.e. one starting with a capital letter) + # is remembered, so as to prevent exported symbols from being reported + # as "undefined". For instance, Myread exports $dflt, $ans and $rp. + $shspecial{$unit} .= "$sym " if substr($sym, 0, 1) =~ /^[A-Z]/; + + # Record all known dependencies (special or not) for this unit + $shdepend{$unit} .= "$sym "; + + # Remember where wanted symbol is defined, so that we can report + # stale dependencies later on (i.e. dependencies which refer to non- + # existent symbols). + $symdep{$sym} .= "$unit "; # This symbol is wanted here + } + # Make sure we do not want a symbol twice, nor do we want it once as a full + # dependency and once as a conditional dependency. + foreach $sym (@dep) { + if ($sym =~ /^\+[_A-Za-z]/) { + $sym =~ s|^\+||; + warn "$where: '+$sym' is listed $condseen{$sym} times.\n" + if $condseen{$sym} > 1; + $condseen{$sym} = 1 if $condseen{$sym}; # Avoid multiple messages + } else { + warn "$where: '$sym' is listed $depseen{$sym} times.\n" + if $depseen{$sym} > 1; + $depseen{$sym} = 1 if $depseen{$sym}; # Avoid multiple messages + } + warn "$where: '$sym' listed as both conditional and full dependency.\n" + if $condseen{$sym} && $depseen{$sym}; + } + # Make sure every unit "inherits" from the symbols exported by 'Init'. + $shspecial{$unit} .= 'Init ' unless $shspecial{$unit} =~ /Init\b/; +} + +# Process the ?O: line +sub p_obsolete { + local($_) = @_; + chop; + $Obsolete{"$unit.U"} = $_; # Message to print if unit is used +} + +# Process the ?S: lines +sub p_shell { + local($_) = @_; + local($where) = "\"$file\", line $. (?S:)"; + warn "$where: directive should come after ?MAKE declarations.\n" + unless $makeseen{$unit}; + if (/^(\w+)\s*(\(.*\))*\s*:/) { + &check_last_declaration; + $s_symbol = $1; + print " ?S: $s_symbol\n" if $opt_d; + # Make sure we do not define symbol twice and that the symbol is indeed + # listed in the ?MAKE: line. + warn "$where: duplicate description for variable '\$$s_symbol'.\n" + if $ssym{$s_symbol}++; + unless ($defseen{$s_symbol}) { + warn "$where: variable '\$$s_symbol' is not listed " . + "on ?MAKE: line.\n" unless $lintseen{$s_symbol}; + $lintseen_used{$s_symbol}++ if $lintseen{$s_symbol}; + } + # Deal with obsolete symbol list (enclosed between parenthesis) + &record_obsolete("\$$_") if /\(/; + } else { + unless ($s_symbol) { + warn "$where: syntax error in ?S: construct.\n"; + return; + } + } + + m|^\.\s*$| && ($s_symbol = ''); # End of comment +} + +# Process the ?C: lines +sub p_c { + local($_) = @_; + local($where) = "\"$file\", line $. (?C:)"; + warn "$where: directive should come after ?MAKE declarations.\n" + unless $makeseen{$unit}; + # The previous ?H: section, if present, must have been closed + if ($h_section && $h_section != 2) { + warn "$where: unclosed ?H: section.\n"; + } + $h_section = 0; + if (s/^(\w+)\s*~\s*(\S+)\s*(.*):/$1 $3:/) { + &check_last_declaration; + $c_symbol = $2; # Alias for definition in config.h + # Record symbol definition for further duplicate spotting + $cmaster{$1} .= "$unit " unless $csym{$1}; + print " ?C: $1 ~ $c_symbol\n" if $opt_d; + # Make sure we do not define symbol twice + warn "$where: duplicate description for symbol '$1'.\n" + if $csym{$1}++; + # Deal with obsolete symbol list (enclosed between parenthesis) + &record_obsolete("$_") if /\(/; + } elsif (/^(\w+)\s*(\(.*\))*\s*:/) { + &check_last_declaration; + $c_symbol = $1; + # Record symbol definition for further duplicate spotting + $cmaster{$c_symbol} .= "$unit " unless $csym{$c_symbol}; + print " ?C: $c_symbol\n" if $opt_d; + # Make sure we do not define symbol twice + warn "$where: duplicate description for symbol '$c_symbol'.\n" + if $csym{$c_symbol}++; + # Deal with obsolete symbol list (enclosed between parenthesis) + &record_obsolete("$_") if /\(/; + } else { + unless ($c_symbol) { + warn "$where: syntax error in ?C: construct.\n"; + return; + } + } + + s|^(\w+)|?$c_symbol:/* $1| || # Start of comment + (s|^\.\s*$|?$c_symbol: */\n| && ($c_symbol = '', 1)) || # End of comment + s|^(.*)|?$c_symbol: *$1|; # Middle of comment +} + +# Process the ?H: lines +sub p_config { + local($_) = @_; + local($where) = "\"$file\", line $. (?H)" unless $where; + warn "$where: directive should come after ?MAKE declarations.\n" + unless $makeseen{$unit}; + unless ($h_section){ # Entering ?H: section + $h_section = 1; + $h_section_warned = 0; + } + if ($h_section == 2) { + warn "$where: section was already terminated by '?H:.'.\n" + unless $h_section_warned++; + return; + } + if ($_ eq ".\n") { + $h_section = 2; # Marks terminated ?H: section + return; + } + (my $constraint) = m/^\?(\w+):/; + s/^\?\w+://; # Remove leading '?var:' constraint + if (m|^#\$(\w+)\s+(\w+).*\$(\w+)|) { + # Case: #$d_var VAR "$var" + warn "$where: symbol '$2' was already defined.\n" if $hcsym{$2}++; + &check_definition("$1"); + &check_definition("$3"); + } elsif (m|^#define\s+(\w+)\((.*)\)\s+\$(\w+)|) { + # Case: #define VAR(x) $var + warn "$where: symbol '$1' was already defined.\n" if $hcsym{$1}++; + &check_definition("$3"); + } elsif (m|^#\$define\s+(\w+)|) { + # Case: #$define VAR + warn "$where: symbol '$1' was already defined.\n" if $hcsym{$1}++; + } elsif (m|^#\$(\w+)\s+(\w+)|) { + # Case: #$d_var VAR + warn "$where: symbol '$2' was already defined.\n" if $hcsym{$2}++; + &check_definition("$1"); + } elsif (m|^#define\s+(\w+).*\$(\w+)|) { + # Case: #define VAR "$var" + warn "$where: symbol '$1' was already defined.\n" if $hcsym{$1}++; + &check_definition("$2"); + } elsif (m|^#define\s+(\w+)|) { + # Case: #define VAR + $hcsym{$1}++; # Multiple occurrences may be legitimate + } else { + if (/^#/) { + warn "$where: uncommon cpp line should be protected with '?%<:'.\n" + if $constraint eq ''; + } elsif (!/^\@(if|elsif|else|end)\b/) { + warn "$where: line should not be listed here but in '?C:'.\n"; + } + } + + # Ensure the constraint is either %< (unit base name) or a known symbol. + if ($constraint ne '' && $constraint ne $unit) { + warn "$where: constraint '$constraint' is an unknown symbol.\n" + unless $csym{$constraint} || $ssym{$constraint}; + } +} + +# Process the ?M: lines +sub p_magic { + local($_) = @_; + local($where) = "\"$file\", line $. (?M)"; + warn "$where: directive should come after ?MAKE declarations.\n" + unless $makeseen{$unit}; + if (/^(\w+):\s*([\w\s]*)\n$/) { + &check_last_declaration; + $m_symbol = $1; + $msym{$1} = "$unit"; # p_wanted ensure we do not define symbol twice + $mdep{$1} = $2; # Save C symbol dependencies + &p_wanted("$unit:$m_symbol"); + } else { + unless ($m_symbol) { + warn "$where: syntax error in ?M: construct.\n"; + return; + } + } + m|^\.\s*$| && ($m_symbol = ''); # End of comment +} + +# Process the ?INIT: lines +sub p_init { + local($_) = @_; + local($where) = "\"$file\", line $. (?INIT)"; + warn "$where: directive should come after ?MAKE declarations.\n" + unless $makeseen{$unit}; + &p_body($_, 1); # Pass it along as a body line (leading ?INIT: removed) +} + +# Process the ?D: lines +sub p_default { + local($_) = @_; + local($where) = "\"$file\", line $. (?D)"; + warn "$where: directive should come after ?MAKE declarations.\n" + unless $makeseen{$unit}; + local($sym) = /^(\w+)=/; + $hasdefault{$sym}++; + unless ($defseen{$sym}) { + warn "$where: variable '\$$sym' is not listed " . + "on ?MAKE: line.\n" unless $lintseen{$sym}; + $lintseen_used{$sym}++ if $lintseen{$sym}; + } + s/^\w+=//; # So that p_body does not consider variable as being set + &p_body($_, 1); # Pass it along as a body line (leading ?D: + var removed) +} + +# Process the ?V: lines +sub p_visible { + local($where) = "\"$file\", line $. (?V)"; + warn "$where: directive should come after ?MAKE declarations.\n" + unless $makeseen{$unit}; + + # A visible symbol can freely be manipulated by any unit which includes the + # current unit in its dependencies. Symbols before ':' may be only used for + # reading while symbols after ':' may be used for both reading and writing. + # The array %shvisible records symbols as keys. Read-only symbols have a + # leading '$' while read-write symbols are recorded as-is. + + unless (substr($unit, 0, 1) =~ /^[A-Z]/) { + warn "$where: visible declaration in non-special unit ignored.\n"; + return; + } + local($read_only) = $_[0] =~ /^([^:]*):?/; + local($read_write) = $_[0] =~ /:(.*)/; + local(@rsym) = split(' ', $read_only); + local(@rwsym) = split(' ', $read_write); + local($w); + foreach (@rsym) { # Read only symbols + warn "$where: wanted variable '\$$_' made visible.\n" if &wanted($_); + warn "$where: defined variable '\$$_' made visible.\n" + if &defined($_) && !$lintseen{$_}; + $w = $shvisible{"\$$_"}; + warn "$where: variable '\$$_' already made visible by unit $w.\n" if $w; + $w = $shvisible{$_}; + warn "$where: variable '\$$_' already read-write visible in $w.\n" if $w; + $shvisible{"\$$_"} = $unit unless $w; + } + foreach (@rwsym) { # Read/write symbols + warn "$where: wanted variable '\$$_' made visible.\n" if &wanted($_); + warn "$where: defined variable '\$$_' made visible.\n" + if &defined($_) && !$lintseen{$_}; + $w = $shvisible{$_}; + warn "$where: variable '\$$_' already made visible by unit $w.\n" if $w; + $w = $shvisible{"\$$_"}; + warn "$where: variable '\$$_' already read-only visible in $w.\n" if $w; + $shvisible{$_} = $unit unless $w; + } +} + +# Process the ?W: lines +sub p_wanted { + local($where) = "\"$file\", line $. (?W)" unless $where; + warn "$where: directive should come after ?MAKE declarations.\n" + unless $makeseen{$unit}; + # Somehow, we should check that none of the symbols to activate are stale + # ones, i.e. they all finally resolve to some known target -- FIXME + local($active) = $_[0] =~ /^([^:]*):/; # Symbols to activate + local($look_symbols) = $_[0] =~ /:(.*)/; # When those are used + local(@symbols) = split(' ', $look_symbols); + # A "?W:symbol" line asks metaconfig to define 'symbol' in the wanted file + # as a C target iff that word is found within the sources. This is mainly + # intended for the built-in interpreter to check for definedness. + local($w); + foreach (@symbols) { + warn "$where: variable '\$$_' already wanted.\n" if &wanted($_); + warn "$where: variable '\$$_' also locally defined.\n" if &defined($_); + $w = $cwanted{$_}; + if ($msym{$_} ne '') { + warn "$where: symbol '$_' already listed on a ?M: line in '$w'.\n" + if $w; + } else { + warn "$where: variable '\$$_' already listed on a ?W: line in '$w'.\n" + if $w; + } + $cwanted{$_} = $unit unless $w; + } +} + +# Process the ?Y: lines +sub p_layout { + local($where) = "\"$file\", line $. (?Y)"; + warn "$where: directive should come after ?MAKE declarations.\n" + unless $makeseen{$unit}; + local($_) = @_; + chop; + s/^\s+//; + tr/A-Z/a-z/; # Layouts are record in lowercase + warn "$where: unknown layout directive '$_'.\n" + unless defined $Lcmp{$_}; +} + +# Process the ?P: lines +sub p_public { + # FIXME +} + +# Process the ?L: lines +sub p_library { + # There should not be any '-l' in front of the library name + # FIXME +} + +# Process the ?I: lines +sub p_include { + # FIXME +} + +# Process the ?T: lines +sub p_temp { + local($where) = "\"$file\", line $. (?T:)"; + warn "$where: directive should come after ?MAKE declarations.\n" + unless $makeseen{$unit}; + local($_) = @_; + local(@sym) = split(' ', $_); + foreach $sym (@sym) { + warn "$where: temporary symbol '\$$sym' multiply declared.\n" + if $tempseen{$sym}++ == 1; + $tempmaster{$sym} .= "$unit " if $tempseen{$sym} == 1; + } +} + +# Process the ?F: lines +sub p_file { + local($where) = "\"$file\", line $. (?F:)"; + warn "$where: directive should come after ?MAKE declarations.\n" + unless $makeseen{$unit}; + local($_) = @_; + local(@files) = split(' ', $_); + local($uufile); # Name of file produced in the UU directory + local($tmpfile); # Name of a temporary file + # We care only about UU files, i.e. files produced in the UU directory + # and which are identified by the convention ./filename. Files !filename + # are not produced, i.e. they are temporary or externally provided. + # The %prodfile table records all the files produced, so we may detect + # inconsistencies between units, while %filemaster records the (first) unit + # defining a given UU file to make sure that (special) unit is named in the + # dependency line when that UU file if used. Duplicates will be caught in + # the sanity check phase thanks to %prodfile. + # Temporary files are recorded in %filesetin, so that we may later compare + # the list with the UU files to detect possible overwrites. + my $is_special = substr($unit, 0, 1) =~ /^[A-Z]/; + foreach $file (@files) { + warn "$where: produced file '$file' multiply declared.\n" + if $fileseen{$file}++ == 1; + if (($tmpfile = $file) =~ s/^!//) { + $filetmp{$tmpfile} = 'x '; + $filesetin{$tmpfile} .= "$unit " if $fileseen{$file} == 1; + next; # Is not a UU file for sure, so skip + } + $prodfile{$file} .= "$unit " if $fileseen{$file} == 1; + ($uufile = $file) =~ s|^\./(\S+)$|$1|; + next if $file eq $uufile; # Don't care about non-UU files + unless ($is_special || $lintcreated{$uufile}) { + warn "$where: UU file '$uufile' in non-special unit ignored.\n"; + delete $lintcreated{$uufile}; # Detect spurious LINT + next; + } + delete $lintcreated{$uufile} if !$is_special; # Detect spurious LINT + $filemaster{$uufile} = $unit unless defined $filemaster{$uufile}; + $filecreated{$uufile} = 'a'; # Will be automagically incremented + } +} + +# Process the ?LINT: lines +sub p_lint { + local($_) = @_; + local(@sym); + local($where) = "\"$file\", line $. (?LINT:)"; + s/^\s+//; # Strip leading spaces + unless ($makeseen{$unit}) { + warn "$where: directive should come after ?MAKE declarations.\n" + unless m/^empty/; + } + if (s/^set//) { # Listed variables are set + @sym = split(' ', $_); # Spurious ones will be flagged + foreach (@sym) { + $lintset{$_}++; # Shell variable set + } + } elsif (s/^desc\w+//) { # Listed shell variables are described + @sym = split(' ', $_); # Spurious ones will be flagged + foreach (@sym) { + $lintsdesc{$_}++; # Shell variable described + } + } elsif (s/^creat\w+//) { # Listed created files in regular units + @sym = split(' ', $_); + foreach (@sym) { + $lintcreated{$_}++; # Persistent UU file created + } + } elsif (s/^known//) { # Listed C variables are described + @sym = split(' ', $_); # Spurious ones will be flagged + foreach (@sym) { + $lintcdesc{$_}++; # C symbol described + } + } elsif (s/^change//) { # Shell variable ok to be changed + @sym = split(' ', $_); # Spurious ones will be flagged + foreach (@sym) { + $lintchange{$_}++; # Do not complain if changed + } + } elsif (s/^extern//) { # Variables known to be externally defined + @sym = split(' ', $_); + foreach (@sym) { + $lintextern{$_}++; # Do not complain if used in a ?H: line + } + } elsif (s/^usefile//) { # Files marked as being used + @sym = split(' ', $_); + foreach (@sym) { + $lintfused{$_}++; + } + } elsif (s/^use//) { # Variables declared as used by unit + @sym = split(' ', $_); # Spurious ones will be flagged + foreach (@sym) { + $lintuse{$_}++; # Do not complain if on ?MAKE and not used + } + } elsif (s/^def\w+//) { # Listed variables are defined + @sym = split(' ', $_); # Spurious ones will be flagged + foreach (@sym) { + $lintseen{$_}++; # Shell variable defined in this unit + } + } elsif (m/^empty/) { # Empty unit file + $lintempty{$unit}++; + } elsif (m/^unclosed/) { # Unclosed here-documents + @sym = split(' ', $_); + foreach (@sym) { + $linthere{$_}++; + } + } elsif (s/^nothere//) { # Not a here-document name + @sym = split(' ', $_); + foreach (@sym) { + $lintnothere{$_}++; + } + } elsif (s/^nocomment//) { # OK if leading unit ': comment' missing + $lintnocomment{$unit}++; + } else { + local($where) = "\"$file\", line $." unless $where; + local($word) = /^(\w+)/; + warn "$where: unknown LINT request '$word' ignored.\n"; + } +} + +# Process the body of the unit +sub p_body { + return unless $makeseen{$unit}; + local($_, $special) = @_; + local($where) = "\"$file\", line $." unless $where; + # Ensure there is no control line in the body of the unit + local($control) = /^\?([\w\-]+):/; + local($known) = $control ? $Depend{$control} : ""; + warn "$where: control sequence '?$control:' ignored within body.\n" + if $known && !/^\?X:|^\?LINT:/; + if (s/^\?LINT://) { # ?LINT directives allowed within body + $_ .= &complete_line(FILE) if s/\\\s*$//; + &p_lint($_); + } + return if $known; + # First non-special line should be a ': description' line + unless ($special || /^\?/ || /^@/) { + warn "$where: first body line should be a general ': description'.\n" + unless $past_first_line++ || $lintnocomment{$unit} || /^:\s+\w+/; + } + # Ensure ': comment' lines do not hold any meta-character + # We assume ":)" introduces a case statement. + if (/^\s*:/ && !/^\s*:\)/) { + warn "$where: missing space after ':' to make it a comment.\n" + unless /^\s*:\s/; + s/\\.//g; # simplistic ignoring of "escaped" chars + s/".*?"//g; + s/'.*?'//g; + if ($wiped_unit) { + s/<\$\w+>//g; + foreach my $wipe (@wiping) { + s/<$wipe>//g; + } + } + warn "$where: found unquoted meta-character $1 on comment line.\n" + while s/([`()<>;&\{\}\|])//g; + warn "$where: found dangling quote on ':' comment line.\n" if /['"]/; + return; + } + # Ingnore interpreted lines and their continuations + if ($last_interpreted) { + return if /\\$/; # Still part of the interpreted line + $last_interpreted = 0; # End of interpreted lines + return; # This line was the last interpreted + } + # Look for interpreted lines and ignore them + if (/^@/) { + $last_interpreted = /\\$/; # Set flag if line is continued + return; # And skip this line + } + # Detect ending of "here" documents + if ($heredoc ne '' && $_ eq "$heredoc\n") { + $heredoc = ''; # Close here-document + $heredoc_nosubst = 0; + return; + } + # Detect beginning of "here" document + my $began_here = 0; + if ($heredoc eq '') { + if (/<<\s*''/) { + # Discourage it, because we're not processing those... + warn "$where: empty here-document name discouraged.\n"; + } elsif (/<<\s*'([^']+)'/ && !$lintnothere{$1}) { + $heredoc = $1; + $heredoc_nosubst = 1; + $began_here++; + } elsif (/<<\s*(\S+)/ && !$lintnothere{$1}) { + $heredoc = $1; + $began_here++; + } + # Continue, as we need to look for possible ">file" on the same line + # as a possible here document, as in "cat <<EOM >file". + } else { + return if $heredoc_nosubst; # Completely opaque to interpretation + } + $heredoc_line = $. if $began_here; + + # If we've just entered a here document and we're generating a file + # that is exported by the unit, then we need to monitor the variables + # used to make sure there's no missing dependency. + $heredoc_nosubst = 0 + if $began_here && />>?\s*(\S+)/ && $filemaster{$1} eq $unit; + + # From now on, do all substitutes with ':' since it would be dangerous + # to remove things plain and simple. It could yields false matches + # afterwards... + + my $check_vars = 1; + $chek_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} + 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/; + } + + return if $heredoc ne '' && !$began_here; # Still in here-document + + # 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" + local($file); + $_ = $line; + s/<\S+?>//g; # <header.h> would set-off our <file detection + while ( + s!(\.\s+|`\s*)(\S*UU|\.)/([^\$/`\s;]+)\s*!! || + s!(`\s*\$?)cat\s+(\./)?([^\$/`\s;]+)\s*`!! || + s!(\s+)(\./)([^\$/`\s;]+)\s*!! || + s!(\s+)<\s*(\./)?([^<\$/`'"\s;]+)!! + ) { + $file = $3; + # Found some ". ./file" or `./file` execution, `$cat file`, or even + # "blah <file"... + # Record file as used. Later on, we will make sure we had the right + # to use that file: either we are in the unit that defines it, or we + # include the unit that creates it in our dependencies, relying on ?F:. + $fileused{$unit} .= "$file " unless + $filetmp{$file} || $fileused{$unit} =~ /\b$file\b/; + # Mark temporary file as being used, to spot useless local declarations + $filetmp{$file} .= ' used' + if defined $filetmp{$file} && $filetmp{$file} !~ /\bused/; + } + # Try to detect things like . myread or `loc` to warn that they + # should rather use . ./myread and `./loc`. Also things like 'if prog', + # or usage in conditional expressions such as || and &&. Be sure the file + # name is always in $2... + while ( + s!(\.\s+|`\s*)([^\$/`\s;]+)\s*!: ! || # . myread or `loc` + s!(if|\|\||&&)\s+([^\$/`\s;]+)\s*!: ! # if prog, || prog, && prog + ) { + $file = $2; + $filemisused{$unit} .= "$file " unless + $filetmp{$file} || $filemisused{$unit} =~ /\b$file\b/; + # Temporary files should be used with ./ anyway + $filetmp{$file} .= ' misused' + if defined $filetmp{$file} && $filetmp{$file} !~ /\bmisused/; + } + # Locate file creation, >>file or >file + while (s!>>?\s*([^\$/`\s;]+)\s*!: !) { + $file = $1; + next if $file =~ /&\d+/; # skip >&4 and friends + $filecreated{$file}++; + } + # Look for mentions of known temporary files to avoid complaining + # that they were not used. + while (s!\s+(\S+)!!) { + $file = $1; + $filetmp{$file} .= ' used' + if defined $filetmp{$file} && $filetmp{$file} !~ /\bused/; + } +} + +# Called at the end of each unit +sub p_end { + local($last) = @_; # Last processed line + local($where) = "\"$file\""; + + # The ?H: section, if present, must have been closed + if ($h_section && $h_section != 2) { + warn "$where: unclosed ?H: section.\n"; + } + $h_section = 0; # For next unit, which may be empty + + # All opened here-documents must be closed. + if ($heredoc ne '') { + my $q = $heredoc_nosubst ? "'" : ""; + warn "$where: unclosed here-document $q$heredoc$q " . + "started line $heredoc_line.\n" + unless $linthere{$heredoc}; + } + + # Reinitialize for next unit. + $heredoc = ''; + $heredoc_nosubst = 0; + $past_first_line = 0; + $last_interpreted = 0; + + unless ($makeseen{$unit}) { + warn "$where: no ?MAKE: line describing dependencies.\n" + unless $lintempty{$unit}; + return; + } + + # Each unit should end with a blank line. Unfortunately, some units + # may also end with an '@end' request and have the blank line above it. + # Currently, we do not have enough information to correctly diagnose + # whether it is valid or not so just skip it. + # Same thing for U/Obsol_sh.U which ends with a shell comment. + + warn "$where: not ending with a blank line.\n" unless + $last =~ /^\s*$/ || $last =~ /^\@end/ || $last =~ /^#|\?/; + + # For EMACS users. It would be fatal to the Configure script... + warn "$where: last line not ending with a new-line character.\n" + unless $last =~ /\n$/; + + # Make sure every shell symbol described in ?MAKE had a description + foreach $sym (sort keys %defseen) { + unless ($ssym{$sym}) { + warn "$where: symbol '\$$sym' was not described.\n" + unless $lintsdesc{$sym}; + $lintsdesc_used{$sym}++ if $lintsdesc{$sym}; + } + } + # Ensure all the C symbols defined by ?H: lines have a description + foreach $sym (sort keys %hcsym) { + unless ($csym{$sym}) { + warn "$where: C symbol '$sym' was not described.\n" + unless $lintcdesc{$sym}; + $lintcdesc_used{$sym}++ if $lintcdesc{$sym}; + } + } + # Ensure all the C symbols described by ?C: lines are defined in ?H: + foreach $sym (sort keys %csym) { + warn "$where: C symbol '$sym' was not defined by any ?H: line.\n" + unless $hcsym{$sym}; + } + # Make sure each defined symbol was set, unless it starts with an + # upper-case letter in which case it is not a "true" shell symbol. + # I don't care about the special symbols defined in %Except as I know + # they are handled correctly. + foreach $sym (sort keys %defseen) { + unless ($symset{$sym} || substr($sym, 0, 1) =~ /^[A-Z]/) { + warn "$where: variable '\$$sym' should have been set.\n" + unless $lintset{$sym}; + $lintset_used{$sym}++ if $lintset{$sym}; + } + } + # Make sure every non-special unit declared as wanted is indeed needed + foreach $sym (sort keys %depseen) { + if ($shused{$unit} !~ /\$$sym\b/ && substr($sym, 0, 1) !~ /^[A-Z]/) { + warn "$where: unused dependency variable '\$$sym'.\n" unless + $lintchange{$sym} || $lintuse{$sym}; + $lintchange_used{$sym}++ if $lintchange{$sym}; + $lintuse_used{$sym}++ if $lintuse{$sym}; + } + } + # Idem for conditionally wanted symbols + foreach $sym (sort keys %condseen) { + if ($shused{$unit} !~ /\$$sym\b/ && substr($sym, 0, 1) !~ /^[A-Z]/) { + warn "$where: unused conditional variable '\$$sym'.\n" unless + $lintchange{$sym} || $lintuse{$sym}; + $lintchange_used{$sym}++ if $lintchange{$sym}; + $lintuse_used{$sym}++ if $lintuse{$sym}; + } + } + # Idem for temporary symbols + foreach $sym (sort keys %tempseen) { + if ($shused{$unit} !~ /\$$sym\b/ && !$symset{$sym}) { + warn "$where: unused temporary variable '\$$sym'.\n" unless + $lintuse{$sym}; + $lintuse_used{$sym}++ if $lintuse{$sym}; + } + } + # Idem for local files + foreach $file (sort keys %filetmp) { + warn "$where: mis-used temporary file '$file'.\n" if + $filetmp{$file} =~ /\bmisused/; + warn "$where: unused temporary file '$file'.\n" unless + $lintfused{$file} || + $filetmp{$file} =~ /\bused/ || $filetmp{$file} =~ /\bmisused/; + } + # Make sure each private file listed as created on ?F: is really created. + # When found, a private UU file is entered in the %filecreated array + # with value 'a'. Each time a file creation occurs in the unit, an + # increment is done on that value. Since 'a'++ -> 'b', a numeric value + # in %filecreated means a non-local file, which is skipped. An 'a' means + # the file was not created... + local($value); + foreach $file (sort keys %filecreated) { + $value = $filecreated{$file}; + next if $value > 0; # Skip non UU-files. + warn "$where: file '$file' was not created.\n" if $value eq 'a'; + } + # Check whether some of the LINT directives were useful + foreach my $sym (sort keys %lintcreated) { + warn "$where: spurious 'LINT create $sym' directive.\n"; + } + foreach my $sym (sort keys %lintuse) { + warn "$where: spurious 'LINT use $sym' directive.\n" + unless $lintuse_used{$sym}; + } + foreach my $sym (sort keys %lintchange) { + warn "$where: spurious 'LINT change $sym' directive.\n" + unless $lintchange_used{$sym}; + } + foreach my $sym (sort keys %lintseen) { + warn "$where: spurious 'LINT define $sym' directive.\n" + unless $lintseen_used{$sym}; + } + foreach my $sym (sort keys %lintsdesc) { + warn "$where: spurious 'LINT describe $sym' directive.\n" + unless $lintsdesc_used{$sym}; + } + foreach my $sym (sort keys %lintcdesc) { + warn "$where: spurious 'LINT known $sym' directive.\n" + unless $lintcdesc_used{$sym}; + } + foreach my $sym (sort keys %lintset) { + warn "$where: spurious 'LINT set $sym' directive.\n" + unless $lintset_used{$sym}; + } +} + +# An unknown control line sequence was found (held in $proc) +sub p_unknown { + warn "\"$file\", line $.: unknown control sequence '?$proc:'.\n"; +} + +# Run sanity checks, to make sure every conditional symbol has a suitable +# default value. Also ensure every symbol was defined once. +sub sanity_checks { + print "Sanity checks...\n"; + local($key, $value); + local($w); + local(%message); # Record messages on a per-unit basis + local(%said); # Avoid duplicate messages + # Warn about symbols ever used in conditional dependency with no default + while (($key, $value) = each(%condsym)) { + unless ($hasdefault{$key}) { + $w = (split(' ', $shmaster{"\$$key"}))[0]; + $message{$w} .= "#$key "; + } + } + # Warn about any undeclared variables. They are all listed in %shunknown, + # being the values while the unit where they appear is the key. If the + # symbol is defined by any of the special units included or made visible, + # then no warning is issued. + local($defined); # True if symbol is defined in one unit + local($where); # List of units where symbol is defined + local($myself); # The name of the current unit if itself special + local($visible); # Symbol made visible via a ?V: line + foreach $unit (sort keys %shunknown) { + foreach $sym (split(' ', $shunknown{$unit})) { + $defined = 0; + $where = $shmaster{"\$$sym"}; + $defined = 1 if $tempmaster{"\$$sym"} =~ /$unit\b/; + $myself = substr($unit, 0, 1) =~ /^[A-Z]/ ? $unit : ''; + # Symbol has to be either defined within one of the special units + # listed in the dependencies or exported via a ?V: line. + unless ($defined) { + $defined = &visible($sym, $unit); + $spneeded{$unit}++ if $defined; + } + $message{$unit} .= "\$$sym " unless $defined; + } + } + + # Warn about any undeclared files. Files used in one unit are all within + # the %fileused table, indexed by unit. If a file is used, it must either + # be in the unit that declared it (relying on %filemaster for that) or + # the unit listed in %filemaster must be part of our dependency. + %said = (); + foreach $unit (sort keys %fileused) { + foreach $file (split(' ', $fileused{$unit})) { + $defined = 0; + $where = $filemaster{$file}; # Where file is created + $defined = 1 if $unit eq $where; # We're in the unit defining it + # Private UU files may be only be created by special units + foreach $special (split(' ', $shspecial{$unit})) { + last if $defined; + $defined = 1 if $where eq $special; + } + # Exceptions to above rule possible via a ?LINT:create hint, + # so parse all known dependencies for the unit... + foreach $depend (split(' ', $shdepend{$unit})) { + last if $defined; + $defined = 1 if $where eq $depend; + } + $message{$unit} .= "\@$file " unless + $defined || $said{"$unit/$file"}++; # Unknown file + } + } + undef %fileused; + + # Warn about any misused files, kept in %filemisused + foreach $unit (sort keys %filemisused) { + foreach $file (split(' ', $filemisused{$unit})) { + next unless defined $filemaster{$file}; # Skip non UU-files + $message{$unit} .= "\@\@$file "; # Misused file + } + } + undef %filemisused; + + # Warn about temporary files which could be created and inadvertently + # override a private UU file (listed in %filemaster). + foreach $tmpfile (keys %filesetin) { + next unless defined $filemaster{$tmpfile}; + $where = $filemaster{$tmpfile}; + foreach $unit (split(' ', $filesetin{$tmpfile})) { + $message{$unit} .= "\@\@\@$where:$tmpfile "; + } + } + undef %filesetin; + + # Warn about any set variable which was not listed. + foreach $unit (sort keys %shset) { + symbol: foreach $sym (split(' ', $shset{$unit})) { + next if $shvisible{$sym}; + $defined = 0; + # Symbol has to be either defined within one of the special units + # listed in the dependencies or exported read-write via a ?V: line. + # If symbol is exported read-only, report the attempt to set it. + $where = $shmaster{"\$$sym"}; + study $where; + foreach $special (split(' ', $shspecial{$unit})) { + $defined = 1 if $where =~ /\b$special\b/; + last if $defined; + } + $visible = 0; + $defined = $visible = &visible($sym, $unit) unless $defined; + if ($visible && $shvisible{"\$$sym"} ne '') { + # We are allowed to set a read-only symbol in the unit which + # declared it... + next symbol if $shvisible{"\$$sym"} eq $unit; + $message{$unit} .= "\&$sym "; # Read-only symbol set + next symbol; + } + $message{$unit} .= "$sym " unless $defined; + } + } + # Warn about any obsolete variable which may be used + foreach $unit (sort keys %shused) { + foreach $sym (split(' ', $shused{$unit})) { + $message{$unit} .= "!$sym " if $Obsolete{$sym} ne ''; + } + } + + # Warn about stale dependencies, and prepare successor and predecessor + # tables for later topological sort. + + local($targets, $deps); + local(%Succ); # Successors + local(%Prec); # Predecessors + + # Split dependencies and build successors array. + foreach $make (@make) { + ($targets, $deps) = $make =~ m|(.*):\s*(.*)|; + $deps =~ s/\+(\w)/$1/g; # Remove conditional targets + foreach $target (split(' ', $targets)) { + $Succ{$target} .= $deps . ' '; + } + } + + # Special setup for the End target, which normally has a $W dependency for + # wanted symbols. In order to detect all the possible cycles, we forge a + # huge dependency by making ALL the regular symbols (i.e. those whose first + # letter is not uppercased) wanted. + + local($allwant) = ''; + { + local($sym, $val); + while (($sym, $val) = each %shmaster) { + $sym =~ s/^\$//; + $allwant .= "$sym " if $val ne ''; + } + } + + $Succ{'End'} =~ s/\$W/$allwant/; + + # Initialize precursors, and spot symbols impossible to 'make', i.e. those + # symbols listed in the successors and with no 'make' target. The data + # structures %Prec and %Succ will also be used by the cycle lookup code, + # in other words, the topological sort. + foreach $target (keys %Succ) { + $Prec{$target} += 0; # Ensure key is recorded without disturbing. + foreach $succ (split(' ', $Succ{$target})) { + $Prec{$succ}++; # Successor has one more precursor + unless (defined $Succ{$succ} || $said{$succ}++) { + foreach $unit (split(' ', $symdep{$succ})) { + $message{$unit} .= "?$succ "; # Stale ?MAKE: dependency + } + } + } + } + undef %symdep; + + # Check all ?M: dependencies to spot stale ones + %said = (); + while (($key, $value) = each(%msym)) { + next if $value eq ''; # Value is unit name where ?M: occurred + foreach $sym (split(' ', $mdep{$key})) { # Loop on C dependencies + next if $cmaster{$sym} || $said{$sym}; + $message{$value} .= "??$sym "; # Stale ?M: dependency + $said{$sym}++; + } + } + + undef %said; + undef %mdep; + undef %msym; + + # Now actually emit all the warnings + local($uv); # Unit defining visible symbol or private file + local($w); # Were we are signaling an error + foreach $unit (sort keys %message) { + undef %said; + $w = "\"$unit.U\""; + foreach (split(' ', $message{$unit})) { + if (s/^#//) { + warn "$w: symbol '\$$_' has no default value.\n"; + } elsif (s/^\?\?//) { + warn "$w: stale ?M: dependency '$_'.\n"; + } elsif (s/^\?//) { + warn "$w: stale ?MAKE: dependency '$_'.\n"; + } elsif (s/^\$//) { + if ($shmaster{"\$$_"} ne '') { + warn "$w: symbol '\$$_' missing from ?MAKE.\n"; + } elsif (($uv = $shvisible{$_}) ne '') { + warn "$w: missing $uv from ?MAKE for visible '\$$_'.\n"; + } elsif (($uv = $shvisible{"\$$_"}) ne '') { + warn "$w: missing $uv from ?MAKE for visible '\$$_'.\n"; + } else { + warn "\"$unit.U\": unknown symbol '\$$_'.\n"; + } + ++$said{$_}; + } elsif (s/^\&//) { + warn "\"$unit.U\": read-only symbol '\$$_' is set.\n"; + ++$said{$_}; + } elsif (s/^!//) { + warn "\"$unit.U\": obsolete symbol '$_' is used.\n"; + ++$said{$_}; + } elsif (s/^\@\@\@//) { + $uv = '?'; # To spot format errors + s/^(\w+):// && ($uv = $1); + warn "$w: local file '$_' may override the one set by $uv.U.\n"; + } elsif (s/^\@\@//) { + $uv = $filemaster{$_}; + warn "$w: you might not always get file '$_' from $uv.U.\n"; + } elsif (s/^\@//) { + if ($uv = $filemaster{$_}) { + warn "$w: missing $uv from ?MAKE for private file '$_'.\n"; + } else { + warn "$w: unknown private file '$_'.\n"; + } + ++$said{"\@$_"}; + } else { + warn "\"$unit.U\": undeclared symbol '\$$_' is set.\n" + unless $said{$_}; + } + } + } + + # Memory cleanup + undef %message; + undef %said; + undef %shused; + undef %shset; + undef %shspecial; + undef %shvisible; + undef %filemaster; + + # Spot multiply defined C symbols + foreach $sym (keys %cmaster) { + @sym = split(' ', $cmaster{$sym}); + if (@sym > 1) { + warn "C symbol '$sym' is defined in the following units:\n"; + foreach (@sym) { + print STDERR "\t$_.U\n"; + } + } + } + undef %cmaster; # Memory cleanup + + # Warn about multiply defined symbols. There are three kind of symbols: + # target symbols, obsolete symbols and temporary symbols. + # For each of these sets, we make sure the intersection with the other sets + # is empty. Besides, we make sure target symbols are only defined once. + + local(@sym); + foreach $sym (keys %shmaster) { + @sym = split(' ', $shmaster{$sym}); + if (@sym > 1) { + warn "Shell symbol '$sym' is defined in the following units:\n"; + foreach (@sym) { + print STDERR "\t$_.U\n"; + } + } + $message{$sym} .= 'so ' if $Obsolete{$sym}; + $message{$sym} .= 'st ' if $tempmaster{$sym}; + } + foreach $sym (keys %tempmaster) { + $message{$sym} .= 'ot ' if $Obsolete{$sym}; + } + local($_); + while (($sym, $_) = each %message) { + if (/so/) { + if (/ot/) { + warn "Shell symbol '$sym' is altogether:\n"; + @sym = split(' ', $shmaster{$sym}); + @sym = grep(s/$/.U/, @sym); + print STDERR "...defined in: ", join(', ', @sym), "\n"; + print STDERR "...obsoleted by $Obsolete{$sym}.\n"; + @sym = split(' ', $tempmaster{$sym}); + @sym = grep(s/$/.U/, @sym); + print STDERR "...used as temporary in:", join(', ', @sym), "\n"; + } else { + warn "Shell symbol '$sym' is both defined and obsoleted:\n"; + @sym = split(' ', $shmaster{$sym}); + @sym = grep(s/$/.U/, @sym); + print STDERR "...defined in: ", join(', ', @sym), "\n"; + print STDERR "...obsoleted by $Obsolete{$sym}.\n"; + } + } elsif (/st/) { # Cannot be ot as it would imply so + warn "Shell symbol '$sym' is both defined and used as temporary:\n"; + @sym = split(' ', $shmaster{$sym}); + @sym = grep(s/$/.U/, @sym); + print STDERR "...defined in: ", join(', ', @sym), "\n"; + @sym = split(' ', $tempmaster{$sym}); + @sym = grep(s/$/.U/, @sym); + print STDERR "...used as temporary in:", join(', ', @sym), "\n"; + } elsif (/ot/) { + warn "Shell symbol '$sym' obsoleted also used as temporary:\n"; + print STDERR "...obsoleted by $Obsolete{$sym}.\n"; + @sym = split(' ', $tempmaster{$sym}); + @sym = grep(s/$/.U/, @sym); + print STDERR "...used as temporary in:", join(', ', @sym), "\n"; + } + } + + # Spot multiply defined files, either private or public ones + foreach $file (keys %prodfile) { + @sym = split(' ', $prodfile{$file}); + if (@sym > 1) { + warn "File '$file' is defined in the following units:\n"; + foreach (@sym) { + print STDERR "\t$_\n"; + } + } + } + undef %prodfile; + + + # Memory cleanup (we still need %shmaster for tsort) + undef %message; + undef %tempmaster; + undef %Obsolete; + + # Make sure there is no dependency cycle + print "Looking for dependency cycles...\n"; + &tsort(*Succ, *Prec); # Destroys info from %Prec +} + +# Make sure last declaration ended correctly with a ?S:. or ?C:. line. +# The variable '$where' was correctly positionned by the calling routine. +sub check_last_declaration { + warn "$where: definition of '\$$s_symbol' not closed by '?S:.'.\n" + if $s_symbol ne ''; + warn "$where: definition of '$c_symbol' not closed by '?C:.'.\n" + if $c_symbol ne ''; + warn "$where: magic definition of '$m_symbol' not closed by '?M:.'.\n" + if $m_symbol ne ''; + $s_symbol = $c_symbol = $m_symbol = ''; +} + +# Make sure the variable is mentionned on the ?MAKE line, if possible in the +# definition section. +# The variable '$where' was correctly positionned by the calling routine. +sub check_definition { + local($var) = @_; + warn "$where: variable '\$$var' not even listed on ?MAKE: line.\n" + unless $defseen{$var} || $condseen{$var} || $depseen{$var}; + warn "$where: variable '\$$var' is defined externally.\n" + if !$lintextern{$var} && !$defseen{$var} && &wanted($var); +} + +# Is symbol declared somewhere? +sub declared { + &defined($_[0]) || &wanted($_[0]); +} + +# Is symbol defined by unit? +sub defined { + $tempseen{$_[0]} || $defseen{$_[0]} || $lintseen{$_[0]}; +} + +# Is symbol wanted by unit? +sub wanted { + $depseen{$_[0]} || $condseen{$_[0]}; +} + +# Is symbol visible from the unit? +# Locate visible symbols throughout the special units. Each unit having +# some special dependencies (special units wanted) have an entry in the +# %shspecial array, listing all those special dependencies. And each +# symbol made visible by ONE special unit has an entry in the %shvisible +# array. +sub visible { + local($symbol, $unit) = @_; + local(%explored); # Special units we've already explored + &explore($symbol, $unit); # Perform recursive search +} + +# Recursively explore the dependencies to locate a visible symbol +sub explore { + local($symbol, $unit) = @_; + # If unit was already explored, we know it has not been found by following + # that path. + return 0 if defined $explored{$unit}; + $explored{$unit} = 0; # Assume nothing found in this unit + local($specials) = $shspecial{$unit}; + # Don't waste any time if unit does not have any special units listed + # in its dependencies. + return 0 unless $specials; + foreach $special (split(' ', $specials)) { + return 1 if ( + $shvisible{"\$$symbol"} eq $unit || + $shvisible{$symbol} eq $unit || + &explore($symbol, $special) + ); + } + 0; +} + diff --git a/mcon/pl/locate.pl b/mcon/pl/locate.pl new file mode 100644 index 0000000..ea7d03f --- /dev/null +++ b/mcon/pl/locate.pl @@ -0,0 +1,153 @@ +;# $Id$ +;# +;# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +;# +;# You may redistribute only under the terms of the Artistic Licence, +;# as specified in the README file that comes with the distribution. +;# You may reuse parts of this distribution only within the terms of +;# that same Artistic Licence; a copy of which may be found at the root +;# of the source tree for dist 4.0. +;# +;# $Log: locate.pl,v $ +;# Revision 3.0.1.1 1994/10/29 16:36:52 ram +;# patch36: misspelled a 'closedir' as a 'close' statement +;# +;# Revision 3.0 1993/08/18 12:10:25 ram +;# Baseline for dist 3.0 netwide release. +;# +;# +;# Locate units and put them in the @ARGV array, for later perusal. We first +;# look in the private U directory, then in the public U library. In each U +;# directory, units may be gathered in clusters (directories). These clusters +;# should not have a name ending with .U, as those will never be stat()'ed. +;# +;# NB: Currently, the clusters are only a practical way of grouping a set of +;# closely related units. There must not be any name conflicts. +;# +;# The following variables are used: +;# $WD is assumed to be the working directory (where the process was spawned) +;# $MC is the location of metaconfig's public library +;# @ARGV is the list of all the units full path +;# %Unit maps an unit name (without final .U) to a path +;# @myUlist lists the user's units, which will be appended at the end of @ARGV +;# %myUseen lists the user's units which overwrite public ones +;# +package locate; + +# Locate the units and push their path in @ARGV (sorted alphabetically) +sub main'locate_units { + print "Locating units...\n" unless $main'opt_s; + local(*WD) = *main'WD; # Current working directory + local(*MC) = *main'MC; # Public metaconfig library + undef %myUlist; # Records private units paths + undef %myUseen; # Records private/public conflicts + &private_units; # Locate private units in @myUlist + &public_units; # Locate public units in @ARGV + @ARGV = sort @ARGV; # Sort it alphabetically + push(@ARGV, sort @myUlist); # Append user's units sorted + &dump_list if $main'opt_v; # Dump the list of units +} + +# Dump the list of units on stdout +sub dump_list { + print "\t"; + $, = "\n\t"; + print @ARGV; + $, = ''; + print "\n"; +} + +# Scan private units +sub private_units { + return unless -d 'U'; # Nothing to be done if no 'U' entry + local(*ARGV) = *myUlist; # Really fill in @myUlist + local($MC) = $WD; # We are really in the working directory + &units_path("U"); # Locate units in the U directory + local($unit_name); # Unit's name (without .U) + local(@kept); # Array of kept units + # Loop over the units and remove duplicates (the first one seen is the one + # we keep). Also set the %myUseen H table to record private units seen. + foreach (@ARGV) { + ($unit_name) = m|^.*/(.*)\.U$|; # Get unit's name from path + next if $myUseen{$unit_name}; # Already recorded + $myUseen{$unit_name} = 1; # Record pirvate unit + push(@kept, $_); # Keep this unit + } + @ARGV = @kept; +} + +# Scan public units +sub public_units { + chdir($MC) || die "Can't find directory $MC.\n"; + &units_path("U"); # Locate units in public U directory + chdir($WD) || die "Can't go back to directory $WD.\n"; + local($path); # Relative path from $WD + local($unit_name); # Unit's name (without .U) + local(*Unit) = *main'Unit; # Unit is a global from main package + local(@kept); # Units kept + local(%warned); # Units which have already issued a message + # Loop over all the units and keep only the ones that were not found in + # the user's U directory. As it is possible two or more units with the same + # name be found in + foreach (@ARGV) { + ($unit_name) = m|^.*/(.*)\.U$|; # Get unit's name from path + next if $warned{$unit_name}; # We have already seen this unit + $warned{$unit_name} = 1; # Remember we have warned the user + if ($myUseen{$unit_name}) { # User already has a private unit + $path = $Unit{$unit_name}; # Extract user's unit path + next if $path eq $_; # Same path, we must be in mcon/ + $path =~ s|^$WD/||o; # Weed out leading working dir path + print " Your private $path overrides the public one.\n" + unless $main'opt_s; + } else { + push(@kept, $_); # We may keep this one + } + } + @ARGV = @kept; +} + +# Recursively locate units in the directory. Each file ending with .U has to be +# a unit. Others are stat()'ed, and if they are a directory, they are also +# scanned through. The $MC and @ARGV variable are dynamically set by the caller. +sub units_path { + local($dir) = @_; # Directory where units are to be found + local(@contents); # Contents of the directory + local($unit_name); # Unit's name, without final .U + local($path); # Full path of a unit + local(*Unit) = *main'Unit; # Unit is a global from main package + unless (opendir(DIR, $dir)) { + warn("Cannot open directory $dir.\n"); + return; + } + print "Locating in $MC/$dir...\n" if $main'opt_v; + @contents = readdir DIR; # Slurp the whole thing + closedir DIR; # And close dir, ready for recursion + foreach (@contents) { + next if $_ eq '.' || $_ eq '..'; + if (/\.U$/) { # A unit, definitely + ($unit_name) = /^(.*)\.U$/; + $path = "$MC/$dir/$_"; # Full path of unit + push(@ARGV, $path); # Record its path + if (defined $Unit{$unit_name}) { # Already seen this unit + if ($main'opt_v) { + ($path) = $Unit{$unit_name} =~ m|^(.*)/.*|; + print " We've already seen $unit_name.U in $path.\n"; + } + } else { + $Unit{$unit_name} = $path; # Map name to path + } + next; + } + # We have found a file which does not look like a unit. If it is a + # directory, then scan it. Otherwise skip the file. + unless (-d "$dir/$_") { + print " Skipping file $_ in $dir.\n" if $main'opt_v; + next; + } + &units_path("$dir/$_"); + print "Back to $MC/$dir...\n" if $main'opt_v; + } +} + +package main; + diff --git a/mcon/pl/makefile.pl b/mcon/pl/makefile.pl new file mode 100644 index 0000000..290c995 --- /dev/null +++ b/mcon/pl/makefile.pl @@ -0,0 +1,176 @@ +;# $Id$ +;# +;# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +;# +;# You may redistribute only under the terms of the Artistic Licence, +;# as specified in the README file that comes with the distribution. +;# You may reuse parts of this distribution only within the terms of +;# that same Artistic Licence; a copy of which may be found at the root +;# of the source tree for dist 4.0. +;# +;# $Log: makefile.pl,v $ +;# Revision 3.0.1.1 1995/09/25 09:19:42 ram +;# patch59: symbols are now sorted according to the ?Y: layout directive +;# +;# Revision 3.0 1993/08/18 12:10:26 ram +;# Baseline for dist 3.0 netwide release. +;# +;# +;# Given a list of wanted symbols in the Wanted file, produce a Makefile which +;# will compute the transitive closure of dependencies for us and give the +;# correct layout order in the Configure script. Because some conditional +;# symbols could indeed be truly wanted symbols, we build the makefile in two +;# passes. The first one will give us the complete list of units to be loaded, +;# while the second will determine the correct order. +;# +;# The external $saved_dependencies records the original dependencies we got +;# from the units' ?MAKE: lines while $dependencies is tampered with. +;# +;# Note that when the -w option is supplied, the sources are not parsed. +;# However, the config.h.SH file would be empty, because its building +;# relies on values in cmaster and shmaster arrays. It is okay for values +;# in shmaster, because they are true wanted symbols. The cmaster keys +;# have also been written, but with a leading '>' (because they are +;# not true targets for Makefile). We thus extract all these keys and +;# set the cmaster array accordingly. +;# +;# Obsolete symbols, if any found, are also part of the Wanted file, written on +;# a line starting with a '!', eventually followed by a '>' if the obsolete +;# symbol is a C one. +;# +;# These three data structures record wanted things like commands or symbols. +;# %symwanted{'sym'} is true when the symbol is wanted (transitive closure) +;# %condwanted{'sym'} when the default value of a symbol is requested +;# $wanted records the set of wanted shell symbols (as opposed to C ones) +;# +# Build the private makefile we use to compute the transitive closure of the +# previously determined dependencies. +sub build_makefile { + print "Computing optimal dependency graph...\n" unless $opt_s; + chdir('.MT') || die "Can't chdir to .MT\n"; + local($wanted); # Wanted shell symbols + &build_private; # Build a first makefile from dependencies + &compute_loadable; # Compute loadable units + &update_makefile; # Update makefile using feedback from first pass + chdir($WD) || die "Can't chdir back to $WD\n"; + # Free memory by removing useless data structures + undef $dependencies; + undef $saved_dependencies; +} + +# First pass: build a private makefile from the extracted dependency, changing +# conditional units to truly wanted ones if the symbol is used, removing the +# dependency otherwise. The original dependencies are saved. +sub build_private { + print " Building private make file...\n" unless $opt_s; + open(WANTED,"../Wanted") || die "Can't reopen Wanted.\n"; + $wanted = ' ' x 2000; # Pre-extend string + $wanted = ''; + while (<WANTED>) { + chop; + next if /^!/; # Skip obsolete symbols + if (s/^>//) { + $cmaster{$_}++; + } else { + $wanted .= "$_ "; + } + } + close WANTED; + + # The wanted symbols are sorted so that d_* (checking for C library symbol) + # come first and i_* (checking for includes) comes at the end. Grouping the + # d_* symbols together has good chances of improving the locality of the + # other questions and i_* symbols must come last since some depend on h_* + # values which prevent incompatible headers inclusions. + $wanted = join(' ', sort symbols split(' ', $wanted)); + + # Now generate the first makefile, which will be used to determine which + # symbols we really need, so that conditional dependencies may be solved. + open(MAKEFILE,">Makefile") || die "Can't create .MT/Makefile.\n"; + print MAKEFILE "SHELL = /bin/sh\n"; + print MAKEFILE "W = $wanted\n"; + $saved_dependencies = $dependencies; + $* = 1; + foreach $sym (@Cond) { + if ($symwanted{$sym}) { + $dependencies =~ s/\+($sym\s)/$1/g; + } else { + $dependencies =~ s/\+$sym(\s)/$1/g; + } + } + $* = 0; + print MAKEFILE $dependencies; + close MAKEFILE; +} + +# Ordering for symbols. Give higher priority to d_* ones and lower to i_* ones. +# If any layout priority is defined in %Layout, it is used to order the +# symbols. +sub symbols { + local($r) = $Layout{$a} <=> $Layout{$b}; + return $r if $r; + # If we come here, both symbols have the same layout priority. + if ($a =~ /^d_/) { + return -1 unless $b =~ /^d_/; + } elsif ($b =~ /^d_/) { + return 1; + } elsif ($a =~ /^i_/) { + return 1 unless $b =~ /^i_/; + } elsif ($b =~ /^i_/) { + return -1; + } + $a cmp $b; +} + +# Run the makefile produced in the first pass to find the whole set of units we +# have to load, filling in the %symwanted and %condwanted structures. +sub compute_loadable { + print " Determining loadable units...\n" unless $opt_s; + open(MAKE, "make -n |") || die "Can't run make"; + while (<MAKE>) { + s|^\s+||; # Some make print tabs before command + if (/^pick/) { + print "\t$_" if $opt_v; + ($pick,$cmd,$symbol,$unit) = split(' '); + $symwanted{$symbol}++; + $symwanted{$unit}++; + } elsif (/^cond/) { + print "\t$_" if $opt_v; + ($pick,@symbol) = split(' '); + for (@symbol) { + $condwanted{$_}++; # Default value is requested + } + } + } + close MAKE; +} + +# Now that we know all the desirable symbols, we have to rebuild +# another makefile, in order to have the units in a more optimal +# way. +# Actually, if we have both ?MAKE:a:+b and ?MAKE:d:b and 'd' is +# wanted; then 'b' will be loaded. However, 'b' is a conditional +# dependency for 'a', and it would be better if 'b' were loaded +# before 'a' is, though this is not necessary. +# It is hard to know that 'b' will be loaded *before* the first make. + +# Back to the original dependencies, make loadable units truly wanted ones and +# remove optional ones. +sub update_makefile { + print " Updating make file...\n" unless $opt_s; + open(MAKEFILE,">Makefile") || die "Can't create .MT/Makefile.\n"; + print MAKEFILE "SHELL = /bin/sh\n"; + print MAKEFILE "W = $wanted\n"; + $* = 1; + foreach $sym (@Cond) { + if ($symwanted{$sym}) { + $saved_dependencies =~ s/\+($sym\s)/$1/g; + } else { + $saved_dependencies =~ s/\+$sym(\s)/$1/g; + } + } + $* = 0; + print MAKEFILE $saved_dependencies; + close MAKEFILE; +} + diff --git a/mcon/pl/obsolete.pl b/mcon/pl/obsolete.pl new file mode 100644 index 0000000..ba9a601 --- /dev/null +++ b/mcon/pl/obsolete.pl @@ -0,0 +1,103 @@ +;# $Id$ +;# +;# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +;# +;# You may redistribute only under the terms of the Artistic Licence, +;# as specified in the README file that comes with the distribution. +;# You may reuse parts of this distribution only within the terms of +;# that same Artistic Licence; a copy of which may be found at the root +;# of the source tree for dist 4.0. +;# +;# $Log: obsolete.pl,v $ +;# Revision 3.0.1.1 1995/01/30 14:49:22 ram +;# patch49: random clean-up in &record_obsolete +;# +;# Revision 3.0 1993/08/18 12:10:27 ram +;# Baseline for dist 3.0 netwide release. +;# +;# +;# Deal with obsolete symbols. They are recorded in the %Obsolete array. +;# Optionally, the obsolete symbols may be remaped onto the new ones (option +;# -o), which enables smooth evolution from 2.0. +;# +# Record obsolete symbols association (new versus old), that is to say for a +# given old symbol, $Obsolete{'old'} = new symbol to be used. A '$' is prepended +# for all shell variables +sub record_obsolete { + local($_) = @_; + local(@obsoleted); # List of obsolete symbols + local($symbol); # New symbol which must be used + local($dollar) = s/^\$// ? '$':''; # The '$' or a null string + # Syntax for obsolete symbols specification is + # list of symbols (obsolete ones): + if (/^(\w+)\s*\((.*)\)\s*:$/) { + $symbol = "$dollar$1"; + @obsoleted = split(' ', $2); # List of obsolete symbols + } else { + if (/^(\w+)\s*\((.*):$/) { + warn "\"$file\", line $.: final ')' before ':' missing.\n"; + $symbol = "$dollar$1"; + @obsoleted = split(' ', $2); + } else { + warn "\"$file\", line $.: syntax error.\n"; + return; + } + } + foreach $val (@obsoleted) { + $_ = $dollar . $val; + if (defined $Obsolete{$_}) { + warn "\"$file\", line $.: '$_' already obsoleted by '$Obsolete{$_}'.\n"; + } else { + $Obsolete{$_} = $symbol; # Record (old, new) tuple + } + } +} + +# Dump obsolete symbols used in file 'Obsolete'. Also write Obsol_h.U and +# Obsol_sh.U to record old versus new mappings if the -o option was used. +sub dump_obsolete { + unless (-f 'Obsolete') { + open(OBSOLETE, ">Obsolete") || die "Can't create Obsolete.\n"; + } + open(OBSOL_H, ">.MT/Obsol_h.U") || die "Can't create .MT/Obsol_h.U.\n"; + open(OBSOL_SH, ">.MT/Obsol_sh.U") || die "Can't create .MT/Obsol_sh.U.\n"; + local($file); # File where obsolete symbol was found + local($old); # Name of this old symbol + local($new); # Value of the new symbol to be used + # Leave a blank line at the top so that anny added ^L will stand on a line + # by itself (the formatting process adds a ^L when a new page is needed). + format OBSOLETE_TOP = + + File | Old symbol | New symbol +-----------------------------------+----------------------+--------------------- +. + format OBSOLETE = +@<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< | @<<<<<<<<<<<<<<<<<<< | @<<<<<<<<<<<<<<<<<<< +$file, $old, $new +. + local(%seen); + foreach $key (sort keys %ofound) { + ($file, $old, $new) = ($key =~ /^(\S+)\s+(\S+)\s+(\S+)/); + write(OBSOLETE) unless $file eq 'XXX'; + next unless $opt_o; # Obsolete mapping done only with -o + next if $seen{$old}++; # Already remapped, thank you + if ($new =~ s/^\$//) { # We found an obsolete shell symbol + $old =~ s/^\$//; + print OBSOL_SH "$old=\"\$$new\"\n"; + } else { # We found an obsolete C symbol + print OBSOL_H "#ifdef $new\n"; + print OBSOL_H "#define $old $new\n"; + print OBSOL_H "#endif\n\n"; + } + } + close OBSOLETE; + close OBSOL_H; + close OBSOL_SH; + if (-s 'Obsolete') { + print "*** Obsolete symbols found -- see file 'Obsolete' for a list.\n"; + } else { + unlink 'Obsolete'; + } + undef %ofound; # Not needed any more +} + diff --git a/mcon/pl/order.pl b/mcon/pl/order.pl new file mode 100644 index 0000000..e6ef35a --- /dev/null +++ b/mcon/pl/order.pl @@ -0,0 +1,42 @@ +;# $Id$ +;# +;# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +;# +;# You may redistribute only under the terms of the Artistic Licence, +;# as specified in the README file that comes with the distribution. +;# You may reuse parts of this distribution only within the terms of +;# that same Artistic Licence; a copy of which may be found at the root +;# of the source tree for dist 4.0. +;# +;# $Log: order.pl,v $ +;# Revision 3.0 1993/08/18 12:10:28 ram +;# Baseline for dist 3.0 netwide release. +;# +;# +;# The @cmdwanted array records the output of the makefile (pick commands only). +;# The shell commands are executed right away. +;# @cmdwanted records the output of the make process (solving dependencies) +# Solve dependencies by saving the 'pick' command in @cmdwanted +sub solve_dependencies { + local(%unitseen); # Record already picked units (avoid duplicates) + print "Determining the correct order for the units...\n" unless $opt_s; + chdir('.MT') || die "Can't chdir to .MT: $!.\n"; + open(MAKE, "make -n |") || die "Can't run make"; + while (<MAKE>) { + s|^\s+||; # Some make print tabs before command + print "\t$_" if $opt_v; + if (/^pick/) { + ($pick,$cmd,$symbol,$unit) = split(' '); + push(@cmdwanted,"$cmd $symbol $unit") + unless $unitseen{"$cmd:$unit"}++; + } elsif (/^cond/) { + # Ignore conditional symbol request + } else { + chop; + system; + } + } + chdir($WD) || die "Can't chdir to $WD: $!.\n"; + close MAKE; +} + diff --git a/mcon/pl/tsort.pl b/mcon/pl/tsort.pl new file mode 100644 index 0000000..4d56fae --- /dev/null +++ b/mcon/pl/tsort.pl @@ -0,0 +1,166 @@ +;# $Id$ +;# +;# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +;# +;# You may redistribute only under the terms of the Artistic Licence, +;# as specified in the README file that comes with the distribution. +;# You may reuse parts of this distribution only within the terms of +;# that same Artistic Licence; a copy of which may be found at the root +;# of the source tree for dist 4.0. +;# +;# $Log: tsort.pl,v $ +;# Revision 3.0 1993/08/18 12:10:28 ram +;# Baseline for dist 3.0 netwide release. +;# +;# +;# The topological sort is performed using the following algorithm: +;# +;# We have a list of successors for each item; makefile dependencies of +;# the form 'a b: c d' means successors(a) = successors(b) = { c, d }. +;# From that input, we derive a number of precursors for each item. +;# In our simple example above, c and d both have two precursors and +;# a and b have none. Items with no precursors are called outsiders +;# and are left in a pool. The sort is then initiated and will continue +;# until all the items have been sorted or a cycle is found... +;# +;# Outsiders are ready to be sorted; since the topological sort is a partial +;# order, an external criterion is needed to choose one item among the ones +;# in the pool. That item is assigned a number, and the number of precursors +;# for the remaining items is updated (by following the successors of the +;# sorted item and decrementing the value for each successor). Among those, +;# if any item reaches a precursor count of zero, it becomes an outsider. +;# +;# The algorithm ends when the outsider pool is empty. If it becomes empty and +;# some items remain unsorted, then there is one or more cycles among them. +;# One way to outline that cycle first extract all those items whose precursor +;# count is minimal then visit their dependency graph to find the cycle, +;# extract only those items belonging to the cycle into the outsiders set and +;# resume the main processing stream. +;# +# +# Topological sort of Makefile dependencies with cycle enhancing. +# + +package tsort; + +# Perform the topological sort of the items and outline cycles. +sub main'tsort { + local(*Succ, *Prec) = @_; # Tables of succesors and predecessors + local(@Out); # The outsider set + local(@keys); # Current active precursors + local($item); # Item to sort + + for (@keys = keys %Prec; @keys || @Out; @keys = keys %Prec) { + &resync; # Resynchronize outsiders + if (@Out == 0) { # Cycle detected + &extract_cycle(*Prec, *Succ); + next; + } + $item = shift(@Out); # Sort current item (don't care which one) + &sort($item); # Update internal structures + } +} + +# Resynchronize the outsiders stack (those items that have no more precursors). +# If the outsiders stack becomes empty, then there is a cycle. +sub resync { + foreach $target (keys %Prec) { + if ($Prec{$target} == 0) { + delete $Prec{$target}; # We're done with this item + push(@Out, $target); # Ready to be sorted + } + } +} + +# Sort item +sub sort { + local($item) = @_; + print "(ok) $item\n" if $main'opt_d && !$Cycle; + print "(fx) $item\n" if $main'opt_d && $Cycle; + foreach $succ (split(' ', $Succ{$item})) { + # The test for definedness is necessary, since when a cycle is found, + # one item is forced out of %Prec. If we had the guarantee of no + # cycle, the the test would not be necessary and no decrementation + # could go past 0. + $Prec{$succ}-- if defined $Prec{$succ}; + } +} + +# Extract cycle... We look through the %Prec array and find all those items +# with the same lowest value. Those are a cycle, so we dump them, and make +# them new outsiders by resetting their count to 0. +sub extract_cycle { + local(*Prec, *Succ) = @_; + local($item) = (&sort_by_value(*Prec))[0]; + local($min) = $Prec{$item}; # Minimum value + local($key, $value); + local(%candidate); # Superset of the cycle we found + warn " Cycle found for:\n"; + $Cycle++; + while (($key, $value) = each %Prec) { + $candidate{$key}++ if $value == $min; + } + local(%state); # State of visited nodes (1 = cycle, -1 = dead) + local($CYCLE) = 1; # Possible member of a cycle + local($DEAD) = -1; # Dead end, no cycling possible + foreach $key (keys %candidate) { + last if $CYCLE == &visit($key, $Succ{$key}); + } + while (($key, $value) = each %candidate) { + next unless $state{$key} == $CYCLE; + $Prec{$key} = 0; # Members of cycle are new outsiders + warn "\t(#$Cycle) $key\n"; + } + local(%involved); # Items involved in the cycle... + while (($key, $value) = each %state) { + $involved{$key}++ if $state{$key} == $CYCLE; + } + &outline_cycle(*Succ, *involved); +} + +sub outline_cycle { + local(*Succ, *member) = @_; + local($key, $value); + local($depends); + local($unit); + warn " Cycle involves:\n"; + while (($key, $value) = each %Succ) { + next unless $member{$key}; + $depends = ''; + foreach $item (split(' ', $value)) { + $depends .= "$item " if $member{$item}; + } + $unit = $main'shmaster{"\$$key"}; + $unit =~ s/\s+$//; + $unit = '?' if $unit eq ''; + warn "\t($unit) $key: $depends\n"; + } +} + +# Visit a tree node, following all its successors, until we find a cycle. +# Return $CYCLE if the exploration of the node leaded to a cycle, $DEAD +# otherwise. +sub visit { + local($node, $children) = @_; # A node and its children + # If we have already visited the node, return the status value attached + # to it. + return $state{$node} if $state{$node}; + $state{$node} = $CYCLE; # Assume member of cycle + local($all_dead) = 1; # Set to 0 if at least one cycle found + foreach $child (split(' ', $children)) { + $all_dead = 0 if $CYCLE == &visit($child, $Succ{$child}); + } + $state{$node} = $DEAD if $all_dead; + $state{$node}; +} + +# Sort associative array by value +sub sort_by_value { + local(*x) = @_; + sub _by_value { $x{$a} <=> $x{$b}; } + sort _by_value keys %x; +} + +package main; + +1; diff --git a/mcon/pl/wanted.pl b/mcon/pl/wanted.pl new file mode 100644 index 0000000..20d218c --- /dev/null +++ b/mcon/pl/wanted.pl @@ -0,0 +1,263 @@ +;# $Id$ +;# +;# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +;# +;# You may redistribute only under the terms of the Artistic Licence, +;# as specified in the README file that comes with the distribution. +;# You may reuse parts of this distribution only within the terms of +;# that same Artistic Licence; a copy of which may be found at the root +;# of the source tree for dist 4.0. +;# +;# $Log: wanted.pl,v $ +;# Revision 3.0.1.2 1995/01/11 15:42:37 ram +;# patch45: added % in front of hash table names for perl5's each() (ADO) +;# patch45: tell users about possible extra file-extension lookups +;# +;# Revision 3.0.1.1 1993/10/16 13:56:05 ram +;# patch12: modified to handle ?M: lines +;# patch12: added warning when magic symbols used without proper config +;# +;# Revision 3.0 1993/08/18 12:10:29 ram +;# Baseline for dist 3.0 netwide release. +;# +;# +;# These two arrays record the file names of the files which may (or may not) +;# contain shell or C symbols known by metaconfig. +;# @SHlist records the .SH files +;# @clist records the C-like files (i.e. .[chyl]) +;# +;# These files are scanned in turn to see how many symbols known by metaconfig +;# they have. Those symbols are gathered in a Wanted file. As C symbols are +;# not true targets for the forthcoming Makefile, a ">" sign is prepended. +;# Finally, the obsolete symbols are preceded by a "!". +;# +;# When obsolete symbols are found, they are dumped in file 'Obsolete'. Two +;# files are created anyway in the .MT directory. Obsol_h.U and Obsol_sh.U which +;# respectively list the obsoleted symbols (C and shell ones). +;# Obsol_h.U records obsolete C symbols +;# Obsol_sh.U records obsolete shell symbols +;# +;# The manifake() routine has to be provided externally. +;# +# Build a wanted file from the files held in @SHlist and @clist arrays +sub build_wanted { + # If wanted file is already there, parse it to map obsolete if -o option + # was used. Otherwise, build a new one. + if (-f 'Wanted') { + &map_obsolete if $opt_o; # Build Obsol*.U files + &dump_obsolete; # Dump obsolete symbols if any + return; + } + &parse_files; +} + +sub parse_files { + print "Building a Wanted file...\n" unless $opt_s; + open(WANTED,"| sort | uniq >Wanted") || die "Can't create Wanted.\n"; + unless (-f $NEWMANI) { + &manifake; + die "No $NEWMANI--can't build a Wanted file.\n" unless -f $NEWMANI; + } + + local($search); # Where to-be-evaled script is held + local($_) = ' ' x 50000 if $opt_m; # Pre-extend pattern search space + local(%visited); # Records visited files + local(%lastfound); # Where last occurence of key was + + # Now we are a little clever, and build a loop to eval so that we don't + # have to recompile our patterns on every file. We also use "study" since + # we are searching the same string for many different things. Hauls! + + if (@clist) { + local($others) = $cext ? " $cext" : ''; + print " Scanning .[chyl]$others files for symbols...\n" + unless $opt_s; + $search = ' ' x (40 * (@cmaster + @ocmaster)); # Pre-extend + $search = "while (<>) {study;\n"; # Init loop over ARGV + foreach $key (keys(%cmaster)) { + $search .= "&cmaster('$key') if /\\b$key\\b/;\n"; + } + foreach $key (grep(!/^\$/, keys %Obsolete)) { + $search .= "&ofound('$key') if /\\b$key\\b/;\n"; + } + $search .= "}\n"; # terminate loop + print $search if $opt_d; + @ARGV = @clist; + # Swallow each file as a whole, if memory is available + undef $/ if $opt_m; + eval $search; + eval ''; + $/ = "\n"; + while (($key,$value) = each(%cmaster)) { + print WANTED $cwanted{$key}, "\n", ">$key", "\n" if $value; + } + } + + # If they don't use magic but use magically guarded symbols without + # their corresponding C symbol dependency, warn them, since they might + # not know about that portability issue. + + if (@clist && !$opt_M) { + local($nused); # list of non-used symbols + local($warning) = 0; # true when one warning issued + foreach $cmag (keys %mwanted) { # loop over all used magic symbols + next unless $cmaster{$cmag}; + $nused = ''; + foreach $cdep (split(' ', $mwanted{$cmag})) { + $nused .= " $cdep" unless $cmaster{$cdep}; + } + $nused =~ s/^ //; + $nused = "one of " . $nused if $nused =~ s/ /, /g; + if ($nused ne '') { + print " Warning: $cmag is used without $nused.\n"; + $warning++; + } + } + if ($warning) { + local($those) = $warning == 1 ? 'that' : 'those'; + local($s) = $warning == 1 ? '' : 's'; + print "Note: $those previous warning$s may be suppressed by -M.\n"; + } + } + + # Cannot remove $cmaster as it is used later on when building Configure + undef @clist; + undef %cwanted; + undef %mwanted; + %visited = (); + %lastfound = (); + + if (@SHlist) { + local($others) = $shext ? " $shext" : ''; + print " Scanning .SH$others files for symbols...\n" unless $opt_s; + $search = ' ' x (40 * (@shmaster + @oshmaster)); # Pre-extend + $search = "while (<>) {study;\n"; + # All the keys already have a leading '$' + foreach $key (keys(%shmaster)) { + $search .= "&shmaster('$key') if /\\$key\\b/;\n"; + } + foreach $key (grep (/^\$/, keys %Obsolete)) { + $search .= "&ofound('$key') if /\\$key\\b/;\n"; + } + $search .= "}\n"; + print $search if $opt_d; + @ARGV = @SHlist; + # Swallow each file as a whole, if memory is available + undef $/ if $opt_m; + eval $search; + eval ''; + $/ = "\n"; + while (($key,$value) = each(%shmaster)) { + if ($value) { + $key =~ s/^\$//; + print WANTED $key, "\n"; + } + } + } + + # Obsolete symbols, if any, are written in the Wanted file preceded by a + # '!' character. In case -w is used, we'll thus be able to correctly build + # the Obsol_h.U and Obsol_sh.U files. + + &add_obsolete; # Add obsolete symbols in Wanted file + + close WANTED; + + # If obsolete symbols where found, write an Obsolete file which lists where + # each of them appear and the new symbol to be used. Also write Obsol_h.U + # and Obsol_sh.U in .MT for later perusal. + + &dump_obsolete; # Dump obsolete symbols if any + + die "No desirable symbols found--aborting.\n" unless -s 'Wanted'; + + # Clean-up memory by freeing useless data structures + undef @SHlist; + undef %shmaster; +} + +# This routine records matches of C master keys +sub cmaster { + local($key) = @_; + $cmaster{$key}++; # This symbol is wanted + return unless $opt_t || $opt_M; # Return if neither -t nor -M + if ($opt_t && + $lastfound{$key} ne $ARGV # Never mentionned for this file ? + ) { + $visited{$ARGV}++ || print $ARGV,":\n"; + print "\t$key\n"; + $lastfound{$key} = $ARGV; + } + if ($opt_M && + defined($mwanted{$key}) # Found a ?M: symbol + ) { + foreach $csym (split(' ', $mwanted{$key})) { + $cmaster{$csym}++; # Activate C symbol dependencies + } + } +} + +# This routine records matches of obsolete keys (C or shell) +sub ofound { + local($key) = @_; + local($_) = $Obsolete{$key}; # Value of new symbol + $ofound{"$ARGV $key $_"}++; # Record obsolete match + $cmaster{$_}++ unless /^\$/; # A C hit + $shmaster{$_}++ if /^\$/; # Or a shell one + return unless $opt_t; # Continue if trace option on + if ($lastfound{$key} ne $ARGV) { # Never mentionned for this file ? + $visited{$ARGV}++ || print $ARGV,":\n"; + print "\t$key (obsolete, use $_)\n"; + $lastfound{$key} = $ARGV; + } +} + +# This routine records matches of shell master keys +sub shmaster { + local($key) = @_; + $shmaster{$key}++; # This symbol is wanted + return unless $opt_t; # Continue if trace option on + if ($lastfound{$key} ne $ARGV) { # Never mentionned for this file ? + $visited{$ARGV}++ || print $ARGV,":\n"; + print "\t$key\n"; + $lastfound{$key} = $ARGV; + } +} + +# Write obsolete symbols into the Wanted file for later perusal by -w. +sub add_obsolete { + local($file); # File where obsolete symbol was found + local($old); # Name of this old symbol + local($new); # Value of the new symbol to be used + foreach $key (sort keys %ofound) { + ($file, $old, $new) = ($key =~ /^(\S+)\s+(\S+)\s+(\S+)/); + if ($new =~ s/^\$//) { # We found an obsolete shell symbol + print WANTED "!$old\n"; + } else { # We found an obsolete C symbol + print WANTED "!>$old\n"; + } + } +} + +# Map obsolete symbols from Wanted file into %Obsolete and call dump_obsolete +# to actually build the Obsol_sh.U and Obsol_h.U files. Those will be needed +# during the Configure building phase to actually do the remaping. +# The obsolete symbols found are entered in the %ofound array, tagged as from +# file 'XXX', which is specially recognized by dump_obsolete. +sub map_obsolete { + open(WANTED, 'Wanted') || die "Can't open Wanted file.\n"; + local($new); # New symbol to be used instead of obsolete one + while (<WANTED>) { + chop; + next unless s/^!//; # Skip non-obsolete symbols + if (s/^>//) { # C symbol + $new = $Obsolete{$_}; # Fetch new symbol + $ofound{"XXX $_ $new"}++; # Record obsolete match (XXX = no file) + } else { # Shell symbol + $new = $Obsolete{"\$$_"}; # Fetch new symbol + $ofound{"XXX \$$_ $new"}++; # Record obsolete match (XXX = no file) + } + } + close WANTED; +} + diff --git a/mcon/pl/xref.pl b/mcon/pl/xref.pl new file mode 100644 index 0000000..02f4164 --- /dev/null +++ b/mcon/pl/xref.pl @@ -0,0 +1,67 @@ +;# $Id$ +;# +;# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +;# +;# You may redistribute only under the terms of the Artistic Licence, +;# as specified in the README file that comes with the distribution. +;# You may reuse parts of this distribution only within the terms of +;# that same Artistic Licence; a copy of which may be found at the root +;# of the source tree for dist 4.0. +;# +;# $Log: xref.pl,v $ +;# Revision 3.0.1.2 1995/09/25 09:20:05 ram +;# patch59: added empty p_layout stub for new ?Y: directives +;# +;# Revision 3.0.1.1 1993/10/16 13:56:23 ram +;# patch12: declared p_public for ?P: lines +;# +;# Revision 3.0 1993/08/18 12:10:31 ram +;# Baseline for dist 3.0 netwide release. +;# +;# Metaxref-dependent part of the dependency extranction. +;# +# Process the ?W: lines +sub p_wanted { + # Syntax is ?W:<shell symbols>:<C symbols> + local($active) = $_[0] =~ /^([^:]*):/; # Symbols to activate + local($look_symbols) = $_[0] =~ /:(.*)/; # When those are used + local(@syms) = split(/ /, $look_symbols); # Keep original spacing info + $active =~ s/\s+/\n/g; # One symbol per line + + # Concatenate quoted strings, so saying something like 'two words' will + # be introduced as one single symbol "two words". + local(@symbols); # Concatenated symbols to look for + local($concat) = ''; # Concatenation buffer + foreach (@syms) { + if (s/^\'//) { + $concat = $_; + } elsif (s/\'$//) { + push(@symbols, $concat . ' ' . $_); + $concat = ''; + } else { + push(@symbols, $_) unless $concat; + $concat .= ' ' . $_ if $concat; + } + } + + local($fake); # Fake unique shell symbol to reparent C symbol + + # Now record symbols in master and wanted tables + foreach (@symbols) { + $cmaster{$_} = undef; # Asks for look-up in C files + # Make a fake C symbol and associate that with the wanted symbol + # so that later we know were it comes from + $fake = &gensym; + $cwanted{$_} = "$fake"; # Attached to this symbol + push(@Master, "?$unit:$fake=''"); # Fake initialization + } +} + +# Ingnore the following: +sub p_init {} +sub p_default {} +sub p_library {} +sub p_include {} +sub p_public {} +sub p_layout {} + diff --git a/mcon/pl/xwant.pl b/mcon/pl/xwant.pl new file mode 100644 index 0000000..31508eb --- /dev/null +++ b/mcon/pl/xwant.pl @@ -0,0 +1,149 @@ +;# $Id$ +;# +;# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi +;# +;# You may redistribute only under the terms of the Artistic Licence, +;# as specified in the README file that comes with the distribution. +;# You may reuse parts of this distribution only within the terms of +;# that same Artistic Licence; a copy of which may be found at the root +;# of the source tree for dist 4.0. +;# +;# $Log: xwant.pl,v $ +;# Revision 3.0 1993/08/18 12:10:32 ram +;# Baseline for dist 3.0 netwide release. +;# +;# +;# These two arrays record the file names of the files which may (or may not) +;# contain shell or C symbols known by metaconfig. +;# @SHlist records the .SH files +;# @clist records the C-like files (i.e. .[chyl]) +;# +# Parse files and build cross references +sub build_xref { + print "Building cross-reference files...\n" unless $opt_s; + unless (-f $NEWMANI) { + &manifake; + die "No $NEWMANI--don't know who to scan.\n" unless -f $NEWMANI; + } + + open(FUI, "|sort | uniq >I.fui") || die "Can't create I.fui.\n"; + open(UIF, "|sort | uniq >I.uif") || die "Can't create I.uif.\n"; + + local($search); # Where to-be-evaled script is held + local($_) = ' ' x 50000 if $opt_m; # Pre-extend pattern search space + local(%visited); # Records visited files + local(%lastfound); # Where last occurence of key was + + # Map shell symbol names to units by reverse engineering the @Master array + # which records all the known shell symbols and the units where they + # are defined. + foreach $init (@Master) { + $init =~ /^\?(.*):(.*)=''/ && ($shwanted{"\$$2"} = $1); + } + + # Now we are a little clever, and build a loop to eval so that we don't + # have to recompile our patterns on every file. We also use "study" since + # we are searching the same string for many different things. Hauls! + + if (@clist) { + print " Scanning .[chyl] files for symbols...\n" unless $opt_s; + $search = ' ' x (40 * (@cmaster + @ocmaster)); # Pre-extend + $search = "while (<>) {study;\n"; # Init loop over ARGV + foreach $key (keys(cmaster)) { + $search .= "\$cmaster{'$key'} .= \"\$ARGV#\" if /\\b$key\\b/;\n"; + } + foreach $key (grep(!/^\$/, keys %Obsolete)) { + $search .= "&ofound('$key') if /\\b$key\\b/;\n"; + } + $search .= "}\n"; # terminate loop + print $search if $opt_d; + @ARGV = @clist; + # Swallow each file as a whole, if memory is available + undef $/ if $opt_m; + eval $search; + eval ''; + $/ = "\n"; + while (($key,$value) = each(cmaster)) { + next if $value eq ''; + foreach $file (sort(split(/#/, $value))) { + next if $file eq ''; + # %cwanted may contain value separated by \n -- take last one + @sym = split(/\n/, $cwanted{$key}); + $sym = pop(@sym); + $shell = "\$$sym"; + print FUI + pack("A35", $file), + pack("A20", "$shwanted{$shell}.U"), + $key, "\n"; + print UIF + pack("A20", "$shwanted{$shell}.U"), + pack("A25", $key), + $file, "\n"; + } + } + } + + undef @clist; + undef %cwanted; + undef %cmaster; # We're not building Configure, we may delete this + %visited = (); + %lastfound = (); + + if (@SHlist) { + print " Scanning .SH files for symbols...\n" unless $opt_s; + $search = ' ' x (40 * (@shmaster + @oshmaster)); # Pre-extend + $search = "while (<>) {study;\n"; + # All the keys already have a leading '$' + foreach $key (keys(shmaster)) { + $search .= "\$shmaster{'$key'} .= \"\$ARGV#\" if /\\$key\\b/;\n"; + } + foreach $key (grep (/^\$/, keys %Obsolete)) { + $search .= "&ofound('$key') if /\\$key\\b/;\n"; + } + $search .= "}\n"; + print $search if $opt_d; + @ARGV = @SHlist; + # Swallow each file as a whole, if memory is available + undef $/ if $opt_m; + eval $search; + eval ''; + $/ = "\n"; + while (($key,$value) = each(shmaster)) { + next if $value eq ''; + foreach $file (sort(split(/#/, $value))) { + next if $file eq ''; + print FUI + pack("A35", $file), + pack("A20", "$shwanted{$key}.U"), + $key, "\n"; + print UIF + pack("A20", "$shwanted{$key}.U"), + pack("A25", $key), + $file, "\n"; + } + } + } + + close FUI; + close UIF; + + # If obsolete symbols where found, write an Obsolete file which lists where + # each of them appear and the new symbol to be used. Also write Obsol_h.U + # and Obsol_sh.U in .MT for later perusal. + + &dump_obsolete; # Dump obsolete symbols if any + + # Clean-up memory by freeing useless data structures + undef @SHlist; + undef %shmaster; +} + +# This routine records matches of obsolete keys (C or shell) +sub ofound { + local($key) = @_; + local($_) = $Obsolete{$key}; # Value of new symbol + $ofound{"$ARGV $key $_"}++; # Record obsolete match + $cmaster{$_} .= "$ARGV#" unless /^\$/; # A C hit + $shmaster{$_} .= "$ARGV#" if /^\$/; # Or a shell one +} + |