#!/bin/bash
#
# Builds LDAP Account Manager packages.

if [ $# -lt 1 ]
then
echo -e "Usage: buildPackage <tag>, buildPackage develop, buildPackage -b branch"
exit
fi

set -e

if [ "$1" = "develop" ]
then
	export REPO_BRANCH="develop"
elif [ "$1" = "-b" ]
then
	export REPO_BRANCH="$2"
else
	export REPO_BRANCH="$1"
fi

# minifies the JavaScript files
function minify {
	local dir="$1"
	echo "Minify JS files in $dir"
	local outFile=$dir/100_lam.${VERSION}.min.js
	local files=`ls $dir/*.js`
	local jsFiles=""
	for file in $files; do
		jsFiles="$jsFiles $file"
	done
	terser $jsFiles -o $outFile
	rm $files
	# add final new line to supress Debian warnings
	echo "" >> $outFile
}

# minifies the CSS files
function minifyCSS {
	local dir="$1"
	echo "Minify CSS files in $dir"
	local outFile=$dir/100_lam.${VERSION}.min.css
	local files=`ls $dir/*.css`
	cat $files | cleancss -o $outFile
	rm $files
	# add final new line to supress Debian warnings
	echo "" >> $outFile
}

echo "Getting files..."
git clone --depth 1 -b $REPO_BRANCH --single-branch git@github.com:LDAPAccountManager/lam.git github
cd github
mv lam ../
mv lam-packaging ../
cd ..
rm -rf github

git clone --depth 1 -b $REPO_BRANCH --single-branch git@gitlab.com:LDAPAccountManager/lamPro.git lamPro
cd lamPro
rm -rf .git
rm -rf docker
cd ..

cp lam-packaging/getVersion ./
export VERSION=`./getVersion`

# remove files which are not in the final release
rm -r lam/po
rm -r lam/tests
rm -f lam/lib/3rdParty/tcpdf/fonts/*.ttf
rm -r lam/lib/3rdParty/composer/nesbot/carbon/bin
chmod -R -x+X lam/lib/3rdParty
rm lam/composer*
rm lam/sbom*
find . -name .svnignore -exec rm {} \;
find . -name .gitignore -exec rm {} \;
find lam/lib/3rdParty -name LICENSE -exec rm {} \;
find lam/lib/3rdParty -name README.md -exec rm {} \;
find lam/lib/3rdParty -name readme.md -exec rm {} \;
find lam/lib/3rdParty -name SECURITY.md -exec rm {} \;
find lam/lib/3rdParty -name CHANGELOG.md -exec rm {} \;
find lam/lib/3rdParty -name CHANGELOG.txt -exec rm {} \;
find lam/lib/3rdParty -name CODE_OF_CONDUCT.md -exec rm {} \;
find lam/lib/3rdParty -name .github | xargs rm -r
find lam/lib/3rdParty -name .gitattributes | xargs rm -r
find lam/lib/3rdParty -name .phpstorm.meta.php | xargs rm -r
mv lam ldap-account-manager-$VERSION

# create LAM manual
cd ldap-account-manager-$VERSION/docs/manual-sources
./make.sh
cd ../../..
rm -r ldap-account-manager-$VERSION/docs/manual-sources

# create LAM Pro build directory
mkdir LAMPro
cp -a ldap-account-manager-$VERSION LAMPro/ldap-account-manager-$VERSION
cp -a lamPro/* LAMPro/ldap-account-manager-$VERSION
rm -r lamPro

# create Debian build dirs
mkdir Debian
mkdir LAMPro/Debian

rm ldap-account-manager-$VERSION/phpdoc.sh
rm LAMPro/ldap-account-manager-$VERSION/phpdoc.sh

# tar.bz2
cp lam-packaging/autoconf/configure.ac ldap-account-manager-$VERSION/
cp lam-packaging/autoconf/Makefile.in ldap-account-manager-$VERSION/
cd ldap-account-manager-$VERSION
touch install.sh
perl -pi -e "s/\\@\\@VERSION\\@\\@/$VERSION/g" configure.ac
autoconf
rm -r autom4te.cache
cd ..
# Debian gets orig.tar.bz2 with original JS files
tar cfj ldap-account-manager-$VERSION.tar.bz2 --owner=root --group=root --mtime=now ldap-account-manager-$VERSION
mv ldap-account-manager-$VERSION.tar.bz2 Debian/ldap-account-manager_$VERSION.orig.tar.bz2
cp -ar ldap-account-manager-$VERSION Debian/
# build other packages with minified JS files
minify ldap-account-manager-$VERSION/templates/lib
minifyCSS ldap-account-manager-$VERSION/style
tar cfj ldap-account-manager-$VERSION.tar.bz2 --owner=root --group=root --mtime=now ldap-account-manager-$VERSION
rm -r ldap-account-manager-$VERSION

# tar.bz2 of LAM Pro
cd LAMPro
cp ../lam-packaging/autoconf/configure.ac ldap-account-manager-$VERSION/
cp ../lam-packaging/autoconf/Makefile.in ldap-account-manager-$VERSION/
cd ldap-account-manager-$VERSION
touch install.sh
perl -pi -e "s/\\@\\@VERSION\\@\\@/$VERSION/g" configure.ac
autoconf
rm -r autom4te.cache
cd ..
# Debian gets orig.tar.bz2 with original JS files
tar cfj ldap-account-manager-$VERSION.tar.bz2 --owner=root --group=root --mtime=now ldap-account-manager-$VERSION
mv ldap-account-manager-$VERSION.tar.bz2 Debian/ldap-account-manager_$VERSION.orig.tar.bz2
cp -ar ldap-account-manager-$VERSION Debian/
# build other packages with minified JS files
minify ldap-account-manager-$VERSION/templates/lib
minifyCSS ldap-account-manager-$VERSION/style
tar cfj ldap-account-manager-$VERSION.tar.bz2 --owner=root --group=root --mtime=now ldap-account-manager-$VERSION
rm -r ldap-account-manager-$VERSION
cd ..

# Debian
cp -r lam-packaging/debian Debian/ldap-account-manager-$VERSION/
cd Debian/ldap-account-manager-$VERSION
pdebuild --auto-debsign --debsign-k 478730308FBD512ADF09D38E7F3D136B2BCD7990
mv /var/cache/pbuilder/result/* ../
cd ..
rm -r ldap-account-manager-$VERSION
cd ..
mkdir Debian-Upload
cp Debian/*.dsc Debian/*.orig.tar.bz2 Debian/*source.changes Debian/*.debian.tar.xz Debian-Upload

# Debian for LAM Pro
cd LAMPro
cp -r ../lam-packaging/debian Debian/ldap-account-manager-$VERSION/
cd Debian/ldap-account-manager-$VERSION
pdebuild --auto-debsign --debsign-k 478730308FBD512ADF09D38E7F3D136B2BCD7990
mv /var/cache/pbuilder/result/* ../
cd ..
rm -r ldap-account-manager-$VERSION
cd ..
cd ..

# RPM
perl -pi -e "s/\\@\\@VERSION\\@\\@/$VERSION/g" lam-packaging/RPM/ldap-account-manager.spec

cp lam-packaging/RPM/ldap-account-manager.spec lam-packaging/RPM/ldap-account-manager-fedora.spec
perl -pi -e "s/\\@\\@DISTRIBUTION\\@\\@/fedora/g" lam-packaging/RPM/ldap-account-manager-fedora.spec
perl -pi -e "s/\\@\\@USER\\@\\@/apache/g" lam-packaging/RPM/ldap-account-manager-fedora.spec
perl -pi -e "s/\\@\\@GROUP\\@\\@/apache/g" lam-packaging/RPM/ldap-account-manager-fedora.spec
perl -pi -e "s/\\@\\@HTTP_CONF_DIR\\@\\@/\\/etc\\/httpd\\/conf.d/g" lam-packaging/RPM/ldap-account-manager-fedora.spec

cp lam-packaging/RPM/ldap-account-manager.spec lam-packaging/RPM/ldap-account-manager-suse.spec
perl -pi -e "s/\\@\\@DISTRIBUTION\\@\\@/suse/g" lam-packaging/RPM/ldap-account-manager-suse.spec
perl -pi -e "s/\\@\\@USER\\@\\@/wwwrun/g" lam-packaging/RPM/ldap-account-manager-suse.spec
perl -pi -e "s/\\@\\@GROUP\\@\\@/www/g" lam-packaging/RPM/ldap-account-manager-suse.spec
perl -pi -e "s/\\@\\@HTTP_CONF_DIR\\@\\@/\\/etc\\/apache2\\/conf.d/g" lam-packaging/RPM/ldap-account-manager-suse.spec

mkdir RPM
mkdir LAMPro/RPM


# Fedora RPM
cp ldap-account-manager-$VERSION.tar.bz2 ~/rpmbuild/SOURCES
cp lam-packaging/RPM/lam.apache.conf ~/rpmbuild/SOURCES
cp lam-packaging/RPM/lam.nginx.conf ~/rpmbuild/SOURCES
rpmbuild --clean --rmsource -bb lam-packaging/RPM/ldap-account-manager-fedora.spec
mv ~/rpmbuild/RPMS/noarch/ldap-account-manager*-$VERSION-*1.noarch.rpm RPM/

# Fedora RPM for LAM Pro
cd LAMPro
cp ldap-account-manager-$VERSION.tar.bz2 ~/rpmbuild/SOURCES/ldap-account-manager-$VERSION.tar.bz2
cp ../lam-packaging/RPM/lam.apache.conf ~/rpmbuild/SOURCES
cp ../lam-packaging/RPM/lam.nginx.conf ~/rpmbuild/SOURCES
rpmbuild --clean --rmsource -bb ../lam-packaging/RPM/ldap-account-manager-fedora.spec
mv ~/rpmbuild/RPMS/noarch/ldap-account-manager*-$VERSION-*1.noarch.rpm RPM/
cd ..

# Suse RPM
cp ldap-account-manager-$VERSION.tar.bz2 ~/rpmbuild/SOURCES
cp lam-packaging/RPM/lam.apache.conf ~/rpmbuild/SOURCES
cp lam-packaging/RPM/lam.nginx.conf ~/rpmbuild/SOURCES
rpmbuild --clean --rmsource -bb lam-packaging/RPM/ldap-account-manager-suse.spec
mv ~/rpmbuild/RPMS/noarch/ldap-account-manager*-$VERSION-*1.noarch.rpm RPM/

# Suse RPM for LAM Pro
cd LAMPro
cp ldap-account-manager-$VERSION.tar.bz2 ~/rpmbuild/SOURCES/ldap-account-manager-$VERSION.tar.bz2
cp ../lam-packaging/RPM/lam.apache.conf ~/rpmbuild/SOURCES
cp ../lam-packaging/RPM/lam.nginx.conf ~/rpmbuild/SOURCES
rpmbuild --clean --rmsource -bb ../lam-packaging/RPM/ldap-account-manager-suse.spec
mv ~/rpmbuild/RPMS/noarch/ldap-account-manager*-$VERSION-*1.noarch.rpm RPM/
cd ..

rpmsign --addsign RPM/*.rpm LAMPro/RPM/*.rpm

# generate checksum files
sha256sum *.tar.bz2 >> checksums.txt
cd RPM
sha256sum *.rpm >> ../checksums.txt
cd ../Debian
sha256sum *.deb >> ../checksums.txt
cd ..

# generate checksum files for LAM Pro
cd LAMPro
sha256sum *.tar.bz2 >> checksums.txt
cd RPM
sha256sum *.rpm >> ../checksums.txt
cd ../Debian
sha256sum *.deb >> ../checksums.txt
cd ../..

# create result folders
mkdir LAM-packages
mkdir LAM-packages/logs
mv Debian/*.deb LAM-packages/
mv Debian/* LAM-packages/logs/
mv Debian-Upload LAM-packages/
mv RPM/*.rpm LAM-packages/
mv checksums.txt LAM-packages/
mv *.tar.bz2 LAM-packages/

mkdir LAMPro-packages
mkdir LAMPro-packages/logs
mv LAMPro/Debian/*.deb LAMPro-packages/
mv LAMPro/Debian/* LAMPro-packages/logs/
mv LAMPro/RPM/*.rpm LAMPro-packages/
mv LAMPro/checksums.txt LAMPro-packages/
mv LAMPro/*.tar.bz2 LAMPro-packages/

# clean up
rm -r lam-packaging
rm getVersion
rm -f *.log
rm -r LAMPro
rm -r Debian
rm -r RPM

# run lintian
lintian --tag-display-limit 0 LAM-packages/Debian-Upload/*.dsc
