[GTK] [CMake] Add support for generating gtkdoc
authorgns@gnome.org <gns@gnome.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 23 Dec 2013 22:01:12 +0000 (22:01 +0000)
committergns@gnome.org <gns@gnome.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 23 Dec 2013 22:01:12 +0000 (22:01 +0000)
https://bugs.webkit.org/show_bug.cgi?id=116376

Reviewed by Martin Robinson.

.:

* Source/PlatformGTK.cmake: Added. New custom target that depends on a custom command
which calls our generate-gtkdoc script. It uses a docs-build.stamp for simplicity,
like the autotools build.

Source/WebKit2:

* PlatformGTK.cmake: make generated API files go to DerivedSources/WebKit2, to
match the autotools build and gtkdoc.py's expectation.

Tools:

* gtk/common.py: look for files in the directories used by the cmake build as well.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@161017 268f45cc-cd09-0410-ab3c-d52691b4dbfc

ChangeLog
Source/PlatformGTK.cmake
Source/WebKit2/ChangeLog
Source/WebKit2/PlatformGTK.cmake
Tools/ChangeLog
Tools/gtk/common.py
Tools/gtk/generate-gtkdoc

index 8385875..1096bf0 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+2013-12-23  Gustavo Noronha Silva  <gns@gnome.org>
+
+        [GTK] [CMake] Add support for generating gtkdoc
+        https://bugs.webkit.org/show_bug.cgi?id=116376
+
+        Reviewed by Martin Robinson.
+
+        * Source/PlatformGTK.cmake: Added. New custom target that depends on a custom command
+        which calls our generate-gtkdoc script. It uses a docs-build.stamp for simplicity,
+        like the autotools build.
+
 2013-12-23  Martin Robinson  <mrobinson@igalia.com>
 
         [GTK] [CMake] Build the WebKit2 GObject API tests
index 390daff..686fb3e 100644 (file)
@@ -1,7 +1,40 @@
+set(DocumentationDependencies
+    "${CMAKE_SOURCE_DIR}/Source/WebKit/gtk/docs/webkitenvironment.xml"
+)
+
+if (ENABLE_WEBKIT)
+    list(APPEND DocumentationDependencies
+        WebKit
+        "${CMAKE_SOURCE_DIR}/Source/WebKit/gtk/docs/webkitgtk-docs.sgml"
+        "${CMAKE_SOURCE_DIR}/Source/WebKit/gtk/docs/webkitgtk-sections.txt"
+    )
+endif ()
+
+if (ENABLE_WEBKIT2)
+    list(APPEND DocumentationDependencies
+        WebKit2
+        "${CMAKE_SOURCE_DIR}/Source/WebKit2/UIProcess/API/gtk/docs/webkit2gtk-docs.sgml"
+        "${CMAKE_SOURCE_DIR}/Source/WebKit2/UIProcess/API/gtk/docs/webkit2gtk-sections.txt"
+    )
+endif ()
+
+add_custom_command(
+    OUTPUT docs-build.stamp
+    DEPENDS ${DocumentationDependencies}
+    COMMAND CC="${CMAKE_C_COMPILER}" ${CMAKE_SOURCE_DIR}/Tools/gtk/generate-gtkdoc
+    COMMAND touch docs-build.stamp
+    WORKING_DIRECTORY "${CMAKE_BINARY_DIR}"
+)
+
+add_custom_target(fake-docs-target ALL
+    DEPENDS docs-build.stamp
+)
+
 if (ENABLE_WEBKIT)
-    add_subdirectory(${WEBKIT_DIR}/gtk/tests)
+    add_dependencies(fake-docs-target WebKit)
 endif ()
 
 if (ENABLE_WEBKIT2)
-    add_subdirectory(${WEBKIT2_DIR}/UIProcess/API/gtk/tests)
+    add_dependencies(fake-docs-target WebKit2)
 endif ()
+
index b980b01..b0e4c35 100644 (file)
@@ -1,3 +1,13 @@
+2013-12-23  Gustavo Noronha Silva  <gns@gnome.org>
+
+        [GTK] [CMake] Add support for generating gtkdoc
+        https://bugs.webkit.org/show_bug.cgi?id=116376
+
+        Reviewed by Martin Robinson.
+
+        * PlatformGTK.cmake: make generated API files go to DerivedSources/WebKit2, to
+        match the autotools build and gtkdoc.py's expectation.
+
 2013-12-23  Martin Robinson  <mrobinson@igalia.com>
 
         [GTK] [CMake] Build the WebKit2 GObject API tests
index b8cc1f0..ccb681d 100644 (file)
@@ -1,5 +1,5 @@
 set(DERIVED_SOURCES_GOBJECT_DOM_BINDINGS_DIR ${DERIVED_SOURCES_DIR}/webkitdom)
-set(DERIVED_SOURCES_WEBKIT2GTK_DIR ${DERIVED_SOURCES_DIR}/webkit2gtk)
+set(DERIVED_SOURCES_WEBKIT2GTK_DIR ${DERIVED_SOURCES_DIR}/WebKit2/webkit2gtk)
 set(WEBKIT2_BUILT_API_DIR ${DERIVED_SOURCES_WEBKIT2GTK_DIR}/webkit2)
 set(WEBKIT2_FORWARDING_HEADERS_DIR ${DERIVED_SOURCES_DIR}/ForwardingHeaders/webkit2gtk)
 
index 04b2a0f..5d94731 100644 (file)
@@ -1,3 +1,12 @@
+2013-12-23  Gustavo Noronha Silva  <gns@gnome.org>
+
+        [GTK] [CMake] Add support for generating gtkdoc
+        https://bugs.webkit.org/show_bug.cgi?id=116376
+
+        Reviewed by Martin Robinson.
+
+        * gtk/common.py: look for files in the directories used by the cmake build as well.
+
 2013-12-23  Carlos Garcia Campos  <cgarcia@igalia.com>
 
         [GTK] Build with network process unconditionally
index 4255c9b..a5436f0 100644 (file)
@@ -23,6 +23,30 @@ import sys
 
 script_dir = None
 build_dir = None
+library_build_dir = None
+is_cmake = None
+
+
+def is_cmake_build():
+    global is_cmake
+
+    if is_cmake is None:
+        if build_path('CMakeCache.txt'):
+            is_cmake = True
+        else:
+            is_cmake = False
+
+    return is_cmake
+
+
+def library_build_path(*args):
+    global library_build_dir
+    if not library_build_dir:
+        if is_cmake_build():
+            library_build_dir = build_path('lib', *args)
+        else:
+            library_build_dir = build_path('.libs', *args)
+    return library_build_dir
 
 
 def script_path(*args):
@@ -43,7 +67,11 @@ def get_build_path(build_types=('Release', 'Debug'), fatal=True):
 
     def is_valid_build_directory(path):
         return os.path.exists(os.path.join(path, 'GNUmakefile')) or \
-            os.path.exists(os.path.join(path, 'Programs', 'DumpRenderTree'))
+            os.path.exists(os.path.join(path, 'Programs', 'GtkLauncher')) or \
+            os.path.exists(os.path.join(path, 'Programs', 'MiniBrowser')) or \
+            os.path.exists(os.path.join(path, 'CMakeCache.txt')) or \
+            os.path.exists(os.path.join(path, 'bin/GtkLauncher')) or \
+            os.path.exists(os.path.join(path, 'bin/MiniBrowser'))
 
     if len(sys.argv[1:]) > 1 and os.path.exists(sys.argv[-1]) and is_valid_build_directory(sys.argv[-1]):
         return sys.argv[-1]
index 36fac4d..280749b 100755 (executable)
@@ -61,7 +61,7 @@ def get_common_options():
     return {
         'decorator': 'WEBKIT_API|WEBKIT_DEPRECATED|WEBKIT_DEPRECATED_FOR\(.+\)',
         'deprecation_guard': 'WEBKIT_DISABLE_DEPRECATED',
-        'library_path' : common.build_path('.libs'),
+        'library_path' : common.library_build_path(),
         'virtual_root' : virtual_root,
     }
 
@@ -120,6 +120,12 @@ def get_webkit1_options(gtk_version):
     def src_path(*args):
         return common.top_level_path(*(('Source', 'WebKit', 'gtk') + args))
 
+    def webkitversionh_path():
+        if common.is_cmake_build():
+            return common.build_path('DerivedSources', 'webkit')
+        else:
+            return common.build_path('Source', 'WebKit', 'gtk', 'webkit')
+
     xref_deps = get_common_xref_deps().copy()
     if gtk_version == 3:
         xref_deps.update({
@@ -136,7 +142,7 @@ def get_webkit1_options(gtk_version):
         'namespace' : 'webkit',
         'doc_dir' : src_path('docs'),
         'output_dir' : common.build_path('Documentation', 'webkitgtk'),
-        'source_dirs' : [src_path('webkit'), common.build_path('Source', 'WebKit', 'gtk', 'webkit')],
+        'source_dirs' : [src_path('webkit'), webkitversionh_path()],
         'cflags' : ' -I' + common.build_path('WebKit', 'gtk') + \
                    ' -I' + common.build_path('DerivedSources') + \
                    ' -I' + src_path() + \
@@ -216,16 +222,19 @@ if os.path.exists(wk2_pkg_config_path):
     pkg_config_path = wk2_pkg_config_path
 elif os.path.exists(wk1_pkg_config_path):
     pkg_config_path = wk1_pkg_config_path
-generator = gtkdoc.PkgConfigGTKDoc(pkg_config_path, get_webkitdom_options())
-if '--rebase' not in sys.argv:
-    print("\nGenerating WebKitDOM documentation...")
-    saw_webkitdom_warnings = generate_doc(generator)
-else:
-    print("\nRebasing WebKitDOM documentation...")
-    try:
-        generator.rebase_installed_docs()
-    except Exception:
-        print("Rebase did not happen, likely no documentation is present.")
+
+webkitdom_docs_path = common.build_path('DerivedSources', 'webkitdom', 'docs')
+if not common.is_cmake_build():
+    generator = gtkdoc.PkgConfigGTKDoc(pkg_config_path, get_webkitdom_options())
+    if '--rebase' not in sys.argv:
+        print("\nGenerating WebKitDOM documentation...")
+        saw_webkitdom_warnings = generate_doc(generator)
+    else:
+        print("\nRebasing WebKitDOM documentation...")
+        try:
+            generator.rebase_installed_docs()
+        except Exception:
+            print("Rebase did not happen, likely no documentation is present.")
 
 pkg_config_path = wk1_pkg_config_path
 if os.path.exists(pkg_config_path):
@@ -255,4 +264,7 @@ if os.path.exists(pkg_config_path):
         except Exception:
             print("Rebase did not happen, likely no documentation is present.")
 
-sys.exit(saw_webkit1_warnings or saw_webkit2_warnings)
+# For CMake we are still generating warnings because we lack DOM bindings docs,
+# so do not cause the build to fail for now.
+if not common.is_cmake_build():
+    sys.exit(saw_webkit1_warnings or saw_webkit2_warnings)