#!/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 /usr/lib /lib /usr/local/lib /usr/pkg/lib /usr/sfw/lib /usr/openwin/lib do 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 cp -p "$try" $libs 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 < /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 make all 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 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,/var/ssl,/var/ssl /usr/sfw," configure.orig > configure fi env LDFLAGS="-L$start/$libs $LDFLAGS_OS" CPPFLAGS="$CPPFLAGS_OS" ./configure --disable-libwrap 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" 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