xref: /original-bsd/usr.bin/more/linstall (revision d919d844)
1#! /bin/sh
2# Installation script for less.
3# This script prompts the operator for various information
4# and constructs a makefile.
5
6echo "This script will build a makefile for less."
7echo "If you already have a file called \"makefile\" it will be overwritten."
8echo "Press RETURN to continue."
9read ans
10
11echo "I will ask you some questions about your system."
12echo "If you do not know the answer to any question,"
13echo "just press RETURN and I will choose a default for you."
14echo "Press RETURN now."
15read ans
16
17ECHO=./vecho
18if [ ! -x $ECHO ]
19then
20	echo "One moment..."
21	cc -o $ECHO vecho.c
22	echo ""
23fi
24
25$ECHO "Most Unix systems are derived from either System V"
26$ECHO "or Berkeley BSD 4.1, 4.2, 4.3, etc."
27$ECHO ""
28$ECHO "Is your system closest to:"
29$ECHO "  1. System V"
30$ECHO "  2. BSD 4.1"
31$ECHO "  3. BSD 4.2 or later"
32$ECHO "  4. Xenix"
33$ECHO "Enter a number, or just RETURN if you don't know: \c"
34read ans
35xenix=0
36case "X$ans" in
37X1) sys=sys5; sysname="System V" ;;
38X2) sys=bsd; bsd41=1; sysname="BSD 4.1" ;;
39X3) sys=bsd; bsd41=0; sysname="BSD 4.2" ;;
40X4) sys=sys5; xenix=1; sysname="Xenix" ;;
41*) sys=unknown ;;
42esac
43$ECHO ""
44
45DATE=`date`
46cat >makefile <<EOF
47# Makefile for "less"
48# Generated $DATE by $0.
49EOF
50
51cat >>makefile <<"EOF"
52#
53# Invoked as:
54#	make all
55#   or	make install
56# Plain "make" is equivalent to "make all".
57#
58# If you add or delete functions, remake funcs.h by doing:
59#	make newfuncs
60# This depends on the coding convention of function headers looking like:
61#	" \t public <function-type> \n <function-name> ( ... ) "
62#
63# Also provided:
64#	make lint	# Runs "lint" on all the sources.
65#	make clean	# Removes "less" and the .o files.
66#	make clobber	# Pretty much the same as make "clean".
67
68SHELL = /bin/sh
69
70EOF
71
72cat >defines.h <<EOF
73/* Definition file for less */
74/* Generated $DATE by $0. */
75
76EOF
77
78cat >>defines.h <<EOF
79/*
80 * Define XENIX if running under XENIX 3.0.
81 */
82#define	XENIX		$xenix
83
84EOF
85$ECHO ""
86
87
88
89if [ "X$sys" = "Xunknown" ]
90then
91	alldefault=0
92else
93	def=yes
94	alldefault=1
95	$ECHO "Do you want to use ALL the defaults for $sysname?"
96	$ECHO "  Enter \"yes\" if you have a STANDARD $sysname."
97	$ECHO "  Enter \"no\" if you want to change any of the defaults. [$def] \c"
98	read ans
99	case "X$ans" in
100	X[yY]*) alldefault=1 ;;
101	X[nN]*) alldefault=0 ;;
102	esac
103	$ECHO ""
104fi
105
106if [ $alldefault = 0 ]
107then
108	alloptional=0
109else
110	def=yes
111	alloptional=1
112	$ECHO "Do you want to use all the optional features of less?"
113	$ECHO "  Less has several features which you may or may not"
114	$ECHO "  wish to include, such as shell escapes."
115	$ECHO "  Enter \"yes\" if you want to include ALL the optional features."
116	$ECHO "  Enter \"no\" if you want to select individual features. [$def] \c"
117	read ans
118	case "X$ans" in
119	X[yY]*) alloptional=1 ;;
120	X[nN]*) alloptional=0 ;;
121	esac
122	$ECHO ""
123fi
124
125
126
127def=yes
128x=1
129if [ $alldefault = 0 ]
130then
131	$ECHO "Does your C compiler support the \"void\" type? [$def] \c"
132	read ans
133	case "X$ans" in
134	X[yY]*) x=1 ;;
135	X[nN]*) x=0 ;;
136	esac
137	$ECHO ""
138fi
139cat >>defines.h <<EOF
140/*
141 * VOID is 1 if your C compiler supports the "void" type,
142 * 0 if it does not.
143 */
144#define	VOID		$x
145
146EOF
147
148
149
150def=long
151if [ $alldefault = 0 ]
152then
153	$ECHO "What type is the \"offset\" argument to lseek? [$def] \c"
154	read ans
155	if [ "X$ans" != "X" ]
156	then
157		def=$ans
158	fi
159	$ECHO ""
160fi
161cat >>defines.h <<EOF
162/*
163 * offset_t is the type which lseek() returns.
164 * It is also the type of lseek()'s second argument.
165 */
166#define	offset_t	$def
167
168EOF
169
170
171
172
173def=yes; x=1
174if [ $alldefault = 0 ]
175then
176	$ECHO "Most Unix systems provide the stat() function."
177	$ECHO "Does your system have stat()? [$def] \c"
178	read ans
179	case "X$ans" in
180	X[yY]*) x=1 ;;
181	X[nN]*) x=0 ;;
182	esac
183	$ECHO ""
184fi
185cat >>defines.h <<EOF
186/*
187 * STAT is 1 if your system has the stat() call.
188 */
189#define	STAT		$x
190
191EOF
192
193
194
195
196def=yes; x=1
197if [ $alldefault = 0 ]
198then
199	$ECHO "Most Unix systems provide the perror() function."
200	$ECHO "Does your system have perror()? [$def] \c"
201	read ans
202	case "X$ans" in
203	X[yY]*) x=1 ;;
204	X[nN]*) x=0 ;;
205	esac
206	$ECHO ""
207fi
208cat >>defines.h <<EOF
209/*
210 * PERROR is 1 if your system has the perror() call.
211 * (Actually, if it has sys_errlist, sys_nerr and errno.)
212 */
213#define	PERROR		$x
214
215EOF
216
217
218
219
220def=yes; x=1
221if [ $alldefault = 0 ]
222then
223	$ECHO "Most Unix systems provide the time() function."
224	$ECHO "Does your system have time()? [$def] \c"
225	read ans
226	case "X$ans" in
227	X[yY]*) x=1 ;;
228	X[nN]*) x=0 ;;
229	esac
230	$ECHO ""
231fi
232cat >>defines.h <<EOF
233/*
234 * GET_TIME is 1 if your system has the time() call.
235 */
236#define	GET_TIME	$x
237
238EOF
239
240if [ $x = 0 ]
241then
242	$ECHO "What is the APPROXIMATE performance of your"
243	$ECHO "machine, as a percentage of a Vax 11/750?"
244	$ECHO "(Enter 100 if your machine is as fast as a Vax,"
245	$ECHO " 50 if it is half as fast, 200 if it is twice as fast, etc.)"
246	$ECHO "The accuracy of this information is not critical."
247	while :
248	do
249		$ECHO "Percent of Vax 11/750 [100]: \c"
250		read ans
251		if [ "X$ans" = "X" ]
252		then
253			ans=100
254		fi
255		longloop=`expr "$ans" "*" 3`
256		if [ $? = 0 ]
257		then
258			break
259		fi
260		$ECHO "Enter a number please!"
261	done
262	$ECHO ""
263
264	cat >>defines.h <<EOF
265/*
266 * LONGLOOP is the number of lines we should process in the line number
267 * scan before displaying a warning that it will take a while.
268 */
269#define	LONGLOOP	($longloop)
270EOF
271fi
272
273
274
275
276if [ "$sys" = "bsd" ]
277then
278	def=no; x=0
279else
280	def=yes; x=1
281fi
282if [ $alldefault = 0 ]
283then
284	$ECHO "Most System V systems have termio.h, while most"
285	$ECHO "Berkeley-derived systems have sgtty.h."
286	$ECHO "Does your system have termio.h? [$def] \c"
287	read ans
288	case "X$ans" in
289	X[yY]*) x=1 ;;
290	X[nN]*) x=0 ;;
291	esac
292	$ECHO ""
293fi
294cat >>defines.h <<EOF
295/*
296 * TERMIO is 1 if your system has /usr/include/termio.h.
297 * This is normally the case for System 5.
298 * If TERMIO is 0 your system must have /usr/include/sgtty.h.
299 * This is normally the case for BSD.
300 */
301#define	TERMIO		$x
302
303EOF
304
305
306
307
308if [ "$sys" = "bsd" -a "$bsd41" = "0" ]
309then
310	def=yes; x=1
311else
312	def=no; x=0
313fi
314if [ $alldefault = 0 ]
315then
316	$ECHO "Most BSD 4.2 and 4.3 systems have the sigsetmask() call."
317	$ECHO "Most System V and BSD 4.1 systems do not."
318	$ECHO "Does your system have sigsetmask()? [$def] \c"
319	read ans
320	case "X$ans" in
321	X[yY]*) x=1 ;;
322	X[nN]*) x=0 ;;
323	esac
324	$ECHO ""
325fi
326cat >>defines.h <<EOF
327/*
328 * SIGSETMASK is 1 if your system has the sigsetmask() call.
329 * This is normally the case only for BSD 4.2,
330 * not for BSD 4.1 or System 5.
331 */
332#define	SIGSETMASK	$x
333
334EOF
335
336
337
338if [ "$sys" = "bsd" ]
339then
340	def=2; REGCMP=0;RECOMP=1
341else
342	def=1; REGCMP=1;RECOMP=0
343fi
344if [ $alldefault = 0 ]
345then
346	$ECHO "Most System V systems have the regcmp() function."
347	$ECHO "Most Berkeley-derived systems have the re_comp() function."
348	$ECHO "Does your system have:"
349	$ECHO "  1. regcmp"
350	$ECHO "  2. re_comp"
351	$ECHO "  3. neither   [$def] \c"
352	read ans
353	case "X$ans" in
354	X1) REGCMP=1;RECOMP=0 ;;
355	X2) REGCMP=0;RECOMP=1 ;;
356	X3) REGCMP=0;RECOMP=0 ;;
357	esac
358	$ECHO ""
359fi
360cat >>defines.h <<EOF
361/*
362 * REGCMP is 1 if your system has the regcmp() function.
363 * This is normally the case for System 5.
364 * RECOMP is 1 if your system has the re_comp() function.
365 * This is normally the case for BSD.
366 * If neither is 1, pattern matching is supported, but without metacharacters.
367 */
368#define	REGCMP		$REGCMP
369#define	RECOMP		$RECOMP
370
371EOF
372
373
374
375
376def=yes
377x=1
378if [ $alloptional = 0 ]
379then
380	$ECHO "Do you wish to allow shell escapes? [$def] \c"
381	read ans
382	case "X$ans" in
383	X[yY]*) x=1 ;;
384	X[nN]*) x=0 ;;
385	esac
386	$ECHO ""
387fi
388cat >>defines.h <<EOF
389/*
390 * SHELL_ESCAPE is 1 if you wish to allow shell escapes.
391 * (This is possible only if your system supplies the system() function.)
392 */
393#define	SHELL_ESCAPE	$x
394
395EOF
396
397
398
399def=yes
400x=1
401edname="vi"
402if [ $alloptional = 0 ]
403then
404	$ECHO "Do you wish to allow editor escapes? [$def] \c"
405	read ans
406	case "X$ans" in
407	X[nN]*) x=0; edname="" ;;
408	X[yY]*) x=1
409		$ECHO "What is the pathname of the default editor? [$edname] \c"
410		read ans
411		if [ "x$ans" != "x" ]
412		then
413			edname=$ans
414		fi
415		;;
416	esac
417	$ECHO ""
418fi
419cat >>defines.h <<EOF
420/*
421 * EDITOR is 1 if you wish to allow editor invocation (the "v" command).
422 * (This is possible only if your system supplies the system() function.)
423 * EDIT_PGM is the name of the (default) editor to be invoked.
424 */
425#define	EDITOR		$x
426#define	EDIT_PGM	"$edname"
427
428EOF
429
430
431
432
433def=yes
434x=1
435if [ $alloptional = 0 ]
436then
437	$ECHO "Do you wish to support \"tag\" files? [$def] \c"
438	read ans
439	case "X$ans" in
440	X[yY]*) x=1 ;;
441	X[nN]*) x=0 ;;
442	esac
443	$ECHO ""
444fi
445cat >>defines.h <<EOF
446/*
447 * TAGS is 1 if you wish to support tag files.
448 */
449#define	TAGS		$x
450
451EOF
452
453
454
455def=yes
456x=1
457if [ $alloptional = 0 ]
458then
459	$ECHO "Do you wish to allow user-defined key definitions? [$def] \c"
460	read ans
461	case "X$ans" in
462	X[yY]*) x=1 ;;
463	X[nN]*) x=0 ;;
464	esac
465	$ECHO ""
466fi
467USERFILE=$x
468cat >>defines.h <<EOF
469/*
470 * USERFILE is 1 if you wish to allow a .less file to specify 
471 * user-defined key bindings.
472 */
473#define	USERFILE	$x
474
475EOF
476
477
478
479def=yes
480x=1
481if [ $alldefault = 0 ]
482then
483	$ECHO "If your system provides the popen() function and"
484	$ECHO "the \"$ECHO\" shell command, you may allow shell metacharacters"
485	$ECHO "to be expanded in filenames."
486	$ECHO "Do you wish to allow shell metacharacters in filenames? [$def] \c"
487	read ans
488	case "X$ans" in
489	X[yY]*) x=1 ;;
490	X[nN]*) x=0 ;;
491	esac
492	$ECHO ""
493fi
494cat >>defines.h <<EOF
495/*
496 * GLOB is 1 if you wish to have shell metacharacters expanded in filenames.
497 * This will generally work if your system provides the "popen" function
498 * and the "$ECHO" shell command.
499 */
500#define	GLOB		$x
501
502EOF
503
504
505
506def=yes
507x=1
508if [ $alloptional = 0 ]
509then
510	$ECHO "Do you wish to allow log files (-l option)? [$def] \c"
511	read ans
512	case "X$ans" in
513	X[yY]*) x=1 ;;
514	X[nN]*) x=0 ;;
515	esac
516	$ECHO ""
517fi
518cat >>defines.h <<EOF
519/*
520 * LOGFILE is 1 if you wish to allow the -l option (to create log files).
521 */
522#define	LOGFILE		$x
523
524EOF
525
526cat >>defines.h <<EOF
527/*
528 * ONLY_RETURN is 1 if you want RETURN to be the only input which
529 * will continue past an error message.
530 * Otherwise, any key will continue past an error message.
531 */
532#define	ONLY_RETURN	0
533
534EOF
535
536cat >>makefile <<EOF
537
538##########################################################################
539# Compilation environment.
540##########################################################################
541
542EOF
543
544
545
546if [ "$xenix" = "1" ]
547then
548	LIBS="-ltermlib"
549elif [ "$sys" = "bsd" ]
550then
551	LIBS="-ltermcap"
552else
553	LIBS="-lcurses -ltermcap -lPW"
554fi
555if [ $alldefault = 0 ]
556then
557	$ECHO "To build \"less\", you must link with libraries supplied by your system."
558	$ECHO "(If this needs to be changed later, edit the makefile"
559	$ECHO "and change the definition of LIBS.)"
560	$ECHO "What libraries should be used [$LIBS] \c"
561	read ans
562	if [ "X$ans" != "X" ]
563	then
564		LIBS="$ans"
565	fi
566	$ECHO ""
567fi
568cat >>makefile <<EOF
569# LIBS is the list of libraries needed.
570LIBS = $LIBS
571
572EOF
573
574
575
576INSTALL_LESS="/usr/local/bin/less"
577INSTALL_KEY="/usr/local/bin/lesskey"
578INSTALL_HELP="/usr/local/bin/less.help"
579INSTALL_LESSMAN="/usr/man/man1/less.1"
580INSTALL_KEYMAN="/usr/man/man1/lesskey.1"
581LESS_MANUAL="less.nro"
582KEY_MANUAL="lesskey.nro"
583if [ $alldefault = 0 ]
584then
585	$ECHO "What is the name of the \"public\" (installed) version of less?"
586	$ECHO " [$INSTALL_LESS] \c"
587	read ans
588	if [ "X$ans" != "X" ]
589	then
590		INSTALL_LESS="$ans"
591	fi
592	$ECHO "What is the name of the \"public\" (installed) version of lesskey?"
593	$ECHO " [$INSTALL_KEY] \c"
594	read ans
595	if [ "X$ans" != "X" ]
596	then
597		INSTALL_KEY="$ans"
598	fi
599	$ECHO "What is the name of the \"public\" (installed) version of the help file?"
600	$ECHO " [$INSTALL_HELP] \c"
601	read ans
602	if [ "X$ans" != "X" ]
603	then
604		INSTALL_HELP="$ans"
605	fi
606	$ECHO "What is the name of the \"public\" (installed) version of the less manual page?"
607	$ECHO " [$INSTALL_LESSMAN] \c"
608	read ans
609	if [ "X$ans" != "X" ]
610	then
611		INSTALL_LESSMAN="$ans"
612	fi
613	$ECHO "What is the name of the \"public\" (installed) version of the lesskey manual page?"
614	$ECHO " [$INSTALL_KEYMAN] \c"
615	read ans
616	if [ "X$ans" != "X" ]
617	then
618		INSTALL_KEYMAN="$ans"
619	fi
620	$ECHO ""
621fi
622cat >>makefile <<EOF
623# INSTALL_LESS is a list of the public versions of less.
624# INSTALL_KEY is a list of the public versions of lesskey.
625# INSTALL_HELP is a list of the public version of the help file.
626# INSTALL_LESSMAN is a list of the public versions of the less manual page.
627# INSTALL_KEYMAN is a list of the public versions of the lesskey manual page.
628INSTALL_LESS =		\$(ROOT)$INSTALL_LESS
629INSTALL_KEY =		\$(ROOT)$INSTALL_KEY
630INSTALL_HELP =		\$(ROOT)$INSTALL_HELP
631INSTALL_LESSMAN =	\$(ROOT)$INSTALL_LESSMAN
632INSTALL_KEYMAN =	\$(ROOT)$INSTALL_KEYMAN
633LESS_MANUAL =		$LESS_MANUAL
634KEY_MANUAL =		$KEY_MANUAL
635HELPFILE =		$INSTALL_HELP
636
637
638EOF
639
640
641
642cat >>makefile <<"EOF"
643# OPTIM is passed to the compiler and the loader.
644# It is normally "-O" but may be, for example, "-g".
645OPTIM = -O
646
647CFLAGS = $(OPTIM)
648
649
650
651##########################################################################
652# Files
653##########################################################################
654
655SRC1 =	main.c option.c prim.c ch.c position.c input.c linenum.c
656SRC2 =	screen.c prompt.c line.c signal.c os.c help.c ttyin.c command.c
657SRC3 =	output.c decode.c tags.c version.c
658SRC =	$(SRC1) $(SRC2) $(SRC3)
659OBJ =	main.o option.o prim.o ch.o position.o input.o output.o \
660	screen.o prompt.o line.o signal.o os.o help.o ttyin.o \
661	decode.o command.o linenum.o tags.o version.o
662
663
664##########################################################################
665# Rules for building stuff
666##########################################################################
667
668EOF
669
670if [ "$USERFILE" = "1" ]
671then
672	cat >>makefile <<"EOF"
673all: less lesskey
674install: install_less install_help install_key install_lman install_kman
675EOF
676else
677	cat >>makefile <<"EOF"
678all: less
679install: install_less install_help install_lman
680EOF
681fi
682
683cat >>makefile <<"EOF"
684
685less: $(OBJ)
686	$(CC) $(LDFLAGS) $(OPTIM) -o less $(OBJ) $(LIBS) $(LDLIBS)
687
688lesskey: lesskey.o
689	$(CC) $(LDFLAGS) $(OPTIM) -o lesskey lesskey.o $(LDLIBS)
690
691# help.o depends on makefile for the definition of HELPFILE
692help.o: makefile
693	$(CC) $(CFLAGS) -c -DHELPFILE=\"$(HELPFILE)\" help.c
694
695install_less: less
696	for f in $(INSTALL_LESS); do  rm -f $$f; cp less $$f;  done
697	touch install_less
698
699install_key: lesskey
700	for f in $(INSTALL_KEY); do  rm -f $$f; cp lesskey $$f;  done
701	touch install_key
702
703install_help: less.help
704	for f in $(INSTALL_HELP); do  rm -f $$f; cp less.help $$f;  done
705	touch install_help
706
707install_lman: $(LESS_MANUAL)
708	for f in $(INSTALL_LESSMAN); do  rm -f $$f; cp $(LESS_MANUAL) $$f;  done
709	touch install_lman
710
711install_kman: $(KEY_MANUAL)
712	for f in $(INSTALL_KEYMAN); do  rm -f $$f; cp $(KEY_MANUAL) $$f;  done
713	touch install_kman
714
715##########################################################################
716# Maintenance
717##########################################################################
718
719lint:
720	lint -hp $(SRC)
721
722newfuncs:
723	mv funcs.h funcs.h.OLD
724	awk -f mkfuncs.awk $(SRC) >funcs.h
725
726clean:
727	rm -f $(OBJ) lesskey.o less lesskey vecho
728
729clobber:
730	rm -f *.o less lesskey vecho install_less install_key \
731		install_help install_lman install_kman
732
733shar:
734	shar -v linstall less.h position.h funcs.h cmd.h \
735		vecho.c lesskey.c less.nro lesskey.nro lesskey.man > less.shar.a
736	shar -v $(SRC1) > less.shar.b
737	shar -v $(SRC2) > less.shar.c
738	shar -v $(SRC3) less.man README less.help *.awk >less.shar.d
739
740
741##########################################################################
742# Dependencies
743##########################################################################
744
745$(OBJ): less.h funcs.h defines.h position.h
746command.o decode.o: cmd.h
747lesskey.o: less.h funcs.h defines.h cmd.h
748
749EOF
750$ECHO ""
751
752$ECHO "The makefile has been built."
753$ECHO "You should check it to make sure everything is as you want it to be."
754$ECHO "When you are satisfied with the makefile, just type \"make\""
755$ECHO "and \"less\" will be built."
756