#!/bin/sh
#$Id: set_package_list,v 1.6 2025/10/06 20:48:09 marcum Exp $
#FUNCTION

#===============================================================================
# Function to set package_list to list of package definitions.
#
# set_package_list
#
#	Set package_list to both user and system packages.
#
# set_package_list -user
#
#	Set package_list to user packages.
#
# set_package_list -sys
#
#	Set package_list to system packages.
#
# set_package_list -all
#
#	Set package_list to both user and system packages.
#
#===============================================================================

#-------------------------------------------------------------------------------
# Set system package definitions.
#-------------------------------------------------------------------------------

set_package_entry ()
{
	all_lib_names_1=
	all_lib_names_2=
	all_lib_names_3=

	all_dlib_names=

	doc_list="system ug_io"
	exe_list="ugc"

	if [ "${program_names}" = "ug_io" ]; then
		vname="ugc"
	elif [ "${program_names}" = "grid_tools" ]; then
		vname="checkgrid"
	else
		vname=
	fi

	for program_name in ${program_names}; do

		lib_list_files="${sys_dir}/src/${program_name}/*.lib_list"

		lib_names_1=
		lib_names_2=
		lib_names_3=

		dlib_names=

		for lib_list_file in ${lib_list_files}; do

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

				. ${lib_list_file}
				break
			fi
		done

		if [ "${lib_names_1}" = "" ] && [ "${lib_names_2}" = "" ] && [ "${lib_names_3}" = "" ]; then
			lib_names_1="${program_name}"
		fi

		all_lib_names_1="${all_lib_names_1} ${lib_names_1}"
		if [ "${lib_names_2}" ]; then
			all_lib_names_2="${all_lib_names_2} ${lib_names_2}"
		fi
		if [ "${add_prog_lib_names}" ] && [ "${lib_names_3}" ]; then
			all_lib_names_3="${all_lib_names_3} ${lib_names_3}"
		fi

		if [ "${dlib_names}" ]; then
			all_dlib_names="${all_dlib_names} ${dlib_names}"
		fi

		if [ "${program_name}" = "grid_tools" ]; then
			doc_list="${doc_list} ${program_name}"
			exe_list="${exe_list} ${grid_tool_names}"
		elif [ "${program_name}" != "ug_io" ]; then
			doc_list="${doc_list} ${program_name}"
			exe_list="${exe_list} ${program_name}"
		fi

		if [ "${vname}" = "" ]; then
			vname="${program_name}"
		fi
	done

	list=

	for name in ${all_lib_names_1}; do

		if [ "`echo ${list} | grep :${name}:`" = "" ]; then
			list="${list}:${name}:"
		fi
	done

	names_1="`echo ${list}| sed s/::/\ /g| sed s/://g`"

	list=

	for name in ${all_lib_names_2}; do

		if [ "`echo ${list} | grep :${name}:`" = "" ]; then
			list="${list}:${name}:"
		fi
	done

	names_2="`echo ${list}| sed s/::/\ /g| sed s/://g`"

	list=

	for name in ${all_lib_names_3}; do

		if [ "`echo ${list} | grep :${name}:`" = "" ]; then
			list="${list}:${name}:"
		fi
	done

	names_3="`echo ${list}| sed s/::/\ /g| sed s/://g`"

	encrypt_list=

	if [ "${encrypt_keys}" ]; then

		for encrypt_key in ${encrypt_keys}; do

			encrypt_list="${encrypt_list} -encrypt ${encrypt_key}"
		done
	fi

	doc_list="`echo ${doc_list}| sed s/\ /,/g`"

	rel_list="`echo ${exe_list}| sed s/\ /,/g`"

	if [ "${other_program_names}" ]; then
		exe_list="${exe_list} ${other_program_names}"
	fi
	exe_list="`echo ${exe_list}| sed s/\ /,/g`"
	if [ "${add_64}" ]; then
		exe_list="${exe_list},`echo ${exe_list}| sed s/,/_l,/g`_l"
	fi

	if [ "${interface_names}" ]; then
		interface_list=" -interface `echo ${interface_names}| sed s/\ /,/g`"
	else
		interface_list=
	fi

	lib_list="${names_1}"
	if [ "${names_2}" ]; then
		lib_list="${lib_list} ${names_2}"
	fi
	if [ "${names_3}" ]; then
		lib_list="${lib_list} ${names_3}"
	fi
	lib_list="`echo ${lib_list}| sed s/\ /,/g`"
	if [ "${add_64}" ]; then
		lib_list="${lib_list},`echo ${lib_list}| sed s/,/_l,/g`_l"
	fi

	if [ "${add_dlib}" ] || [ "${all_dlib_names}" ]; then
                all_dlib_names="${add_dlib} ${all_dlib_names}"
		lib_list="${lib_list},${add_dlib}"
		dlib_list=" -dlib `echo ${all_dlib_names}| sed s/\ /,/g`"
	else
		dlib_list=
	fi

	include_list="`echo ${names_1}| sed s/\ /,/g`"

	pub_src_list=
	if [ "${names_2}" ]; then
		pub_src_list="${names_2}"
	fi
	if [ "${names_3}" ]; then
		pub_src_list="${pub_src_list} ${names_3}"
	fi
	if [ "${pub_src_list}" ]; then
		pub_src_list=" -src `echo ${pub_src_list}| sed s/\ /,/g`"
	fi

	src_list="${names_1}"
	if [ "${names_2}" ]; then
		src_list="${src_list} ${names_2}"
	fi
	if [ "${names_3}" ]; then
		src_list="${src_list} ${names_3}"
	fi
	src_list="`echo ${src_list}| sed s/\ /,/g`"

	if [ "`echo ${package_name}| grep SRC`" != "" ]; then

		sys_package_list="${sys_package_list}\
+${package_name};\
${encrypt_list}\
 -vname ${vname}\
 -sbin sbin\
 -doc ${doc_list}\
${interface_list}\
${dlib_list}\
 -src ${src_list}\
"
	elif [ "`echo ${package_name}| grep LIB`" != "" ]; then

		sys_package_list="${sys_package_list}\
+${package_name};\
 -vname ${vname}\
 -sbin sbin\
 -doc ${doc_list}\
 -exe ${exe_list}\
${interface_list}\
 -lib ${lib_list}\
${dlib_list}\
 -include ${include_list}\
${pub_src_list}\
 -rel ${rel_list}\
"
	else
		sys_package_list="${sys_package_list}\
+${package_name};\
 -vname ${vname}\
 -arch\
 -doc ${doc_list}\
 -exe ${exe_list}\
${interface_list}\
${dlib_list}\
 -rel ${rel_list}\
"
	fi
}

set_package_list ()
{
#-------------------------------------------------------------------------------
# The field "-rel NAME" identifies the release note file(s) that are applicable.
# It is used by script simsys_archive to identify appropriate release files not
# in a given package directory. The NAME field must be comma separated if more
# than one release file is applicable. The release files are located within the
# doc/system directory and are named Release_Notes_NAME.txt
#
# The field "-vname NAME" identifies one executable to use for a build/version
# number portion of a package archive file name. It is used by script
# simsys_archive to determine the build/version number portion for a given
# package archive file name. If the field is not present then the overall build
# number (sum of build/version numbers for all components of a package) is used.
#-------------------------------------------------------------------------------

	sys_package_list=

	add_64=
	add_dlib=
	add_prog_lib_names="yes"
	encrypt_keys=
	aflr3_tet_mesh=
	tetgen_tet_mesh=
	bloom3_open_lib=

	other_program_names="bsurf2,xplt2"

	package_name="AFLR2"
	program_names="aflr2 aflr2c"

	set_package_entry

	package_name="AFLR2_LIB"
	program_names="aflr2"

	set_package_entry

	package_name="AFLR2_SRC"
	program_names="aflr2"

	set_package_entry

	package_name="AFLR2C"
	program_names="aflr2c aflr2"

	set_package_entry

	add_dlib="aflr2c_all"

	package_name="AFLR2C_LIB"
	program_names="aflr2c"

	set_package_entry

	add_dlib=
	other_program_names=

	package_name="AFLR2C_SRC"
	program_names="aflr2c"

	set_package_entry

	add_64="yes"

	package_name="AFLR3"
	program_names="aflr3"

	set_package_entry

	add_64="yes"
	add_dlib="aflr3_all"

	package_name="AFLR3_LIB"
	program_names="aflr3"

	set_package_entry

	add_64=
	add_dlib=

	package_name="AFLR3_SRC"
	program_names="aflr3"

	set_package_entry

	package_name="AFLR4"
	program_names="aflr4"

	set_package_entry

	add_dlib="aflr4_all"

	package_name="AFLR4_LIB"
	program_names="aflr4"

	set_package_entry

	add_dlib=

	package_name="AFLR4_SRC"
	program_names="aflr4"

	set_package_entry

	add_dlib="aflr_all"

	package_name="AFLR43_LIB"
	program_names="aflr43"

	set_package_entry

	add_dlib=

	package_name="AFLR43"
	program_names="aflr43 aflr4"

	set_package_entry

	package_name="AFLR43_SRC"
	program_names="aflr43"

	set_package_entry

	package_name="UVMAP_LIB"
	program_names="uvmap"

	set_package_entry

	package_name="UVMAP_SRC"
	program_names="uvmap"

	set_package_entry

	add_64="yes"
	add_dlib="aflr2c_all aflr4_all aflr3_all aflr_all"

	package_name="AFLR_LIB"
	program_names="aflr4 aflr3 aflr43 aflr2c"

	set_package_entry

	add_64=
	add_dlib=

	package_name="AFLR_SRC"
	program_names="aflr2c aflr4 aflr3 aflr43"

	set_package_entry

	add_64="yes"

	package_name="BLOOM3"
	program_names="bloom3"

	set_package_entry

	add_64="yes"
	bloom3_open_lib="yes"
	aflr3_tet_mesh="yes"
	tetgen_tet_mesh="yes"

	package_name="BLOOM3_LIB"
	program_names="bloom3"

	set_package_entry

	add_64=
	bloom3_open_lib="yes"
	aflr3_tet_mesh=
	tetgen_tet_mesh="yes"

	package_name="BLOOM3_SRC"
	program_names="bloom3"

	set_package_entry

	bloom3_open_lib=
	tetgen_tet_mesh=

	add_64="yes"

	package_name="UG_IO"
	program_names="ug_io"

	set_package_entry

	add_64=

	package_name="UG_IO_SRC"
	program_names="ug_io"

	set_package_entry

	package_name="SGR"
	program_names="sgr"

	set_package_entry

	package_name="SGR_SRC"
	program_names="sgr"

	set_package_entry

	package_name="GRID_TOOLS"
	program_names="grid_tools"
	grid_tool_names="checkgrid extract gridmerge scalegrid sgridmerge surftool voltool"

	set_package_entry

	package_name="GRID_TOOLS_SRC"
	program_names="grid_tools"

	set_package_entry

	sys_package_list="${sys_package_list}\
+doc;\
 -doc system,aflr2,aflr2c,aflr3,aflr4,bloom3,sm,ug_io\
"

#-------------------------------------------------------------------------------
# Set user defined user and system package definitions.
#-------------------------------------------------------------------------------

	user_package_list=

	user_list_file_list="${HOME}/.simsys/set_package_list.opt ${HOME}/bin/set_package_list.opt ${HOME}/bin/tools/set_package_list.opt"

	for user_list_file in ${user_list_file_list}; do

		if [ -r ${user_list_file} ]; then

			. ${user_list_file}

			break
		fi
	done

	package_list=

        if [ "$1" != "-user" ]; then

		package_list="${package_list}${sys_package_list}"
	fi

        if [ "$1" != "-sys" ]; then

		package_list="${package_list}${user_package_list}"
	fi
}
