Coder Social home page Coder Social logo

rrthomas / bootstrap Goto Github PK

View Code? Open in Web Editor NEW

This project forked from gnulib-modules/bootstrap

0.0 3.0 0.0 541 KB

a clean rewrite of gnulib bootstrap for scriptable extensibility and proper error reporting

License: Other

Makefile 0.54% Shell 99.46%

bootstrap's Introduction

BOOTSTRAP

Run all the Autotools scripts in a sane order according to the contents of configure.ac (or configure.in) and Makefile.am (if any).

This is a complete rewrite of the GNU Gnulib bootstrap script, for figuring out what autotools need to be run, in what order, and with what arguments to bootstrap a newly checked out working copy. This version is much more robust, a lot more user friendly, slightly faster, and a little more portable than the GNU version. It's also quite a lot larger than the GNU implementation.

The original idea behind the rewrite is that the incumbent Gnulib implementation was not flexible enough to bootstrap either of GNU M4, nor GNU Libtool - and rather than copying and editing the upstream version and merging changes back downstream as bugs were found and squashed, I decided the neighbourly thing to do would be to rewrite the whole messy thing with it's accreted features and piecemeal merges from other projects with scriptable extensibility designed in from the outset.

This version was never merged back into gnulib proper, where the feature accreted incumbent script still resides (albeit carrying fixes to many of the outright bugs and misfeatures fixed by this version). However, I've found this version considerably more reliable, and infinitely more malleable when it comes to extending the existing functionality for the unusual requirements of other projects that the Gnulib bootstrap cannot handle. It is very widely deployed, and extremely well tested in all of my own projects, and many others besides.

Thanks

My sincere thanks to Pavel Raiskup for considerable help in speeding up the hook functions mechanism and the quote for re-evaluation functions at the core of these shell scripts.

My sincere thanks also to Bruno Haible, Jim Meyering and Paul Eggert on the gnulib developers list for encouragement and input during the design and implementation stages.

Usage

There are two ways to incorporate this bootstrap into your own projects:

  1. If your project already uses GNU Gnulib, then you can copy this entire repository into your project, let's say under gl-mod/bootstrap directory. If you are using the git version control system, you are encouraged to add this source repository as a git submodule instead of copying it:

    git submodule add -- https://github.com/gnulib-modules/bootstrap.git gl-mod/bootstrap

    This configuration options should be added into your project's bootstrap.conf file:

    • Specify local_gl_path=gl-mod/bootstrap option. This causes that gnulib-tool will be automatically called with --local-dir gl-mod/bootstrap option.

    • Add bootstrap to gnulib_modules option.

    • If your project already uses some other gnulib's local override directories, simply mention those directories in local_gl_path too (colon separated list of directories), for example `local_gl_path=gl-local:gl-mod/bootstrap.

    • (Only) if you added this bootstrap repository as a git submodule, you want to let it be automatically initialized during the first ./bootstrap invocation. To achieve this, use gnulib_git_submodules=gl-mod/bootstrap option.

    Initialise your actual bootstrap script from the subproject with:

    aux_src=gl-mod/bootstrap/build-aux
    $aux_src/inline-source $aux_src/bootstrap.in > bootstrap
    chmod +x bootstrap
    

    The resulting script will then keep track of changes to the subproject and warn you of upstream changes.

  2. You can simply copy the top-level bootstrap script (which is pregenerated whenever the constituent scripts are updated) directly into the top-level directory of your project, and update it manually whenever necessary.

Either way, once you have installed bootstrap, use it to run the appropriate project-specific autotools and customisations with ./bootstrap.

You can customize the behaviour of this script with a bootstrap.conf file, as described in the bootstrap.texi documentation, and the bootstrap script itself.

bootstrap's People

Contributors

aakropotkin avatar ebblake avatar gvvaughan avatar haubi avatar komh avatar praiskup avatar rrthomas avatar

Watchers

 avatar  avatar  avatar

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.