You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

build-xorg 8.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347
  1. #!/bin/bash
  2. # -*- mode: shell-script; coding: UTF-8 -*-
  3. #
  4. # Build Xvnc with Xorg 7.4 or 7.5
  5. #
  6. set -e
  7. PREFIX=
  8. MAKE="make"
  9. PARALLEL_MAKE=0
  10. XORG_VERSION=7.5
  11. XONLY=0
  12. CFGHOST=
  13. SRCDIR=`dirname $0`/..
  14. modules="dri2proto \
  15. libpthread-stubs \
  16. glproto \
  17. xf86vidmodeproto \
  18. xextproto \
  19. xproto \
  20. kbproto \
  21. inputproto \
  22. xcmiscproto \
  23. bigreqsproto \
  24. fixesproto \
  25. damageproto \
  26. xf86driproto \
  27. randrproto \
  28. renderproto \
  29. scrnsaverproto \
  30. resourceproto \
  31. fontsproto \
  32. videoproto \
  33. compositeproto \
  34. xineramaproto \
  35. libdrm \
  36. libXau \
  37. xtrans \
  38. libXdmcp \
  39. libX11 \
  40. libXext \
  41. libXxf86vm \
  42. libICE \
  43. libSM \
  44. libXt \
  45. libXmu \
  46. libXfixes \
  47. libXdamage \
  48. libXi \
  49. libxkbfile \
  50. libfontenc \
  51. libXfont \
  52. libpciaccess \
  53. pixman"
  54. init()
  55. {
  56. update_modules
  57. pushd xorg
  58. tar jxf ~/.tigervnc-xorg-$XORG_VERSION/util-macros.tar.bz2
  59. pushd util-macros-*
  60. echo "Building macros"
  61. ./configure --prefix=${PREFIX}
  62. ($MAKE install)
  63. popd
  64. pushd xserver
  65. patch -p1 < $SRCDIR/unix/xserver18.patch
  66. for all in `find $SRCDIR/unix/xorg-$XORG_VERSION-patches/ -type f |grep '.*\.patch$'`; do
  67. echo Applying $all
  68. patch -p1 < $all
  69. done
  70. popd
  71. popd
  72. }
  73. update_modules()
  74. {
  75. if [ -d xorg ]; then rm -rf xorg; fi
  76. if [ -d xorg.build ]; then rm -rf xorg.build; fi
  77. mkdir xorg
  78. pushd xorg
  79. $SRCDIR/unix/download-xorg-$XORG_VERSION
  80. for module in ${modules}; do
  81. tar jxf ~/.tigervnc-xorg-$XORG_VERSION/${module}.tar.bz2
  82. done
  83. [ -r ~/.tigervnc-xorg-$XORG_VERSION/Mesa.tar.bz2 ] && \
  84. tar jxf ~/.tigervnc-xorg-$XORG_VERSION/Mesa.tar.bz2
  85. [ -r ~/.tigervnc-xorg-$XORG_VERSION/Mesa.tar.gz ] && \
  86. tar zxf ~/.tigervnc-xorg-$XORG_VERSION/Mesa.tar.gz
  87. tar jxf ~/.tigervnc-xorg-$XORG_VERSION/freetype.tar.bz2
  88. tar jxf ~/.tigervnc-xorg-$XORG_VERSION/xorg-server.tar.bz2
  89. cp -r $SRCDIR/unix/xserver xserver
  90. cp -r xorg-server-1.*/* xserver
  91. popd
  92. }
  93. build ()
  94. {
  95. if [ $XONLY -eq 0 ]; then
  96. # Build VNC
  97. echo "*** Building VNC ***"
  98. cmake -G"Unix Makefiles" ${1+"$@"} -DUSE_INCLUDED_ZLIB=1 -DBUILD_STATIC=1 $SRCDIR
  99. $MAKE
  100. # Build Xorg
  101. echo "*** Building Xorg ***"
  102. pushd xorg
  103. # build freetype
  104. echo "*** Building freetype ***"
  105. pushd freetype-*
  106. ./configure ${CFGHOST} --prefix=${PREFIX} --enable-static --disable-shared
  107. if [ $? -ne 0 ]; then
  108. echo "Failed to configure freetype."
  109. exit
  110. fi
  111. $MAKE install
  112. popd
  113. for module in ${modules}; do
  114. extraoptions=""
  115. cd ${module}-*
  116. echo ======================
  117. echo configuring ${module}
  118. echo ======================
  119. if [ "${module}" = "libX11" ]; then
  120. extraoptions="${extraoptions} --without-xcb --disable-specs"
  121. fi
  122. if [ "${module}" = "libSM" ]; then
  123. extraoptions="${extraoptions} --without-libuuid"
  124. fi
  125. if [ "${module}" = "pixman" ]; then
  126. extraoptions="${extraoptions} --disable-gtk"
  127. fi
  128. if [ "${module}" = "libXfont" ]; then
  129. extraoptions="${extraoptions} --with-freetype-config=${PREFIX}/bin/freetype-config"
  130. fi
  131. OLD_CFLAGS=${CFLAGS}
  132. OLD_CXXFLAGS=${CXXFLAGS}
  133. CFLAGS=${CFLAGS}' -fPIC'
  134. CXXFLAGS=${CXXFLAGS}' -fPIC'
  135. export CFLAGS CXXFLAGS
  136. ./configure ${CFGHOST} --prefix="${PREFIX}" ${extraoptions} --enable-static --disable-shared
  137. CFLAGS=${OLD_CFLAGS}
  138. CXXFLAGS=${OLD_CXXFLAGS}
  139. export CFLAGS CXXFLAGS
  140. echo ======================
  141. echo building ${module}
  142. echo ======================
  143. if [ $? -ne 0 ]; then
  144. echo "Failed to configure ${module}."
  145. exit
  146. fi
  147. $MAKE install
  148. cd ..
  149. done
  150. # build mesa
  151. echo "*** Building Mesa ***"
  152. pushd Mesa-*
  153. ./configure ${CFGHOST} --prefix=${PREFIX} --disable-driglx-direct --with-dri-drivers=swrast --with-driver=dri --disable-glut --without-demos
  154. if [ $? -ne 0 ]; then
  155. echo "Failed to configure Mesa."
  156. exit
  157. fi
  158. $MAKE
  159. $MAKE install
  160. popd
  161. popd
  162. fi # XONLY
  163. # build xserver
  164. echo "*** Building xserver ***"
  165. pushd xorg/xserver
  166. autoreconf -fiv
  167. XORGCFGFLAGS="--disable-dri --enable-dri2 --disable-composite --disable-xinerama --disable-xvfb --disable-xnest --disable-xorg --disable-dmx --disable-xwin --disable-xephyr --disable-kdrive --disable-config-dbus --disable-config-hal --disable-config-udev --with-sha1=libgcrypt SHA1_LIB=-lcrypto --disable-shared --enable-static ${XORGCFGFLAGS}"
  168. ./configure ${CFGHOST} --prefix=${PREFIX} ${XORGCFGFLAGS}
  169. if [ $? -ne 0 ]; then
  170. echo "Failed to configure X server."
  171. exit
  172. fi
  173. $MAKE TIGERVNC_SRCDIR=$SRCDIR install
  174. popd
  175. }
  176. rebuild ()
  177. {
  178. # Build VNC
  179. echo "*** Building VNC ***"
  180. $MAKE ${1+"$@"}
  181. # build xserver
  182. echo "*** Building xserver ***"
  183. pushd xorg/xserver
  184. $MAKE TIGERVNC_SRCDIR=$SRCDIR install ${1+"$@"}
  185. popd
  186. }
  187. usage ()
  188. {
  189. echo "Usage: $0 init [-version <7.4 | 7.5>]"
  190. echo
  191. echo " $0 build [-version <7.4 | 7.5>]"
  192. echo " [additional CMake flags]"
  193. echo
  194. echo " $0 rebuild [additional make options]"
  195. echo
  196. echo " $0 update [-version <7.4 | 7.5>]"
  197. echo
  198. exit 1
  199. }
  200. if [ -x '/usr/bin/getconf' -a "$PARALLEL_MAKE" = "1" ]; then
  201. MAKE_PARALLEL=`/usr/bin/getconf _NPROCESSORS_ONLN 2>&1`
  202. [ "$MAKE_PARALLEL" -gt 1 ] && MAKE="$MAKE -j$MAKE_PARALLEL"
  203. fi
  204. while [ $# -gt 0 ]
  205. do
  206. case "$1" in
  207. init) MODE=init ;;
  208. build) MODE=build ;;
  209. xbuild) MODE=build; XONLY=1 ;;
  210. rebuild) MODE=rebuild ;;
  211. update) MODE=update ;;
  212. -parallel) PARALLEL_MAKE=1; ;;
  213. -srcdir) SRCDIR=$2; shift ;;
  214. *) break ;;
  215. esac
  216. shift
  217. done
  218. pushd $SRCDIR
  219. SRCDIR=`pwd`
  220. echo "*** Using TigerVNC source tree at $SRCDIR ***"
  221. popd
  222. if [ "`pwd`" = "$SRCDIR/unix" ]; then
  223. cd $SRCDIR
  224. fi
  225. if [ "$PREFIX" = "" ]; then
  226. PREFIX=`pwd`/xorg.build
  227. fi
  228. if [ "$MODE" = "build" ]; then
  229. if [ ! -d ./xorg.build/syslib ]; then
  230. mkdir -p ./xorg.build/syslib
  231. fi
  232. for i in "$@"; do
  233. case "$i" in
  234. CC=*) CC=`echo $i | sed s/^CC=//g` ;;
  235. CXX=*) CXX=`echo $i | sed s/^CXX=//g` ;;
  236. CFLAGS=*) CFLAGS=`echo $i | sed s/^CFLAGS=//g` ;;
  237. CXXFLAGS=*) CXXFLAGS=`echo $i | sed s/^CXXFLAGS=//g` ;;
  238. LDFLAGS=*) LDFLAGS=`echo $i | sed s/^LDFLAGS=//g` ;;
  239. esac
  240. done
  241. if [ "$CC" = "" ]; then
  242. CC=gcc
  243. fi
  244. if [ "$CXX" = "" ]; then
  245. CXX=g++
  246. fi
  247. if [ "$CFLAGS" = "" ]; then
  248. CFLAGS=-O3
  249. fi
  250. if [ "$CXXFLAGS" = "" ]; then
  251. CXXFLAGS=-O3
  252. fi
  253. CFLAGS="$CFLAGS -fPIC"
  254. CXXFLAGS="$CXXFLAGS -fPIC"
  255. LDFLAGS="$LDFLAGS -static-libgcc -L`pwd`/xorg.build/syslib"
  256. echo CC = $CC
  257. echo CXX = $CXX
  258. echo CFLAGS = $CFLAGS
  259. echo CXXFLAGS = $CXXFLAGS
  260. echo LDFLAGS = $LDFLAGS
  261. if [[ $CFLAGS = *-m32* ]]; then
  262. CFGHOST="--host i686-pc-linux-gnu"
  263. fi
  264. STATICLIBS='libcrypto.a libz.a'
  265. for lib in $STATICLIBS; do
  266. if [ -f ./xorg.build/syslib/$lib ]; then
  267. rm -f ./xorg.build/syslib/$lib
  268. fi
  269. done
  270. IS64BIT=`echo -e "#ifdef __x86_64__\nis64bit_yes\n#else\nis64bit_no\n#endif" | $CC $CFLAGS -E - | grep is64bit`
  271. STATICLIBDIR=
  272. case $IS64BIT in
  273. is64bit_yes)
  274. if [ -d /usr/lib64 ]; then STATICLIBDIR=lib64;
  275. else STATICLIBDIR=lib; fi
  276. ;;
  277. is64bit_no)
  278. if [ -d /usr/lib32 ]; then STATICLIBDIR=lib32;
  279. else STATICLIBDIR=lib; fi
  280. ;;
  281. *)
  282. echo "Cannot determine whether compiler output is 64-bit or 32-bit. Are you using GCC?"
  283. exit 1
  284. ;;
  285. esac
  286. for lib in $STATICLIBS; do
  287. if [ -f /usr/$STATICLIBDIR/$lib ]; then
  288. ln -fs /usr/$STATICLIBDIR/$lib ./xorg.build/syslib
  289. else
  290. if [ -f /$STATICLIBDIR/$lib ]; then
  291. ln -fs /$STATICLIBDIR/$lib ./xorg.build/syslib
  292. else
  293. DYLIB=`echo $lib | sed s/\\\.a/\\.so/g`
  294. if [ -f /usr/$STATICLIBDIR/$DYLIB -o -f /$STATICLIBDIR/$DYLIB ]; then
  295. echo WARNING: Cannot find suitable $lib. Xvnc will depend on $DYLIB.
  296. fi
  297. fi
  298. fi
  299. done
  300. fi
  301. export ACLOCAL="aclocal -I ${PREFIX}/share/aclocal"
  302. export PKG_CONFIG_PATH="${PREFIX}/lib/pkgconfig:${PREFIX}/share/pkgconfig"
  303. case "$MODE" in
  304. init) init ;;
  305. build)
  306. export CFLAGS CXXFLAGS LDFLAGS
  307. build ${1+"$@"};
  308. ;;
  309. rebuild) rebuild ${1+"$@"} ;;
  310. update) update ;;
  311. *) usage ;;
  312. esac