Thursday, June 7, 2018

Building GNU libiconv 1.15

The basic building strategy and general assumptions have been detailed on a previous post: Staged Building:

 $ pwd
/stage/build

$ ./gnu-build-preparation ../source/.../libiconv-1.15.tar.gz
...

$ cd libiconv/libiconv-1.15-32

$ source ../setenv-1.15 32

Configuration file [version 4]: /stage/build/libiconv/ld.config-32 
 Platform:     32-bit LSB 80386
 Default Library Path (ELF):   /opt/gnu/lib:/opt/usr/lib:/lib:/usr/lib
 Trusted Directories (ELF):    /lib/secure:/usr/lib/secure  (... default)

Command line:
  crle 

   -c /stage/build/libiconv/ld.config-32 
   -l /opt/gnu/lib:/opt/usr/lib:/lib:/usr/lib

LD_CONFIG_32=/stage/build/libiconv/ld.config-32

CONFIG_SHELL=

CC=/usr/bin/gcc CFLAGS=-m32 -march=nocona -mtune=nocona -std=gnu89

CXX=/usr/bin/g++ CXXFLAGS=-m32 -march=nocona -mtune=nocona -std=gnu++98

LD=/usr/bin/ld LDFLAGS=-m32 -march=nocona -mtune=nocona

PATH=/opt/gnu/bin:/opt/usr/bin:/usr/gnu/bin:/usr/bin:/usr/sbin

PKG_CONFIG_PATH=/opt/usr/lib/pkgconfig

Suggested build sequence:

Fine-tune/fix config.h.in, Makefile.in and others...

$ ./configure \
    --build=i386-pc-solaris2.11 \
    --prefix=/opt/... \
    ...

$ gmake -j2

$ su
# source ../setenv-1.15 32

For IPS package:

# gmake DESTDIR=/stage/prototype/libiconv/1.15/32 install

For immediate use:

# gmake install
# zfs snapshot -r .../opt/...@libiconv-1.15


NOTE
This build is somewhat tricky because it has a cyclic dependency on GNU gettext, which depends back on GNU libiconv. One way to solve the issue is to build GNU libiconv first using --without-libintl-prefix, then GNU gettext and finally GNU libiconv once more using --with-libintl-prefix=/opt/gnu. But before getting to GNU gettext, one should pass by GNU libunistring, GNU libxml2 and perhaps ncurses.

Building GNU gperf 3.1

The basic building strategy and general assumptions have been detailed on a previous post: Staged Building:

 $ pwd
/stage/build

$ ./gnu-build-preparation ../source/.../gperf-3.1.tar.gz
...

$ cd gperf/gperf-3.1-32

$ source ../setenv-3.1 32

Configuration file [version 4]: /stage/build/gperf/ld.config-32 
 Platform:     32-bit LSB 80386
 Default Library Path (ELF):   /opt/gnu/lib:/opt/usr/lib:/lib:/usr/lib
 Trusted Directories (ELF):    /lib/secure:/usr/lib/secure  (... default)

Command line:
  crle 

   -c /stage/build/gperf/ld.config-32 
   -l /opt/gnu/lib:/opt/usr/lib:/lib:/usr/lib

LD_CONFIG_32=/stage/build/gperf/ld.config-32

CONFIG_SHELL=

CC=/usr/bin/gcc CFLAGS=-m32 -march=nocona -mtune=nocona -std=gnu89

CXX=/usr/bin/g++ CXXFLAGS=-m32 -march=nocona -mtune=nocona -std=gnu++98

LD=/usr/bin/ld LDFLAGS=-m32 -march=nocona -mtune=nocona

PATH=/opt/gnu/bin:/opt/usr/bin:/usr/gnu/bin:/usr/bin:/usr/sbin

PKG_CONFIG_PATH=/opt/usr/lib/pkgconfig

Suggested build sequence:

Fine-tune/fix config.h.in, Makefile.in and others...

$ ./configure \
    --build=i386-pc-solaris2.11 \
    --prefix=/opt/... \
    ...

$ gmake -j2

$ su
# source ../setenv-3.1 32

For IPS package:

# gmake DESTDIR=/stage/prototype/gperf/3.1/32 install

For immediate use:

# gmake install
# zfs snapshot -r .../opt/...@gperf-3.1


Buidling GNU readline 5.1

The basic building strategy and general assumptions have been detailed on a previous post: Staged Building:

 $ pwd
/stage/build

$ ./gnu-build-preparation ../source/.../readline-5.1.tar.gz
...

$ cd readline/readline-5.1-32

$ source ../setenv-5.1 32

Configuration file [version 4]: /stage/build/readline/ld.config-32 
 Platform:     32-bit LSB 80386
 Default Library Path (ELF):   /opt/gnu/lib:/opt/usr/lib:/lib:/usr/lib
 Trusted Directories (ELF):    /lib/secure:/usr/lib/secure  (... default)

Command line:
  crle 

   -c /stage/build/readline/ld.config-32 
   -l /opt/gnu/lib:/opt/usr/lib:/lib:/usr/lib

LD_CONFIG_32=/stage/build/readline/ld.config-32

CONFIG_SHELL=

CC=/usr/bin/gcc CFLAGS=-m32 -march=nocona -mtune=nocona -std=gnu89

CXX=/usr/bin/g++ CXXFLAGS=-m32 -march=nocona -mtune=nocona -std=gnu++98

LD=/usr/bin/ld LDFLAGS=-m32 -march=nocona -mtune=nocona

PATH=/opt/gnu/bin:/opt/usr/bin:/usr/gnu/bin:/usr/bin:/usr/sbin

PKG_CONFIG_PATH=/opt/usr/lib/pkgconfig

Suggested build sequence:

Fine-tune/fix config.h.in, Makefile.in and others...

$ ./configure \
    --build=i386-pc-solaris2.11 \
    --prefix=/opt/... \
    ...

$ gmake -j2

$ su
# source ../setenv-5.1 32

For IPS package:

# gmake DESTDIR=/stage/prototype/readline/5.1/32 install

For immediate use:

# gmake install
# zfs snapshot -r .../opt/...@readline-5.1


Tuesday, June 5, 2018

Building SQLite 3.24.0

I'm updating my SQLite to the latest version as by the time of this writing. The last time I did that (on July 2017, hence almost 1 year ago) I was able to build version 3.19.3. This time I'm building version 3.24.0. Just to make things more interesting I'm building it on an even older system, a 32-bits Solaris 11 Express SRU-14, wow!

Roughly speaking the procedure is virtually the same, but there were minor hurdles which I still don't know if they are due to new version or the older system. Anyway, I document the workarounds so that it shall help build some knowledge on the matter for future attempts on building newer versions.

Thursday, May 31, 2018

Building Mercurial 4.6

On a world where the popular way is to adopt Linux and Git I still would select Solaris and Mercurial as more specific and powerful alternatives.

Solaris 11.3 GA offers Mercurial 3.4 (still straight through from Selenic Consulting) while Solaris 11 Express offered the even older ancient version 1.3.1. Of course, that's crazy for the present time as they both can be considered relics! So I set to instate an upgraded version all by myself instead of waiting or relying on the official distribution of Solaris, which understandably is not strongly focused on this particular matter.

My goal is to achieve the following even under a legacy Solaris 11 Express 32-bits!

$ hg --version
Mercurial Distributed SCM (version 4.6)
(see https://mercurial-scm.org for more information)

Copyright (C) 2005-2018 Matt Mackall and others
This is free software; see the source for copying conditions. 

There is NO warranty; not even for ... A PARTICULAR PURPOSE. (Wow!)

As usual, I begin by downloading the source-code tarball from the official web site and, once more, I perform the basic building strategy and general assumptions already detailed on one of my previous posts: Staged Building.