if ! $(PlatformRules_INCLUDED) {
PlatformRules_INCLUDED = TRUE ;

#
# Globals set by platform
#

# POSITION_INDEPENDENT_CODE_FLAG = Flag to generate position-independent code

if $(OS) = CYGWIN {
  POSITION_INDEPENDENT_CODE_FLAG ?= ;
} else {
  POSITION_INDEPENDENT_CODE_FLAG ?= -fPIC ;
}

# LINKER_PASSTHROUGH_FLAG = Flag to pass an argument through to the linker

LINKER_PASSTHROUGH_FLAG ?= -Wl, ;

# SHARED_FLAG = Flag to generate shared library

if $(OS) = MACOSX {
   SHARED_FLAG ?= -fno-common -dynamiclib ;
} else {
	SHARED_FLAG ?= -shared ;
}

# ENV_VARS_OK = Required to build shared library.
#
# Inhibits building shared library on MAC OS X if
# user has not set DYLD_BIND_AT_LAUNCH=YES environment 
# variable that tells loader to do early binding.

if $(OS) = MACOSX {
  if $(DYLD_BIND_AT_LAUNCH) = YES {
     ENV_VARS_OK ?= YES ;
  } else {
     ENV_VARS_OK ?= NO ;
     ENV_VARS_MSG ?= DYLD_BIND_AT_LAUNCH=YES ;
  }
} else {
     ENV_VARS_OK ?= YES ;
}
  
# LIBRARY_PATH_SEARCH_FLAG = Library search path flag

LIBRARY_PATH_SEARCH_FLAG ?= -L ;

# RUNTIME_SHARED_LIBRARY_PATH_FLAG = Runtime shared library search path flag

if $(OS) = SOLARIS {
  RUNTIME_SHARED_LIBRARY_PATH_FLAG ?= -R ;
} else {
  RUNTIME_SHARED_LIBRARY_PATH_FLAG ?= -rpath ;
}

# LINKTIME_SHARED_LIBRARY_PATH_FLAG = Linktime shared library search path flag

if $(OS) = SOLARIS {
  STATIC_LIBRARY_PATH_FLAG ?= -L ;
} else {
  STATIC_LIBRARY_PATH_FLAG ?= -rpath-link ;
}

# GCC_ROOTDIR = GCC root directory
# CC = C compiler
# C++ = C++ compiler
# LINK = C/C++ linker

if $(GCC_ROOTDIR) {
  CC = $(GCC_PREFIX) $(GCC_ROOTDIR)/bin/gcc ;
  C++ = $(GCC_PREFIX) $(GCC_ROOTDIR)/bin/g++ ;
  LINK = $(C++) $(LINKER_PASSTHROUGH_FLAG)$(RUNTIME_SHARED_LIBRARY_PATH_FLAG)
                $(LINKER_PASSTHROUGH_FLAG)$(GCC_ROOTDIR)/lib
                $(LINKER_PASSTHROUGH_FLAG)$(STATIC_LIBRARY_PATH_FLAG)
                $(LINKER_PASSTHROUGH_FLAG)$(GCC_ROOTDIR)/lib ;
} else {
  CC = $(GCC_PREFIX) gcc ;
  C++ = $(GCC_PREFIX) g++ ;
  LINK = $(C++) ;
}

# PROFILE_FLAGS = flags for profiling

if $(OS) = SOLARIS {
	PROFILE_FLAGS ?= -pg ;
} else {
        if $(OS) = LINUX {
	        PROFILE_FLAGS ?= -pg ;
        } else {
        	PROFILE_FLAGS ?= -p ;
        }
}

# OPTIMIZE_FLAGS = flags for optimization

OPTIMIZE_FLAGS ?= -O3 -DEUROPA_FAST ;
OPTIM = ; # suppress built-in optimization

# COVERAGE_FLAGS = flags for code coverage (e.g., gcov)

COVERAGE_FLAGS ?= -fprofile-arcs -ftest-coverage ;

# WARNING_FLAGS = flags for warnings

if $(OS) = BEOS {
  WARNING_FLAGS ?= -Wall -Wno-unused -Wno-sign-promo -Wno-multichar ;
} else {
  WARNING_FLAGS ?= -Wall ;
}

# DEBUG_FLAGS = flags to enable debugging

DEBUG_FLAGS ?= -g3 ;

# PTHREADS_LIBRARY = library with pthread related functions

if $(OS) = BEOS {
  PTHREADS_LIBRARY = condvar ;
} else {
  PTHREADS_LIBRARY = pthread ;
}

# THREADED_LINK_FLAGS = flags to enable multi-threaded execution

THREADED_LINK_FLAGS ?= -l$(PTHREADS_LIBRARY) ;

# SUFSHARE = suffix for shared libraries

if $(OS) = CYGWIN {
  SUFSHARE ?= .dll ;
} else {
	if $(OS) = MACOSX {
	   SUFSHARE ?= .dylib ;
	}
	else {
         SUFSHARE ?= .so ;
	}
}

# JAVA_HOME = java root directory
# JAVA = java virtual machine
# JAVAC = java compiler
# JAR = java archiver

if $(JAVA_HOME) {
  JAVA ?= [ FDirName $(JAVA_HOME:J=" ") bin java ] ;
  JAVAC ?= [ FDirName $(JAVA_HOME:J=" ") bin javac ] ;
  JAR ?= [ FDirName $(JAVA_HOME:J=" ") bin jar ] ;
} else {
  JAVA ?= java ;
  JAVAC ?= javac ;
  JAR ?= jar ;
}

# CLASSPATH_SEPARATOR = separator for java class path

if $(OS) = CYGWIN {
  CLASSPATH_SEPARATOR = '";"' ;
  local colon = \: ;
  CLASSPATH = \"$(CLASSPATH:J=$(colon))\" ;
} else {
  CLASSPATH_SEPARATOR = ":" ;
}

# DLOPEN_LIBRARY = library with open libraries functions

if $(OS) = CYGWIN {
  DLOPEN_LIBRARY = ;
} else {
  DLOPEN_LIBRARY = dl ;
}

#
# Other miscellaneous platform tweaks
#

if $(OS) = CYGWIN {
  LINKFLAGS += -Wl,--enable-auto-import ;
}


if $(OS) = BEOS {
  LINKLIBS += -lbe ;
}

# Using ar scan causes problems on MacOS X and Cygwin
# Without ar scan building static libraries is more
# compatible with building without libraries.

NOARSCAN = true ;

} # PlatformRules_INCLUDED
