container-libs-functions-source.sh 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828
  1. # -----------------------------------------------------------------------------
  2. # This file is part of the xPacks distribution.
  3. # (https://xpack.github.io)
  4. # Copyright (c) 2019 Liviu Ionescu.
  5. #
  6. # Permission to use, copy, modify, and/or distribute this software
  7. # for any purpose is hereby granted, under the terms of the MIT license.
  8. # -----------------------------------------------------------------------------
  9. # Helper script used in the second edition of the GNU MCU Eclipse build
  10. # scripts. As the name implies, it should contain only functions and
  11. # should be included with 'source' by the container build scripts.
  12. # -----------------------------------------------------------------------------
  13. function do_zlib()
  14. {
  15. # http://zlib.net
  16. # http://zlib.net/fossils/
  17. # https://aur.archlinux.org/cgit/aur.git/tree/PKGBUILD?h=zlib-static
  18. # https://aur.archlinux.org/cgit/aur.git/tree/PKGBUILD?h=zlib-git
  19. # https://aur.archlinux.org/cgit/aur.git/tree/PKGBUILD?h=mingw-w64-zlib
  20. # 2013-04-28
  21. # ZLIB_VERSION="1.2.8"
  22. # 2017-01-15
  23. # ZLIB_VERSION="1.2.11"
  24. ZLIB_FOLDER_NAME="zlib-${ZLIB_VERSION}"
  25. local zlib_archive="${ZLIB_FOLDER_NAME}.tar.gz"
  26. local zlib_url="http://zlib.net/fossils/${zlib_archive}"
  27. local zlib_stamp_file_path="${INSTALL_FOLDER_PATH}/stamp-zlib-${ZLIB_VERSION}-installed"
  28. if [ ! -f "${zlib_stamp_file_path}" ]
  29. then
  30. cd "${SOURCES_FOLDER_PATH}"
  31. download_and_extract "${zlib_url}" "${zlib_archive}" "${ZLIB_FOLDER_NAME}"
  32. (
  33. if [ ! -d "${LIBS_BUILD_FOLDER_PATH}/${ZLIB_FOLDER_NAME}" ]
  34. then
  35. mkdir -p "${LIBS_BUILD_FOLDER_PATH}/${ZLIB_FOLDER_NAME}"
  36. # Copy the sources in the build folder.
  37. cp -r "${SOURCES_FOLDER_PATH}/${ZLIB_FOLDER_NAME}"/* \
  38. "${LIBS_BUILD_FOLDER_PATH}/${ZLIB_FOLDER_NAME}"
  39. fi
  40. cd "${LIBS_BUILD_FOLDER_PATH}/${ZLIB_FOLDER_NAME}"
  41. xbb_activate
  42. xbb_activate_installed_dev
  43. if [ "${TARGET_PLATFORM}" != "win32" ]
  44. then
  45. export CFLAGS="${XBB_CFLAGS} -Wno-shift-negative-value"
  46. # export LDFLAGS="${XBB_LDFLAGS_LIB}"
  47. # No config.status left, use the library.
  48. if [ ! -f "libz.a" ]
  49. then
  50. (
  51. echo
  52. echo "Running zlib configure..."
  53. bash "./configure" --help
  54. bash ${DEBUG} "./configure" \
  55. --prefix="${LIBS_INSTALL_FOLDER_PATH}"
  56. cp "configure.log" "${LOGS_FOLDER_PATH}/configure-zlib-log.txt"
  57. ) 2>&1 | tee "${LOGS_FOLDER_PATH}/configure-zlib-output.txt"
  58. fi
  59. (
  60. echo
  61. echo "Running zlib make..."
  62. # Build.
  63. make -j ${JOBS}
  64. make install
  65. ) 2>&1 | tee "${LOGS_FOLDER_PATH}/make-zlib-output.txt"
  66. else
  67. (
  68. echo
  69. echo "Running zlib make..."
  70. # Build.
  71. make -f win32/Makefile.gcc \
  72. PREFIX=${CROSS_COMPILE_PREFIX}- \
  73. prefix="${LIBS_INSTALL_FOLDER_PATH}" \
  74. CFLAGS="${XBB_CFLAGS} -Wp,-D_FORTIFY_SOURCE=2 -fexceptions --param=ssp-buffer-size=4"
  75. make -f win32/Makefile.gcc install \
  76. DESTDIR="${LIBS_INSTALL_FOLDER_PATH}/" \
  77. INCLUDE_PATH="include" \
  78. LIBRARY_PATH="lib" \
  79. BINARY_PATH="bin"
  80. ) 2>&1 | tee "${LOGS_FOLDER_PATH}/make-zlib-output.txt"
  81. fi
  82. )
  83. touch "${zlib_stamp_file_path}"
  84. else
  85. echo "Library zlib already installed."
  86. fi
  87. }
  88. function do_gmp()
  89. {
  90. # https://gmplib.org
  91. # https://gmplib.org/download/gmp/
  92. # https://aur.archlinux.org/cgit/aur.git/tree/PKGBUILD?h=gmp-hg
  93. # 01-Nov-2015
  94. # GMP_VERSION="6.1.0"
  95. # 16-Dec-2016
  96. # GMP_VERSION="6.1.2"
  97. GMP_FOLDER_NAME="gmp-${GMP_VERSION}"
  98. local gmp_archive="${GMP_FOLDER_NAME}.tar.xz"
  99. local gmp_url="https://gmplib.org/download/gmp/${gmp_archive}"
  100. local gmp_stamp_file_path="${INSTALL_FOLDER_PATH}/stamp-gmp-${GMP_VERSION}-installed"
  101. if [ ! -f "${gmp_stamp_file_path}" ]
  102. then
  103. cd "${SOURCES_FOLDER_PATH}"
  104. download_and_extract "${gmp_url}" "${gmp_archive}" "${GMP_FOLDER_NAME}"
  105. (
  106. mkdir -p "${LIBS_BUILD_FOLDER_PATH}/${GMP_FOLDER_NAME}"
  107. cd "${LIBS_BUILD_FOLDER_PATH}/${GMP_FOLDER_NAME}"
  108. xbb_activate
  109. xbb_activate_installed_dev
  110. export CFLAGS="-Wno-unused-value -Wno-empty-translation-unit -Wno-tautological-compare -Wno-overflow"
  111. export CPPFLAGS="${XBB_CPPFLAGS}"
  112. export LDFLAGS="${XBB_LDFLAGS_LIB}"
  113. # ABI is mandatory, otherwise configure fails on 32-bit.
  114. # (see https://gmplib.org/manual/ABI-and-ISA.html)
  115. export ABI="${TARGET_BITS}"
  116. if [ ! -f "config.status" ]
  117. then
  118. (
  119. echo
  120. echo "Running gmp configure..."
  121. # ABI is mandatory, otherwise configure fails on 32-bit.
  122. # (see https://gmplib.org/manual/ABI-and-ISA.html)
  123. bash "${SOURCES_FOLDER_PATH}/${GMP_FOLDER_NAME}/configure" --help
  124. bash ${DEBUG} "${SOURCES_FOLDER_PATH}/${GMP_FOLDER_NAME}/configure" \
  125. --prefix="${LIBS_INSTALL_FOLDER_PATH}" \
  126. \
  127. --build=${BUILD} \
  128. --host=${HOST} \
  129. --target=${TARGET} \
  130. \
  131. --enable-cxx \
  132. --enable-shared \
  133. --disable-static
  134. cp "config.log" "${LOGS_FOLDER_PATH}/config-gmp-log.txt"
  135. ) 2>&1 | tee "${LOGS_FOLDER_PATH}/configure-gmp-output.txt"
  136. fi
  137. (
  138. echo
  139. echo "Running gmp make..."
  140. # Build.
  141. # Parallel builds may fail.
  142. make -j ${JOBS}
  143. # make
  144. make install-strip
  145. ) 2>&1 | tee "${LOGS_FOLDER_PATH}/make-gmp-output.txt"
  146. )
  147. touch "${gmp_stamp_file_path}"
  148. else
  149. echo "Library gmp already installed."
  150. fi
  151. }
  152. function do_mpfr()
  153. {
  154. # http://www.mpfr.org
  155. # http://www.mpfr.org/history.html
  156. # https://git.archlinux.org/svntogit/packages.git/tree/trunk/PKGBUILD?h=packages/mpfr
  157. # 6 March 2016
  158. # MPFR_VERSION="3.1.4"
  159. # 7 September 2017
  160. # MPFR_VERSION="3.1.6"
  161. MPFR_FOLDER_NAME="mpfr-${MPFR_VERSION}"
  162. local mpfr_archive="${MPFR_FOLDER_NAME}.tar.xz"
  163. local mpfr_url="http://www.mpfr.org/${MPFR_FOLDER_NAME}/${mpfr_archive}"
  164. local mpfr_stamp_file_path="${INSTALL_FOLDER_PATH}/stamp-mpfr-${MPFR_VERSION}-installed"
  165. if [ ! -f "${mpfr_stamp_file_path}" ]
  166. then
  167. cd "${SOURCES_FOLDER_PATH}"
  168. download_and_extract "${mpfr_url}" "${mpfr_archive}" "${MPFR_FOLDER_NAME}"
  169. (
  170. mkdir -p "${LIBS_BUILD_FOLDER_PATH}/${MPFR_FOLDER_NAME}"
  171. cd "${LIBS_BUILD_FOLDER_PATH}/${MPFR_FOLDER_NAME}"
  172. xbb_activate
  173. xbb_activate_installed_dev
  174. export CFLAGS="${XBB_CFLAGS}"
  175. export CPPFLAGS="${XBB_CPPFLAGS}"
  176. export LDFLAGS="${XBB_LDFLAGS_LIB}"
  177. if [ ! -f "config.status" ]
  178. then
  179. (
  180. echo
  181. echo "Running mpfr configure..."
  182. bash "${SOURCES_FOLDER_PATH}/${MPFR_FOLDER_NAME}/configure" --help
  183. bash ${DEBUG} "${SOURCES_FOLDER_PATH}/${MPFR_FOLDER_NAME}/configure" \
  184. --prefix="${LIBS_INSTALL_FOLDER_PATH}" \
  185. \
  186. --build=${BUILD} \
  187. --host=${HOST} \
  188. --target=${TARGET} \
  189. \
  190. --disable-warnings
  191. cp "config.log" "${LOGS_FOLDER_PATH}/config-mpfr-log.txt"
  192. ) 2>&1 | tee "${LOGS_FOLDER_PATH}/configure-mpfr-output.txt"
  193. fi
  194. (
  195. echo
  196. echo "Running mpfr make..."
  197. # Build.
  198. # Parallel builds may fail.
  199. make -j ${JOBS}
  200. # make
  201. make install-strip
  202. ) 2>&1 | tee "${LOGS_FOLDER_PATH}/make-mpfr-output.txt"
  203. )
  204. touch "${mpfr_stamp_file_path}"
  205. else
  206. echo "Library mpfr already installed."
  207. fi
  208. }
  209. function do_mpc()
  210. {
  211. # http://www.multiprecision.org/
  212. # ftp://ftp.gnu.org/gnu/mpc
  213. # https://git.archlinux.org/svntogit/packages.git/tree/trunk/PKGBUILD?h=packages/libmpc
  214. # 20 Feb 2015
  215. # MPC_VERSION="1.0.3"
  216. MPC_FOLDER_NAME="mpc-${MPC_VERSION}"
  217. local mpc_archive="${MPC_FOLDER_NAME}.tar.gz"
  218. local mpc_url="ftp://ftp.gnu.org/gnu/mpc/${mpc_archive}"
  219. if [[ "${MPC_VERSION}" =~ 0\.* ]]
  220. then
  221. mpc_url="http://www.multiprecision.org/downloads/${mpc_archive}"
  222. fi
  223. local mpc_stamp_file_path="${INSTALL_FOLDER_PATH}/stamp-mpc-${MPC_VERSION}-installed"
  224. if [ ! -f "${mpc_stamp_file_path}" ]
  225. then
  226. cd "${SOURCES_FOLDER_PATH}"
  227. download_and_extract "${mpc_url}" "${mpc_archive}" "${MPC_FOLDER_NAME}"
  228. (
  229. mkdir -p "${LIBS_BUILD_FOLDER_PATH}/${MPC_FOLDER_NAME}"
  230. cd "${LIBS_BUILD_FOLDER_PATH}/${MPC_FOLDER_NAME}"
  231. xbb_activate
  232. xbb_activate_installed_dev
  233. export CFLAGS="${XBB_CFLAGS} -Wno-unused-value -Wno-empty-translation-unit -Wno-tautological-compare"
  234. export CPPFLAGS="${XBB_CPPFLAGS}"
  235. export LDFLAGS="${XBB_LDFLAGS_LIB}"
  236. if [ ! -f "config.status" ]
  237. then
  238. (
  239. echo
  240. echo "Running mpc configure..."
  241. bash "${SOURCES_FOLDER_PATH}/${MPC_FOLDER_NAME}/configure" --help
  242. bash ${DEBUG} "${SOURCES_FOLDER_PATH}/${MPC_FOLDER_NAME}/configure" \
  243. --prefix="${LIBS_INSTALL_FOLDER_PATH}" \
  244. \
  245. --build=${BUILD} \
  246. --host=${HOST} \
  247. --target=${TARGET} \
  248. cp "config.log" "${LOGS_FOLDER_PATH}/config-mpc-log.txt"
  249. ) 2>&1 | tee "${LOGS_FOLDER_PATH}/configure-mpc-output.txt"
  250. fi
  251. (
  252. echo
  253. echo "Running mpc make..."
  254. # Build.
  255. make -j ${JOBS}
  256. make install-strip
  257. ) 2>&1 | tee "${LOGS_FOLDER_PATH}/make-mpc-output.txt"
  258. )
  259. touch "${mpc_stamp_file_path}"
  260. else
  261. echo "Library mpc already installed."
  262. fi
  263. }
  264. function do_isl()
  265. {
  266. # http://isl.gforge.inria.fr
  267. # https://aur.archlinux.org/cgit/aur.git/tree/PKGBUILD?h=isl
  268. # 2015-06-12
  269. # ISL_VERSION="0.15"
  270. # 2016-01-15
  271. # ISL_VERSION="0.16.1"
  272. # 2016-12-20
  273. # ISL_VERSION="0.18"
  274. ISL_FOLDER_NAME="isl-${ISL_VERSION}"
  275. local isl_archive="${ISL_FOLDER_NAME}.tar.xz"
  276. if [[ "${ISL_VERSION}" =~ 0\.12\.* ]]
  277. then
  278. isl_archive="${ISL_FOLDER_NAME}.tar.gz"
  279. fi
  280. local isl_url="http://isl.gforge.inria.fr/${isl_archive}"
  281. local isl_stamp_file_path="${INSTALL_FOLDER_PATH}/stamp-isl-${ISL_VERSION}-installed"
  282. if [ ! -f "${isl_stamp_file_path}" ]
  283. then
  284. cd "${SOURCES_FOLDER_PATH}"
  285. download_and_extract "${isl_url}" "${isl_archive}" "${ISL_FOLDER_NAME}"
  286. (
  287. mkdir -p "${LIBS_BUILD_FOLDER_PATH}/${ISL_FOLDER_NAME}"
  288. cd "${LIBS_BUILD_FOLDER_PATH}/${ISL_FOLDER_NAME}"
  289. xbb_activate
  290. xbb_activate_installed_dev
  291. export CFLAGS="${XBB_CFLAGS} -Wno-dangling-else -Wno-header-guard"
  292. export CPPFLAGS="${XBB_CPPFLAGS}"
  293. export LDFLAGS="${XBB_LDFLAGS_LIB}"
  294. if [ ! -f "config.status" ]
  295. then
  296. (
  297. echo
  298. echo "Running isl configure..."
  299. bash "${SOURCES_FOLDER_PATH}/${ISL_FOLDER_NAME}/configure" --help
  300. bash ${DEBUG} "${SOURCES_FOLDER_PATH}/${ISL_FOLDER_NAME}/configure" \
  301. --prefix="${LIBS_INSTALL_FOLDER_PATH}" \
  302. \
  303. --build=${BUILD} \
  304. --host=${HOST} \
  305. --target=${TARGET} \
  306. cp "config.log" "${LOGS_FOLDER_PATH}/config-isl-log.txt"
  307. ) 2>&1 | tee "${LOGS_FOLDER_PATH}/configure-isl-output.txt"
  308. fi
  309. (
  310. echo
  311. echo "Running isl make..."
  312. # Build.
  313. # Parallel builds may fail.
  314. make -j ${JOBS}
  315. # make
  316. make install-strip
  317. ) 2>&1 | tee "${LOGS_FOLDER_PATH}/make-isl-output.txt"
  318. )
  319. touch "${isl_stamp_file_path}"
  320. else
  321. echo "Library isl already installed."
  322. fi
  323. }
  324. function do_libelf()
  325. {
  326. # http://www.mr511.de/
  327. # http://www.mr511.de/software/
  328. # LIBELF_VERSION="0.8.13"
  329. LIBELF_FOLDER_NAME="libelf-${LIBELF_VERSION}"
  330. local libelf_archive="${LIBELF_FOLDER_NAME}.tar.gz"
  331. # local libelf_url="http://www.mr511.de/software/${libelf_archive}"
  332. # The original site seems unavailable, use a mirror.
  333. local libelf_url="https://fossies.org/linux/misc/old/${libelf_archive}"
  334. local libelf_stamp_file_path="${INSTALL_FOLDER_PATH}/stamp-libelf-${LIBELF_VERSION}-installed"
  335. if [ ! -f "${libelf_stamp_file_path}" ]
  336. then
  337. cd "${SOURCES_FOLDER_PATH}"
  338. download_and_extract "${libelf_url}" "${libelf_archive}" "${LIBELF_FOLDER_NAME}"
  339. (
  340. mkdir -p "${LIBS_BUILD_FOLDER_PATH}/${LIBELF_FOLDER_NAME}"
  341. cd "${LIBS_BUILD_FOLDER_PATH}/${LIBELF_FOLDER_NAME}"
  342. xbb_activate
  343. xbb_activate_installed_dev
  344. export CFLAGS="${XBB_CFLAGS} -Wno-tautological-compare"
  345. export CPPFLAGS="${XBB_CPPFLAGS}"
  346. export LDFLAGS="${XBB_LDFLAGS_LIB}"
  347. if [ ! -f "config.status" ]
  348. then
  349. (
  350. echo
  351. echo "Running libelf configure..."
  352. bash "${SOURCES_FOLDER_PATH}/${LIBELF_FOLDER_NAME}/configure" --help
  353. bash ${DEBUG} "${SOURCES_FOLDER_PATH}/${LIBELF_FOLDER_NAME}/configure" \
  354. --prefix="${LIBS_INSTALL_FOLDER_PATH}" \
  355. \
  356. --build=${BUILD} \
  357. --host=${HOST} \
  358. --target=${TARGET} \
  359. \
  360. --disable-nls
  361. cp "config.log" "${LOGS_FOLDER_PATH}/config-libelf-log.txt"
  362. ) 2>&1 | tee "${LOGS_FOLDER_PATH}/configure-libelf-output.txt"
  363. fi
  364. (
  365. echo
  366. echo "Running libelf make..."
  367. # Build.
  368. make -j ${JOBS}
  369. make install
  370. ) 2>&1 | tee "${LOGS_FOLDER_PATH}/make-libelf-output.txt"
  371. )
  372. touch "${libelf_stamp_file_path}"
  373. else
  374. echo "Library libelf already installed."
  375. fi
  376. }
  377. function do_expat()
  378. {
  379. # https://libexpat.github.io
  380. # https://github.com/libexpat/libexpat/releases
  381. # https://aur.archlinux.org/cgit/aur.git/tree/PKGBUILD?h=expat-git
  382. # Oct 21, 2017
  383. # EXPAT_VERSION="2.1.1"
  384. # Nov 1, 2017
  385. # EXPAT_VERSION="2.2.5"
  386. EXPAT_FOLDER_NAME="expat-${EXPAT_VERSION}"
  387. local expat_archive="${EXPAT_FOLDER_NAME}.tar.bz2"
  388. if [[ "${EXPAT_VERSION}" =~ 2\.0\.* ]]
  389. then
  390. expat_archive="${EXPAT_FOLDER_NAME}.tar.gz"
  391. fi
  392. local expat_release="R_$(echo ${EXPAT_VERSION} | sed -e 's|[.]|_|g')"
  393. local expat_url="https://github.com/libexpat/libexpat/releases/download/${expat_release}/${expat_archive}"
  394. local expat_stamp_file_path="${INSTALL_FOLDER_PATH}/stamp-expat-${EXPAT_VERSION}-installed"
  395. if [ ! -f "${expat_stamp_file_path}" ]
  396. then
  397. cd "${SOURCES_FOLDER_PATH}"
  398. download_and_extract "${expat_url}" "${expat_archive}" "${EXPAT_FOLDER_NAME}"
  399. (
  400. mkdir -p "${LIBS_BUILD_FOLDER_PATH}/${EXPAT_FOLDER_NAME}"
  401. cd "${LIBS_BUILD_FOLDER_PATH}/${EXPAT_FOLDER_NAME}"
  402. xbb_activate
  403. xbb_activate_installed_dev
  404. export CFLAGS="${XBB_CFLAGS}"
  405. export CPPFLAGS="${XBB_CPPFLAGS}"
  406. export LDFLAGS="${XBB_LDFLAGS_LIB}"
  407. if [ ! -f "config.status" ]
  408. then
  409. (
  410. echo
  411. echo "Running expat configure..."
  412. bash "${SOURCES_FOLDER_PATH}/${EXPAT_FOLDER_NAME}/configure" --help
  413. bash ${DEBUG} "${SOURCES_FOLDER_PATH}/${EXPAT_FOLDER_NAME}/configure" \
  414. --prefix="${LIBS_INSTALL_FOLDER_PATH}" \
  415. \
  416. --build=${BUILD} \
  417. --host=${HOST} \
  418. --target=${TARGET} \
  419. cp "config.log" "${LOGS_FOLDER_PATH}/config-expat-log.txt"
  420. ) 2>&1 | tee "${LOGS_FOLDER_PATH}/configure-expat-output.txt"
  421. fi
  422. (
  423. echo
  424. echo "Running expat make..."
  425. # Build.
  426. make -j ${JOBS}
  427. make install
  428. ) 2>&1 | tee "${LOGS_FOLDER_PATH}/make-expat-output.txt"
  429. )
  430. touch "${expat_stamp_file_path}"
  431. else
  432. echo "Library expat already installed."
  433. fi
  434. }
  435. function do_libiconv()
  436. {
  437. # https://www.gnu.org/software/libiconv/
  438. # https://ftp.gnu.org/pub/gnu/libiconv/
  439. # https://aur.archlinux.org/cgit/aur.git/tree/PKGBUILD?h=libiconv
  440. # 2011-08-07
  441. # LIBICONV_VERSION="1.14"
  442. # 2017-02-02
  443. # LIBICONV_VERSION="1.15"
  444. LIBICONV_FOLDER_NAME="libiconv-${LIBICONV_VERSION}"
  445. local libiconv_archive="${LIBICONV_FOLDER_NAME}.tar.gz"
  446. local libiconv_url="https://ftp.gnu.org/pub/gnu/libiconv/${libiconv_archive}"
  447. local libiconv_stamp_file_path="${INSTALL_FOLDER_PATH}/stamp-libiconv-${LIBICONV_VERSION}-installed"
  448. if [ ! -f "${libiconv_stamp_file_path}" ]
  449. then
  450. cd "${SOURCES_FOLDER_PATH}"
  451. download_and_extract "${libiconv_url}" "${libiconv_archive}" "${LIBICONV_FOLDER_NAME}"
  452. (
  453. mkdir -p "${LIBS_BUILD_FOLDER_PATH}/${LIBICONV_FOLDER_NAME}"
  454. cd "${LIBS_BUILD_FOLDER_PATH}/${LIBICONV_FOLDER_NAME}"
  455. xbb_activate
  456. xbb_activate_installed_dev
  457. # -fgnu89-inline fixes "undefined reference to `aliases2_lookup'"
  458. # https://savannah.gnu.org/bugs/?47953
  459. export CFLAGS="${XBB_CFLAGS} -fgnu89-inline -Wno-tautological-compare -Wno-parentheses-equality -Wno-static-in-inline -Wno-pointer-to-int-cast"
  460. export CPPFLAGS="${XBB_CPPFLAGS}"
  461. export LDFLAGS="${XBB_LDFLAGS_LIB}"
  462. if [ ! -f "config.status" ]
  463. then
  464. (
  465. echo
  466. echo "Running libiconv configure..."
  467. bash "${SOURCES_FOLDER_PATH}/${LIBICONV_FOLDER_NAME}/configure" --help
  468. bash ${DEBUG} "${SOURCES_FOLDER_PATH}/${LIBICONV_FOLDER_NAME}/configure" \
  469. --prefix="${LIBS_INSTALL_FOLDER_PATH}" \
  470. \
  471. --build=${BUILD} \
  472. --host=${HOST} \
  473. --target=${TARGET} \
  474. \
  475. --disable-nls
  476. cp "config.log" "${LOGS_FOLDER_PATH}/config-libiconv-log.txt"
  477. ) 2>&1 | tee "${LOGS_FOLDER_PATH}/configure-libiconv-output.txt"
  478. fi
  479. (
  480. echo
  481. echo "Running libiconv make..."
  482. # Build.
  483. make -j ${JOBS}
  484. make install-strip
  485. ) 2>&1 | tee "${LOGS_FOLDER_PATH}/make-libiconv-output.txt"
  486. )
  487. touch "${libiconv_stamp_file_path}"
  488. else
  489. echo "Library libiconv already installed."
  490. fi
  491. }
  492. function do_xz()
  493. {
  494. # https://tukaani.org/xz/
  495. # https://sourceforge.net/projects/lzmautils/files/
  496. # https://aur.archlinux.org/cgit/aur.git/tree/PKGBUILD?h=xz-git
  497. # 2016-12-30
  498. # XZ_VERSION="5.2.3"
  499. XZ_FOLDER_NAME="xz-${XZ_VERSION}"
  500. local xz_archive="${XZ_FOLDER_NAME}.tar.xz"
  501. local xz_url="https://sourceforge.net/projects/lzmautils/files/${xz_archive}"
  502. local xz_stamp_file_path="${INSTALL_FOLDER_PATH}/stamp-xz-${XZ_VERSION}-installed"
  503. if [ ! -f "${xz_stamp_file_path}" ]
  504. then
  505. cd "${SOURCES_FOLDER_PATH}"
  506. download_and_extract "${xz_url}" "${xz_archive}" "${XZ_FOLDER_NAME}"
  507. (
  508. mkdir -p "${LIBS_BUILD_FOLDER_PATH}/${XZ_FOLDER_NAME}"
  509. cd "${LIBS_BUILD_FOLDER_PATH}/${XZ_FOLDER_NAME}"
  510. xbb_activate
  511. xbb_activate_installed_dev
  512. export CFLAGS="${XBB_CFLAGS} -Wno-implicit-fallthrough"
  513. export CPPFLAGS="${XBB_CPPFLAGS}"
  514. export LDFLAGS="${XBB_LDFLAGS_LIB}"
  515. if [ ! -f "config.status" ]
  516. then
  517. (
  518. echo
  519. echo "Running xz configure..."
  520. bash "${SOURCES_FOLDER_PATH}/${XZ_FOLDER_NAME}/configure" --help
  521. bash ${DEBUG} "${SOURCES_FOLDER_PATH}/${XZ_FOLDER_NAME}/configure" \
  522. --prefix="${LIBS_INSTALL_FOLDER_PATH}" \
  523. \
  524. --build=${BUILD} \
  525. --host=${HOST} \
  526. --target=${TARGET} \
  527. \
  528. --disable-rpath \
  529. --disable-nls
  530. cp "config.log" "${LOGS_FOLDER_PATH}/config-xz-log.txt"
  531. ) 2>&1 | tee "${LOGS_FOLDER_PATH}/configure-xz-output.txt"
  532. fi
  533. (
  534. echo
  535. echo "Running xz make..."
  536. # Build.
  537. make -j ${JOBS}
  538. make install-strip
  539. ) 2>&1 | tee "${LOGS_FOLDER_PATH}/make-xz-output.txt"
  540. )
  541. touch "${xz_stamp_file_path}"
  542. else
  543. echo "Library xz already installed."
  544. fi
  545. }
  546. # Not used.
  547. function do_gettext()
  548. {
  549. # https://www.gnu.org/software/gettext/
  550. # http://ftp.gnu.org/pub/gnu/gettext/
  551. # https://aur.archlinux.org/cgit/aur.git/tree/PKGBUILD?h=gettext-git
  552. # https://aur.archlinux.org/cgit/aur.git/tree/PKGBUILD?h=mingw-w64-gettext
  553. # GETTEXT_VERSION="0.19.5.1"
  554. # GETTEXT_VERSION="0.19.8.1" # 2016-06-11
  555. GETTEXT_SRC_FOLDER_NAME="gettext-${GETTEXT_VERSION}"
  556. GETTEXT_FOLDER_NAME="${GETTEXT_SRC_FOLDER_NAME}"
  557. local gettext_archive="${GETTEXT_SRC_FOLDER_NAME}.tar.gz"
  558. local gettext_url="http://ftp.gnu.org/pub/gnu/gettext/${gettext_archive}"
  559. local gettext_stamp_file_path="${INSTALL_FOLDER_PATH}/stamp-gettext-${GETTEXT_VERSION}-installed"
  560. if [ ! -f "${gettext_stamp_file_path}" ]
  561. then
  562. cd "${SOURCES_FOLDER_PATH}"
  563. download_and_extract "${gettext_url}" "${gettext_archive}" \
  564. "${GETTEXT_SRC_FOLDER_NAME}"
  565. (
  566. mkdir -p "${LIBS_BUILD_FOLDER_PATH}/${GETTEXT_FOLDER_NAME}"
  567. cd "${LIBS_BUILD_FOLDER_PATH}/${GETTEXT_FOLDER_NAME}"
  568. xbb_activate
  569. xbb_activate_installed_dev
  570. export CFLAGS="${XBB_CFLAGS}"
  571. if [ "${TARGET_PLATFORM}" != "darwin" ]
  572. then
  573. export CFLAGS="${CFLAGS} -Wno-discarded-qualifiers -Wno-incompatible-pointer-types -Wno-attributes -Wno-unknown-warning-option"
  574. fi
  575. export CPPFLAGS="${XBB_CPPFLAGS}"
  576. export LDFLAGS="${XBB_LDFLAGS_LIB}"
  577. if [ ! -f "config.status" ]
  578. then
  579. (
  580. echo
  581. echo "Running gettext configure..."
  582. if [ "${TARGET_PLATFORM}" == "win32" ]
  583. then
  584. THREADS="windows"
  585. elif [ "${TARGET_PLATFORM}" == "linux" ]
  586. then
  587. THREADS="posix"
  588. elif [ "${TARGET_PLATFORM}" == "darwin" ]
  589. then
  590. THREADS="posix"
  591. fi
  592. # Build only the /gettext-runtime folder, attempts to build
  593. # the full package fail with a CXX='no' problem.
  594. bash "${SOURCES_FOLDER_PATH}/${GETTEXT_SRC_FOLDER_NAME}/gettext-runtime/configure" --help
  595. # --enable-nls needed to include libintl
  596. bash ${DEBUG} "${SOURCES_FOLDER_PATH}/${GETTEXT_SRC_FOLDER_NAME}/gettext-runtime/configure" \
  597. --prefix="${LIBS_INSTALL_FOLDER_PATH}" \
  598. \
  599. --build=${BUILD} \
  600. --host=${HOST} \
  601. --target=${TARGET} \
  602. \
  603. --disable-shared \
  604. --enable-static \
  605. --enable-threads=${THREADS} \
  606. --with-gnu-ld \
  607. --disable-installed-tests \
  608. --disable-always-build-tests \
  609. --enable-nls \
  610. --disable-rpath \
  611. --disable-java \
  612. --disable-native-java \
  613. --disable-c++ \
  614. --disable-libasprintf
  615. cp "config.log" "${LOGS_FOLDER_PATH}/config-gettext-log.txt"
  616. ) 2>&1 | tee "${LOGS_FOLDER_PATH}/configure-gettext-output.txt"
  617. fi
  618. (
  619. echo
  620. echo "Running gettext make..."
  621. # Build.
  622. make -j ${JOBS}
  623. if [ "${WITH_STRIP}" == "y" ]
  624. then
  625. make install-strip
  626. else
  627. make install
  628. fi
  629. ) 2>&1 | tee "${LOGS_FOLDER_PATH}/make-gettext-output.txt"
  630. )
  631. touch "${gettext_stamp_file_path}"
  632. else
  633. echo "Library gettext already installed."
  634. fi
  635. }