#
# qmake configuration for hpuxi-acc-64
#
# We define _POSIX_C_SOURCE to 199506L when using threads, therefore
# we also need to redefine _HPUX_SOURCE.
# From pthread(3t):
# 	Some documentation will recommend the use of -D_REENTRANT for
# 	compilation.  While this also functions properly, it is considered
# 	an obsolescent form.
# See pthread(3t) for more details.
#
# From the "HP aC++ Online Programmer's Guide":
# 	When +DA2.0W is specified:
# 	* 64-bit SVR4 Executable and Linking Format (ELF) object files
# 	  are generated for PA-RISC 2.0. 
# 	* The preprocessor predefined macro, __LP64__ is defined. 
# 	* The correct path for 64-bit system and language libraries is
# 	  selected.
# 	When +DD32 is specified:
# 	* The size of an int, long, or pointer data type is 32-bits. 
# 	  The size of an int data type is 32-bits. The size of a long or
# 	  pointer data type is 64-bits.
# 	* This is the default, currently equivalent to +DA1.1 architecture.
# 	When +DD64 is specified:
# 	* The size of an int data type is 32-bits. The size of a long or
# 	  pointer data type is 64-bits.
# 	* This is currently equivalent to +DA2.OW architecture.
# 	* The preprocessor predefined macro, __LP64__ is defined.
# 	Using +DS to Specify Instruction Scheduling:
# 	* By default, the compiler performs scheduling tuned for the system
# 	  on which you are compiling, or, if specified, tuned for the setting
# 	  of the +DA option.
#
# From the online "C/HP-UX Reference Manual":
#	-Aa
# 	  Enables strict ANSI C compliance.
# 	-Ae
# 	  Enables ANSI C compliance, HP value-added features (as described
# 	  for +e option), and _HPUX_SOURCE name space macro. It is equivalent
# 	  to -Aa +e -D_HPUX_SOURCE.
# 	+e
# 	  Enables the following HP value added features while compiling in
# 	  ANSI C mode: sized enum, long long, long pointers, compiler supplied
# 	  defaults for missing arguments to intrinsic calls, and $ in identifier
# 	  HP C extensions.
#

MAKEFILE_GENERATOR	= UNIX
TARGET_PLATFORM		= unix
TEMPLATE		= app
CONFIG			+= qt warn_on release plugin_no_soname
QT			+= core gui

QMAKE_CC		= cc
QMAKE_LEX		= lex
QMAKE_LEXFLAGS		=
QMAKE_YACC		= yacc
QMAKE_YACCFLAGS		= -d
QMAKE_CFLAGS		= +DD64 +DSitanium -w
QMAKE_CFLAGS_WARN_ON	=
QMAKE_CFLAGS_WARN_OFF	= -w
QMAKE_CFLAGS_RELEASE	= +O1
QMAKE_CFLAGS_DEBUG	= -g
QMAKE_CFLAGS_SHLIB	= +Z
QMAKE_CFLAGS_STATIC_LIB	= $$QMAKE_CFLAGS_SHLIB
QMAKE_CFLAGS_YACC	=
QMAKE_CFLAGS_THREAD	= -D_POSIX_C_SOURCE=199506L -D_HPUX_SOURCE -D_REENTRANT -mt

QMAKE_CXX		= aCC
QMAKE_CXXFLAGS		= $$QMAKE_CFLAGS -D__STRICT_ANSI__ -D_HPUX_SOURCE
QMAKE_CXXFLAGS_DEPS	= +M
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	= -D_POSIX_C_SOURCE=199506L -D_REENTRANT -mt

QMAKE_INCDIR		=
QMAKE_LIBDIR		=
QMAKE_INCDIR_X11	= /usr/include/X11R6
QMAKE_LIBDIR_X11	= /usr/lib/hpux64/X11R6
QMAKE_INCDIR_QT		= $$[QT_INSTALL_HEADERS]
QMAKE_LIBDIR_QT		= $$[QT_INSTALL_LIBS]
QMAKE_INCDIR_OPENGL	= /opt/graphics/OpenGL/include /usr/contrib/X11R6/include
QMAKE_LIBDIR_OPENGL	= /opt/graphics/OpenGL/lib/hpux64 /usr/contrib/X11R6/lib/hpux64

QMAKE_LINK		= aCC
QMAKE_LINK_SHLIB	= aCC
QMAKE_LFLAGS		= +DD64 +DSitanium -Wl,+s
QMAKE_LFLAGS_RELEASE	= -O
QMAKE_LFLAGS_DEBUG	= -g
QMAKE_LFLAGS_SHLIB	= -b -Wl,-a,shared
QMAKE_LFLAGS_PLUGIN	= $$QMAKE_LFLAGS_SHLIB
QMAKE_LFLAGS_SONAME	= -Wl,+h,
QMAKE_LFLAGS_THREAD	=
QMAKE_LFLAGS_NOUNDEF	= -Wl,+noallowunsats
QMAKE_LFLAGS_RPATH	=

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

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

QMAKE_AR		= ar cqs
QMAKE_OBJCOPY           = objcopy
QMAKE_RANLIB		=

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)
