788 lines
13 KiB
Bash
Executable File
788 lines
13 KiB
Bash
Executable File
#!/bin/bash
|
|
# Build Freon Linux software from source.
|
|
# Version: 0.5.0
|
|
# (C) Chris Dorman, 2018-2020 GPLv3+
|
|
|
|
corecount="25"
|
|
|
|
#### Variables ###
|
|
# mirrors
|
|
mpfrmirror="https://ftp.gnu.org/gnu/mpfr"
|
|
mpcmirror="https://ftp.gnu.org/gnu/mpc"
|
|
gmpmirror="https://ftp.gnu.org/gnu/gmp"
|
|
binutilsmirror="https://ftp.gnu.org/gnu/binutils"
|
|
gccmirror="http://ftp.gnu.org/gnu/gcc/gcc-9.2.0"
|
|
nanomirror="https://www.nano-editor.org/dist/v3"
|
|
chttpdmirror="https://github.com/Pentium44/chttpd.git"
|
|
ftpmirror="https://github.com/Harlonxl/minFTPD.git"
|
|
harfbuzzmirror="https://github.com/harfbuzz/harfbuzz"
|
|
ncursesmirror="https://ftp.gnu.org/pub/gnu/ncurses"
|
|
bashmirror="https://ftp.gnu.org/gnu/bash"
|
|
zlibmirror="https://zlib.net"
|
|
termcapmirror="https://ftp.gnu.org/gnu/termcap"
|
|
htopmirror="https://github.com/htop-dev/htop/archive"
|
|
islmirror="http://isl.gforge.inria.fr"
|
|
irciimirror="http://ircii.warped.com"
|
|
opensslmirror="https://www.openssl.org/source"
|
|
xlibmirror="https://www.x.org/archive//individual/lib"
|
|
xfontsmirror="https://www.x.org/archive//individual/font"
|
|
libbsdmirror="https://libbsd.freedesktop.org/releases"
|
|
bz2mirror="https://sourceware.org/pub/bzip2"
|
|
freetypemirror="https://download.savannah.gnu.org/releases/freetype"
|
|
png16mirror="https://download.sourceforge.net/libpng"
|
|
stracemirror="https://gitlab.com/strace/strace.git"
|
|
elfutilsmirrpr="git://sourceware.org/git/elfutils.git"
|
|
|
|
# filenames
|
|
gcc="gcc-9.2.0.tar.xz"
|
|
nano="nano-3.1.tar.xz"
|
|
ncurses="ncurses-6.1.tar.gz"
|
|
bash="bash-5.0.tar.gz"
|
|
zlib="zlib-1.2.11.tar.xz"
|
|
termcap="termcap-1.3.1.tar.gz"
|
|
htop="htop-2.2.0.tar.gz"
|
|
binutils="binutils-2.31.1.tar.xz"
|
|
gmp="gmp-6.1.2.tar.xz"
|
|
mpfr="mpfr-4.0.2.tar.xz"
|
|
mpc="mpc-1.1.0.tar.gz"
|
|
isl="isl-0.19.tar.xz"
|
|
ircii="ircii-20190117.tar.gz"
|
|
openssl="openssl-1.1.1h.tar.gz"
|
|
xdmcp="libXdmcp-1.1.3.tar.gz"
|
|
fontenc="libfontenc-1.1.4.tar.gz"
|
|
libbsd="libbsd-0.9.1.tar.xz"
|
|
bz2="bzip2-1.0.8.tar.gz"
|
|
freetype="freetype-2.10.1.tar.xz"
|
|
png16="libpng-1.6.37.tar.xz"
|
|
xfont="libXfont-1.5.4.tar.gz"
|
|
fontmisc="font-misc-misc-1.1.1.tar.bz2"
|
|
font75dpi="font-bitstream-75dpi-1.0.3.tar.bz2"
|
|
font100dpi="font-bitstream-100dpi-1.0.3.tar.bz2"
|
|
|
|
# work directories
|
|
tmpdir="`pwd`/pkgsrc"
|
|
softwaredir="`pwd`/src/rootfs"
|
|
freondir="/freon"
|
|
systemdir="`pwd`/system"
|
|
|
|
# source directories
|
|
gccsrcdir=${gcc//.tar.xz}
|
|
nanosrcdir=${nano//.tar.xz}
|
|
ncursessrcdir=${ncurses//.tar.gz}
|
|
bashsrcdir=${bash//.tar.gz}
|
|
zlibsrcdir=${zlib//.tar.xz}
|
|
termcapsrcdir=${termcap//.tar.gz}
|
|
htopsrcdir=${htop//.tar.gz}
|
|
mpcsrcdir=${mpc//.tar.gz}
|
|
mpfrsrcdir=${mpfr//.tar.xz}
|
|
binutilssrcdir=${binutils//.tar.xz}
|
|
gmpsrcdir=${gmp//.tar.xz}
|
|
islsrcdir=${isl//.tar.xz}
|
|
irciisrcdir=${ircii//.tar.gz}
|
|
opensslsrcdir=${openssl//.tar.gz}
|
|
xdmcpsrcdir=${xdmcp//.tar.gz}
|
|
fontencsrcdir=${fontenc//.tar.gz}
|
|
libbsdsrcdir=${libbsd//.tar.xz}
|
|
bz2srcdir=${bz2//.tar.gz}
|
|
freetypesrcdir=${freetype//.tar.xz}
|
|
png16srcdir=${png16//.tar.xz}
|
|
xfontsrcdir=${xfont//.tar.gz}
|
|
fontmiscsrcdir=${fontmisc//.tar.bz2}
|
|
font75dpisrcdir=${font75dpi//.tar.bz2}
|
|
font100dpisrcdir=${font100dpi//.tar.bz2}
|
|
|
|
if [ ! -d "$tmpdir" ]; then
|
|
echo "Warning: package source directory not found, creating."
|
|
mkdir $tmpdir > /dev/null 2>&1
|
|
fi
|
|
|
|
bash()
|
|
{
|
|
cd $tmpdir
|
|
|
|
# Downloading TCC source
|
|
if [ ! -f "$bash" ]; then
|
|
echo "Downloading bash sources..."
|
|
wget $bashmirror/$bash
|
|
tar -xf $bash
|
|
fi
|
|
|
|
cd $bashsrcdir
|
|
|
|
./configure --prefix=$freondir --without-bash-malloc
|
|
|
|
make -j$corecount
|
|
make install
|
|
|
|
cd ..
|
|
}
|
|
|
|
gcc()
|
|
{
|
|
cd $tmpdir
|
|
|
|
# Downloading GCC source
|
|
if [ ! -f "$gcc" ]; then
|
|
echo "Downloading GCC sources..."
|
|
wget $gccmirror/$gcc
|
|
tar -xf $gcc
|
|
fi
|
|
|
|
cd $gccsrcdir
|
|
|
|
mkdir -v build
|
|
cd build
|
|
|
|
SED=sed
|
|
../configure --prefix=$freondir \
|
|
--enable-languages=c,c++ \
|
|
--disable-multilib \
|
|
--disable-bootstrap \
|
|
--with-system-zlib
|
|
|
|
# Compile
|
|
make -j$corecount
|
|
|
|
make install
|
|
|
|
cd $softwaredir
|
|
|
|
if [ ! -d "freon-ext" ]; then
|
|
mkdir freon-ext
|
|
fi
|
|
|
|
cd freon-ext
|
|
|
|
cp -a $freondir/. .
|
|
|
|
rm lib/*.a
|
|
rm lib64/*.a
|
|
|
|
cd $tmpdir
|
|
}
|
|
|
|
htop()
|
|
{
|
|
cd $tmpdir
|
|
|
|
# Downloading TCC source
|
|
if [ ! -f "$htop" ]; then
|
|
echo "Downloading htop sources..."
|
|
wget $htopmirror/2.2.0.tar.gz
|
|
mv 2.2.0.tar.gz $htop
|
|
tar -xf $htop
|
|
fi
|
|
|
|
# Configure TCC
|
|
cd $htopsrcdir
|
|
./autogen.sh
|
|
./configure --prefix=$freondir
|
|
|
|
# Compile
|
|
make -j20
|
|
make install
|
|
cd ..
|
|
}
|
|
|
|
termcap()
|
|
{
|
|
cd $tmpdir
|
|
|
|
# Downloading termcap source
|
|
if [ ! -f "$termcap" ]; then
|
|
echo "Downloading termcap sources..."
|
|
wget $termcapmirror/$termcap
|
|
tar -xf $termcap
|
|
fi
|
|
|
|
# Configure TCC
|
|
cd $termcapsrcdir
|
|
./configure --prefix=$freondir --with-shared --without-normal
|
|
|
|
# Compile
|
|
make -j20
|
|
make install
|
|
cd ..
|
|
|
|
}
|
|
|
|
nano()
|
|
{
|
|
cd $tmpdir
|
|
|
|
# Downloading nano source
|
|
if [ ! -f "$nano" ]; then
|
|
echo "Downloading nano editor sources..."
|
|
wget $nanomirror/$nano
|
|
tar -xf $nano
|
|
fi
|
|
|
|
# Confingure
|
|
cd $nanosrcdir
|
|
./configure --prefix=$freondir
|
|
|
|
# Compile
|
|
make -j20
|
|
make install
|
|
cd ..
|
|
}
|
|
|
|
ncurses()
|
|
{
|
|
cd $tmpdir
|
|
|
|
# Downloading nano source
|
|
if [ ! -f "$ncurses" ]; then
|
|
echo "Downloading ncurses sources..."
|
|
wget $ncursesmirror/$ncurses
|
|
tar -xf $ncurses
|
|
fi
|
|
|
|
# Configure
|
|
cd $ncursessrcdir
|
|
./configure --prefix=$freondir \
|
|
--with-shared \
|
|
--without-debug \
|
|
--without-normal \
|
|
--enable-widec
|
|
|
|
# Compile
|
|
make -j$corecount
|
|
make install
|
|
|
|
make distclean
|
|
./configure --prefix=$freondir \
|
|
--with-shared \
|
|
--without-normal \
|
|
--without-debug \
|
|
--without-cxx-binding \
|
|
--with-abi-version=5 \
|
|
--with-versioned-syms
|
|
|
|
make sources libs
|
|
cp -av lib/lib*.so.5* $freondir/lib
|
|
|
|
cd $freondir/lib
|
|
|
|
ln -s libncursesw.so.6 libtinfo.so.6
|
|
ln -s libtinfo.so.6 libtinfo.so
|
|
|
|
ln -s libncurses.so.5 libtinfo.so.5
|
|
ln -s libtinfo.so.5 libtinfo.so
|
|
|
|
ln -s libncursesw.so.6 libncursesw.so.5
|
|
|
|
cd $tmpdir
|
|
}
|
|
|
|
binutils()
|
|
{
|
|
cd $tmpdir
|
|
|
|
# Downloading binutils sources
|
|
if [ ! -f "$binutils" ]; then
|
|
echo "Downloading binutils sources..."
|
|
wget $binutilsmirror/$binutils
|
|
tar -xf $binutils
|
|
fi
|
|
|
|
# Configure Binutils
|
|
|
|
if [ ! -d "${binutilssrcdir}-build" ]; then
|
|
mkdir ${binutilssrcdir}-build
|
|
fi
|
|
|
|
cd ${binutilssrcdir}-build
|
|
../$binutilssrcdir/configure --prefix=$freondir --enable-shared
|
|
|
|
make tooldir=$freondir -j$corecount
|
|
|
|
make tooldir=$freondir install
|
|
|
|
cp -v ../$binutilssrcdir/include/libiberty.h $freondir/include
|
|
|
|
cd $tmpdir
|
|
}
|
|
|
|
mpc()
|
|
{
|
|
cd $tmpdir
|
|
|
|
# Download sources
|
|
if [ ! -f "$mpc" ]; then
|
|
echo "Downloading GNU mpc sources..."
|
|
wget $mpcmirror/$mpc
|
|
tar -xf $mpc
|
|
fi
|
|
|
|
cd $mpcsrcdir
|
|
|
|
./configure --prefix=$freondir --disable-static
|
|
|
|
make -j$corecount
|
|
|
|
make install
|
|
|
|
cd $tmpdir
|
|
}
|
|
|
|
mpfr()
|
|
{
|
|
cd $tmpdir
|
|
|
|
# Download sources
|
|
if [ ! -f "$mpfr" ]; then
|
|
echo "Downloading GNU mpfr sources..."
|
|
wget $mpfrmirror/$mpfr
|
|
tar -xf $mpfr
|
|
fi
|
|
|
|
# Configure and compile
|
|
|
|
cd $mpfrsrcdir
|
|
|
|
./configure --prefix=$freondir --disable-static --enable-thread-safe
|
|
|
|
make -j$corecount
|
|
|
|
make install
|
|
|
|
cd ..
|
|
}
|
|
|
|
gmp()
|
|
{
|
|
cd $tmpdir
|
|
|
|
# Download sources
|
|
if [ ! -f "$gmp" ]; then
|
|
echo "Downloading GNU gmp sources..."
|
|
wget $gmpmirror/$gmp
|
|
tar -xf $gmp
|
|
fi
|
|
|
|
# Configure and compile
|
|
|
|
cd $gmpsrcdir
|
|
|
|
./configure --prefix=$freondir --disable-static --enable-cxx
|
|
|
|
make -j$corecount
|
|
|
|
make install
|
|
|
|
cd ..
|
|
}
|
|
|
|
ftp()
|
|
{
|
|
cd $tmpdir
|
|
|
|
if [ ! -d "minFTPD" ]; then
|
|
git clone $ftpmirror
|
|
fi
|
|
|
|
cd minFTPD
|
|
make -j20
|
|
|
|
cp minFTPD ../../src/rootfs/sbin/
|
|
cp miniFTPD.conf ../../src/rootfs/etc/
|
|
|
|
cd $tmpdir
|
|
|
|
}
|
|
|
|
isl()
|
|
{
|
|
cd $tmpdir
|
|
|
|
# Download sources
|
|
if [ ! -f "$isl" ]; then
|
|
echo "Downloading ISL sources..."
|
|
wget $islmirror/$isl
|
|
tar -xf $isl
|
|
fi
|
|
|
|
# Configure and compile
|
|
|
|
cd $islsrcdir
|
|
|
|
./configure --prefix=$freondir
|
|
|
|
make -j$corecount
|
|
|
|
make install
|
|
|
|
cd ..
|
|
}
|
|
|
|
# IRC clients / servers
|
|
|
|
# Because why not! :D / BitchX has pissed me off
|
|
ircii()
|
|
{
|
|
cd $tmpdir
|
|
|
|
# Grab latest sources ircII
|
|
if [ ! -d $irciisrcdir ]; then
|
|
wget $irciimirror/$ircii
|
|
tar -xf $ircii
|
|
fi
|
|
|
|
cd $irciisrcdir
|
|
|
|
# Configure and build + install
|
|
./configure --prefix=$freondir
|
|
make -j20
|
|
make install
|
|
|
|
cd $tmpdir
|
|
}
|
|
|
|
# OpenSSL, needed for ircii TLS/SSL, and probably a bit more packages in the future.
|
|
openssl()
|
|
{
|
|
cd $tmpdir
|
|
|
|
# Grab latest sources ircII
|
|
if [ ! -d $opensslsrcdir ]; then
|
|
wget $opensslmirror/$openssl
|
|
tar -xf $openssl
|
|
fi
|
|
|
|
cd $opensslsrcdir
|
|
|
|
./config --prefix=$freondir \
|
|
--openssldir=$freondir/etc/ssl \
|
|
--libdir=lib \
|
|
shared \
|
|
zlib-dynamic
|
|
|
|
make -j$corecount
|
|
|
|
make install
|
|
|
|
cd $tmpdir
|
|
}
|
|
|
|
# DVTM ~ Dynamic virtual terminal manager
|
|
dvtm()
|
|
{
|
|
cd $systemdir/dvtm
|
|
|
|
make -j$corecount
|
|
|
|
make install
|
|
|
|
cd $tmpdir
|
|
}
|
|
|
|
# Xfbdev dependencies
|
|
xdmcp()
|
|
{
|
|
cd $tmpdir
|
|
|
|
# Grab latest sources for libxdmcp
|
|
if [ ! -d $xdmcpsrcdir ]; then
|
|
wget $xlibmirror/$xdmcp
|
|
tar -xf $xdmcp
|
|
fi
|
|
|
|
cd $xdmcpsrcdir
|
|
|
|
./configure --prefix=$freondir --enable-shared --disable-static
|
|
|
|
make -j$corecount
|
|
|
|
make install
|
|
|
|
$tmpdir
|
|
}
|
|
|
|
xfont()
|
|
{
|
|
cd $tmpdir
|
|
|
|
# Grab latest sources for xfont
|
|
if [ ! -d $xfontsrcdir ]; then
|
|
wget $xlibmirror/$xfont
|
|
tar -xf $xfont
|
|
fi
|
|
|
|
cd $xfontsrcdir
|
|
|
|
./configure --prefix=$freondir --enable-shared --disable-static
|
|
|
|
make -j$corecount
|
|
|
|
make install
|
|
|
|
$tmpdir
|
|
}
|
|
|
|
libbsd()
|
|
{
|
|
cd $tmpdir
|
|
|
|
# Grab latest sources for freetype
|
|
if [ ! -d $libbsdsrcdir ]; then
|
|
wget $libbsdmirror/$libbsd
|
|
tar -xf $libbsd
|
|
fi
|
|
|
|
cd $libbsdsrcdir
|
|
|
|
./configure --prefix=$freondir --disable-static
|
|
|
|
make -j$corecount
|
|
|
|
make install
|
|
|
|
$tmpdir
|
|
}
|
|
|
|
fontenc()
|
|
{
|
|
cd $tmpdir
|
|
|
|
# Grab latest sources for freetype
|
|
if [ ! -d $fontencsrcdir ]; then
|
|
wget $xlibmirror/$fontenc
|
|
tar -xf $fontenc
|
|
fi
|
|
|
|
cd $fontencsrcdir
|
|
|
|
./configure --prefix=$freondir --disable-static
|
|
|
|
make -j$corecount
|
|
|
|
make install
|
|
|
|
$tmpdir
|
|
}
|
|
|
|
png16()
|
|
{
|
|
cd $tmpdir
|
|
|
|
# Grab latest sources for freetype
|
|
if [ ! -d $png16srcdir ]; then
|
|
wget $png16mirror/$png16
|
|
tar -xf $png16
|
|
fi
|
|
|
|
cd $png16srcdir
|
|
|
|
./configure --prefix=$freondir --disable-static
|
|
|
|
make -j$corecount
|
|
|
|
make install
|
|
|
|
cd $tmpdir
|
|
|
|
}
|
|
|
|
bz2()
|
|
{
|
|
cd $tmpdir
|
|
|
|
# Grab latest sources bzip2
|
|
if [ ! -d $bz2srcdir ]; then
|
|
wget $bz2mirror/$bz2
|
|
tar -xf $bz2
|
|
fi
|
|
|
|
cd $bz2srcdir
|
|
|
|
make -f Makefile-libbz2_so
|
|
|
|
make clean
|
|
|
|
make -j$corecount
|
|
|
|
make PREFIX=$freondir install
|
|
|
|
cp bzip2-shared $freondir/bin/bzip2
|
|
cp -a libbz2.so* $freondir/lib
|
|
|
|
cd $freondir/lib
|
|
|
|
ln -s libbz2.so.* libbz2.so
|
|
|
|
cd $tmpdir
|
|
|
|
}
|
|
|
|
freetype()
|
|
{
|
|
cd $tmpdir
|
|
|
|
# Grab latest sources for freetype
|
|
if [ ! -d $freetypesrcdir ]; then
|
|
wget $freetypemirror/$freetype
|
|
tar -xf $freetype
|
|
fi
|
|
|
|
cd $freetypesrcdir
|
|
|
|
./configure --prefix=$freondir --disable-static
|
|
|
|
make -j$corecount
|
|
|
|
make install
|
|
|
|
cd $tmpdir
|
|
}
|
|
|
|
harfbuzz()
|
|
{
|
|
cd $tmpdir
|
|
|
|
if [ ! -d "harfbuzz" ]; then
|
|
git clone $harfbuzzmirror
|
|
fi
|
|
|
|
cd harfbuzz
|
|
|
|
./autogen.sh
|
|
|
|
./configure --prefix=$freondir \
|
|
--disable-static \
|
|
--enable-shared \
|
|
--without-gobject \
|
|
--without-graphite2 \
|
|
--without-glib \
|
|
--without-icu \
|
|
--without-cairo
|
|
|
|
make -j20
|
|
|
|
make install
|
|
|
|
cd $tmpdir
|
|
|
|
}
|
|
|
|
fixedfonts()
|
|
{
|
|
cd $tmpdir
|
|
|
|
# Grab latest fixed fonts
|
|
if [ ! -d $fontmiscsrcdir ]; then
|
|
wget $xfontsmirror/$fontmisc
|
|
tar -xf $fontmisc
|
|
fi
|
|
|
|
cd $fontmiscsrcdir
|
|
|
|
./configure --with-fontrootdir=$freondir/share/fonts/X11
|
|
|
|
make
|
|
|
|
make install
|
|
|
|
cd ..
|
|
|
|
if [ ! -d $font75dpisrcdir ]; then
|
|
wget $xfontsmirror/$font75dpi
|
|
tar -xf $font75dpi
|
|
fi
|
|
|
|
cd $font75dpisrcdir
|
|
|
|
./configure --with-fontrootdir=$freondir/share/fonts/X11
|
|
|
|
make
|
|
|
|
make install
|
|
|
|
cd ..
|
|
|
|
if [ ! -d $font100dpisrcdir ]; then
|
|
wget $xfontsmirror/$font100dpi
|
|
tar -xf $font100dpi
|
|
fi
|
|
|
|
cd $font100dpisrcdir
|
|
|
|
./configure --with-fontrootdir=$freondir/share/fonts/X11
|
|
|
|
make
|
|
|
|
make install
|
|
|
|
cd ..
|
|
}
|
|
|
|
# TinyX Xfbdev ~ Nonaccelerated X server for simple GUI possibilities
|
|
# Freon Linux. Really can't believe it still compiles but yeah :D
|
|
tinyx()
|
|
{
|
|
cd $systemdir/tinyx
|
|
|
|
./autogen.sh
|
|
|
|
./configure --prefix=$freondir --disable-static --enable-shared
|
|
|
|
# Here we will have to disable build for Xvesa, only Xfbdev
|
|
cp ../../files/kdrive.config include/kdrive-config.h
|
|
|
|
make -j$corecount
|
|
|
|
make install
|
|
|
|
$tmpdir
|
|
}
|
|
|
|
strace()
|
|
{
|
|
cd $tmpdir
|
|
|
|
if [ ! -d "strace" ]; then
|
|
git clone $stracemirror
|
|
fi
|
|
|
|
cd strace
|
|
|
|
./build_static_example.sh
|
|
|
|
./configure --prefix=$freondir
|
|
|
|
make -j$corecount
|
|
|
|
make install
|
|
|
|
cd $tmpdir
|
|
}
|
|
|
|
elfutils()
|
|
{
|
|
cd $tmpdir
|
|
|
|
if [ ! -d "elfutils" ]; then
|
|
git clone $elfutilsmirror
|
|
fi
|
|
|
|
cd elfutils
|
|
|
|
./configure --prefix=$freondir --disable-static --enable-shared
|
|
|
|
make
|
|
|
|
make install
|
|
|
|
cd $tmpdir
|
|
|
|
}
|
|
|
|
case $1 in
|
|
all ) echo "Building all!"
|
|
ncurses; nano; chttpd; gmp; mpfr; binutils; mpc; gcc; bash; isl; termcap; ircii; openssl; dvtm;;
|
|
packages ) echo "Building useful essentials..."
|
|
ncurses; nano; bash; termcap;;
|
|
* ) echo "Building $1..."
|
|
$1;;
|
|
esac
|