PageRenderTime 51ms CodeModel.GetById 21ms RepoModel.GetById 0ms app.codeStats 0ms

/tags/R2009-05-08/admin/Windows/mingw32/gcc43_common.sh

#
Shell | 486 lines | 332 code | 78 blank | 76 comment | 47 complexity | e0e079508e48fa9d159e3c7041c5d19c MD5 | raw file
Possible License(s): GPL-2.0, BSD-3-Clause, LGPL-2.1, GPL-3.0, LGPL-3.0
  1. # Common Functions for build process
  2. export TOPDIR SRCDIR
  3. # TOOLS USED
  4. TAR=tar
  5. TAR_FLAGS=xf
  6. TARTYPE=
  7. STRIP=strip
  8. STRIP_FLAGS="--strip-unneeded"
  9. CP=${TOPDIR}/../copy-if-changed.sh
  10. CP_FLAGS=-vp
  11. WGET=wget
  12. WGET_FLAGS=-N
  13. RM=rm
  14. RM_FLAGS=-v
  15. MV=mv
  16. MV_FLAGS=-v
  17. SED=sed
  18. SEVENZIP="/c/Program Files/7-Zip/7z.exe"
  19. SEVENZIP_FLAGS="a -t7z -mx7 -m0=BCJ2 -m1=LZMA:d24 -m2=LZMA:d19 -m3=LZMA:d19 -mb0:1 -mb0s1:2 -mb0s2:3"
  20. MAKENSIS="/c/Programs/NSIS/makensis.exe"
  21. export STRIP STRIP_FLAGS
  22. # Path to utilities required during the build process
  23. # Leave these empty to search for them on dfault PATH
  24. # If not empty, path to utilities will be added to PATH
  25. # where necessry
  26. # Microsoft Help Workshop (gnuplot)
  27. PATH_HCW=
  28. # MiKTeX (gnuplot, octave)
  29. PATH_MIKTEX=
  30. # Ghostscript (octave)
  31. PATH_GHOSTSCRIPT=
  32. # GCC compilers used
  33. GCC_VER=-4.3.0
  34. GCC_SYS=-dw2
  35. GCC_PREFIX=mingw32-
  36. # Prefix for our build
  37. #PREFIX=`echo ${TOPDIR} | sed -e 's+\(.*\)/[^/]*$+\1+'`/usr/local
  38. PREFIX=/usr/local/octave-mingw32_gcc${GCC_VER}${GCC_SYS}
  39. PREFIX_OCT=${PREFIX}/octave
  40. # Base paths for include files, import libraries, binaries&dlls, static libraries
  41. INCLUDE_BASE=${PREFIX}
  42. LIBRARY_BASE=${PREFIX}
  43. SHAREDLIB_BASE=${PREFIX}
  44. BINARY_BASE=${PREFIX}
  45. STATICLIBRARY_BASE=${PREFIX}
  46. LICENSE_BASE=${PREFIX}
  47. # default subdirectories
  48. INCLUDE_DEFAULT=include
  49. BINARY_DEFAULT=bin
  50. SHAREDLIB_DEFAULT=bin
  51. LIBRARY_DEFAULT=lib
  52. STATICLIBRARY_DEFAULT=staticlib
  53. LICENSE_DEFAULT=license
  54. # subdirs for above components, can be overridden locally
  55. # (e.g. for GSL: ${INCLUDE} = include/gsl )
  56. if [ -z ${INCLUDE_DIR} ]; then INCLUDE_DIR=${INCLUDE_DEFAULT}; fi
  57. if [ -z ${BINARY_DIR} ]; then BINARY_DIR=${BINARY_DEFAULT}; fi
  58. if [ -z ${SHAREDLIB_DIR} ]; then SHAREDLIB_DIR=${SHAREDLIB_DEFAULT}; fi
  59. if [ -z ${LIBRARY_DIR} ]; then LIBRARY_DIR=${LIBRARY_DEFAULT}; fi
  60. if [ -z ${STATICLIBRARY_DIR} ]; then STATICLIBRARY_DIR=${STATICLIBRARY_DEFAULT}; fi
  61. if [ -z ${LICENSE_DIR} ]; then LICENSE_DIR=${LICENSE_DEFAULT}; fi
  62. # create full paths for component directories
  63. BINARY_PATH=${BINARY_BASE}/${BINARY_DIR}
  64. INCLUDE_PATH=${INCLUDE_BASE}/${INCLUDE_DIR}
  65. SHAREDLIB_PATH=${SHAREDLIB_BASE}/${SHAREDLIB_DIR}
  66. LIBRARY_PATH=${LIBRARY_BASE}/${LIBRARY_DIR}
  67. STATICLIBRARY_PATH=${STATICLIBRARY_BASE}/${STATICLIBRARY_DIR}
  68. LICENSE_PATH=${LICENSE_BASE}/${LICENSE_DIR}
  69. PKGCONFIGDATA_PATH=${LIBRARY_PATH}/pkgconfig
  70. DEVBIN_PATH=${PREFIX}/dev/bin
  71. PATH=${PATH}:${BINARY_PATH}:${DEVBIN_PATH}
  72. export BINARY_PATH INCLUDE_PATH LIBRARY_PATH SHAREDLIB_PATH STATICLIBRARY_PATH DEVBIN_PATH
  73. # Set environment variables for GCC
  74. LIBRARY_PATH=${LIBRARY_PATH}
  75. CPATH=${INCLUDE_BASE}/${INCLUDE_DEFAULT}
  76. export LIBRARY_PATH CPATH
  77. CC=${GCC_PREFIX}gcc${GCC_VER}${GCC_SYS}
  78. CXX=${GCC_PREFIX}g++${GCC_VER}${GCC_SYS}
  79. F77=${GCC_PREFIX}gfortran${GCC_VER}${GCC_SYS}
  80. CPP=${GCC_PREFIX}cpp${GCC_VER}${GCC_SYS}
  81. export CC CXX F77 CPP
  82. # Common GCC FLAGS
  83. # Building with shared libgcc and shared libsdtc++ support
  84. #
  85. # According to mingw32, the way to do is:
  86. # LDFLAGS="-shared-libgcc" CXXFLAGS="-D_DLL"
  87. # and add "-lstdc++_s" at linking stage
  88. #
  89. # http://garr.dl.sourceforge.net/sourceforge/mingw/gcc-4.2.1-dw2-2-release_notes.txt
  90. # http://sourceforge.net/project/shownotes.php?release_id=596917
  91. #
  92. # Unfortunately, libtool does (yet?) not honour LDFLAGS, and here in our case
  93. # especially -shared-libgcc.
  94. #
  95. # http://lists.gnu.org/archive/html/libtool/2006-02/msg00058.html
  96. # http://lists.gnu.org/archive/html/bug-libtool/2005-10/msg00002.html
  97. #
  98. # The suggested workaround is to specify the -shared-libgcc flag as part
  99. # of the compiled name, e.g.
  100. # CC="mingw32-gcc-4.3.0-dw2.exe -shared-libgcc"
  101. #
  102. # This works, so I'll use this for building the dependency libs, which use
  103. # libtool, and the former method for those without libtool
  104. #
  105. # Since LDFLAGS might containg additional flags, here I define a separate
  106. # variable LIBGCCLDFLAGS, which can be inserted into LDFLAGS and/or
  107. # CC, CXX and F77 as necessary at configure&build stage.
  108. #
  109. # MIND that you should NOT add -shared-libgcc to CPP's name, since cpp does
  110. # not understand this flag (why sould it, anyway)
  111. case $GCC_VER in
  112. -4.3.0)
  113. # shared libgcc link flag
  114. LIBGCCLDFLAGS="-shared-libgcc"
  115. # Architecture flags
  116. GCC_ARCH_FLAGS="-march=i686 -mtune=generic"
  117. # Optimization flags
  118. GCC_OPT_FLAGS="-O2"
  119. # Linker flags
  120. LDFLAGS="$LIBGCCLDFLAGS"
  121. # Linker flas for Fortran
  122. FLDFLAGS=$LDFLAGS
  123. # C++ libraries
  124. CXXLIBS="-lstdc++_s"
  125. # C++ Compiler Flags
  126. CXXFLAGS="-D_DLL"
  127. ;;
  128. -4.3.1)
  129. # Architecture flags
  130. GCC_ARCH_FLAGS="-march=i686 -mtune=i686"
  131. # Optimization flags
  132. GCC_OPT_FLAGS="-O2"
  133. # Linker flags
  134. LDFLAGS=""
  135. FLDFLAGS=$LDFLAGS
  136. CXXLIBS=""
  137. CXXFLAGS=""
  138. ;;
  139. esac
  140. export GCC_ARCH_FLAGS GCC_OPT_FLAGS LDFLAGS FLDFLAGS CXXLIBS CXXFLAGS
  141. # Common Functions
  142. # download
  143. download_core() {
  144. ( for a in $1; do ${WGET} ${WGET_FLAGS} "$a"; done )
  145. }
  146. download() {
  147. ( download_core ${URL} )
  148. }
  149. mkpatch_pre() { echo ; }
  150. mkpatch()
  151. {
  152. mkpatch_pre
  153. ( cd ${TOPDIR} && diff -urN -x '*.exe' -x '*.dll' -x '*.o' -x '*.a' -x '*.bak' ${DIFF_FLAGS} `basename ${SRCDIR_ORIG}` `basename ${SRCDIR}` > ${PATCHFILE} )
  154. mkpatch_post
  155. }
  156. mkpatch_post() { echo ; }
  157. # apply source code patch file to source code
  158. applypatch_pre() { echo ; }
  159. applypatch() {
  160. applypatch_pre
  161. ( cd ${SRCDIR} && patch -p 1 -u -i ../${PATCHFILE} )
  162. applypatch_post
  163. }
  164. applypatch_post() { echo ; }
  165. make_common_pre()
  166. {
  167. if [ ! -z ${MAKEFILE} ]; then MAKE_FLAGS="${MAKE_FLAGS} -f ${MAKEFILE}"; fi
  168. }
  169. make_common()
  170. {
  171. make_common_pre
  172. echo make ${MAKE_FLAGS} $*
  173. make ${MAKE_FLAGS} $*
  174. }
  175. build_pre() { echo ; }
  176. build()
  177. {
  178. build_pre
  179. ( cd ${BUILDDIR} && make_common )
  180. build_post
  181. }
  182. build_post() { echo ; }
  183. install_pre()
  184. {
  185. if [ ! -e ${BINARY_PATH} ]; then mkdir -vp ${BINARY_PATH}; fi
  186. if [ ! -e ${LIBRARY_PATH} ]; then mkdir -vp ${LIBRARY_PATH}; fi
  187. if [ ! -e ${INCLUDE_PATH} ]; then mkdir -vp ${INCLUDE_PATH}; fi
  188. if [ ! -e ${STATICLIBRARY_PATH} ]; then mkdir -vp ${STATICLIBRARY_PATH}; fi
  189. if [ ! -e ${LICENSE_PATH} ]; then mkdir -vp ${LICENSE_PATH}; fi
  190. if [ ! -e ${PKGCONFIGDATA_PATH} ]; then mkdir -vp ${PKGCONFIGDATA_PATH}; fi
  191. }
  192. install()
  193. {
  194. install_pre
  195. ( cd ${BUILDDIR} && make_common install );
  196. install_post
  197. }
  198. install_post() { echo ; }
  199. clean_pre() { echo ; }
  200. clean()
  201. {
  202. clean_pre
  203. ( cd ${BUILDDIR} && make_common clean );
  204. clean_post
  205. }
  206. clean_post() { echo ; }
  207. uninstall_pre() { echo ; }
  208. uninstall()
  209. {
  210. uninstall_pre
  211. ( cd ${BUILDDIR} && make_common uninstall );
  212. uninstall_post
  213. }
  214. uninstall_post()
  215. {
  216. # Remove installation directories if empty
  217. rmdir --ignore-fail-on-non-empty ${INCLUDE_PATH}
  218. rmdir --ignore-fail-on-non-empty ${BINARY_PATH}
  219. rmdir --ignore-fail-on-non-empty ${LIBRARY_PATH}
  220. rmdir --ignore-fail-on-non-empty ${SHAREDLIB_PATH}
  221. rmdir --ignore-fail-on-non-empty ${STATICLIBRARY_PATH}
  222. # The LICENSE Directory
  223. rmdir --ignore-fail-on-non-empty ${LICENSE_PATH}/${PKG}
  224. rmdir --ignore-fail-on-non-empty ${LICENSE_PATH}
  225. }
  226. check_pre() { echo ; }
  227. check()
  228. {
  229. check_pre
  230. ( cd ${BUILDDIR} && make_common check );
  231. check_post
  232. }
  233. check_post() { echo ; }
  234. unpack_pre()
  235. {
  236. if [ -d ${TOPDIR}/${SRCDIR} ]; then
  237. echo Removing ${TOPDIR}/${SRCDIR} ...
  238. rm -rf ${TOPDIR}/${SRCDIR};
  239. fi
  240. }
  241. unpack()
  242. {
  243. (
  244. unpack_pre
  245. ${TAR} -${TAR_TYPE} -${TAR_FLAGS} ${TOPDIR}/${SRCFILE}
  246. unpack_post
  247. )
  248. }
  249. unpack_post() { echo ; }
  250. unpack_add_ver()
  251. {
  252. # some packages extract into the subdirectory solely containing
  253. # the package NAME, not a combination of NAME and VERSION
  254. #
  255. # for these, add the version specifically in here
  256. unpack_pre;
  257. rm -rf tmp
  258. ( mkdir tmp && cd tmp && ${TAR} -${TAR_TYPE} -${TAR_FLAGS} ${TOPDIR}/${SRCFILE} && mv $PKG ../$SRCDIR )
  259. unpack_post;
  260. }
  261. unpack_orig_pre()
  262. {
  263. if [ -d ${TOPDIR}/${SRCDIR_ORIG} ]; then
  264. echo Removing ${TOPDIR}/${SRCDIR_ORIG} ...
  265. rm -rf ${TOPDIR}/${SRCDIR_ORIG};
  266. fi
  267. }
  268. unpack_orig()
  269. {
  270. (
  271. unpack_orig_pre
  272. ( mkdir -p ${TOPDIR}/tmp && cd ${TOPDIR}/tmp && ${TAR} -${TAR_TYPE} -${TAR_FLAGS} ${TOPDIR}/${SRCFILE} && mv ${SRCDIR} ${TOPDIR}/${SRCDIR_ORIG} && cd ${TOPDIR} && rm -rf tmp)
  273. unpack_orig_post
  274. )
  275. }
  276. unpack_orig_post() { echo ; }
  277. unpack_orig_add_ver()
  278. {
  279. # some packages extract into the subdirectory solely containing
  280. # the package NAME, not a combination of NAME and VERSION
  281. #
  282. # for these, add the version specifically in here
  283. unpack_orig_pre;
  284. rm -rf tmp
  285. ( mkdir tmp && cd tmp && ${TAR} -${TAR_TYPE} -${TAR_FLAGS} ${TOPDIR}/${SRCFILE} && mv $PKG ../$SRCDIR_ORIG )
  286. rm -rf tmp
  287. unpack_orig_post;
  288. }
  289. conf_pre() { echo ; }
  290. conf()
  291. {
  292. echo Not implemented!
  293. }
  294. conf_post() { echo ; }
  295. mkdirs_pre()
  296. {
  297. if [ -d ${BUILDDIR} ]; then
  298. echo removing ${BUILDDIR} ...
  299. rm -rf ${BUILDDIR}
  300. fi
  301. }
  302. mkdirs()
  303. {
  304. mkdirs_pre;
  305. ( cd ${TOPDIR} && mkdir -vp ${BUILDDIR}; )
  306. mkdirs_post;
  307. }
  308. mkdirs_post() { echo; }
  309. substvars_pre() { echo ; }
  310. substvars()
  311. {
  312. echo Making $2 from $1 ...
  313. ${SED} \
  314. -e "s+@SRCDIR@+${TOPDIR}/${SRCDIR}+" \
  315. -e "s+@TOPDIR@+${TOPDIR}+" \
  316. -e "s+@GCC_VER@+${GCC_VER}+" \
  317. -e "s+@GCC_SYS@+${GCC_SYS}+" \
  318. -e "s+@REL@+${REL}+" \
  319. $1 > $2
  320. }
  321. substvars_post() { echo ; }
  322. srcpkg()
  323. {
  324. "${SEVENZIP}" ${SEVENZIP_FLAGS} ${SRCPKG_PATH}/${FULLPKG}-src.7z ${SRCFILE} ${PATCHFILE} build-${VER}-${REL}.sh
  325. }
  326. modify_libtool_all()
  327. {
  328. if [ -f $1 ]; then
  329. _libtool_removelibprefix $1;
  330. _libtool_removerelease $1;
  331. _libtool_removeversuffix $1;
  332. fi
  333. }
  334. modify_libtool_noversuffix()
  335. {
  336. if [ -f $1 ]; then
  337. _libtool_removelibprefix $1;
  338. _libtool_removeversuffix $1;
  339. fi
  340. }
  341. modify_libtool_norelease()
  342. {
  343. if [ -f $1 ]; then
  344. _libtool_removelibprefix $1;
  345. _libtool_removerelease $1;
  346. fi
  347. }
  348. modify_libtool_nolibprefix()
  349. {
  350. if [ -f $1 ]; then
  351. _libtool_removelibprefix $1;
  352. fi
  353. }
  354. _libtool_removelibprefix()
  355. {
  356. # remove the 'LIB' prefix of shared library names
  357. echo " Removing 'LIB' prefix of shared library names..."
  358. sed -e '/^soname_spec/ s+"\\${libname}+"\\\`echo \\\${libname} | \\\$SED -e s/^lib//\\\`+' $1 > $1.mod && mv $1.mod $1
  359. }
  360. _libtool_removerelease()
  361. {
  362. # remove the ${release} from shared library names
  363. echo " Removing \${release} from shared library names..."
  364. sed -e '/^soname_spec/ s+\\`echo \\${release} | \\$SED -e s/\[.\]/-/g\\`++' $1 > $1.mod && mv $1.mod $1
  365. }
  366. _libtool_removeversuffix()
  367. {
  368. # remove the ${versuffix} from shared library names
  369. echo " Removing \${versuffix} from shared library names..."
  370. sed -e '/^soname_spec/ s+\\\${versuffix}++' $1 > $1.mod && mv $1.mod $1
  371. }
  372. clone()
  373. {
  374. # new release
  375. NREL=$((${REL}+1))
  376. sed -e "s|REL=${REL}|REL=${NREL}|" < build-${VER}-${REL}.sh > build-${VER}-${NREL}.sh
  377. }
  378. main() {
  379. (
  380. echo "$1" "$2" "$3" "$4" "$5"
  381. until [[ $1 == "" ]];
  382. do
  383. arg=$1;
  384. case $arg in
  385. download|mkpatch|build|install|clean|uninstall|check|unpack|unpack_orig|conf|mkdirs|all|applypatch|install_pkg|srcpkg|clone)
  386. $arg
  387. export STATUS=$?
  388. ;;
  389. *)
  390. echo "Error: bad arguments"
  391. exit 1
  392. ;;
  393. esac
  394. shift
  395. done
  396. )
  397. }
  398. # possibly override something in here by a user
  399. # or machine-dependent local configuration...
  400. if [ -e gcc43_localconf.sh ]; then
  401. source gcc43_localconf.sh
  402. fi
  403. if [ -e ../gcc43_localconf.sh ]; then
  404. source ../gcc43_localconf.sh
  405. fi
  406. if [ -e ../../gcc43_localconf.sh ]; then
  407. source ../../gcc43_localconf.sh
  408. fi