This is a RFC for new packaging system for "sage-the-distribution". I've 
already talked about this with a few of you at the last sage days, but 
finally it managed to do something about it. The goal is to be:

* Git-aware: use SHA1 hashes instead of timestamps for dependency 
calculations
* Unified machine-readable package configuration using YAML
* Dependency handling also for optional packages
* Distinction between different types of dependencies: build time, runtime 
hard/soft, testing.
* Modular, allowing for easy experimentation with per-package backends
* written in pure Python without any dependencies
* doctested for Python 2.6, 2.7, 3.3, and 3.4.

Having all package configuration data accessible in machine-readable form 
is IMHO the key to managing complexity. There are various possibilities for 
the file format, but in the end I think YAML is the best choice. It 
integrates very well with Python, is easy to read/write for humans, and if 
things go wrong the parser can pin-point the error very well. Downside is 
that it is not in the Python standard library, but then I don't think we 
should that let us dictate the file format. We'll just include the 
Python-only part of PyYAML as a fallback if the OS Python does not have it. 

The entire package configuration will be in a file 
SAGE_ROOT/build/pkgs/<name>/package.yaml, for example
----------------------------------------
name:
    matplotlib

category:
    standard

source:
    version:  
        1.3.1
    tarball:
        name:     matplotlib-{source.version}.tar.gz
        sha1:     f340378c43c4c3f6219ef9fd84af4ebbe18f8feb

builder:
    type:            SpkgInstallScript
    install_script:  spkg-install

depends:
    build:
        - pkgconf
        - setuptools
    hard:
        - python
        - numpy
        - freetype
        - libpng
        - gdmodule
        - dateutil
        - pyparsing
----------------------------------------

I've been working on an implementation, which you can find at 
http://trac.sagemath.org/ticket/16483. It is not feature-complete, but can 
already build the standard packages in dependency order. 


The package manager lives in SAGE_ROOT/build/manager. Eventually, all 
build-related sage command line switches should just call it:

$ ./build/manager/sage-pkg help
usage: sage-pkg [-h] [--config CONFIG] [--log LOG]
                
                
{info,shell,list,pkg-upgrade-v1,help,download,unpack,prepare,configure,compile,check,install,build,get}
                ...

The Sage Package Manager

positional arguments:
  
{info,shell,list,pkg-upgrade-v1,help,download,unpack,prepare,configure,compile,check,install,build,get}
    info                Print information about package
    shell               IPython shell
    list                List all packages
    pkg-upgrade-v1      Upgrade package descriptions
    help                Get help
    download            Build package up to the "download" step
    unpack              Build package up to the "unpack" step
    prepare             Build package up to the "prepare" step
    configure           Build package up to the "configure" step
    compile             Build package up to the "compile" step
    check               Build package up to the "check" step
    install             Build package and install
    build               Build everything
    get                 Download tarball/spkg/file

optional arguments:
  -h, --help            show this help message and exit
  --config CONFIG       Builder configuration file
  --log LOG             One of [DEBUG, INFO, ERROR, WARNING, CRITICAL]

$ ./build/manager/sage-pkg info matplotlib
Configuration:
- config.builder.install_script = spkg-install
- config.builder.type = SpkgInstallScript
- config.category = standard
- config.depends.build = 'pkgconf', 'setuptools']
- config.depends.hard = ['python', 'numpy', 'freetype', 'libpng', 
'gdmodule', 'dateutil', 'pyparsing']
- config.name = matplotlib
- config.source.tarball.name = matplotlib-1.3.1.tar.gz
- config.source.tarball.sha1 = f340378c43c4c3f6219ef9fd84af4ebbe18f8feb
- config.source.version = 1.3.1
Status: up to date
Installed when: 2 hours ago

-- 
You received this message because you are subscribed to the Google Groups 
"sage-devel" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sage-devel+unsubscr...@googlegroups.com.
To post to this group, send email to sage-devel@googlegroups.com.
Visit this group at http://groups.google.com/group/sage-devel.
For more options, visit https://groups.google.com/d/optout.

Reply via email to