Without more data it's going to be hard to guess what's happening in that case. Here's an SSCCE which might help:
cd /tmp
cat > foo.sh <<EOT
#!/bin/sh
echo Relative path
./bar.sh
echo Absolute path
/tmp/bar.sh
echo No path
bar.sh
EOT
cat > bar.sh <<EOT
#!/bin/sh
echo bar running as \$0
EOT
chmod 0755 foo.sh bar.sh
sudo chown root bar.sh
sudo cp -p bar.sh /usr/local/bin
./foo.sh
Running this locally (not on Solaris!) gives this expected output:
Relative path
bar running as ./bar.sh
Absolute path
bar running as /tmp/bar.sh
No path
bar running as /usr/local/bin/bar.sh
If you see the same, then you'll need to determine what's different about functions.sh and compile.sh compared to foo.sh and bar.sh. Don't forget to remove bar.sh from /usr/local/bin when you're done. Good luck.