 # $Id$
 #
 # This file is part of the RHexLib Robot Control Software
 #
 #  The contents of this file are subject to the RHexLib Public
 # License Version 2.0 (the "License"); you may not use this file
 # except in compliance with the License. To obtain a copy of the
 # License, please contact <ulucs+rhexlib@cs.cmu.edu>.
 #
 #  Software distributed under the License is distributed on an "AS
 # IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
 # implied. See the License for the specific language governing
 # rights and limitations under the License.
 #
 #  The Original Code is RHexLib Robot Control Software.
 #
 #  The Initial Developer of the Original Code is
 #    The Regents of the University of Michigan.
 #
 #  Portions created by 
 #    Regents of the University of Michigan
 # are Copyright (C) 2003.  All Rights Reserved.
 #
 #  Contributor(s): Uluc Saranli.
 #
 #  Alternatively, the contents of this file may be used under the
 # terms of the GNU Public license (the "GPL License"), in which
 # case the provisions of the GNU Public License are applicable
 # instead of those above.  If you wish to allow use of your version
 # of this file only under the terms of the GPL License and not to
 # allow others to use your version of this file under the RHexLib
 # Public License, indicate your decision by deleting the provisions
 # above and replace them with the notice and other provisions
 # required by the GPL License.  If you do not delete the provisions
 # above, a recipient may use your version of this file under either
 # the RHexLib Public License or the GPL License."
 #
 # Uluc Saranli <ulucs+rhexlib@cs.cmu.edu>

 ######################################################################
 # $Id$
 #
 # The Makefile for the utilities
 #
 # Created       : Eric Klavins, 04/16/2001
 # Last Modified : Jay Gowdy, 09/01/2002
 #
 ######################################################################

UNAME = $(shell uname)

############################################
# Modify the following segment only.       #
############################################

# This line defines the name of the executables. Note that we assume
# the presence of an associated .cc file as well.
EXEC = modeBuilder

# This line defines the name of the LEX and YACC sources. Note that we 
# assume the the following two extensions: .l (for LEX) and .y (for YACC) 
LEX_SRC  = modeBuilder.l
YACC_SRC = modeBuilder.y

# This line specifies all the other source files that need to be
# compiled and linked together with the executable
SOURCES = 

# This line specifies any additional flags that you want to feed the
# compiler. It is usually used to specify additional include
# directories through -I and additional link directories through -L
AUXFLAGS = -DYY_NO_UNPUT

# This line specifies any additional libraries that you want to link
# your executable against. Note that you MUST specify the full path of
# the library in question.
AUXLIBS =

LIBS = libutils.a


#################################################
# Lex and Yacc related make operations          #
#################################################

# Parsing tool definitions
#
LEX  = flex -I                     # LEX program
YACC = bison -d                    # YACC program

# Parsing related derived parameters and updates 
#
LEX_CC   = $(LEX_SRC:.l=.lex.cc)
LEX_OBJ  = $(LEX_SRC:.l=.lex.o)
YACC_CC  = $(YACC_SRC:.y=.yacc.cc)
YACC_HH  = $(YACC_SRC:.y=.yacc.hh)
YACC_OBJ = $(YACC_SRC:.y=.yacc.o)

SOURCES += $(LEX_CC) $(YACC_CC)


#################################################
# The rest of this file should not be modified  #
#################################################

ifndef RHEX_DIR
$(error RHEX_DIR environment variable is not defined!)
endif

everything: all d2g task_mgr

# Standard targets
#
include $(RHEX_DIR)/tools/bintargets.mk

ifeq ($(UNAME),QNX)
TASK_MGR := task_mgr_qnx
AUXLIBS += -lsocket
endif

ifeq ($(UNAME),Linux)
TASK_MGR := task_mgr_linux
AUXLIBS += -lpthread
endif

CLEAN_EXTRA = d2g

# Parsing related targets
#
parser: yacc lex 

lex: $(LEX_CC)

yacc: $(YACC_CC)

$(LEX_OBJ): $(LEX_CC) $(YACC_CC) $(YACC_HH)

$(YACC_OBJ): $(YACC_CC)

$(LEX_CC): $(LEX_SRC) $(YACC_HH)
	$(LEX) -o$(LEX_CC) $(LEX_SRC)

$(YACC_CC) $(YACC_HH): $(YACC_SRC)
	$(YACC) --output-file=$(YACC_CC) $(YACC_SRC)
	@if test -e $(YACC_CC).h; then \
		$(MV) -f $(YACC_CC).h $(YACC_HH); \
	fi

clean_parser:
	$(RM) *.yacc.cc *.yacc.hh *.lex.cc

install: modeBuilder	
	cp modeBuilder $(RHEX_DIR)/../bin

d2g: d2g.c
	gcc -o d2g d2g.c
	chmod 755 sm-setup.pl cc2d.pl cc2g

task_mgr: $(TASK_MGR).o
	$(CXX) -o $@ $(TASK_MGR).o -L$(RHEX_DIR)/lib -lbase -lutils $(AUXLIBS)
