# cmake/modules/xwin.cmake
#
# Copyright (C) 2006  Alan W. Irwin
#
# This file is part of PLplot.
#
# PLplot is free software; you can redistribute it and/or modify
# it under the terms of the GNU Library General Public License as published
# by the Free Software Foundation; version 2 of the License.
#
# PLplot is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU Library General Public License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with the file PLplot; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA

# Module for determining all configuration variables related to the xwin
# device driver.
# The following variables are set/modified:
# PLD_xwin		  - ON means the xwin device is enabled.
# xwin_COMPILE_FLAGS	  - individual COMPILE_FLAGS required to compile xwin
# 			    device.
# xwin_LINK_FLAGS	  - individual LINK_FLAGS for dynamic xwin device.
# DRIVERS_LINK_FLAGS	  - list of LINK_FLAGS for all static devices.
# PL_HAVE_PTHREAD         - ON means use pthreads with xwin driver.
# PLPLOT_MUTEX_RECURSIVE  - Portable definition for PTHREAD_MUTEX_RECURSIVE
if(PLD_xwin)
  if(X11_FOUND)
    set(xwin_COMPILE_FLAGS "${X11_COMPILE_FLAGS}")
    set(xwin_LINK_FLAGS "${X11_LIBRARIES}")
    if(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
      # turn PL_HAVE_PTHREAD OFF by default for Mac OS X since it doesn't
      # work for Mac OS X 10.4.  Werner says it does work for vanilla
      # XQuartz X11, but the official Apple version of X(Quartz) for 10.5
      # doesn't have all the fixes of the vanilla version so he doesn't trust
      # it.  This his advice for now is to be conservative until we can
      # get a clear report that official X works for 10.5.
      option(PL_HAVE_PTHREAD "Use pthreads with the xwin driver" OFF)
    else(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
      # Turn PL_HAVE_PTHREAD ON by default for other platforms now that
      # the tk segmentation fault has been cured.
      option(PL_HAVE_PTHREAD "Use pthreads with the xwin driver" ON)
    endif(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
    if(PL_HAVE_PTHREAD)
      find_package(Threads)
      if(CMAKE_USE_PTHREADS_INIT)
        set(xwin_LINK_FLAGS ${xwin_LINK_FLAGS} ${CMAKE_THREAD_LIBS_INIT})
	cmake_link_flags(xwin_LINK_FLAGS "${xwin_LINK_FLAGS}")
	if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
	  set(PLPLOT_MUTEX_RECURSIVE "PTHREAD_MUTEX_RECURSIVE_NP")
 	elseif(CMAKE_SYSTEM_NAME STREQUAL "kFreeBSD")
 	  set(PLPLOT_MUTEX_RECURSIVE "PTHREAD_MUTEX_RECURSIVE_NP")
	else(CMAKE_SYSTEM_NAME STREQUAL "Linux")
	  set(PLPLOT_MUTEX_RECURSIVE "PTHREAD_MUTEX_RECURSIVE")
	endif(CMAKE_SYSTEM_NAME STREQUAL "Linux")
      else(CMAKE_USE_PTHREADS_INIT)
        # I am being super-careful here to follow the autotools model.  In
        # fact, it is possible other thread systems will work as well as
	# pthreads.  So something to investigate for later.
        set(PL_HAVE_PTHREAD OFF)
      endif(CMAKE_USE_PTHREADS_INIT)
    endif(PL_HAVE_PTHREAD)
    set(DRIVERS_LINK_FLAGS ${DRIVERS_LINK_FLAGS} ${xwin_LINK_FLAGS})
  else(X11_FOUND)
    set(PLD_xwin OFF CACHE BOOL "Enable xwin device" FORCE)
  endif(X11_FOUND)
endif(PLD_xwin)

