tools/gdc-psyfork/example-scripts/gdc_core.sh
author David Anderson <dvander@alliedmods.net>
Thu Aug 08 22:02:42 2013 -0700 (2013-08-08)
changeset 3980 dc7dfcd855dc
parent 3902 691bd6a50850
permissions -rw-r--r--
More Windows build fix.
     1 #!/bin/bash
     2 
     3 SCRIPT_PATH=/users/psychonic/gdc
     4 
     5 # with trailing slash or undefined for system default
     6 MONO_BIN_PATH=/apps/mono-2.10.9/bin/
     7 
     8 DD_PATH=${SCRIPT_PATH}/dd
     9 ENGINE_PATH=${DD_PATH}/${ENGINE_PATH_FROM_DD}
    10 
    11 SM_PATH=${SCRIPT_PATH}/sourcemod-central
    12 SMRCON_PATH=${SCRIPT_PATH}/SMRCon
    13 
    14 # Do not run this file directly. It is meant to be called by other scripts
    15 
    16 ENGINE_BIN=${ENGINE_PATH}/bin/engine
    17 GAME_BIN=${ENGINE_PATH}/${GAME_DIR}/bin/server
    18 STEAMINF=${ENGINE_PATH}/${GAME_DIR}/steam.inf
    19 
    20 GDC_PATH=${SM_PATH}/tools/gdc-psyfork
    21 GDC_BIN=${GDC_PATH}/Release/gdc
    22 
    23 if [ "${GAMEDATA_DIR}" == "" ] ; then
    24 	GAMEDATA_DIR=${GAME_DIR}
    25 fi
    26 
    27 if [ $MOD == 1 ] ; then
    28 	BIN_EXT="_i486"
    29 fi
    30 
    31 echo -e "Checking game ${GAME_DIR}...\n"
    32 
    33 if [ $MOD == 0 ] && [ "$1" == "auto" ] ; then
    34 	UPDATE_RES=`./updatecheck.pl "${STEAMINF}"`
    35 	if [ $? -ne 0 ] ; then
    36 		exit 1
    37 	fi
    38 	EXPECTED_VER=`echo ${UPDATE_RES} | egrep -o '([0-9]+)$'`
    39 	echo Expecting version ${EXPECTED_VER}
    40 fi
    41 
    42 export RDTSC_FREQUENCY="disabled"
    43 export LD_LIBRARY_PATH="${ENGINE_PATH}:${ENGINE_PATH}/bin:$LD_LIBRARY_PATH"
    44 
    45 UPDATE=0
    46 if [ "$1" == "update" ] ; then
    47 	UPDATE=1
    48 elif [ "$1" == "auto" ] ; then
    49 	UPDATE=1
    50 fi
    51 
    52 if [ ${UPDATE} -eq 1 ] ; then
    53 	cd ${DD_PATH}
    54 
    55 	if [ "${DD_NEEDS_AUTH}" != "" ] ; then
    56 		if [ "${DD_GAME}" != "" ] ; then
    57 			DD_OPT_AUTH=`tr '\r\n' ' ' < dd-login-info.txt`
    58 		elif [ "${DD_APP}" != "" ] ; then
    59 			DD_OPT_AUTH=`tr '\r\n' ' ' < dd-login-info.txt`
    60 		else
    61 			echo "Error: neither DD_GAME nor DD_APP are set!"
    62 			exit 1
    63 		fi
    64 	fi
    65 
    66 	if [ "${DD_BETA}" != "" ] ; then
    67 		DD_OPT_BETA="-beta ${DD_BETA}"
    68 		if [ "${DD_BETA_PASSWORD}" != "" ] ; then
    69 			DD_OPT_BETA_PASSWORD="-betapassword ${DD_BETA_PASSWORD}"
    70 		fi
    71 	fi
    72 
    73 	for i in 1 2 3 4 5
    74 	do
    75 		if [ "${DD_GAME}" != "" ] ; then
    76 			${MONO_BIN_PATH}mono DepotDownloader.exe     \
    77 				-game "${DD_GAME}"   \
    78 				-dir ${DD_DIR}       \
    79 				-filelist server.txt \
    80 				-all-platforms       \
    81 				-no-exclude          \
    82 				${DD_OPT_CELL}       \
    83 				${DD_OPT_AUTH}
    84 		else
    85 			${MONO_BIN_PATH}mono DepotDownloader.exe     \
    86 				-app "${DD_APP}"     \
    87 				-dir ${DD_DIR}       \
    88 				-filelist server.txt \
    89 				-all-platforms       \
    90 				-no-exclude          \
    91 				${DD_OPT_CELL}       \
    92 				${DD_OPT_AUTH}       \
    93 				${DD_OPT_BETA}       \
    94 				${DD_OPT_BETA_PASSWORD}
    95 		fi
    96 
    97 		echo
    98 
    99 		if [ $? == 0 ] ; then
   100 			break
   101 		elif [ $i == 5 ] ; then
   102 			echo Update failed five times; welp
   103 			break
   104 		fi
   105 
   106 		echo -e "Update failed. Trying again in 30 seconds...\n"
   107 		sleep 30
   108 	done
   109 fi
   110 
   111 if [ "$1" == "auto" ] ; then
   112 	DOWNLOADED_VER=`grep -E "^(Patch)?Version=(([0-9]\.?)+)" ${STEAMINF} | grep -Eo "([0-9]\.?)+" | sed s/[^0-9]//g`
   113 
   114 	if [ ${DOWNLOADED_VER} != ${EXPECTED_VER} ] ; then
   115 		echo Download resulted with version ${DOWNLOADED_VER}, but expected ${EXPECTED_VER}. Exiting.
   116 		exit 1
   117 	fi
   118 fi
   119 
   120 # update game-specific
   121 cd ${SCRIPT_PATH}
   122 GAME_SCRIPT_NAME=`echo $0 | sed s/\.sh$//`
   123 echo checking to see if  ${GAME_SCRIPT_NAME}_repos.sh  exists
   124 if [ -e ${GAME_SCRIPT_NAME}_repos.sh ] ; then
   125 	./${GAME_SCRIPT_NAME}_repos.sh
   126 fi
   127 
   128 # update sourcemod
   129 echo Updating SourceMod repo
   130 cd ${SM_PATH}
   131 hg pull -u
   132 
   133 echo -e "\n"
   134 
   135 cd ${ENGINE_PATH}
   136 
   137 for i in "${gamedata_files[@]}"
   138 do
   139 	NO_SYMTABLE=
   140 
   141 	readelf --sections ${GAME_BIN}${BIN_EXT}.so | grep --quiet .symtab
   142 	if [ "${PIPESTATUS[1]}" != "0" ] ; then
   143 		NO_SYMTABLE=" -n"
   144 	fi
   145 
   146 	readelf --sections ${GAME_BIN}${BIN_EXT}.so | grep --quiet .strtab
   147 	if [ "${PIPESTATUS[1]}" != "0" ] ; then
   148 			NO_SYMTABLE=" -n"
   149 	fi
   150 
   151 	# having an issue upon exit after loading some source2007 server bins, invalid free in sendtable dtor, idk. suppress.
   152 	MALLOC_CHECK_=0 ${GDC_BIN} \
   153 		-g ${GAMEDATA_DIR} \
   154 		-e ${ENGINE_NAME} \
   155 		-f ${SM_PATH}/gamedata/$i \
   156 		-b ${GAME_BIN}${BIN_EXT}.so \
   157 		-x ${ENGINE_BIN}${BIN_EXT}.so \
   158 		-w ${GAME_BIN}.dll \
   159 		-y ${ENGINE_BIN}.dll \
   160 		-s ${GDC_PATH}/symbols.txt \
   161 		${NO_SYMTABLE}
   162 	echo -e "------------------------------------------------------\n"
   163 done
   164 
   165 exit 0