#!/bin/sh
#$Id: simsys_archive,v 1.52 2023/03/14 02:36:34 marcum Exp $

#*******************************************************************************
# Create package archive for SimSys files.
#*******************************************************************************

# ==============================================================================
# Required definitions
# ==============================================================================

script_path="`readlink $0`"

if [ "${script_path}" = "" ]; then

	script_path="$0"
fi

# ==============================================================================
# Include required functions
# ==============================================================================

. "`dirname ${script_path}`/script_functions/set_tmp_dir"
. "`dirname ${script_path}`/script_functions/set_current_arch_type"
. "`dirname ${script_path}`/script_functions/output_arch_type"
. "`dirname ${script_path}`/script_functions/set_version_dir"
. "`dirname ${script_path}`/script_functions/set_package_list"
. "`dirname ${script_path}`/script_functions/output_package_info"
. "`dirname ${script_path}`/script_functions/set_sys_dir"
. "`dirname ${script_path}`/script_functions/get_version"

#===============================================================================
# Help function
#===============================================================================

my_list_usage ()
{
	echo "
Usage:

`basename $0` [-h,-help] [-host] [-host_list list] [-arch] [-quiet]
		[-v version_name] [-encrypt key_ID] [-vname vname]
		[-doc names] [-exe names] [-include names] [-include2 names]
		[-interface names] [-lib names] [-dlib names] [-src names] 
		[-specific names] [-sbin] [-${USER}] [package]

Create package archive of SimSys files.

   -h			: list usage
   -help		: list usage
   -host		: create archive for `output_arch_type -b` architecture only
			  (the default is to create individual archives for all
			   `output_arch_type -ab` architectures)
   -host_list list	: create archive for architecture(s) in \"list\" only
			  (`output_arch_type -ab| sed s/\ /,/g` are supported)
			  (the host list must be comma separated)
			  (the default is to create individual archives for all
			   `output_arch_type -ab` architectures)
   -arch		: create separate archives for each architecture(s)
			  specified by -host, -host_list, or the default
			  (the default is to create individual archives for all
			   `output_arch_type -ab` architectures)
   -quiet		: minimize output
   -v version_name	: use \"version_name\" system directory for all
			  files included within archive
   -encrypt key_ID	: use OpenPGP to encrypt archive using the public
			  key associated with ID \"key_ID\"
   -vname vname		: use executable \"vname\" to determine a version number
			  for the archive name suffix
   -doc names		: include the \"name\" documentation files in
			  SimSys_system_directory/doc/name/
   -exe names		: include \"name\" executable files in
			  SimSys_system_directory/*/bin/
   -include names	: include \"name\" include files in
			  SimSys_system_directory/src/name/
   -include2 names	: include \"name\" only build related include files in
			  SimSys_system_directory/src/name/
   -interface names	: include \"name\" interface files in
			  SimSys_system_directory/interface/name/
   -lib names		: include \"name\" static library files in
			  SimSys_system_directory/*/lib/
   -dlib names		: include \"name\" dynamic library files in
			  SimSys_system_directory/*/lib/
   -src names		: include \"name\" source files in
			  SimSys_system_directory/src/name/
   -specific names	: include \"name\" specific files in
			  SimSys_system_directory/name/
   -sbin		: include SimSys developer script files in
			  SimSys_system_directory/sbin/
   -${USER}		: include ${USER} script files in
			  $HOME/bin
   package		: create predefined package archive for /"package/"
			  (the default is to create a package archive for the
			  files specified by the options -doc, -exe, -include,
			  -include2, -interface, -lib, -dlib, -src, -specific,
			  -sbin, and/or -${USER})

   Note that in the above option flags \"names\" may be either a single name or
   a list of names that are separated by commas. However, only one package
   archive is created for all specified files or packages.

Examples:

   `basename $0` -exe prog1,prog2		: create a package archive with
						  label prog1 for prog1 and
						  prog2 executable files

   `basename $0` -exe prog1,prog2 prog3		: create a package archive with
						  label prog1 for prog1 and
						  prog2 executable files and
						  prog3 source files

   `basename $0` -lib prog1,prog2 -src prog3	: create a package archive with
						  label prog1 for prog1 and
						  prog2 static library files and
						  prog3 source files

   `basename $0` AFLR3				: create package archive with
						  label AFLR3 for AFLR3 package
						  files

   `basename $0` ug ug2				: create package archive with
						  label ug for ug and ug2 source
						  files
`output_package_info`
" | less
}

#===============================================================================
# Function to convert a single input argument into a list of arguments
# input
# 	$1 : option flag
# 	$2 : comma separated list
# 	$3 : option flag again if it is to be included in output list
# output
#	list : list of arguments
#===============================================================================

convert_list ()
{
	if [ "$2 " = "" ]; then

		echo ""
		echo "*** option $1 also requires a name or list of names ***"
		my_list_usage
		exit
	fi

	ifs_def="${IFS}"

	IFS=" ,"

	if [ "$3 " = "" ]; then

		flag=$1
	else
		flag=
	fi

	list=

	for item in $2; do

		IFS="${ifs_def}"

		list="$list $3 $item"

		IFS=" ,"
	done

	IFS="${ifs_def}"
}

#===============================================================================
# Function to create a tmp directory of files for archive
# input
# 	$1 : package archive types
# 	$2 : package archive names
# 	$3 : if set then use test mode for exe, lib, or dlib types
#
# 	arch_dirs
# 	file_info_list
# 	number_of_items
#	number_of_exe_items (only for test mode)
#	number_of_lib_items (only for test mode)
#	archive_arch
# 	ref_archive_name
# 	script_dir
# 	sys_dir
# 	tmp_dir
# 	version_number_list
# output
# 	file_info_list
# 	file_label
# 	name_label
# 	number_of_items
#	number_of_exe_items (only for test mode)
#	number_of_lib_items (only for test mode)
# 	ref_archive_name
# 	version_number_list
#===============================================================================

create_tmp_files ()
{
	ifs_def="$IFS"

	exclude_list="-C --exclude=Obsolete --exclude=Save --exclude=Testing --exclude=docx --exclude=*.dSYM --exclude=*_g.a --exclude *_g.exe --exclude=*_gs.a --exclude *_gs.exe --exclude=*_p.a --exclude *_p.exe"

	case "$1"
	in

		doc|interface|src)

			IFS=" ,"

			rsync -ptd ${sys_dir}/$1 ${tmp_dir} 2> /dev/null

			for name in $2; do

				IFS="${ifs_def}"

				rsync -ptLr ${exclude_list} ${sys_dir}/$1/${name}/ ${tmp_dir}/$1/${name} 2> /dev/null

				if [ "${name}" = "system" ] && [ "$1" = "doc" ]; then

					rsync -pt ${sys_dir}/doc/system/README.pdf ${tmp_dir} 2> /dev/null
					rsync -pt ${sys_dir}/doc/system/License.pdf ${tmp_dir} 2> /dev/null
					rsync -pt ${sys_dir}/doc/system/OpenLicense.pdf ${tmp_dir} 2> /dev/null

					rsync -ptLd ${sys_dir}/bin ${tmp_dir} 2> /dev/null

					if [ "${archive_arch}" != "WIN" ]; then

						rsync -pt ${sys_dir}/sbin/simsys_doc ${tmp_dir}/bin 2> /dev/null
					else
						rsync -pt ${sys_dir}/sbin/simsys_doc.bat ${tmp_dir}/bin 2> /dev/null
					fi
				fi

				version_number="`get_version -$1 ${name}`"

				version_number_list="${version_number_list} ${version_number}"

				if [ "${quiet_mode}" = "" ]; then
					echo "${name} ${version_number} $1 files added to package directory..."
				fi

				file_info_list="${file_info_list}
${name} ${version_number} $1 files"

				IFS=" ,"
			done

			IFS="${ifs_def}"
			;;

		exe)

			version_number=

			for arch_dir in ${arch_dirs}; do

				if [ ! "$3" ]; then

					if [ "${archive_arch}" = "single" ]; then

						rsync -ptLd ${sys_dir}/${arch_dir} ${tmp_dir} 2> /dev/null
						rsync -ptLd ${sys_dir}/${arch_dir}/bin ${tmp_dir}/${arch_dir} 2> /dev/null
					else
						rsync -ptLd ${sys_dir}/${arch_dir}/bin ${tmp_dir} 2> /dev/null
					fi
				fi

				IFS=" ,"

				for name in $2; do

					IFS="${ifs_def}"

					if [ -x "${sys_dir}/${arch_dir}/bin/${name}.exe" ] || [ -L "${sys_dir}/${arch_dir}/bin/${name}.exe" ]; then

						if [ "$3" ]; then

							number_of_exe_items=`expr ${number_of_exe_items} + 1`
						fi

						if [ "${archive_arch}" = "single" ]; then

							if [ ! "$3" ]; then

								rsync -ptL ${sys_dir}/${arch_dir}/bin/${name}.exe ${tmp_dir}/${arch_dir}/bin 2> /dev/null
							fi

						elif [ "${archive_arch}" != "WIN" ] && [ ! "$3" ]; then

							rsync -ptL --ignore-existing ${sys_dir}/${arch_dir}/bin/${name}.exe ${tmp_dir}/bin/${name} 2> /dev/null

						elif [ ! "$3" ]; then

							rsync -ptL --ignore-existing ${sys_dir}/${arch_dir}/bin/${name}.exe ${tmp_dir}/bin 2> /dev/null
						fi

						if [ ! "$3" ]; then

							if [ "${version_number}" = "" ]; then

								version_number="`get_version -exe ${name}`"

								version_number_list="${version_number_list} ${version_number}"
							fi

							if [ "${quiet_mode}" = "" ]; then
								echo "${name} ${version_number} ${arch_dir} $1 file added to package directory..."
							fi

							file_info_list="${file_info_list}
${name} ${version_number} ${arch_dir} $1 file"
						fi
					fi

					IFS=" ,"
				done

				IFS="${ifs_def}"
			done
			;;

		include|include2)

			rsync -ptd ${sys_dir}/src ${tmp_dir}

			IFS=" ,"

			for name in $2; do

				IFS="${ifs_def}"

				rsync -ptd ${sys_dir}/src/${name} ${tmp_dir}/src 2> /dev/null
				rsync -pt ${sys_dir}/src/${name}/*.compile ${tmp_dir}/src/${name} 2> /dev/null
				rsync -pt ${sys_dir}/src/${name}/*.compile_lib ${tmp_dir}/src/${name} 2> /dev/null
				rsync -pt ${sys_dir}/src/${name}/*.lib_list ${tmp_dir}/src/${name} 2> /dev/null
				rsync -pt ${sys_dir}/src/${name}/*.pdf ${tmp_dir}/src/${name} 2> /dev/null
				rsync -pt ${sys_dir}/src/${name}/*.txt ${tmp_dir}/src/${name} 2> /dev/null

				if [ "$1" = "include" ]; then

					rsync -pt ${sys_dir}/src/${name}/*.h ${tmp_dir}/src/${name} 2> /dev/null
					rsync -pt ${sys_dir}/src/${name}/*.H ${tmp_dir}/src/${name} 2> /dev/null
					rsync -pt ${sys_dir}/src/${name}/*.HPP ${tmp_dir}/src/${name} 2> /dev/null

					if [ -d "${sys_dir}/src/${name}/main" ]; then

						rsync -ptr ${exclude_list} ${sys_dir}/src/${name}/main/ ${tmp_dir}/src/${name}/main 2> /dev/null
					fi

					package_src_inclue_file="${sys_dir}/src/${name}/${name}.package"

					if [ -r "${package_src_inclue_file}" ]; then

						. ${package_src_inclue_file}

						for file in ${src_include_file_list}; do

							rsync -pt ${sys_dir}/src/${name}/${file} ${tmp_dir}/src/${name} 2> /dev/null
						done

						rsync -pt ${package_src_inclue_file} ${tmp_dir}/src/${name} 2> /dev/null
					fi
				fi

				version_number="`get_version -include ${name}`"

				version_number_list="${version_number_list} ${version_number}"

				if [ "${quiet_mode}" = "" ]; then
					echo "${name} ${version_number} $1 files added to package directory..."
				fi

				file_info_list="${file_info_list}
${name} ${version_number} $1 files"

				IFS=" ,"
			done

			IFS="${ifs_def}"
			;;

		lib|dlib)

			version_number=

			for arch_dir in ${arch_dirs}; do

				if [ "$1" = "lib" ]; then

					if [ "`echo ${arch_dir} | grep WIN`" != "" ]; then
						prefix=
						suffix=.lib
					else
						prefix=lib
						suffix=.a
					fi

					lib_dir=${arch_dir}/lib

					if [ ! "$3" ]; then

						rsync -ptd ${sys_dir}/${arch_dir} ${tmp_dir} 2> /dev/null
						rsync -ptd ${sys_dir}/${arch_dir}/lib ${tmp_dir}/${arch_dir} 2> /dev/null
					fi

				else
					if [ "`echo ${arch_dir} | grep WIN`" != "" ]; then
						prefix=
						suffix=.dll

					elif [ "`echo ${arch_dir} | grep MacOSX`" != "" ]; then
						prefix=lib
						suffix=.dylib
					else
						prefix=lib
						suffix=.so
					fi

					lib_dir=${arch_dir}/bin

					if [ ! "$3" ]; then

						if [ "${archive_arch}" = "single" ]; then

							rsync -ptd ${sys_dir}/${arch_dir} ${tmp_dir} 2> /dev/null
							rsync -ptd ${sys_dir}/${arch_dir}/bin ${tmp_dir}/${arch_dir} 2> /dev/null
						else
							rsync -ptd ${sys_dir}/${arch_dir}/bin ${tmp_dir} 2> /dev/null
						fi
					fi
				fi

				IFS=" ,"

				for name in $2; do

					IFS="${ifs_def}"

					lib_files="${sys_dir}/${lib_dir}/${prefix}${name}*${suffix}*"

					for lib_file in ${lib_files}; do

						if [ "`echo ${lib_file}| grep _g.a`" = "" ] && [ "`echo ${lib_file}| grep _gs.a`" = "" ]; then

							if [ -f "${lib_file}" ] || [ -L "${lib_file}" ]; then

								if [ "$3" ]; then

									number_of_lib_items=`expr ${number_of_lib_items} + 1`
								else
									if [ "$1" = "lib" ] || [ "${archive_arch}" = "single" ]; then

										rsync -pt ${lib_file} ${tmp_dir}/${lib_dir} 2> /dev/null

										if [ "$1" = "dlib" ] && [ "${suffix}" = ".dll" ]; then

											def_file="`echo ${lib_file}| sed s/\.dll/.def/`"

											if [ -f "${def_file}" ]; then
												rsync -pt ${def_file} ${tmp_dir}/${lib_dir} 2> /dev/null
											fi
										fi
									else
										rsync -pt ${lib_file} ${tmp_dir}/bin 2> /dev/null
									fi

									if [ "${version_number}" = "" ]; then

										version_number="`get_version -lib ${name}`"

										version_number_list="${version_number_list} ${version_number}"
									fi

									if [ "${quiet_mode}" = "" ]; then
										echo "${name} ${version_number} ${arch_dir} $1 file added to package directory..."
									fi

									file_info_list="${file_info_list}
${name} ${version_number} ${arch_dir} $1 file"
								fi
							fi
						fi
					done

					IFS=" ,"
				done

				IFS="${ifs_def}"
			done
			;;

		sbin)

			rsync -ptr ${exclude_list} ${sys_dir}/sbin/ ${tmp_dir}/sbin 2> /dev/null

			version_number="`get_version -sbin`"

			version_number_list="${version_number_list} ${version_number}"

			if [ "${quiet_mode}" = "" ]; then
				echo "$1 ${version_number} files added to package directory..."
			fi

			file_info_list="${file_info_list}
$1 ${version_number} files"

			;;

		specific)

			IFS=" ,"

			for name in $2; do

				IFS="${ifs_def}"

				rsync -ptr ${exclude_list} ${sys_dir}/${name}/ ${tmp_dir}/${name} 2> /dev/null

				if [ "${quiet_mode}" = "" ]; then
					echo "${name} files added to package directory..."
				fi

				file_info_list="${file_info_list}
${name} files"

				IFS=" ,"
			done

			IFS="${ifs_def}"
			;;

		$USER)

			rsync -ptr ${exclude_list} ${HOME}/bin/ ${tmp_dir}/bin 2> /dev/null

			if [ "${quiet_mode}" = "" ]; then
				echo "${USER} ${version_number} script files added to package directory..."
			fi

			file_info_list="${file_info_list}
${USER} ${version_number} script files"
			;;
	esac

	name_label=$2

	if [ ! "$3" ]; then

		file_label=$1

		number_of_items=`expr ${number_of_items} + 1`

		if [ "${ref_archive_name}" = "" ]; then

			IFS=" ,"

			for name in $2; do

				ref_archive_name=$name
				break
			done

			IFS="${ifs_def}"
		fi
	fi
}

#===============================================================================
# Main script
#===============================================================================

starting_dir=`pwd`

set_tmp_dir
set_sys_dir
set_current_arch_type

#-------------------------------------------------------------------------------
# Set package definition list
#-------------------------------------------------------------------------------

set_package_list -all

#-------------------------------------------------------------------------------
# List documentation
#-------------------------------------------------------------------------------

if [ "$1" = "" ]; then

	my_list_usage
	exit
fi

#-------------------------------------------------------------------------------
# Add options for selected package
#-------------------------------------------------------------------------------

package_label=

arg_list=

while [ X"$1" != X--  ]; do

	if [ "$1" = "" ]; then
	
		set -- -- $@
	else

		found_flag=

   		ifs_def="$IFS"

		IFS="+"

		for package in ${package_list}; do

			IFS="${ifs_def}"

			if [ "${package}" != "" ]; then

				label=

				IFS=";"

				for item in ${package}; do

					IFS="${ifs_def}"

					if [ "${label}" = "" ]; then

						label="${item}"
					else

						contents="${item}"
					fi

					IFS=";"
				done

				IFS="${ifs_def}"

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

					found_flag=yes

					package_label="${label}"

					package_options="${package_options} \
${contents}"
					shift 1

					break
				fi
			fi

			IFS="+"
		done

		IFS="${ifs_def}"

		if [ "${found_flag}" = "" ]; then

			arg_list="${arg_list} $1"

			shift 1
		fi
	fi
done

#-------------------------------------------------------------------------------
# Set options
#-------------------------------------------------------------------------------

set -- ${arg_list} ${package_options}

archive_arch_list="single"
base_arch_types="`output_arch_type -ab`"
quiet_mode=
pgp_key_list=

while [ X"$1" != X--  ]; do

	case "$1"
	in

		"")		set -- -- $@
				;;

		-h|-help)	my_list_usage
				exit
				;;

		-host)		base_arch_types="`output_arch_type -b`"
				shift 1
				;;

		-host_list)	convert_list $1 $2
				base_arch_types="$list"
				shift 2
				;;

		-arch)		archive_arch_list=separate
				shift 1
				;;

		-quiet)		quiet_mode="yes"
				shift 1
				;;

		-v)		if [ "$2" = "" ]; then
					echo ""
					echo "*** option $1 also requires a version name ***"
					my_list_usage
					exit
				fi
				set_version_dir $2
				sys_dir="${version_dir}"
				shift 2
				;;

		-encrypt)	if [ "$2" = "" ]; then
					echo ""
					echo "*** option $1 also requires a key ID ***"
					my_list_usage
					exit
				fi
				if [ "${pgp_key_list}" = "" ]; then
					pgp_key_list="-r $2"
				else
					pgp_key_list="${pgp_key_list} -r $2"
				fi
				shift 2
				;;

		-vname)		if [ "$2" = "" ]; then
					echo ""
					echo "*** option $1 also requires an executable name ***"
					my_list_usage
					exit
				fi
				exe_version_name=$2
				shift 2
				;;

		-sbin|-$USER)
				options="$options $1"
				shift 1
				;;

		-doc|-exe|-dlib|-lib|-interface|-include|-include2|-src|-specific)
				convert_list $1 $2 $1
				options="$options $list"
				shift 2
				;;

#		specified in package list for script simsys_www only

		-rel)		shift 2
				;;

		-*)		echo ""
				echo "*** invalid option $1 ***"
				my_list_usage
				exit
				;;

		*)		convert_list -src $1 -src
				options="$options $list"
				shift 1
				;;
	esac
done

if [ "$options" = "" ]; then

	echo ""
	echo "*** no files specified ***"
	my_list_usage
	exit
fi

#-------------------------------------------------------------------------------
# Set tar command
#-------------------------------------------------------------------------------

if [ "`tar --version 2> /dev/null | grep GNU 2> /dev/null`" != "" ]; then

	tar_command=tar

elif [ "`tar --version 2> /dev/null | grep bsdtar 2> /dev/null`" != "" ]; then

	tar_command=tar

elif [ "`gtar --version 2> /dev/null | grep GNU 2> /dev/null`" != "" ]; then

	tar_command=gtar
else
	echo "Unable to find appropriate tar or gtar command"
	exit
fi

#-------------------------------------------------------------------------------
# Set list of architecture directories for single package mode
#-------------------------------------------------------------------------------

if [ "${archive_arch_list}" = "single" ]; then

	arch_dirs=

	for archive_arch in ${base_arch_types}; do

		set_current_arch_type -base ${archive_arch}


		arch_dirs="${arch_type} ${arch_dirs}"
	done

	archive_file_arch_suffix=

#-------------------------------------------------------------------------------
# Create list of package architectures for separate package mode
#-------------------------------------------------------------------------------

else
	archive_arch_list="${base_arch_types}"
fi

#-------------------------------------------------------------------------------
# Loop over package architectures
#-------------------------------------------------------------------------------

for archive_arch in ${archive_arch_list}; do

#-------------------------------------------------------------------------------
# Create tmp directory for files to be included in package archive
#-------------------------------------------------------------------------------

	tmp_dir="${TMPDIR}/${USER}_`basename $0`_$$"

	if [ -d "${tmp_dir}" ]; then

		/bin/rm -rf ${tmp_dir}
	fi

	mkdir ${tmp_dir}

#-------------------------------------------------------------------------------
# Set list of architecture directories for separate package mode
#-------------------------------------------------------------------------------

	if [ "${archive_arch}" != "single" ]; then

		set_current_arch_type -base ${archive_arch}

		arch_dirs="${arch_type}"

		archive_file_arch_suffix=",${archive_arch}" 
	fi

	set_current_arch_type -base ${archive_arch}

#-------------------------------------------------------------------------------
# Check for required executable and library files for package archive
#-------------------------------------------------------------------------------

	name_label=
	number_of_exe_items=-1
	number_of_lib_items=-1

	set -- $options

	while [ X"$1" != X--  ]; do

		case "$1"
		in

			"")		set -- -- $@
					;;

			-exe|-lib|-dlib)

					if [ "$1" = "-exe" ] && [ "${number_of_exe_items}" = "-1" ]; then
						number_of_exe_items=0
					elif [ "$1" = "-lib" ] && [ "${number_of_lib_items}" = "-1" ]; then
						number_of_lib_items=0
					elif [ "$1" = "-dlib" ] && [ "${number_of_lib_items}" = "-1" ]; then
						number_of_lib_items=0
					fi
					create_tmp_files `echo $1| sed s/-//` $2 test
					shift 2
					;;

			*)		shift 1
					;;

		esac

	done

#-------------------------------------------------------------------------------
# Skip creating package archive if no required exes or libs were found
#-------------------------------------------------------------------------------

	if [ "${number_of_exe_items}" != "0" ] && [ "${number_of_lib_items}" != "0" ]; then

#-------------------------------------------------------------------------------
# Create files to be included in package archive
#-------------------------------------------------------------------------------

		echo ""
		echo "Adding files..."

		version_number=
		version_number_list=
		file_info_list=
		file_label=
		name_label=
		number_of_items=0

		set -- $options

		while [ X"$1" != X--  ]; do

			case "$1"
			in

				"")		set -- -- $@
						;;

				-sbin|-$USER)

						create_tmp_files `echo $1| sed s/-//`
						shift 1
						;;

				-doc|-exe|-include|-include2|-interface|-lib|-dlib|-specific|-src)

						create_tmp_files `echo $1| sed s/-//` $2
						shift 2
						;;

				*)		echo ""
						echo "*** invalid option $1 ***"
						my_list_usage
						exit
						;;
			esac
		done

#-------------------------------------------------------------------------------
# Set package archive name
#-------------------------------------------------------------------------------

		package_archive_name="${package_label}"

		if [ "${package_archive_name}" = "" ]; then

			if [ "${number_of_items}" != "1" ]; then

				package_archive_name="${ref_archive_name}"
			else
				package_archive_name="${name_label}-${file_label}"
			fi
		fi

		if [ "${exe_version_name}" != "" ]; then

			version_number="`get_version -exe ${exe_version_name}`"

			if [ "${version_number}" != "" ]; then

				package_archive_name="${package_archive_name},${version_number}"
			fi
		fi

#-------------------------------------------------------------------------------
# Add build number or date to package archive name
#-------------------------------------------------------------------------------

		if [ "${version_number_list}" != "" ]; then

			t1=0
			t2=0
			t3=0

			for item in ${version_number_list}; do

				IFS="."

				set -- $item

				b1=$1
				b2=$2
				b3=$3

        			if [ "$b1" != "" ]; then

					t1=`expr $t1 + $b1`
				fi

        			if [ "$b2" != "" ]; then

					t2=`expr $t2 + $b2`
				fi

        			if [ "$b3" != "" ]; then

					t3=`expr $t3 + $b3`
				fi

				IFS="${ifs_def}"
			done

			package_archive_name="${package_archive_name},$t1.$t2.$t3"
		else
			package_archive_name="${package_archive_name},`date +%m.%d.%y`"
		fi

#-------------------------------------------------------------------------------
# Add package architecture type to package archive name
#-------------------------------------------------------------------------------

		package_archive_name="${package_archive_name}${archive_file_arch_suffix}"

#-------------------------------------------------------------------------------
# zip package archive
#-------------------------------------------------------------------------------

		if [ "${archive_arch}" = "WIN" ]; then

			compressed_package_archive_name=${package_archive_name}.zip

#-------------------------------------------------------------------------------
# Create zip package archive
#-------------------------------------------------------------------------------

			echo "
Creating package zip archive for ${package_archive_name} files...
"

			cd ${tmp_dir}

			zip -r ${starting_dir}/${compressed_package_archive_name} * > /dev/null 2>&1

#-------------------------------------------------------------------------------
# Create and add log file to zip package archive
#-------------------------------------------------------------------------------

			mkdir log

			chmod 0755 log

			package_info_file=${tmp_dir}/log/${package_archive_name}_info.txt

			cd ${starting_dir}

			echo "The package archive ${package_archive_name}.zip was created on
`date` and includes the following packages and files.

${file_info_list}

`unzip -l ${compressed_package_archive_name}`" > ${package_info_file}

			cd ${tmp_dir}

			chmod 0644 ${package_info_file}

			zip -g -r ${starting_dir}/${compressed_package_archive_name} log > /dev/null 2>&1

			cd ${starting_dir}

#-------------------------------------------------------------------------------
# Create tar package archive
#-------------------------------------------------------------------------------

		else
			echo "
Creating package tar archive for ${package_archive_name} files...
"

			cd ${tmp_dir}

			${tar_command} -cf ${starting_dir}/${package_archive_name}.tar * 2> /dev/null

#-------------------------------------------------------------------------------
# Create and add log file to tar package archive
#-------------------------------------------------------------------------------

			mkdir log

			chmod 0755 log

			package_info_file=log/${package_archive_name}_info.txt

			echo "The package archive ${package_archive_name}.tar was created on
`date` and includes the following packages and files.

${file_info_list}

`${tar_command} -tvf ${starting_dir}/${package_archive_name}.tar`" > ${package_info_file}

			chmod 0644 ${package_info_file}

			${tar_command} -rf ${starting_dir}/${package_archive_name}.tar log 2> /dev/null

			cd ${starting_dir}

#-------------------------------------------------------------------------------
# gzip tar package archive
#-------------------------------------------------------------------------------

			compressed_package_archive_name=${package_archive_name}.tar.gz

			gzip -f ${package_archive_name}.tar
		fi

#-------------------------------------------------------------------------------
# Encrypt package archive
#-------------------------------------------------------------------------------

		if [ "${pgp_key_list}" != "" ]; then

			echo "Encrypting package archive file ..."

			if [ -r "${compressed_package_archive_name}.pgp" ]; then

				/bin/rm -f ${file_name}.pgp
			fi

			gpg -e ${pgp_key_list} -o ${compressed_package_archive_name}.pgp ${compressed_package_archive_name}

			/bin/rm -f ${compressed_package_archive_name}
		fi

#-------------------------------------------------------------------------------
# End of skip creating package archive if no required exes or libs were found
#-------------------------------------------------------------------------------

	else

		if [ "${package_label}" ]; then

			name_label=${package_label}
		fi

		echo "
Missing executables or libraries for ${arch_dirs} ...
Skip creation of package archive for ${name_label} files...
"
	fi

#-------------------------------------------------------------------------------
# Remove all tmp files
#-------------------------------------------------------------------------------

	/bin/rm -rf ${tmp_dir}

#-------------------------------------------------------------------------------
# End of loop over package architectures
#-------------------------------------------------------------------------------

done
