#!/bin/sh
#
######################################################
# Build script for Core 8.2                          #
#                                                    #
# See .info for details                              #
######################################################

######################################################
# Configure extension creation parameters            #
######################################################

export EXTNAM=frr
VERSION="3.0.3" 
SRCNAM=$EXTNAM-$VERSION.tar.gz
WRKDIR=$EXTNAM-$EXTNAM-$VERSION
TMPDIR=/tmp/$EXTNAM
DESTDIR=/tmp/frrouting/package
TODAY=`date +%Y/%m/%d`
DESCRIPTION="FRRouting is a routing software suite"
DOCDESCRIPTION="Documentation part of the FRRouting routing software suite"
DEVDESCRIPTION="Development files part of the FRRouting routing software suite"
AUTHORS="See Original-site"
HOMEPAGE="https://frrouting.org/"
LICENSE="LGPL"
ME="rhermsen"
TAGS="frr zebra routing quagga"
DOCTAGS="man pages frr zebra routing quagga"
DEVTAGS="development frr zebra routing quagga"

######################################################
# Prepare extension creation                         #
######################################################

# Load extensions needed for compiling Frr

# Compile tools:
tce-load -wi compiletc.tcz
tce-load -wi squashfs-tools.tcz
tce-load -wi autoconf.tcz
tce-load -wi automake.tcz
tce-load -wi libtool.tcz
tce-load -wi libltdl.tcz
tce-load -wi pkg-config.tcz
tce-load -wi intltool.tcz
tce-load -wi libtool-dev.tcz

# Configure dependancy
tce-load -wi json-c-dev.tcz 
tce-load -wi readline-dev.tcz
tce-load -wi libxml2.tcz
#tce-load -wi libxml2-dev.tcz
#tce-load -wi XML-NamespaceSupport.tcz
tce-load -wi perl_XML-SAX-Base.tcz
tce-load -wi perl_XML-SAX.tcz
tce-load -wi perl_XML-LibXML.tcz
tce-load -wi libcares-dev.tcz
tce-load -wi texinfo.tcz

# Other
tce-load -wi ipv6-KERNEL.tcz


# Remove dirs and files left from previous creation

rm -r -f $WRKDIR 2>/dev/null

sudo rm -r -f $TMPDIR 2>/dev/null
sudo rm -r -f $TMPDIR-doc 2>/dev/null

######################################################
# Compile extension                                  #
######################################################

# Export variables needed for compilation

export CFLAGS="-O2 -pipe -march=i486 -mtune=i686"
export CXXFLAGS="-O2 -pipe -fno-exceptions -fno-rtti -march=i486 -mtune=i686"
#export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:/usr/lib/pkgconfig

# Unpack source in current directory

tar -xf $SRCNAM

# Autoconfig

cd $WRKDIR

./bootstrap.sh

# Configure it
./configure  --prefix=/usr/local \
--sysconfdir=/usr/local/etc/$EXTNAM \
--localstatedir=/var/$EXTNAM \
--enable-user=tc \
--enable-group=staff \
--enable-vty-group=staff \
--enable-ldpd \
--enable-pimd \
--enable-multipath=2 \
--enable-rtadv
#--disable-doc

# Compile
make
mkdir -p $DESTDIR
make DESTDIR=$DESTDIR install

# Install in base temp dir

mkdir -p $TMPDIR/usr/local/bin
mkdir -p $TMPDIR/usr/local/sbin
mkdir -p $TMPDIR/usr/local/lib
mkdir -p $TMPDIR/usr/local/etc/$EXTNAM
#mkdir -p $TMPDIR/usr/local/var/$EXTNAM
mkdir -p $TMPDIR/usr/local/tce.installed

mv /tmp/frrouting/package/usr/local/bin/* $TMPDIR/usr/local/bin
mv /tmp/frrouting/package/usr/local/etc/$EXTNAM/* $TMPDIR/usr/local/etc/$EXTNAM
mv /tmp/frrouting/package/usr/local/lib/lib*so* $TMPDIR/usr/local/lib
mv /tmp/frrouting/package/usr/local/sbin/* $TMPDIR/usr/local/sbin

###################################################                                      
# Create info file                                #
###################################################
cat <<EOF> /tmp/frrouting/${EXTNAM}.tcz.info
Title:          ${EXTNAM}.tcz
Description:    ${DESCRIPTION}
Version:        ${VERSION}
Author:         ${AUTHORS}
Original-site:  ${HOMEPAGE}
Copying-policy: ${LICENSE}
Size:           ${size}
Extension_by:   ${ME}
Tags:		${TAGS}
Comments:	Frr is a routing software package that provides TCP/IP based
		routing services with routing protocols support such as RIPv1,
		RIPv2, RIPng, OSPFv2, OSPFv3, IS-IS, BGP-4, and BGP-4+.
		Frr also supports special BGP Route Reflector and Route Server behavior.
		In addition to traditional IPv4 routing protocols, Frr also supports
		IPv6 routing protocols. With SNMP daemon which supports SMUX and
		AgentX protocol, Frr provides routing protocol MIBs.
		
		The IPv6 kernel modules are not automatically installed.
		If IPv6 is desired, install ipv6-4.8.17-tinycore.tcz via
		the Apps GUI, or cli (tce-load -wi ipv6-KERNEL).                
Change-log:     ${TODAY} First Version, ${VERSION}
Current:        ${TODAY} First Version, ${VERSION}
EOF
 
###################################################                            
# Create .dep file                                #
###################################################
cat <<EOF> /tmp/frrouting/${EXTNAM}.tcz.dep
json-c.tcz
readline.tcz
libcares.tcz
EOF

###################################################                                 
# Create install script file                      #                                 
###################################################                                 
cat <<EOF> $TMPDIR/usr/local/tce.installed/${EXTNAM}                                
sudo -u tc mkdir /var/frr                                                        
EOF

# Delete compilation work directory

cd ..
#rm -r -f $WRKDIR

# Adjust directory access rigths

find $TMPDIR/ -type d | xargs chmod -v 755;

# Strip executables

find $TMPDIR | xargs file | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded

# Move files to doc extension

mkdir -p $TMPDIR-doc/usr/local/share/man/man1
mkdir -p $TMPDIR-doc/usr/local/share/man/man8
mkdir -p $TMPDIR-doc/usr/local/share/info

mv /tmp/frrouting/package/usr/local/share/man/man1/* $TMPDIR-doc/usr/local/share/man/man1        
mv /tmp/frrouting/package/usr/local/share/man/man8/* $TMPDIR-doc/usr/local/share/man/man8 
mv /tmp/frrouting/package/usr/local/share/info/* $TMPDIR-doc/usr/local/share/info      

###################################################                                     
# Create info file                                #                                      
###################################################                                      
cat <<EOF> /tmp/frrouting/${EXTNAM}-doc.tcz.info                                                            
Title:          ${EXTNAM}-doc.tcz                                                            
Description:    ${DOCDESCRIPTION}                                                           
Version:        ${VERSION}                                                               
Author:         ${AUTHORS}                                                               
Original-site:  ${HOMEPAGE}                                                              
Copying-policy: ${LICENSE}                                                               
Size:           ${size}                                                                  
Extension_by:   ${ME}                                                                    
Tags:           ${DOCTAGS}                                                                  
Comments:       Frr is a routing software package that provides TCP/IP based             
                routing services with routing protocols support such as RIPv1,           
                RIPv2, RIPng, OSPFv2, OSPFv3, IS-IS, BGP-4, and BGP-4+.                  
                Frr also supports special BGP Route Reflector and Route Server behavior. 
                In addition to traditional IPv4 routing protocols, Frr also supports     
                IPv6 routing protocols. With SNMP daemon which supports SMUX and                               
                AgentX protocol, Frr provides routing protocol MIBs.                     
                                                                                         
Change-log:     ${TODAY} First Version, ${VERSION}                                       
Current:        ${TODAY} First Version, ${VERSION}                                       
EOF


mkdir -p $TMPDIR-dev/usr/local/lib
mkdir -p $TMPDIR-dev/usr/local/include/frr

mv /tmp/frrouting/package/usr/local/lib/lib*a* $TMPDIR-dev/usr/local/lib                                                                                    
mv /tmp/frrouting/package/usr/local/include/frr/* $TMPDIR-dev/usr/local/include/frr/


###################################################                                                              
# Create info file                                #                                                              
###################################################                                                              
cat <<EOF> /tmp/frrouting/${EXTNAM}-dev.tcz.info                                                                 
Title:          ${EXTNAM}-dev.tcz                                                                                
Description:    ${DEVDESCRIPTION}                                                                                
Version:        ${VERSION}                                                                                       
Author:         ${AUTHORS}                                                                                       
Original-site:  ${HOMEPAGE}                                                                                      
Copying-policy: ${LICENSE}                                                                                       
Size:           ${size}                                                                                          
Extension_by:   ${ME}                                                                                            
Tags:           ${DEVTAGS}                                                                                       
Comments:       Frr is a routing software package that provides TCP/IP based                                     
                routing services with routing protocols support such as RIPv1,                                   
                RIPv2, RIPng, OSPFv2, OSPFv3, IS-IS, BGP-4, and BGP-4+.                                          
                Frr also supports special BGP Route Reflector and Route Server behavior.                         
                In addition to traditional IPv4 routing protocols, Frr also supports                             
                IPv6 routing protocols. With SNMP daemon which supports SMUX and                                 
                AgentX protocol, Frr provides routing protocol MIBs.                                             
                                                                                                                 
Change-log:     ${TODAY} First Version, ${VERSION}                                                               
Current:        ${TODAY} First Version, ${VERSION}                                                               
EOF


###################################################                                                              
# Create .dep file                                #                                                              
###################################################                                                              
cat <<EOF> /tmp/frrouting/${EXTNAM}-dev.tcz.dep                                                                      
ipv6-KERNEL.tcz                                                                                                  
frr.tcz
json-c-dev.tcz                                                                                                       
readline-dev.tcz                                                                                                     
libcares-dev.tcz                                                                                                     
EOF


###################################################
# Create base extension in temp dir               #
###################################################

cd $TMPDIR
find $TMPDIR -perm 777 -exec chmod 755 {} \;
find $TMPDIR -perm 555 -exec chmod 755 {} \;
find $TMPDIR -perm 444 -exec chmod 644 {} \;
find $TMPDIR -perm 666 -exec chmod 644 {} \;
find $TMPDIR -perm 664 -exec chmod 644 {} \;
sudo chown -R root:root $TMPDIR
sudo chown -R root:staff $TMPDIR/usr/local/tce.installed
sudo chmod -R 775 $TMPDIR/usr/local/tce.installed
#sudo chown tc:staff $TMPDIR/usr/local/var/frr
sudo chown tc:staff $TMPDIR/usr/local/etc/frr

cd ..
mksquashfs $TMPDIR $EXTNAM.tcz
cd $TMPDIR
sudo sh -c "find usr -not -type d > $EXTNAM.tcz.list"
sudo mv ../$EXTNAM.tcz .
sudo mv /tmp/frrouting/${EXTNAM}.tcz.info .
sudo mv /tmp/frrouting/${EXTNAM}.tcz.dep .

# Create md5 file

sudo sh -c "md5sum $EXTNAM.tcz > $EXTNAM.tcz.md5.txt"

# Cleanup temp directory

sudo rm -r -f usr

###################################################
# Create doc extension in temp dir                #
###################################################

cd $TMPDIR-doc
find $TMPDIR-doc -perm 777 -exec chmod 755 {} \;
find $TMPDIR-doc -perm 555 -exec chmod 755 {} \;
find $TMPDIR-doc -perm 444 -exec chmod 644 {} \;
find $TMPDIR-doc -perm 666 -exec chmod 644 {} \;
find $TMPDIR-doc -perm 664 -exec chmod 644 {} \;
sudo chown -R root:root $TMPDIR-doc
cd ..
mksquashfs $TMPDIR-doc $EXTNAM-doc.tcz
cd $TMPDIR-doc
sudo sh -c "find usr -not -type d > $EXTNAM-doc.tcz.list"
sudo mv ../$EXTNAM-doc.tcz .
sudo mv /tmp/frrouting/${EXTNAM}-doc.tcz.info .

# Create md5 file

sudo sh -c "md5sum $EXTNAM-doc.tcz > $EXTNAM-doc.tcz.md5.txt"

# Cleanup temp directory

sudo rm -r -f usr

###################################################                                                              
# Create dev extension in temp dir                #                                                              
###################################################                                                              
                                                                                                                 
cd $TMPDIR-dev                                                                                                   
find $TMPDIR-dev -perm 777 -exec chmod 755 {} \;                                                                 
find $TMPDIR-dev -perm 555 -exec chmod 755 {} \;                                                                 
find $TMPDIR-dev -perm 444 -exec chmod 644 {} \;                                                                 
find $TMPDIR-dev -perm 666 -exec chmod 644 {} \;                                                                 
find $TMPDIR-dev -perm 664 -exec chmod 644 {} \;                                                                 
sudo chown -R root:root $TMPDIR-dev                                                                              
cd ..                                                                                                            
mksquashfs $TMPDIR-dev $EXTNAM-dev.tcz                                                                           
cd $TMPDIR-dev                                                                                                   
sudo sh -c "find usr -not -type d > $EXTNAM-dev.tcz.list"                                                        
sudo mv ../$EXTNAM-dev.tcz .                                                                                     
sudo mv /tmp/frrouting/${EXTNAM}-dev.tcz.info .                                                                  
sudo mv /tmp/frrouting/${EXTNAM}-dev.tcz.dev .
                                                                                                                 
# Create md5 file                                                                                                
                                                                                                                 
sudo sh -c "md5sum $EXTNAM-dev.tcz > $EXTNAM-dev.tcz.md5.txt"                                                    
                                                                                                                 
# Cleanup temp directory                                                                                         
                                                                                                                 
sudo rm -r -f usr
