[CMake] Add WOFF2 targets
https://bugs.webkit.org/show_bug.cgi?id=213865

Reviewed by Fujii Hironori.

.:

Rework the Find module for WOFF2 to provide targets for libwoff2common and
libwoff2dec. Previously only libwoff2dec was specified in the find module. This
is because pkg-config works on that platform and because shared libraries are
supported. Neither is true for Windows so the module was expanded in anticipation
of support for WinCairo.

* Source/cmake/FindWOFF2.cmake: Added.
* Source/cmake/FindWOFF2Dec.cmake: Removed.
* Source/cmake/OptionsGTK.cmake:
* Source/cmake/OptionsWPE.cmake:

Source/WebCore:

Use the WOFF:: targets when USE_WOFF2 is set.

* CMakeLists.txt:


git-svn-id: http://svn.webkit.org/repository/webkit/trunk@263829 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/ChangeLog b/ChangeLog
index 64a9482..dea99fa 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,21 @@
+2020-07-01  Don Olmstead  <don.olmstead@sony.com>
+
+        [CMake] Add WOFF2 targets
+        https://bugs.webkit.org/show_bug.cgi?id=213865
+
+        Reviewed by Fujii Hironori.
+
+        Rework the Find module for WOFF2 to provide targets for libwoff2common and
+        libwoff2dec. Previously only libwoff2dec was specified in the find module. This
+        is because pkg-config works on that platform and because shared libraries are
+        supported. Neither is true for Windows so the module was expanded in anticipation
+        of support for WinCairo.
+
+        * Source/cmake/FindWOFF2.cmake: Added.
+        * Source/cmake/FindWOFF2Dec.cmake: Removed.
+        * Source/cmake/OptionsGTK.cmake:
+        * Source/cmake/OptionsWPE.cmake:
+
 2020-06-30  Andres Gonzalez  <andresg_22@apple.com>
 
         Code cleanup in AccessibilityMenuList.cpp and AXIsolatedTree.h.
diff --git a/Source/WebCore/CMakeLists.txt b/Source/WebCore/CMakeLists.txt
index 5aa5ffe..68cfcf0 100644
--- a/Source/WebCore/CMakeLists.txt
+++ b/Source/WebCore/CMakeLists.txt
@@ -1550,8 +1550,7 @@
 endif ()
 
 if (USE_WOFF2)
-  list(APPEND WebCore_PRIVATE_INCLUDE_DIRECTORIES "${WOFF2DEC_INCLUDE_DIRS}")
-  list(APPEND WebCore_LIBRARIES "${WOFF2DEC_LIBRARIES}")
+  list(APPEND WebCore_LIBRARIES WOFF2::dec)
 endif ()
 
 if (USE_XDGMIME)
diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog
index f8b2c58..bb57336 100644
--- a/Source/WebCore/ChangeLog
+++ b/Source/WebCore/ChangeLog
@@ -1,3 +1,14 @@
+2020-07-01  Don Olmstead  <don.olmstead@sony.com>
+
+        [CMake] Add WOFF2 targets
+        https://bugs.webkit.org/show_bug.cgi?id=213865
+
+        Reviewed by Fujii Hironori.
+
+        Use the WOFF:: targets when USE_WOFF2 is set.
+
+        * CMakeLists.txt:
+
 2020-07-01  Chris Fleizach  <cfleizach@apple.com>
 
         AX: Implement relevant simulated key presses for custom ARIA widgets for increment/decrement
diff --git a/Source/cmake/FindWOFF2.cmake b/Source/cmake/FindWOFF2.cmake
new file mode 100644
index 0000000..cb8cb18
--- /dev/null
+++ b/Source/cmake/FindWOFF2.cmake
@@ -0,0 +1,166 @@
+# Copyright (C) 2020 Sony Interactive Entertainment Inc.
+# Copyright (C) 2017 Igalia S.L.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND ITS CONTRIBUTORS ``AS
+# IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR ITS
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+#[=======================================================================[.rst:
+FindWOFF2
+--------------
+
+Find WOFF2 headers and libraries.
+
+Imported Targets
+^^^^^^^^^^^^^^^^
+
+``WOFF2::common``
+  The WOFF2 common library, if found.
+
+``WOFF2::dec``
+  The WOFF2 dec library, if found.
+
+Result Variables
+^^^^^^^^^^^^^^^^
+
+This will define the following variables in your project:
+
+``WOFF2_FOUND``
+  true if (the requested version of) WOFF2 is available.
+``WOFF2_VERSION``
+  the version of WOFF2.
+``WOFF2_LIBRARIES``
+  the libraries to link against to use WOFF2.
+``WOFF2_INCLUDE_DIRS``
+  where to find the WOFF2 headers.
+``WOFF2_COMPILE_OPTIONS``
+  this should be passed to target_compile_options(), if the
+  target is not used for linking
+
+#]=======================================================================]
+
+find_package(PkgConfig QUIET)
+pkg_check_modules(PC_WOFF2 QUIET libwoff2common)
+set(WOFF2_COMPILE_OPTIONS ${PC_WOFF2_CFLAGS_OTHER})
+set(WOFF2_VERSION ${PC_WOFF2_CFLAGS_VERSION})
+
+find_library(WOFF2_LIBRARY
+    NAMES ${WOFF2_NAMES} woff2common
+    HINTS ${PC_WOFF2_LIBDIR} ${PC_WOFF2_LIBRARY_DIRS}
+)
+
+# There's nothing in the WOFF2 headers that could be used to detect the exact
+# WOFF2 version being used so don't attempt to do so. A version can only be found
+# through pkg-config
+if ("${WOFF2_FIND_VERSION}" VERSION_GREATER "${WOFF2_VERSION}")
+    if (WOFF2_VERSION)
+        message(FATAL_ERROR "Required version (" ${WOFF2_FIND_VERSION} ") is higher than found version (" ${WOFF2_VERSION} ")")
+    else ()
+        message(WARNING "Cannot determine WOFF2 version without pkg-config")
+    endif ()
+endif ()
+
+# Find components
+if (WOFF2_LIBRARY)
+    set(_WOFF2_REQUIRED_LIBS_FOUND ON)
+    set(WOFF2_LIBS_FOUND "WOFF2 (required): ${WOFF2_LIBRARY}")
+else ()
+    set(_WOFF2_REQUIRED_LIBS_FOUND OFF)
+    set(WOFF2_LIBS_NOT_FOUND "WOFF2 (required)")
+endif ()
+
+if ("dec" IN_LIST WOFF2_FIND_COMPONENTS)
+    pkg_check_modules(PC_WOFF2_DEC libwoff2dec)
+
+    find_path(WOFF2_INCLUDE_DIR
+        NAMES woff2/decode.h
+        HINTS ${PC_WOFF2_DEC_INCLUDEDIR} ${PC_WOFF2_DEC_INCLUDE_DIRS}
+    )
+
+    find_library(WOFF2_DEC_LIBRARY
+        NAMES ${WOFF2_DEC_NAMES} woff2dec
+        HINTS ${PC_WOFF2_DEC_LIBDIR} ${PC_WOFF2_DEC_LIBRARY_DIRS}
+    )
+
+    if (WOFF2_DEC_LIBRARY)
+        if (WOFF2_FIND_REQUIRED_dec)
+            list(APPEND WOFF2_LIBS_FOUND "dec (required): ${WOFF2_DEC_LIBRARY}")
+        else ()
+           list(APPEND WOFF2_LIBS_FOUND "dec (optional): ${WOFF2_DEC_LIBRARY}")
+        endif ()
+    else ()
+        if (WOFF2_FIND_REQUIRED_dec)
+           set(_WOFF2_REQUIRED_LIBS_FOUND OFF)
+           list(APPEND WOFF2_LIBS_NOT_FOUND "dec (required)")
+        else ()
+           list(APPEND WOFF2_LIBS_NOT_FOUND "dec (optional)")
+        endif ()
+    endif ()
+endif ()
+
+if (NOT WOFF2_FIND_QUIETLY)
+    if (WOFF2_LIBS_FOUND)
+        message(STATUS "Found the following WOFF2 libraries:")
+        foreach (found ${WOFF2_LIBS_FOUND})
+            message(STATUS " ${found}")
+        endforeach ()
+    endif ()
+    if (WOFF2_LIBS_NOT_FOUND)
+        message(STATUS "The following WOFF2 libraries were not found:")
+        foreach (found ${WOFF2_LIBS_NOT_FOUND})
+            message(STATUS " ${found}")
+        endforeach ()
+    endif ()
+endif ()
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(WOFF2
+    FOUND_VAR WOFF2_FOUND
+    REQUIRED_VARS WOFF2_LIBRARY _WOFF2_REQUIRED_LIBS_FOUND
+    VERSION_VAR WOFF2_VERSION
+)
+
+if (WOFF2_LIBRARY AND NOT TARGET WOFF2::common)
+    add_library(WOFF2::common UNKNOWN IMPORTED GLOBAL)
+    set_target_properties(WOFF2::common PROPERTIES
+        IMPORTED_LOCATION "${WOFF2_LIBRARY}"
+        INTERFACE_COMPILE_OPTIONS "${WOFF2_COMPILE_OPTIONS}"
+    )
+endif ()
+
+if (WOFF2_DEC_LIBRARY AND NOT TARGET WOFF2::dec)
+    add_library(WOFF2::dec UNKNOWN IMPORTED GLOBAL)
+    set_target_properties(WOFF2::dec PROPERTIES
+        IMPORTED_LOCATION "${WOFF2_DEC_LIBRARY}"
+        INTERFACE_COMPILE_OPTIONS "${WOFF2_COMPILE_OPTIONS}"
+        INTERFACE_INCLUDE_DIRECTORIES "${WOFF2_DEC_INCLUDE_DIR}"
+    )
+endif ()
+
+mark_as_advanced(
+    WOFF2_LIBRARY
+    WOFF2_DEC_INCLUDE_DIR
+    WOFF2_DEC_LIBRARY
+)
+
+if (WOFF2_FOUND)
+    set(WOFF2_LIBRARIES ${WOFF2_LIBRARY} ${WOFF2_DEC_LIBRARY})
+    set(WOFF2_INCLUDE_DIRS ${WOFF2_INCLUDE_DIR})
+endif ()
diff --git a/Source/cmake/FindWOFF2Dec.cmake b/Source/cmake/FindWOFF2Dec.cmake
deleted file mode 100644
index 48673a4..0000000
--- a/Source/cmake/FindWOFF2Dec.cmake
+++ /dev/null
@@ -1,53 +0,0 @@
-# - Try to find WOFF2Dec.
-# Once done, this will define
-#
-#  WOFF2DEC_FOUND - system has WOFF2Dec.
-#  WOFF2DEC_INCLUDE_DIRS - the WOFF2Dec include directories
-#  WOFF2DEC_LIBRARIES - link these to use WOFF2Dec.
-#
-# Copyright (C) 2017 Igalia S.L.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-# 1.  Redistributions of source code must retain the above copyright
-#     notice, this list of conditions and the following disclaimer.
-# 2.  Redistributions in binary form must reproduce the above copyright
-#     notice, this list of conditions and the following disclaimer in the
-#     documentation and/or other materials provided with the distribution.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND ITS CONTRIBUTORS ``AS
-# IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
-# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR ITS
-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-find_package(PkgConfig QUIET)
-pkg_check_modules(PC_WOFF2DEC libwoff2dec)
-
-find_path(WOFF2DEC_INCLUDE_DIRS
-    NAMES woff2/decode.h
-    HINTS ${PC_WOFF2DEC_INCLUDEDIR}
-)
-
-find_library(WOFF2DEC_LIBRARIES
-    NAMES woff2dec
-    HINTS ${PC_WOFF2DEC_LIBDIR}
-)
-
-include(FindPackageHandleStandardArgs)
-find_package_handle_standard_args(WOFF2Dec
-    REQUIRED_VARS WOFF2DEC_INCLUDE_DIRS WOFF2DEC_LIBRARIES
-    FOUND_VAR WOFF2DEC_FOUND
-    VERSION_VAR PC_WOFF2DEC_VERSION)
-
-mark_as_advanced(
-    WOFF2DEC_INCLUDE_DIRS
-    WOFF2DEC_LIBRARIES
-)
diff --git a/Source/cmake/OptionsGTK.cmake b/Source/cmake/OptionsGTK.cmake
index 4175d6c..cd8934b 100644
--- a/Source/cmake/OptionsGTK.cmake
+++ b/Source/cmake/OptionsGTK.cmake
@@ -412,8 +412,8 @@
 endif ()
 
 if (USE_WOFF2)
-    find_package(WOFF2Dec 1.0.2)
-    if (NOT WOFF2DEC_FOUND)
+    find_package(WOFF2 1.0.2 COMPONENTS dec)
+    if (NOT WOFF2_FOUND)
        message(FATAL_ERROR "libwoff2dec is needed for USE_WOFF2.")
     endif ()
 endif ()
diff --git a/Source/cmake/OptionsWPE.cmake b/Source/cmake/OptionsWPE.cmake
index 1e32f16..b8adb87 100644
--- a/Source/cmake/OptionsWPE.cmake
+++ b/Source/cmake/OptionsWPE.cmake
@@ -143,8 +143,8 @@
 endif ()
 
 if (USE_WOFF2)
-    find_package(WOFF2Dec 1.0.2)
-    if (NOT WOFF2DEC_FOUND)
+    find_package(WOFF2 1.0.2 COMPONENTS dec)
+    if (NOT WOFF2_FOUND)
         message(FATAL_ERROR "liwoff2dec is needed for USE_WOFF2.")
     endif ()
 endif ()