# Locate XUL
# This module defines
# XUL_LIBRARIES
# XUL_FOUND, if false, do not try to link to gdal
# XUL_INCLUDE_DIR, where to find the headers
#
# $XUL_DIR is an environment variable that would
# correspond to the ./configure --prefix=$XUL_DIR
#
# Created by Robert Osfield.

#use pkg-config to find various modues
INCLUDE(FindPkgConfig OPTIONAL)

IF(PKG_CONFIG_FOUND)

    INCLUDE(FindPkgConfig)

    pkg_check_modules(XULRUNNER_XPCOM xulrunner-xpcom<=1.8.9)
    pkg_check_modules(XULRUNNER_JS xulrunner-js)
    pkg_check_modules(XULRUNNER_NSPR xulrunner-nspr)
    pkg_check_modules(XULRUNNER_NSS xulrunner-nss)

ENDIF(PKG_CONFIG_FOUND)

# Added check to make sure that nsIBaseWindow.h is available, as it's not a standard part the of 1.8.x SDK
FIND_PATH(NSIBASEWINDOW_INCLUDE_DIR widget/nsIBaseWindow.h
    PATHS ${XULRUNNER_XPCOM_INCLUDE_DIRS}
    ~/Library/Frameworks
    /Library/Frameworks
    /usr/local/include/xulrunner
    /usr/local/include
    /usr/include/xulrunner
    /usr/include
    /sw/include/xulrunner # Fink
    /sw/include # Fink
    /opt/local/include/xulrunner # DarwinPorts
    /opt/local/include # DarwinPorts
    /opt/csw/include/xulrunner # Blastwave
    /opt/csw/include # Blastwave
    /opt/include/xulrunner
    /opt/include
    /usr/freeware/include/xulrunner
    /usr/freeware/include
)

FIND_PATH(XUL_INCLUDE_DIR nsEmbedAPI.h
    PATHS ${XULRUNNER_XPCOM_INCLUDE_DIRS}
    ~/Library/Frameworks
    /Library/Frameworks
    /usr/local/include/xulrunner
    /usr/local/include
    /usr/include/xulrunner
    /usr/include
    /sw/include/xulrunner # Fink
    /sw/include # Fink
    /opt/local/include/xulrunner # DarwinPorts
    /opt/local/include # DarwinPorts
    /opt/csw/include/xulrunner # Blastwave
    /opt/csw/include # Blastwave
    /opt/include/xulrunner
    /opt/include
    /usr/freeware/include/xulrunner
    /usr/freeware/include
)

FIND_PATH(NSPR_INCLUDE_DIR prtypes.h
    PATHS ${XULRUNNER_NSPR_INCLUDE_DIRS}
    ~/Library/Frameworks
    /Library/Frameworks
    /usr/local/include/nspr
    /usr/local/include
    /usr/include/nspr
    /usr/include
    /sw/include/nspr # Fink
    /sw/include # Fink
    /opt/local/include/nspr # DarwinPorts
    /opt/local/include # DarwinPorts
    /opt/csw/include/nspr # Blastwave
    /opt/csw/include # Blastwave
    /opt/include/nspr
    /opt/include
    /usr/freeware/include/nspr
    /usr/freeware/include
)

FIND_PATH(MOZJS_INCLUDE_DIR jsapi.h
    PATHS ${XULRUNNER_JS_INCLUDE_DIRS}
    ~/Library/Frameworks
    /Library/Frameworks
    /usr/local/include/mozjs
    /usr/local/include
    /usr/include/mozjs
    /usr/include
    /sw/include/mozjs # Fink
    /sw/include # Fink
    /opt/local/include/mozjs # DarwinPorts
    /opt/local/include # DarwinPorts
    /opt/csw/include/mozjs # Blastwave
    /opt/csw/include # Blastwave
    /opt/include/mozjs
    /opt/include
    /usr/freeware/include/mozjs
    /usr/freeware/include
)

FIND_PATH(XUL_DIR
    NAMES components/appshell.xpt
    PATHS
    ~/Library/Frameworks
    /Library/Frameworks
    /usr/local/lib/xulrunner
    /usr/local/lib
    /usr/lib/xulrunner
    /usr/lib
    /sw/lib/xulrunner
    /sw/lib
    /opt/local/lib/xulrunner
    /opt/local/lib
    /opt/csw/lib/xulrunner
    /opt/csw/lib
    /opt/lib/xulrunner
    /opt/lib
    /usr/freeware/lib64/xulrunner
    /usr/freeware/lib64
)

MACRO(FIND_XUL_LIBRARY MYLIBRARY MYLIBRARYNAME)

    FIND_LIBRARY(${MYLIBRARY}
        PATHS ${XULRUNNER_XPCOM_LIBRARY_DIRS}
        PATHS ${XULRUNNER_JS_LIBRARY_DIRS}
        PATHS ${XULRUNNER_NSPR_LIBRARY_DIRS}
        PATHS ${XULRUNNER_NSS_LIBRARY_DIRS}
        NAMES ${MYLIBRARYNAME}
        PATHS
        ~/Library/Frameworks
        /Library/Frameworks
        /usr/local/lib/xulrunner
        /usr/local/lib
        /usr/lib/xulrunner
        /usr/lib
        /sw/lib/xulrunner
        /sw/lib
        /opt/local/lib/xulrunner
        /opt/local/lib
        /opt/csw/lib/xulrunner
        /opt/csw/lib
        /opt/lib/xulrunner
        /opt/lib
        /usr/freeware/lib64/xulrunner
        /usr/freeware/lib64
    )

ENDMACRO(FIND_XUL_LIBRARY LIBRARY LIBRARYNAME)


FIND_XUL_LIBRARY(XUL_LIBRARY xul plds4 plc4 nspr4)
FIND_XUL_LIBRARY(XUL_MOZJS_LIBRARY mozjs)
FIND_XUL_LIBRARY(XUL_XPCOM_LIBRARY xpcom)
FIND_XUL_LIBRARY(XUL_PLUGIN_LIBRARY plds4)
FIND_XUL_LIBRARY(XUL_NSS_LIBRARY nss3)


SET(XUL_FOUND "NO")
IF(XUL_LIBRARY AND XUL_INCLUDE_DIR AND NSIBASEWINDOW_INCLUDE_DIR)

    SET(XUL_FOUND "YES")
    SET(XUL_LIBRARIES ${XUL_LIBRARY} ${XUL_MOZJS_LIBRARY} ${XUL_XPCOM_LIBRARY} ${XUL_PLUGIN_LIBRARY} ${XUL_NSS_LIBRARY})
    SET(XUL_INCLUDE_DIRS ${XUL_INCLUDE_DIR} ${NSPR_INCLUDE_DIR} ${MOZJS_INCLUDE_DIR})

ENDIF(XUL_LIBRARY AND XUL_INCLUDE_DIR AND NSIBASEWINDOW_INCLUDE_DIR)

# MESSAGE("XUL_INCLUDE_DIR " ${XUL_INCLUDE_DIR})
# MESSAGE("XUL_LIBRARIES " ${XUL_LIBRARIES})
