winpacket.sh 5.6 KB
#!/bin/bash

PACKAGE_NAME="pw3270"

cleanup() 
{
    #
    # Apaga diretorio temporário caso o script seja interrompido
    #
	cd ${myDIR}
	rm -fr ${TEMPDIR}
	rm -fr ${RUNTIMEDIR}
	exit -1
}

failed()
{
	echo -e "\e]2;Failed!\a"
	echo $1
	cleanup	
}

#
# Copia pacote gerado
#
# $1 = Arquitetura (i686/x86_64)
# $2 = Tipo do link
#
CopyPacket()
{
	#
	# Primeiro move a versão baseada no runtime
	#
	FILENAME=$(find nsi -maxdepth 1 -name "${PACKAGE_NAME}-*-requires-gtk-*-${1}.exe" | head --lines 1)

	if [ ! -z ${FILENAME} ]; then

		mkdir -p ${DESTDIR}/${1}

		echo "Copiando ${FILENAME} para ${DESTDIR}/${1}"

		mv "${FILENAME}" "${DESTDIR}/${1}"
		if [ "$?" != "0" ]; then
			echo "src=${FILENAME}"
			echo "dst=${DESTDIR}/${1}"
			failed "Erro ao copiar instalador sem o runtime"
		fi

		#
		# Cria link do pacote sem GTK para "latest"
		#
		ln -sf $(basename ${FILENAME}) ${DESTDIR}/${1}/${PACKAGE_NAME}-without-gtk-${2}-${1}.exe
		if [ "$?" != "0" ]; then
			failed "Erro ao criar o link simbólico"
		fi


	fi

	#
	# Depois copia o pacote completo
	#
	FILENAME=$(find nsi -maxdepth 1 -name "${PACKAGE_NAME}-*-gtk-*-${1}.exe" | head --lines 1)

	if [ ! -z ${FILENAME} ]; then

		mkdir -p ${DESTDIR}/${1}

		echo "Copiando ${FILENAME} para ${DESTDIR}/${1}"

		mv "${FILENAME}" "${DESTDIR}/${1}"
		if [ "$?" != "0" ]; then
			echo "src=${FILENAME}"
			echo "dst=${DESTDIR}/${1}"
			failed "Erro ao copiar instalador completo"
		fi

		#
		# Cria link do pacote completo para "latest"
		#
		ln -sf $(basename ${FILENAME}) ${DESTDIR}/${1}/${PACKAGE_NAME}-with-gtk-${2}-${1}.exe
		if [ "$?" != "0" ]; then
			failed "Erro ao criar o link simbólico"
		fi

	fi

}


#
# Gera pacote windows
#
# $1 = Arquitetura (x86_32/x86_64)
#
build()
{
	echo -e "\e]2;${PACKAGE_NAME}-${1}\a"

	case ${1} in
	x86_32)
		host=i686-w64-mingw32
		host_cpu=i686
		prefix=/usr/i686-w64-mingw32/sys-root/mingw
		tools=i686-w64-mingw32
		;;

	x86_64)
		host=x86_64-w64-mingw32
		host_cpu=x86_64
		prefix=/usr/x86_64-w64-mingw32/sys-root/mingw
		tools=x86_64-w64-mingw32
		;;


	*)
		failed "Arquitetura desconhecida: ${1}"

	esac

	# Detecto argumentos
	ARGS=""

	REXXCONFIG=$(which ${tools}-oorexx-config)
	if [ -z ${REXXCONFIG} ]; then
		echo "Desabilitando suporte ooRexx"
		ARGS="${ARGS} --disable-rexx"
	fi

	./configure \
		--cache-file=.${1}.cache \
		--host=${host} \
		--prefix=${prefix} \
		${ARGS}
 
	if [ "$?" != "0" ]; then
		failed "Erro ao configurar"
	fi

	make clean
	rm -f *.exe

	make -C nsi ${PACKAGE_NAME}-${host_cpu}.nsi
	if [ "$?" != "0" ]; then
		failed "Erro ao gerar script de empacotamento windows"
	fi

	make Release
	if [ "$?" != "0" ]; then
		failed "Erro ao compilar fontes"
	fi

	ln -sf .${prefix}/share/locale .bin/Release/locale
	if [ "$?" != "0" ]; then
		failed "Erro ao criar link para traduções"
	fi

	if [ "${COMPLETE}" != "0" ]; then

		# Gera pacote completo

		chmod +x makegtkruntime.sh
		./makegtkruntime.sh
		if [ "$?" != "0" ]; then
			failed "Erro ao construir runtime gtk"
		fi

		echo -e "\e]2;${PACKAGE_NAME}-install-${host_cpu}.exe\a"
		make -C nsi package
		if [ "$?" != "0" ]; then
			failed "Erro ao gerar pacote windows"
		fi

	fi

	if [ "${RUNTIME}" != "0" ]; then

		make -C nsi package-no-gtk
		if [ "$?" != "0" ]; then
			failed "Erro ao gerar pacote windows"
		fi

	fi

	CopyPacket ${host_cpu} "latest"

	make clean
	rm -f *.exe

}

myDIR=$(readlink -f $(dirname $0))
TEMPDIR=$(mktemp -d)
DESTDIR=${HOME}/public_html/win
RUNTIMEDIR=$(mktemp -d)
ARCHS="x86_32 x86_64"
RUNTIME=1
COMPLETE=1

trap cleanup INT 

until [ -z "$1" ]
do
	if [ ${1:0:2} = '--' ]; then
		tmp=${1:2}
		parameter=${tmp%%=*}
		parameter=$(echo $parameter | tr "[:lower:]" "[:upper:]")

		case $parameter in

		32)
			ARCHS="x86_32"
			;;

		64)
			ARCHS="x86_64"
			;;

		FULL)
			RUNTIME=0
			COMPLETE=1
			;;

		RT)
			RUNTIME=1
			COMPLETE=0
			;;

		NAME)
			PACKAGE_NAME=$value
			;;

		OUT)
			DESTDIR=$value
			;;

		ARCH)
			value=${tmp##*=}
			ARCHS=$value
			;;

		*)
			value=${tmp##*=}
			eval $parameter=$value
		esac

	fi

	shift
done

# Configura
aclocal
if [ "$?" != "0" ]; then
	exit -1
fi

autoconf
if [ "$?" != "0" ]; then
	exit -1
fi

# Gera pacotes
for i in ${ARCHS}; do

	build "${i}"

done

if [ "${RUNTIME}" == "1" ]; then

	echo -e "\e]2;Baixando runtime\a"

	#
	# Puxo scripts de construção do GTK direto da sourceforge.
	#
	cd ${RUNTIMEDIR}
	git clone http://git.code.sf.net/p/gtk3win/code .
	if [ "$?" != "0" ]; then
		exit -1
	fi

	for i in ${ARCHS}; do

		echo -e "\e]2;gtk-runtime-${i}\a"

		case ${i} in
		x86_32)
			host_cpu=i686
			./win32.sh
			if [ "$?" != "0" ]; then
				exit -1
			fi
			;;

		x86_64)
			host_cpu=x86_64
			./win64.sh
			if [ "$?" != "0" ]; then
				exit -1
			fi
			;;

		*)
			echo "Arquitetura desconhecida ${i}"
			exit -1

		esac

		rm -f gtk-runtime-*-${host_cpu}.exe


		chmod +x ./makeruntime.sh

		./makeruntime.sh
		if [ "$?" != "0" ]; then
			exit -1
		fi

		# Copia o pacote gerado
		FILENAME=$(find . -maxdepth 1 -name "gtk-runtime-*-${host_cpu}.exe" | head --lines 1)

		mkdir -p ${DESTDIR}/${host_cpu}

		mv gtk-runtime-*-${host_cpu}.exe ${DESTDIR}/${host_cpu}
		if [ "$?" != "0" ]; then
			failed "Erro ao copiar instalador"
		fi

		ln -sf $(basename ${FILENAME}) "${DESTDIR}/${host_cpu}/gtk-runtime-latest-${host_cpu}.exe"
		if [ "$?" != "0" ]; then
			failed "Erro ao criar o link simbólico"
		fi

	done

fi

cd $myDIR
rm -fr ${TEMPDIR}
rm -fr ${RUNTIMEDIR}

# Gera pacotes para envio ao SPB
zip -9 -r -j	${HOME}/public_html/win/${PACKAGE_NAME}-latest.zip \
				${HOME}/public_html/win/x86_32/${PACKAGE_NAME}-with-gtk-latest-i686.exe \
				${HOME}/public_html/win/x86_64/${PACKAGE_NAME}-with-gtk-latest-x86_64.exe 

echo -e "\e]2;Success!\a"