[libvirt] [PATCH v3 4/5] docs: Perform JavaScript minimization at build time

Christophe de Dinechin cdupontd at redhat.com
Wed Jun 19 14:50:25 UTC 2019



> On 19 Jun 2019, at 14:41, Andrea Bolognani <abologna at redhat.com> wrote:
> 
> We want to store third-party JavaScript libraries in their
> non-minimized (source) form in the repository, but when users
> are browsing libvirt.org we'd rather only transmit the more
> compact minified variant.
> 
> Call uglifyjs at build time, if available, to achieve this.
> Signed-off-by: Andrea Bolognani <abologna at redhat.com>

Reviewed-by: Christophe de Dinechin <dinechin at redhat.com>


> ---
> .gitignore                   |  1 +
> docs/Makefile.am             | 30 +++++++++++++++++++++++++++---
> docs/index.html.in           |  6 +++---
> docs/page.xsl                |  2 +-
> docs/site.xsl                |  1 +
> docs/subsite.xsl             |  1 +
> m4/virt-external-programs.m4 |  2 ++
> 7 files changed, 36 insertions(+), 7 deletions(-)
> 
> diff --git a/.gitignore b/.gitignore
> index 727bfdb6ec..522ac762b6 100644
> --- a/.gitignore
> +++ b/.gitignore
> @@ -61,6 +61,7 @@
> /docs/apibuild.py.stamp
> /docs/devhelp/libvirt.devhelp
> /docs/hvsupport.html.in
> +/docs/js/*.min.js
> /docs/libvirt-admin-*.xml
> /docs/libvirt-api.xml
> /docs/libvirt-lxc-*.xml
> diff --git a/docs/Makefile.am b/docs/Makefile.am
> index 9b79fc60c1..e787a7c47b 100644
> --- a/docs/Makefile.am
> +++ b/docs/Makefile.am
> @@ -240,6 +240,7 @@ news.html.in: \
> 	  $(srcdir)/news.xml \
> 	  $(srcdir)/news-html.xsl
> 	$(AM_V_GEN)$(XSLTPROC) --nonet \
> +	    --stringparam js "$(JS)" \
> 	    $(srcdir)/news-html.xsl \
> 	    $(srcdir)/news.xml \
> 	  >$@-tmp \
> @@ -258,7 +259,7 @@ MAINTAINERCLEANFILES += \
> 	convert -rotate 90 $< $@
> 
> %.html.tmp: %.html.in site.xsl subsite.xsl page.xsl \
> -		$(acl_generated)
> +		$(acl_generated) $(minified_javascript)
> 	$(AM_V_GEN)name=`echo $@ | sed -e 's/.tmp//'`; \
> 	  dir=`dirname $@` ; \
> 	  if test "$$dir" = "."; \
> @@ -270,24 +271,47 @@ MAINTAINERCLEANFILES += \
> 	  fi; \
> 	  $(XSLTPROC) --stringparam pagename $$name \
> 	    --stringparam timestamp $(timestamp) --nonet \
> +	    --stringparam js "$(JS)" \
> 	    $(top_srcdir)/docs/$$style $< > $@ \
> +	    || { rm $@ && exit 1; }; \
> +	  sed -i 's/@JS@/$(JS)/g' "$@" \
> 	    || { rm $@ && exit 1; }
> 
> %.html: %.html.tmp
> 	$(AM_V_GEN)$(XMLLINT) --nonet --format $< > $(srcdir)/$@ \
> 	  || { rm $(srcdir)/$@ && exit 1; }
> 
> +
> +if HAVE_UGLIFYJS
> +JS = min.js
> +minified_javascript = $(javascript:%.js=%.min.js)
> +EXTRA_DIST += $(minified_javascript)
> +MAINTAINERCLEANFILES += $(minified_javascript)
> +
> +%.min.js: %.js
> +	$(AM_V_GEN)$(UGLIFYJS) -o $@ $<
> +else ! HAVE_UGLIFYJS
> +JS = js
> +minified_javascript = $(javascript)
> +
> +dist-hook:
> +	echo "uglifyjs is required to make dist." >&2

It’s silly, but the Fedora package is called uglify-js. Maybe mention that?

> +	exit 1
> +endif ! HAVE_UGLIFYJS
> +
> $(apihtml_generated): html/index.html
> 
> html/index.html: libvirt-api.xml newapi.xsl page.xsl $(APIBUILD_STAMP)
> 	$(AM_V_GEN)$(XSLTPROC) --nonet -o $(srcdir)/ \
> 	  --stringparam builddir '$(abs_top_builddir)' \
> 	  --stringparam timestamp $(timestamp) \
> +	  --stringparam js "$(JS)" \
> 	  $(srcdir)/newapi.xsl $(srcdir)/libvirt-api.xml && \
> 	  $(XMLLINT) --nonet --noout $(srcdir)/html/*.html
> 
> $(addprefix $(srcdir)/,$(devhelphtml)): $(srcdir)/libvirt-api.xml $(devhelpxsl)
> 	$(AM_V_GEN)$(XSLTPROC) --stringparam timestamp $(timestamp) \
> +	  --stringparam js "$(JS)" \
> 	  --nonet -o $(srcdir)/devhelp/ \
> 	  $(top_srcdir)/docs/devhelp/devhelp.xsl $(srcdir)/libvirt-api.xml
> 
> @@ -372,7 +396,7 @@ install-data-local:
> 	for f in $(css) $(dot_html) $(gif) $(png); do \
> 	  $(INSTALL) -m 0644 $(srcdir)/$$f $(DESTDIR)$(HTML_DIR); done
> 	$(mkinstalldirs) $(DESTDIR)$(HTML_DIR)/js
> -	for f in $(javascript); do \
> +	for f in $(minified_javascript); do \
> 	  $(INSTALL) -m 0644 $(srcdir)/$$f $(DESTDIR)$(HTML_DIR)/js/; done
> 	$(mkinstalldirs) $(DESTDIR)$(HTML_DIR)/logos
> 	for f in $(logofiles); do \
> @@ -401,7 +425,7 @@ uninstall-local:
> 	for f in $(logofiles); do \
> 	  rm -f $(DESTDIR)$(HTML_DIR)/$$f; \
> 	done
> -	for f in $(javascript); do \
> +	for f in $(minified_javascript); do \
> 	  rm -f $(DESTDIR)$(HTML_DIR)/$$f; \
> 	done
> 	for h in $(apihtml); do rm -f $(DESTDIR)$(HTML_DIR)/$$h; done
> diff --git a/docs/index.html.in b/docs/index.html.in
> index cab387ebb6..a912d7282a 100644
> --- a/docs/index.html.in
> +++ b/docs/index.html.in
> @@ -2,9 +2,9 @@
> <!DOCTYPE html>
> <html xmlns="http://www.w3.org/1999/xhtml">
>   <head>
> -    <script type="text/javascript" src="js/jquery-3.4.1.js"> </script>
> -    <script type="text/javascript" src="js/moment-2.24.0.js"> </script>
> -    <script type="text/javascript" src="js/jquery.rss-3.3.0.js"> </script>
> +    <script type="text/javascript" src="js/jquery-3.4.1. at JS@"> </script>
> +    <script type="text/javascript" src="js/moment-2.24.0. at JS@"> </script>
> +    <script type="text/javascript" src="js/jquery.rss-3.3.0. at JS@"> </script>
> 
>     <script type="text/javascript">
>       <!--
> diff --git a/docs/page.xsl b/docs/page.xsl
> index 65ddeb2bb7..bf78103df3 100644
> --- a/docs/page.xsl
> +++ b/docs/page.xsl
> @@ -99,7 +99,7 @@
>         <meta name="description" content="libvirt, virtualization, virtualization API"/>
>         <xsl:apply-templates select="/html:html/html:head/*" mode="content"/>
> 
> -        <script type="text/javascript" src="{$href_base}js/main.js">
> +        <script type="text/javascript" src="{$href_base}js/main.{$js}">
>           <xsl:comment>// forces non-empty element</xsl:comment>
>         </script>
>       </head>
> diff --git a/docs/site.xsl b/docs/site.xsl
> index c9d41f2c93..fb9c503993 100644
> --- a/docs/site.xsl
> +++ b/docs/site.xsl
> @@ -28,6 +28,7 @@
>     <xsl:apply-templates select="." mode="page">
>       <xsl:with-param name="pagename" select="$pagename"/>
>       <xsl:with-param name="timestamp" select="$timestamp"/>
> +      <xsl:with-param name="js" select="$js"/>
>     </xsl:apply-templates>
>   </xsl:template>
> 
> diff --git a/docs/subsite.xsl b/docs/subsite.xsl
> index f56ac0491c..c939ed6588 100644
> --- a/docs/subsite.xsl
> +++ b/docs/subsite.xsl
> @@ -18,6 +18,7 @@
>     <xsl:apply-templates select="." mode="page">
>       <xsl:with-param name="pagename" select="$pagename"/>
>       <xsl:with-param name="timestamp" select="$timestamp"/>
> +      <xsl:with-param name="js" select="$js"/>
>     </xsl:apply-templates>
>   </xsl:template>
> 
> diff --git a/m4/virt-external-programs.m4 b/m4/virt-external-programs.m4
> index 0f995998c3..371acb972c 100644
> --- a/m4/virt-external-programs.m4
> +++ b/m4/virt-external-programs.m4
> @@ -34,6 +34,8 @@ AC_DEFUN([LIBVIRT_CHECK_EXTERNAL_PROGRAMS], [
>     AC_MSG_ERROR("xsltproc is required to build libvirt")
>   fi
>   AC_PATH_PROG([AUGPARSE], [augparse], [/usr/bin/augparse])
> +  AC_PATH_PROG([UGLIFYJS], [uglifyjs], [])
> +  AM_CONDITIONAL([HAVE_UGLIFYJS], [test "$UGLIFYJS"])
>   AC_PROG_MKDIR_P
>   AC_PROG_LN_S
> 
> -- 
> 2.21.0
> 
> --
> libvir-list mailing list
> libvir-list at redhat.com
> https://www.redhat.com/mailman/listinfo/libvir-list





More information about the libvir-list mailing list