#*=====================================================================*/
#*    serrano/prgm/project/scribe/Makefile                             */
#*    -------------------------------------------------------------    */
#*    Author      :  Manuel Serrano                                    */
#*    Creation    :  Wed Oct  3 05:37:54 2001                          */
#*    Last change :  Thu Jan  3 09:37:42 2002 (serrano)                */
#*    Copyright   :  2001-02 Manuel Serrano                            */
#*    -------------------------------------------------------------    */
#*    This Makefile *requires* GNU-Make.                               */
#*    -------------------------------------------------------------    */
#*    The Makefile for scribe                                          */
#*=====================================================================*/
include Makefile.scrconfig

#*---------------------------------------------------------------------*/
#*    Compiler and flags                                               */
#*---------------------------------------------------------------------*/
# The directory where to build and install a distribution
DISTRIBTMPDIR	= /tmp
DISTRIBDIR	= $$HOME/prgm/distrib

# The file to produce when compiling
TARGETS		= scribeapi.init scribeapi.heap \
	  	  libscribeapi_u.a libscribeapi.a \
	  	  libscribeapi_u.so libscribeapi.so \
	  	  libscribehtml.so scribehtml.heap \
	  	  libscribehtmlgui.so scribehtmlgui.heap \
	  	  libscribetext.so scribetext.heap \
	  	  libscribeman.so scribeman.heap \
	  	  libscribetex.so scribetex.heap \
	  	  libscribecgi.so scribecgi.heap

# gzip
GZIP		= gzip -9

# the libc we are testing for version
LIBC		= /usr/lib/libc.so
# the library C version
LIBCVERSION	= 6
# the rpm architecture (for now only i386 is supported)
RPMARCH		= i686
# the root directory where to remove directory after the rpm contruction
RPMBASEDIR	= /usr/src/RPM
RPMSOURCEDIR	= $(RPMBASEDIR)/SOURCES
RPMBUILDDIR	= $(RPMBASEDIR)/BUILD
# The rpm source directory
RPMSOURCESDIR	= $(RPMBASEDIR)/SOURCES
RPMRPMDIR	= $(RPMBASEDIR)/RPMS

# sudo command
SUDO		= sudo 

NATIVECOLOR	= 
#*---------------------------------------------------------------------*/
#*    Directories where to find the files composing a revision         */
#*---------------------------------------------------------------------*/
POPDIR		= apache \
		  autoconf \
		  emacs \
		  examples \
		  manuals \
		  engine \
		  scribeapi \
		  scribecgi \
		  scribehtml \
		  scribehtmlgui \
		  scribeinfo \
		  scribebibtex \
		  scribeman \
		  scribetex \
		  scribetext \
		  styles \
                  drivers \
                  private

POPFILES	= INSTALL \
                  README \
                  README.java \
                  Makefile \
                  Makefile.tpl \
                  configure \
                  scribe.spec \
                  ChangeLog \
                  LICENSE

#*---------------------------------------------------------------------*/
#*    all                                                              */
#*---------------------------------------------------------------------*/
all: boot-c boot-manuals
boot: boot-c boot-manuals
jvm: boot-jvm

boot-c:
	@ echo "[0m[1;32m>>> (cd scribeapi; $(MAKE))[0m";
	(cd scribeapi; $(MAKE))
	@ echo "[0m[1;32m>>> (cd engine; $(MAKE))[0m";
	(cd engine; $(MAKE))
	@ echo "[0m[1;32m>>> (cd scribehtml; $(MAKE))[0m";
	(cd scribehtml; $(MAKE))
	@ echo "[0m[1;32m>>> (cd scribehtmlgui; $(MAKE))[0m";
	(cd scribehtmlgui; $(MAKE))
	@ echo "[0m[1;32m>>> (cd scribeinfo; $(MAKE))[0m";
	(cd scribeinfo; $(MAKE))
	@ echo "[0m[1;32m>>> (cd scribebibtex; $(MAKE))[0m";
	(cd scribebibtex; $(MAKE))
	@ echo "[0m[1;32m>>> (cd scribetex; $(MAKE))[0m";
	(cd scribetex; $(MAKE))
	@ echo "[0m[1;32m>>> (cd scribetext; $(MAKE))[0m";
	(cd scribetext; $(MAKE))
	@ echo "[0m[1;32m>>> (cd scribeman; $(MAKE))[0m";
	(cd scribeman; $(MAKE))
	@ echo "[0m[1;32m>>> (cd scribecgi; $(MAKE))[0m";
	(cd scribecgi; $(MAKE))

boot-jvm:
	@ echo "[0m[1;31m>>> (cd scribeapi; $(MAKE) jvm)[0m";
	@ (cd scribeapi; $(MAKE) jvm)
	@ echo "[0m[1;31m>>> (cd engine; $(MAKE) jvm)[0m";
	(cd engine; $(MAKE) jvm)
	@ echo "[0m[1;31m>>> (cd scribehtml; $(MAKE) jvm)[0m";
	(cd scribehtml; $(MAKE) jvm)
	@ echo "[0m[1;31m>>> (cd scribehtmlgui; $(MAKE) jvm)[0m";
	(cd scribehtmlgui; $(MAKE) jvm)
	@ echo "[0m[1;31m>>> (cd scribeinfo; $(MAKE) jvm)[0m";
	(cd scribeinfo; $(MAKE) jvm)
	@ echo "[0m[1;31m>>> (cd scribebibtex; $(MAKE) jvm)[0m";
	(cd scribebibtex; $(MAKE) jvm)
	@ echo "[0m[1;31m>>> (cd scribetex; $(MAKE) jvm)[0m";
	(cd scribetex; $(MAKE) jvm)
	@ echo "[0m[1;31m>>> (cd scribetext; $(MAKE) jvm)[0m";
	(cd scribetext; $(MAKE) jvm)
	@ echo "[0m[1;31m>>> (cd scribeman; $(MAKE) jvm)[0m";
	(cd scribeman; $(MAKE) jvm)
	@ echo "[0m[1;31m>>> (cd scribecgi; $(MAKE) jvm)[0m";
	(cd scribecgi; $(MAKE) jvm)

boot-manuals:
	@ echo "[0m[1;32m>>> (cd manuals; $(MAKE))[0m";
	(LD_LIBRARY_PATH=$(SCRIBEDIR)/lib:$$LD_LIBRARY_PATH; \
         export LD_LIBRARY_PATH; \
         cd manuals; $(MAKE))

#*---------------------------------------------------------------------*/
#*    mod_scribe                                                       */
#*---------------------------------------------------------------------*/
mod_scribe:
	(cd apache; $(MAKE))

#*---------------------------------------------------------------------*/
#*    Clean                                                            */
#*---------------------------------------------------------------------*/
clean:
	(cd scribecgi; $(MAKE) clean)
	(cd scribeapi; $(MAKE) clean)
	(cd engine; $(MAKE) clean)
	(cd scribehtml; $(MAKE) clean)
	(cd scribehtmlgui; $(MAKE) clean)
	(cd scribeinfo; $(MAKE) clean)
	(cd scribebibtex; $(MAKE) clean)
	(cd scribetex; $(MAKE) clean)
	(cd scribetext; $(MAKE) clean)
	(cd scribeman; $(MAKE) clean)
	(cd apache; $(MAKE) clean)
	(cd examples; $(MAKE) clean)

distclean: clean
cleanall: distclean
	/bin/rm -f Makefile.scrconfig >/dev/null 2>&1
	/bin/rm -f scribe/configure.scm >/dev/null 2>&1
	/bin/rm -f bin/scribe >/dev/null 2>&1
	/bin/rm -f bin/scribeinfo >/dev/null 2>&1
	/bin/rm -f bin/scribebibtex >/dev/null 2>&1
	/bin/rm -f lib/*scribe* >/dev/null 2>&1
	/bin/rm -f *~ >/dev/null 2>&1

#*---------------------------------------------------------------------*/
#*    Installation                                                     */
#*---------------------------------------------------------------------*/
install:	
	cp bin/scribe $(SCRIBEBINDIR)/scribe$(SCRIBERELEASE)
	chmod $(SMASK) $(SCRIBEBINDIR)/scribe$(SCRIBERELEASE)
	cp bin/scribeinfo $(SCRIBEBINDIR)/scribeinfo$(SCRIBERELEASE)
	chmod $(SMASK) $(SCRIBEBINDIR)/scribeinfo$(SCRIBERELEASE)
	cp bin/scribebibtex $(SCRIBEBINDIR)/scribebibtex$(SCRIBERELEASE)
	chmod $(SMASK) $(SCRIBEBINDIR)/scribebibtex$(SCRIBERELEASE)
	/bin/rm -f $(SCRIBEBINDIR)/scribe
	/bin/rm -f $(SCRIBEBINDIR)/scribeinfo
	/bin/rm -f $(SCRIBEBINDIR)/scribebibtex
	(cd $(SCRIBEBINDIR); ln -s scribe$(SCRIBERELEASE) scribe)
	(cd $(SCRIBEBINDIR); ln -s scribeinfo$(SCRIBERELEASE) scribeinfo)
	(cd $(SCRIBEBINDIR); ln -s scribebibtex$(SCRIBERELEASE) scribebibtex)
	mkdir -p $(SCRIBELIBDIR)
	(cd $(SCRIBELIBDIR); \
         for f in $(TARGETS); do \
            cp $(SCRIBEDIR)/lib/$$f .; chmod $(SMASK) $$f; \
         done; \
         cp -r $(SCRIBEDIR)/styles scr; \
         chmod $(SMASK) scr; chmod $(SMASK) scr/*; \
         cp $(SCRIBEDIR)/Makefile.scrconfig .; \
         chmod $(SMASK) Makefile.scrconfig)
	(mkdir -p $(SCRIBEDOCDIR); \
	 mkdir -p $(SCRIBEDOCDIR)/user; \
	 mkdir -p $(SCRIBEDOCDIR)/expert; \
         cp manuals/index.html $(SCRIBEDOCDIR)/index.html; \
         cp manuals/user/*.html $(SCRIBEDOCDIR)/user; \
         cp manuals/user/*.gif $(SCRIBEDOCDIR)/user; \
         cp manuals/expert/*.html $(SCRIBEDOCDIR)/expert; \
         cp manuals/man/scribe.man $(SCRIBEMANDIR)/scribe.1; \
         cp manuals/man/scribeinfo.man $(SCRIBEMANDIR)/scribeinfo.1; \
         cp manuals/man/scribebibtex.man $(SCRIBEMANDIR)/scribebibtex.1; \
         chmod $(SMASK) $(SCRIBEMANDIR); \
         chmod $(SMASK) $(SCRIBEMANDIR)/* )

install-link:
	(cd $(SCRIBELIBDIR); \
         for f in $(TARGETS); do \
            ln -s $(SCRIBEDIR)/lib/$$f .; \
         done; \
         ln -s $(SCRIBEDIR)/styles scr)
	(cd $(SCRIBEBINDIR); /bin/rm -f scribe; ln -s $(SCRIBEDIR)/bin/scribe scribe)
	(cd $(SCRIBEBINDIR); /bin/rm -f scribeinfo; ln -s $(SCRIBEDIR)/bin/scribeinfo scribeinfo)
	(cd $(SCRIBEBINDIR); /bin/rm -f scribebibtex; ln -s $(SCRIBEDIR)/bin/scribebibtex scribebibtex)

uninstall:
	(cd $(SCRIBELIBDIR); \
         /bin/rm -f Makefile.scrconfig; \
         for f in $(TARGETS); do \
            /bin/rm -f $$f; \
         done; \
         /bin/rm -rf scr;)
	/bin/rm -f $(SCRIBEBINDIR)/scribe
	/bin/rm -f $(SCRIBEBINDIR)/scribeinfo
	/bin/rm -f $(SCRIBEBINDIR)/scribebibtex
	/bin/rm -f $(SCRIBEBINDIR)/scribe$(SCRIBERELEASE)
	/bin/rm -f $(SCRIBEBINDIR)/scribeinfo$(SCRIBERELEASE)
	/bin/rm -f $(SCRIBEBINDIR)/scribebibtex$(SCRIBERELEASE)

#*---------------------------------------------------------------------*/
#*    distrib                                                          */
#*---------------------------------------------------------------------*/
distrib:
	@ (cd $(DISTRIBTMPDIR); \
	   rm -rf scribe; \
	   rm -rf scribe$(SCRIBERELEASE); \
           rm -rf scribe; mkdir scribe; cd scribe; \
           $(MAKE) -I $(SCRIBEDIR) -f $(SCRIBEDIR)/Makefile checkout; \
           cp $(SCRIBEDIR)/Makefile.scrconfig Makefile.scrconfig; \
	   mkdir bin; mkdir lib; \
           rm -rf private; \
           $(MAKE) true-distrib)

true-distrib: $(DISTRIBDIR)/scribe$(SCRIBERELEASE).tar.gz

$(DISTRIBDIR)/scribe$(SCRIBERELEASE).tar.gz: $(DISTRIBDIR)/scribe.tar
	@ /bin/rm -f $(DISTRIBDIR)/scribe$(SCRIBERELEASE).tar.gz
	@ $(GZIP) $(DISTRIBDIR)/scribe$(SCRIBERELEASE).tar
	@ echo "$(DISTRIBDIR)/scribe$(SCRIBERELEASE).tar.gz Done..."
	@ echo "-------------------------------"

$(DISTRIBDIR)/scribe.tar:
	@ echo "scribe.tar"
	@ (cd ..; \
           mv scribe scribe$(SCRIBERELEASE); \
           tar cf $(DISTRIBDIR)/scribe$(SCRIBERELEASE).tar \
                  scribe$(SCRIBERELEASE))
	@ echo "$(DISTRIBDIR)/scribe$(SCRIBERELEASE).tar Done..."
	@ echo "-------------------------------"

#*---------------------------------------------------------------------*/
#*    distrib-jvm                                                      */
#*---------------------------------------------------------------------*/
distrib-jvm:
	@ (cd $(DISTRIBTMPDIR); \
	   rm -rf scribe; \
	   rm -rf scribe$(SCRIBERELEASE); \
           rm -rf scribe; mkdir scribe; cd scribe; \
           $(MAKE) -I $(SCRIBEDIR) -f $(SCRIBEDIR)/Makefile checkout; \
	   mkdir bin; mkdir lib; \
           cp $(SCRIBEDIR)/Makefile.scrconfig Makefile.scrconfig; \
           $(MAKE) true-distrib-jvm; \
           $(MAKE) dozip)

true-distrib-jvm: 
	$(MAKE) boot-manuals
	./configure
	$(MAKE) jvm

dozip: $(DISTRIBDIR)/scribe$(SCRIBERELASE).zip
$(DISTRIBDIR)/scribe$(SCRIBERELASE).zip:
	@ (cd ..; \
           mkdir scribe$(SCRIBERELEASE); \
           cp -r scribe/lib scribe$(SCRIBERELEASE)/lib; \
           cp $(LIBDIR)/bigloo.zip scribe$(SCRIBERELEASE)/lib/bigloo.zip; \
           cp -r scribe/bin scribe$(SCRIBERELEASE)/bin; \
           cp -r scribe/styles scribe$(SCRIBERELEASE)/styles; \
           cp -r scribe/manuals scribe$(SCRIBERELEASE)/manuals; \
           cp -r scribe/examples/simple scribe$(SCRIBERELEASE)/demo; \
	   /bin/rm scribe$(SCRIBERELEASE)/demo/Makefile; \
	   /bin/rm scribe$(SCRIBERELEASE)/demo/README; \
           cp scribe/drivers/* scribe$(SCRIBERELEASE); \
           cp -r scribe/README.java scribe$(SCRIBERELEASE)/README.java; \
           $(ZIP) -q $(ZFLAGS) $(DISTRIBDIR)/scribe$(SCRIBERELEASE).zip \
                  scribe$(SCRIBERELEASE)/* \
                  scribe$(SCRIBERELEASE)/*/* \
                  scribe$(SCRIBERELEASE)/*/*/*)
	@ echo "$(DISTRIBDIR)/scribe$(SCRIBERELEASE).zip Done..."
	@ echo "-------------------------------"

#*---------------------------------------------------------------------*/
#*    rpm                                                              */
#*---------------------------------------------------------------------*/
rpm: scribe$(SCRIBERELEASE).spec scribe$(SCRIBERELEASE).$(RPMARCH).rpm

scribe$(SCRIBERELEASE).$(RPMARCH).rpm: $(RPMSOURCESDIR)/scribe.tar.gz
	@ $(SUDO) sh -c "(export LD_LIBRARY_PATH=$$HOME/prgm/project/bigloo/lib/$(RELEASE):$$LD_LIBRARY_PATH; rpm -bb --rmsource scribe$(SCRIBERELEASE).spec)"
	@ $(SUDO) cp $(RPMRPMDIR)/$(RPMARCH)/scribe-$(SCRIBERELEASE)-$(LIBCVERSION).$(RPMARCH).rpm $(DISTRIBDIR)
	@ $(SUDO) chown $$LOGNAME $(DISTRIBDIR)/scribe-$(SCRIBERELEASE)-$(LIBCVERSION).$(RPMARCH).rpm
	@ $(SUDO) rm $(RPMRPMDIR)/$(RPMARCH)/scribe-$(SCRIBERELEASE)-$(LIBCVERSION).$(RPMARCH).rpm
	@ echo "Removing $(RPMBUILDDIR)/scribe$(SCRIBERELEASE)"
	@ $(SUDO) /bin/rm -rf $(RPMBUILDDIR)/scribe$(SCRIBERELEASE)
	@ echo "Removing $(RPMSOURCEDIR)/scribe$(SCRIBERELEASE).tar.gz"
	@ $(SUDO) /bin/rm -rf $(RPMSOURCEDIR)/scribe$(SCRIBERELEASE).tar.gz
	@ /bin/rm -f scribe$(SCRIBERELEASE).spec

.PHONY: $(RPMSOURCESDIR)/scribe$(SCRIBERELEASE).tar.gz

$(RPMSOURCESDIR)/scribe.tar.gz:
	@ echo "building scribe.spec for libc version: $(LIBCVERSION)"
	@ echo "Copying scribe.tar.gz into $(RPMSOURCESDIR)/scribe.tar.gz"
	@ $(SUDO) cp $(DISTRIBDIR)/scribe$(SCRIBERELEASE).tar.gz $(RPMSOURCESDIR)/scribe.tar.gz

scribe$(SCRIBERELEASE).spec: scribe.spec configure
	@ cat scribe.spec | sed -e s/@RELEASE@/$(SCRIBERELEASE)/g > scribe$(SCRIBERELEASE).spec

#*---------------------------------------------------------------------*/
#*    Revision ...                                                     */
#*---------------------------------------------------------------------*/
.PHONY: revision populate 

revision: populate checkin

populate: scribe.prj
	@ for d in $(POPDIR); do \
             echo "populating from $$d ..."; \
             prcs populate scribe `cd $$d; $(MAKE) -s pop`; \
          done;
	prcs populate scribe $(POPFILES)

checkin:
	prcs checkin -r$(SCRIBERELEASE).@ scribe

checkout:
	@ prcs checkout -r$(SCRIBERELEASE).@ scribe

scribe.prj:
	@ cat scribe.prj | sed -e s,"(Populate-Ignore ())","(Populate-Ignore (\"\\\\\\\\\\.o\\$$\" \"\\\\\\\\\\~$$\" \"\\\\\\\\\\.log\\$$\" \"\\\\\\\\\\.ps\\$$\" \"\\\\\\\\\\.aux\\$$\" \"\\\\\\\\\\.date_of_backup\\$$\" \"\\\\\\\\\\.so\\$$\" \"\\\\\\\\\\.a\\$$\" ))", > scribe.dprj; rm -f scribe.prj; mv scribe.dprj scribe.prj


