From 8e12390fc8d9b198dd4b68ca20c0108e5d60e1a5 Mon Sep 17 00:00:00 2001 From: Dominyk Tiller <dominyktiller@gmail.com> Date: Sun, 8 Feb 2015 06:39:13 +0000 Subject: [PATCH] Update Example Formula documentation. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit I feel like we鈥檙e probably fighting a losing battle here, but here鈥檚 a bundle more updates to the example formula to cover some ground not already covered. Closes Homebrew/homebrew#36644. Signed-off-by: Mike McQuaid <mike@mikemcquaid.com> --- Library/Contributions/example-formula.rb | 66 +++++++++++++++++++++--- share/doc/homebrew/Formula-Cookbook.md | 2 +- 2 files changed, 59 insertions(+), 9 deletions(-) diff --git a/Library/Contributions/example-formula.rb b/Library/Contributions/example-formula.rb index b33689b41a..e48199f39a 100644 --- a/Library/Contributions/example-formula.rb +++ b/Library/Contributions/example-formula.rb @@ -30,8 +30,8 @@ class ExampleFormula < Formula version "1.2-final" # For integrity and security, we verify the hash (`openssl dgst -sha1 <FILE>`) - # You may also use sha256 if the software uses sha256 on their homepage. - # Leave it empty at first and `brew install` will tell you the expected. + # You may also use sha256 if the software uses sha256 on their homepage. Do not use md5. + # Either generate the sha locally or leave it empty & `brew install` will tell you the expected. sha1 "cafebabe78901234567890123456789012345678" # Stable-only dependencies should be nested inside a `stable` block rather than @@ -48,6 +48,7 @@ class ExampleFormula < Formula # Optionally, specify a repository to be used. Brew then generates a # `--HEAD` option. Remember to also test it. # The download strategies (:using =>) are the same as for `url`. + # "master" is the default branch and doesn't need stating with a :branch conditional head "https://we.prefer.https.over.git.example.com/.git" head "https://example.com/.git", :branch => "name_of_branch", :revision => "abc123" head "https://hg.is.awesome.but.git.has.won.example.com/", :using => :hg # If autodetect fails. @@ -89,6 +90,8 @@ class ExampleFormula < Formula # Bottles are pre-built and added by the Homebrew maintainers for you. # If you maintain your own repository, you can add your own bottle links. # https://github.com/Homebrew/homebrew/blob/master/share/doc/homebrew/Bottles.md + # You can ignore this block entirely if submitting to Homebrew/Homebrew, It'll be + # handled for you by the Brew Test Bot. bottle do root_url "http://mikemcquaid.com" # Optional root to calculate bottle URLs prefix "/opt/homebrew" # Optional HOMEBREW_PREFIX in which the bottles were built. @@ -154,7 +157,7 @@ class ExampleFormula < Formula depends_on :arch => :x86_64 # If this formula only build on intel x86 64bit. depends_on :arch => :ppc # Only builds on PowerPC? depends_on :ld64 # Sometimes ld fails on `MacOS.version < :leopard`. Then use this. - depends_on :x11 # X11/XQuartz components. + depends_on :x11 # X11/XQuartz components. Non-optional X11 deps should go in Homebrew/Homebrew-x11 depends_on :osxfuse # Permits the use of the upstream signed binary or our source package. depends_on :tuntap # Does the same thing as above. This is vital for Yosemite and above. depends_on :mysql => :recommended @@ -166,6 +169,8 @@ class ExampleFormula < Formula # If any Python >= 2.7 < 3.x is okay (either from OS X or brewed): depends_on :python + # to depend on Python >= 2.7 but use system Python where possible + depends_on :python if MacOS.version <= :snow_leopard # Python 3.x if the `--with-python3` is given to `brew install example` depends_on :python3 => :optional @@ -188,7 +193,7 @@ class ExampleFormula < Formula end fails_with :clang do - build 425 + build 600 cause "multiple configure and compile errors" end @@ -271,6 +276,19 @@ class ExampleFormula < Formula args << "--some-new-stuff" if build.head? # if head is used instead of url. args << "--universal-binary" if build.universal? + # If there are multiple conditional arguments use a block instead of lines. + if build.head? + args << "--i-want-pizza" + args << "--and-a-cold-beer" if build.with? "cold-beer" + end + + # If a formula presents a user with a choice, but the choice must be fulfilled: + if build.with? "example2" + args << "--with-example2" + else + args << "--with-example1" + end + # The `build.with?` and `build.without?` are smart enough to do the # right thing with respect to defaults defined via `:optional` and # `:recommended` dependencies. @@ -282,12 +300,12 @@ class ExampleFormula < Formula # break if they remember that exact path. In contrast to that, the # `$(brew --prefix)/opt/formula` is the same path for all future # versions of the formula! - args << "--with-readline=#{Formula["readline"].opt_prefix}/lib" if build.with? "readline" + args << "--with-readline=#{Formula["readline"].opt_prefix}" if build.with? "readline" # Most software still uses `configure` and `make`. # Check with `./configure --help` what our options are. system "./configure", "--disable-debug", "--disable-dependency-tracking", - "--prefix=#{prefix}", + "--disable-silent-rules", "--prefix=#{prefix}", *args # our custom arg list (needs `*` to unpack) # If your formula's build system is not thread safe: @@ -305,7 +323,30 @@ class ExampleFormula < Formula # Overwriting any env var: ENV["LDFLAGS"] = "--tag CC" - + # Is the formula struggling to find the pkgconfig file? Point it to it. + # This is done automatically for `keg_only` formulae. + ENV.prepend_path "PKG_CONFIG_PATH", "#{Formula["glib"].opt_lib}/pkgconfig" + + # Need to install into the bin but the makefile doesn't mkdir -p prefix/bin? + bin.mkpath + # A custom directory? + mkdir_p share/"example" + # And then move something from the buildpath to that directory? + mv "ducks.txt", share/"example/ducks.txt" + # No "make", "install" available? + bin.install "binary1" + include.install "example.h" + lib.install "example.dylib" + man1.install "example.1" + man3.install "example.3" + # All that README/LICENSE/NOTES/CHANGELOG stuff? Use "metafiles" + prefix.install_metafiles + # Maybe you'd like to remove a broken or unnecessary element? + # Empty directories will be removed by Homebrew automatically post-install! + rm "bin/example" + rm_rf "share/pointless" + + # If there is a "make", "install" available, please use it! system "make", "install" # We are in a temporary directory and don't have to care about cleanup. @@ -423,11 +464,20 @@ class ExampleFormula < Formula <plist version="1.0"> <dict> <key>Label</key> - <string>#{plist_name}</string> + <string>#{plist_name}</string> + <key>ProgramArguments</key> + <array> + <string>#{bin}/example</string> + <string>--do-this</string> + </array> <key>RunAtLoad</key> <true/> <key>KeepAlive</key> <true/> + <key>StandardErrorPath</key> + <string>/dev/null</string> + <key>StandardOutPath</key> + <string>/dev/null</string> </plist> EOS end diff --git a/share/doc/homebrew/Formula-Cookbook.md b/share/doc/homebrew/Formula-Cookbook.md index f792cb8268..3aa3fe6671 100644 --- a/share/doc/homebrew/Formula-Cookbook.md +++ b/share/doc/homebrew/Formula-Cookbook.md @@ -81,7 +81,7 @@ Formulae aren鈥檛 that complicated. [etl](https://github.com/Homebrew/homebrew/b And then [Git](https://github.com/Homebrew/homebrew/tree/master/Library/Formula/git.rb) and [flac](https://github.com/Homebrew/homebrew/tree/master/Library/Formula/flac.rb) show more advanced functionality. -A more complete [cheat-sheet](https://github.com/Homebrew/homebrew/blob/master/Library/Contributions/example-formula.rb) shows almost all the stuff you can use in a Formula. +A more complete example-formula [cheat-sheet](https://github.com/Homebrew/homebrew/blob/master/Library/Contributions/example-formula.rb) shows almost all the stuff you can use in a Formula. ## Grab the URL -- GitLab