##############################################################################
#                                                                            #
# Copyright (C) 1996 ACTS-MoMuSys All Rights Reserved.                       #
#                                                                            #
# See COPYRIGHT file enclosed with this distribution.                        #
#                                                                            #
##############################################################################

##############################################################################
#                                                                            #
#  MASTER MAKEFILE Version 1.8                                               #
#                                                                            #
#                                                                            #
#  CREATED BY :  Bruno LORET -- FRANCE TELECOM / CNET --  22-Feb-96          # 
#                                                                            #
#  DERIVED FROM WORK by Xavier MARICHAL -- UCL                               #
#                                                                            #
##############################################################################



##############################################################################
#                                                                            #
# VM dependent options                                                       #
#                                                                            #
##############################################################################

###########
# Modules #
###########
# Modules of an executable program 
BIN_MODULE_LIST=	vm_enc vm_dec 
#BIN_MODULE_LIST=	vm_enc 
# Modules of non executable , but required by the executable programs

LIB_MODULE_LIST=	vm_common 


# Used to create the archive : <PROJECT>-<VERSION>.tar.gz
# Also used by RCS to check in files
# Warning : works only with 2 figures, e.g : 1.2, 1.3, 1.29 etc
VERSION=Jan16

# Files and directories to archive
#TO_ARCHIVE= $(LIB_MODULE_LIST) $(BIN_MODULE_LIST) *Makefile machines 
TO_ARCHIVE= $(LIB_MODULE_LIST) $(BIN_MODULE_LIST)

# RCS variables
INITIAL_REVISION_MESSAGE= 	"Copyright (C) 1996 & 1997 ACTS-MoMuSys All Rights Reserved"
REVISION_MESSAGE= 		"VM 8.0"



# Program dependent flags
# For example, to enable X11 display :  
# EXTRA_CFLAGS += -DSH_MEM
# EXTRA_LIBS += -lXext -lX11
# EXTRA_INCLUDE_DIR= -I/usr/openwin/include
# EXTRA_LIBS_DIR= -L/usr/openwin/lib -Wl,-R,/usr/openwin/lib


#EXTRA_CFLAGS=	-D_RAWIO_  -D__STDC__ -D_WD_MODE_ -D_PSEDUO_RATE_CONTROL_

#EXTRA_CFLAGS=	-D_RAWIO_  -D__STDC__ -D_WD_MODE_ 
#EXTRA_CFLAGS=	-D_RAWIO_  -D_WD_MODE_ -DILACE -DNLSSTATS
EXTRA_CFLAGS=	-D_RAWIO_  -D__STDC__ -D_WD_MODE_ -DILACE  -D_SHAPE_ -D_NEW_IQUANT_VAL_
EXTRA_LIBS=	-lm 

EXTRA_INCLUDE_DIR= -I/opt/local/share/include
EXTRA_LIBS_DIR= 

# Set here your default system
#ifndef SYSTEM
   SYSTEM=OS2
#endif


##############################################################################
#                                                                            #
# No change should be necessary below this line                              #
#                                                                            #
##############################################################################

MODULE_LIST= $(LIB_MODULE_LIST) $(BIN_MODULE_LIST)


#TARDIR=  $(PROJECT)-$(VERSION)
TARDIR=  $(PROJECT)
ARCHIVE_PATH= archive

ALL_LIBS= $(addsuffix $(LIB_EXT),$(addprefix $(PROJECT_LIB_DIR)/lib, $(LIB_MODULE_LIST)))

##############################################################################
#                                                                            #
# Load machine dependent options (compiler, flags, various paths, ...)       #
#                                                                            #
##############################################################################

###  OS2  ###
ifeq ($(SYSTEM),OS2)
   include machines/OS2_options
endif

###  LINUX  ###
ifeq ($(SYSTEM),LINUX)
   include machines/LINUX_options
endif

###  SUN SOLARIS1.x ###
ifeq ($(SYSTEM),SOLARIS1)
   include machines/SOLARIS1_options
endif

###  SUN SOLARIS2.x ###
ifeq ($(SYSTEM),SOLARIS2)
   include machines/SOLARIS2_options
endif

###  HP   ###
ifeq ($(SYSTEM),HP)
   include machines/HP_options
endif

###  SGI  ###
ifeq ($(SYSTEM),SGI)
   include machines/SGI_options
endif

###  CONVEX  ###
ifeq ($(SYSTEM),CONVEX)
   include machines/CONVEX_options
endif

###  DEC ALPHA  ###
ifeq ($(SYSTEM),ALPHA)
   include machines/ALPHA_options
endif


CFLAGS += $(EXTRA_CFLAGS)

##############################################################################
# To use on Linux                                                            #
##############################################################################
ifeq ($(findstring $(HOST), $(LINUX_HOST)),)
	# not linux (default)
	HOST_SUFFIX = 
else
	# linux
	HOST_SUFFIX = _linux
endif


##############################################################################
# Library directory tree                                                     #
##############################################################################
PROJECT=  $(notdir $(shell pwd))

LIB_PATH= lib
LIB_EXT= .a

PROJECT_LIB_DIR= $(LIB_PATH)/lib$(HOST_SUFFIX)$(SYSTEM_SUFFIX)$(OPTION_SUFFIX)
#CPROTO_FLAGS= -f3 -m -M_P_ -d -P"int \tf(\ta,\n\t\t\tb\n\t)"
# JDL added EXTRA_INCLUDE_DIR on 14-MAR-97
#CPROTO_FLAGS= -f3 -m -M_P_ -d -P"int \tf(\ta,\n\t\t\tb\n\t)" -I $(EXTRA_INCLUDE_DIR)
CPROTO_FLAGS= -f3 -m -M_P_ -d -P"int \tf(\ta,\n\t\t\tb\n\t)" \
	$(EXTRA_CFLAGS) -I $(EXTRA_INCLUDE_DIR)

##############################################################################
# Exporting  the following variables to  Slave_Makefile                      #
##############################################################################
export CFLAGS
export CC

export EXTRA_INCLUDE_DIR

export LIB_EXT

export PROJECT_LIB_DIR

export CPROTO_BIN
export CPROTO_FLAGS

export MODULE_LIST

export CI
export VERSION
export REVISION_MESSAGE
export INITIAL_REVISION_MESSAGE

##############################################################################
###  Shell Macros                                                          ###
##############################################################################
ONE_MODULE_MACRO=\
	echo ;\
	echo ;\
	echo ;\
	echo '***  MODULE : '$${MODULE}'   ***' ;\
	echo '***    '$${MESSAGE}'    :  '$${LIB}'   ***';\
	$(MAKE) --no-print-directory -f Slave_Makefile -e MODULE=$${MODULE} $${OPTION} ;\
	echo ;

ifdef RANLIB
RANLIB_MACRO=\
	echo "***    RANDOMIZING LIBRARY  : $${LIB}   ***";\
	$(RANLIB) $${LIB};
else
RANLIB_MACRO=\
	echo;
endif

MODULE_LOOP_MACRO=\
echo;\
echo;\
echo;\
for m in $(MODULE_LIST); do \
    echo '***  MODULE : '$$m'   ***' ; \
    echo '***     '$${MESSAGE}'  ***' ; \
    $(MAKE) --no-print-directory -f Slave_Makefile -e MODULE=$$m $${OPTION};\
    echo ;\
done ;\
echo;

##############################################################################
###  Compilation targets                                                   ###
##############################################################################

all: $(BIN_MODULE_LIST)

prototypes: display_variables
	@OPTION=prototypes;\
	MESSAGE="GENERATING PROTOTYPES";\
	$(MODULE_LOOP_MACRO)

$(LIB_MODULE_LIST): display_variables prototypes
	@OPTION=compiling;\
	MODULE=$@;\
	LIB=$(PROJECT_LIB_DIR)/lib$@$(LIB_EXT);\
	MESSAGE="COMPILING LIBRARY";\
	$(ONE_MODULE_MACRO)\
	$(RANLIB_MACRO)


$(BIN_MODULE_LIST): display_variables $(LIB_MODULE_LIST)
	@OPTION=compiling;\
	MODULE=$@;\
	LIB=$(PROJECT_LIB_DIR)/lib$@$(LIB_EXT);\
	MESSAGE="COMPILING LIBRARY";\
	$(ONE_MODULE_MACRO)\
	$(RANLIB_MACRO)\
	echo '***    COMPILING BINARY     : '$@'.exe   ***';\
	$(CC) $(LDFLAGS) -o $@.exe $(PROJECT_LIB_DIR)/lib$@$(LIB_EXT) $(ALL_LIBS) $(EXTRA_LIBS_DIR) $(EXTRA_LIBS)

##############################################################################
###  Check target                                                          ###
##############################################################################
.PHONY:	check
check: 
	@$(INTRO)
	@OPTION=check;\
	MESSAGE="CHECKING FILES";\
	$(MODULE_LOOP_MACRO)

.PHONY:	check_and_clean
check_and_clean: 
	@$(INTRO)
	@OPTION=check_and_clean;\
	MESSAGE="CHECKING FILES AND CLEANING";\
	$(MODULE_LOOP_MACRO)

##############################################################################
###  RCS check in target                                                   ###
##############################################################################
.PHONY: RCS_check_in
RCS_check_in: 
	@$(INTRO)
	@OPTION=RCS_check_in;\
	MESSAGE="RCS checking in";\
	$(MODULE_LOOP_MACRO)


##############################################################################
###  tar target                                                            ###
##############################################################################
.PHONY: tar
tar:  
	@$(INTRO)
	-@mkdir /tmp/TAR
	-@mkdir /tmp/TAR/$(TARDIR)
	-@chmod 755 /tmp/TAR/$(TARDIR)
	@cp -pr $(TO_ARCHIVE) /tmp/TAR/$(TARDIR)
	@( cd /tmp/TAR ; tar cvf $(TARDIR).tar ./$(TARDIR) ; $(COMPRESS) $(TARDIR).tar)
	-@if test -d $(ARCHIVE_PATH); then d=1; else  mkdir $(ARCHIVE_PATH) ; fi; 
	@cp /tmp/TAR/$(TARDIR).tar.gz $(ARCHIVE_PATH)
	-@chmod 644 $(ARCHIVE_PATH)/$(TARDIR).tar.gz
	-@rm -rf /tmp/TAR
	-@ls -l $(ARCHIVE_PATH)/$(TARDIR).tar.gz


##############################################################################
###  Automatic generation of doc  target                                   ###
##############################################################################
.PHONY: doc
doc: 
	@$(INTRO)
	@for m in $(MODULE_LIST); do \
		cd $$m;\
		echo Generate doc for Module : $$m  ;\
		../tools/generate_doc.pl $$m ;\
		cd .. ;\
	done ;




##############################################################################
###  Clean target                                                          ###
##############################################################################
.PHONY: clean
clean: 
	@$(INTRO)
	@echo
	@echo Deleting all libraries if any corresponding to $(SYSTEM) architecture
	@-rm -rf $(LIB_PATH)/lib$(HOST_SUFFIX)$(SYSTEM_SUFFIX)*/lib*
	@echo



##############################################################################
# Makefile debug target                                                    ###
##############################################################################
display_variables: 
	@$(INTRO)
	@echo 'PROJECT       :  $(PROJECT)'
	@echo 'MODULE_LIST   :  $(MODULE_LIST)'
	@echo 'OPTION_SUFFIX :  $(OPTION_SUFFIX)'
	@echo 'SYSTEM_SUFFIX :  $(SYSTEM_SUFFIX)'
	@echo 'COMPILER      :  $(CC)'
	@echo 'CFLAGS        :  $(CFLAGS)'
#	@echo 'HOST          :  $(HOST)'
#	@echo 'LINUX_HOST    :  $(LINUX_HOST)'
#	@echo 'HOST_SUFFIX   :  $(HOST_SUFFIX)'
#	@echo 'MAKE          :  $(MAKE)'
	@echo 'ALL_LIBS      :  $(ALL_LIBS)'


INTRO=\
	echo;\
	echo;\
	echo '********************************************************';\
	echo '*                                                      *';\
	echo '* ACTS-MoMuSys compilation tool                        *';\
	echo '*                                                      *';\
	echo '* Copyright (C) 1996 ACTS-MoMuSys All Rights Reserved. *';\
	echo '*                                                      *';\
	echo '* Version 1.8                                          *';\
	echo '*                                                      *';\
	echo '* Last update : 06-Aug-96                              *';\
	echo '*                                                      *';\
	echo '********************************************************';\
	echo;



##############################################################################
# Usage target                                                             ###
##############################################################################
..PHONY: usage
usage: 
	@echo 
	@echo
	@echo 'Usage :'
	@echo
	@echo '   $(MAKE) [-e SYSTEM=...] [-e DBG=1] [-e PROF=1] [module] [target]'
	@echo
	@echo '   options:'
	@echo
	@echo '     -e SYSTEM=LINUX    : compilation on LINUX'
	@echo '     -e SYSTEM=SOLARIS1 : compilation on Solaris1.x'
	@echo '     -e SYSTEM=SOLARIS2 : compilation on Solaris2.x'
	@echo '     -e SYSTEM=HP       : compilation on HP'
	@echo '     -e SYSTEM=SGI      : compilation on SGI'
	@echo '     -e SYSTEM=CONVEX   : compilation on CONVEX'
	@echo '     -e SYSTEM=ALPHA    : compilation on DEC ALPHA'
	@echo
	@echo '     -e DBG=1    : compilation and linkage with debug mode'
	@echo '                                       and all warnings'
	@echo '     -e PROF=1   : compilation and linkage with profiling mode'
	@echo '                                       and all warnings'
	@echo '     --------    : compilation and linkage in optimized mode (default) '	
	@echo
	@echo
	@echo '      target     : ---        : compile everything (default) '
	@echo '                   module     : compile this precise module'
	@echo '                   prototypes : only generate the ANSI C prototypes'
	@echo '                   tar        : create an archive file of the modules'
	@echo '                                This option needs the variable VERSION'
	@echo '                   doc        : Generate HTML doc.'
	@echo '                   RCS_check_in: Performs a RCS check in of all source and include files.'
	@echo '                   clean      : remove all the library files for the specific SYSTEM'
	@echo '                   check      : check consistency between source files/prototype file/object files'
	@echo '                   check_and_clean: Same as above plus clarification of the situation'
	@echo

