#
# qmake configuration for irix-cc
#
# From cc(1):
# 	-n32
# 	  Generates a (new) 32-bit object. This defaults to -mips3 if
# 	  -mips4 has not been specified.
# 	-LANG: ...
# 	  The language feature option group controls the source language
# 	  interpretation assumed by the compiler. The individual controls
# 	  in this group are as follows:
# 	    ansi-for-init-scope [ = ( ON|OFF ) ]
# 	      Enables or disables the ANSI scoping rules for for-init
# 	      declarations (the scope of the name declared extends to
# 	      the end of the for statement). This enables the behavior
# 	      that is required by the C++ standard. The default value
# 	      is OFF, which is the ARM behavior (the scope of the name
# 	      declared extends to the end of the block enclosing the for
# 	      statement).
# 	    bool [ = ( ON|OFF ) ]
# 	      Enables or disables the predefined bool data type, along
# 	      with the predefined values true and false. Use this option
# 	      only to suppress this type in old code that defines bool
# 	      itself.  Because this option changes the mangling of function
# 	      names with bool parameters, all files comprising a program
# 	      should be compiled with consistent options.
# 	      Default is ON.
# 	      The _BOOL feature macro can be used in #ifdefs to do conditional
# 	      compilation based on whether or not this option is enabled.
# 	    std
# 	      Enables use of the standard C++ library and standard-
# 	      conforming iostream library.  Specifying this flag also
# 	      triggers other standard-conforming behavior, such as the
# 	      new rules for the scope of for loop initializers.
#

MAKEFILE_GENERATOR	= UNIX
TARGET_PLATFORM		= unix
TEMPLATE		= app
CONFIG			+= qt warn_on release link_prl
QT			+= core gui
QMAKE_COMPILER_DEFINES  += __sgi __EDG

QMAKE_CC		= cc
QMAKE_LEX		= flex
QMAKE_LEXFLAGS		=
QMAKE_YACC		= yacc
QMAKE_YACCFLAGS		= -d
QMAKE_CFLAGS		= -n32 -signed -woff 1209,1355,1375,1424,3303
QMAKE_CFLAGS_DEPS	= -M
QMAKE_CFLAGS_WARN_ON	= -fullwarn
QMAKE_CFLAGS_WARN_OFF	=
QMAKE_CFLAGS_RELEASE	= -O2 -OPT:Olimit=3000
QMAKE_CFLAGS_DEBUG	= -g
QMAKE_CFLAGS_SHLIB	=
QMAKE_CFLAGS_STATIC_LIB	= $$QMAKE_CFLAGS_SHLIB
QMAKE_CFLAGS_YACC	= -woff 1110,1174,3262
QMAKE_CFLAGS_THREAD	=

QMAKE_CXX		= CC
QMAKE_CXXFLAGS		= -n32 -signed -LANG:std:libc_in_namespace_std=ON -woff 1209,1355,1375,1424,3303
QMAKE_CXXFLAGS_DEPS	= $$QMAKE_CFLAGS_DEPS
QMAKE_CXXFLAGS_WARN_ON	= $$QMAKE_CFLAGS_WARN_ON
QMAKE_CXXFLAGS_WARN_OFF	= $$QMAKE_CFLAGS_WARN_OFF
QMAKE_CXXFLAGS_RELEASE	= $$QMAKE_CFLAGS_RELEASE
QMAKE_CXXFLAGS_DEBUG	= $$QMAKE_CFLAGS_DEBUG
QMAKE_CXXFLAGS_SHLIB	= $$QMAKE_CFLAGS_SHLIB
QMAKE_CXXFLAGS_STATIC_LIB = $$QMAKE_CFLAGS_STATIC_LIB
QMAKE_CXXFLAGS_YACC	= $$QMAKE_CFLAGS_YACC
QMAKE_CXXFLAGS_THREAD	=

QMAKE_INCDIR		=
QMAKE_LIBDIR		=
QMAKE_INCDIR_X11	=
QMAKE_LIBDIR_X11	=
QMAKE_INCDIR_QT		= $$[QT_INSTALL_HEADERS]
QMAKE_LIBDIR_QT		= $$[QT_INSTALL_LIBS]
QMAKE_INCDIR_OPENGL	=
QMAKE_LIBDIR_OPENGL	=

QMAKE_LINK		= CC
QMAKE_LINK_SHLIB	= CC
QMAKE_LFLAGS		= -n32
QMAKE_LFLAGS_RELEASE	=
QMAKE_LFLAGS_DEBUG	= -g
QMAKE_LFLAGS_SHLIB	= -shared
QMAKE_LFLAGS_PLUGIN	= $$QMAKE_LFLAGS_SHLIB
QMAKE_LFLAGS_SONAME	= -Wl,-soname,
QMAKE_LFLAGS_THREAD	=
QMAKE_LFLAGS_NOUNDEF	= -Wl,-no_unresolved
QMAKE_LFLAGS_RPATH	= -Wl,-rpath,

QMAKE_LIBS		=
QMAKE_LIBS_DYNLOAD	=
QMAKE_LIBS_X11		= -lXext -lX11 -lm
QMAKE_LIBS_X11SM	= -lSM -lICE
QMAKE_LIBS_OPENGL	= -lGLU -lGL -lm
QMAKE_LIBS_OPENGL_QT	= -lGL
QMAKE_LIBS_THREAD	= -lpthread

QMAKE_MOC		= $$[QT_INSTALL_BINS]/moc
QMAKE_UIC		= $$[QT_INSTALL_BINS]/uic

QMAKE_AR		= CC -ar -o
QMAKE_OBJCOPY           = objcopy
QMAKE_RANLIB		=

QMAKE_CLEAN		= -r $(OBJECTS_DIR)so_locations $(OBJECTS_DIR)ii_files

QMAKE_TAR		= tar -cf
QMAKE_GZIP		= gzip -9f

QMAKE_COPY		= cp -f
QMAKE_MOVE		= mv -f
QMAKE_DEL_FILE		= rm -f
QMAKE_DEL_DIR		= rmdir
QMAKE_CHK_DIR_EXISTS	= test -d
QMAKE_MKDIR		= mkdir -p
include(../common/unix.conf)
load(qt_config)
