Mercurial > hg > Applications > mh
diff miscellany/less-177/linstall @ 0:bce86c4163a3
Initial revision
author | kono |
---|---|
date | Mon, 18 Apr 2005 23:46:02 +0900 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/miscellany/less-177/linstall Mon Apr 18 23:46:02 2005 +0900 @@ -0,0 +1,861 @@ +#! /bin/sh +# Installation script for less. +# This script prompts the operator for various information +# and constructs a makefile. + +echo "This script will build a makefile for less." +echo "If you already have a file called \"makefile\" it will be overwritten," +echo "as will the file \"defines.h\"." +echo "Press RETURN to continue." +read ans + +echo "I will ask you some questions about your system." +echo "If you do not know the answer to any question," +echo "just press RETURN and I will choose a default for you." +echo "Press RETURN now." +read ans + +ECHO=./vecho +if [ ! -f $ECHO ] +then + echo "One moment..." + cc -o $ECHO vecho.c + echo "" +fi + +$ECHO "Most Unix systems are derived from either System V" +$ECHO "or Berkeley BSD 4.1, 4.2, 4.3, etc." +$ECHO "" +$ECHO "Is your system closest to:" +$ECHO " 1. System V" +$ECHO " 2. BSD 4.1" +$ECHO " 3. BSD 4.2 or later" +$ECHO " 4. Xenix" +$ECHO "Enter a number, or just RETURN if you don't know: \c" +read ans +xenix=0 +case "X$ans" in +X1) sys=sys5; sysname="System V" ;; +X2) sys=bsd; bsd41=1; sysname="BSD 4.1" ;; +X3) sys=bsd; bsd41=0; sysname="BSD 4.2" ;; +X4) sys=sys5; xenix=1; sysname="Xenix" ;; +*) sys=unknown ;; +esac +$ECHO "" + +DATE=`date` +cat >makefile <<EOF +# Makefile for "less" +# Generated $DATE by $0. +EOF + +cat >>makefile <<"EOF" +# +# Invoked as: +# make all +# or make install +# Plain "make" is equivalent to "make all". +# +# If you add or delete functions, remake funcs.h by doing: +# make newfuncs +# This depends on the coding convention of function headers looking like: +# " \t public <function-type> \n <function-name> ( ... ) " +# +# Also provided: +# make lint # Runs "lint" on all the sources. +# make clean # Removes "less" and the .o files. +# make clobber # Pretty much the same as make "clean". + +SHELL = /bin/sh + +EOF + +cat >defines.h <<EOF +/* Definition file for less */ +/* Generated $DATE by $0. */ + +EOF + +cat >>defines.h <<EOF +/* + * Define XENIX if running under XENIX 3.0. + */ +#define XENIX $xenix + +EOF +$ECHO "" + + + +if [ "X$sys" = "Xunknown" ] +then + alldefault=0 +else + def=yes + alldefault=1 + $ECHO "Do you want to use ALL the defaults for $sysname?" + $ECHO " Enter \"yes\" if you have a STANDARD $sysname." + $ECHO " Enter \"no\" if you want to change any of the defaults. [$def] \c" + read ans + case "X$ans" in + X[yY]*) alldefault=1 ;; + X[nN]*) alldefault=0 ;; + esac + $ECHO "" +fi + +if [ $alldefault = 0 ] +then + alloptional=0 +else + def=yes + alloptional=1 + $ECHO "Do you want to use all the optional features of less?" + $ECHO " Less has several features which you may or may not" + $ECHO " wish to include, such as shell escapes." + $ECHO " Enter \"yes\" if you want to include ALL the optional features." + $ECHO " Enter \"no\" if you want to select individual features. [$def] \c" + read ans + case "X$ans" in + X[yY]*) alloptional=1 ;; + X[nN]*) alloptional=0 ;; + esac + $ECHO "" +fi + + + +def=yes +x=1 +if [ $alldefault = 0 ] +then + $ECHO "Does your C compiler support the \"void\" type? [$def] \c" + read ans + case "X$ans" in + X[yY]*) x=1 ;; + X[nN]*) x=0 ;; + esac + $ECHO "" +fi +cat >>defines.h <<EOF +/* + * VOID is 1 if your C compiler supports the "void" type, + * 0 if it does not. + */ +#define VOID $x + +EOF + + + +def=yes +x="void *" +if [ $alldefault = 0 ] +then + $ECHO "Does your C compiler support the \"void *\" type? [$def] \c" + read ans + case "X$ans" in + X[yY]*) x="void *" ;; + X[nN]*) x="char *" ;; + esac + $ECHO "" +fi +cat >>defines.h <<EOF +/* + * VOID_POINTER is the definition of a pointer to any object. + */ +#define VOID_POINTER $x + +EOF + + + +def=long +if [ $alldefault = 0 ] +then + $ECHO "What type is the \"offset\" argument to lseek? [$def] \c" + read ans + if [ "X$ans" != "X" ] + then + def=$ans + fi + $ECHO "" +fi +cat >>defines.h <<EOF +/* + * offset_t is the type which lseek() returns. + * It is also the type of lseek()'s second argument. + */ +#define offset_t $def + +EOF + + + + +def=yes; x=1 +if [ $alldefault = 0 ] +then + $ECHO "Most Unix systems provide the stat() function." + $ECHO "Does your system have stat()? [$def] \c" + read ans + case "X$ans" in + X[yY]*) x=1 ;; + X[nN]*) x=0 ;; + esac + $ECHO "" +fi +cat >>defines.h <<EOF +/* + * STAT is 1 if your system has the stat() call. + */ +#define STAT $x + +EOF + + + + +def=yes; x=1 +if [ $alldefault = 0 ] +then + $ECHO "Most Unix systems provide the perror() function." + $ECHO "Does your system have perror()? [$def] \c" + read ans + case "X$ans" in + X[yY]*) x=1 ;; + X[nN]*) x=0 ;; + esac + $ECHO "" +fi +cat >>defines.h <<EOF +/* + * PERROR is 1 if your system has the perror() call. + * (Actually, if it has sys_errlist, sys_nerr and errno.) + */ +#define PERROR $x + +EOF + + + + +def=yes; x=1 +if [ $alldefault = 0 ] +then + $ECHO "Most Unix systems provide the time() function." + $ECHO "Does your system have time()? [$def] \c" + read ans + case "X$ans" in + X[yY]*) x=1 ;; + X[nN]*) x=0 ;; + esac + $ECHO "" +fi +cat >>defines.h <<EOF +/* + * GET_TIME is 1 if your system has the time() call. + */ +#define GET_TIME $x + +EOF + +if [ $x = 0 ] +then + $ECHO "What is the APPROXIMATE performance of your" + $ECHO "machine, as a percentage of a Vax 11/750?" + $ECHO "(Enter 100 if your machine is as fast as a Vax," + $ECHO " 50 if it is half as fast, 200 if it is twice as fast, etc.)" + $ECHO "The accuracy of this information is not critical." + while : + do + $ECHO "Percent of Vax 11/750 [100]: \c" + read ans + if [ "X$ans" = "X" ] + then + ans=100 + fi + longloop=`expr "$ans" "*" 3` + if [ $? = 0 ] + then + break + fi + $ECHO "Enter a number please!" + done + $ECHO "" + + cat >>defines.h <<EOF +/* + * LONGLOOP is the number of lines we should process in the line number + * scan before displaying a warning that it will take a while. + */ +#define LONGLOOP ($longloop) +EOF +fi + + + + +if [ "$sys" = "bsd" ] +then + def=no; x=0 +else + def=yes; x=1 +fi +if [ $alldefault = 0 ] +then + $ECHO "Most System V systems have termio.h, while most" + $ECHO "Berkeley-derived systems have sgtty.h." + $ECHO "Does your system have termio.h? [$def] \c" + read ans + case "X$ans" in + X[yY]*) x=1 ;; + X[nN]*) x=0 ;; + esac + $ECHO "" +fi +cat >>defines.h <<EOF +/* + * TERMIO is 1 if your system has /usr/include/termio.h. + * This is normally the case for System 5. + * If TERMIO is 0 your system must have /usr/include/sgtty.h. + * This is normally the case for BSD. + */ +#define TERMIO $x + +EOF + + + + +if [ "$sys" = "bsd" -a "$bsd41" = "0" ] +then + def=yes; x=1 +else + def=no; x=0 +fi +if [ $alldefault = 0 ] +then + $ECHO "Most BSD 4.2 and 4.3 systems have both _setjmp() and setjmp()." + $ECHO "Most System V and BSD 4.1 systems have only setjmp()." + $ECHO "Does your system have both _setjmp() and setjmp()? [$def] \c" + read ans + case "X$ans" in + X[yY]*) x=1 ;; + X[nN]*) x=0 ;; + esac + $ECHO "" +fi +cat >>defines.h <<EOF +/* + * HAS__SETJMP is 1 if your system has the _setjmp() call. + * This is normally the case only for BSD 4.2 and up, + * not for BSD 4.1 or System 5. + */ +#define HAS__SETJMP $x + +EOF + + + + +if [ "$sys" = "bsd" -a "$bsd41" = "0" ] +then + def=yes; x=1 +else + def=no; x=0 +fi +if [ $alldefault = 0 ] +then + $ECHO "Most BSD 4.2 and 4.3 systems have the sigsetmask() call." + $ECHO "Most System V and BSD 4.1 systems do not." + $ECHO "Does your system have sigsetmask()? [$def] \c" + read ans + case "X$ans" in + X[yY]*) x=1 ;; + X[nN]*) x=0 ;; + esac + $ECHO "" +fi +cat >>defines.h <<EOF +/* + * SIGSETMASK is 1 if your system has the sigsetmask() call. + * This is normally the case only for BSD 4.2, + * not for BSD 4.1 or System 5. + */ +#define SIGSETMASK $x + +EOF + + + + +if [ "$sys" = "sys5" -a "$xenix" = "0" ] +then + def=yes; x=1 +else + def=no; x=0 +fi +if [ $alldefault = 0 ] +then + $ECHO "Some SCO System V systems need sys/ptem.h included to get" + $ECHO "the size of the screen (struct winsize)." + $ECHO "Does your system need sys/ptem.h? [$def] \c" + read ans + case "X$ans" in + X[yY]*) x=1 ;; + X[nN]*) x=0 ;; + esac + $ECHO "" +fi +cat >>defines.h <<EOF +/* + * NEED_PTEM_H is 1 if your system needs sys/ptem.h to declare struct winsize. + * This is normally the case only for SCOs System V. + */ +#define NEED_PTEM_H $x + +EOF + + +if [ "$sys" = "bsd" ] +then + def=2; REGCMP=0;RECOMP=1 +else + def=1; REGCMP=1;RECOMP=0 +fi +if [ $alldefault = 0 ] +then + $ECHO "Most System V systems have the regcmp() function." + $ECHO "Most Berkeley-derived systems have the re_comp() function." + $ECHO "Does your system have:" + $ECHO " 1. regcmp" + $ECHO " 2. re_comp" + $ECHO " 3. neither [$def] \c" + read ans + case "X$ans" in + X1) REGCMP=1;RECOMP=0 ;; + X2) REGCMP=0;RECOMP=1 ;; + X3) REGCMP=0;RECOMP=0 ;; + esac + $ECHO "" +fi +cat >>defines.h <<EOF +/* + * REGCMP is 1 if your system has the regcmp() function. + * This is normally the case for System 5. + * RECOMP is 1 if your system has the re_comp() function. + * This is normally the case for BSD. + * If neither is 1, pattern matching is supported, but without metacharacters. + */ +#define REGCMP $REGCMP +#define RECOMP $RECOMP + +EOF + + + + +def=yes +x=1 +if [ $alloptional = 0 ] +then + $ECHO "Do you wish to allow shell escapes? [$def] \c" + read ans + case "X$ans" in + X[yY]*) x=1 ;; + X[nN]*) x=0 ;; + esac + $ECHO "" +fi +cat >>defines.h <<EOF +/* + * SHELL_ESCAPE is 1 if you wish to allow shell escapes. + * (This is possible only if your system supplies the system() function.) + */ +#define SHELL_ESCAPE $x + +EOF + + + +def=yes +x=1 +edname="vi" +if [ $alloptional = 0 ] +then + $ECHO "Do you wish to allow editor escapes? [$def] \c" + read ans + case "X$ans" in + X[nN]*) x=0; edname="" ;; + X[yY]*) x=1 + $ECHO "What is the pathname of the default editor? [$edname] \c" + read ans + if [ "x$ans" != "x" ] + then + edname=$ans + fi + ;; + esac + $ECHO "" +fi +cat >>defines.h <<EOF +/* + * EDITOR is 1 if you wish to allow editor invocation (the "v" command). + * (This is possible only if your system supplies the system() function.) + * EDIT_PGM is the name of the (default) editor to be invoked. + */ +#define EDITOR $x +#define EDIT_PGM "$edname" + +EOF + + + + +def=yes +x=1 +if [ $alloptional = 0 ] +then + $ECHO "Do you wish to support \"tag\" files? [$def] \c" + read ans + case "X$ans" in + X[yY]*) x=1 ;; + X[nN]*) x=0 ;; + esac + $ECHO "" +fi +cat >>defines.h <<EOF +/* + * TAGS is 1 if you wish to support tag files. + */ +#define TAGS $x + +EOF + + + +def=yes +x=1 +if [ $alloptional = 0 ] +then + $ECHO "Do you wish to allow user-defined key definitions? [$def] \c" + read ans + case "X$ans" in + X[yY]*) x=1 ;; + X[nN]*) x=0 ;; + esac + $ECHO "" +fi +USERFILE=$x +cat >>defines.h <<EOF +/* + * USERFILE is 1 if you wish to allow a .less file to specify + * user-defined key bindings. + */ +#define USERFILE $x + +EOF + + + +def=yes +x=1 +if [ $alldefault = 0 ] +then + $ECHO "If your system provides the popen() function and" + $ECHO "the \"echo\" shell command, you may allow shell metacharacters" + $ECHO "to be expanded in filenames." + $ECHO "Do you wish to allow shell metacharacters in filenames? [$def] \c" + read ans + case "X$ans" in + X[yY]*) x=1 ;; + X[nN]*) x=0 ;; + esac + $ECHO "" +fi +cat >>defines.h <<EOF +/* + * GLOB is 1 if you wish to have shell metacharacters expanded in filenames. + * This will generally work if your system provides the "popen" function + * and the "echo" shell command. + */ +#define GLOB $x + +/* + * PIPEC is 1 if you wish to have the "|" command + * which allows the user to pipe data into a shell command. + */ +#define PIPEC $x + +EOF + + + +def=yes +x=1 +if [ $alloptional = 0 ] +then + $ECHO "Do you wish to allow log files (-l option)? [$def] \c" + read ans + case "X$ans" in + X[yY]*) x=1 ;; + X[nN]*) x=0 ;; + esac + $ECHO "" +fi +cat >>defines.h <<EOF +/* + * LOGFILE is 1 if you wish to allow the -l option (to create log files). + */ +#define LOGFILE $x + +EOF + +cat >>defines.h <<EOF +/* + * ONLY_RETURN is 1 if you want RETURN to be the only input which + * will continue past an error message. + * Otherwise, any key will continue past an error message. + */ +#define ONLY_RETURN 0 + +EOF + +cat >>makefile <<EOF + +########################################################################## +# Compilation environment. +########################################################################## + +EOF + + + +if [ "$xenix" = "1" ] +then + LIBS="-ltermlib" +elif [ "$sys" = "bsd" ] +then + LIBS="-ltermcap" +else + LIBS="-lcurses -ltermcap -lPW" +fi +if [ $alldefault = 0 ] +then + $ECHO "To build \"less\", you must link with libraries supplied by your system." + $ECHO "(If this needs to be changed later, edit the makefile" + $ECHO "and change the definition of LIBS.)" + $ECHO "What libraries should be used [$LIBS] \c" + read ans + if [ "X$ans" != "X" ] + then + LIBS="$ans" + fi + $ECHO "" +fi +cat >>makefile <<EOF +# LIBS is the list of libraries needed. +LIBS = $LIBS + +EOF + + + +INSTALL_LESS="/usr/local/bin/less" +INSTALL_KEY="/usr/local/bin/lesskey" +INSTALL_HELP="/usr/local/bin/less.hlp" +INSTALL_LESSMAN="/usr/man/man1/less.1" +INSTALL_KEYMAN="/usr/man/man1/lesskey.1" +LESS_MANUAL="less.nro" +KEY_MANUAL="lesskey.nro" +if [ $alldefault = 0 ] +then + $ECHO "What is the name of the \"public\" (installed) version of less?" + $ECHO " [$INSTALL_LESS] \c" + read ans + if [ "X$ans" != "X" ] + then + INSTALL_LESS="$ans" + fi + $ECHO "What is the name of the \"public\" (installed) version of lesskey?" + $ECHO " [$INSTALL_KEY] \c" + read ans + if [ "X$ans" != "X" ] + then + INSTALL_KEY="$ans" + fi + $ECHO "What is the name of the \"public\" (installed) version of the help file?" + $ECHO " [$INSTALL_HELP] \c" + read ans + if [ "X$ans" != "X" ] + then + INSTALL_HELP="$ans" + fi + $ECHO "What is the name of the \"public\" (installed) version of the less manual page?" + $ECHO " [$INSTALL_LESSMAN] \c" + read ans + if [ "X$ans" != "X" ] + then + INSTALL_LESSMAN="$ans" + fi + $ECHO "What is the name of the \"public\" (installed) version of the lesskey manual page?" + $ECHO " [$INSTALL_KEYMAN] \c" + read ans + if [ "X$ans" != "X" ] + then + INSTALL_KEYMAN="$ans" + fi + $ECHO "" +fi + +cat >>defines.h <<EOF +/* + * HELPFILE is the full pathname of the help file. + */ +#define HELPFILE "$INSTALL_HELP" + +EOF + +cat >>makefile <<EOF +# INSTALL_LESS is a list of the public versions of less. +# INSTALL_KEY is a list of the public versions of lesskey. +# INSTALL_HELP is a list of the public version of the help file. +# INSTALL_LESSMAN is a list of the public versions of the less manual page. +# INSTALL_KEYMAN is a list of the public versions of the lesskey manual page. +INSTALL_LESS = \$(ROOT)$INSTALL_LESS +INSTALL_KEY = \$(ROOT)$INSTALL_KEY +INSTALL_HELP = \$(ROOT)$INSTALL_HELP +INSTALL_LESSMAN = \$(ROOT)$INSTALL_LESSMAN +INSTALL_KEYMAN = \$(ROOT)$INSTALL_KEYMAN +LESS_MANUAL = $LESS_MANUAL +KEY_MANUAL = $KEY_MANUAL +HELPFILE = $INSTALL_HELP + + +EOF + + + +cat >>makefile <<"EOF" +# OPTIM is passed to the compiler and the loader. +# It is normally "-O" but may be, for example, "-g". +OPTIM = -O + +CFLAGS = $(OPTIM) + + + +########################################################################## +# Files +########################################################################## + +SRC1 = ch.c cmdbuf.c command.c decode.c help.c input.c +SRC2 = line.c linenum.c main.c edit.c option.c optfunc.c \ + opttbl.c os.c +SRC3 = charset.c filename.c lsystem.c output.c position.c ifile.c \ + brac.c forwback.c jump.c search.c +SRC4 = mark.c prompt.c screen.c signal.c tags.c ttyin.c version.c + +SRC = $(SRC1) $(SRC2) $(SRC3) $(SRC4) + +OBJ = brac.o ch.o charset.o cmdbuf.o command.o decode.o edit.o filename.o \ + forwback.o help.o input.o jump.o line.o linenum.o \ + lsystem.o main.o option.o optfunc.o opttbl.o os.o \ + output.o position.o mark.o ifile.o prompt.o screen.o \ + search.o signal.o tags.o ttyin.o version.o + + +########################################################################## +# Rules for building stuff +########################################################################## + +EOF + +if [ "$USERFILE" = "1" ] +then + cat >>makefile <<"EOF" +all: less lesskey +install: install_less install_help install_key install_lman install_kman +EOF +else + cat >>makefile <<"EOF" +all: less +install: install_less install_help install_lman +EOF +fi + +cat >>makefile <<"EOF" + +less: $(OBJ) + $(CC) $(LDFLAGS) $(OPTIM) -o less $(OBJ) $(LIBS) $(LDLIBS) + +lesskey: lesskey.o + $(CC) $(LDFLAGS) $(OPTIM) -o lesskey lesskey.o $(LDLIBS) + +install_less: less + for f in $(INSTALL_LESS); do rm -f $$f; cp less $$f; done + touch install_less + +install_key: lesskey + for f in $(INSTALL_KEY); do rm -f $$f; cp lesskey $$f; done + touch install_key + +install_help: less.hlp + for f in $(INSTALL_HELP); do rm -f $$f; cp less.hlp $$f; done + touch install_help + +install_lman: $(LESS_MANUAL) + for f in $(INSTALL_LESSMAN); do rm -f $$f; cp $(LESS_MANUAL) $$f; done + touch install_lman + +install_kman: $(KEY_MANUAL) + for f in $(INSTALL_KEYMAN); do rm -f $$f; cp $(KEY_MANUAL) $$f; done + touch install_kman + +########################################################################## +# Maintenance +########################################################################## + +lint: + lint -hp $(SRC) + +newfuncs funcs.h: + if [ -f funcs.h ]; then mv funcs.h funcs.h.OLD; fi + awk -f mkfuncs.awk $(SRC) >funcs.h + +clean: + rm -f $(OBJ) lesskey.o less lesskey vecho + +clobber: + rm -f *.o less lesskey vecho install_less install_key \ + install_help install_lman install_kman + +shar: + shar -v README CHANGES linstall \ + less.nro lesskey.nro \ + vecho.c mkfuncs.awk > less1.shr + shar -v less.man lesskey.man \ + less.h position.h cmd.h option.h > less2.shr + shar -v lesskey.c $(SRC1) > less3.shr + shar -v $(SRC2) > less4.shr + shar -v $(SRC3) less.hlp > less5.shr + shar -v $(SRC4) funcs.h > less6.shr + + +########################################################################## +# Dependencies +########################################################################## + +$(OBJ): less.h funcs.h defines.h position.h +command.o decode.o: cmd.h +option.o opttbl.o optfunc.o: option.h + +lesskey.o: less.h funcs.h defines.h cmd.h + +EOF +$ECHO "" + +$ECHO "The makefile and defines.h have been built." +$ECHO "You should check them to make sure everything is as you want it to be." +$ECHO "When you are satisfied, just type \"make\", and \"less\" will be built."