#ident	"@(#)curses:common/lib/xlibcurses/screen/makefile	1.46.5.16"
#ident	"$Header: makefile,v 72.16 94/09/26 11:21:31 hmgr Exp $"

#
# cursor package maker
#
#


# the empty .SUFFIXES line below is required to clear the list
.SUFFIXES:
.SUFFIXES: _isom.o _isom_sl.o _gprof.o _sl.o .o .c

BUILT		=	keycaps keyname.c termcap.c tiget.c tnames.c \
			tinames.c tifnames.c tifget.c
PHEADERS	=	term.h curses.h

TMP		=	./tmp

CHMOD		=	chmod
ECHO		= 	echo
MKDIR		=	mkdir
ED		= 	ed
RM		=	rm
CC		=	cc
AR		=	ar
CP		=	cp

INCLUDE		=	-I.

OPT		=	-O

#DEFINES		=	-DSPEC_TUNE1 -DSPEC_TUNE2 -DSPEC_TUNE4 -DSPEC_TUNE5 -DSPEC_TUNE6 -DSPEC_TUNE7
DEFINES		=	-DSPEC_TUNE1 -DSPEC_TUNE2 -DSPEC_TUNE4 -DSPEC_TUNE5 -DSPEC_TUNE7

MISC_CFLAGS	=	-Ae -DV4FS $(DEFINES)
CFLAGS		=	$(MISC_CFLAGS) $(OPT) 

LDFLAGS		=	-Wl,+b /usr/lib -Wl,-L .
CURSESLIB	=	-lcur_colr

HEADERS	=	curses.h unctrl.h curses_inc.h curshdr.h term.h curses_wchar.h

OBJS	=	_addch.o add_ch.o _addchnstr.o _addchstr.o _addnstr.o \
		_addstr.o _attroff.o _attron.o _attrset.o \
		_beep.o _bkgd.o bkgrnd.o _bkgdset.o bkgrndset.o \
		_border.o border_set.o _box.o box_set.o\
		_clear.o _clrtobot.o _clrtoeol.o _crmode.o \
		_del_curterm.o _delch.o _deleteln.o _echo.o \
		_echochar.o echo_char.o _erase.o _fixterm.o _flash.o \
		_garbagdlins.o _garbagedwin.o _getch.o getchtype.o \
		_getstr.o _halfdelay.o _hline.o _inch.o in_ch.o \
		_inchnstr.o _inchstr.o _innstr.o _insch.o ins_ch.o \
		_insdelln.o _insertln.o _insnstr.o _insstr.o \
		_instr.o _intrflush.o _meta.o _move.o _mvaddch.o mvadd_ch.o \
		_mvaddchnstr.o _mvaddchstr.o _mvaddnstr.o \
		_mvaddstr.o _mvdelch.o _mvgetch.o _mvgetstr.o \
		_mvhline.o _mvinch.o mvin_ch.o _mvinchnstr.o _mvinchstr.o \
		_mvinnstr.o _mvinsch.o mvins_ch.o _mvinsnstr.o _mvinsstr.o \
		_mvinstr.o _mvvline.o _mvwaddch.o mvwadd_ch.o _mvwaddchnst.o \
		_mvwaddchstr.o _mvwaddnstr.o _mvwaddstr.o _mvwdelch.o \
		_mvwgetch.o _mvwgetstr.o _mvwhline.o _mvwinch.o mvwin_ch.o \
		_mvwinchnst.o _mvwinchstr.o _mvwinnstr.o _mvwinsch.o \
		mvwins_ch.o \
		_mvwinsnstr.o _mvwinsstr.o _mvwinstr.o _mvwvline.o \
		_newterm.o _nl.o _nocrmode.o _noecho.o _nonl.o \
		_noqiflush.o _overlay.o _overwrite.o _qiflush.o \
		_refresh.o _resetterm.o _saveterm.o _scr_init.o \
		_scr_restore.o _scr_set.o _scrl.o _scroll.o \
		_set_curterm.o _set_term.o _setscrreg.o _slk_init.o \
		_standend.o _standout.o _subpad.o _timeout.o \
		_touchline.o _unctrl.o _vline.o _waddchstr.o \
		_waddstr.o _wclear.o _wdeleteln.o _werase.o \
		_winsertln.o _winsstr.o _wstandend.o _wstandout.o \
		_getnstr.o _mvgetnstr.o _mvwgetnstr.o \
		V2.__sscans.o V2._sprintw.o V2.makenew.o V3.box.o \
		V3.initscr.o V3.m_addch.o V3.m_addstr.o \
		V3.m_clear.o V3.m_erase.o V3.m_initscr.o V3.m_move.o \
		V3.m_newterm.o V3.m_refresh.o V3.newterm.o \
		V3.pechochar.o V3.upd_old_y.o V3.vidattr.o V3.vidputs.o \
		V3.waddch.o V3.wattroff.o V3.wattron.o V3.wattrset.o \
		V3.wechochar.o V3.winsch.o baudrate.o can_change.o \
		color_cont.o cbreak.o chkinput.o clearok.o copywin.o \
		curs_set.o curserr.o curses.o def_prog.o delay.o \
		delay_out.o delkey.o delkeymap.o delscreen.o delterm.o \
		delwin.o derwin.o doupdate.o draino.o dupwin.o endwin.o \
		erasechar.o flushinp.o getattrs.o getbegyx.o getbkgd.o \
		getmaxyx.o getparyx.o getsyx.o gettmode.o getwin.o \
		getyx.o has_colors.o has_ic.o has_il.o idcok.o idlok.o \
		immedok.o init_acs.o init_color.o init_costs.o \
		init_pair.o initscr.o is_linetou.o is_wintou.o \
		keyname.o keypad.o killchar.o leaveok.o \
		longname.o makenew.o memSset.o meta.o mouse.o mvcur.o \
		mvderwin.o mvprintw.o mvscanw.o mvwin.o mvwprintw.o \
		mvwscanw.o napms.o newkey.o newpad.o newscreen.o \
		newwin.o nocbreak.o nodelay.o noraw.o \
		notimeout.o outch.o overlap.o pair_cont.o \
		pechochar.o pecho_char.o pnoutref.o prefresh.o printw.o putp.o \
		putwin.o quick_echo.o raw.o redrawwin.o reset_sh.o \
		resetty.o restart.o ring.o ripoffline.o savetty.o \
		scanw.o scr_all.o scr_dump.o scr_ll_dump.o scr_reset.o \
		scrollok.o setchtype.o setcurscreen.o setcurterm.o setecho.o \
		_setkeymap.o setnonl.o setqiflush.o setsyx.o setterm.o \
		setupterm.o slk_atroff.o slk_atron.o slk_atrset.o \
		slk_clear.o slk_label.o slk_noutref.o slk_refresh.o \
		slk_restore.o slk_set.o slk_start.o slk_touch.o \
		start_col.o subwin.o syncok.o tcsearch.o termattrs.o \
		termcap.o termerr.o termname.o tgetch.o tgoto.o tifget.o \
		tifnames.o tiget.o tinames.o tinputfd.o tnames.o touchln.o \
		touchwin.o tparm.o tputs.o trace.o tstp.o ttimeout.o \
		typeahead.o unctrl.o un_ctrl.o ungetch.o use_env.o \
		untouchwin.o vidputs.o vidupdate.o vwprintw.o \
		vwscanw.o waddch.o wadd_ch.o waddchnstr.o waddnstr.o \
		wattroff.o wattron.o wattrset.o wbkgd.o wbkgrnd.o \
		wbkgdset.o wbkgrndset.o wborder.o wborder_set.o \
		wclrtobot.o wclrtoeol.o wdelch.o wechochar.o wecho_char.o \
		wgetch.o wgetstr.o whline.o whline_set.o winch.o win_ch.o \
		winchnstr.o winchstr.o winnstr.o winsch.o wins_ch.o \
		winsdelln.o winsnstr.o winstr.o wmove.o wnoutref.o \
		wprintw.o wredrawln.o wredrawwin.o wrefresh.o \
		wscanw.o wscrl.o wsetscrreg.o wsyncdown.o wsyncup.o \
		wtimeout.o wtouchln.o wvline.o  wvline_set.o \
	        mbinsshift.o 
#	mbaddch.o mbcharlen.o mbdisplen.o mbgetwidth.o \
#	mbinch.o mbinsshift.o mbmove.o mbtranslate.o  \
#	wgetwstr.o wgetwch.o wechowchar.o waddwch.o

#
# Attachment B APIs.  Not included in this release of curses.
#
# 		pechowchar.o tgetwch.o ungetwch.o waddnwstr.o \
# 		waddwch.o waddwchnstr.o wechowchar.o wgetwstr.o \
# 		wgetwch.o winnwstr.o winsnwstr.o winswch.o \
# 		winwch.o winwchnstr.o winwstr.o \
# 		_addnwstr.o _addwch.o _addwchnstr.o _addwchstr.o \
# 		_addwstr.o _echowchar.o _getnwstr.o _getwch.o \
# 		_getwstr.o _innwstr.o _insnwstr.o _inswch.o \
# 		_inswstr.o _inwch.o _inwchnstr.o _inwchstr.o \
# 		_inwstr.o _mvaddnwstr.o _mvaddwch.o _mvaddwchns.o \
# 		_mvaddwchstr.o _mvaddwstr.o _mvgetnwstr.o _mvgetwch.o \
# 		_mvgetwstr.o _mvinnwstr.o _mvinsnwstr.o _mvinswch.o \
# 		_mvinswstr.o _mvinwch.o _mvinwchnstr.o _mvinwchstr.o \
# 		_mvinwstr.o _mvwaddnwstr.o _mvwaddwch.o _mvwaddwchns.o \
# 		_mvwaddwchs.o _mvwaddwstr.o _mvwgetnwstr.o _mvwgetwch.o \
# 		_mvwgetwstr.o _mvwinnwstr.o _mvwinsnwstr.o _mvwinswch.o \
# 		_mvwinswstr.o _mvwinwch.o _mvwinwchns.o _mvwinwchstr.o \
# 		_mvwinwstr.o _setkeymap.o _waddwchstr.o _waddwstr.o \
# 		_winswstr.o  _winwchstr.o

OBJS_SL = $(OBJS:.o=_sl.o)
OBJS_PBO = $(OBJS:.o=_isom.o)
OBJS_PBO_SL = $(OBJS:.o=_isom_sl.o)
OBJS_GPROF = $(OBJS:.o=_gprof.o)

#
#	tic source and header files
#
TICHDRS	=	compiler.h object.h

TICSRC	=	tic_main.c tic_hash.c tic_captab.c tic_scan.c tic_error.c \
		tic_parse.c tic_read.c tnames.c tinames.c tifnames.c

TICOBJS	=	$(TICSRC:.c=.o)

CHDRS	=	print.h otermcap.h

BSRC		=	print.c iexpand.c
BOBJ		=	print.o iexpand.o

CSRC		=	captoinfo.c otermcap.c $(BSRC)
COBJ		=	captoinfo.o otermcap.o $(BOBJ)

ISRC		=	infocmp.c cexpand.c infotocap.c $(BSRC)
IOBJ		=	infocmp.o cexpand.o infotocap.o $(BOBJ)

SHLIB		=	libcur_colr.sl
V4SHLIB		=	libcur_colr
SHREV		=	1

.MUTEX:	term.h curses.h libcur_colr.a $(SHLIB) tools

default: all

all: $(SHLIB) libcur_colr.a captoinfo_colr infocmp_colr tic_colr tput_colr

# 
# the rules for making a gprof version called libcur_colr_gprof.a
#

libcur_colr_gprof.a: $(OBJS_GPROF)
	rm -f libcur_colr_gprof.a
	ar qc libcur_colr_gprof.a hpux_rel.o $(OBJS_GPROF)

gprof: libcur_colr_gprof.a

#
# rules to make a pbo'ed version of libcur_colr.a
# user should simple invoke with
# make libcur_colr.a
#

libcur_colr_pbo.a: $(PHEADERS) $(OBJS_PBO) hpux_rel.o
	rm -f $@
	ar qc $@ hpux_rel.o $(OBJS_PBO)

flow.data: libcur_colr_pbo.a
	rm -f flow.data
	cd 072.sc;make -f M.hp.700 TARGET_LIB=libcur_colr_pbo.a clean 
	cd 072.sc;make -f M.hp.700 TARGET_LIB=libcur_colr_pbo.a profile
	mv 072.sc/flow.data ./flow.data

libcur_colr.a: flow.data $(OBJS) hpux_rel.o
	rm -f libcur_colr.a
	ar qc libcur_colr.a hpux_rel.o $(OBJS)

#
# rules to allow the building of a non pbo version of libcur_colr.a
# this builds much faster.  Users should use the command:
# make fast
# which sets the FAST flag and then recursively calls 
# make quick
#

fast: 
	$(MAKE) FAST=true quick

quick: $(PHEADERS) $(OBJS) hpux_rel.o
	rm -f libcur_colr.a
	ar qc libcur_colr.a hpux_rel.o $(OBJS)

#
# rules to make a pbo'ed version of libcur_colr_sl.a
# user should simple invoke with
# make libcur_colr_sl.a
#

libcur_colr_pbo_sl.a: $(PHEADERS) $(OBJS_PBO_SL) hpux_rel.o
	rm -f $@
	ar qc $@ hpux_rel.o $(OBJS_PBO_SL)

flow.data_sl: libcur_colr_pbo_sl.a
	rm -f flow.data
	cd 072.sc;make -f M.hp.700 TARGET_LIB=libcur_colr_pbo_sl.a clean 
	cd 072.sc;make -f M.hp.700 TARGET_LIB=libcur_colr_pbo_sl.a profile
	mv 072.sc/flow.data ./flow.data

$(SHLIB): flow.data_sl $(PHEADERS) $(OBJS_SL) hpux_rel.o
	@$(ECHO)
	@$(ECHO) Building shared libcurses 
	@$(ECHO)
	rm -f $(SHLIB)
	ld -b +h $(V4SHLIB).$(SHREV) -o $(SHLIB) hpux_rel.o $(OBJS_SL)
	@$(ECHO)
	@$(ECHO) shared version of libcurses built
	@$(ECHO)

#
# rules to allow the building of a non pbo version of libcur_colr_sl.a
# this builds much faster.  Users should use the command
# make fast_sl
# which sets the FAST flag and then recursively calls 
# make quick

fast_sl: 
	$(MAKE) FAST=true quick_sl

quick_sl: $(PHEADERS) $(OBJS_SL) hpux_rel.o
	rm -f $(SHLIB)
	ld -b +h $(V4SHLIB).$(SHREV) -o $(SHLIB) hpux_rel.o $(OBJS_SL)

# dependency rules, etc

setupterm.o: term.h 

.MUTEX:	term.h tnames.c tinames.c tifnames.c

term.h tnames.c tinames.c tifnames.c: caps maketerm.ed1 maketerm.ed2 maketerm.ed3 maketerm.ed4 maketerm.ed5
	@if [ ! -d "$(TMP)" ] ;\
	then	$(ECHO) "\t$(TMP) not found.";\
		$(ECHO) "\n\tCreating $(TMP)\n";\
		$(MKDIR) $(TMP); \
	fi;
	@$(ECHO)
	@$(ECHO) Building term.h
	@$(ECHO)
	$(ED) - < maketerm.ed1
	$(ED) - < maketerm.ed2
	$(ED) - < maketerm.ed3
	$(ED) - < maketerm.ed4
	$(ED) - < maketerm.ed5
	$(CH) $(CHMOD) 0664 term.h tnames.c tinames.c tifnames.c
	@$(ECHO)
	@$(ECHO) "term.h has been built"
	@$(ECHO)

keycaps: caps
	@$(ECHO)
	@$(ECHO) Building keycaps
	@$(ECHO)
	$(RM) -f $(TMP)/keycaps keycaps
	grep "KEY_" caps > keycaps
	@$(ECHO) 
	@$(ECHO) "keycaps has been built"
	@$(ECHO)

curses.h: keycaps curses.ed1 curses.ed2
	@if [ ! -d "$(TMP)" ] ;\
	then	$(ECHO) "\t$(TMP) not found.";\
		$(ECHO) "\n\tCreating $(TMP)\n";\
		$(MKDIR) $(TMP); \
	fi;
	@$(ECHO) 
	@$(ECHO) Building ./curses.h
	@$(ECHO) 
	$(RM) -f curses.h
	$(ED) - < curses.ed1
	$(ED) - < curses.ed2
	$(CH) $(CHMOD) 0664 curses.h
	$(RM) -f $(TMP)/keycaps
	@$(ECHO) 
	@$(ECHO) "curses.h has been built"
	@$(ECHO) 

keyname.c: keycaps keyname.sh
	@$(ECHO)
	@$(ECHO) Building keyname.c
	@$(ECHO)
	$(RM) -f keyname.c
	sh keyname.sh
	$(CH) $(CHMOD) 0664 keyname.c
	@$(ECHO)
	@$(ECHO) "keyname.c has been built"
	@$(ECHO)

_setkeymap.c: keycaps
	@if tail -1 keycaps | grep 'KEY_MOUSE' > /dev/null; \
	then $(RM) -f _setkeymap.c; \
	     $(CP) setkeymap.c _setkeymap.c; \
	else $(ECHO) new keys!! must change setkeymap.c; \
	     exit 1; \
	fi

termcap.c:	termcap.ed caps
	@if [ ! -d "$(TMP)" ] ;\
	then	$(ECHO) "\t$(TMP) not found.";\
		$(ECHO) "\n\tCreating $(TMP)\n";\
		$(MKDIR) $(TMP); \
	fi;
	@$(ECHO) 
	@$(ECHO) Building termcap.c
	@$(ECHO)
	$(RM) -f termcap.c
	$(ED) - < termcap.ed
	$(RM) -f bool num str
	$(CH) $(CHMOD) 0664 termcap.c
	@$(ECHO) 
	@$(ECHO) "termcap.c has been built"
	@$(ECHO)

tifget.c:	tifget.ed caps
	@if [ ! -d "$(TMP)" ] ;\
	then	$(ECHO) "\t$(TMP) not found.";\
		$(ECHO) "\n\tCreating $(TMP)\n";\
		$(MKDIR) $(TMP); \
	fi;
	@$(ECHO)
	@$(ECHO) Building tifget.c
	@$(ECHO)
	$(ED) - < tifget.ed
	$(CH) $(CHMOD) 0664 tifget.c
	@$(ECHO)
	@$(ECHO) "tifget.c has been built"
	@$(ECHO)

tiget.c:	tiget.ed caps
	@if [ ! -d "$(TMP)" ] ;\
	then	$(ECHO) "\t$(TMP) not found.";\
		$(ECHO) "\n\tCreating $(TMP)\n";\
		$(MKDIR) $(TMP); \
	fi;
	@$(ECHO)
	@$(ECHO) Building tiget.c
	@$(ECHO)
	$(ED) - < tiget.ed
	$(CH) $(CHMOD) 0664 tiget.c
	@$(ECHO)
	@$(ECHO) "tiget.c has been built"
	@$(ECHO)

tic_colr: $(TICOBJS)
	@$(ECHO)
	$(CC) $(LDFLAGS) $(INCLUDE) -o tic_colr $(TICOBJS)

captoinfo_colr: $(COBJ) 
	@$(ECHO)
	rm -f captoinfo_colr
	$(CC) $(COBJ) $(LDFLAGS) $(INCLUDE) -o captoinfo_colr $(CURSESLIB)

infocmp_colr: $(IOBJ) 
	@$(ECHO)
	rm -f infocmp_colr
	$(CC) $(IOBJ) $(LDFLAGS) $(INCLUDE) -o infocmp_colr $(CURSESLIB)

tput_colr:	tput.o tnames.o tinames.o tifnames.o 
	@$(ECHO)
	rm -f tput_colr
	$(CC) tput.o $(LDFLAGS) $(INCLUDE) -o tput_colr $(CURSESLIB)

clean:
	@$(ECHO)
	@$(ECHO) "Removing all .o's"
	@$(ECHO)
	@$(RM) -f $(OBJS) 
	@$(RM) -f $(OBJS_SL) 
	@$(RM) -f $(OBJS_PBO) 
	@$(RM) -f $(OBJS_GPROF)
	@$(ECHO)
	@$(ECHO) "Removing _setkeymap.*"
	@$(ECHO)
	@$(RM) -f _setkeymap.c _setkeymap.o
	@$(ECHO)
	$(RM) -f *.o trace a.out
	$(RM) -f $(BUILT)
	$(RM) -f flow.data
	cd 072.sc;make -f M.hp.700 clean

clobber: clean
	@$(RM) -rf $(TOBJS) $(TMP)
	$(RM) -f captoinfo_colr infocmp_colr tic_colr tput_colr
	$(RM) -f libcur_colr.a $(SHLIB)
	$(RM) -f $(PHEADERS)
	cd 072.sc;make -f M.hp.700 clobber

ticclob:
	$(RM) -f $(TICOBJS) tic_colr

rmhdrs:
	@$(ECHO)
	@$(ECHO) The build of libcurses generates programs and header files.
	@$(ECHO) We remove any old versions of these files before we begin.
	@$(ECHO)
	$(RM) -f $(BUILT)


# the grep is to eleminate warnings from functions that are not contained
# in the profile, and static functions (which we would like the PBO for...)
# the cat is to prevent the return value from grep from messing up make

${FAST}_isom.o.o:
	$(LD) -r -o $@ -P +pgm sc $< 2>&1 | grep -v "(6097)" | cat

${FAST}_isom_sl.o_sl.o:
	$(LD) -r -o $@ -P +pgm sc $< 2>&1 | grep -v "(6097)" | cat

.c_isom.o:
	$(CC) $(CFLAGS) $(FLAGS) $(INCLUDE) $(MINICURSES) +I -c -o $@ $<

.c_isom_sl.o:
	$(CC) $(CFLAGS) $(FLAGS) $(INCLUDE) $(MINICURSES) +z +I -c -o $@ $<

.c_gprof.o:
	$(CC) $(MISC_CFLAGS) $(FLAGS) $(INCLUDE) $(MINICURSES) -O -G -c -o $@ $<
#
# Re-define .c.o rule so compiles will use FLAGS
#
.c.o:
	$(CC) $(CFLAGS) $(FLAGS) $(INCLUDE) $(MINICURSES) -c $<

.c_sl.o:
	$(CC) $(CFLAGS) $(FLAGS) $(INCLUDE) $(MINICURSES) +z -c $< -o $@



#
# LOCAL DEPENDENCIES
#

tic_captab.o:	tic_captab.c compiler.h
tic_error.o:	tic_error.c compiler.h
tic_hash.o:	tic_hash.c compiler.h term.h
tic_main.o:	tic_main.c compiler.h curses.h
tic_parse.o:	tic_parse.c compiler.h object.h
tic_read.o:	tic_read.c object.h
tic_scan.o:	tic_scan.c compiler.h

captoinfo.o:	captoinfo.c curses.h otermcap.h print.h
otermcap.o:	otermcap.c otermcap.h
print.o:	print.c curses.h print.h
iexpand.o:	iexpand.c print.h
cexpand.o:	cexpand.c print.h
infotocap.o:	infotocap.c curses.h
infocmp.o:	infocmp.c curses.h term.h print.h

