#!/bin/sh
#$Id: make_win_dll,v 1.20 2025/10/01 23:06:29 marcum Exp $
#FUNCTION

#===============================================================================
# Function to create Windows DLL for SimSys code.
#===============================================================================

make_win_dll ()
{
	prog_name_list="ug_io aflr2c aflr3 aflr4 aflr43"

	echo "
Make Windows DLL file for AFLR code ..."

	start_dir="`pwd`"

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

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

		/bin/rm -rf ${tmp_dir}
	fi

	mkdir ${tmp_dir}

	cd ${tmp_dir}

	echo "creating list of lib names for AFLR.lib ..."

	lib_names=

	for prog_name in ${prog_name_list}; do

		lib_list_files="${src_dir}/${prog_name}/*.lib_list"

		lib_names_1=
		lib_names_2=
		lib_names_3=

		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="${prog_name}"
		fi

		lib_names="${lib_names} ${lib_names_1}"
		if [ "${lib_names_2}" ]; then
			lib_names="${lib_names} ${lib_names_2}"
		fi
		if [ "${lib_names_3}" ]; then
			lib_names="${lib_names} ${lib_names_3}"
		fi
	done

	list=

	for name in ${lib_names}; do

		if [ "`echo ${list} | grep :${name}:`" = "" ] && [ "${name}" != "aflr3_main" ] && [ "${name}" != "aflr4_main" ] && [ "${name}" != "xplt2" ] && [ "${name}" != "XW" ]; then
			list="${list}:${name}:"
		fi
	done

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

	echo "extracting object code from all libs in list ..."

	for name in ${lib_names}; do
		ar x ${sys_lib_dir}/${name}.lib > /dev/null 2>&1
	done

	echo "adding all object code to AFLR.lib ..."

	ar r AFLR.lib *.o > /dev/null 2>&1

	echo "creating DEF file for AFLR.lib ..."

	echo "\
	LIBRARY AFLR.dll
	EXPORTS
	`nm AFLR.lib | grep ' T '`
" > AFLR.def

	/bin/rm -rf AFLR.lib

	ex AFLR.def << END_EX
	g/................ T _/ .d
	g/ T / .s/................ T //
	g/_cpp_/ .s/_cpp_/_SAVE_THESE_/g
	g/_cpp/ .d
	g/_SAVE_THESE_/ .s/_SAVE_THESE_/_cpp_/g
	wq
END_EX

	echo "creating AFLR.DLL ..."

	x86_64-w64-mingw32-gcc -mno-stack-arg-probe -m64 -shared *.o AFLR.def ${sys_shared_lib_dir}/egads.dll -o AFLR.dll -static -lstdc++ -Wl,--out-implib,AFLR.lib

	/bin/mv -f AFLR.def ${sys_shared_lib_dir}/AFLR.def
	/bin/mv -f AFLR.dll ${sys_shared_lib_dir}/AFLR.dll
	/bin/mv -f AFLR.lib ${sys_lib_dir}/AFLR.lib

	chmod 0644 ${sys_shared_lib_dir}/AFLR.def
	chmod 0755 ${sys_shared_lib_dir}/AFLR.dll
	chmod 0644 ${sys_lib_dir}/AFLR.lib

	/bin/rm -rf ${tmp_dir}

	cd ${sys_shared_lib_dir}

	/bin/rm -f *.o

#	for prog_name in ${prog_name_list}; do

#		include_dirs=
#		obj_names=

#		if [ "${prog_name}" = "aflr2c" ]; then

#			ar x ${sys_lib_dir}/aflr2c_main.lib > /dev/null 2>&1

#			obj_names="${obj_names} aflr2_main*.o"
#		fi

#		if [ "${prog_name}" = "aflr3" ] || [ "${prog_name}" = "aflr43" ]; then

#			ar x ${sys_lib_dir}/aflr3_main.lib > /dev/null 2>&1

#			obj_names="${obj_names} aflr3_main*.o"
#		fi

#		if [ "${prog_name}" = "aflr4" ] || [ "${prog_name}" = "aflr43" ]; then

#			ar x ${sys_lib_dir}/aflr4_main.lib > /dev/null 2>&1

#			include_dirs="${include_dirs} -I${src_dir}/egads_aflr4/egads_include"
#			obj_names="${obj_names} aflr4_main*.o"
#		fi

#		compile_files="${src_dir}/${prog_name}/*.compile"

#		for compile_file in ${compile_files}; do

#			main_dir=${src_dir}/${prog_name}
#			main_program_base_name=${prog_name}
#			exe_base_name=${prog_name}

#			if [ -r "${compile_file}" ]; then

#				. ${compile_file}
#			fi

#			include_dirs="-I${main_dir} ${include_dirs}"

#			echo "compiling executable ${exe_base_name}_dll.exe ..."

#			x86_64-w64-mingw32-gcc -mno-stack-arg-probe -m64 -O0 -DUSE_CGNS_MACROS -DLOWERCASE_ -D_ENABLE_CGNS_LIB_ -D_ENABLE_MESH_LIB_ -D_ENABLE_EGADS_ ${include_dirs} ${main_dir}/${main_program_base_name}.c ${obj_names} AFLR.dll -o ${exe_base_name}_dll.exe

#			chmod 0755 ${sys_exe_dir}/${exe_base_name}_dll.exe
#		done

#		/bin/rm -f *.o
#	done

	cd ${start_dir}
}
