# -----------------------------------------------------------------------------
#
#	Copyright (C) 1997 by The GGI Project
#
# -----------------------------------------------------------------------------
#
#	This program is free software; you can redistribute it and/or modify
#	it under the terms of the GNU Library General Public License as 
#	published by the Free Software Foundation; either version 2, or 
#	(at your option) any later version.
#
#	You should have received a copy of the GNU Library General Public 
#	License	along with this program; see the file COPYING.LGPL .  
#	If not, write to the Free Software Foundation, 675 Mass Ave, 
#	Cambridge, MA 02139, USA.
#
# ----------------------------------------------------------------------------
ifndef _DEFS_MH_
#HACK!!
OS=Linux
#include $(CONFLEVEL)/rules/defs
endif

define empty
endef

ifndef PREFIX
ifeq ($(LIBGWT_TOPLEVEL)/.config,$(wildcard $(LIBGWT_TOPLEVEL)/.config))
include $(LIBGWT_TOPLEVEL)/.config
endif
endif

GGILIBS=-lggi

INST_CONFIG=$(CONFDIR)
INST_LIB=$(PREFIX)/lib
INST_DLL=$(PREFIX)/lib/ggi
INST_INCLUDE=$(PREFIX)/include/ggi

ifdef SUBLIB
BUILDINGDLL=YES
EXPSYMS=EXPSYMS
SHLIB=$(DLLDIR)/$(SUBLIB).$(DLLEXT)
endif

include $(CONFLEVEL)/rules/$(OS)
include $(CONFLEVEL)/rules/cpu

ifndef DLLEXT
DLLEXT=so
endif

# XXX perhaps this should go elsewhere
_GNU_COPTS   = -O2 -funroll-loops -fomit-frame-pointer $($(cpu)$(compilertype)OPT)
_GNU_DFLAGS  = -Wall -Wstrict-prototypes -g -DDEBUG

COPTS =$($(compilertype)COPTS) -pedantic
DFLAGS=$($(compilertype)DFLAGS) #-DGGICONFFILE=\"$(TAG1)$(CONFDIR)/libggi.conf\"

# I have added the degas/include top level in INCS... (on Solaris at work) Check at home.
define _INCS
$($(OS)INCS) $(INCS) -I$(LIBGWT_TOPLEVEL)/include -I$(LIBGWT_TOPLEVEL)/../../include -I$(LIBGGI_TOPLEVEL)/include $($(OS)I_THREADS) 
endef
#TODO: Check if we need ?
#-I$(LIBGWT_TOPLEVEL)/../../driver/include 

# Switch the following to compile shared libs and binaries in the same subdir
#SHBINOBEXT=shbin-o
#SHLIBOBEXT=shlib-o
SHBINOBEXT=o
SHLIBOBEXT=o

SHBINCFLAGS +=$($(OS)SHBINCFLAGS) $(_INCS) $(COPTS) $(DFLAGS)
SHBINLDLIBS +=$($(OS)SHBINLDLIBS)
define _SHBINLDFLAGS
$($(@)SHBINLDLIBS) $(SHBINLDLIBS) $($(OS)SHBINLDFLAGS) $(SHBINLDFLAGS)
endef
SHBINLINKER  =$(word 1,$($(OS)SHBINLINKER) $(CC))
SHBINOBJECTS+=$(SOURCES:.c=.$(SHBINOBEXT)) $(SHBINSRC:.c=.$(SHBINOBEXT))
SHBINOBJECTS+=$(SHBINS:=.$(SHBINOBEXT))

SHLIBCFLAGS +=$($(OS)SHLIBCFLAGS) $(COPTS) $(_INCS) $(DFLAGS)
define _SHLIBLDLIBS
$(_$(OS)SHLIBLDLIBS) $(SHLIBLDLIBS)
endef
define _SHLIBLDFLAGS
$(_SHLIBLDLIBS) $(SHLIBLDFLAGS) $($(OS)SHLIBLDFLAGS)
endef
SHLIBLINKER  =$($(OS)SHLIBLINKER)
SHLIBOBJECTS+=$(SOURCES:.c=.$(SHLIBOBEXT)) $(SHLIBSRC:.c=.$(SHLIBOBEXT))

MFLAGS      +=LIBGGI_TOPLEVEL=$(LIBGGI_TOPLEVEL)
MFLAGS      +=CONFLEVEL=$(CONFLEVEL)
MFLAGS      +=TOPLEVEL=$(TOPLEVEL)

CP      =$($(OS)CP)
AS      =as
LD      =ld
ifeq ($($(OS)CC),)
CC	=gcc
else
CC      =$($(OS)CC)
endif
ifeq ($($(OS)CPP),)
CPP	=$(CC) -E
else
CPP     =$($(OS)CPP)
endif
AR      =ar
STRIP   =strip
MAKE    =$(word 1,$($(OS)make) make)
RM      =rm -f
MKDIRTREE = $(TOPLEVEL)/config/scripts/mkdirtree
INSTALL   = $(TOPLEVEL)/config/scripts/install
LDCONFIG  = $($(OS)LDCONFIG)

%.s: %.c
	echo _______THIS: $(CC) :THIS______
	$(CC) $(CFLAGS) -S -o $*.s $<
%.o: %.s
	$(AS) -c -o $*.o $<
# XXX default to shared libs unless we specify shared bin.  If this gets to be
#     a problem, the only resort is to have different extensions for libs and binaries
ifeq ($(SHBINS)$(SHBIN),)
.c.$(SHLIBOBEXT):
	$(CC) $(SHLIBCFLAGS) -c -o $*.$(SHLIBOBEXT) $<
else
.c.$(SHBINOBEXT):
	$(CC) $(SHBINCFLAGS) -c -o $*.$(SHBINOBEXT) $<
endif
%.cks: %
	cksum $<

all:: all-files SUBDIRS-all

all-files:: $(SHLIBGWT) $(SHLIB) $(SHBIN) $(SHBINS) $(PATCHLIB) #$(LIBGWTCONF) 

ifneq ($(strip $(SHBIN) $(SHBINS)),)
all-files:: $(SHBINOBJECTS)
endif

$(SHLIB):: $(SHLIBOBJECTS) $(EXPORTSFILE)
ifndef HOST_SHLIB_RULE
	$(SHLIBLINKER) $(_SHLIBLDFLAGS) -o $@ $(SHLIBOBJECTS)
else
	$(HOST_SHLIB_RULE)
endif

$(STLIB):: $(STLIBOBJECTS)
	$(AR) cr $@ $(STLIBOBJECTS) 

$(SHBIN):: $(SHBINOBJECTS)
	$(SHBINLINKER) $(_SHBINLDFLAGS) $(SHBINCFLAGS) -o $@ $(SHBINOBJECTS)

$(SHBINS):: %: %.$(SHBINOBEXT)
	$(SHBINLINKER) $(_SHBINLDFLAGS) $(SHBINCFLAGS) -o $@ $? $(SHBINLDLIBS)

$(PATCHLIB):: $(PATCHLIBOBJS)
	$(SHBINLINKER) $(SHBINCFLAGS) $(CFLAGS) -o $@ $(PATCHLIBOBJS)

rmfiles+=$(wildcard $(OBJECTS) $(DLTARGET) $(ARTARGET) $(SONAME) ) \
	  $(wildcard $(DLLDIR)/$(DIR).$(DLLEXT) libgwt.$(DLLEXT) core *~ ) \
	  $(wildcard $(SHLIB) $(EXPORTSFILE) $(SHLIBGWT_A) $(EXTRARMFILES) ) \
	  $(wildcard $(SHBIN) $(SHBINS) $(SHLIBOBJECTS) $(SHBINOBJECTS)  ) \
	  $(wildcard $(PATCHLIB) $(PATCHLIBOBJS) $(LIBGWTCONF) $(SHLIBGWT) ) \
	  $(wildcard so_locations *.ii *.lreg)

distclean:: clean
	$(RM) $(wildcard $(BINPACKAGE) $(TARBALL) $(TARBALL).gz .config )

clean:: SUBDIRS-clean
ifneq ($(strip $(rmfiles)),)
	$(RM) $(rmfiles)
endif

SUBDIRS-all::
ifneq ($(strip $(SUBDIRS)),)
	for d in $(SUBDIRS); do $(MAKE) DIR=$$d -C $$d $(MFLAGS) || exit 1; done
endif

SUBDIRS-clean::
ifneq ($(strip $(SUBDIRS)),)
	@for d in $(SUBDIRS); do $(MAKE) DIR=$$d -C $$d clean $(MFLAGS) || exit 1; done
endif

install:: all-files
ifneq ($(strip $(SUBDIRS)),)
	@for d in $(SUBDIRS); do $(MAKE) DIR=$$d -C $$d install $(MFLAGS) || exit 1; done
endif

.depend:
	gcc $(_INCS) $(SHLIBCFLAGS) -E -M $(SOURCES)

