You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@bigtop.apache.org by co...@apache.org on 2015/09/10 22:45:09 UTC

bigtop git commit: BIGTOP-1494. Introduce Groovy DSL to replace bigtop.mk

Repository: bigtop
Updated Branches:
  refs/heads/master 5228576c2 -> 140949830


BIGTOP-1494. Introduce Groovy DSL to replace bigtop.mk


Project: http://git-wip-us.apache.org/repos/asf/bigtop/repo
Commit: http://git-wip-us.apache.org/repos/asf/bigtop/commit/14094983
Tree: http://git-wip-us.apache.org/repos/asf/bigtop/tree/14094983
Diff: http://git-wip-us.apache.org/repos/asf/bigtop/diff/14094983

Branch: refs/heads/master
Commit: 1409498304703f35711e89eebae8d87669c011ec
Parents: 5228576
Author: Konstantin Boudnik <co...@apache.org>
Authored: Fri Sep 4 17:32:16 2015 -0700
Committer: Konstantin Boudnik <co...@apache.org>
Committed: Thu Sep 10 13:43:30 2015 -0700

----------------------------------------------------------------------
 bigtop.bom                                      | 368 +++++++++++++++++
 bigtop.mk                                       | 404 -------------------
 .../groovy/org/apache/bigtop/BuildUtils.groovy  |  53 ---
 .../org/apache/bigtop/TestBuildUtils.groovy     |  81 ----
 packages.gradle                                 | 153 +++----
 5 files changed, 449 insertions(+), 610 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/bigtop/blob/14094983/bigtop.bom
----------------------------------------------------------------------
diff --git a/bigtop.bom b/bigtop.bom
new file mode 100644
index 0000000..ddc1894
--- /dev/null
+++ b/bigtop.bom
@@ -0,0 +1,368 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.
+ */
+
+/** DSL documentation
+ The structure of this configuration DSL is pretty self-explanatory. The main
+ section is 'components' that contains the description of all things included
+ into the stack. The following words are considered terminals and shouldn't be
+ modified as it will affect the parsing behavior:
+   - bigtop
+   - version
+   - stack
+   - version_base
+   - apache
+   - pkg
+   - tarball, source, destinations
+   - url, download_path, site, archive
+ Also, the following are base constants and if renamed will affect the some of
+ the stack's definitions
+   - APACHE_MIRROR
+   - APACHE_ARCHIVE
+
+ bigtop { // *the name should be change: the parsing code depends on it*
+   version = "STACK-VERSION" // *required*
+   stack { // *required* Fundamental properties of the Stack: JDK, SDK, GDK, etc
+     'jdk' { version = '1.7'; version_base = version }
+     'scala' { version = '2.10.3'; version_base = version }
+   }
+   apache { // *required* These shoudn't be modified unless ASF Infra demands changes
+     APACHE_MIRROR = "http://apache.osuosl.org"
+     APACHE_ARCHIVE = "http://archive.apache.org/dist"
+   }
+   components { *required; preserve the name* if empty, nothing will be built
+     'label' { // label could be anything; it's a good practice to make it same as the name
+       name    = 'component1' // *required* the name of the component
+       // 'pkg' value is optional and will be set to that of 'name' i.e. [pkg := name]
+       pkg     = name // *optional* and will be set to the 'name' value
+       // 'base' is required; [pkg := base ]; [release := 1 ]
+       version { base  = 'x.y.z'; pkg   = base; release = 1 }
+       tarball {
+         source      = "apache-component1-${version.base}.tar.gz" // *optional*
+         destination = source
+       }
+       url { // *optional*
+         download_path = "/component1/component1-${version.base}"
+         site          = "${apache.APACHE_MIRROR}/${download_path}"
+         archive       = "${apache.APACHE_ARCHIVE}/${download_path}"
+       }
+     }
+   }
+ }
+ End of DSL Documentation */
+
+bigtop {
+/** Base Configuration of the mirror and archives */
+  version = "1.1.0-SNAPSHOT"
+  stack {
+    'jdk' { version = '1.7'; version_base = version }
+    'scala' { version = '2.10.3'; version_base = version }
+  }
+  apache {
+    APACHE_MIRROR = "http://apache.osuosl.org"
+    APACHE_ARCHIVE = "http://archive.apache.org/dist"
+  }
+/** End of Base Configuration */
+
+  components {
+    'zookeeper' {
+      name    = 'zookeeper'
+      pkg     = name
+      version {
+        base  = '3.4.6'
+        pkg   = base
+        release = 1
+      }
+      tarball {
+        source      = "zookeeper-${version.base}.tar.gz"
+        destination = source
+      }
+      url {
+        download_path = "/zookeeper/zookeeper-${version.base}"
+        site          = "${apache.APACHE_MIRROR}/${download_path}"
+        archive       = "${apache.APACHE_ARCHIVE}/${download_path}"
+      }
+    }
+    'hadoop' {
+      name    = 'hadoop'
+      relNotes = 'Apache Hadoop'
+      version { base = '2.7.1'; pkg = base; release = 1 }
+      tarball { destination = "${name}-${version.base}.tar.gz"
+                source      = "${name}-${version.base}-src.tar.gz" }
+      url     { download_path = "/$name/common/$name-${version.base}"
+                site = "${apache.APACHE_MIRROR}/${download_path}"
+                archive = "${apache.APACHE_ARCHIVE}/${download_path}" }
+    }
+    'ignite' {
+      name    = 'ignite-hadoop'
+      relNotes = 'Apache Ignite in-memory data fabric'
+      version { base = '1.3.0'; pkg = base; release = 1 }
+      tarball { destination = "${name}-${version.base}.tar.gz"
+                source      = "apache-ignite-${version.base}-incubating-src.zip" }
+      url     { download_path = "/incubator/ignite/${version.base}/"
+                site = "${apache.APACHE_MIRROR}/${download_path}"
+                archive = "${apache.APACHE_ARCHIVE}/${download_path}" }
+    }
+
+    'hbase' {
+      name    = 'hbase'
+      relNotes = 'Apache HBase'
+      version { base = '0.98.12'; pkg = base; release = 1 }
+      tarball { destination = "${name}-${version.base}.tar.gz"
+                source      = "${name}-${version.base}-src.tar.gz" }
+      url     { download_path = "/$name/$name-${version.base}/"
+                site = "${apache.APACHE_MIRROR}/${download_path}"
+                archive = "${apache.APACHE_ARCHIVE}/${download_path}" }
+    }
+
+    'pig' {
+      name    = 'pig'
+      pkg     = 'pig'
+      relNotes = 'Apache Pig'
+      version { base = '0.14.0'; pkg = base; release = 1 }
+      tarball { destination = "${name}-${version.base}.tar.gz"
+                source      = "${name}-${version.base}-src.tar.gz" }
+      url     { download_path = "/$name/$name-${version.base}/"
+                site = "${apache.APACHE_MIRROR}/${download_path}"
+                archive = "${apache.APACHE_ARCHIVE}/${download_path}" }
+    }
+    'hive' {
+      name    = 'hive'
+      relNotes = 'Apache Hive'
+      version { base = '1.0.0'; pkg = base; release = 1 }
+      tarball { destination = "apache-${name}-${version.base}-src.tar.gz"
+                source      = destination }
+      url     { download_path = "/$name/$name-${version.base}/"
+                site = "${apache.APACHE_MIRROR}/${download_path}"
+                archive = "${apache.APACHE_ARCHIVE}/${download_path}" }
+    }
+    'tez' {
+      name    = 'tez'
+      relNotes = 'Apache TEZ'
+      version { base = '0.6.2'; pkg = base; release = 1 }
+      tarball { destination = "apache-${name}-${version.base}-src.tar.gz"
+                source      = destination }
+      url     { download_path = "/$name/${version.base}/"
+                site = "${apache.APACHE_MIRROR}/${download_path}"
+                archive = "${apache.APACHE_ARCHIVE}/${download_path}" }
+    }
+    'sqoop' {
+      name    = 'sqoop'
+      relNotes = 'Apache Sqoop v1'
+      version { base = '1.4.5'; pkg = base; release = 1 }
+      tarball { destination = "${name}-${version.base}.tar.gz"
+                source      = destination }
+      url     { download_path = "/$name/${version.base}/"
+                site = "${apache.APACHE_MIRROR}/${download_path}"
+                archive = "${apache.APACHE_ARCHIVE}/${download_path}" }
+    }
+    'sqoop2' {
+      name    = 'sqoop2'
+      relNotes = 'Apache Sqoop v2'
+      version { base = '1.99.4'; pkg = base; release = 1 }
+      tarball { destination = "${sqoop.name}-${version.base}.tar.gz"
+                source      = destination }
+      url     { download_path = "/${sqoop.name}/${version.base}/"
+                site = "${apache.APACHE_MIRROR}/${download_path}"
+                archive = "${apache.APACHE_ARCHIVE}/${download_path}" }
+    }
+    'oozie' {
+      name    = 'oozie'
+      relNotes = 'Apache Oozie'
+      version { base = '4.0.1'; pkg = base; release = 1 }
+      tarball { destination = "$name-${version.base}.tar.gz"
+                source      = destination }
+      url     { download_path = "/$name/${version.base}/"
+                site = "${apache.APACHE_MIRROR}/${download_path}"
+                archive = "${apache.APACHE_ARCHIVE}/${download_path}" }
+    }
+    'mahout' {
+      name    = 'mahout'
+      relNotes = 'Apache Mahout'
+      version { base = '0.11.0'; pkg = base; release = 1 }
+      tarball { destination = "apache-$name-distribution-${version.base}-src.tar.gz"
+                source      = destination }
+      url     { download_path = "/$name/${version.base}/"
+                site = "${apache.APACHE_MIRROR}/${download_path}"
+                archive = "${apache.APACHE_ARCHIVE}/${download_path}" }
+    }
+    'flume' {
+      name    = 'flume'
+      relNotes = 'Apache Flume'
+      version { base = '1.6.0'; pkg = base; release = 1 }
+      tarball { destination = "apache-$name-${version.base}-src.tar.gz"
+                source      = destination }
+      url     { download_path = "/$name/${version.base}/"
+                site = "${apache.APACHE_MIRROR}/${download_path}"
+                archive = "${apache.APACHE_ARCHIVE}/${download_path}" }
+    }
+    'giraph' {
+      name    = 'giraph'
+      relNotes = 'Apache Giraph'
+      version { base = '1.1.0'; pkg = base; release = 1 }
+      tarball { destination = "$name-${version.base}.tar.gz"
+                source      = "$name-dist-${version.base}-src.tar.gz" }
+      url     { download_path = "/$name/$name-${version.base}/"
+                site = "${apache.APACHE_MIRROR}/${download_path}"
+                archive = "${apache.APACHE_ARCHIVE}/${download_path}" }
+    }
+    'hue' {
+      name    = 'hue'
+      relNotes = 'Hadoop User Interface'
+      version { base = '3.8.1'; pkg = base; release = 1 }
+      tarball { destination = "$name-${version.base}.tar.gz"
+                source      = "release-${version.base}.tar.gz" }
+      url     { site = "https://github.com/cloudera/hue/archive"
+                archive = site }
+    }
+    'datafu' {
+      name    = 'datafu'
+      pkg     = 'pig-udf-datafu'
+      relNotes = 'Pig UDF Datafu'
+      version { base = '1.0.0'; pkg = base; release = 1 }
+      tarball { destination = "$name-${version.base}.tar.gz"
+                source      = "${version.base}.tar.gz" }
+      url     { site = "https://github.com/linkedin/datafu/archive"
+                archive = site }
+    }
+    'solr' {
+      name    = 'solr'
+      relNotes = 'Apache Solr'
+      version { base = '4.9.0'; pkg = base; release = 1 }
+      tarball { destination = "$name-${version.base}-src.tar.gz"
+                source      = destination }
+      url     { download_path = "/lucene/$name/${version.base}/"
+                site = "${apache.APACHE_MIRROR}/${download_path}"
+                archive = "${apache.APACHE_ARCHIVE}/${download_path}" }
+    }
+    'crunch' {
+      name    = 'crunch'
+      relNotes = 'Apache Crunch'
+      version { base = '0.12.0'; pkg = base; release = 1 }
+      tarball { destination = "apache-$name-${version.base}-src.tar.gz"
+                source      = destination }
+      url     { download_path = "/$name/$name-${version.base}/"
+                site = "${apache.APACHE_MIRROR}/${download_path}"
+                archive = "${apache.APACHE_ARCHIVE}/${download_path}" }
+    }
+    'spark' {
+      name    = 'spark'
+      relNotes = 'Apache Spark'
+      version { base = '1.3.1'; pkg = base; release = 1 }
+      tarball { destination = "$name-${version.base}.tar.gz"
+                source      = "$name-${version.base}.tgz" }
+      url     { download_path = "/$name/$name-${version.base}"
+                site = "${apache.APACHE_MIRROR}/${download_path}"
+                archive = "${apache.APACHE_ARCHIVE}/${download_path}" }
+    }
+    'phoenix' {
+      name    = 'phoenix'
+      relNotes = 'Apache Phoenix: A SQL skin over HBase'
+      version { base = '4.4.0'; pkg = base; release = 1 }
+      phoenix.hbase ='HBase-0.98'
+      tarball { destination = "$name-${version.base}-${phoenix.hbase}-src.tar.gz"
+                source      = destination }
+      url     { download_path = "/$name/$name-${version.base}-${phoenix.hbase}/src"
+                site = "${apache.APACHE_MIRROR}/${download_path}"
+                archive = "${apache.APACHE_ARCHIVE}/${download_path}" }
+    }
+    'bigtop-groovy' {
+      name    = 'bigtop-groovy'
+      version { base = '2.4.4'; pkg = '2.4.4'; release = 1}
+      relNotes = "Groovy: a dynamic language for the Java platform"
+      tarball { destination = "$name-${version.base}.tar.gz";
+                source      = "apache-groovy-binary-${version.base}.zip"}
+      url     { site = "http://dl.bintray.com/groovy/maven/"; archive = site }
+      // Optional, as only null values are specified
+      git     { repo = null; ref = null; dir = null}
+    }
+    'bigtop-utils' {
+      name    = "bigtop-utils"
+      relNotes = "Service package for Apache Bigtop runtime"
+      version { base = bigtop.version; pkg = base-"-SNAPSHOT"; release = 1 }
+      tarball { destination = "bigtop-utils-${version.base}.tar.gz" }
+    }
+    'bigtop-jsvc' {
+      name    = "bigtop-jsvc"
+      relNotes = "Apache Common Daemon (jsvc) service package"
+      version { base = '1.0.15'; pkg = base; release = 1 }
+      tarball { source      = "commons-daemon-${version.base}-native-src.tar.gz"
+                destination = "commons-daemon-${version.base}.tar.gz" }
+      url     { download_path = "/commons/daemon/source"
+                site = "${apache.APACHE_MIRROR}/${download_path}"
+                archive = "${apache.APACHE_ARCHIVE}/${download_path}" }
+    }
+    'bigtop-tomcat' {
+      name    = "bigtop-tomcat"
+      relNotes = "Apache Tomcat"
+      version { base = '6.0.36'; pkg = base; release = 1 }
+      tarball { source      = "apache-tomcat-${version.base}-src.tar.gz"
+                destination = "apache-tomcat-${version.base}.tar.gz" }
+      url     { download_path = "/tomcat/tomcat-6/v${version.base}/src"
+                site = "${apache.APACHE_MIRROR}/${download_path}"
+                archive = "${apache.APACHE_ARCHIVE}/${download_path}" }
+    }
+    'tachyon' {
+      name    = "tachyon"
+      name    = "tachyon-tfs"
+      relNotes = "Tachyon: a memory-centric distributed file system"
+      version { base = '0.6.0'; pkg = base; release = 1 }
+      tarball { destination = "$name-${version.base}.tar.gz"
+                source      = "v${version.base}.tar.gz" }
+      url     { site = "https://github.com/amplab/tachyon/archive"
+                archive = site }
+    }
+    'kafka' {
+      name    = 'kafka'
+      relNotes = 'Apache Kafka'
+      version { base = '0.8.1.1'; pkg = base; release = 1 }
+      tarball { destination = "$name-${version.base}.tar.gz"
+                source      = "$name-${version.base}-src.tar.gz" }
+      url     { download_path = "/$name/${version.base}/"
+                site = "${apache.APACHE_MIRROR}/${download_path}"
+                archive = "${apache.APACHE_ARCHIVE}/${download_path}" }
+    }
+    'ycsb' {
+      name    = 'ycsb'
+      relNotes = 'Yahoo! Cloud Serving Benchmark'
+      version { base = '0.1.4'; pkg = base; release = 1 }
+      tarball { destination = "$name-${version.base}.tar.gz"
+                source      = "${version.base}.tar.gz" }
+      url     { site = "https://github.com/brianfrankcooper/YCSB/archive"
+                archive = site }
+    }
+    'kite' {
+      name    = 'kite'
+      relNotes = 'Kite Software Development Kit'
+      version { base = '1.1.0'; pkg = base; release = 1 }
+      tarball { destination = "$name-${version.base}.tar.gz"
+                source      = "release-${version.base}.tar.gz" }
+      url     { site = "https://github.com/kite-sdk/kite/archive"
+                archive = site }
+    }
+    'hama' {
+      name    = 'hama'
+      relNotes = 'Apache Hama'
+      version { base = '0.7.0'; pkg = base; release = 1 }
+      tarball { destination = "$name-dist-${version.base}.tar.gz"
+                source      = "$name-dist-${version.base}-src.tar.gz" }
+      url     { download_path = "/$name/$name-${version.base}/"
+                site = "${apache.APACHE_MIRROR}/${download_path}"
+                archive = "${apache.APACHE_ARCHIVE}/${download_path}" }
+    }
+  }
+}

http://git-wip-us.apache.org/repos/asf/bigtop/blob/14094983/bigtop.mk
----------------------------------------------------------------------
diff --git a/bigtop.mk b/bigtop.mk
deleted file mode 100644
index 19eb2f6..0000000
--- a/bigtop.mk
+++ /dev/null
@@ -1,404 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You 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.
-
-BIGTOP_VERSION=1.1.0-SNAPSHOT
-
-# JDK Version
-JDK_VERSION=1.7
-JDK_BASE_VERSION=$(JDK_VERSION)
-
-# Scala Version
-SCALA_VERSION=2.10.3
-SCALA_BASE_VERSION=$(SCALA_VERSION)
-
-# ZooKeeper
-ZOOKEEPER_NAME=zookeeper
-ZOOKEEPER_RELNOTES_NAME=Apache Zookeeper
-ZOOKEEPER_PKG_NAME=zookeeper
-ZOOKEEPER_BASE_VERSION=3.4.6
-ZOOKEEPER_PKG_VERSION=3.4.6
-ZOOKEEPER_RELEASE_VERSION=1
-ZOOKEEPER_TARBALL_DST=zookeeper-$(ZOOKEEPER_BASE_VERSION).tar.gz
-ZOOKEEPER_TARBALL_SRC=$(ZOOKEEPER_TARBALL_DST)
-ZOOKEEPER_DOWNLOAD_PATH=/zookeeper/zookeeper-$(ZOOKEEPER_BASE_VERSION)
-ZOOKEEPER_SITE=$(APACHE_MIRROR)$(ZOOKEEPER_DOWNLOAD_PATH)
-ZOOKEEPER_ARCHIVE=$(APACHE_ARCHIVE)$(ZOOKEEPER_DOWNLOAD_PATH)
-$(eval $(call PACKAGE,zookeeper,ZOOKEEPER))
-
-# Hadoop 0.20.0-based hadoop package
-HADOOP_NAME=hadoop
-HADOOP_RELNOTES_NAME=Apache Hadoop
-HADOOP_BASE_VERSION=2.7.1
-HADOOP_PKG_VERSION=2.7.1
-HADOOP_RELEASE_VERSION=1
-HADOOP_TARBALL_DST=$(HADOOP_NAME)-$(HADOOP_BASE_VERSION).tar.gz
-HADOOP_TARBALL_SRC=$(HADOOP_NAME)-$(HADOOP_BASE_VERSION)-src.tar.gz
-HADOOP_DOWNLOAD_PATH=/hadoop/common/$(HADOOP_NAME)-$(HADOOP_BASE_VERSION)
-HADOOP_SITE=$(APACHE_MIRROR)$(HADOOP_DOWNLOAD_PATH)
-HADOOP_ARCHIVE=$(APACHE_ARCHIVE)$(HADOOP_DOWNLOAD_PATH)
-$(eval $(call PACKAGE,hadoop,HADOOP))
-
-# Apache Ignite
-IGNITE_HADOOP_NAME=ignite-hadoop
-IGNITE_HADOOP_RELNOTES_NAME=Ignite
-IGNITE_HADOOP_PKG_NAME=$(IGNITE_HADOOP_NAME)
-IGNITE_HADOOP_BASE_VERSION=1.3.0
-IGNITE_HADOOP_PKG_VERSION=$(IGNITE_HADOOP_BASE_VERSION)
-IGNITE_HADOOP_RELEASE_VERSION=1
-IGNITE_HADOOP_TARBALL_DST=$(IGNITE_HADOOP_NAME)-$(IGNITE_HADOOP_BASE_VERSION).tar.gz
-IGNITE_HADOOP_TARBALL_SRC=apache-ignite-$(IGNITE_HADOOP_BASE_VERSION)-incubating-src.zip
-IGNITE_HADOOP_DOWNLOAD_PATH=/incubator/ignite/$(IGNITE_HADOOP_BASE_VERSION)/
-IGNITE_HADOOP_SITE=$(APACHE_MIRROR)$(IGNITE_HADOOP_DOWNLOAD_PATH)
-IGNITE_HADOOP_ARCHIVE=$(APACHE_ARCHIVE)$(IGNITE_HADOOP_DOWNLOAD_PATH)
-$(eval $(call PACKAGE,ignite-hadoop,IGNITE_HADOOP))
-
-# HBase
-HBASE_NAME=hbase
-HBASE_RELNOTES_NAME=Apache HBase
-HBASE_PKG_NAME=hbase
-HBASE_BASE_VERSION=0.98.12
-HBASE_PKG_VERSION=$(HBASE_BASE_VERSION)
-HBASE_RELEASE_VERSION=1
-HBASE_TARBALL_DST=hbase-$(HBASE_BASE_VERSION).tar.gz
-HBASE_TARBALL_SRC=hbase-$(HBASE_BASE_VERSION)-src.tar.gz
-HBASE_DOWNLOAD_PATH=/hbase/hbase-$(HBASE_BASE_VERSION)
-HBASE_SITE=$(APACHE_MIRROR)$(HBASE_DOWNLOAD_PATH)
-HBASE_ARCHIVE=$(APACHE_ARCHIVE)$(HBASE_DOWNLOAD_PATH)
-$(eval $(call PACKAGE,hbase,HBASE))
-
-# Pig
-PIG_BASE_VERSION=0.14.0
-PIG_PKG_VERSION=$(PIG_BASE_VERSION)
-PIG_RELEASE_VERSION=1
-PIG_NAME=pig
-PIG_RELNOTES_NAME=Apache Pig
-PIG_PKG_NAME=pig
-PIG_TARBALL_DST=pig-$(PIG_BASE_VERSION)-src.tar.gz
-PIG_TARBALL_SRC=$(PIG_TARBALL_DST)
-PIG_DOWNLOAD_PATH=/pig/pig-$(PIG_BASE_VERSION)
-PIG_SITE=$(APACHE_MIRROR)$(PIG_DOWNLOAD_PATH)
-PIG_ARCHIVE=$(APACHE_ARCHIVE)$(PIG_DOWNLOAD_PATH)
-$(eval $(call PACKAGE,pig,PIG))
-
-# Hive
-HIVE_NAME=hive
-HIVE_RELNOTES_NAME=Apache Hive
-HIVE_PKG_NAME=hive
-HIVE_BASE_VERSION=1.0.0
-HIVE_PKG_VERSION=$(HIVE_BASE_VERSION)
-HIVE_RELEASE_VERSION=1
-HIVE_TARBALL_DST=apache-hive-$(HIVE_BASE_VERSION)-src.tar.gz
-HIVE_TARBALL_SRC=$(HIVE_TARBALL_DST)
-HIVE_DOWNLOAD_PATH=/hive/hive-$(HIVE_BASE_VERSION)
-HIVE_SITE=$(APACHE_MIRROR)$(HIVE_DOWNLOAD_PATH)
-HIVE_ARCHIVE=$(APACHE_ARCHIVE)$(HIVE_DOWNLOAD_PATH)
-$(eval $(call PACKAGE,hive,HIVE))
-
-# TEZ
-TEZ_NAME=tez
-TEZ_RELNOTES_NAME=Apache TEZ
-TEZ_PKG_NAME=tez
-TEZ_BASE_VERSION=0.6.2
-TEZ_PKG_VERSION=$(TEZ_BASE_VERSION)
-TEZ_RELEASE_VERSION=1
-TEZ_TARBALL_DST=apache-tez-$(TEZ_BASE_VERSION)-src.tar.gz
-TEZ_TARBALL_SRC=$(TEZ_TARBALL_DST)
-TEZ_DOWNLOAD_PATH=/tez/$(TEZ_BASE_VERSION)
-TEZ_SITE=$(APACHE_MIRROR)$(TEZ_DOWNLOAD_PATH)
-TEZ_ARCHIVE=$(APACHE_ARCHIVE)$(TEZ_DOWNLOAD_PATH)
-$(eval $(call PACKAGE,tez,TEZ))
-
-# Sqoop
-SQOOP_NAME=sqoop
-SQOOP_RELNOTES_NAME=Sqoop
-SQOOP_PKG_NAME=sqoop
-SQOOP_BASE_VERSION=1.4.5
-SQOOP_PKG_VERSION=$(SQOOP_BASE_VERSION)
-SQOOP_RELEASE_VERSION=1
-SQOOP_TARBALL_DST=$(SQOOP_NAME)-$(SQOOP_BASE_VERSION).tar.gz
-SQOOP_TARBALL_SRC=$(SQOOP_TARBALL_DST)
-SQOOP_DOWNLOAD_PATH=/sqoop/$(SQOOP_BASE_VERSION)
-SQOOP_SITE=$(APACHE_MIRROR)$(SQOOP_DOWNLOAD_PATH)
-SQOOP_ARCHIVE=$(APACHE_ARCHIVE)$(SQOOP_DOWNLOAD_PATH)
-$(eval $(call PACKAGE,sqoop,SQOOP))
-
-# Sqoop 2
-SQOOP2_NAME=sqoop2
-SQOOP2_RELNOTES_NAME=Sqoop 2
-SQOOP2_PKG_NAME=sqoop2
-SQOOP2_BASE_VERSION=1.99.4
-SQOOP2_PKG_VERSION=$(SQOOP2_BASE_VERSION)
-SQOOP2_RELEASE_VERSION=1
-SQOOP2_TARBALL_DST=$(SQOOP_NAME)-$(SQOOP2_BASE_VERSION).tar.gz
-SQOOP2_TARBALL_SRC=$(SQOOP2_TARBALL_DST)
-SQOOP2_DOWNLOAD_PATH=/sqoop/$(SQOOP2_BASE_VERSION)
-SQOOP2_SITE=$(APACHE_MIRROR)$(SQOOP2_DOWNLOAD_PATH)
-SQOOP2_ARCHIVE=$(APACHE_ARCHIVE)$(SQOOP2_DOWNLOAD_PATH)
-$(eval $(call PACKAGE,sqoop2,SQOOP2))
-
-# Oozie
-OOZIE_NAME=oozie
-OOZIE_RELNOTES_NAME=Apache Oozie
-OOZIE_PKG_NAME=oozie
-OOZIE_BASE_VERSION=4.0.1
-OOZIE_PKG_VERSION=$(OOZIE_BASE_VERSION)
-OOZIE_RELEASE_VERSION=1
-OOZIE_TARBALL_DST=oozie-$(OOZIE_BASE_VERSION).tar.gz
-OOZIE_TARBALL_SRC=$(OOZIE_TARBALL_DST)
-OOZIE_DOWNLOAD_PATH=/$(OOZIE_NAME)/$(OOZIE_BASE_VERSION)
-OOZIE_SITE=$(APACHE_MIRROR)$(OOZIE_DOWNLOAD_PATH)
-OOZIE_ARCHIVE=$(APACHE_ARCHIVE)$(OOZIE_DOWNLOAD_PATH)
-$(eval $(call PACKAGE,oozie,OOZIE))
-
-# Mahout
-MAHOUT_NAME=mahout
-MAHOUT_RELNOTES_NAME=Apache Mahout
-MAHOUT_PKG_NAME=mahout
-MAHOUT_BASE_VERSION=0.11.0
-MAHOUT_PKG_VERSION=0.11.0
-MAHOUT_RELEASE_VERSION=1
-MAHOUT_TARBALL_DST=apache-mahout-distribution-$(MAHOUT_BASE_VERSION)-src.tar.gz
-MAHOUT_TARBALL_SRC=$(MAHOUT_TARBALL_DST)
-MAHOUT_DOWNLOAD_PATH=/mahout/$(MAHOUT_BASE_VERSION)
-MAHOUT_SITE=$(APACHE_MIRROR)$(MAHOUT_DOWNLOAD_PATH)
-MAHOUT_ARCHIVE=$(APACHE_ARCHIVE)$(MAHOUT_DOWNLOAD_PATH)
-$(eval $(call PACKAGE,mahout,MAHOUT))
-
-# Flume
-FLUME_NAME=flume
-FLUME_RELNOTES_NAME=Flume
-FLUME_PKG_NAME=flume
-FLUME_BASE_VERSION=1.6.0
-FLUME_PKG_VERSION=1.6.0
-FLUME_RELEASE_VERSION=1
-FLUME_TARBALL_DST=apache-$(FLUME_NAME)-$(FLUME_BASE_VERSION)-src.tar.gz
-FLUME_TARBALL_SRC=$(FLUME_TARBALL_DST)
-FLUME_DOWNLOAD_PATH=/flume/$(FLUME_BASE_VERSION)
-FLUME_SITE=$(APACHE_MIRROR)$(FLUME_DOWNLOAD_PATH)
-FLUME_ARCHIVE=$(APACHE_ARCHIVE)$(FLUME_DOWNLOAD_PATH)
-$(eval $(call PACKAGE,flume,FLUME))
-
-# Giraph
-GIRAPH_NAME=giraph
-GIRAPH_RELNOTES_NAME=Giraph
-GIRAPH_PKG_NAME=giraph
-GIRAPH_BASE_VERSION=1.1.0
-GIRAPH_PKG_VERSION=1.1.0
-GIRAPH_RELEASE_VERSION=1
-GIRAPH_TARBALL_DST=$(GIRAPH_NAME)-$(GIRAPH_BASE_VERSION).tar.gz
-GIRAPH_TARBALL_SRC=$(GIRAPH_NAME)-dist-$(GIRAPH_BASE_VERSION)-src.tar.gz
-GIRAPH_DOWNLOAD_PATH=/giraph/$(GIRAPH_PKG_NAME)-$(GIRAPH_BASE_VERSION)
-GIRAPH_SITE=$(APACHE_MIRROR)$(GIRAPH_DOWNLOAD_PATH)
-GIRAPH_ARCHIVE=$(APACHE_ARCHIVE)$(GIRAPH_DOWNLOAD_PATH)
-$(eval $(call PACKAGE,giraph,GIRAPH))
-
-# Hue
-HUE_NAME=hue
-HUE_RELNOTES_NAME=Hadoop User Experience
-HUE_PKG_NAME=hue
-HUE_BASE_VERSION=3.8.1
-HUE_PKG_VERSION=3.8.1
-HUE_RELEASE_VERSION=1
-HUE_TARBALL_DST=hue-$(HUE_BASE_VERSION).tar.gz
-HUE_TARBALL_SRC=release-$(HUE_BASE_VERSION).tar.gz
-HUE_SITE=https://github.com/cloudera/hue/archive
-HUE_ARCHIVE=$(HUE_SITE)
-$(eval $(call PACKAGE,hue,HUE))
-
-# DataFu 
-DATAFU_NAME=datafu
-DATAFU_RELNOTES_NAME=Collection of user-defined functions
-DATAFU_PKG_NAME=pig-udf-datafu
-DATAFU_BASE_VERSION=1.0.0
-DATAFU_PKG_VERSION=1.0.0
-DATAFU_RELEASE_VERSION=1
-DATAFU_TARBALL_DST=datafu-$(DATAFU_BASE_VERSION).tar.gz
-DATAFU_TARBALL_SRC=v$(DATAFU_BASE_VERSION).tar.gz
-DATAFU_SITE=https://github.com/linkedin/datafu/archive
-DATAFU_ARCHIVE=$(DATAFU_SITE)
-$(eval $(call PACKAGE,datafu,DATAFU))
-
-# Solr
-SOLR_NAME=solr
-SOLR_RELNOTES_NAME=Search engine server
-SOLR_PKG_NAME=solr
-SOLR_BASE_VERSION=4.9.0
-SOLR_PKG_VERSION=$(SOLR_BASE_VERSION)
-SOLR_RELEASE_VERSION=1
-SOLR_TARBALL_DST=solr-$(SOLR_BASE_VERSION)-src.tgz
-SOLR_TARBALL_SRC=$(SOLR_TARBALL_DST)
-SOLR_DOWNLOAD_PATH=/lucene/solr/$(SOLR_BASE_VERSION)
-SOLR_SITE=$(APACHE_MIRROR)$(SOLR_DOWNLOAD_PATH)
-SOLR_ARCHIVE=$(APACHE_ARCHIVE)$(SOLR_DOWNLOAD_PATH)
-$(eval $(call PACKAGE,solr,SOLR))
-
-# Crunch
-CRUNCH_NAME=crunch
-CRUNCH_RELNOTES_NAME=Java library for MapReduce pipelines
-CRUNCH_PKG_NAME=crunch
-CRUNCH_BASE_VERSION=0.12.0
-CRUNCH_PKG_VERSION=$(CRUNCH_BASE_VERSION)
-CRUNCH_RELEASE_VERSION=1
-CRUNCH_TARBALL_DST=apache-crunch-$(CRUNCH_BASE_VERSION)-src.tar.gz
-CRUNCH_TARBALL_SRC=$(CRUNCH_TARBALL_DST)
-CRUNCH_DOWNLOAD_PATH=/crunch/crunch-$(CRUNCH_BASE_VERSION)
-CRUNCH_SITE=$(APACHE_MIRROR)$(CRUNCH_DOWNLOAD_PATH)
-CRUNCH_ARCHIVE=$(APACHE_ARCHIVE)$(CRUNCH_DOWNLOAD_PATH)
-$(eval $(call PACKAGE,crunch,CRUNCH))
-
-# Spark 
-SPARK_NAME=spark
-SPARK_RELNOTES_NAME=Spark
-SPARK_PKG_NAME=spark-core
-SPARK_BASE_VERSION=1.3.1
-SPARK_PKG_VERSION=1.3.1
-SPARK_RELEASE_VERSION=1
-SPARK_TARBALL_DST=spark-$(SPARK_BASE_VERSION).tar.gz
-SPARK_TARBALL_SRC=spark-$(SPARK_BASE_VERSION).tgz
-SPARK_DOWNLOAD_PATH=/spark/spark-$(SPARK_BASE_VERSION)
-SPARK_SITE=$(APACHE_MIRROR)$(SPARK_DOWNLOAD_PATH)
-SPARK_ARCHIVE=$(APACHE_ARCHIVE)$(SPARK_DOWNLOAD_PATH)
-$(eval $(call PACKAGE,spark,SPARK))
-
-# Phoenix
-PHOENIX_NAME=phoenix
-PHOENIX_RELNOTES_NAME=Phoenix: A SQL skin over HBase
-PHOENIX_PKG_NAME=phoenix
-PHOENIX_BASE_VERSION=4.4.0
-PHOENIX_PKG_VERSION=$(PHOENIX_BASE_VERSION)
-PHOENIX_RELEASE_VERSION=1
-PHOENIX_HBASE_VERSION=HBase-0.98
-PHOENIX_TARBALL_DST=phoenix-$(PHOENIX_BASE_VERSION)-$(PHOENIX_HBASE_VERSION)-src.tar.gz
-PHOENIX_TARBALL_SRC=$(PHOENIX_TARBALL_DST)
-PHOENIX_DOWNLOAD_PATH=/phoenix/phoenix-$(PHOENIX_BASE_VERSION)-$(PHOENIX_HBASE_VERSION)/src/
-PHOENIX_SITE=$(APACHE_MIRROR)$(PHOENIX_DOWNLOAD_PATH)
-PHOENIX_ARCHIVE=$(APACHE_ARCHIVE)$(PHOENIX_DOWNLOAD_PATH)
-$(eval $(call PACKAGE,phoenix,PHOENIX))
-
-# Groovy
-BIGTOP_GROOVY_NAME=bigtop-groovy
-BIGTOP_GROOVY_RELNOTES_NAME=Grovvy: a dynamic language for the Java platform
-BIGTOP_GROOVY_PKG_NAME=bigtop-groovy
-BIGTOP_GROOVY_BASE_VERSION=2.4.4
-BIGTOP_GROOVY_PKG_VERSION=$(BIGTOP_GROOVY_BASE_VERSION)
-BIGTOP_GROOVY_RELEASE_VERSION=1
-BIGTOP_GROOVY_TARBALL_DST=$(BIGTOP_GROOVY_NAME)-$(BIGTOP_GROOVY_BASE_VERSION).tar.gz
-BIGTOP_GROOVY_TARBALL_SRC=apache-groovy-binary-$(BIGTOP_GROOVY_BASE_VERSION).zip
-BIGTOP_GROOVY_SITE=http://dl.bintray.com/groovy/maven/
-BIGTOP_GROOVY_ARCHIVE=$(BIGTOP_GROOVY_SITE)
-$(eval $(call PACKAGE,bigtop-groovy,BIGTOP_GROOVY))
-
-# Bigtop-utils
-BIGTOP_UTILS_NAME=bigtop-utils
-BIGTOP_UTILS__RELNOTES_NAME=Bigtop-utils
-BIGTOP_UTILS_PKG_NAME=bigtop-utils
-BIGTOP_UTILS_BASE_VERSION=$(subst -,.,$(BIGTOP_VERSION))
-BIGTOP_UTILS_PKG_VERSION=$(BIGTOP_UTILS_BASE_VERSION)
-BIGTOP_UTILS_RELEASE_VERSION=1
-BIGTOP_UTILS_TARBALL_DST=$(BIGTOP_UTILS_PKG_NAME)-$(BIGTOP_UTILS_BASE_VERSION).tar.gz
-$(eval $(call PACKAGE,bigtop-utils,BIGTOP_UTILS))
-
-# Bigtop-jsvc
-BIGTOP_JSVC_NAME=bigtop-jsvc
-BIGTOP_JSVC_RELNOTES_NAME=Apache Commons Daemon (jsvc)
-BIGTOP_JSVC_PKG_NAME=bigtop-jsvc
-BIGTOP_JSVC_BASE_VERSION=1.0.15
-BIGTOP_JSVC_PKG_VERSION=$(BIGTOP_JSVC_BASE_VERSION)
-BIGTOP_JSVC_RELEASE_VERSION=1
-BIGTOP_JSVC_TARBALL_SRC=commons-daemon-$(BIGTOP_JSVC_BASE_VERSION)-native-src.tar.gz
-BIGTOP_JSVC_TARBALL_DST=commons-daemon-$(BIGTOP_JSVC_BASE_VERSION).tar.gz
-BIGTOP_JSVC_SITE=$(APACHE_MIRROR)/commons/daemon/source/
-BIGTOP_JSVC_ARCHIVE=$(APACHE_ARCHIVE)/commons/daemon/source/
-$(eval $(call PACKAGE,bigtop-jsvc,BIGTOP_JSVC))
-
-# Bigtop-tomcat
-BIGTOP_TOMCAT_NAME=bigtop-tomcat
-BIGTOP_TOMCAT_RELNOTES_NAME=Apache Tomcat
-BIGTOP_TOMCAT_PKG_NAME=bigtop-tomcat
-BIGTOP_TOMCAT_BASE_VERSION=6.0.36
-BIGTOP_TOMCAT_PKG_VERSION=$(BIGTOP_TOMCAT_BASE_VERSION)
-BIGTOP_TOMCAT_RELEASE_VERSION=1
-BIGTOP_TOMCAT_TARBALL_SRC=apache-tomcat-$(BIGTOP_TOMCAT_BASE_VERSION)-src.tar.gz
-BIGTOP_TOMCAT_TARBALL_DST=apache-tomcat-$(BIGTOP_TOMCAT_BASE_VERSION).tar.gz
-BIGTOP_TOMCAT_SITE=$(APACHE_MIRROR)/tomcat/tomcat-6/v$(BIGTOP_TOMCAT_BASE_VERSION)/src/
-BIGTOP_TOMCAT_ARCHIVE=$(APACHE_ARCHIVE)/tomcat/tomcat-6/v$(BIGTOP_TOMCAT_BASE_VERSION)/src/
-$(eval $(call PACKAGE,bigtop-tomcat,BIGTOP_TOMCAT))
-
-# Tachyon
-TACHYON_NAME=tachyon-tfs
-TACHYON_RELNOTES_NAME=Tachyon: a memory-centric distributed file system
-TACHYON_PKG_NAME=tachyon-tfs
-TACHYON_BASE_VERSION=0.6.0
-TACHYON_PKG_VERSION=0.6.0
-TACHYON_RELEASE_VERSION=1
-TACHYON_TARBALL_DST=tachyon-$(TACHYON_BASE_VERSION).tar.gz
-TACHYON_TARBALL_SRC=v$(TACHYON_BASE_VERSION).tar.gz
-TACHYON_SITE=https://github.com/amplab/tachyon/archive
-TACHYON_ARCHIVE=$(TACHYON_SITE)
-$(eval $(call PACKAGE,tachyon,TACHYON))
-
-# Kafka
-KAFKA_NAME=kafka
-KAFKA_RELNOTES_NAME=Apache Kafka
-KAFKA_PKG_NAME=kafka
-KAFKA_BASE_VERSION=0.8.1.1
-KAFKA_PKG_VERSION=$(KAFKA_BASE_VERSION)
-KAFKA_RELEASE_VERSION=1
-KAFKA_TARBALL_DST=kafka-$(KAFKA_BASE_VERSION).tar.gz
-KAFKA_TARBALL_SRC=kafka-$(KAFKA_BASE_VERSION)-src.tgz
-KAFKA_DOWNLOAD_PATH=/kafka/$(KAFKA_BASE_VERSION)
-KAFKA_SITE=$(APACHE_MIRROR)$(KAFKA_DOWNLOAD_PATH)
-KAFKA_ARCHIVE=$(APACHE_ARCHIVE)$(KAFKA_DOWNLOAD_PATH)
-$(eval $(call PACKAGE,kafka,KAFKA))
-
-# YCSB
-YCSB_NAME=YCSB
-YCSB_RELNOTES_NAME=Yahoo! Cloud Serving Benchmark
-YCSB_PKG_NAME=ycsb
-YCSB_BASE_VERSION=0.1.4
-YCSB_PKG_VERSION=0.1.4
-YCSB_RELEASE_VERSION=1
-YCSB_TARBALL_DST=ycsb-$(YCSB_BASE_VERSION).tar.gz
-YCSB_TARBALL_SRC=$(YCSB_BASE_VERSION).tar.gz
-YCSB_SITE=https://github.com/brianfrankcooper/YCSB/archive
-YCSB_ARCHIVE=$(YCSB_SITE)
-$(eval $(call PACKAGE,ycsb,YCSB))
-
-# Kite
-KITE_NAME=kite
-KITE_RELNOTES_NAME=Kite Software Development Kit
-KITE_PKG_NAME=kite
-KITE_BASE_VERSION=1.1.0
-KITE_PKG_VERSION=$(KITE_BASE_VERSION)
-KITE_RELEASE_VERSION=1
-KITE_TARBALL_SRC=release-$(KITE_BASE_VERSION).tar.gz
-KITE_TARBALL_DST=kite-$(KITE_BASE_VERSION).tar.gz
-KITE_SITE=https://github.com/kite-sdk/kite/archive
-KITE_ARCHIVE=$(KITE_SITE)
-$(eval $(call PACKAGE,kite,KITE))
-
-# Hama
-HAMA_NAME=hama
-HAMA_RELNOTES_NAME=Apache Hama
-HAMA_PKG_NAME=hama
-HAMA_BASE_VERSION=0.7.0
-HAMA_PKG_VERSION=$(HAMA_BASE_VERSION)
-HAMA_RELEASE_VERSION=1
-HAMA_TARBALL_DST=hama-dist-$(HAMA_BASE_VERSION).tar.gz
-HAMA_TARBALL_SRC=hama-dist-$(HAMA_BASE_VERSION)-src.tar.gz
-HAMA_DOWNLOAD_PATH=/hama/hama-$(HAMA_BASE_VERSION)
-HAMA_SITE=$(APACHE_MIRROR)$(HAMA_DOWNLOAD_PATH)
-HAMA_ARCHIVE=$(APACHE_ARCHIVE)$(HAMA_DOWNLOAD_PATH)
-$(eval $(call PACKAGE,hama,HAMA))

http://git-wip-us.apache.org/repos/asf/bigtop/blob/14094983/buildSrc/src/main/groovy/org/apache/bigtop/BuildUtils.groovy
----------------------------------------------------------------------
diff --git a/buildSrc/src/main/groovy/org/apache/bigtop/BuildUtils.groovy b/buildSrc/src/main/groovy/org/apache/bigtop/BuildUtils.groovy
deleted file mode 100644
index 11c6a48..0000000
--- a/buildSrc/src/main/groovy/org/apache/bigtop/BuildUtils.groovy
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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 org.apache.bigtop
-
-class BuildUtils {
-
-  def evaluateBOM = { map, eval ->
-    if (eval.contains("\$(")) {
-      // Crazy case of using make's subst
-      if (eval.contains("\$(subst")) {
-        // Extracting name of the var from something like
-        // $(subst -,.,$(BIGTOP_VERSION))
-        def pattern = ~ /.*\$\(subst (.*),(.*),\$\((\w+[-]?\w+?)\)\)/
-        def m = eval =~ pattern
-        def token = ""
-        if (m.matches()) {
-          token = m[0][3]
-        }
-        eval = map.get(token).replaceAll(m[0][1], m[0][2])
-        return eval
-      }
-      // Extracting all variable names that might or not be separated by dash
-      def pattern = ~/\$\((\w+[-]?\w+?)\)/
-      def m = eval =~ pattern
-      def counter = 0
-      // Moving forward while matches are found
-      while (m.find()) {
-        eval = eval.replaceAll(/\$\(/, "").replaceAll(/\)/,"")
-        (1..m.groupCount()).each { i ->
-          def token = m[counter++][i]
-          assert map.get(token) != null
-          eval = eval.replaceAll(token, map.get(token))
-        }
-      }
-    }
-    eval
-  }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/bigtop/blob/14094983/buildSrc/src/test/groovy/org/apache/bigtop/TestBuildUtils.groovy
----------------------------------------------------------------------
diff --git a/buildSrc/src/test/groovy/org/apache/bigtop/TestBuildUtils.groovy b/buildSrc/src/test/groovy/org/apache/bigtop/TestBuildUtils.groovy
deleted file mode 100644
index 8d98c05..0000000
--- a/buildSrc/src/test/groovy/org/apache/bigtop/TestBuildUtils.groovy
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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 org.apache.bigtop
-
-import org.junit.Assert
-import org.junit.Test
-
-class TestBuildUtils {
-
-  def final PREFIX = "BIGTOP_UTILS"
-  def input = [
-      'BIGTOP_VERSION=0.9.0-3',
-      'BIGTOP_GROOVY=2.4-SNAPSHOT',
-      'BIGTOP_UTILS_NAME=bigtop-utils',
-      'BIGTOP_UTILS__RELNOTES_NAME=Bigtop-utils',
-      'BIGTOP_UTILS_PKG_NAME=bigtop-utils',
-      'BIGTOP_UTILS_BASE_VERSION=$(subst -,.,$(BIGTOP_VERSION))',
-      'BIGTOP_GROOVY_BASE_VERSION=$(subst -SNAPSHOT,,$(BIGTOP_GROOVY))',
-      'BIGTOP_GROOVY_BASE_VERSION=$(BIGTOP_GROOVY_BASE_VERSION)',
-      'BIGTOP_UTILS_PKG_VERSION=$(BIGTOP_UTILS_BASE_VERSION)',
-      'BIGTOP_UTILS_RELEASE_VERSION=1',
-      'HADOOP_SITE=$(APACHE_MIRROR)/$(BIGTOP_UTILS_RELEASE_VERSION)/hadoop-2.0.6-alpha-src.tar.gz',
-      'BIGTOP_BUILD_STAMP=1'
-  ]
-  Map map = [
-      APACHE_MIRROR:  "http://apache.osuosl.org",
-      APACHE_ARCHIVE: "http://archive.apache.org/dist",
-  ]
-
-  @Test
-  void testEvaluateBOM () {
-    BuildUtils buildUtils = new BuildUtils()
-    def envs = []
-    input.each { line ->
-      envs = line?.split("=")
-      map.put(envs[0], buildUtils.evaluateBOM(map, envs[1]))
-    }
-
-    Assert.assertEquals("2.4", map.get("BIGTOP_GROOVY_BASE_VERSION"))
-    Assert.assertEquals("0.9.0.3", map.get("BIGTOP_UTILS_BASE_VERSION"))
-    Assert.assertEquals("0.9.0.3", map.get("BIGTOP_UTILS_PKG_VERSION"))
-    Assert.assertEquals("http://apache.osuosl.org/1/hadoop-2.0.6-alpha-src.tar.gz", map.get("HADOOP_SITE"))
-  }
-
-  @Test
-  void testOverrideBOM () {
-    System.setProperty("BIGTOP_UTILS_BASE_VERSION", "10.1.0")
-    System.setProperty("BIGTOP_BUILD_STAMP", "12")
-    System.setProperty("HADOOP_SITE", "http://www.apache.org")
-    BuildUtils buildUtils = new BuildUtils()
-    def envs = []
-    input.each { line ->
-      envs = line?.split("=")
-      def value = buildUtils.evaluateBOM(map, envs[1])
-      value = System.getProperty(envs[0]) ?: value
-      map.put(envs[0], value)
-    }
-
-    Assert.assertEquals("10.1.0", map.get("BIGTOP_UTILS_BASE_VERSION"))
-    Assert.assertEquals("12", map.get("BIGTOP_BUILD_STAMP"))
-    Assert.assertEquals("http://www.apache.org", map.get("HADOOP_SITE"))
-    System.clearProperty("HADOOP_SITE")
-    System.clearProperty("BIGTOP_BUILD_STAMP")
-    System.clearProperty("BIGTOP_UTILS_BASE_VERSION")
-  }
-}

http://git-wip-us.apache.org/repos/asf/bigtop/blob/14094983/packages.gradle
----------------------------------------------------------------------
diff --git a/packages.gradle b/packages.gradle
index 74b84d9..ce5e110 100644
--- a/packages.gradle
+++ b/packages.gradle
@@ -36,12 +36,11 @@ apply plugin: 'groovy'
 def PACKAGES_GROUP = 'package'
 
 final String VERBOSE = "verbose"
-final String BOM = "$rootDir/bigtop.mk"
+final String BOM = "$rootDir/bigtop.bom"
+def final config
 
 //HashMap <String, String>
 def BOM_map = [
-    APACHE_MIRROR:  "http://apache.osuosl.org",
-    APACHE_ARCHIVE: "http://archive.apache.org/dist",
     BASE_DIR:       projectDir.absolutePath,
     BUILD_DIR:      projectDir.absolutePath + "/build",
     OUTPUT_DIR:     projectDir.absolutePath + "/output",
@@ -51,7 +50,8 @@ def BOM_map = [
     BIGTOP_BUILD_STAMP: 1
 ]
 
-def final BIGTOP_BOM = 'BIGTOP_BOM'
+def final BIGTOP_VERSION = 'BIGTOP_VERSION'
+def final BIGTOP_BOM_VERSIONS = 'BIGTOP_BOM'
 
 def final BASE_DIR = BOM_map['BASE_DIR']
 def final REPO_DIR = "${BOM_map['BASE_DIR']}/bigtop-repos"
@@ -105,21 +105,21 @@ task "bom-json" (description: "List the components of the stack in json format")
     [
       name: [
         project: BOM_map[it + '_NAME'],
-        pkg: BOM_map[it + '_PKG_NAME'],
-        relNotes: BOM_map[it + '_RELNOTES_NAME'],
+        pkg: BOM_map[it + '_PKG'],
+        relNotes: BOM_map[it + '_RELNOTES'],
       ],
       tarball: [
-        destination: BOM_map[it + '_TARBALL_DST'],
-        source: BOM_map[it + '_TARBALL_SRC'],
+        destination: BOM_map[it + '_TARBALL_DESTINATION'],
+        source: BOM_map[it + '_TARBALL_SOURCE'],
       ],
       url: [
-        site: BOM_map[it + '_SITE'],
-        archive: BOM_map[it + '_ARCHIVE'],
+        site: BOM_map[it + '_URL_SITE'],
+        archive: BOM_map[it + '_URL_ARCHIVE'],
       ],
       version: [
-        base: BOM_map[it + '_BASE_VERSION'],
-        pkg: BOM_map[it + '_PKG_VERSION'],
-        release: BOM_map[it + '_RELEASE_VERSION'],
+        base: BOM_map[it + '_VERSION_BASE'],
+        pkg: BOM_map[it + '_VERSION_PKG'],
+        release: BOM_map[it + '_VERSION_RELEASE'],
       ],
       git: [
          repo: BOM_map[it + '_GIT_REPO'],
@@ -129,7 +129,7 @@ task "bom-json" (description: "List the components of the stack in json format")
     ]
   }
   def fullDefinition = [
-    version: BOM_map['BIGTOP_VERSION'],
+    version: BOM_map[BIGTOP_VERSION],
     components: componentObjects
   ]
   def json = JsonOutput.toJson(fullDefinition)
@@ -137,9 +137,9 @@ task "bom-json" (description: "List the components of the stack in json format")
 }
 
 task "all-components" (description: "List the components of the stack") << {
-  println "${project.name} ${BOM_map['BIGTOP_VERSION']} stack includes the following components"
+  println "${project.name} ${BOM_map[BIGTOP_VERSION]} stack includes the following components"
   components.sort().each { comp ->
-    println sprintf ('\t%1$s %2$s', comp.toLowerCase().padRight(20), BOM_map[comp + "_BASE_VERSION"].padLeft(10))
+    println sprintf ('\t%1$s %2$s', comp.toLowerCase().padRight(20), BOM_map[comp + "_VERSION_BASE"].padLeft(15))
   }
 }
 
@@ -148,7 +148,7 @@ def genTasks = { target, variable ->
       description: "Download $target artifacts",
       group: PACKAGES_GROUP) << {
 
-    def final TARBALL_SRC = BOM_map[variable + '_TARBALL_SRC']
+    def final TARBALL_SRC = BOM_map[variable + '_TARBALL_SOURCE']
     def final DOWNLOAD_DST = BOM_map[variable + '_DOWNLOAD_DST']
     def final DOWNLOAD_URL = BOM_map[variable + '_DOWNLOAD_URL']
 
@@ -198,7 +198,7 @@ def genTasks = { target, variable ->
       return
     }
     def final TAR_DIR = BOM_map[variable + '_TAR_DIR']
-    def final TARBALL_SRC = BOM_map[variable + '_TARBALL_SRC'] ?: ""
+    def final TARBALL_SRC = BOM_map[variable + '_TARBALL_SOURCE'] ?: ""
     def final DOWNLOAD_DST = BOM_map[variable + '_DOWNLOAD_DST'] ?: ""
     def final SEED_TAR = BOM_map[variable + '_SEED_TAR']
 
@@ -253,11 +253,11 @@ def genTasks = { target, variable ->
       println "\tNothing to do. Exiting..."
       return
     }
-    def final PKG_NAME = BOM_map[variable + '_PKG_NAME']
+    def final PKG_NAME = BOM_map[variable + '_PKG']
     def final PKG_RELEASE = BOM_map[variable + '_PKG_RELEASE']
-    def final PKG_VERSION = BOM_map[variable + '_PKG_VERSION']
+    def final PKG_VERSION = BOM_map[variable + '_VERSION_PKG']
     def final PKG_OUTPUT_DIR = BOM_map[variable + '_OUTPUT_DIR']
-    def final BASE_VERSION = BOM_map[variable + '_BASE_VERSION']
+    def final BASE_VERSION = BOM_map[variable + '_VERSION_BASE']
     def final SRCDEB = "${PKG_NAME}_$PKG_VERSION-${BIGTOP_BUILD_STAMP}.dsc"
 
     exec {
@@ -302,18 +302,20 @@ def genTasks = { target, variable ->
     }
     def final PKG_BUILD_DIR = BOM_map[variable + '_BUILD_DIR']
     def final NAME = BOM_map[variable + '_NAME']
-    def final PKG_NAME = BOM_map[variable + '_PKG_NAME']
+    def final PKG_NAME = BOM_map[variable + '_PKG']
     def final SEED_TAR = BOM_map[variable + '_SEED_TAR']
-    def final PKG_VERSION = BOM_map[variable + '_PKG_VERSION']
+    def final PKG_VERSION = BOM_map[variable + '_VERSION_PKG']
     def final PKG_OUTPUT_DIR = BOM_map[variable + '_OUTPUT_DIR']
     delete ("$PKG_BUILD_DIR/deb")
     def final DEB_BLD_DIR = "$PKG_BUILD_DIR/deb/$NAME-${PKG_VERSION}"
     def final DEB_PKG_DIR = "$PKG_BUILD_DIR/deb/$PKG_NAME-${PKG_VERSION}-${BIGTOP_BUILD_STAMP}"
     mkdir (DEB_BLD_DIR)
-    copy {
+     println BOM_map[variable + '_TARBALL_DESTINATION'] + " " + "${PKG_NAME}_${PKG_VERSION}.orig.tar.gz"
+
+     copy {
       from SEED_TAR
       into "$PKG_BUILD_DIR/deb/"
-      rename BOM_map[variable + '_TARBALL_DST'], "${PKG_NAME}_${PKG_VERSION}.orig.tar.gz"
+      rename BOM_map[variable + '_TARBALL_DESTINATION'], "${PKG_NAME}_${PKG_VERSION}.orig.tar.gz"
     }
     exec {
       workingDir DEB_BLD_DIR
@@ -331,7 +333,7 @@ def genTasks = { target, variable ->
     }.copy { into "$DEB_BLD_DIR/debian" }
     // Prepeare bom file with all the versions
     def bomWriter = new File("$DEB_BLD_DIR/debian/bigtop.bom").newWriter()
-    BOM_map[BIGTOP_BOM].split(" ").each { bomWriter << "$it\n"}
+    BOM_map[BIGTOP_BOM_VERSIONS].split(" ").each { bomWriter << "$it\n"}
     bomWriter.close()
     // Create changelog
     def changelog = new File("$DEB_BLD_DIR/debian/changelog").newWriter()
@@ -375,10 +377,10 @@ def genTasks = { target, variable ->
     }
     def final PKG_BUILD_DIR = BOM_map[variable + '_BUILD_DIR']
     def final NAME = BOM_map[variable + '_NAME']
-    def final PKG_NAME = BOM_map[variable + '_PKG_NAME']
+    def final PKG_NAME = BOM_map[variable + '_PKG']
     def final PKG_OUTPUT_DIR = BOM_map[variable + '_OUTPUT_DIR']
-    def final PKG_VERSION = BOM_map[variable + '_PKG_VERSION']
-    def final BASE_VERSION = BOM_map[variable + '_BASE_VERSION']
+    def final PKG_VERSION = BOM_map[variable + '_VERSION_PKG']
+    def final BASE_VERSION = BOM_map[variable + '_VERSION_BASE']
     def RELEASE_DIST = "rpmbuild --eval '%{?dist}' 2>/dev/null".execute().text.trim().replaceAll("'",'')
     def SRCRPM="$PKG_OUTPUT_DIR/$PKG_NAME-${PKG_VERSION}-$BIGTOP_BUILD_STAMP${RELEASE_DIST}.src.rpm"
 
@@ -410,12 +412,12 @@ def genTasks = { target, variable ->
       return
     }
     def final NAME = BOM_map[variable + '_NAME']
-    def final PKG_NAME = BOM_map[variable + '_PKG_NAME']
+    def final PKG_NAME = BOM_map[variable + '_PKG']
     def final PKG_NAME_FOR_PKG = BOM_map[variable + '_NAME'].replaceAll("-", "_")
     def final PKG_BUILD_DIR = BOM_map[variable + '_BUILD_DIR']
     def final SEED_TAR = BOM_map[variable + '_SEED_TAR']
-    def final PKG_VERSION = BOM_map[variable + '_PKG_VERSION']
-    def final BASE_VERSION = BOM_map[variable + '_BASE_VERSION']
+    def final PKG_VERSION = BOM_map[variable + '_VERSION_PKG']
+    def final BASE_VERSION = BOM_map[variable + '_VERSION_BASE']
     def final PKG_OUTPUT_DIR = BOM_map[variable + '_OUTPUT_DIR']
     delete ("$PKG_BUILD_DIR/rpm")
     ['INSTALL','SOURCES','BUILD','SRPMS','RPMS'].each { rpmdir ->
@@ -437,7 +439,7 @@ def genTasks = { target, variable ->
     }.copy { into "$PKG_BUILD_DIR/rpm/SOURCES" }
     // Writing bigtop.bom files with all the versions
     def bomWriter = new File("$PKG_BUILD_DIR/rpm/SOURCES/bigtop.bom").newWriter()
-    BOM_map[BIGTOP_BOM].split(" ").each { bomWriter << "$it\n"}
+    BOM_map[BIGTOP_BOM_VERSIONS].split(" ").each { bomWriter << "$it\n"}
     bomWriter.close()
 
     def specFileName = "${PKG_BUILD_DIR}/rpm/SPECS/${NAME}.spec"
@@ -500,30 +502,33 @@ def genTasks = { target, variable ->
     }
   }
   task "$target-version" (description: "Show version of $target component", group: PACKAGES_GROUP) << {
-    println "Base: ${BOM_map[variable + '_BASE_VERSION']}"
+    println "Base: ${BOM_map[variable + '_VERSION_BASE']}"
   }
   task "${target}_vardefines" << {
     BOM_map[variable + '_NAME'] = target
-    if (!BOM_map[variable + '_PKG_NAME']) {
-      BOM_map[variable + '_PKG_NAME'] = BOM_map[variable + '_NAME']
+    if (!BOM_map[variable + '_PKG']) {
+      BOM_map[variable + '_PKG'] = BOM_map[variable + '_NAME']
+    }
+    if (!BOM_map[variable + '_VERSION_PKG']) {
+      BOM_map[variable + '_VERSION_PKG'] = BOM_map[variable + '_VERSION_BASE']
     }
     BOM_map[variable + '_PKG_RELEASE'] = '1'
 
     BOM_map[variable + '_BUILD_DIR'] = BOM_map['BUILD_DIR'] + "/$target"
     BOM_map[variable + '_OUTPUT_DIR'] = BOM_map['OUTPUT_DIR'] + "/$target"
     BOM_map[variable + '_SOURCE_DIR'] = BOM_map['BUILD_DIR'] + "/source"
-    BOM_map[variable + '_TAR_DIR'] = BOM_map['BUILD_DIR'] + "/$target/tar/${target}-${BOM_map[variable + '_BASE_VERSION']}"
-    BOM_map[variable + '_SEED_TAR'] = BOM_map['BUILD_DIR'] + "/$target/tar/" + BOM_map[variable + '_TARBALL_DST']
+    BOM_map[variable + '_TAR_DIR'] = BOM_map['BUILD_DIR'] + "/$target/tar/${target}-${BOM_map[variable + '_VERSION_BASE']}"
+    BOM_map[variable + '_SEED_TAR'] = BOM_map['BUILD_DIR'] + "/$target/tar/" + BOM_map[variable + '_TARBALL_DESTINATION']
 
     BOM_map[variable + '_DOWNLOAD_URL'] =
-        (BOM_map[variable + '_SITE'] != null && BOM_map[variable + '_TARBALL_SRC'] != null) ?
-            BOM_map[variable + '_SITE'] + '/' + BOM_map[variable + '_TARBALL_SRC'] : null
-    BOM_map[variable + '_DOWNLOAD_DST'] = (BOM_map[variable + '_TARBALL_SRC'] != null) ?
-        DL_DIR + '/' + BOM_map[variable + '_TARBALL_SRC'] : null
+        (BOM_map[variable + '_URL_SITE'] != null && BOM_map[variable + '_TARBALL_SOURCE'] != null) ?
+            BOM_map[variable + '_URL_SITE'] + '/' + BOM_map[variable + '_TARBALL_SOURCE'] : null
+    BOM_map[variable + '_DOWNLOAD_DST'] = (BOM_map[variable + '_TARBALL_SOURCE'] != null) ?
+        DL_DIR + '/' + BOM_map[variable + '_TARBALL_SOURCE'] : null
 
     // test that the download url will return http 200.  If it does not, use the ARCHIVE url instead of the MIRROR SITE url
     if (!ifExists(BOM_map[variable + '_DOWNLOAD_URL'])) {
-      BOM_map[variable + '_DOWNLOAD_URL'] = BOM_map[variable + '_ARCHIVE'] + '/' + BOM_map[variable + '_TARBALL_SRC']
+      BOM_map[variable + '_DOWNLOAD_URL'] = BOM_map[variable + '_URL_ARCHIVE'] + '/' + BOM_map[variable + '_TARBALL_SOURCE']
     }
 
     BOM_map[variable + '_TARGET_DL']  = BOM_map[variable + '_BUILD_DIR'] + '/.download'
@@ -550,7 +555,7 @@ def genTasks = { target, variable ->
     println "  Then unpack into ${BOM_map[variable + '_SOURCE_DIR']}"
     println "  And create a seed tarball ${BOM_map[variable + '_SEED_TAR']}"
 
-    println "Version: " + BOM_map[variable + '_BASE_VERSION']
+    println "Version: " + BOM_map[variable + '_VERSION_BASE']
     //TODO more about stamping
   }
   task "$target-relnotes" (description: "Preparing release notes for $target. No yet implemented!!!", group: PACKAGES_GROUP)<< {
@@ -567,32 +572,35 @@ def genTasks = { target, variable ->
 }
 
 def readBOM = {
-
-  def buildUtils = new org.apache.bigtop.BuildUtils()
-  def bomfile = new File(BOM)
-  def envs = []
-
-  bomfile.eachLine {
-    if (!it.startsWith("#") && !it.isEmpty()) {
-      if (it.startsWith("\$(eval")) {
-        def pattern = ~/.*call PACKAGE,(\w+[-\w+]*),(\w+)/
-        def m = it =~ pattern
-        assert m.size() == 1
-        def target = m[0][1]
-        def variable = m[0][2]
-        genTasks(target, variable)
-        targets.add(target)
-        // Store the component name in the list
-        // TODO - we might not need them components anymore: version are calculated differently now
-        components.add(variable)
-        return
-      }
-      envs = it?.split("=")
-      def value = buildUtils.evaluateBOM(BOM_map, envs[1])
-      value = System.getProperty(envs[0]) ?: value
-      BOM_map.put(envs[0], value)
+  config = new ConfigSlurper().parse(new URL("file:$BOM"))
+  doValidateBOM(config)
+  BOM_map[BIGTOP_VERSION] = config.bigtop.version
+  config.bigtop.apache.each { name, value ->
+      BOM_map[name] = value
+  }
+  config.bigtop.stack.each { name, comp ->
+    comp.toProperties(name).each {k, v ->
+      BOM_map[(k.replaceAll("\\.", "_").toUpperCase())] = v
     }
   }
+  config.bigtop.components.each { label, comp ->
+    // while closure name in the component's config could include '-'; the prefix in the BOM_map shouldn't
+    def prefix = comp.name.replaceAll("\\-", "_").toUpperCase()
+//  TODO?: To avoid changing every bit of the builds logic, let's stick to the old naming format
+    comp.toProperties(prefix).each {comp_config_key, comp_config_value ->
+      BOM_map[(comp_config_key.replaceAll("\\.", "_").toUpperCase())] = comp_config_value
+    }
+    genTasks(comp.name, prefix)
+    components.add(prefix)
+  }
+}
+
+// Let's enforce some of the configuration requirements
+private void doValidateBOM(config) {
+  assert config.bigtop.version
+  assert config.bigtop.stack.jdk
+  assert config.bigtop.stack.scala
+  assert config.bigtop.apache.size() != 0
 }
 
 // We need to make sure that all dynamic tasks are available for invocation
@@ -602,11 +610,12 @@ project.afterEvaluate {
   // Versions need to be preserved for more than just component:
   //  - there are JDK version requirement
   //  - possibly more in the future
-  BOM_map.keySet().findAll { it ==~ /.*_BASE_VERSION/ }.each { base_version ->
-    bomVersions += "${base_version.replaceAll('_BASE', '')}=${BOM_map[base_version]} "
+  BOM_map.keySet().findAll { it ==~ /.*VERSION_BASE/ }.each { version_base ->
+    bomVersions += "${version_base.replaceAll('_BASE', '')}=${BOM_map[version_base]} "
   }
-  BOM_map[BIGTOP_BOM] = bomVersions
-  if (System.getProperty(VERBOSE))println "BIGTOP_BOM:\n${BOM_map[BIGTOP_BOM]}"
+  BOM_map[BIGTOP_BOM_VERSIONS] = bomVersions
+  if (System.getProperty(VERBOSE))println "BIGTOP_BOM_VERSIONS:\n${BOM_map[BIGTOP_BOM_VERSIONS]}"
+  if (System.getProperty(VERBOSE))println "Full content:\n${BOM_map}"
   // Putting all targets of different types into one common target
   task "srpm" (dependsOn: tasks.findAll { alltask -> alltask.name.endsWith("-srpm")}*.name,
       description: "Build all SRPM packages for the stack components",