summaryrefslogtreecommitdiffstats
path: root/buildhelpers
diff options
context:
space:
mode:
authorJonatan Kronqvist <jonatan@vaadin.com>2014-03-28 12:55:33 +0200
committerVaadin Code Review <review@vaadin.com>2014-03-31 13:37:27 +0000
commit353a1a1c3073975ddc6d0f25d8d2b21b9df94343 (patch)
tree73c62e2c993c3c035fe2ba242c5f9583ebe2f54d /buildhelpers
parent74bfd5e20759f0c26b40b41754129cbd71e0eff3 (diff)
downloadvaadin-framework-353a1a1c3073975ddc6d0f25d8d2b21b9df94343.tar.gz
vaadin-framework-353a1a1c3073975ddc6d0f25d8d2b21b9df94343.zip
Remove theme-compiler and replace with external vaadin-sass-compiler
* Moves CompileTheme from the theme-compiler to buildhelpers * Refactors CompileTheme to get the Vaadin version on the command line instead of using the Version class found in vaadin-shared * Refactors build scripts to pass the version number on the command line when running CompileTheme * Removes the theme-compiler module/project/whatchamacallit * Replaces the theme-compiler dependency with vaadin-sass-compiler 0.9.0 from maven Change-Id: I4f98d15b60e18a826bf264eb55d12b3e736e8e54
Diffstat (limited to 'buildhelpers')
-rw-r--r--buildhelpers/ivy.xml7
-rw-r--r--buildhelpers/src/com/vaadin/buildhelpers/CompileTheme.java154
2 files changed, 161 insertions, 0 deletions
diff --git a/buildhelpers/ivy.xml b/buildhelpers/ivy.xml
index 21c2a808cc..df25cc84e5 100644
--- a/buildhelpers/ivy.xml
+++ b/buildhelpers/ivy.xml
@@ -29,6 +29,13 @@
</publications>
<dependencies>
<dependency org="commons-io" name="commons-io" rev="2.2" />
+ <dependency org="commons-cli" name="commons-cli" rev="1.2" />
+ <dependency org="com.vaadin" name="vaadin-sass-compiler"
+ rev="${vaadin.sass.version}" />
+
+ <!-- Internally used, for now -->
+ <dependency org="com.carrotsearch" name="smartsprites"
+ rev="0.2.10" />
</dependencies>
</ivy-module>
diff --git a/buildhelpers/src/com/vaadin/buildhelpers/CompileTheme.java b/buildhelpers/src/com/vaadin/buildhelpers/CompileTheme.java
new file mode 100644
index 0000000000..06b941f522
--- /dev/null
+++ b/buildhelpers/src/com/vaadin/buildhelpers/CompileTheme.java
@@ -0,0 +1,154 @@
+/*
+ * Copyright 2000-2013 Vaadin Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package com.vaadin.buildhelpers;
+
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileWriter;
+import java.io.IOException;
+
+import org.apache.commons.cli.CommandLine;
+import org.apache.commons.cli.CommandLineParser;
+import org.apache.commons.cli.HelpFormatter;
+import org.apache.commons.cli.Options;
+import org.apache.commons.cli.ParseException;
+import org.apache.commons.cli.PosixParser;
+
+import com.vaadin.sass.internal.ScssStylesheet;
+
+/**
+ * Helper to combine css divided into separate per component dirs into one to
+ * optimize http requests.
+ */
+public class CompileTheme {
+
+ /**
+ * @param args
+ * @throws IOException
+ * @throws ParseException
+ */
+ public static void main(String[] args) throws IOException, ParseException {
+ Options options = new Options();
+ options.addOption("t", "theme", true, "the theme to compile");
+ options.addOption("f", "theme-folder", true,
+ "the folder containing the theme");
+ options.addOption("v", "version", true,
+ "the Vaadin version to compile for");
+ CommandLineParser parser = new PosixParser();
+ CommandLine params = parser.parse(options, args);
+ if (!params.hasOption("theme") || !params.hasOption("theme-folder")
+ || !params.hasOption("version")) {
+ // automatically generate the help statement
+ HelpFormatter formatter = new HelpFormatter();
+ formatter.printHelp(CompileTheme.class.getName(), options);
+ return;
+ }
+ String themeName = params.getOptionValue("theme");
+ String themeFolder = params.getOptionValue("theme-folder");
+ String version = params.getOptionValue("version");
+
+ // Regular theme
+ try {
+ processSassTheme(themeFolder, themeName, "styles", version);
+ System.out.println("Compiling theme " + themeName
+ + " styles successful");
+ } catch (Exception e) {
+ System.err.println("Compiling theme " + themeName
+ + " styles failed");
+ e.printStackTrace();
+ }
+ // Legacy theme w/o .themename{} wrapping
+ try {
+ processSassTheme(themeFolder, themeName, "legacy-styles", version);
+ System.out.println("Compiling theme " + themeName
+ + " legacy-styles successful");
+ } catch (Exception e) {
+ System.err.println("Compiling theme " + themeName
+ + " legacy-styles failed");
+ e.printStackTrace();
+ }
+ }
+
+ private static void processSassTheme(String themeFolder, String themeName,
+ String variant, String version) throws Exception {
+
+ StringBuffer cssHeader = new StringBuffer();
+
+ String stylesCssDir = themeFolder + File.separator + themeName
+ + File.separator;
+
+ String stylesCssName = stylesCssDir + variant + ".css";
+
+ // Process as SASS file
+ String sassFile = stylesCssDir + variant + ".scss";
+
+ ScssStylesheet scss = ScssStylesheet.get(sassFile);
+ if (scss == null) {
+ throw new IllegalArgumentException("SASS file: " + sassFile
+ + " not found");
+ }
+ scss.compile();
+ String filteredScss = scss.printState().replace("@version@", version);
+
+ BufferedWriter out = new BufferedWriter(new FileWriter(stylesCssName));
+ out.write(cssHeader.toString());
+ out.write(filteredScss);
+ out.close();
+
+ System.out.println("Compiled CSS to " + stylesCssName + " ("
+ + filteredScss.length() + " bytes)");
+
+ createSprites(themeFolder, themeName);
+ File oldCss = new File(stylesCssName);
+ File newCss = new File(stylesCssDir + variant + "-sprite.css");
+
+ if (newCss.exists()) {
+ // Theme contained sprites. Renamed "styles-sprite.css" ->
+ // "styles.css"
+ oldCss.delete();
+
+ boolean ok = newCss.renameTo(oldCss);
+ if (!ok) {
+ throw new RuntimeException("Rename " + newCss + " -> " + oldCss
+ + " failed");
+ }
+ }
+
+ }
+
+ private static void createSprites(String themeFolder, String themeName)
+ throws FileNotFoundException, IOException {
+ try {
+ // Try loading the class separately from using it to avoid
+ // hiding other classpath issues
+ Class<?> smartSpritesClass = org.carrot2.labs.smartsprites.SmartSprites.class;
+ } catch (NoClassDefFoundError e) {
+ System.err
+ .println("Could not find smartsprites. No sprites were generated. The theme should still work.");
+ return;
+ }
+
+ String[] parameters = new String[] { "--sprite-png-depth", "AUTO",
+ "--css-file-suffix", "-sprite", "--css-file-encoding", "UTF-8",
+ "--root-dir-path", themeFolder + File.separator + themeName,
+ "--log-level", "WARN" };
+
+ org.carrot2.labs.smartsprites.SmartSprites.main(parameters);
+ System.out.println("Generated sprites");
+
+ }
+}