#
# $Id: dynamic_module_makefile.in,v 1.71 2001/10/05 18:45:52 hubbe Exp $
#


CC=/home/users/builder/rpm/BUILD/Pike-v7.2.239/src/smartlink i386-pld-linux-gcc
CPP=i386-pld-linux-gcc -E
AR=/usr/bin/ar
LIBGCC=/usr/lib/gcc-lib/i386-pld-linux/2.95.4/libgcc.a
REAL_LDFLAGS=-L/usr/X11R6/lib -s
REAL_CFLAGS= -march=i386
REAL_CPPFLAGS= -I/usr/local/include -I/usr/X11R6/include -I/home/users/builder/rpm/BUILD/Pike-v7.2.239/src
LC_REQ=-lc

PIKE_SRC_DIR=$(SRCDIR)/../..
BUILD_BASE=../..
MODULE_BASE=..
PIKE_INCLUDES=-I$(PIKE_SRC_DIR) -I$(BUILD_BASE)

PREFLAGS=-I. -I$(SRCDIR) $(PIKE_INCLUDES) -I. $(MODULE_CPPFLAGS) $(DEFINES)
CFLAGS=$(MODULE_CFLAGS) $(PREFLAGS) $(OTHERFLAGS) -fPIC -DDYNAMIC_MODULE 
NOOPT_CFLAGS=$(PREFLAGS) $(NOOPTFLAGS) -fPIC -DDYNAMIC_MODULE $(MODULE_CFLAGS)

MAKE_FLAGS = "prefix=$(prefix)" "exec_prefix=$(exec_prefix)" "CC=$(CC) -fPIC -DDYNAMIC_MODULE" "OTHERFLAGS=$(OTHERFLAGS)" "TMP_BINDIR=$(TMP_BINDIR)" "DEFINES=$(DEFINES)" "TMP_LIBDIR=$(TMP_LIBDIR)" "RUNPIKE=$(RUNPIKE)" "INSTALL=$(INSTALL)" "AR=$(AR)" "NOOPTFLAGS=$(NOOPTFLAGS)" $(MODULE_MAKE_FLAGS)

MODNAME=`pwd|sed -e 's@.*/@@g'`

all: dummy

force:
	@:;

$(MODULE_ARCHIVES) ThisIsAPhonyTargetBlaBlaBla: force
	@a=`echo $@ | sed -e 's@/[^/]*$$@@'` ; \
	echo Making $(MODNAME)/$$a ; \
	( rm $$a/remake >/dev/null 2>&1 ||: ; \
	  cd $$a && ( $(MAKE) $(MAKE_FLAGS) || \
	              ( test -f remake ; $(MAKE) $(MAKE_FLAGS) ) ) \
	) || exit $$?

dummy:	$(DUMMY) linker_options modlist_headers modlist_segment module.so
	@tmp="$(INSTALL_NAME)" ; \
	if test x$$tmp = x ; then tmp="$(MODNAME)"; else :; fi ;\
	tmp2="___$$tmp" ; \
	if [ -f $(SRCDIR)/module.pmod.in ]; then \
	  sed -e "s/@module@/.$$tmp2/" <$(SRCDIR)/module.pmod.in >$(TMP_LIBDIR)/modules/$$tmp.pmod ; \
	else \
	  if [ -f ./module.pmod.in ]; then \
	    sed -e "s/@module@/.$$tmp2/" <./module.pmod.in >$(TMP_LIBDIR)/modules/$$tmp.pmod; \
	   else tmp2="$$tmp"; \
	  fi; \
	fi ; \
	$(TMP_BINDIR)/install_module module.so $(TMP_LIBDIR)/modules/$$tmp2.so

.SUFFIXES: .c .o

# GCC dumps core on some files @ OSF1
# This kluge should work around that...
# FIXME: Make this a configure option
.c.o:
	@echo "Compiling $<" ;\
	if $(CC) $(CFLAGS) -c $< -o $@ ; then : ;\
	else \
	  echo "WARNING: Compiler failure! Trying without optimization!" >&2;\
	  echo "echo $(CC) $(NOOPT_CFLAGS) -c $< -o $@" >&2;\
	  NO_ULIMIT=yes $(CC) $(NOOPT_CFLAGS) -c $< -o $@ ;\
	fi

linker_options: Makefile
	@if test "x$(LINKER_OPTIONS)" != x ; then echo "LINKER_OPTIONS+=$(LINKER_OPTIONS)" ; else : ; fi ; echo "$(LINKER_OPTIONS)" >linker_options

modlist_headers: Makefile
	@echo "" >modlist_headers

modlist_segment: Makefile
	@echo "" >modlist_segment

Makefile: $(MODULE_BASE)/dynamic_module_makefile $(SRCDIR)/Makefile.in $(SRCDIR)/dependencies $(SRCDIR)/$(CONFIG_HEADERS).in config.status
	CFLAGS="$(REAL_CFLAGS)" LDFLAGS="$(REAL_LDFLAGS)" CPPFLAGS="$(REAL_CPPFLAGS)" CONFIG_FILES=Makefile CONFIG_HEADERS="$(CONFIG_HEADERS)" ./config.status
	touch remake
	@echo "Run make again" >&2
	@exit 1

$(SRCDIR)/configure: $(SRCDIR)/configure.in $(PIKE_SRC_DIR)/aclocal.m4
	cd $(SRCDIR) && autoconf --localdir=$(PIKE_SRC_DIR)
	if [ -f $(SRCDIR)/acconfig.h ]; then \
	  cd $(SRCDIR) && autoheader; \
	else :; fi

config.status: $(SRCDIR)/configure
	CFLAGS="$(REAL_CFLAGS)" LDFLAGS="$(REAL_LDFLAGS)" CPPFLAGS="$(REAL_CPPFLAGS)" CONFIG_FILES=Makefile CONFIG_HEADERS="$(CONFIG_HEADERS)" ./config.status --recheck


module.so: $(OBJS)  $(MODULE_ARCHIVES)
	@echo "Linking $(MODNAME)" ;\
	if $(TMP_BINDIR)/smartlink "/home/users/builder/rpm/BUILD/Pike-v7.2.239/src/smartlink i386-pld-linux-gcc -shared" $(LDFLAGS) -o module.so $(OBJS) $(MODULE_ARCHIVES) $(MODULE_LDFLAGS) $(LIBGCC) $(LC_REQ) $(LIBGCC) ; then \
	  if test so != so ; then mv module.so module.so ; else :; fi ;\
	else \
	  echo "Linking failed:" >&2; \
	  echo $(TMP_BINDIR)/smartlink "/home/users/builder/rpm/BUILD/Pike-v7.2.239/src/smartlink i386-pld-linux-gcc -shared" $(LDFLAGS) -o module.so $(OBJS) $(MODULE_ARCHIVES) $(MODULE_LDFLAGS) $(LIBGCC) $(LC_REQ) $(LIBGCC) >&2 ;\
	  exit 1; \
	fi

$(OBJS) : $(MODULE_BASE)/dynamic_module_makefile

clean:
	-rm -f *.o *.obj *.a *.so module.so linker_options modlist_headers modlist_segment module_testsuite $(MODULE_CLEAN_EXTRA)
	for a in '' $(MODULE_SUBDIRS) ; do if test "x$$a" = "x"; then :; else echo cleaning $$a ; ( cd $$a ; $(MAKE) $(MAKE_FLAGS) clean ) ; fi ; done


depend:
	gcc -MM $(PREFLAGS) $(SRCDIR)/*.c \
	|sed -e "s@ $(PIKE_SRC_DIR)/\([-a-zA-Z0-9.,_]*\)@ \$$(PIKE_SRC_DIR)/\1@g" \
	|sed -e "s@ $(SRCDIR)/\([-a-zA-Z0-9.,_]*\)@ \$$(SRCDIR)/\1@g" \
	|sed -e "s@ $(BUILD_BASE)/\([-a-zA-Z0-9.,_]*\)@ \$$(BUILD_BASE)/\1@g" \
	>$(SRCDIR)/dependencies
	CONFIG_FILES=Makefile CONFIG_HEADERS="" ./config.status
	@for a in '' $(MODULE_SUBDIRS) ; do \
	  if test "x$$a" = "x"; then :; else \
	    echo making depend in $$a; \
	    ( cd $$a && { \
	      rm -f remake; \
	      $(MAKE) $(MAKE_FLAGS) MODNAME=$$a depend || \
		if test -f remake; then $(MAKE) $(MAKE_FLAGS) MODNAME=$$a depend; \
		else exit $$?; fi; \
	    }); \
	  fi; \
	done

#verify / debug
module_testsuite: $(SRCDIR)/testsuite.in $(REAL_TESTSUITE)
	if test "x$(REAL_TESTSUITE)" != x ; then \
	  cp $(SRCDIR)/$(REAL_TESTSUITE) module_testsuite; \
	else \
	  if test "$$PIKE_PATH_TRANSLATE" = ""; then \
	    $(TMP_BINDIR)/mktestsuite $(SRCDIR)/testsuite.in >module_testsuite \
	      -DSRCDIR=$(SRCDIR); \
	  else \
	    $(TMP_BINDIR)/mktestsuite $(SRCDIR)/testsuite.in >module_testsuite \
	      -DSRCDIR="`echo $(SRCDIR)|sed -e $$PIKE_PATH_TRANSLATE`"; \
	  fi; \
	fi

extra_tests: $(MODULE_TESTS)

verify: module_testsuite  $(MODULE_TESTS)
	$(RUNPIKE) $(TMP_BINDIR)/test_pike.pike module_testsuite

verbose_verify: module_testsuite  $(MODULE_TESTS)
	$(RUNPIKE) $(TMP_BINDIR)/test_pike.pike module_testsuite --verbose

gdb_verify: module_testsuite
	@echo >.gdbinit handle SIGUSR1 nostop noprint pass
	@echo >>.gdbinit run -DNOT_INSTALLED -m ../../lib/master.pike $(PIKEOPTS) $(SRCDIR)/../../../bin/test_pike.pike module_testsuite -v -v -f
	gdb ../../pike
	@rm .gdbinit


install: $(MODULE_INSTALL)
	$(TMP_BINDIR)/install_module module.so /usr/lib/pike/modules/$(MODNAME).so

