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.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361
  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.4
  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. modules74="fontcacheproto \
  55. evieext"
  56. init()
  57. {
  58. update_modules
  59. pushd xorg
  60. tar jxf ~/.tigervnc-xorg-$XORG_VERSION/util-macros.tar.bz2
  61. pushd util-macros-*
  62. echo "Building macros"
  63. ./configure --prefix=${PREFIX}
  64. ($MAKE install)
  65. popd
  66. pushd xserver
  67. if [ "$XORG_VERSION" = "7.4" ]; then
  68. patch -p1 < $SRCDIR/unix/xserver16.patch
  69. else
  70. patch -p1 < $SRCDIR/unix/xserver18.patch
  71. fi
  72. for all in `find $SRCDIR/unix/xorg-$XORG_VERSION-patches/ -type f |grep '.*\.patch$'`; do
  73. echo Applying $all
  74. patch -p1 < $all
  75. done
  76. popd
  77. popd
  78. }
  79. update_modules()
  80. {
  81. if [ -d xorg ]; then rm -rf xorg; fi
  82. if [ -d xorg.build ]; then rm -rf xorg.build; fi
  83. mkdir xorg
  84. pushd xorg
  85. $SRCDIR/unix/download-xorg-$XORG_VERSION
  86. for module in ${modules}; do
  87. tar jxf ~/.tigervnc-xorg-$XORG_VERSION/${module}.tar.bz2
  88. done
  89. [ -r ~/.tigervnc-xorg-$XORG_VERSION/Mesa.tar.bz2 ] && \
  90. tar jxf ~/.tigervnc-xorg-$XORG_VERSION/Mesa.tar.bz2
  91. [ -r ~/.tigervnc-xorg-$XORG_VERSION/Mesa.tar.gz ] && \
  92. tar zxf ~/.tigervnc-xorg-$XORG_VERSION/Mesa.tar.gz
  93. tar jxf ~/.tigervnc-xorg-$XORG_VERSION/freetype.tar.bz2
  94. tar jxf ~/.tigervnc-xorg-$XORG_VERSION/xorg-server.tar.bz2
  95. cp -r $SRCDIR/unix/xserver xserver
  96. cp -r xorg-server-1.*/* xserver
  97. popd
  98. }
  99. build ()
  100. {
  101. if [ $XONLY -eq 0 ]; then
  102. # Build VNC
  103. echo "*** Building VNC ***"
  104. cmake -G"Unix Makefiles" ${1+"$@"} -DUSE_INCLUDED_ZLIB=1 -DBUILD_STATIC=1 $SRCDIR
  105. $MAKE
  106. # Build Xorg
  107. echo "*** Building Xorg ***"
  108. pushd xorg
  109. # build freetype
  110. echo "*** Building freetype ***"
  111. pushd freetype-*
  112. ./configure ${CFGHOST} --prefix=${PREFIX} --enable-static --disable-shared
  113. if [ $? -ne 0 ]; then
  114. echo "Failed to configure freetype."
  115. exit
  116. fi
  117. $MAKE install
  118. popd
  119. for module in ${modules}; do
  120. extraoptions=""
  121. cd ${module}-*
  122. echo ======================
  123. echo configuring ${module}
  124. echo ======================
  125. if [ "${module}" = "libX11" ]; then
  126. extraoptions="${extraoptions} --without-xcb --disable-specs"
  127. fi
  128. if [ "${module}" = "libSM" ]; then
  129. extraoptions="${extraoptions} --without-libuuid"
  130. fi
  131. if [ "${module}" = "pixman" ]; then
  132. extraoptions="${extraoptions} --disable-gtk"
  133. fi
  134. if [ "${module}" = "libXfont" ]; then
  135. extraoptions="${extraoptions} --with-freetype-config=${PREFIX}/bin/freetype-config"
  136. fi
  137. OLD_CFLAGS=${CFLAGS}
  138. OLD_CXXFLAGS=${CXXFLAGS}
  139. CFLAGS=${CFLAGS}' -fPIC'
  140. CXXFLAGS=${CXXFLAGS}' -fPIC'
  141. export CFLAGS CXXFLAGS
  142. ./configure ${CFGHOST} --prefix="${PREFIX}" ${extraoptions} --enable-static --disable-shared
  143. CFLAGS=${OLD_CFLAGS}
  144. CXXFLAGS=${OLD_CXXFLAGS}
  145. export CFLAGS CXXFLAGS
  146. echo ======================
  147. echo building ${module}
  148. echo ======================
  149. if [ $? -ne 0 ]; then
  150. echo "Failed to configure ${module}."
  151. exit
  152. fi
  153. $MAKE install
  154. cd ..
  155. done
  156. # build mesa
  157. echo "*** Building Mesa ***"
  158. pushd Mesa-*
  159. ./configure ${CFGHOST} --prefix=${PREFIX} --disable-driglx-direct --with-dri-drivers=swrast --with-driver=dri --disable-glut --without-demos
  160. if [ $? -ne 0 ]; then
  161. echo "Failed to configure Mesa."
  162. exit
  163. fi
  164. $MAKE
  165. $MAKE install
  166. popd
  167. popd
  168. fi # XONLY
  169. # build xserver
  170. echo "*** Building xserver ***"
  171. pushd xorg/xserver
  172. autoreconf -fiv
  173. 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}"
  174. ./configure ${CFGHOST} --prefix=${PREFIX} ${XORGCFGFLAGS}
  175. if [ $? -ne 0 ]; then
  176. echo "Failed to configure X server."
  177. exit
  178. fi
  179. $MAKE TIGERVNC_SRCDIR=$SRCDIR install
  180. popd
  181. }
  182. rebuild ()
  183. {
  184. # Build VNC
  185. echo "*** Building VNC ***"
  186. $MAKE ${1+"$@"}
  187. # build xserver
  188. echo "*** Building xserver ***"
  189. pushd xorg/xserver
  190. $MAKE TIGERVNC_SRCDIR=$SRCDIR install ${1+"$@"}
  191. popd
  192. }
  193. usage ()
  194. {
  195. echo "Usage: $0 init [-version <7.4 | 7.5>]"
  196. echo
  197. echo " $0 build [-version <7.4 | 7.5>]"
  198. echo " [additional CMake flags]"
  199. echo
  200. echo " $0 rebuild [additional make options]"
  201. echo
  202. echo " $0 update [-version <7.4 | 7.5>]"
  203. echo
  204. exit 1
  205. }
  206. if [ -x '/usr/bin/getconf' -a "$PARALLEL_MAKE" = "1" ]; then
  207. MAKE_PARALLEL=`/usr/bin/getconf _NPROCESSORS_ONLN 2>&1`
  208. [ "$MAKE_PARALLEL" -gt 1 ] && MAKE="$MAKE -j$MAKE_PARALLEL"
  209. fi
  210. while [ $# -gt 0 ]
  211. do
  212. case "$1" in
  213. init) MODE=init ;;
  214. build) MODE=build ;;
  215. xbuild) MODE=build; XONLY=1 ;;
  216. rebuild) MODE=rebuild ;;
  217. update) MODE=update ;;
  218. -version) XORG_VERSION=$2; shift ;;
  219. -parallel) PARALLEL_MAKE=1; ;;
  220. -srcdir) SRCDIR=$2; shift ;;
  221. *) break ;;
  222. esac
  223. shift
  224. done
  225. case "$XORG_VERSION" in
  226. 7.4) modules=$modules" "$modules74 ;;
  227. 7.5) ;;
  228. *) if [ ! "$MODE" = "rebuild" ]; then usage; fi ;;
  229. esac
  230. pushd $SRCDIR
  231. SRCDIR=`pwd`
  232. echo "*** Using TigerVNC source tree at $SRCDIR ***"
  233. popd
  234. if [ "`pwd`" = "$SRCDIR/unix" ]; then
  235. cd $SRCDIR
  236. fi
  237. if [ "$PREFIX" = "" ]; then
  238. PREFIX=`pwd`/xorg.build
  239. fi
  240. if [ "$MODE" = "build" ]; then
  241. if [ ! -d ./xorg.build/syslib ]; then
  242. mkdir -p ./xorg.build/syslib
  243. fi
  244. for i in "$@"; do
  245. case "$i" in
  246. CC=*) CC=`echo $i | sed s/^CC=//g` ;;
  247. CXX=*) CXX=`echo $i | sed s/^CXX=//g` ;;
  248. CFLAGS=*) CFLAGS=`echo $i | sed s/^CFLAGS=//g` ;;
  249. CXXFLAGS=*) CXXFLAGS=`echo $i | sed s/^CXXFLAGS=//g` ;;
  250. LDFLAGS=*) LDFLAGS=`echo $i | sed s/^LDFLAGS=//g` ;;
  251. esac
  252. done
  253. if [ "$CC" = "" ]; then
  254. CC=gcc
  255. fi
  256. if [ "$CXX" = "" ]; then
  257. CXX=g++
  258. fi
  259. if [ "$CFLAGS" = "" ]; then
  260. CFLAGS=-O3
  261. fi
  262. if [ "$CXXFLAGS" = "" ]; then
  263. CXXFLAGS=-O3
  264. fi
  265. CFLAGS="$CFLAGS -fPIC"
  266. CXXFLAGS="$CXXFLAGS -fPIC"
  267. LDFLAGS="$LDFLAGS -static-libgcc -L`pwd`/xorg.build/syslib"
  268. echo CC = $CC
  269. echo CXX = $CXX
  270. echo CFLAGS = $CFLAGS
  271. echo CXXFLAGS = $CXXFLAGS
  272. echo LDFLAGS = $LDFLAGS
  273. if [[ $CFLAGS = *-m32* ]]; then
  274. CFGHOST="--host i686-pc-linux-gnu"
  275. fi
  276. STATICLIBS='libcrypto.a libz.a'
  277. for lib in $STATICLIBS; do
  278. if [ -f ./xorg.build/syslib/$lib ]; then
  279. rm -f ./xorg.build/syslib/$lib
  280. fi
  281. done
  282. IS64BIT=`echo -e "#ifdef __x86_64__\nis64bit_yes\n#else\nis64bit_no\n#endif" | $CC $CFLAGS -E - | grep is64bit`
  283. STATICLIBDIR=
  284. case $IS64BIT in
  285. is64bit_yes)
  286. if [ -d /usr/lib64 ]; then STATICLIBDIR=lib64;
  287. else STATICLIBDIR=lib; fi
  288. ;;
  289. is64bit_no)
  290. if [ -d /usr/lib32 ]; then STATICLIBDIR=lib32;
  291. else STATICLIBDIR=lib; fi
  292. ;;
  293. *)
  294. echo "Cannot determine whether compiler output is 64-bit or 32-bit. Are you using GCC?"
  295. exit 1
  296. ;;
  297. esac
  298. for lib in $STATICLIBS; do
  299. if [ -f /usr/$STATICLIBDIR/$lib ]; then
  300. ln -fs /usr/$STATICLIBDIR/$lib ./xorg.build/syslib
  301. else
  302. if [ -f /$STATICLIBDIR/$lib ]; then
  303. ln -fs /$STATICLIBDIR/$lib ./xorg.build/syslib
  304. else
  305. DYLIB=`echo $lib | sed s/\\\.a/\\.so/g`
  306. if [ -f /usr/$STATICLIBDIR/$DYLIB -o -f /$STATICLIBDIR/$DYLIB ]; then
  307. echo WARNING: Cannot find suitable $lib. Xvnc will depend on $DYLIB.
  308. fi
  309. fi
  310. fi
  311. done
  312. fi
  313. export ACLOCAL="aclocal -I ${PREFIX}/share/aclocal"
  314. export PKG_CONFIG_PATH="${PREFIX}/lib/pkgconfig:${PREFIX}/share/pkgconfig"
  315. case "$MODE" in
  316. init) init ;;
  317. build)
  318. export CFLAGS CXXFLAGS LDFLAGS
  319. build ${1+"$@"};
  320. ;;
  321. rebuild) rebuild ${1+"$@"} ;;
  322. update) update ;;
  323. *) usage ;;
  324. esac