Next: jsmn, Up: Updating external code [Contents][Index]

### 5.1 Gnulib

Gnulib is a source code library that provides basic functionality to programs and libraries. Many software packages make use of Gnulib to avoid reinventing the portability wheel.

GRUB imports Gnulib using its `bootstrap` utility, identifying a particular Git commit in `bootstrap.conf`. To upgrade to a new Gnulib commit, set `GNULIB_REVISION` in `bootstrap.conf` to the new commit ID, then run `./bootstrap` and whatever else you need to make sure it works. Check for changes to Gnulib’s `NEWS` file between the old and new commits; in some cases it will be necessary to adjust GRUB to match. You may also need to update the patches in `grub-core/lib/gnulib-patches/`.

To add a new Gnulib module or remove one that is no longer needed, change `gnulib_modules` in `bootstrap.conf`. Again, run `./bootstrap` and whatever else you need to make sure it works.

Bootstrapping from an older distribution containing gettext version < 0.18.3, will require a patch similar to this to be applied first before running the `./bootstrap` utility:

    diff --git a/bootstrap.conf b/bootstrap.conf
    index 988dda0..a3193a9 100644
    --- a/bootstrap.conf
    +++ b/bootstrap.conf
    @ -67,7 +67,7 @ SKIP_PO=t
    buildreq="\
    autoconf   2.63
    automake   1.11
    -gettext    0.18.3
    +gettext    0.17
    git        1.5.5
    tar        -
    "
    diff --git a/configure.ac b/configure.ac
    index 08b518f..99f5b36 100644
    --- a/configure.ac
    +++ b/configure.ac
    @ -362,7 +362,7 @ AC_CHECK_PROG(HAVE_CXX, $CXX, yes, no)

    AC_GNU_SOURCE
    AM_GNU_GETTEXT([external])
    -AM_GNU_GETTEXT_VERSION([0.18.3])
    +AM_GNU_GETTEXT_VERSION([0.17])
    AC_SYS_LARGEFILE

    # Identify characteristics of the host architecture.

It will also be necessary to adjust the patches in `po/gettext-patches/` to apply to an older version of gettext.