###############################################################################
# Variable definitions for targets to build
###############################################################################
#___INFO__MARK_BEGIN__
##########################################################################
#
#  The Contents of this file are made available subject to the terms of
#  the Sun Industry Standards Source License Version 1.2
#
#  Sun Microsystems Inc., March, 2001
#
#
#  Sun Industry Standards Source License Version 1.2
#  =================================================
#  The contents of this file are subject to the Sun Industry Standards
#  Source License Version 1.2 (the "License"); You may not use this file
#  except in compliance with the License. You may obtain a copy of the
#  License at http://gridengine.sunsource.net/Gridengine_SISSL_license.html
#
#  Software provided under this License is provided on an "AS IS" basis,
#  WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
#  WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
#  MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
#  See the License for the specific provisions governing your rights and
#  obligations concerning the Software.
#
#  The Initial Developer of the Original Code is: Sun Microsystems, Inc.
#
#  Copyright: 2003 by Sun Microsystems, Inc.
#
#  All Rights Reserved.
#
##########################################################################
#___INFO__MARK_END__

LCKLIB_DIR = $(SDIR)/libs/lck

LCKLIB = liblck$(LIBEXT)
# we have a cyclic dependency liblck <--> libuti.
# the build process can be fixed by building liblck as static lib
# LCKLIB = liblck.a

LCKLIB_SRC = \
              sge_lock.c \
              sge_lock_fifo.c \
              sge_mtutil.c

LCKLIB_OBJS = $(LCKLIB_SRC:.c=.o)

LCKLIB_TEST_ADD_LIBS = $(COMMLISTSLIB) $(RMONLIB) $(UTILIB) $(WINGRIDLIB) $(LCKLIB) $(LIBS)

# defines does not work at this time
LCKLIB_TEST_LIB_DEPENDS = liblck.a librmon.a libcommlists.a libuti.a

LCKLIB_TEST_OBJS = \
              test_sge_lock_main.o \
              test_sge_lock_simple.o \
              test_sge_lock_multiple.o \
              test_sge_lock_fifo.o \
              test_sge_mutex_fifo.o \
              test_sge_deadlock.o \
              test_sge_recursive.o \
              test_sge_lock_fifo.o

LCKLIB_TEST_PROGS = \
              test_sge_lock_simple \
              test_sge_lock_multiple \
              test_sge_deadlock \
              test_sge_recursive \
              test_sge_lock_fifo

###############################################################################
# global rules: all, clean, depend, messages
###############################################################################
lcklib: $(LCKLIB) $(LCKLIB_TEST_PROGS)

lcklib_clean:
		$(RM) $(LCKLIB_OBJS) liblck.a liblck$(SHAREDEXT) $(LCKLIB_TEST_OBJS) $(LCKLIB_TEST_PROGS)

lcklib_depend:
		$(DEPEND) -f$(LCKLIB_DIR)/lck_dependencies $(LCKLIB_DIR)/*.c

lcklib_messages:
	@echo Creating $@
	@for i in `ls $(LCKLIB_DIR)/*.c`; do \
	   $(CC) $(CFLAGS) -DEXTRACT_MESSAGES -E $$i | $(XGETTEXT) - ;\
	done

###############################################################################
# rules to build library
###############################################################################
liblck.a:	$(LCKLIB_OBJS) 
	$(AR) $(ARFLAGS) liblck.a $(LCKLIB_OBJS)
	$(RANLIB) liblck.a

# broken dependencies: we have to add libuti here
liblck$(SHAREDEXT): $(LCKLIB_OBJS) $(RMONLIB)
	$(SHAREDLD) $(SHARED_LFLAGS) -o liblck$(SHAREDEXT) $(LCKLIB_OBJS) $(LIBS) -lc

###############################################################################
# include dependencies for object files generated by sge_depend
###############################################################################
include $(LCKLIB_DIR)/lck_dependencies

###############################################################################
# rules to build object codes
###############################################################################
sge_lock.o:	$(LCKLIB_DIR)/sge_lock.c
		$(CC) $(CFLAGS) $(SHARED_CFLAGS) -c $(LCKLIB_DIR)/sge_lock.c

sge_lock_fifo.o:	$(LCKLIB_DIR)/sge_lock_fifo.c
		$(CC) $(CFLAGS) $(SHARED_CFLAGS) -c $(LCKLIB_DIR)/sge_lock_fifo.c

sge_mtutil.o:	$(LCKLIB_DIR)/sge_mtutil.c
		$(CC) $(CFLAGS) $(SHARED_CFLAGS) -c $(LCKLIB_DIR)/sge_mtutil.c

###############################################################################
# rules to build object codes
###############################################################################
test_sge_lock_main.o: $(LCKLIB_DIR)/test_sge_lock_main.c
		$(CC) $(CFLAGS) -c $(LCKLIB_DIR)/test_sge_lock_main.c

test_sge_lock_simple.o:	$(LCKLIB_DIR)/test_sge_lock_simple.c
		$(CC) $(CFLAGS) -c $(LCKLIB_DIR)/test_sge_lock_simple.c

test_sge_lock_simple: test_sge_lock_main.o test_sge_lock_simple.o $(LCKLIB_TEST_LIB_DEPENDS)
		$(LD_WRAPPER) $(CC) $(CFLAGS) -o test_sge_lock_simple $(LFLAGS) test_sge_lock_main.o test_sge_lock_simple.o  $(LCKLIB_TEST_ADD_LIBS)

test_sge_mutex_fifo.o: $(LCKLIB_DIR)/test_sge_mutex_fifo.c
		$(CC) $(CFLAGS) -c $(LCKLIB_DIR)/test_sge_mutex_fifo.c

test_sge_mutex_fifo: test_sge_mutex_fifo.o $(LCKLIB_TEST_LIB_DEPENDS)
		$(LD_WRAPPER) $(CC) $(CFLAGS) -o test_sge_mutex_fifo $(LFLAGS) test_sge_mutex_fifo.o $(LCKLIB_TEST_ADD_LIBS) 

test_sge_lock_multiple.o: $(LCKLIB_DIR)/test_sge_lock_multiple.c
		$(CC) $(CFLAGS) -c $(LCKLIB_DIR)/test_sge_lock_multiple.c

test_sge_lock_multiple: test_sge_lock_main.o test_sge_lock_multiple.o $(LCKLIB_TEST_LIB_DEPENDS)
		$(LD_WRAPPER) $(CC) $(CFLAGS) -o test_sge_lock_multiple $(LFLAGS) test_sge_lock_main.o test_sge_lock_multiple.o $(LCKLIB_TEST_ADD_LIBS)

test_sge_deadlock.o:	$(LCKLIB_DIR)/test_sge_deadlock.c
		$(CC) $(CFLAGS) -c $(LCKLIB_DIR)/test_sge_deadlock.c

test_sge_deadlock: test_sge_lock_main.o test_sge_deadlock.o $(LCKLIB_TEST_LIB_DEPENDS)
		$(LD_WRAPPER) $(CC) $(CFLAGS) -o test_sge_deadlock $(LFLAGS) test_sge_lock_main.o test_sge_deadlock.o $(LCKLIB_TEST_ADD_LIBS)

test_sge_recursive.o: $(LCKLIB_DIR)/test_sge_recursive.c
		$(CC) $(CFLAGS) -c $(LCKLIB_DIR)/test_sge_recursive.c

test_sge_recursive: test_sge_lock_main.o test_sge_recursive.o $(LCKLIB_TEST_LIB_DEPENDS)
		$(LD_WRAPPER) $(CC) $(CFLAGS) -o test_sge_recursive $(LFLAGS) test_sge_lock_main.o test_sge_recursive.o $(LCKLIB_TEST_ADD_LIBS)

test_sge_lock_fifo.o: $(LCKLIB_DIR)/test_sge_lock_fifo.c
		$(CC) $(CFLAGS) -c $(LCKLIB_DIR)/test_sge_lock_fifo.c

test_sge_lock_fifo: test_sge_lock_main.o test_sge_lock_fifo.o $(LCKLIB_TEST_LIB_DEPENDS)
		$(LD_WRAPPER) $(CC) $(CFLAGS) -o test_sge_lock_fifo $(LFLAGS) test_sge_lock_main.o test_sge_lock_fifo.o $(LCKLIB_TEST_ADD_LIBS)
