# Any Device - API - Linux - gcc
# $Workfile: makefile $
# $Revision: 9 $
# $Date: 2/18/08 9:32a $
# Common makefile content for the API libraries.

CC			= gcc
CC_FLAGS	= -c -O2 -fPIC -Wall -pthread
CC_FLAGS	+= -DMAKEFILE_API_DEV_VERSION=${MAKEFILE_API_DEV_VERSION}
CC_FLAGS	+= -DMAKEFILE_API_DEV_OS_VERSION=${MAKEFILE_API_DEV_OS_VERSION}
CC_FLAGS	+= -DMAKEFILE_API_GSC_VERSION=${MAKEFILE_API_GSC_VERSION}
CC_FLAGS	+= -DMAKEFILE_API_GSC_OS_VERSION=${MAKEFILE_API_GSC_OS_VERSION}
CC_FLAGS	+= -DMAKEFILE_API_DEV_API_VERSION=${MAKEFILE_API_DEV_API_VERSION}
CC_FLAGS	+= -DTRUE=1
CC_FLAGS	+= -DFALSE=0
CC_FLAGS	+= -I..
CC_FLAGS	+= -I../..
CC_FLAGS	+= -I../../../../common/api
CC_FLAGS	+= -I../../../../common/api/linux
CC_FLAGS	+= -I../../../../common/driver/linux
CC_FLAGS	+= ${DEBUG}
CONF		= /etc/ld.so.conf
DEP_FILE	= makefile.dep
LD_FLAGS	= -shared -soname ${NAME_SO} -lc -lpthread -x -X --no-undefined
LD_FLAGS	+= -init my_init -fini my_fini
LIB_DIR		= /usr/local/lib
LIB_VER		= ${MAKEFILE_API_DEV_VERSION}.${MAKEFILE_API_DEV_OS_VERSION}.${MAKEFILE_API_GSC_VERSION}.${MAKEFILE_API_GSC_OS_VERSION}.${MAKEFILE_API_DEV_API_VERSION}

NAME_LINK	= lib${BASENAME}_api.so
NAME_REAL	= ${NAME_LINK}.${LIB_VER}
NAME_SO		= ${NAME_LINK}.${MAKEFILE_API_DEV_VERSION}
TARGET		= ${NAME_REAL}
VPATH		=
VPATH		+= ..
VPATH		+= ../..
VPATH		+= ../../../../common/api
VPATH		+= ../../../../common/api/linux



.c.o:
	@echo == Compiling: $<
	@-chmod +rw ${DEP_FILE}
	@# Get the dependency list for this module.
	@-${CC} -MM ${CC_FLAGS} $< >  .tmp1
	@# Remove trailing white space and backslash, if present.
	@-sed -e "s/[ ]*[\\\\]//g" < .tmp1 > .tmp2
	@# Put everything on seperate lines.
	@-tr [:space:] \\n < .tmp2 > .tmp3
	@# Remove all of the system include files.
	@-grep -v "^[ ]*/" < .tmp3 > .tmp4
	@# Remove all empty lines.
	@-grep [[:alnum:]] < .tmp4 > .tmp5
	@# Put everything on the same line.
	@-tr '\n' '\040' < .tmp5 > .tmp6
	@-echo -e '\012' >> .tmp6
	@# Add all the other dependencies to the end of this file.
	@-echo >> ${DEP_FILE}
	@-grep -v "^[ ]*$@" < ${DEP_FILE} >> .tmp6
	@# Remove blank lines from the list.
	@-grep "[[:alnum:]]" < .tmp6 > .tmp7
	@# Sort the list and put it in the dependency file.
	@-sort < .tmp7 > ${DEP_FILE}
	@# Cleanup.
	@rm -f .tmp*
	@# Compile the module.
	@${CC} ${CC_FLAGS} $< -o $@



all:
	@make -s DEBUG=-g ${TARGET}
	@echo ==== All Done

release:
	@make -s "DEBUG=-DNDEBUG" ${TARGET}
	@rm -f *.a *.o ${DEP_FILE}
	@echo "" > ${DEP_FILE}
	@echo ==== Release Done

${TARGET}: ${OBJ_FILES}
	@echo ==== Linking: $@
	@rm -f ${NAME_LINK}
	@gcc -shared -Wl,-soname,${NAME_SO} -o tmp.so ${OBJ_FILES} -lc
	@nm tmp.so > tmp1.txt
	@sed -e "s/^[0-9a-f]*[ ]*[a-zA-Z][ ]*//" < tmp1.txt > tmp2.txt
	@grep "^${BASENAME}" < tmp2.txt > tmp3.txt
	@echo _init >> tmp3.txt
	@echo _fini >> tmp3.txt
	@ld ${LD_FLAGS} --retain-symbols-file tmp3.txt -o ${TARGET} ${OBJ_FILES}
	@rm -f tmp.so tmp*.txt

clean:
	@echo ==== Cleaning ...
	@find . -maxdepth 1 -name "*.o"				-exec chmod 666 {} \; -exec rm -f {} \;
	@find . -maxdepth 1 -name "*.o.*"			-exec chmod 666 {} \; -exec rm -f {} \;
	@find . -maxdepth 1 -name "*.scc"			-exec chmod 666 {} \; -exec rm -f {} \;
	@find . -maxdepth 1 -name "install"			-exec chmod 666 {} \; -exec rm -f {} \;
	@find . -maxdepth 1 -name "${TARGET}"		-exec chmod 666 {} \; -exec rm -f {} \;
	@find . -maxdepth 1 -name "${NAME_LINK}*"	-exec chmod 666 {} \; -exec rm -f {} \;
	@find . -maxdepth 1 -name "${DEP_FILE}"		-exec chmod 666 {} \; -exec rm -f {} \;
	@echo "" > ${DEP_FILE}

install:
	@echo ==== Creating the install script ...
	@echo "#!/bin/sh"															> install
	@echo ""																	>> install
	@echo "LIB_VER=${LIB_VER}"													>> install
	@echo "SUFFIX=.\$${LIB_VER}"												>> install
	@echo ""																	>> install
	@echo "echo Installing ${PRODUCT} API Library"									>> install
	@echo "echo Installing ${NAME_LINK}\$${SUFFIX}"								>> install
	@echo ""																	>> install
	@echo "count() {"															>> install
	@echo "	A=\`grep -w ${LIB_DIR}  ${CONF} | wc -l\`"							>> install
	@echo "	B=\`grep -w ${LIB_DIR}/ ${CONF} | wc -l\`"							>> install
	@echo "	COUNT=\`expr \$${A} + \$${B}\`"										>> install
	@echo "	echo \$${COUNT}"													>> install
	@echo "}"																	>> install
	@echo ""																	>> install
	@echo "if [ \`count\` -le 0 ]"												>> install
	@echo "then"																>> install
	@echo "	echo Adding ${LIB_DIR} to ${CONF} ..."								>> install
	@echo "	echo >> ${CONF}"													>> install
	@echo "	echo ${LIB_DIR} >> ${CONF}"											>> install
	@echo "fi"																	>> install
	@echo ""																	>> install
	@echo "if [ \`count\` -le 0 ]"												>> install
	@echo "then"																>> install
	@echo "	echo ERROR: Unable to modify ${CONF}."								>> install
	@echo "	exit 1"																>> install
	@echo "fi"																	>> install
	@echo ""																	>> install
	@echo "mkdir -p ${LIB_DIR}"													>> install
	@echo "rm -f ${LIB_DIR}/${NAME_LINK}"										>> install
	@echo "rm -f ${LIB_DIR}/${NAME_LINK}\$${SUFFIX}"							>> install
	@echo "rm -f \`echo ${LIB_DIR}/${NAME_LINK}\$${SUFFIX} | cut -d . -f1-3\`"	>> install
	@echo "cp -f ${NAME_LINK}\$${SUFFIX} ${LIB_DIR}/"							>> install
	@echo "ln -s ${NAME_LINK}\$${SUFFIX} ${LIB_DIR}/${NAME_LINK}"				>> install
	@echo "ldconfig"															>> install
	@echo "echo Installation done."												>> install
	@chmod 555 ./install

start:
	@echo ==== Starting ...
	@./install

${DEP_FILE}:
	@echo ==== Creating: $@
	@echo "" > ${DEP_FILE}

include ${DEP_FILE}

