minitage.recipe.common 1.90
zc.buildout recipes to compile and install software or python packages and generate scripts or configuration files  sponsored by Makina Corpus.
License: BSD
Keywords: development buildout recipe

******************************************************************************
Recipe for compiling and installing software with or without minitage
******************************************************************************

.. contents::

=======================
Introduction
=======================


``minitage.core.common`` is an abstract recipe extendended by much of
minitage.recipe.*

That's why many options of the descendant recipes are from there.


======================================
Makina Corpus sponsored software
======================================
|makinacom|_

* `Planet Makina Corpus <http://www.makina-corpus.org>`_
* `Contact us <mailto:python@makina-corpus.org>`_

  .. |makinacom| image:: http://depot.makina-corpus.org/public/logo.gif
  .. _makinacom:  http://www.makina-corpus.com







====================================
Options shared by all the recipes
====================================

Notes
--------

    - All recipes inherit all these options, depending which you are using, those options will have an incidence on the build.
    - Useless to say that the recipes code is not difficult, and as a deployer, its your job to have a look at the code to avoid surprises.
    - If you are inside a minitage all recipes will look on your minibuild dependencies section to get things into the environment at execution time. Like feeding CFLAGS, pkgconfig, ldflags and so on.
    - All recipes look for a minitage section in your buildout file and take dependencies and eggs as minitage projects to get into the environnment too::

        ...
        [minitage]
        dependencies = postgresql-8.3
        eggs = py-libxslt-1.1

Options
-------------
    * urls
      A set of urls to checkout in the form


        - The last part or the urls will be the name of your checkout dir unless you have precised the name in "destination directory name"
        - If you don't specify any scm_type, it will be static unless you specify it in options (see scm)
        - If you don't specify any revision, it will be not set unless you specify it in options (see scm_revision)
        - The form is a New line separated list of urls to fetcha in the following form (*the | is part of the line ;)*)::

                url to checkout | fetch_type | revision | destination directory name | fetcher_args

      Here are valid inputs ::

            svn://toto | svn | 666 | mydirectoryname | --ignore-externals
            svn://toto | svn | 666 | mydirectoryname
            svn://toto | svn | 666
            svn://toto | svn | | | --ignore-externals
            svn://toto | svn
            file://toto
            http://tata/toto.tgz

      Where::

            fetch_type ::= bzr | hg | git | static (for ftp://, file://, http:// and local files) | svn
            
    UNAME is a platform identifier from:
    
        - linux
        - darwin
        - freebsd
        - freebsd(6,7,8)
        - snowleopard
        - leopard
        - cygwin  
    
    - executable
        python executable to use
    - url(-UNAME) (backward cmpatibility)
        url to get the source from, in the previous urls syntax
    - scm
        default scm to use (a valid minitage fetch factory to use (static, git, svn, bzr, hg).)
        defaults to static.
    - scm_revision
            default revision to checkout if scm is not static
    - md5sum
        md5sum of the checkouted source [see cmmi recipe for documentation]
    - patch-binary
        path to the patch program
    - patch-options
        options to feed the patch program with [see cmmi recipe for documentation]
    - patches
        patches to apply [see cmmi recipe for documentation]
    - patch
        A patch to apply, compatibility with zc.recipe.cmmi
    - patches-UNAME / UNAME-patches
        - patches to apply to a system or a favor of this system (linux, darwin, freebsd, freebsd, freebsd(6,7,8), snowleopard, leopard, cygwin)
    - location
        where to put the build result. (default to parts/PART_NAME)
    - cc(-UNAME)
        CC compiler to use (set env['CC'], default not set
    - cpp(-UNAME)
        CPP compiler to use (set env['CPP'], default not set
    - cplusplus(-UNAME)
        c++ compiler to use (set env['C++'], default not set
    - includes(-UNAME)
        directories to add to the include search (compatibility)
    - ldflags(-UNAME)
        LDFLAGS to set at compilation time
    - cflags(-UNAME)
        CFLAGS to give to the compiler
    - includes-dirs(-UNAME)
        Directories to add to the include paths  [see cmmi recipe for documentation]
    - libraries(-UNAME)
        libraries to give to the linker eg: libiconv
    - library-dirs(-UNAME)
        Directories to add to the linker, and they will be added as -rpath too. [see cmmi recipe for documentation]
    - rpath(-UNAME)
        Directories to add as -rpath.
    - skip-flags: do not set CFLAGS/LDFLAGS/LD_RUN_PATH at all.
    - environment(-UNAME)
        a part name where we can get key/values to add to the build environment [see cmmi recipe for documentation]
    - path(-UNAME)
        line separated list of paths to append to $PATH during build
    - pkgconfigpath(-UNAME)
        line separated list of paths to append to $PKGCONFIGPATH during build [see cmmi recipe for documentation]
    - pythonpath(-UNAME)
        line separated list of paths to append to $PYTHONPATH during build

    - osx-target: -mmacosx-version-min setting, wanting users will know what that means ;)

        minitage put -mmacosx-version-min in the env. if you dont set this to 'false'
        default value on leopard is 10.5.0 and on snowleopard 10.6.0

    - force-osx-target

        force MACOSX_DEPLOYMENT_TARGET to value or default if 'true' (snowleopard (10.5) /leopard(10.6))

Options incidences
----------------------

 - `minitage.recipe:cmmi`
    executable is not taken in account.
 - `minitage.recipe:fetch`
    only the download related options are used.
 - `minitage.recipe:eggs`, `minitage.recipe:wsgi`, `minitage.recipe:scripts`, `minitage.recipe:printer`
    the configure-*, and make-*, and extra_options are not used

Patches
-----------

    - They can be either a file or an url.
    - You have means to specify options to the patch program, like -pXXX, abuses of it.



===============================================
minitage.recipe API tests
===============================================

The divide url function
------------------------------

    - If you dont precise the directory, its the basename of the url::

        >>> divide_url ('http://foo/bar|svn|666||--ignore-externals')
        ('http://foo/bar', 'svn', '666', 'http.foo.bar', '--ignore-externals')

    - Static as a default::

        >>> divide_url ('')
        ('', 'static', '', '', '')

    - arguements can be optionnal::

        >>> divide_url ('http://foo/bar')
        ('http://foo/bar', 'static', '', 'http.foo.bar', '')



=======================
CHANGELOG
=======================

1.90 (2013-06-26)
-----------------

- export back to buildout executable option


1.89 (2013-06-22)
-----------------

- osx targets fixes, handle default new mountainlion PATH mods


1.88 (2013-06-02)
-----------------

- specific uname envs


1.87 (2013-04-14)
-----------------

- better download handling


1.86 (2013-03-28)
-----------------

- better cache filename guessing, again


1.85 (2013-03-24)
-----------------

- better cache filename guessing


1.84 (2013-02-13)
-----------------

- buildout2 compat


1.83 (2012-09-12)
-----------------

- force no upgrade on minitage itself


1.82 (2012-08-31)
-----------------

- syntax error bugfix


1.81 (2012-03-24)
-----------------

- Add part/site-packages-pyver to pythonpath


1.80 (2012-01-24)
-----------------

- darwin fix for LDFLAGS


1.79 (2011-11-28)
-----------------

- add lion to macosx flavors


1.78 (2011-03-31)
-----------------------
    
    - python 2.4 retrocompatibities fixes
    - add os subrelease mecanism (cygwin2)
    - snowleopard bugfix (match kernel version startswith 10)
    - add an helper to write env files
    - fix for mercurial checkouts
    - add many per/os options
    - win32 fix
    - API fix
    - indentation fix
    - make things shut up
    - add patch flavors for darwin, now you have:

        * darwin : all macs
        * leopard, snowleopard for a specific one

    - Add extra-paths to PYTHONPATH while setting PYTHONPATH
    - Add  part/site-pakckages-VER in PYTHONPATH if exists

1.42
------

    - API compatibility for cmmi


1.41
-----

    - splitting cmmi stuff

-> 1.40
---------

    - remove deprecationwarning

1.36
------

    - re namespacing

1.35
-----

    - split all recipes into singles ones.

.34
---

all:

    - fix rst doc

    - add ``ldflags`` and ``ldflags`` options

minitage.recipe.cmmi:

    - ``install-in-place`` option added and pivot on make install slightly
      modified
    - ``skip-flags`` option added
    - ``prefix`` option added

minitage.recipe.fetch:

    - ``unpack`` option added
    - md5sum un revision for static fetcher check added

minitage.recipe.printer:

    - remove fake eggs and develop eggs from fixed versions.

-> 1.20
---------

Minitage.recipe.egg:

    - better errors handling
    - In particular for eggs and url, now md5 urls are preferred.
    - Also when we can't download a distribution from somewhere, we try to
      fallback to other distributions which achieve the desired requirement
    - In the same way, try to compile eggs from any other sdist fullfilling the
      requirement if an error occurs on the first found.

Minitage.recipe.cmmi:

    - new patch selection for freebsd:
        freebsd-patches

    - Fix some double spaces left in compilation flags which broke some exotic
      system builders.

1.14
-----

    - add enrionment file generation to the scripts recipe

1.13
---------

    - cmmi buggy update methods

1.11 - 1.12
----------------

    - rescan egg direcrectories at install time because there may be new
      develop eggs or eggs installed by buildout extensions (mr.developer)
    - fix for interaction with buildout.minitagificator and
      zc.buildout.easy_install..*script


1.-1.10
---------

    - bugfix with cache and static distributions.

1.8
-------

    - make patches go in a personnal directory with some md5 mecanism to redownload them.

1.4->1.7
----------

    - x64 fixes
    - bugfix in static distribution install when you have patches to apply.

1.3
----

    - release uncomitted unittests updates

1.2
-------

    - make it compatible with zc.buildout 1.0

1.1
-----

    - md5 bug

1.0
------

    * first stable release.
    * All recipe are documented and well tested.
    * buildout.minitagificator is completed.
    * stabilized and synced with other minitage components
    * minitage.recipe:eggs has been drasticly improved in term of algorythms and speed.

0.33->0.34
-----------

    - Fix python executable computation

0.32
-----

    - Documentation and tests release

0.29
----

    - Fix bug in recipes initialization because of buildout auto-ordering


0.28
----

    - Add another hook to the cmmi recipe: post-download

0.27
-----

    - Fix an annoying bug when you are using virtualenv and a classical
      python as executable in your recipe, it may occur that sometimes, the
      virtualenv site-packages is appended to PYTHONPATH. As a fix, we now
      filter all python core lib directories and site packages that are not
      relevant to the python used by the recipe.

0.26
-----

    - Introduce the minitage.recipe:wsgi recipe wich wraps a paste wsgi application
      in a script eatable by mod_wsgi

0.25
------

    - stop lowering project_name


0.23->0.24
-----------

    - Fix small bugs in printer

0.22
-----

    - Introduce a new recipe : minitage.recipe:printer which prints/dumps to a
      file all versions eggs needed to achieve requirements.

0.21
-----

    - Fix bug in compilation  directory guessing

0.20
------

    - Fix bug in distribution reloading
    - Better handling of pkg_resources's working set

0.19
--------

    - add a post build hook

0.18
-------

    - Change installation order

0.16
-------

    - Fix index and find links options

0.14 -> 0.15
-------------
    - logging output improved
    - newest mode handling

0.13
-----
- fix static dist install



0.12
------

    - bugfix for zipped eggs

0.11
-----

    - import bugfix for minitagificator

0.10
-----------

    - Change some logging options
    - follow allow host option from buildout for eggs installation

0.9
-----------

    - Do not rely anymore on zc.buildout ez for script generation

0.7 -> 0.8
-----------

    - egg and scripts recipes were rewritten a lot to adapt their api to
      zc.recipe.egg
    - Common to all recipes: all arguements are now identicak to zc.recipe.cmmi
      or zc.recipe.egg
    - Dependencies resolver has been improved a lot
    - For static distribution, you can know speicify multiple urls with 'urls'


0.6
------

    - fix bug in path generation in minitage.recipe:scripts

0.2 -> 0.5
-------------

    - add make-options for make option in minitage.recipe.cmmi
    - multiple bugfixes
    - make things append in subprocess for environment conversation
    - add initiaiization code for generated python interpreter in
      minitage.recipe:scripts

0.1
------
    - add fetch recipe

0.0.13
-------
 - fix zip safe flag

0.0.11
-------
 - Include eggs dependencies by default
 - Modulate the script recipe to append in the PYTHONPATH all egg dependencies
   found into the local eggs cache.

0.0.10
-------
 - Add pyc regeneration feature stolen from zc.buildout

0.0.9
-------
 - minor fix for run without minitage
 - fix for long path/compilation flags

0.0.8
-------
 - minor fix for scm check outs

0.0.7
-------
 - add C compiler cflags/ldflags/makeopts customistation options

0.0.6
-------
 - Change the eggs installation way to do, now using easy_install everywhere
   Also include a buildout option to allow to include eggs dependencies (ez-dependencies-true)
 - Set the __doc__ variable in scripts to fix some scripts like bzr.

0.0.3
-------
 - fix scm choice when there are eggs and url in the same part

0.0.2
------
 - bugfix version
 - fix linking problem

0.0.1
------
 - Initial version