Coder Social home page Coder Social logo

binary-pkg's Introduction

TL;DR

To build Sage binaries, just clone this repository and run

git clone https://github.com/sagemath/binary-pkg.git
cd binary-pkg
make bdist-sage-linux     # If you are on Linux
make bdist-sage-osx       # If you are on OSX
ls dist/                  # Built binaries will be in this directory

Edit sage.yaml if you want to build something else than the current Sage develop git branch.

Binary Packaging

This utility helps with creating binaries for distribution. Similar to conda, it builds the source tree in a long directory name which is then patched at install time. It is written for Sage (http://www.sagemath.org) but equally work for other software.

Usage

Building and packaging of an application is configured with a yaml file in the repository root. As an example, there is test.yaml and sage.yaml. To create a binary tarball for Sage, for example, all you have to do is run

make package-sage

This creates a tarball with an added relocate-once.py file that patches any hard-coded paths. If there are more than one packaging configurations (see below), then the first one is used by default. Use the PACKAGE variable to pick another one, for example

make package-sage PACKAGE="OSX DMG image"

In particular, see below for the different Mac packaging possibilities.

Configuration Syntax

Binary packaging information can be specified with a YAML configuration file. As a simplified example, let us look at the test application in the test.yaml file. It starts with the name:

name: PackagingTest

which will be the name of the root directory in the binary tarball. Our basic assumption is that your source code lives in a git repository, which we specify next:

repository: https://github.com/octol/minimal-gtest-autotools
branch: master

Then we have a (bash) build script to build the application

build: |
    autoreconf -vfi
    ./configure
    make

After the build is complete, we need to know the version. Typically this can be gotten via a command line switch of the application, though in this case we cheat. In any case, the output of this script is the version:

version: |
    echo 1.0

Finally, we define how to package the built source tree. There may be more than one way to package the application, each of which is distinguished by an internal name.

package:
  - name: Full binary tarball
    command: |
        tar cjf {dist}/test-{version}-{osname}-{arch}.tar.bz2 {path}
    files:
      - include: '**'
    rewrite_path:
      - exclude: '**/*.a'

The files section is a list of include/exclude directives, to be read from the bottom up. That is, later directives override earlier ones. The rewrite_path section defines a subset of the files that are to be ignored when rewriting hard-coded paths. In this example, all files are included but paths in static archives are not patched.

Auxiliary Make Targets

Any *.mk file in the root directory will be included in the Makefile for recurring build targets.

Mac Packaging Options

There are three options for packaging Mac. The default will simply create a .tar.gz file, which is usually not what one wants on Mac.

To create a Mac disk image file of the normal Sage command line distribution, use this package option:

make package-sage PACKAGE="OSX DMG image"

To create a Mac disk image file of the Mac app bundle with menu items and which automatically launches a notebook, use

make package-sage PACKAGE="OSX mac app"

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.