common-libs-functions-source.sh 57 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030
  1. # -----------------------------------------------------------------------------
  2. # This file is part of the xPack distribution.
  3. # (https://xpack.github.io)
  4. # Copyright (c) 2020 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 xPack build
  10. # scripts. As the name implies, it should contain only functions and
  11. # should be included with 'source' by the build scripts (both native
  12. # and container).
  13. # -----------------------------------------------------------------------------
  14. function build_zlib()
  15. {
  16. # http://zlib.net
  17. # http://zlib.net/fossils/
  18. # https://archlinuxarm.org/packages/aarch64/zlib/files/PKGBUILD
  19. # https://aur.archlinux.org/cgit/aur.git/tree/PKGBUILD?h=zlib-static
  20. # https://aur.archlinux.org/cgit/aur.git/tree/PKGBUILD?h=zlib-git
  21. # https://aur.archlinux.org/cgit/aur.git/tree/PKGBUILD?h=mingw-w64-zlib
  22. # 2013-04-28 "1.2.8"
  23. # 2017-01-15 "1.2.11"
  24. local zlib_version="$1"
  25. # The folder name as resulted after being extracted from the archive.
  26. local zlib_src_folder_name="zlib-${zlib_version}"
  27. local zlib_archive="${zlib_src_folder_name}.tar.gz"
  28. local zlib_url="http://zlib.net/fossils/${zlib_archive}"
  29. # The folder name for build, licenses, etc.
  30. local zlib_folder_name="${zlib_src_folder_name}"
  31. local zlib_stamp_file_path="${STAMPS_FOLDER_PATH}/stamp-${zlib_folder_name}-installed"
  32. if [ ! -f "${zlib_stamp_file_path}" ]
  33. then
  34. # In-source build.
  35. if [ ! -d "${LIBS_BUILD_FOLDER_PATH}/${zlib_folder_name}" ]
  36. then
  37. cd "${LIBS_BUILD_FOLDER_PATH}"
  38. download_and_extract "${zlib_url}" "${zlib_archive}" \
  39. "${zlib_src_folder_name}"
  40. if [ "${zlib_src_folder_name}" != "${zlib_folder_name}" ]
  41. then
  42. mv -v "${zlib_src_folder_name}" "${zlib_folder_name}"
  43. fi
  44. fi
  45. mkdir -pv "${LOGS_FOLDER_PATH}/${zlib_folder_name}"
  46. (
  47. cd "${LIBS_BUILD_FOLDER_PATH}/${zlib_folder_name}"
  48. xbb_activate
  49. xbb_activate_installed_dev
  50. if [ "${TARGET_PLATFORM}" == "win32" ]
  51. then
  52. (
  53. echo
  54. echo "Running zlib make..."
  55. # Build.
  56. run_verbose make -f win32/Makefile.gcc \
  57. PREFIX=${CROSS_COMPILE_PREFIX}- \
  58. prefix="${LIBS_INSTALL_FOLDER_PATH}" \
  59. CFLAGS="${XBB_CFLAGS_NO_W} -Wp,-D_FORTIFY_SOURCE=2 -fexceptions --param=ssp-buffer-size=4"
  60. run_verbose make -f win32/Makefile.gcc install \
  61. DESTDIR="${LIBS_INSTALL_FOLDER_PATH}/" \
  62. INCLUDE_PATH="include" \
  63. LIBRARY_PATH="lib" \
  64. BINARY_PATH="bin"
  65. ) 2>&1 | tee "${LOGS_FOLDER_PATH}/${zlib_folder_name}/make-output.txt"
  66. else
  67. CPPFLAGS="${XBB_CPPFLAGS}"
  68. CFLAGS="${XBB_CFLAGS_NO_W}"
  69. CXXFLAGS="${XBB_CXXFLAGS_NO_W}"
  70. LDFLAGS="${XBB_LDFLAGS_LIB}"
  71. if [ "${IS_DEVELOP}" == "y" ]
  72. then
  73. LDFLAGS+=" -v"
  74. fi
  75. export CPPFLAGS
  76. export CFLAGS
  77. export CXXFLAGS
  78. export LDFLAGS
  79. env | sort
  80. # No config.status left, use the library.
  81. if [ ! -f "libz.a" ]
  82. then
  83. (
  84. echo
  85. echo "Running zlib configure..."
  86. bash "configure" --help
  87. run_verbose bash ${DEBUG} "configure" \
  88. --prefix="${LIBS_INSTALL_FOLDER_PATH}"
  89. cp "configure.log" "${LOGS_FOLDER_PATH}/${zlib_folder_name}/configure-log.txt"
  90. ) 2>&1 | tee "${LOGS_FOLDER_PATH}/${zlib_folder_name}/configure-output.txt"
  91. fi
  92. (
  93. echo
  94. echo "Running zlib make..."
  95. # Build.
  96. run_verbose make -j ${JOBS}
  97. if [ "${WITH_TESTS}" == "y" ]
  98. then
  99. run_verbose make test
  100. fi
  101. run_verbose make install
  102. ) 2>&1 | tee "${LOGS_FOLDER_PATH}/${zlib_folder_name}/make-output.txt"
  103. fi
  104. copy_license \
  105. "${LIBS_BUILD_FOLDER_PATH}/${zlib_folder_name}" \
  106. "${zlib_folder_name}"
  107. )
  108. touch "${zlib_stamp_file_path}"
  109. else
  110. echo "Library zlib already installed."
  111. fi
  112. }
  113. # -----------------------------------------------------------------------------
  114. function build_gmp()
  115. {
  116. # https://gmplib.org
  117. # https://gmplib.org/download/gmp/
  118. # https://archlinuxarm.org/packages/aarch64/gmp/files/PKGBUILD
  119. # https://aur.archlinux.org/cgit/aur.git/tree/PKGBUILD?h=gmp-hg
  120. # 01-Nov-2015 "6.1.0"
  121. # 16-Dec-2016 "6.1.2"
  122. # 17-Jan-2020 "6.2.0"
  123. local gmp_version="$1"
  124. # The folder name as resulted after being extracted from the archive.
  125. local gmp_src_folder_name="gmp-${gmp_version}"
  126. local gmp_archive="${gmp_src_folder_name}.tar.xz"
  127. local gmp_url="https://gmplib.org/download/gmp/${gmp_archive}"
  128. # The folder name for build, licenses, etc.
  129. local gmp_folder_name="${gmp_src_folder_name}"
  130. local gmp_stamp_file_path="${STAMPS_FOLDER_PATH}/stamp-${gmp_folder_name}-installed"
  131. if [ ! -f "${gmp_stamp_file_path}" ]
  132. then
  133. cd "${SOURCES_FOLDER_PATH}"
  134. download_and_extract "${gmp_url}" "${gmp_archive}" \
  135. "${gmp_src_folder_name}"
  136. mkdir -pv "${LOGS_FOLDER_PATH}/${gmp_folder_name}"
  137. (
  138. mkdir -pv "${LIBS_BUILD_FOLDER_PATH}/${gmp_folder_name}"
  139. cd "${LIBS_BUILD_FOLDER_PATH}/${gmp_folder_name}"
  140. xbb_activate
  141. xbb_activate_installed_dev
  142. CPPFLAGS="${XBB_CPPFLAGS}"
  143. CFLAGS="${XBB_CFLAGS_NO_W}"
  144. CXXFLAGS="${XBB_CXXFLAGS_NO_W}"
  145. LDFLAGS="${XBB_LDFLAGS_LIB}"
  146. if [ "${IS_DEVELOP}" == "y" ]
  147. then
  148. LDFLAGS+=" -v"
  149. fi
  150. export CPPFLAGS
  151. export CFLAGS
  152. export CXXFLAGS
  153. export LDFLAGS
  154. # ABI is mandatory, otherwise configure fails on 32-bit.
  155. # (see https://gmplib.org/manual/ABI-and-ISA.html)
  156. if [ "${TARGET_ARCH}" == "x64" -o "${TARGET_ARCH}" == "x32" ]
  157. then
  158. export ABI="${TARGET_BITS}"
  159. fi
  160. env | sort
  161. if [ ! -f "config.status" ]
  162. then
  163. (
  164. echo
  165. echo "Running gmp configure..."
  166. # ABI is mandatory, otherwise configure fails on 32-bit.
  167. # (see https://gmplib.org/manual/ABI-and-ISA.html)
  168. bash "${SOURCES_FOLDER_PATH}/${gmp_src_folder_name}/configure" --help
  169. config_options=()
  170. config_options+=("--prefix=${LIBS_INSTALL_FOLDER_PATH}")
  171. config_options+=("--build=${BUILD}")
  172. config_options+=("--host=${HOST}")
  173. config_options+=("--target=${TARGET}")
  174. config_options+=("--enable-cxx")
  175. if [ "${TARGET_PLATFORM}" == "win32" ]
  176. then
  177. # mpfr asks for this explicitly during configure.
  178. # (although the message is confusing)
  179. config_options+=("--enable-shared")
  180. config_options+=("--disable-static")
  181. fi
  182. run_verbose bash ${DEBUG} "${SOURCES_FOLDER_PATH}/${gmp_src_folder_name}/configure" \
  183. ${config_options[@]}
  184. cp "config.log" "${LOGS_FOLDER_PATH}/${gmp_folder_name}/config-log.txt"
  185. ) 2>&1 | tee "${LOGS_FOLDER_PATH}/${gmp_folder_name}/configure-output.txt"
  186. fi
  187. (
  188. echo
  189. echo "Running gmp make..."
  190. # Build.
  191. run_verbose make -j ${JOBS}
  192. if [ "${WITH_TESTS}" == "y" ]
  193. then
  194. run_verbose make check
  195. fi
  196. if [ "${WITH_STRIP}" == "y" ]
  197. then
  198. run_verbose make install-strip
  199. else
  200. run_verbose make install
  201. fi
  202. ) 2>&1 | tee "${LOGS_FOLDER_PATH}/${gmp_folder_name}/make-output.txt"
  203. copy_license \
  204. "${SOURCES_FOLDER_PATH}/${gmp_src_folder_name}" \
  205. "${gmp_folder_name}"
  206. )
  207. touch "${gmp_stamp_file_path}"
  208. else
  209. echo "Library gmp already installed."
  210. fi
  211. }
  212. function build_mpfr()
  213. {
  214. # http://www.mpfr.org
  215. # http://www.mpfr.org/history.html
  216. # https://archlinuxarm.org/packages/aarch64/mpfr/files/PKGBUILD
  217. # https://git.archlinux.org/svntogit/packages.git/tree/trunk/PKGBUILD?h=packages/mpfr
  218. # 6 March 2016 "3.1.4"
  219. # 7 September 2017 "3.1.6"
  220. # 31 January 2019 "4.0.2"
  221. local mpfr_version="$1"
  222. # The folder name as resulted after being extracted from the archive.
  223. local mpfr_src_folder_name="mpfr-${mpfr_version}"
  224. local mpfr_archive="${mpfr_src_folder_name}.tar.xz"
  225. local mpfr_url="http://www.mpfr.org/${mpfr_src_folder_name}/${mpfr_archive}"
  226. # The folder name for build, licenses, etc.
  227. local mpfr_folder_name="${mpfr_src_folder_name}"
  228. local mpfr_stamp_file_path="${STAMPS_FOLDER_PATH}/stamp-${mpfr_folder_name}-installed"
  229. if [ ! -f "${mpfr_stamp_file_path}" ]
  230. then
  231. cd "${SOURCES_FOLDER_PATH}"
  232. download_and_extract "${mpfr_url}" "${mpfr_archive}" \
  233. "${mpfr_src_folder_name}"
  234. mkdir -pv "${LOGS_FOLDER_PATH}/${mpfr_folder_name}"
  235. (
  236. mkdir -pv "${LIBS_BUILD_FOLDER_PATH}/${mpfr_folder_name}"
  237. cd "${LIBS_BUILD_FOLDER_PATH}/${mpfr_folder_name}"
  238. xbb_activate
  239. xbb_activate_installed_dev
  240. CPPFLAGS="${XBB_CPPFLAGS}"
  241. CFLAGS="${XBB_CFLAGS_NO_W}"
  242. CXXFLAGS="${XBB_CXXFLAGS_NO_W}"
  243. LDFLAGS="${XBB_LDFLAGS_LIB}"
  244. if [ "${IS_DEVELOP}" == "y" ]
  245. then
  246. LDFLAGS+=" -v"
  247. fi
  248. export CPPFLAGS
  249. export CFLAGS
  250. export CXXFLAGS
  251. export LDFLAGS
  252. env | sort
  253. if [ ! -f "config.status" ]
  254. then
  255. (
  256. echo
  257. echo "Running mpfr configure..."
  258. bash "${SOURCES_FOLDER_PATH}/${mpfr_src_folder_name}/configure" --help
  259. config_options=()
  260. config_options+=("--prefix=${LIBS_INSTALL_FOLDER_PATH}")
  261. config_options+=("--build=${BUILD}")
  262. config_options+=("--host=${HOST}")
  263. config_options+=("--target=${TARGET}")
  264. config_options+=("--disable-warnings")
  265. run_verbose bash ${DEBUG} "${SOURCES_FOLDER_PATH}/${mpfr_src_folder_name}/configure" \
  266. ${config_options[@]}
  267. cp "config.log" "${LOGS_FOLDER_PATH}/${mpfr_folder_name}/config-log.txt"
  268. ) 2>&1 | tee "${LOGS_FOLDER_PATH}/${mpfr_folder_name}/configure-output.txt"
  269. fi
  270. (
  271. echo
  272. echo "Running mpfr make..."
  273. # Build.
  274. run_verbose make -j ${JOBS}
  275. if [ "${WITH_TESTS}" == "y" ]
  276. then
  277. run_verbose make check
  278. fi
  279. if [ "${WITH_STRIP}" == "y" ]
  280. then
  281. run_verbose make install-strip
  282. else
  283. run_verbose make install
  284. fi
  285. ) 2>&1 | tee "${LOGS_FOLDER_PATH}/${mpfr_folder_name}/make-output.txt"
  286. copy_license \
  287. "${SOURCES_FOLDER_PATH}/${mpfr_src_folder_name}" \
  288. "${mpfr_folder_name}"
  289. )
  290. touch "${mpfr_stamp_file_path}"
  291. else
  292. echo "Library mpfr already installed."
  293. fi
  294. }
  295. function build_mpc()
  296. {
  297. # http://www.multiprecision.org/
  298. # ftp://ftp.gnu.org/gnu/mpc
  299. # https://archlinuxarm.org/packages/aarch64/mpc/files/PKGBUILD
  300. # https://git.archlinux.org/svntogit/packages.git/tree/trunk/PKGBUILD?h=packages/libmpc
  301. # 20 Feb 2015 "1.0.3"
  302. # 2018-01-11 "1.1.0"
  303. local mpc_version="$1"
  304. # The folder name as resulted after being extracted from the archive.
  305. local mpc_src_folder_name="mpc-${mpc_version}"
  306. local mpc_archive="${mpc_src_folder_name}.tar.gz"
  307. local mpc_url="ftp://ftp.gnu.org/gnu/mpc/${mpc_archive}"
  308. if [[ "${mpc_version}" =~ 0\.* ]]
  309. then
  310. mpc_url="http://www.multiprecision.org/downloads/${mpc_archive}"
  311. fi
  312. # The folder name for build, licenses, etc.
  313. local mpc_folder_name="${mpc_src_folder_name}"
  314. local mpc_stamp_file_path="${STAMPS_FOLDER_PATH}/stamp-${mpc_folder_name}-installed"
  315. if [ ! -f "${mpc_stamp_file_path}" ]
  316. then
  317. cd "${SOURCES_FOLDER_PATH}"
  318. download_and_extract "${mpc_url}" "${mpc_archive}" \
  319. "${mpc_src_folder_name}"
  320. mkdir -pv "${LOGS_FOLDER_PATH}/${mpc_folder_name}"
  321. (
  322. mkdir -pv "${LIBS_BUILD_FOLDER_PATH}/${mpc_folder_name}"
  323. cd "${LIBS_BUILD_FOLDER_PATH}/${mpc_folder_name}"
  324. xbb_activate
  325. xbb_activate_installed_dev
  326. CPPFLAGS="${XBB_CPPFLAGS}"
  327. CFLAGS="${XBB_CFLAGS_NO_W}"
  328. CXXFLAGS="${XBB_CXXFLAGS_NO_W}"
  329. LDFLAGS="${XBB_LDFLAGS_LIB}"
  330. if [ "${IS_DEVELOP}" == "y" ]
  331. then
  332. LDFLAGS+=" -v"
  333. fi
  334. export CPPFLAGS
  335. export CFLAGS
  336. export CXXFLAGS
  337. export LDFLAGS
  338. env | sort
  339. if [ ! -f "config.status" ]
  340. then
  341. (
  342. echo
  343. echo "Running mpc configure..."
  344. bash "${SOURCES_FOLDER_PATH}/${mpc_src_folder_name}/configure" --help
  345. config_options=()
  346. config_options+=("--prefix=${LIBS_INSTALL_FOLDER_PATH}")
  347. config_options+=("--build=${BUILD}")
  348. config_options+=("--host=${HOST}")
  349. config_options+=("--target=${TARGET}")
  350. run_verbose bash ${DEBUG} "${SOURCES_FOLDER_PATH}/${mpc_src_folder_name}/configure" \
  351. ${config_options[@]}
  352. cp "config.log" "${LOGS_FOLDER_PATH}/${mpc_folder_name}/config-log.txt"
  353. ) 2>&1 | tee "${LOGS_FOLDER_PATH}/${mpc_folder_name}/configure-output.txt"
  354. fi
  355. (
  356. echo
  357. echo "Running mpc make..."
  358. # Build.
  359. run_verbose make -j ${JOBS}
  360. if [ "${WITH_TESTS}" == "y" ]
  361. then
  362. run_verbose make check
  363. fi
  364. if [ "${WITH_STRIP}" == "y" ]
  365. then
  366. run_verbose make install-strip
  367. else
  368. run_verbose make install
  369. fi
  370. ) 2>&1 | tee "${LOGS_FOLDER_PATH}/${mpc_folder_name}/make-output.txt"
  371. copy_license \
  372. "${SOURCES_FOLDER_PATH}/${mpc_src_folder_name}" \
  373. "${mpc_folder_name}"
  374. )
  375. touch "${mpc_stamp_file_path}"
  376. else
  377. echo "Library mpc already installed."
  378. fi
  379. }
  380. function build_isl()
  381. {
  382. # http://isl.gforge.inria.fr
  383. # https://aur.archlinux.org/cgit/aur.git/tree/PKGBUILD?h=isl
  384. # 2015-06-12 "0.15"
  385. # 2016-01-15 "0.16.1"
  386. # 2016-12-20 "0.18"
  387. # 2019-03-26 "0.21"
  388. # 2020-01-16 "0.22"
  389. local isl_version="$1"
  390. # The folder name as resulted after being extracted from the archive.
  391. local isl_src_folder_name="isl-${isl_version}"
  392. local isl_archive="${isl_src_folder_name}.tar.xz"
  393. if [[ "${isl_version}" =~ 0\.12\.* ]]
  394. then
  395. isl_archive="${isl_src_folder_name}.tar.gz"
  396. fi
  397. local isl_url="http://isl.gforge.inria.fr/${isl_archive}"
  398. # The folder name for build, licenses, etc.
  399. local isl_folder_name="${isl_src_folder_name}"
  400. local isl_stamp_file_path="${STAMPS_FOLDER_PATH}/stamp-${isl_folder_name}-installed"
  401. if [ ! -f "${isl_stamp_file_path}" ]
  402. then
  403. cd "${SOURCES_FOLDER_PATH}"
  404. download_and_extract "${isl_url}" "${isl_archive}" \
  405. "${isl_src_folder_name}"
  406. mkdir -pv "${LOGS_FOLDER_PATH}/${isl_folder_name}"
  407. (
  408. mkdir -pv "${LIBS_BUILD_FOLDER_PATH}/${isl_folder_name}"
  409. cd "${LIBS_BUILD_FOLDER_PATH}/${isl_folder_name}"
  410. xbb_activate
  411. xbb_activate_installed_dev
  412. CPPFLAGS="${XBB_CPPFLAGS}"
  413. CFLAGS="${XBB_CFLAGS_NO_W}"
  414. CXXFLAGS="${XBB_CXXFLAGS_NO_W}"
  415. LDFLAGS="${XBB_LDFLAGS_LIB}"
  416. if [ "${IS_DEVELOP}" == "y" ]
  417. then
  418. LDFLAGS+=" -v"
  419. fi
  420. export CPPFLAGS
  421. export CFLAGS
  422. export CXXFLAGS
  423. export LDFLAGS
  424. env | sort
  425. if [ ! -f "config.status" ]
  426. then
  427. (
  428. echo
  429. echo "Running isl configure..."
  430. bash "${SOURCES_FOLDER_PATH}/${isl_src_folder_name}/configure" --help
  431. config_options=()
  432. config_options+=("--prefix=${LIBS_INSTALL_FOLDER_PATH}")
  433. config_options+=("--build=${BUILD}")
  434. config_options+=("--host=${HOST}")
  435. config_options+=("--target=${TARGET}")
  436. run_verbose bash ${DEBUG} "${SOURCES_FOLDER_PATH}/${isl_src_folder_name}/configure" \
  437. ${config_options[@]}
  438. cp "config.log" "${LOGS_FOLDER_PATH}/${isl_folder_name}/config-log.txt"
  439. ) 2>&1 | tee "${LOGS_FOLDER_PATH}/${isl_folder_name}/configure-output.txt"
  440. fi
  441. (
  442. echo
  443. echo "Running isl make..."
  444. # Build.
  445. run_verbose make -j ${JOBS}
  446. if [ "${WITH_TESTS}" == "y" ]
  447. then
  448. if [ "${TARGET_PLATFORM}" == "linux" -a \
  449. \( "${TARGET_ARCH}" == "x64" -o "${TARGET_ARCH}" == "x32" \) ]
  450. then
  451. # /Host/Users/ilg/Work/gcc-8.4.0-1/linux-x64/build/libs/isl-0.22/.libs/lt-isl_test_cpp: relocation error: /Host/Users/ilg/Work/gcc-8.4.0-1/linux-x64/build/libs/isl-0.22/.libs/lt-isl_test_cpp: symbol _ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE9_M_createERmm, version GLIBCXX_3.4.21 not defined in file libstdc++.so.6 with link time reference
  452. # FAIL isl_test_cpp (exit status: 127)
  453. # /Host/Users/ilg/Work/gcc-8.4.0-1/linux-x32/build/libs/isl-0.22/.libs/lt-isl_test_cpp: relocation error: /Host/Users/ilg/Work/gcc-8.4.0-1/linux-x32/build/libs/isl-0.22/.libs/lt-isl_test_cpp: symbol _ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE9_M_createERjj, version GLIBCXX_3.4.21 not defined in file libstdc++.so.6 with link time reference
  454. # FAIL isl_test_cpp (exit status: 127)
  455. run_verbose make check || true
  456. else
  457. run_verbose make check
  458. fi
  459. fi
  460. if [ "${WITH_STRIP}" == "y" ]
  461. then
  462. run_verbose make install-strip
  463. else
  464. run_verbose make install
  465. fi
  466. ) 2>&1 | tee "${LOGS_FOLDER_PATH}/${isl_folder_name}/make-output.txt"
  467. copy_license \
  468. "${SOURCES_FOLDER_PATH}/${isl_src_folder_name}" \
  469. "${isl_folder_name}"
  470. )
  471. touch "${isl_stamp_file_path}"
  472. else
  473. echo "Library isl already installed."
  474. fi
  475. }
  476. function build_zstd()
  477. {
  478. # https://facebook.github.io/zstd/
  479. # https://github.com/facebook/zstd/releases
  480. # https://github.com/facebook/zstd/archive/v1.4.4.tar.gz
  481. # https://archlinuxarm.org/packages/aarch64/zstd/files/PKGBUILD
  482. # 5 Nov 2019 "1.4.4"
  483. local zstd_version="$1"
  484. # The folder name as resulted after being extracted from the archive.
  485. local zstd_src_folder_name="zstd-${zstd_version}"
  486. local zstd_archive="${zstd_src_folder_name}.tar.gz"
  487. # GitHub release archive.
  488. local zstd_github_archive="v${zstd_version}.tar.gz"
  489. local zstd_url="https://github.com/facebook/zstd/archive/${zstd_github_archive}"
  490. # The folder name for build, licenses, etc.
  491. local zstd_folder_name="${zstd_src_folder_name}"
  492. local zstd_stamp_file_path="${STAMPS_FOLDER_PATH}/stamp-${zstd_folder_name}-installed"
  493. if [ ! -f "${zstd_stamp_file_path}" ]
  494. then
  495. cd "${SOURCES_FOLDER_PATH}"
  496. download_and_extract "${zstd_url}" "${zstd_archive}" \
  497. "${zstd_src_folder_name}"
  498. mkdir -pv "${LOGS_FOLDER_PATH}/${zstd_folder_name}"
  499. (
  500. mkdir -pv "${LIBS_BUILD_FOLDER_PATH}/${zstd_folder_name}"
  501. cd "${LIBS_BUILD_FOLDER_PATH}/${zstd_folder_name}"
  502. xbb_activate
  503. xbb_activate_installed_dev
  504. CPPFLAGS="${XBB_CPPFLAGS}"
  505. CFLAGS="${XBB_CFLAGS_NO_W}"
  506. CXXFLAGS="${XBB_CXXFLAGS_NO_W}"
  507. LDFLAGS="${XBB_LDFLAGS_LIB}"
  508. if [ "${IS_DEVELOP}" == "y" ]
  509. then
  510. LDFLAGS+=" -v"
  511. fi
  512. export CPPFLAGS
  513. export CFLAGS
  514. export CXXFLAGS
  515. export LDFLAGS
  516. local build_type
  517. if [ "${IS_DEBUG}" == "y" ]
  518. then
  519. build_type=Debug
  520. else
  521. build_type=Release
  522. fi
  523. env | sort
  524. if [ ! -f "CMakeCache.txt" ]
  525. then
  526. (
  527. echo
  528. echo "Running zstd cmake..."
  529. config_options=()
  530. config_options+=("-LH")
  531. config_options+=("-G" "Ninja")
  532. config_options+=("-DCMAKE_INSTALL_PREFIX=${LIBS_INSTALL_FOLDER_PATH}")
  533. config_options+=("-DZSTD_BUILD_PROGRAMS=OFF")
  534. if [ "${WITH_TESTS}" == "y" ]
  535. then
  536. config_options+=("-DZSTD_BUILD_TESTS=ON")
  537. fi
  538. run_verbose cmake \
  539. ${config_options[@]} \
  540. \
  541. "${SOURCES_FOLDER_PATH}/${zstd_src_folder_name}/build/cmake"
  542. ) 2>&1 | tee "${LOGS_FOLDER_PATH}/${zstd_folder_name}/zstd-output.txt"
  543. fi
  544. (
  545. echo
  546. echo "Running zstd build..."
  547. run_verbose cmake \
  548. --build . \
  549. --parallel ${JOBS} \
  550. --config "${build_type}" \
  551. if [ "${WITH_TESTS}" == "y" ]
  552. then
  553. run_verbose ctest \
  554. -V \
  555. fi
  556. (
  557. # The install procedure runs some resulted exxecutables, which require
  558. # the libssl and libcrypt libraries from XBB.
  559. # xbb_activate_libs
  560. echo
  561. echo "Running zstd install..."
  562. run_verbose cmake \
  563. --build . \
  564. --config "${build_type}" \
  565. -- \
  566. install
  567. )
  568. ) 2>&1 | tee "${LOGS_FOLDER_PATH}/${zstd_folder_name}/build-output.txt"
  569. copy_license \
  570. "${SOURCES_FOLDER_PATH}/${zstd_src_folder_name}" \
  571. "${zstd_folder_name}"
  572. (
  573. cd "${LIBS_BUILD_FOLDER_PATH}"
  574. copy_cmake_logs "${zstd_folder_name}"
  575. )
  576. )
  577. touch "${zstd_stamp_file_path}"
  578. else
  579. echo "Library zstd already installed."
  580. fi
  581. }
  582. # -----------------------------------------------------------------------------
  583. function build_libiconv()
  584. {
  585. # https://www.gnu.org/software/libiconv/
  586. # https://ftp.gnu.org/pub/gnu/libiconv/
  587. # https://aur.archlinux.org/cgit/aur.git/tree/PKGBUILD?h=libiconv
  588. # 2011-08-07 1.14"
  589. # 2017-02-02 "1.15"
  590. # 2019-04-26 "1.16"
  591. local libiconv_version="$1"
  592. local libiconv_src_folder_name="libiconv-${libiconv_version}"
  593. local libiconv_archive="${libiconv_src_folder_name}.tar.gz"
  594. local libiconv_url="https://ftp.gnu.org/pub/gnu/libiconv/${libiconv_archive}"
  595. local libiconv_folder_name="${libiconv_src_folder_name}"
  596. local libiconv_stamp_file_path="${STAMPS_FOLDER_PATH}/stamp-${libiconv_folder_name}-installed"
  597. if [ ! -f "${libiconv_stamp_file_path}" ]
  598. then
  599. cd "${SOURCES_FOLDER_PATH}"
  600. download_and_extract "${libiconv_url}" "${libiconv_archive}" \
  601. "${libiconv_src_folder_name}"
  602. mkdir -pv "${LOGS_FOLDER_PATH}/${libiconv_folder_name}"
  603. (
  604. mkdir -pv "${LIBS_BUILD_FOLDER_PATH}/${libiconv_folder_name}"
  605. cd "${LIBS_BUILD_FOLDER_PATH}/${libiconv_folder_name}"
  606. xbb_activate
  607. xbb_activate_installed_dev
  608. CPPFLAGS="${XBB_CPPFLAGS}"
  609. # -fgnu89-inline fixes "undefined reference to `aliases2_lookup'"
  610. # https://savannah.gnu.org/bugs/?47953
  611. CFLAGS="${XBB_CFLAGS_NO_W} -fgnu89-inline"
  612. CXXFLAGS="${XBB_CXXFLAGS_NO_W}"
  613. LDFLAGS="${XBB_LDFLAGS_LIB}"
  614. if [ "${IS_DEVELOP}" == "y" ]
  615. then
  616. LDFLAGS+=" -v"
  617. fi
  618. export CPPFLAGS
  619. export CFLAGS
  620. export CXXFLAGS
  621. export LDFLAGS
  622. env | sort
  623. if [ ! -f "config.status" ]
  624. then
  625. (
  626. echo
  627. echo "Running libiconv configure..."
  628. bash "${SOURCES_FOLDER_PATH}/${libiconv_src_folder_name}/configure" --help
  629. config_options=()
  630. config_options+=("--prefix=${LIBS_INSTALL_FOLDER_PATH}")
  631. config_options+=("--build=${BUILD}")
  632. config_options+=("--host=${HOST}")
  633. config_options+=("--target=${TARGET}")
  634. run_verbose bash ${DEBUG} "${SOURCES_FOLDER_PATH}/${libiconv_src_folder_name}/configure" \
  635. ${config_options[@]}
  636. cp "config.log" "${LOGS_FOLDER_PATH}/${libiconv_folder_name}/config-log.txt"
  637. ) 2>&1 | tee "${LOGS_FOLDER_PATH}/${libiconv_folder_name}/configure-output.txt"
  638. fi
  639. (
  640. echo
  641. echo "Running libiconv make..."
  642. # Build.
  643. run_verbose make -j ${JOBS}
  644. if [ "${WITH_TESTS}" == "y" ]
  645. then
  646. run_verbose make check
  647. fi
  648. if [ "${WITH_STRIP}" == "y" ]
  649. then
  650. run_verbose make install-strip
  651. else
  652. run_verbose make install
  653. fi
  654. ) 2>&1 | tee "${LOGS_FOLDER_PATH}/${libiconv_folder_name}/make-output.txt"
  655. copy_license \
  656. "${SOURCES_FOLDER_PATH}/${libiconv_src_folder_name}" \
  657. "${libiconv_folder_name}"
  658. )
  659. touch "${libiconv_stamp_file_path}"
  660. else
  661. echo "Library libiconv already installed."
  662. fi
  663. }
  664. # -----------------------------------------------------------------------------
  665. # Could not make it work on Windows.
  666. function build_ncurses()
  667. {
  668. # https://invisible-island.net/ncurses/
  669. # ftp://ftp.invisible-island.net/pub/ncurses
  670. # ftp://ftp.invisible-island.net/pub/ncurses/ncurses-6.2.tar.gz
  671. # depends=(glibc gcc-libs)
  672. # https://archlinuxarm.org/packages/aarch64/ncurses/files/PKGBUILD
  673. # http://deb.debian.org/debian/pool/main/n/ncurses/ncurses_6.1+20181013.orig.tar.gz.asc
  674. # https://github.com/msys2/MINGW-packages/blob/master/mingw-w64-ncurses/PKGBUILD
  675. # https://github.com/msys2/MINGW-packages/blob/master/mingw-w64-ncurses/001-use-libsystre.patch
  676. # https://github.com/msys2/MSYS2-packages/blob/master/ncurses/PKGBUILD
  677. # _4421.c:1364:15: error: expected ‘)’ before ‘int’
  678. # ../include/curses.h:1906:56: note: in definition of macro ‘mouse_trafo’
  679. # 1906 | #define mouse_trafo(y,x,to_screen) wmouse_trafo(stdscr,y,x,to_screen)
  680. # 26 Feb 2011, "5.8" # build fails
  681. # 27 Jan 2018, "5.9" # build fails
  682. # 27 Jan 2018, "6.1"
  683. # 12 Feb 2020, "6.2"
  684. local ncurses_version="$1"
  685. # The folder name as resulted after being extracted from the archive.
  686. local ncurses_src_folder_name="ncurses-${ncurses_version}"
  687. local ncurses_archive="${ncurses_src_folder_name}.tar.gz"
  688. local ncurses_url="ftp://ftp.invisible-island.net//pub/ncurses/${ncurses_archive}"
  689. # The folder name for build, licenses, etc.
  690. local ncurses_folder_name="${ncurses_src_folder_name}"
  691. # local ncurses_version_major="$(echo ${ncurses_version} | sed -e 's|\([0-9][0-9]*\)\.\([0-9][0-9]*\)|\1|')"
  692. # local ncurses_version_minor="$(echo ${ncurses_version} | sed -e 's|\([0-9][0-9]*\)\.\([0-9][0-9]*\)|\2|')"
  693. local ncurses_stamp_file_path="${STAMPS_FOLDER_PATH}/stamp-${ncurses_folder_name}-installed"
  694. if [ ! -f "${ncurses_stamp_file_path}" ]
  695. then
  696. cd "${SOURCES_FOLDER_PATH}"
  697. download_and_extract "${ncurses_url}" "${ncurses_archive}" \
  698. "${ncurses_src_folder_name}"
  699. mkdir -pv "${LOGS_FOLDER_PATH}/${ncurses_folder_name}"
  700. (
  701. mkdir -pv "${LIBS_BUILD_FOLDER_PATH}/${ncurses_folder_name}"
  702. cd "${LIBS_BUILD_FOLDER_PATH}/${ncurses_folder_name}"
  703. xbb_activate
  704. xbb_activate_installed_dev
  705. CPPFLAGS="${XBB_CPPFLAGS}"
  706. CFLAGS="${XBB_CFLAGS_NO_W}"
  707. CXXFLAGS="${XBB_CXXFLAGS_NO_W}"
  708. LDFLAGS="${XBB_LDFLAGS_LIB}"
  709. if [ "${IS_DEVELOP}" == "y" ]
  710. then
  711. LDFLAGS+=" -v"
  712. fi
  713. export CPPFLAGS
  714. export CFLAGS
  715. export CXXFLAGS
  716. export LDFLAGS
  717. env | sort
  718. if [ ! -f "config.status" ]
  719. then
  720. (
  721. echo
  722. echo "Running ncurses configure..."
  723. bash "${SOURCES_FOLDER_PATH}/${ncurses_src_folder_name}/configure" --help
  724. config_options=()
  725. config_options+=("--prefix=${LIBS_INSTALL_FOLDER_PATH}")
  726. config_options+=("--build=${BUILD}")
  727. config_options+=("--host=${HOST}")
  728. config_options+=("--target=${TARGET}")
  729. # Not yet functional on windows.
  730. if [ "${TARGET_PLATFORM}" == "win32" ]
  731. then
  732. # The build passes, but generally it is not expected to be
  733. # used on Windows.
  734. # export PATH_SEPARATOR=";"
  735. # --with-libtool \
  736. # /opt/xbb/bin/libtool: line 10548: gcc-8bs: command not found
  737. # Without --with-pkg-config-libdir= it'll try to write the .pc files in the
  738. # xbb folder, probbaly by using the dirname of pkg-config.
  739. config_options+=("--with-build-cc=${NATIVE_CC}")
  740. config_options+=("--with-build-cflags=${CFLAGS}")
  741. config_options+=("--with-build-cppflags=${CPPFLAGS}")
  742. config_options+=("--with-build-ldflags=${LDFLAGS}")
  743. config_options+=("--without-progs")
  744. # Only for the MinGW port, it provides a way to substitute
  745. # the low-level terminfo library with different terminal drivers.
  746. config_options+=("--enable-term-driver")
  747. config_options+=("--disable-termcap")
  748. config_options+=("--disable-home-terminfo")
  749. config_options+=("--disable-db-install")
  750. else
  751. # Without --with-pkg-config-libdir= it'll try to write the .pc files in the
  752. # xbb folder, probbaly by using the dirname of pkg-config.
  753. config_options+=("--with-terminfo-dirs=/etc/terminfo")
  754. config_options+=("--with-default-terminfo-dir=/etc/terminfo:/lib/terminfo:/usr/share/terminfo")
  755. config_options+=("--with-gpm")
  756. config_options+=("--with-versioned-syms")
  757. config_options+=("--with-xterm-kbs=del")
  758. config_options+=("--enable-termcap")
  759. config_options+=("--enable-const")
  760. config_options+=("--enable-symlinks")
  761. fi
  762. config_options+=("--with-shared")
  763. config_options+=("--with-normal")
  764. config_options+=("--with-cxx")
  765. config_options+=("--with-cxx-binding")
  766. config_options+=("--with-cxx-shared")
  767. config_options+=("--with-pkg-config-libdir=${LIBS_INSTALL_FOLDER_PATH}/lib/pkgconfig")
  768. # Fails on Linux, with missing _nc_cur_term, which is there.
  769. config_options+=("--without-pthread")
  770. config_options+=("--without-ada")
  771. config_options+=("--without-debug")
  772. config_options+=("--without-manpages")
  773. config_options+=("--without-tack")
  774. config_options+=("--without-tests")
  775. config_options+=("--enable-pc-files")
  776. config_options+=("--enable-sp-funcs")
  777. config_options+=("--enable-ext-colors")
  778. config_options+=("--enable-interop")
  779. config_options+=("--disable-lib-suffixes")
  780. config_options+=("--disable-overwrite")
  781. NCURSES_DISABLE_WIDEC=${NCURSES_DISABLE_WIDEC:-""}
  782. if [ "${NCURSES_DISABLE_WIDEC}" == "y" ]
  783. then
  784. config_options+=("--disable-widec")
  785. fi
  786. run_verbose bash ${DEBUG} "${SOURCES_FOLDER_PATH}/${ncurses_src_folder_name}/configure" \
  787. ${config_options[@]}
  788. cp "config.log" "${LOGS_FOLDER_PATH}/${ncurses_folder_name}/config-log.txt"
  789. ) 2>&1 | tee "${LOGS_FOLDER_PATH}/${ncurses_folder_name}/configure-output.txt"
  790. fi
  791. (
  792. echo
  793. echo "Running ncurses make..."
  794. # Build.
  795. run_verbose make -j ${JOBS}
  796. # The test-programs are interactive
  797. # make install-strip
  798. run_verbose make install
  799. ) 2>&1 | tee "${LOGS_FOLDER_PATH}/${ncurses_folder_name}/make-output.txt"
  800. copy_license \
  801. "${SOURCES_FOLDER_PATH}/${ncurses_src_folder_name}" \
  802. "${ncurses_folder_name}"
  803. )
  804. touch "${ncurses_stamp_file_path}"
  805. else
  806. echo "Library ncurses already installed."
  807. fi
  808. }
  809. # -----------------------------------------------------------------------------
  810. function build_libffi()
  811. {
  812. # http://www.sourceware.org/libffi/
  813. # ftp://sourceware.org/pub/libffi/
  814. # https://github.com/libffi/libffi/archive/v3.2.1.tar.gz
  815. # https://archlinuxarm.org/packages/aarch64/libffi/files/PKGBUILD
  816. # https://aur.archlinux.org/cgit/aur.git/tree/PKGBUILD?h=libffi-git
  817. # https://aur.archlinux.org/cgit/aur.git/tree/PKGBUILD?h=mingw-w64-libffi
  818. # 12-Nov-2014, "3.2.1"
  819. # 23 Nov 2019, "3.3"
  820. local libffi_version="$1"
  821. local libffi_src_folder_name="libffi-${libffi_version}"
  822. local libffi_archive="${libffi_src_folder_name}.tar.gz"
  823. # local libffi_url="ftp://sourceware.org/pub/libffi/${libffi_archive}"
  824. # GitHub release archive.
  825. local libffi_url="https://github.com/libffi/libffi/archive/v${libffi_version}.tar.gz"
  826. local libffi_folder_name="${libffi_src_folder_name}"
  827. local libffi_stamp_file_path="${INSTALL_FOLDER_PATH}/stamp-${libffi_folder_name}-installed"
  828. if [ ! -f "${libffi_stamp_file_path}" ]
  829. then
  830. cd "${SOURCES_FOLDER_PATH}"
  831. download_and_extract "${libffi_url}" "${libffi_archive}" \
  832. "${libffi_src_folder_name}"
  833. mkdir -pv "${LOGS_FOLDER_PATH}/${libffi_folder_name}"
  834. (
  835. if [ ! -x "${SOURCES_FOLDER_PATH}/${libffi_src_folder_name}/configure" ]
  836. then
  837. cd "${SOURCES_FOLDER_PATH}/${libffi_src_folder_name}"
  838. xbb_activate
  839. xbb_activate_installed_dev
  840. run_verbose bash ${DEBUG} "autogen.sh"
  841. fi
  842. ) 2>&1 | tee "${LOGS_FOLDER_PATH}/${libffi_folder_name}/autogen-output.txt"
  843. (
  844. mkdir -pv "${LIBS_BUILD_FOLDER_PATH}/${libffi_folder_name}"
  845. cd "${LIBS_BUILD_FOLDER_PATH}/${libffi_folder_name}"
  846. xbb_activate
  847. xbb_activate_installed_dev
  848. CPPFLAGS="${XBB_CPPFLAGS}"
  849. CFLAGS="${XBB_CFLAGS_NO_W}"
  850. CXXFLAGS="${XBB_CXXFLAGS_NO_W}"
  851. LDFLAGS="${XBB_LDFLAGS_LIB}"
  852. if [ "${IS_DEVELOP}" == "y" ]
  853. then
  854. LDFLAGS+=" -v"
  855. fi
  856. export CPPFLAGS
  857. export CFLAGS
  858. export CXXFLAGS
  859. export LDFLAGS
  860. env | sort
  861. if [ ! -f "config.status" ]
  862. then
  863. (
  864. echo
  865. echo "Running libffi configure..."
  866. bash "${SOURCES_FOLDER_PATH}/${libffi_src_folder_name}/configure" --help
  867. config_options=()
  868. config_options+=("--prefix=${LIBS_INSTALL_FOLDER_PATH}")
  869. config_options+=("--build=${BUILD}")
  870. config_options+=("--host=${HOST}")
  871. config_options+=("--target=${TARGET}")
  872. config_options+=("--enable-pax_emutramp")
  873. # --enable-pax_emutramp is inspired by AUR
  874. run_verbose bash ${DEBUG} "${SOURCES_FOLDER_PATH}/${libffi_src_folder_name}/configure" \
  875. ${config_options[@]}
  876. cp "config.log" "${LOGS_FOLDER_PATH}/${libffi_folder_name}/config-log.txt"
  877. ) 2>&1 | tee "${LOGS_FOLDER_PATH}/${libffi_folder_name}/configure-output.txt"
  878. fi
  879. (
  880. echo
  881. echo "Running libffi make..."
  882. # Build.
  883. run_verbose make -j ${JOBS}
  884. if [ "${WITH_STRIP}" == "y" ]
  885. then
  886. run_verbose make install-strip
  887. else
  888. run_verbose make install
  889. fi
  890. ) 2>&1 | tee "${LOGS_FOLDER_PATH}/${libffi_folder_name}/make-output.txt"
  891. copy_license \
  892. "${SOURCES_FOLDER_PATH}/${libffi_src_folder_name}" \
  893. "${libffi_folder_name}"
  894. )
  895. touch "${libffi_stamp_file_path}"
  896. else
  897. echo "Library libffi already installed."
  898. fi
  899. }
  900. # -----------------------------------------------------------------------------
  901. function build_gettext()
  902. {
  903. # https://www.gnu.org/software/gettext/
  904. # http://ftp.gnu.org/pub/gnu/gettext/
  905. # https://archlinuxarm.org/packages/aarch64/gettext/files/PKGBUILD
  906. # https://aur.archlinux.org/cgit/aur.git/tree/PKGBUILD?h=gettext-git
  907. # https://aur.archlinux.org/cgit/aur.git/tree/PKGBUILD?h=mingw-w64-gettext
  908. # gettext_version="0.19.5.1"
  909. # gettext_version="0.19.8.1" # 2016-06-11
  910. local gettext_version="$1"
  911. local gettext_src_folder_name="gettext-${gettext_version}"
  912. local gettext_archive="${gettext_src_folder_name}.tar.gz"
  913. local gettext_url="http://ftp.gnu.org/pub/gnu/gettext/${gettext_archive}"
  914. local gettext_folder_name="${gettext_src_folder_name}"
  915. local gettext_stamp_file_path="${INSTALL_FOLDER_PATH}/stamp-${gettext_folder_name}-installed"
  916. if [ ! -f "${gettext_stamp_file_path}" ]
  917. then
  918. cd "${SOURCES_FOLDER_PATH}"
  919. download_and_extract "${gettext_url}" "${gettext_archive}" \
  920. "${gettext_src_folder_name}"
  921. mkdir -pv "${LOGS_FOLDER_PATH}/${gettext_folder_name}"
  922. (
  923. mkdir -pv "${LIBS_BUILD_FOLDER_PATH}/${gettext_folder_name}"
  924. cd "${LIBS_BUILD_FOLDER_PATH}/${gettext_folder_name}"
  925. xbb_activate
  926. xbb_activate_installed_dev
  927. CPPFLAGS="${XBB_CPPFLAGS}"
  928. CFLAGS="${XBB_CFLAGS_NO_W}"
  929. CXXFLAGS="${XBB_CXXFLAGS_NO_W}"
  930. LDFLAGS="${XBB_LDFLAGS_LIB}"
  931. if [ "${IS_DEVELOP}" == "y" ]
  932. then
  933. LDFLAGS+=" -v"
  934. fi
  935. export CPPFLAGS
  936. export CFLAGS
  937. export CXXFLAGS
  938. export LDFLAGS
  939. env | sort
  940. if [ ! -f "config.status" ]
  941. then
  942. (
  943. echo
  944. echo "Running gettext configure..."
  945. # Build only the /gettext-runtime folder, attempts to build
  946. # the full package fail with a CXX='no' problem.
  947. bash "${SOURCES_FOLDER_PATH}/${gettext_src_folder_name}/gettext-runtime/configure" --help
  948. config_options=()
  949. config_options+=("--prefix=${LIBS_INSTALL_FOLDER_PATH}")
  950. config_options+=("--build=${BUILD}")
  951. config_options+=("--host=${HOST}")
  952. config_options+=("--target=${TARGET}")
  953. if [ "${TARGET_PLATFORM}" == "win32" ]
  954. then
  955. config_options+=("--enable-threads=windows")
  956. config_options+=("--with-gnu-ld")
  957. elif [ "${TARGET_PLATFORM}" == "linux" ]
  958. then
  959. config_options+=("--enable-threads=posix")
  960. config_options+=("--with-gnu-ld")
  961. elif [ "${TARGET_PLATFORM}" == "darwin" ]
  962. then
  963. config_options+=("--enable-threads=posix")
  964. fi
  965. config_options+=("--disable-installed-tests")
  966. config_options+=("--disable-always-build-tests")
  967. # config_options+=("--enable-nls")
  968. config_options+=("--disable-rpath")
  969. config_options+=("--disable-java")
  970. config_options+=("--disable-native-java")
  971. config_options+=("--disable-c++")
  972. config_options+=("--disable-libasprintf")
  973. # --enable-nls needed to include libintl
  974. run_verbose bash ${DEBUG} "${SOURCES_FOLDER_PATH}/${gettext_src_folder_name}/gettext-runtime/configure" \
  975. ${config_options[@]}
  976. cp "config.log" "${LOGS_FOLDER_PATH}/${gettext_folder_name}/config-log.txt"
  977. ) 2>&1 | tee "${LOGS_FOLDER_PATH}/${gettext_folder_name}/configure-output.txt"
  978. fi
  979. (
  980. echo
  981. echo "Running gettext make..."
  982. # Build.
  983. run_verbose make -j ${JOBS}
  984. if [ "${WITH_TESTS}" == "y" ]
  985. then
  986. make check # || true
  987. fi
  988. # Avoid strip here, it may interfere with patchelf.
  989. # make install-strip
  990. if false # [ "${WITH_STRIP}" == "y" ]
  991. then
  992. run_verbose make install-strip
  993. else
  994. run_verbose make install
  995. fi
  996. ) 2>&1 | tee "${LOGS_FOLDER_PATH}/${gettext_folder_name}/make-output.txt"
  997. copy_license \
  998. "${SOURCES_FOLDER_PATH}/${gettext_src_folder_name}" \
  999. "${gettext_folder_name}"
  1000. )
  1001. touch "${gettext_stamp_file_path}"
  1002. else
  1003. echo "Library gettext already installed."
  1004. fi
  1005. }
  1006. # -----------------------------------------------------------------------------
  1007. function build_libelf()
  1008. {
  1009. # http://www.mr511.de/ (?Deprecated?)
  1010. # http://www.mr511.de/software/
  1011. # https://sourceware.org/elfutils/
  1012. # ftp://sourceware.org/pub/elfutils//0.178/elfutils-0.178.tar.bz2
  1013. # https://archlinuxarm.org/packages/aarch64/libelf/files/PKGBUILD
  1014. # libelf_version="0.8.13" (deprecated)
  1015. # 26 Nov 2019, 0.178
  1016. # 2020-03-30, 0.179
  1017. # 2020-06-11, 0.180
  1018. local libelf_version="$1"
  1019. local libelf_src_folder_name="libelf-${libelf_version}"
  1020. local libelf_archive="${libelf_src_folder_name}.tar.gz"
  1021. # local libelf_url="http://www.mr511.de/software/${libelf_archive}"
  1022. # The original site seems unavailable, use a mirror.
  1023. local libelf_url="https://fossies.org/linux/misc/old/${libelf_archive}"
  1024. local libelf_folder_name="${libelf_src_folder_name}"
  1025. local libelf_stamp_file_path="${INSTALL_FOLDER_PATH}/stamp-${libelf_folder_name}-installed"
  1026. if [ ! -f "${libelf_stamp_file_path}" ]
  1027. then
  1028. cd "${SOURCES_FOLDER_PATH}"
  1029. download_and_extract "${libelf_url}" "${libelf_archive}" \
  1030. "${libelf_src_folder_name}"
  1031. mkdir -pv "${LOGS_FOLDER_PATH}/${libelf_folder_name}"
  1032. (
  1033. mkdir -pv "${LIBS_BUILD_FOLDER_PATH}/${libelf_folder_name}"
  1034. cd "${LIBS_BUILD_FOLDER_PATH}/${libelf_folder_name}"
  1035. xbb_activate
  1036. xbb_activate_installed_dev
  1037. CPPFLAGS="${XBB_CPPFLAGS}"
  1038. CFLAGS="${XBB_CFLAGS_NO_W}"
  1039. CXXFLAGS="${XBB_CXXFLAGS_NO_W}"
  1040. LDFLAGS="${XBB_LDFLAGS_LIB}"
  1041. if [ "${IS_DEVELOP}" == "y" ]
  1042. then
  1043. LDFLAGS+=" -v"
  1044. fi
  1045. export CPPFLAGS
  1046. export CFLAGS
  1047. export CXXFLAGS
  1048. export LDFLAGS
  1049. env | sort
  1050. if [ ! -f "config.status" ]
  1051. then
  1052. (
  1053. echo
  1054. echo "Running libelf configure..."
  1055. run_verbose bash "${SOURCES_FOLDER_PATH}/${libelf_src_folder_name}/configure" --help
  1056. config_options=()
  1057. config_options+=("--prefix=${LIBS_INSTALL_FOLDER_PATH}")
  1058. config_options+=("--build=${BUILD}")
  1059. config_options+=("--host=${HOST}")
  1060. config_options+=("--target=${TARGET}")
  1061. # config_options+=("--disable-nls")
  1062. run_verbose bash ${DEBUG} "${SOURCES_FOLDER_PATH}/${libelf_src_folder_name}/configure" \
  1063. ${config_options[@]}
  1064. cp "config.log" "${LOGS_FOLDER_PATH}/${libelf_folder_name}/config-log.txt"
  1065. ) 2>&1 | tee "${LOGS_FOLDER_PATH}/${libelf_folder_name}/configure-output.txt"
  1066. fi
  1067. (
  1068. echo
  1069. echo "Running libelf make..."
  1070. # Build.
  1071. run_verbose make -j ${JOBS}
  1072. if [ "${WITH_TESTS}" == "y" ]
  1073. then
  1074. run_verbose make check
  1075. fi
  1076. run_verbose make install
  1077. ) 2>&1 | tee "${LOGS_FOLDER_PATH}/${libelf_folder_name}/make-output.txt"
  1078. copy_license \
  1079. "${SOURCES_FOLDER_PATH}/${libelf_src_folder_name}" \
  1080. "${libelf_folder_name}"
  1081. )
  1082. touch "${libelf_stamp_file_path}"
  1083. else
  1084. echo "Library libelf already installed."
  1085. fi
  1086. }
  1087. # -----------------------------------------------------------------------------
  1088. function build_expat()
  1089. {
  1090. # https://libexpat.github.io
  1091. # https://github.com/libexpat/libexpat/releases
  1092. # https://archlinuxarm.org/packages/aarch64/expat/files/PKGBUILD
  1093. # https://aur.archlinux.org/cgit/aur.git/tree/PKGBUILD?h=expat-git
  1094. # Oct 21, 2017 "2.1.1"
  1095. # Nov 1, 2017 "2.2.5"
  1096. # 26 Sep 2019 "2.2.9"
  1097. local expat_version="$1"
  1098. local expat_src_folder_name="expat-${expat_version}"
  1099. local expat_archive="${expat_src_folder_name}.tar.bz2"
  1100. if [[ "${expat_version}" =~ 2\.0\.* ]]
  1101. then
  1102. expat_archive="${expat_src_folder_name}.tar.gz"
  1103. fi
  1104. local expat_release="R_$(echo ${expat_version} | sed -e 's|[.]|_|g')"
  1105. local expat_url="https://github.com/libexpat/libexpat/releases/download/${expat_release}/${expat_archive}"
  1106. local expat_folder_name="${expat_src_folder_name}"
  1107. local expat_stamp_file_path="${INSTALL_FOLDER_PATH}/stamp-${expat_folder_name}-installed"
  1108. if [ ! -f "${expat_stamp_file_path}" ]
  1109. then
  1110. cd "${SOURCES_FOLDER_PATH}"
  1111. download_and_extract "${expat_url}" "${expat_archive}" \
  1112. "${expat_src_folder_name}"
  1113. mkdir -pv "${LOGS_FOLDER_PATH}/${expat_folder_name}"
  1114. (
  1115. mkdir -pv "${LIBS_BUILD_FOLDER_PATH}/${expat_folder_name}"
  1116. cd "${LIBS_BUILD_FOLDER_PATH}/${expat_folder_name}"
  1117. xbb_activate
  1118. xbb_activate_installed_dev
  1119. CPPFLAGS="${XBB_CPPFLAGS}"
  1120. CFLAGS="${XBB_CFLAGS_NO_W}"
  1121. CXXFLAGS="${XBB_CXXFLAGS_NO_W}"
  1122. LDFLAGS="${XBB_LDFLAGS_LIB}"
  1123. if [ "${IS_DEVELOP}" == "y" ]
  1124. then
  1125. LDFLAGS+=" -v"
  1126. fi
  1127. export CPPFLAGS
  1128. export CFLAGS
  1129. export CXXFLAGS
  1130. export LDFLAGS
  1131. env | sort
  1132. if [ ! -f "config.status" ]
  1133. then
  1134. (
  1135. echo
  1136. echo "Running expat configure..."
  1137. run_verbose bash "${SOURCES_FOLDER_PATH}/${expat_src_folder_name}/configure" --help
  1138. config_options=()
  1139. config_options+=("--prefix=${LIBS_INSTALL_FOLDER_PATH}")
  1140. config_options+=("--build=${BUILD}")
  1141. config_options+=("--host=${HOST}")
  1142. config_options+=("--target=${TARGET}")
  1143. run_verbose bash ${DEBUG} "${SOURCES_FOLDER_PATH}/${expat_src_folder_name}/configure" \
  1144. ${config_options[@]}
  1145. cp "config.log" "${LOGS_FOLDER_PATH}/${expat_folder_name}/config-log.txt"
  1146. ) 2>&1 | tee "${LOGS_FOLDER_PATH}/${expat_folder_name}/configure-output.txt"
  1147. fi
  1148. (
  1149. echo
  1150. echo "Running expat make..."
  1151. # Build.
  1152. run_verbose make -j ${JOBS}
  1153. if [ "${WITH_TESTS}" == "y" ]
  1154. then
  1155. run_verbose make check
  1156. fi
  1157. run_verbose make install
  1158. ) 2>&1 | tee "${LOGS_FOLDER_PATH}/${expat_folder_name}/make-output.txt"
  1159. copy_license \
  1160. "${SOURCES_FOLDER_PATH}/${expat_src_folder_name}" \
  1161. "${expat_folder_name}"
  1162. )
  1163. touch "${expat_stamp_file_path}"
  1164. else
  1165. echo "Library expat already installed."
  1166. fi
  1167. }
  1168. # -----------------------------------------------------------------------------
  1169. function build_xz()
  1170. {
  1171. # https://tukaani.org/xz/
  1172. # https://sourceforge.net/projects/lzmautils/files/
  1173. # https://archlinuxarm.org/packages/aarch64/xz/files/PKGBUILD
  1174. # https://aur.archlinux.org/cgit/aur.git/tree/PKGBUILD?h=xz-git
  1175. # 2016-12-30 "5.2.3"
  1176. # 2018-04-29 "5.2.4"
  1177. local xz_version="$1"
  1178. local xz_src_folder_name="xz-${xz_version}"
  1179. local xz_archive="${xz_src_folder_name}.tar.xz"
  1180. local xz_url="https://sourceforge.net/projects/lzmautils/files/${xz_archive}"
  1181. local xz_folder_name="${xz_src_folder_name}"
  1182. local xz_stamp_file_path="${INSTALL_FOLDER_PATH}/stamp-${xz_folder_name}-installed"
  1183. if [ ! -f "${xz_stamp_file_path}" ]
  1184. then
  1185. cd "${SOURCES_FOLDER_PATH}"
  1186. download_and_extract "${xz_url}" "${xz_archive}" \
  1187. "${xz_src_folder_name}"
  1188. mkdir -pv "${LOGS_FOLDER_PATH}/${xz_folder_name}"
  1189. (
  1190. mkdir -pv "${LIBS_BUILD_FOLDER_PATH}/${xz_folder_name}"
  1191. cd "${LIBS_BUILD_FOLDER_PATH}/${xz_folder_name}"
  1192. xbb_activate
  1193. xbb_activate_installed_dev
  1194. CPPFLAGS="${XBB_CPPFLAGS}"
  1195. CFLAGS="${XBB_CFLAGS_NO_W}"
  1196. CXXFLAGS="${XBB_CXXFLAGS_NO_W}"
  1197. LDFLAGS="${XBB_LDFLAGS_LIB}"
  1198. if [ "${IS_DEVELOP}" == "y" ]
  1199. then
  1200. LDFLAGS+=" -v"
  1201. fi
  1202. export CPPFLAGS
  1203. export CFLAGS
  1204. export CXXFLAGS
  1205. export LDFLAGS
  1206. env | sort
  1207. if [ ! -f "config.status" ]
  1208. then
  1209. (
  1210. echo
  1211. echo "Running xz configure..."
  1212. run_verbose bash "${SOURCES_FOLDER_PATH}/${xz_src_folder_name}/configure" --help
  1213. config_options=()
  1214. config_options+=("--prefix=${LIBS_INSTALL_FOLDER_PATH}")
  1215. config_options+=("--build=${BUILD}")
  1216. config_options+=("--host=${HOST}")
  1217. config_options+=("--target=${TARGET}")
  1218. # config_options+=("--disable-rpath")
  1219. # config_options+=("--disable-nls")
  1220. run_verbose bash ${DEBUG} "${SOURCES_FOLDER_PATH}/${xz_src_folder_name}/configure" \
  1221. ${config_options[@]}
  1222. cp "config.log" "${LOGS_FOLDER_PATH}/${xz_folder_name}/config-log.txt"
  1223. ) 2>&1 | tee "${LOGS_FOLDER_PATH}/${xz_folder_name}/configure-output.txt"
  1224. fi
  1225. (
  1226. echo
  1227. echo "Running xz make..."
  1228. # Build.
  1229. run_verbose make -j ${JOBS}
  1230. if [ "${WITH_TESTS}" == "y" ]
  1231. then
  1232. run_verbose make check
  1233. fi
  1234. if [ "${WITH_STRIP}" == "y" ]
  1235. then
  1236. run_verbose make install-strip
  1237. else
  1238. run_verbose make install
  1239. fi
  1240. ) 2>&1 | tee "${LOGS_FOLDER_PATH}/${xz_folder_name}/make-output.txt"
  1241. copy_license \
  1242. "${SOURCES_FOLDER_PATH}/${xz_src_folder_name}" \
  1243. "${xz_folder_name}"
  1244. )
  1245. touch "${xz_stamp_file_path}"
  1246. else
  1247. echo "Library xz already installed."
  1248. fi
  1249. }
  1250. # -----------------------------------------------------------------------------
  1251. function build_gpm()
  1252. {
  1253. # General purpose mouse. Used by ncurses.
  1254. # https://www.nico.schottelius.org/software/gpm/
  1255. # https://github.com/telmich/gpm
  1256. # https://github.com/telmich/gpm/releases/tag/1.20.7
  1257. # https://github.com/telmich/gpm/archive/1.20.7.tar.gz
  1258. # https://archlinuxarm.org/packages/aarch64/gpm/files/PKGBUILD
  1259. # 27 Oct 2012 "1.20.7"
  1260. local gpm_version="$1"
  1261. local gpm_src_folder_name="gpm-${gpm_version}"
  1262. local gpm_archive="${gpm_src_folder_name}.tar.gz"
  1263. local gpm_github_archive="${gpm_version}.tar.gz"
  1264. local gpm_url="https://github.com/telmich/gpm/archive/${gpm_github_archive}"
  1265. local gpm_folder_name="${gpm_src_folder_name}"
  1266. local gpm_stamp_file_path="${INSTALL_FOLDER_PATH}/stamp-${gpm_folder_name}-installed"
  1267. if [ ! -f "${gpm_stamp_file_path}" ]
  1268. then
  1269. # In-source build.
  1270. cd "${LIBS_BUILD_FOLDER_PATH}"
  1271. if [ ! -d "${LIBS_BUILD_FOLDER_PATH}/${gpm_folder_name}" ]
  1272. then
  1273. cd "${LIBS_BUILD_FOLDER_PATH}"
  1274. download_and_extract "${gpm_url}" "${gpm_archive}" \
  1275. "${gpm_src_folder_name}"
  1276. if [ "${gpm_src_folder_name}" != "${gpm_folder_name}" ]
  1277. then
  1278. mv -v "${gpm_src_folder_name}" "${gpm_folder_name}"
  1279. fi
  1280. fi
  1281. mkdir -pv "${LOGS_FOLDER_PATH}/${gpm_folder_name}"
  1282. (
  1283. cd "${LIBS_BUILD_FOLDER_PATH}/${gpm_folder_name}"
  1284. if [ ! -f "stamp-autogen" ]
  1285. then
  1286. xbb_activate
  1287. run_app bash ${DEBUG} "autogen.sh"
  1288. touch "stamp-autogen"
  1289. fi
  1290. ) 2>&1 | tee "${LOGS_FOLDER_PATH}/${gpm_folder_name}/autogen-output.txt"
  1291. (
  1292. cd "${LIBS_BUILD_FOLDER_PATH}/${gpm_folder_name}"
  1293. xbb_activate
  1294. xbb_activate_installed_dev
  1295. CPPFLAGS="${XBB_CPPFLAGS} -I${LIBS_BUILD_FOLDER_PATH}/${gpm_folder_name}/src/headers"
  1296. CFLAGS="${XBB_CFLAGS_NO_W}"
  1297. CXXFLAGS="${XBB_CXXFLAGS_NO_W}"
  1298. LDFLAGS="${XBB_LDFLAGS_LIB}"
  1299. if [ "${IS_DEVELOP}" == "y" ]
  1300. then
  1301. LDFLAGS+=" -v"
  1302. fi
  1303. export CPPFLAGS
  1304. export CFLAGS
  1305. export CXXFLAGS
  1306. export LDFLAGS
  1307. env | sort
  1308. if [ ! -f "config.status" ]
  1309. then
  1310. (
  1311. echo
  1312. echo "Running gpm configure..."
  1313. run_verbose bash "configure" --help
  1314. config_options=()
  1315. config_options+=("--prefix=${LIBS_INSTALL_FOLDER_PATH}")
  1316. config_options+=("--build=${BUILD}")
  1317. config_options+=("--host=${HOST}")
  1318. config_options+=("--target=${TARGET}")
  1319. # config_options+=("--with-pic")
  1320. run_verbose bash ${DEBUG} "configure" \
  1321. ${config_options[@]}
  1322. cp "config.log" "${LOGS_FOLDER_PATH}/${gpm_folder_name}/config-log.txt"
  1323. ) 2>&1 | tee "${LOGS_FOLDER_PATH}/${gpm_folder_name}/configure-output.txt"
  1324. fi
  1325. (
  1326. echo
  1327. echo "Running gpm make..."
  1328. # Build.
  1329. run_verbose make -j ${JOBS}
  1330. if [ "${WITH_TESTS}" == "y" ]
  1331. then
  1332. run_verbose make check
  1333. fi
  1334. run_verbose make install
  1335. if [ "${TARGET_PLATFORM}" == "linux" ]
  1336. then
  1337. (
  1338. mkdir -pv "${APP_PREFIX}/bin"
  1339. cd "${APP_PREFIX}/bin"
  1340. # Manual copy, since it is not refered in the elf.
  1341. cp -v "${LIBS_INSTALL_FOLDER_PATH}/lib/libgpm.so.2.1.0" .
  1342. rm -f "libgpm.so.2"
  1343. ln -s -v "libgpm.so.2.1.0" "libgpm.so.2"
  1344. )
  1345. fi
  1346. ) 2>&1 | tee "${LOGS_FOLDER_PATH}/${gpm_folder_name}/make-output.txt"
  1347. copy_license \
  1348. "${LIBS_BUILD_FOLDER_PATH}/${gpm_folder_name}" \
  1349. "${gpm_folder_name}"
  1350. )
  1351. touch "${gpm_stamp_file_path}"
  1352. else
  1353. echo "Library gpm already installed."
  1354. fi
  1355. }
  1356. # -----------------------------------------------------------------------------
  1357. # Download the Windows Python 2 libraries and headers.
  1358. function download_python2_win()
  1359. {
  1360. # https://www.python.org/downloads/release/python-2714/
  1361. # https://www.python.org/ftp/python/2.7.14/python-2.7.14.msi
  1362. # https://www.python.org/ftp/python/2.7.14/python-2.7.14.amd64.msi
  1363. local python2_version="$1"
  1364. local python2_version_major=$(echo ${python2_version} | sed -e 's|\([0-9]\)\..*|\1|')
  1365. local python2_version_minor=$(echo ${python2_version} | sed -e 's|\([0-9]\)\.\([0-9][0-9]*\)\..*|\2|')
  1366. if [ "${TARGET_BITS}" == "32" ]
  1367. then
  1368. PYTHON2_SRC_FOLDER_NAME=python-"${python2_version}"
  1369. else
  1370. PYTHON2_SRC_FOLDER_NAME=python-"${python2_version}".amd64
  1371. fi
  1372. # Used to compute GNURM_PYTHON_WIN_DIR.
  1373. export PYTHON2_SRC_FOLDER_NAME
  1374. local python2_win_pack="${PYTHON2_SRC_FOLDER_NAME}.msi"
  1375. local python2_win_url="https://www.python.org/ftp/python/${python2_version}/${python2_win_pack}"
  1376. cd "${SOURCES_FOLDER_PATH}"
  1377. download "${python2_win_url}" "${python2_win_pack}"
  1378. (
  1379. xbb_activate
  1380. if [ ! -d "${PYTHON2_SRC_FOLDER_NAME}" ]
  1381. then
  1382. cd "${SOURCES_FOLDER_PATH}"
  1383. # Include only the headers and the python library and executable.
  1384. echo '*.h' >"/tmp/included"
  1385. echo 'python*.dll' >>"/tmp/included"
  1386. echo 'python*.lib' >>"/tmp/included"
  1387. 7za x -o"${PYTHON2_SRC_FOLDER_NAME}" "${DOWNLOAD_FOLDER_PATH}/${python2_win_pack}" -i@"/tmp/included"
  1388. # Patch to disable the macro that renames hypot.
  1389. local patch_path="${BUILD_GIT_PATH}/patches/${PYTHON2_SRC_FOLDER_NAME}.patch"
  1390. if [ -f "${patch_path}" ]
  1391. then
  1392. (
  1393. cd "${PYTHON2_SRC_FOLDER_NAME}"
  1394. patch -p0 <"${patch_path}"
  1395. )
  1396. fi
  1397. else
  1398. echo "Folder ${PYTHON2_SRC_FOLDER_NAME} already present."
  1399. fi
  1400. echo "Copying python${python2_version_major}${python2_version_minor}.dll..."
  1401. # From here it'll be copied as dependency.
  1402. mkdir -pv "${LIBS_INSTALL_FOLDER_PATH}/bin/"
  1403. install -v -c -m 644 "${PYTHON2_SRC_FOLDER_NAME}/python${python2_version_major}${python2_version_minor}.dll" \
  1404. "${LIBS_INSTALL_FOLDER_PATH}/bin/"
  1405. mkdir -pv "${LIBS_INSTALL_FOLDER_PATH}/lib/"
  1406. install -v -c -m 644 "${PYTHON2_SRC_FOLDER_NAME}/python${python2_version_major}${python2_version_minor}.lib" \
  1407. "${LIBS_INSTALL_FOLDER_PATH}/lib/"
  1408. )
  1409. }
  1410. # -----------------------------------------------------------------------------
  1411. # Download the Windows Python 3 libraries and headers.
  1412. function download_python3_win()
  1413. {
  1414. # https://www.python.org/downloads/windows/
  1415. # https://www.python.org/downloads/release/python-372/
  1416. # https://www.python.org/ftp/python/3.7.2/python-3.7.2.post1-embed-win32.zip
  1417. # https://www.python.org/ftp/python/3.7.2/python-3.7.2.post1-embed-amd64.zip
  1418. # https://www.python.org/ftp/python/3.7.2/python-3.7.2.exe
  1419. # https://www.python.org/ftp/python/3.7.2/python-3.7.2-amd64.exe
  1420. # https://www.python.org/ftp/python/3.7.2/Python-3.7.2.tar.xz
  1421. # https://www.python.org/ftp/python/3.7.6/
  1422. # https://www.python.org/ftp/python/3.7.6/python-3.7.6-embed-amd64.zip
  1423. # https://www.python.org/ftp/python/3.7.6/python-3.7.6-embed-win32.zip
  1424. local python3_version="$1"
  1425. local python3_version_major=$(echo ${python3_version} | sed -e 's|\([0-9]\)\..*|\1|')
  1426. local python3_version_minor=$(echo ${python3_version} | sed -e 's|\([0-9]\)\.\([0-9][0-9]*\)\..*|\2|')
  1427. # Version 3.7.2 uses a longer name, like python-3.7.2.post1-embed-amd64.zip.
  1428. if [ "${TARGET_BITS}" == "32" ]
  1429. then
  1430. PYTHON3_WIN_EMBED_FOLDER_NAME=python-"${python3_version}-embed-win32"
  1431. else
  1432. PYTHON3_WIN_EMBED_FOLDER_NAME=python-"${python3_version}-embed-amd64"
  1433. fi
  1434. # Used in python3-config.sh
  1435. export PYTHON3_WIN_EMBED_FOLDER_NAME
  1436. export PYTHON3_SRC_FOLDER_NAME="Python-${python3_version}"
  1437. local python3_win_embed_pack="${PYTHON3_WIN_EMBED_FOLDER_NAME}.zip"
  1438. local python3_win_embed_url="https://www.python.org/ftp/python/${python3_version}/${python3_win_embed_pack}"
  1439. (
  1440. xbb_activate
  1441. if [ ! -d "${SOURCES_FOLDER_PATH}/${PYTHON3_WIN_EMBED_FOLDER_NAME}" ]
  1442. then
  1443. mkdir -pv "${SOURCES_FOLDER_PATH}/${PYTHON3_WIN_EMBED_FOLDER_NAME}"
  1444. cd "${SOURCES_FOLDER_PATH}/${PYTHON3_WIN_EMBED_FOLDER_NAME}"
  1445. download_and_extract "${python3_win_embed_url}" "${python3_win_embed_pack}" "${PYTHON3_WIN_EMBED_FOLDER_NAME}"
  1446. else
  1447. echo "Folder ${PYTHON3_WIN_EMBED_FOLDER_NAME} already present."
  1448. fi
  1449. cd "${SOURCES_FOLDER_PATH}/${PYTHON3_WIN_EMBED_FOLDER_NAME}"
  1450. echo "Copying python${python3_version_major}${python3_version_minor}.dll..."
  1451. # From here it'll be copied as dependency.
  1452. mkdir -pv "${LIBS_INSTALL_FOLDER_PATH}/bin/"
  1453. install -v -c -m 644 "python${python3_version_major}.dll" \
  1454. "${LIBS_INSTALL_FOLDER_PATH}/bin/"
  1455. install -v -c -m 644 "python${python3_version_major}${python3_version_minor}.dll" \
  1456. "${LIBS_INSTALL_FOLDER_PATH}/bin/"
  1457. mkdir -pv "${LIBS_INSTALL_FOLDER_PATH}/lib/"
  1458. install -v -c -m 644 "python${python3_version_major}.dll" \
  1459. "${LIBS_INSTALL_FOLDER_PATH}/lib/"
  1460. install -v -c -m 644 "python${python3_version_major}${python3_version_minor}.dll" \
  1461. "${LIBS_INSTALL_FOLDER_PATH}/lib/"
  1462. )
  1463. local python3_archive="${PYTHON3_SRC_FOLDER_NAME}.tar.xz"
  1464. local python3_url="https://www.python.org/ftp/python/${python3_version}/${python3_archive}"
  1465. # local python3_folder_name="python-${python3_version}"
  1466. if [ ! -d "${SOURCES_FOLDER_PATH}/${PYTHON3_SRC_FOLDER_NAME}" ]
  1467. then
  1468. cd "${SOURCES_FOLDER_PATH}"
  1469. download_and_extract "${python3_url}" "${python3_archive}" \
  1470. "${PYTHON3_SRC_FOLDER_NAME}"
  1471. fi
  1472. # The source archive includes only the pyconfig.h.in, which needs
  1473. # to be configured, which is not an easy task. Thus add the file copied
  1474. # from a Windows install.
  1475. cp -v "${BUILD_GIT_PATH}/patches/pyconfig-${python3_version}.h" \
  1476. "${SOURCES_FOLDER_PATH}/${PYTHON3_SRC_FOLDER_NAME}/Include/pyconfig.h"
  1477. }
  1478. # -----------------------------------------------------------------------------