# -----------------------------------------------------------------------------
# This file defines the basics of CPack behavior for WebKit
#
# The following CPack variables will be defined if they were unset:
#   - CPACK_PACKAGE_NAME to WebKit-${PORT}
#   - CPACK_SOURCE_IGNORE_FILES to a known pattern of good files
#
# The following variables affect the behavior of packaging:
#   - WEBKIT_CPACK_ALL_PORTS if defined and true, will not limit packaging
#     to just include files of the port (affects CPACK_SOURCE_IGNORE_FILES,
#     just if this variable was not defined before).
#   - WEBKIT_CPACK_ADD_TESTS if defined and true, will also add tests
#     (affects CPACK_SOURCE_IGNORE_FILES, just if this variable was
#     not defined before)
#   - WEBKIT_CPACK_ADD_TOOLS if defined and true, will also add tools
#     (affects CPACK_SOURCE_IGNORE_FILES, just if this variable was
#     not defined before)
# -----------------------------------------------------------------------------

IF(NOT DEFINED CPACK_PACKAGE_NAME)
  SET(CPACK_PACKAGE_NAME WebKit-${PORT})
ENDIF()

IF(NOT DEFINED CPACK_SOURCE_IGNORE_FILES)
  SET(CPACK_SOURCE_IGNORE_FILES
    # Version control:
    "/CVS/"
    "/\\\\.svn/"
    "/\\\\.bzr/"
    "/\\\\.hg/"
    "/\\\\.git/"
    "\\\\.swp$"
    "\\\\.#"
    "/#"
    "/\\\\.gitignore$"
    "/\\\\.gitattributes$"

    # SVN-only files should be ignored (site, examples...)
    "/PerformanceTests/"
    "/Examples/"
    "/Websites/"

    # Other build systems:
    # - Makefiles (.mk/Makefile)
    "\\\\.mk$"
    "\\\\.make$"
    "Makefile"
    # - Autotools (GTK)
    "/autotools/"
    "/configure\\\\.ac"
    "/autogen\\\\.sh"
    "/autom4te\\\\.cache/"
    "/aclocal\\\\.m4$"
    "/GNUmakefile"
    "/GNUmakefile"
    # - XCode (Mac)
    "\\\\.xcodeproj"
    "\\\\.xcconfig"
    # - GYP
    "\\\\.gyp"
    # - QMake (Qt)
    "\\\\.pri$"
    "\\\\.pro$"

    # Development & Runtime created files
    "~$"
    "\\\\.mode"
    "\\\\.pbxuser$"
    "\\\\.perspective"
    "\\\\.pyc$"
    "\\\\.pyo$"
    "/cmake-build/"
    "/build/"
    "/WebKitBuild/"
    "/Tools/Scripts/webkitpy/thirdparty/autoinstalled/"
    )

  IF(NOT WEBKIT_CPACK_ADD_TESTS)
    LIST(APPEND CPACK_SOURCE_IGNORE_FILES
      "/LayoutTests/"
      "/manual-tests/"
      "/tests/"
      )
  ENDIF(NOT WEBKIT_CPACK_ADD_TESTS)

  IF(NOT WEBKIT_CPACK_ADD_TOOLS)
    LIST(APPEND CPACK_SOURCE_IGNORE_FILES
      "/Tools/"
      "/manual-tools/"
      "/tools/"
      "/PageLoadTools/"
      )
  ENDIF(NOT WEBKIT_CPACK_ADD_TOOLS)


  IF(NOT WEBKIT_CPACK_ALL_PORTS)

    # All file and directory patterns that Efl uses
    SET(FILE_PATTERNS_Efl
      "/cairo/" "/Cairo/" "cairo\\\\." "Cairo\\\\."
      "/efl/" "/Efl/" "efl\\\\." "Efl\\\\."
      "/glib/" "/Glib/" "glib\\\\." "Glib\\\\."
      "/gobject/" "/Gobject/" "gobject\\\\." "Gobject\\\\."
      "/icu/" "/Icu/" "icu\\\\." "Icu\\\\."
      "/posix/" "/Posix/" "posix\\\\." "Posix\\\\."
      "/soup/" "/Soup/" "soup\\\\." "Soup\\\\."
      )

    # File and Directory patterns that no CMake-ified port uses
    SET(FILE_PATTERNS_UNKNOWN_PORTS
      "/android/" "/Android/" "android\\\\." "Android\\\\."
      "/brew/" "/Brew/" "brew\\\\." "Brew\\\\."
      "/carbon/" "/Carbon/" "carbon\\\\." "Carbon\\\\."
      "/cf/" "/Cf/" "cf\\\\." "Cf\\\\."
      "/cg/" "/Cg/" "cg\\\\." "Cg\\\\."
      "/chromium/" "/Chromium/" "chromium\\\\." "Chromium\\\\."
      "/cocoa/" "/Cocoa/" "cocoa\\\\." "Cocoa\\\\."
      "/Configurations/" "/Configurations/" "Configurations\\\\." "Configurations\\\\."
      "/curl/" "/Curl/" "curl\\\\." "Curl\\\\."
      "/gstreamer/" "/Gstreamer/" "gstreamer\\\\." "Gstreamer\\\\."
      "/gtk/" "/Gtk/" "gtk\\\\." "Gtk\\\\."
      "/haiku/" "/Haiku/" "haiku\\\\." "Haiku\\\\."
      "/iphone/" "/Iphone/" "iphone\\\\." "Iphone\\\\."
      "/mac/" "/Mac/" "mac\\\\." "Mac\\\\."
      "/opentype/" "/Opentype/" "opentype\\\\." "Opentype\\\\."
      "/openvg/" "/Openvg/" "openvg\\\\." "Openvg\\\\."
      "/os-win32/" "/Os-Win32/" "os-win32\\\\." "Os-Win32\\\\."
      "/qscriptengine/" "/Qscriptengine/" "qscriptengine\\\\." "Qscriptengine\\\\."
      "/qscriptstring/" "/Qscriptstring/" "qscriptstring\\\\." "Qscriptstring\\\\."
      "/qscriptvalue/" "/Qscriptvalue/" "qscriptvalue\\\\." "Qscriptvalue\\\\."
      "/qt/" "/Qt/" "qt\\\\." "Qt\\\\."
      "/qt4/" "/Qt4/" "qt4\\\\." "Qt4\\\\."
      "/skia/" "/Skia/" "skia\\\\." "Skia\\\\."
      "/symbian/" "/Symbian/" "symbian\\\\." "Symbian\\\\."
      "/v8/" "/V8/" "v8\\\\." "V8\\\\."
      "/V8/" "/V8/" "V8\\\\." "V8\\\\."
      "/win/" "/Win/" "win\\\\." "Win\\\\."
      "/wince/" "/Wince/" "wince\\\\." "Wince\\\\."
      "/wx/" "/Wx/" "wx\\\\." "Wx\\\\."
      "/wxcode/" "/Wxcode/" "wxcode\\\\." "Wxcode\\\\."
      "/WebKitLibraries/"
      "/English\\\\.lproj/"
      "/Source/WebKit2/"
      "\\\\.a$"
      "\\\\.exe$"
      "\\\\.mm$"
      )

    # Append all Unknown port patterns
    FOREACH(_pattern ${FILE_PATTERNS_UNKNOWN_PORTS})
      LIST(FIND FILE_PATTERNS_${PORT} ${_pattern} _pattern_index)
      IF(_pattern_index GREATER -1)
        MESSAGE("pattern ${_pattern} declared of 'no-port' is actually used by ${PORT}")
      ELSE()
        LIST(APPEND CPACK_SOURCE_IGNORE_FILES ${_pattern})
      ENDIF()
    ENDFOREACH()

    # Append all "other-ports" patterns
    FOREACH(_port ${ALL_PORTS})
      IF(NOT ${_port} STREQUAL ${PORT})
        FOREACH(_pattern ${FILE_PATTERNS_${_port}})

          LIST(FIND FILE_PATTERNS_${PORT} ${_pattern} _pattern_index)
          IF(_pattern_index GREATER -1)
            MESSAGE("pattern ${_pattern} of port ${_port} is also used by ${PORT}")
          ELSE()
            LIST(APPEND CPACK_SOURCE_IGNORE_FILES ${_pattern})
          ENDIF()
        ENDFOREACH()
      ENDIF()
    ENDFOREACH()

  ENDIF(NOT WEBKIT_CPACK_ALL_PORTS)

ENDIF(NOT DEFINED CPACK_SOURCE_IGNORE_FILES)

# -----------------------------------------------------------------------------
# Include CPack that will define targets based on the variables defined before
# -----------------------------------------------------------------------------
INCLUDE(CPack)