From cc09bb14c16c8e4f6b360f30074522c2ee25167b Mon Sep 17 00:00:00 2001
From: Tom Schoonjans
Date: Mon, 19 Dec 2016 21:51:57 +0100
Subject: brew create: add meson support
meson is quickly gaining popularity as build system, in combination with
ninja. Several Gnome projects for example are currently transitioning
from autotools to meson, mostly because it allows for Visual Studio
builds, which is impossible to accomplish with autotools.
In order to facilitate generating meson based Formulas, I added support
for meson to brew-create.
---
 Library/Homebrew/dev-cmd/create.rb | 17 ++++++++++++++++-
 docs/brew.1.html                   |  5 +++--
 manpages/brew-cask.1               |  2 +-
 manpages/brew.1                    |  6 +++---
 4 files changed, 23 insertions(+), 7 deletions(-)
diff --git a/Library/Homebrew/dev-cmd/create.rb b/Library/Homebrew/dev-cmd/create.rb
index 11544dbef..5d46e73b9 100644
--- a/Library/Homebrew/dev-cmd/create.rb
+++ b/Library/Homebrew/dev-cmd/create.rb
@@ -1,4 +1,4 @@
-#:  * `create`  [`--autotools`|`--cmake`] [`--no-fetch`] [`--set-name` ] [`--set-version` ] [`--tap` `/`]:
+#:  * `create`  [`--autotools`|`--cmake`|`--meson`] [`--no-fetch`] [`--set-name` ] [`--set-version` ] [`--tap` `/`]:
 #:    Generate a formula for the downloadable file at  and open it in the editor.
 #:    Homebrew will attempt to automatically derive the formula name
 #:    and version, but if it fails, you'll have to make your own template. The `wget`
@@ -8,6 +8,7 @@
 #:
 #:    If `--autotools` is passed, create a basic template for an Autotools-style build.
 #:    If `--cmake` is passed, create a basic template for a CMake-style build.
+#:    If `--meson` is passed, create a basic template for a Meson-style build.
 #:
 #:    If `--no-fetch` is passed, Homebrew will not download  to the cache and
 #:    will thus not add the SHA256 to the formula for you.
@@ -59,6 +60,8 @@ module Homebrew
       :cmake
     elsif ARGV.include? "--autotools"
       :autotools
+    elsif ARGV.include? "--meson"
+      :meson
     end
 
     if fc.name.nil? || fc.name.strip.empty?
@@ -175,6 +178,9 @@ class FormulaCreator
 
     <% if mode == :cmake %>
       depends_on "cmake" => :build
+    <% elsif mode == :meson %>
+      depends_on "meson" => :build
+      depends_on "ninja" => :build
     <% elsif mode.nil? %>
       # depends_on "cmake" => :build
     <% end %>
@@ -191,6 +197,13 @@ class FormulaCreator
                               "--disable-dependency-tracking",
                               "--disable-silent-rules",
                               "--prefix=\#{prefix}"
+    <% elsif mode == :meson %>
+        mkdir "build" do
+          system "meson", "--prefix=\#{prefix}", ".."
+          system "ninja"
+          system "ninja", "test"
+          system "ninja", "install"
+        end
     <% else %>
         # Remove unrecognized options if warned by configure
         system "./configure", "--disable-debug",
@@ -199,7 +212,9 @@ class FormulaCreator
                               "--prefix=\#{prefix}"
         # system "cmake", ".", *std_cmake_args
     <% end %>
+    <% if mode != :meson %>
         system "make", "install" # if this fails, try separate make/make install steps
+    <% end %>
       end
 
       test do
diff --git a/docs/brew.1.html b/docs/brew.1.html
index 7b7251faf..8a24e499b 100644
--- a/docs/brew.1.html
+++ b/docs/brew.1.html
@@ -504,7 +504,7 @@ message.
 url-and-sha256 style specification into a tag-and-revision style
 specification, nor vice versa. It must use whichever style specification
 the preexisting formula already uses.
-create URL [--autotools|--cmake] [--no-fetch] [--set-name name] [--set-version version] [--tap user/repo]Generate a formula for the downloadable file at URL and open it in the editor.
+
create URL [--autotools|--cmake|--meson] [--no-fetch] [--set-name name] [--set-version version] [--tap user/repo]Generate a formula for the downloadable file at URL and open it in the editor.
 Homebrew will attempt to automatically derive the formula name
 and version, but if it fails, you'll have to make your own template. The wget
 formula serves as a simple example. For the complete API have a look at
@@ -512,7 +512,8 @@ formula serves as a simple example. For the complete API have a look at
 http://www.rubydoc.info/github/Homebrew/brew/master/Formula
 
 If --autotools is passed, create a basic template for an Autotools-style build.
-If --cmake is passed, create a basic template for a CMake-style build.
+If --cmake is passed, create a basic template for a CMake-style build.
+If --meson is passed, create a basic template for a Meson-style build.
 
 If --no-fetch is passed, Homebrew will not download URL to the cache and
 will thus not add the SHA256 to the formula for you.
diff --git a/manpages/brew-cask.1 b/manpages/brew-cask.1
index a14c7521a..af5335f79 100644
--- a/manpages/brew-cask.1
+++ b/manpages/brew-cask.1
@@ -1,7 +1,7 @@
 .\" generated with Ronn/v0.7.3
 .\" http://github.com/rtomayko/ronn/tree/0.7.3
 .
-.TH "BREW\-CASK" "1" "November 2016" "Homebrew" "brew-cask"
+.TH "BREW\-CASK" "1" "December 2016" "Homebrew" "brew-cask"
 .
 .SH "NAME"
 \fBbrew\-cask\fR \- a friendly binary installer for macOS
diff --git a/manpages/brew.1 b/manpages/brew.1
index f51468a7f..c25f73af9 100644
--- a/manpages/brew.1
+++ b/manpages/brew.1
@@ -1,7 +1,7 @@
 .\" generated with Ronn/v0.7.3
 .\" http://github.com/rtomayko/ronn/tree/0.7.3
 .
-.TH "BREW" "1" "November 2016" "Homebrew" "brew"
+.TH "BREW" "1" "December 2016" "Homebrew" "brew"
 .
 .SH "NAME"
 \fBbrew\fR \- The missing package manager for macOS
@@ -695,14 +695,14 @@ If \fB\-\-message=\fR\fImessage\fR is passed, append \fImessage\fR to the defaul
 Note that this command cannot be used to transition a formula from a url\-and\-sha256 style specification into a tag\-and\-revision style specification, nor vice versa\. It must use whichever style specification the preexisting formula already uses\.
 .
 .TP
-\fBcreate\fR \fIURL\fR [\fB\-\-autotools\fR|\fB\-\-cmake\fR] [\fB\-\-no\-fetch\fR] [\fB\-\-set\-name\fR \fIname\fR] [\fB\-\-set\-version\fR \fIversion\fR] [\fB\-\-tap\fR \fIuser\fR\fB/\fR\fIrepo\fR]
+\fBcreate\fR \fIURL\fR [\fB\-\-autotools\fR|\fB\-\-cmake\fR|\fB\-\-meson\fR] [\fB\-\-no\-fetch\fR] [\fB\-\-set\-name\fR \fIname\fR] [\fB\-\-set\-version\fR \fIversion\fR] [\fB\-\-tap\fR \fIuser\fR\fB/\fR\fIrepo\fR]
 Generate a formula for the downloadable file at \fIURL\fR and open it in the editor\. Homebrew will attempt to automatically derive the formula name and version, but if it fails, you\'ll have to make your own template\. The \fBwget\fR formula serves as a simple example\. For the complete API have a look at
 .
 .IP
 \fIhttp://www\.rubydoc\.info/github/Homebrew/brew/master/Formula\fR
 .
 .IP
-If \fB\-\-autotools\fR is passed, create a basic template for an Autotools\-style build\. If \fB\-\-cmake\fR is passed, create a basic template for a CMake\-style build\.
+If \fB\-\-autotools\fR is passed, create a basic template for an Autotools\-style build\. If \fB\-\-cmake\fR is passed, create a basic template for a CMake\-style build\. If \fB\-\-meson\fR is passed, create a basic template for a Meson\-style build\.
 .
 .IP
 If \fB\-\-no\-fetch\fR is passed, Homebrew will not download \fIURL\fR to the cache and will thus not add the SHA256 to the formula for you\.
-- 
cgit v1.2.3