PKGDIR		?= ../..
L4DIR		?= $(PKGDIR)/../..

CONTRIB_DIR	= $(shell cd $(PKGDIR)/contrib/libstdc++; pwd)
SYSTEMS		=

all:: symlinks-done

include $(L4DIR)/mk/lib.mk

ifeq  ($(findstring $(MAKECMDGOALS),clean cleanall),)
ifneq ($(findstring $(GCCVERSION_x86),2.95),)

TOOLPATH	:= $(shell cd $(L4DIR)/tool/gcc-wrap; pwd):$(DROPS_STDDIR)/tool/bin
DROPSGCCVERSION	:= $(shell PATH=$(TOOLPATH):${PATH}; export L4DIR=$(L4DIR); drops-gcc -dumpversion | sed -e 's/\(.*\)\..*/\1/')

ifneq ($(GCCVERSION_x86),$(DROPSGCCVERSION))
$(error drops-gcc version $(DROPSGCCVERSION) does not match gcc version $(GCCVERSION_x86))
endif

symlinks-done: inst-local-done
	mkdir -p $(L4DIR)/include/c++/$(GCCVERSION_x86)
	incdir=`cd include/g++-3; pwd`; \
	  cd $(L4DIR)/include/c++/$(GCCVERSION_x86); \
	  $(CONTRIB_DIR)/symlink-tree $$incdir
	incdir=`cd drops/include; pwd`; \
	  cd $(L4DIR)/include/c++/$(GCCVERSION_x86); \
	  $(CONTRIB_DIR)/symlink-tree $$incdir
	mkdir -p $(L4DIR)/lib/c++/$(GCCVERSION_x86)
	libdir=`cd drops/lib; pwd`; \
	  cd $(L4DIR)/lib/c++/$(GCCVERSION_x86); \
	  rm -f libstdc++.a; \
	  ln -s $$libdir/libstdc++.a* libstdc++.a
	libdir=`cd drops/lib; pwd`; \
	  cd $(L4DIR)/lib; \
	  rm -f libiberty.a; \
	  ln -s $$libdir/libiberty.a
	touch $@

install:: symlinks-done
	$(VERBOSE)cd include/g++-3; \
	  find . -type f -print | while read header; \
	  do \
	    mkdir -p $(DROPS_STDDIR)/include/c++/$(GCCVERSION_x86)/`dirname $$header`; \
	    install -c -m 644 $$header $(DROPS_STDDIR)/include/c++/$(GCCVERSION_x86)/$$header ; \
	  done
	$(VERBOSE)cd drops/include; \
	  find . -type f -print | while read header; \
	  do \
	    mkdir -p $(DROPS_STDDIR)/include/c++/$(GCCVERSION_x86)/`dirname $$header`; \
	    install -c -m 644 $$header $(DROPS_STDDIR)/include/c++/$(GCCVERSION_x86)/$$header; \
	  done
	$(VERBOSE)mkdir -p $(DROPS_STDDIR)/lib/c++/$(GCCVERSION_x86)
	$(VERBOSE)cd drops/lib; \
	  install -c -m 644 libstdc++.a* $(DROPS_STDDIR)/lib/c++/$(GCCVERSION_x86)/libstdc++.a
	$(VERBOSE)cd drops/lib; \
	  install -c -m 644 libiberty.a $(DROPS_STDDIR)/lib/c++/$(GCCVERSION_x86)/libiberty.a

inst-local-done: build-done
	@echo "== Installing into local directory =="
	mkdir -p lib/gcc-lib/drops
	prefix=`pwd`; \
	  cd dist && \
	  PATH=$(TOOLPATH):$${PATH} \
	  $(MAKE) install prefix=$$prefix L4DIR=$(shell cd $(L4DIR); pwd)
	touch $@

build-done: config-done
	@echo "== Building =="
	cd dist && \
	  PATH=$(TOOLPATH):$${PATH} \
	  $(MAKE) all-target-libio all-target-libstdc++ \
	    L4DIR=$(shell cd $(L4DIR); pwd)
	touch $@

dist:
	rm -rf $@ $@.new
	mkdir $@.new
	cd $@.new && $(CONTRIB_DIR)/symlink-tree $(CONTRIB_DIR)
	rm -f $@.new/config.sub
	ln -s ../config.sub $@.new
	mv $@.new $@

config-done: dist config.sub
	$(MAKE) config L4DIR=$(shell cd $(L4DIR); pwd)
	touch $@

.PHONY: config
config::
	srcdir=`pwd`; \
	  cd dist && \
	  PATH=$(TOOLPATH):$${PATH} \
	  CC="$(CC_x86)" ./configure --target=drops \
		--host=i486-pc-linux --prefix=$(DROPS_STDDIR)

config.sub: config.sub.in
	sed 's,@orig_configsub@,$(CONTRIB_DIR)/config.sub,g' $< > $@.new
	mv $@.new $@

else

symlinks-done:
	@echo "  ==> GCC version 2.95 required, found version $(GCCVERSION_x86) => omitting libstdc++2.10"

.PHONY: symlinks-done

endif
endif

clean cleanall::
	$(VERBOSE)$(RM) -rf dist 
	$(VERBOSE)$(RM) -f config-done build-done symlinks-done inst-local-done
	$(VERBOSE)$(RM) -rf config.sub *.new drops include lib

