#! smake
#
# Copyright (c) Mark J. Kilgard, 1995, 1996.
#
include $(ROOT)/usr/include/make/commondefs

TOP = ../..

TARGETS = libfglut.a

LN = ln -s
MV = mv
RM = -rm -rf

# .fc must be added to your SUFFIXES between .c and .o
.SUFFIXES:
.SUFFIXES: .o .fc .c .s .f

# F2CFLAGS is fancy macro to get the right ABI option for mkf2c
F2CFLAGS=-l `echo $(CSTYLE) | fmt -1 | grep -v mips | grep -v o32`
LCOPTS = -fullwarn
LWOFF = ,813,852,827,826
LCINCS = -I$(TOP)/include -I$(TOP)/lib/glut
LF77INCS = -I$(TOP)/include

REFSRCS = \
  glut_bwidth.c \
  glut_cindex.c \
  glut_cursor.c \
  glut_dstr.c \
  glut_event.c \
  glut_ext.c \
  glut_fullscrn.c \
  glut_get.c \
  glut_init.c \
  glut_input.c \
  glut_menu.c \
  glut_modifier.c \
  glut_overlay.c \
  glut_shapes.c \
  glut_swidth.c \
  glut_teapot.c \
  glut_util.c \
  glut_vidresize.c \
  glut_warp.c \
  glut_win.c \
  glut_winmisc.c \

ORIGSRCS = \
  fglut.c \
  fglut_8x13.c \
  fglut_9x15.c \
  fglut_hel10.c \
  fglut_hel12.c \
  fglut_hel18.c \
  fglut_mroman.c \
  fglut_roman.c \
  fglut_tr10.c \
  fglut_tr24.c \

SRCS = \
  $(REFSRCS) \
  $(ORIGSRCS) \

OBJS = $(SRCS:.c=.o)

FGLUT = libfglut.a
GLUT = $(TOP)/lib/glut/libglut.a
LLDLIBS = $(FGLUT) -lfGLU -lfGL $(GLUT) -lGLU -lGL -lXmu -lXi -lXext -lX11
LDIRT = $(REFSRCS) *.fc *.s *.wo *~ *.bak

sinclude ObjectType.mk

default: $(TARGETS)

libfglut.a : $(OBJS)
	$(RM) $@
	$(AR) crl $@ $(OBJS)

$(REFSRCS) :
	$(RM) $@
	$(LN) $(TOP)/lib/glut/$@ $@

# note -- each .c file containing routines to be interfaced must have
# a dependency such as the following
glut_bitmap.o: glut_bitmap.fc
glut_bwidth.o: glut_bwidth.fc
glut_cindex.o: glut_cindex.fc
glut_cursor.o: glut_cursor.fc
glut_dstr.o: glut_dstr.fc
glut_event.o: glut_event.fc
glut_ext.o: glut_ext.fc
glut_fullscrn.o: glut_fullscrn.fc
glut_get.o: glut_get.fc
glut_init.o: glut_init.fc
glut_input.o: glut_input.fc
glut_menu.o: glut_menu.fc
glut_modifier.o: glut_modifier.fc
glut_overlay.o: glut_overlay.fc
glut_shapes.o: glut_shapes.fc
glut_stroke.o: glut_stroke.fc
glut_swidth.o: glut_swidth.fc
glut_teapot.o: glut_teapot.fc
glut_util.o: glut_util.fc
glut_vidresize.o: glut_vidresize.fc
glut_warp.o: glut_warp.fc
glut_win.o: glut_win.fc
glut_winmisc.o: glut_winmisc.fc

REMAPS = \
    -Dvoid= \
    -DAPIENTRY= \
    '-DGLUTbitmapFont=char*' \
    '-DGLUTstrokeFont=char*' \
    '-DGLUTdisplayCB=int*' \
    '-DGLUTreshapeCB=int*' \
    '-DGLUTkeyboardCB=int*' \
    '-DGLUTmouseCB=int*' \
    '-DGLUTmotionCB=int*' \
    '-DGLUTpassiveCB=int*' \
    '-DGLUTentryCB=int*' \
    '-DGLUTvisibilityCB=int*' \
    '-DGLUTidleCB=int*' \
    '-DGLUTtimerCB=int*' \
    '-DGLUTmenuStateCB=int*' \
    '-DGLUTselectCB=int*' \
    '-DGLUTspecialCB=int*' \
    '-DGLUTspaceMotionCB=int*' \
    '-DGLUTspaceRotateCB=int*' \
    '-DGLUTspaceButtonCB=int*' \
    '-DGLUTdialsCB=int*' \
    '-DGLUTbuttonBoxCB=int*' \
    '-DGLUTtabletMotionCB=int*' \
    '-DGLUTtabletButtonCB=int*' \
    '-DGLUTdisplayFCB=int*' \
    '-DGLUTreshapeFCB=int*' \
    '-DGLUTkeyboardFCB=int*' \
    '-DGLUTmouseFCB=int*' \
    '-DGLUTmotionFCB=int*' \
    '-DGLUTpassiveFCB=int*' \
    '-DGLUTentryFCB=int*' \
    '-DGLUTvisibilityFCB=int*' \
    '-DGLUTidleFCB=int*' \
    '-DGLUTtimerFCB=int*' \
    '-DGLUTmenuStateFCB=int*' \
    '-DGLUTselectFCB=int*' \
    '-DGLUTspecialFCB=int*' \
    '-DGLUTspaceMotionFCB=int*' \
    '-DGLUTspaceRotateFCB=int*' \
    '-DGLUTspaceButtonFCB=int*' \
    '-DGLUTdialsFCB=int*' \
    '-DGLUTbuttonBoxFCB=int*' \
    '-DGLUTtabletMotionFCB=int*' \
    '-DGLUTtabletButtonFCB=int*' \
    '-DGLdouble=double' \
    '-DGLfloat=float' \
    '-DGLenum=int' \
    '-DGLint=int'

fglut.o : fglut.c
	$(CC) $(CFLAGS) -c $*.c
	$(CC) -DWRAPPERS_ONLY $(CINCS) -E fglut.c | m4 $(REMAPS) | $(MKF2C) $(F2CFLAGS) > $*.s
	$(AS) $(ASFLAGS) -o $*.wo $*.s
	$(LD) $(CSTYLE) -r $*.o $*.wo -o $*.tmp
	$(MV) $*.tmp $*.o
	$(RM) $*.s $*.wo

.fc.o:
	m4 $(REMAPS) $< | $(MKF2C) $(F2CFLAGS) > $*.s
	$(AS) $(ASFLAGS) -o $*.o $*.s
	$(RM) $*.s

.c.fc:
	$(EXTCENTRY) $*.c $*.fc

include $(COMMONRULES)
