| #!/bin/sh |
| |
| # See the README in this directory for more info on using this script |
| # (build.unix). Search for SSVNC_BUILD. |
| # |
| # Notes: to customize locations, e.g. for libjpeg, set LDFLAGS_OS and/or |
| # CPPFLAGS_OS |
| # |
| # e.g. on Darwin we did: |
| # |
| # env LDFLAGS_OS="-L/Volumes/someplace/common/lib" CPPFLAGS_OS="-I /Volumes/someplace/common/include" ./build.unix |
| # |
| |
| |
| # Add useful directories to PATH: |
| # |
| PATH=$PATH:/usr/bin:/bin:/usr/local/bin:/usr/X11R6/bin:/usr/bin/X11:/usr/openwin/bin:/opt/SUNWspro/bin:/usr/sfw/bin:/usr/ccs/bin |
| export PATH |
| |
| # Check location: |
| # |
| thisdir=`dirname "$0"` |
| if [ ! -d ./bin -o ! -d src/patches -o ! -f ./build.unix ]; then |
| echo "" |
| echo "You must run this script from: $thisdir" |
| echo "" |
| echo "Maybe:" |
| echo "" |
| echo " cd $thisdir" |
| echo " ./build.unix" |
| if [ "X$BUILD_UNIX" != "X" ]; then |
| sleep 2 |
| exit 1 |
| fi |
| echo "" |
| sleep 1 |
| printf "Do you want me to run those for you? y/[n] " |
| read x |
| if [ "X$x" = "Xy" ]; then |
| BUILD_UNIX=1 |
| export BUILD_UNIX |
| cd "$thisdir" || exit 1 |
| echo "pwd:" |
| pwd |
| sleep 1 |
| ./build.unix |
| fi |
| |
| exit $? |
| fi |
| |
| pline() { |
| echo "------------------------------------------------------------------" |
| } |
| |
| # Try to find osname.arch |
| # |
| name=$UNAME |
| if [ "X$name" = "X" ]; then |
| name=`uname -sm | sed -e 's/ /./g' -e 's/Linux\.i.86/Linux.i686/'` |
| fi |
| if [ "X$name" = "X" ]; then |
| echo "cannot determine platform: os.arch, e.g. Linux.i686" |
| echo "set \$UNAME manually and retry." |
| exit 1 |
| fi |
| |
| LDD="ldd" |
| if [ `uname` = "Darwin" ]; then |
| LDD="otool -L" |
| fi |
| |
| # Create a tmp dir for this build: |
| # |
| tmp=./src/tmp/$name.$$ |
| if [ "X$TMPDIR" != "X" ]; then |
| tmp="$TMPDIR/$tmp" |
| fi |
| mkdir -p $tmp || exit 1 |
| |
| # Do ultraftp Java viewer (only): |
| # |
| if [ "X$SSVNC_BUILD_ULTRAFTP" != "X" ]; then |
| ultraftp_tar=`ls -td ./src/zips/ultraftp.tar* | head -1` |
| if [ ! -f $ultraftp_tar ]; then |
| echo "could not locate ultraftp java vnc viewer source" |
| exit 1 |
| fi |
| echo "" |
| pline |
| echo "BUILDING THE ULTRAFTP HELPER JAR" |
| echo "" |
| sleep 1 |
| |
| cat $ultraftp_tar | (cd $tmp; tar xvf -) || exit 1 |
| cd $tmp/ultraftp || exit 1 |
| pwd |
| echo |
| make install |
| |
| exit 0 # DONE |
| fi |
| |
| # Work out main destination: |
| # |
| dest=./bin/$name |
| if [ -d $dest ]; then |
| if [ "X$SSVNC_BUILD_FORCE_OVERWRITE" = "X" ]; then |
| printf "$dest exists. overwrite in it? [y]/n " |
| read x |
| if [ "X$x" = "Xn" ]; then |
| exit |
| fi |
| else |
| echo "$dest exists. overwriting in it." |
| fi |
| if [ "X$SSVNC_BUILD_SKIP_VIEWER" = "X" ]; then |
| if [ `uname` = "Darwin" ]; then |
| rm -f $dest/vncviewer.x11* |
| else |
| rm -f $dest/vncviewer* |
| fi |
| fi |
| if [ "X$SSVNC_BUILD_SKIP_STUNNEL" = "X" ]; then |
| rm -f $dest/stunnel* |
| fi |
| fi |
| mkdir -p $dest || exit 1 |
| |
| |
| # Try to find some static archives of various libraries: |
| # |
| libs="$tmp/libs" |
| mkdir -p $libs || exit 1 |
| for liba in libz.a libjpeg.a libssl.a libcrypto.a |
| do |
| if [ "X$SSVNC_BUILD_STATIC" = "X" ]; then |
| break |
| fi |
| for dir in $SSVNC_STATIC_DIRS /usr/lib /lib /usr/local/lib /usr/pkg/lib /usr/sfw/lib /usr/openwin/lib |
| do |
| if [ "X$dir" = "X" ]; then |
| continue |
| fi |
| if [ "$name" = "Linux.x86_64" -o "$name" = "Linux.ppc64" ] ; then |
| dir64=`echo "$dir" | sed -e 's,lib,lib64,'` |
| if [ "X$SSVNC_BUILD_NO_LINUX64" != "X" ]; then |
| : |
| elif [ -d $dir64 ]; then |
| dir=$dir64 |
| fi |
| fi |
| try="$dir/$liba" |
| if [ -f $try ]; then |
| echo cp -p "$try" $libs |
| cp -p "$try" $libs |
| break |
| fi |
| done |
| done |
| if [ "X$SSVNC_BUILD_STATIC" != "X" ]; then |
| echo "Found these static archive libraries, will try to use them..." |
| ls -ld $libs |
| ls -l $libs |
| echo |
| fi |
| |
| have_gcc="" |
| if type gcc > /dev/null; then |
| have_gcc=1 |
| fi |
| have_cc="" |
| if type cc > /dev/null; then |
| have_cc=1 |
| fi |
| |
| if [ "X$have_cc" = "X" ]; then |
| if [ "X$have_gcc" = "X1" ]; then |
| cat > $tmp/cc <<END |
| #!/bin/sh |
| gcc "\$@" |
| END |
| chmod 755 $tmp/cc |
| PATH=$PATH:`pwd`/$tmp |
| type cc |
| type gcc |
| fi |
| fi |
| |
| if [ -d /var/tmp/LIBS -a "X$SSVNC_BUILD_STATIC" != "X" ]; then |
| LDFLAGS_OS="$LDFLAGS_OS -L/var/tmp/LIBS" |
| fi |
| |
| if [ `uname` = "SunOS" ]; then |
| LDFLAGS_OS="$LDFLAGS_OS -L/usr/sfw/lib -R/usr/sfw/lib" |
| CPPFLAGS_OS="$CPPFLAGS_OS -I /usr/sfw/include" |
| elif uname | grep -i bsd > /dev/null; then |
| LDFLAGS_OS="$LDFLAGS_OS -L/usr/local/lib -L/usr/pkg/lib" |
| CPPFLAGS_OS="$CPPFLAGS_OS -I /usr/local/include -I /usr/pkg/include" |
| fi |
| |
| cnt=`ls ./src/patches/*.patch | wc -c` |
| if [ $cnt -lt 1 ]; then |
| echo "Could not find any patches in ./src/patches. Is your tarball missing them?" |
| exit 1 |
| fi |
| |
| pline() { |
| echo "------------------------------------------------------------------" |
| } |
| |
| # Do tightvnc viewer: |
| # |
| if [ "X$SSVNC_BUILD_SKIP_VIEWER" = "X" ]; then |
| tight_src=`ls -td ./src/vnc_unixsrc* | head -1` |
| if [ ! -d $tight_src ]; then |
| echo "could not locate tight vnc viewer source" |
| exit 1 |
| fi |
| echo "" |
| pline |
| echo "BUILDING THE VNCVIEWER" |
| echo "" |
| sleep 1 |
| |
| cp -pR "$tight_src" "$tmp/vnc_unixsrc" || exit 1 |
| |
| echo "applying tight vnc patches:" |
| start=`pwd` |
| cd $tmp; |
| failed=0 |
| count=0 |
| patches="../../patches/tight-vncviewer-full.patch" |
| if [ ! -f "$patches" ]; then |
| patches=`ls ../../patches/tight* | grep -v 'tight-vncviewer-full.patch'` |
| fi |
| for patch in $patches |
| do |
| if [ ! -f "$patch" ]; then |
| continue |
| fi |
| if [ "X$PATCH_FAIL" != "X" ]; then |
| failed=1 |
| break |
| fi |
| echo PATCHING WITH: "$patch" |
| ls -l "$patch" |
| sleep 1 |
| patch -p0 < "$patch" |
| if [ $? != 0 ]; then |
| failed=`expr $failed + 1` |
| else |
| count=`expr $count + 1` |
| fi |
| done |
| sleep 1 |
| cd "$start" |
| if [ $failed != 0 -o $count = 0 ]; then |
| ball=src/zips/vnc_unixsrc_vncviewer.patched.tar |
| echo "patches failed, trying to use backup tarball:" |
| ls -l $ball |
| sleep 2 |
| cat $ball | (cd $tmp; tar -xvf -) |
| fi |
| echo |
| |
| |
| cd $tmp/vnc_unixsrc |
| xmkmf |
| make Makefiles |
| mv vncviewer/Makefile vncviewer/Makefile.orig |
| sed -e "s,EXTRA_LDOPTIONS =,EXTRA_LDOPTIONS = -L$start/$libs $LDFLAGS_OS," \ |
| -e "s,CCOPTIONS =,CCOPTIONS = $CPPFLAGS_OS," \ |
| vncviewer/Makefile.orig > vncviewer/Makefile |
| |
| if [ `uname` = "SunOS" ]; then |
| for d in vncviewer libvncauth vncconnect vncpasswd |
| do |
| mv $d/Makefile $d/Makefile.orig |
| sed -e "s,CCOPTIONS =.*\$,CCOPTIONS = $CPPFLAGS_OS," \ |
| $d/Makefile.orig > $d/Makefile |
| done |
| fi |
| |
| make depend |
| echo $PATH |
| if [ "X$TURBOVNC" = "X" ]; then |
| make all |
| else |
| make CCOPTIONS="-DTURBOVNC $CPPFLAGS_OS" EXTRA_LIBRARIES="$TURBOVNC" all |
| fi |
| ls -l vncviewer/vncviewer |
| cd "$start" |
| src=$tmp/vnc_unixsrc/vncviewer/vncviewer |
| sync |
| sleep 2 |
| sync |
| strip $src |
| sync |
| sleep 2 |
| sync |
| wc $src |
| sum $src |
| sleep 2 |
| |
| suff="" |
| if [ `uname` = "Darwin" ]; then |
| suff=".x11" |
| fi |
| if [ "X$TURBOVNC" != "X" ]; then |
| suff="$suff.turbovnc" |
| fi |
| echo cp -p $src $dest/vncviewer$suff |
| sleep 1 |
| cp -p $src $dest/vncviewer$suff || exit 1 |
| |
| echo |
| pline |
| echo "LISTING, HELP, and LDD THE VNCVIEWER:" |
| echo |
| sleep 1 |
| |
| ls -l $src $dest/vncviewer$suff |
| echo |
| echo $dest/vncviewer$suff -h |
| echo |
| $dest/vncviewer$suff -h |
| echo |
| echo $LDD $dest/vncviewer$suff |
| echo |
| $LDD $dest/vncviewer$suff |
| echo "" |
| fi |
| |
| # Do stunnel: |
| # |
| if [ "X$SSVNC_BUILD_SKIP_STUNNEL" = "X" ]; then |
| stunnel_src=`ls -td ./src/stunnel* | head -1` |
| if [ ! -d $stunnel_src ]; then |
| echo "could not locate stunnel source" |
| exit 1 |
| fi |
| echo "" |
| pline |
| echo "BUILDING THE STUNNEL" |
| echo "" |
| sleep 1 |
| |
| cp -pR "$stunnel_src" "$tmp/stunnel" || exit 1 |
| |
| echo "applying stunnel patches:" |
| start=`pwd` |
| cd $tmp; |
| failed=0 |
| count=0 |
| for patch in ../../patches/stunnel* |
| do |
| if [ ! -f "$patch" ]; then |
| continue |
| fi |
| if [ "X$PATCH_FAIL" != "X" ]; then |
| failed=1 |
| break |
| fi |
| echo PATCHING WITH: "$patch" |
| ls -l "$patch" |
| sleep 1 |
| patch -p0 < $patch |
| if [ $? != 0 ]; then |
| failed=`expr $failed + 1` |
| else |
| count=`expr $count + 1` |
| fi |
| done |
| sleep 1 |
| cd "$start" |
| if [ $failed != 0 -o $count = 0 ]; then |
| ball=src/zips/stunnel.patched.tar |
| echo "patches failed, trying to use backup tarball:" |
| ls -l $ball |
| sleep 2 |
| cat $ball | (cd $tmp; tar -xvf -) |
| fi |
| echo |
| |
| |
| cd $tmp/stunnel |
| if [ `uname` = "SunOS" ]; then |
| cp configure configure.orig |
| sed -e "s,maindir in,maindir in /usr/sfw," configure.orig > configure |
| fi |
| env LDFLAGS="-L$start/$libs $LDFLAGS_OS" CPPFLAGS="$CPPFLAGS_OS" ./configure --disable-libwrap --enable-ipv6 |
| make |
| ls -l src/stunnel |
| cd "$start" |
| src=$tmp/stunnel/src/stunnel |
| sync |
| sleep 2 |
| sync |
| strip $src |
| sync |
| sleep 2 |
| sync |
| wc $src |
| sum $src |
| sleep 2 |
| echo cp -p $src $dest/stunnel |
| cp -p $src $dest/stunnel || exit 1 |
| sleep 1 |
| cp -p $src $dest/stunnel || exit 1 |
| |
| echo |
| pline |
| echo "LISTING, HELP, and LDD THE STUNNEL:" |
| echo |
| sleep 1 |
| |
| ls -l $src $dest/stunnel |
| echo |
| echo $dest/stunnel -help |
| echo |
| $dest/stunnel -help |
| echo |
| echo $LDD $dest/stunnel |
| echo |
| $LDD $dest/stunnel |
| echo "" |
| fi |
| |
| # Do vncstorepw and ld preload friends: |
| # |
| if [ "X$SSVNC_BUILD_SKIP_VNCSTOREPW" = "X" ]; then |
| vncpw_tar=`ls -td ./src/zips/vncstorepw* | head -1` |
| if [ ! -f $vncpw_tar ]; then |
| echo "could not locate vncstorepw source" |
| exit 1 |
| fi |
| echo "" |
| pline |
| echo "BUILDING THE VNCSTOREPW AND FRIENDS" |
| echo "" |
| sleep 1 |
| |
| cat "$vncpw_tar" | (cd $tmp; tar xvf -) |
| |
| cd $tmp/vncstorepw |
| make |
| |
| cd "$start" |
| cp -p $tmp/vncstorepw/vncstorepw $tmp/vncstorepw/lim_accept.so $dest |
| echo "" |
| |
| cd $tmp/vncstorepw |
| make clean |
| |
| env LD_SSL="-L$start/$libs $LDFLAGS_OS $LD_SSL" CPP_SSL="$CPPFLAGS_OS" make ultravnc_dsm_helper |
| |
| cd "$start" |
| cp -p $tmp/vncstorepw/ultravnc_dsm_helper $dest |
| echo "" |
| fi |
| |
| |
| if [ "X$SSVNC_BUILD_SKIP_VIEWER" = "X" -a "X$SSVNC_BUILD_SKIP_STUNNEL" = "X" ]; then |
| # list the viewer again. |
| |
| echo |
| pline |
| echo "LISTING, HELP, and LDD THE VNCVIEWER (again):" |
| echo |
| sleep 1 |
| |
| ls -l $dest/vncviewer$suff |
| echo |
| echo $dest/vncviewer$suff -h |
| echo |
| $dest/vncviewer$suff -h |
| echo |
| echo $LDD $dest/vncviewer$suff |
| echo |
| $LDD $dest/vncviewer$suff |
| fi |