configure 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530
  1. #!/bin/bash
  2. if [ "$1" = "-h" ] || [ "$1" = "--help" ] || [ "$1" = "-help" ]; then
  3. echo "Usage: $0 [OPTION]... [VAR=VALUE]..."
  4. echo ""
  5. echo "Installation directories:"
  6. echo " --prefix=PREFIX : install in PREFIX (e.g. /usr) [default: /usr/local]"
  7. echo ""
  8. echo "Optional Packages:"
  9. echo " --with-gtk=2.0|3.0 : which gtk+ version to compile against [default: 2.0]"
  10. echo ""
  11. echo "Optional Features:"
  12. echo " --disable-xim : disable the support of XIM [default: enable]"
  13. echo " --disable-nls : disable Native Language Support [default: enable]"
  14. echo " --disable-tsin : disable Tsin input method [default: enable]"
  15. echo " --disable-anthy : disable Anthy input method [default: auto-detect]"
  16. echo " --disable-chewing : disable Chewing input method [default: auto-detect]"
  17. echo " --disable-system-tray : disable system tray support [default: enable]"
  18. echo " --disable-appindicator : disable Ubuntu unity tray [default: auto-detect]"
  19. echo " --disable-lib64 : disable the use of lib64 dir [default: auto-detect]"
  20. echo " --disable-qt5-immodule : disable QT5 im-module [default: auto-detect]"
  21. echo " --disable-gtk2-im-module : disable GTK+ 2.x im-module [default: auto-detect]"
  22. echo " --disable-gtk3-im-module : disable GTK+ 3.x im-module [default: auto-detect]"
  23. echo ""
  24. echo "System Specific Pathes:"
  25. echo " --qt5-moc-path=PATH : specify the path of \"moc\" command for Qt 5.x"
  26. echo " --qt5-im-module-path=PATH : specify the install path for Qt 5.x im-module."
  27. echo ""
  28. exit
  29. fi
  30. MAKE="make"
  31. if command -v gmake >/dev/null 2>/dev/null; then
  32. MAKE="gmake"
  33. fi
  34. FREEBSD=0
  35. if uname | grep FreeBSD | grep -v GNU/kFreeBSD >/dev/null 2>/dev/null; then
  36. FREEBSD=1
  37. fi
  38. if uname | grep OpenBSD >/dev/null 2>/dev/null; then
  39. FREEBSD=1
  40. fi
  41. SO_FLAGS="$LDFLAGS -shared -Wl,--as-needed"
  42. prefix="/usr/local"
  43. use_xim='Y'
  44. use_i18n='Y'
  45. use_tsin='Y'
  46. use_anthy='Y'
  47. use_chewing='Y'
  48. use_system_tray='Y'
  49. use_unity_tray='Y'
  50. use_lib=''
  51. use_qt5='Y'
  52. use_gtk2='Y'
  53. use_gtk3='Y'
  54. find_in_path_list_to_variable() {
  55. # find_in_path_list_to_variable() will find all elements in the array name stored in $1
  56. # if found, set the found path to variable name in $2 and return 0
  57. # otherwise return 1.
  58. for path in $1; do
  59. if [ -x "$path" ]; then
  60. eval "$2"=\""$path"\"
  61. return 0
  62. fi
  63. done
  64. return 1
  65. }
  66. # debian fedora fedora freebsd slackware arch
  67. qt5_moc_path_list="/usr/share/qt5/bin/moc /usr/lib/qt5/bin/moc /usr/bin/moc-qt5 /usr/local/bin/moc-qt5 /usr/local/bin/moc /usr/bin/moc"
  68. QT5_IM_DIR_CUSTOM=
  69. for opt; do
  70. case "$opt" in
  71. --prefix=*)
  72. prefix=$(echo "$opt" | cut -d '=' -f 2)
  73. ;;
  74. --with_gtk2 | --with-gtk=2.0)
  75. GTK=gtk+-2.0
  76. ;;
  77. --with_gtk3 | --with-gtk=3.0)
  78. GTK=gtk+-3.0
  79. ;;
  80. --use_xim=*)
  81. use_xim=$(echo "$opt" | cut -d '=' -f 2)
  82. ;;
  83. --enable-xim)
  84. use_xim=Y
  85. ;;
  86. --disable-xim)
  87. use_xim=N
  88. ;;
  89. --use_i18n=*)
  90. use_i18n=$(echo "$opt" | cut -d '=' -f 2)
  91. ;;
  92. --enable-nls)
  93. use_i18n=Y
  94. ;;
  95. --disable-nls)
  96. use_i18n=N
  97. ;;
  98. --use_tsin=*)
  99. use_tsin=$(echo "$opt" | cut -d '=' -f 2)
  100. ;;
  101. --enable-tsin)
  102. use_tsin=Y
  103. ;;
  104. --disable-tsin)
  105. use_tsin=N
  106. ;;
  107. --use_anthy=*)
  108. use_anthy=$(echo "$opt" | cut -d '=' -f 2)
  109. ;;
  110. --enable-anthy)
  111. use_anthy=Y
  112. ;;
  113. --disable-anthy)
  114. use_anthy=N
  115. ;;
  116. --use_chewing=*)
  117. use_chewing=$(echo "$opt" | cut -d '=' -f 2)
  118. ;;
  119. --enable-chewing)
  120. use_chewing=Y
  121. ;;
  122. --disable-chewing)
  123. use_chewing=N
  124. ;;
  125. --use_system_tray=*)
  126. use_system_tray=$(echo "$opt" | cut -d '=' -f 2)
  127. ;;
  128. --enable-system-tray)
  129. use_system_tray=Y
  130. ;;
  131. --disable-system-tray)
  132. use_system_tray=N
  133. ;;
  134. --use_unity_tray=*)
  135. use_unity_tray=$(echo "$opt" | cut -d '=' -f 2)
  136. ;;
  137. --enable-appindicator)
  138. use_unity_tray=Y
  139. ;;
  140. --disable-appindicator)
  141. use_unity_tray=N
  142. ;;
  143. --use_lib=*)
  144. use_lib=$(echo "$opt" | cut -d '=' -f 2)
  145. ;;
  146. --enable-lib64)
  147. use_lib='lib64'
  148. ;;
  149. --disable-lib64)
  150. use_lib='lib'
  151. ;;
  152. --use_qt5=*)
  153. use_qt5=$(echo "$opt" | cut -d '=' -f 2)
  154. ;;
  155. --enable-qt5-immodule)
  156. use_qt5=Y
  157. ;;
  158. --disable-qt5-immodule)
  159. use_qt5=N
  160. ;;
  161. --use_gtk2=*)
  162. use_gtk2=$(echo "$opt" | cut -d '=' -f 2)
  163. ;;
  164. --enable-gtk2-im-module)
  165. use_gtk2=Y
  166. ;;
  167. --disable-gtk2-im-module)
  168. use_gtk2=N
  169. ;;
  170. --use_gtk3=*)
  171. use_gtk3=$(echo "$opt" | cut -d '=' -f 2)
  172. ;;
  173. --enable-gtk3-im-module)
  174. use_gtk3=Y
  175. ;;
  176. --disable-gtk3-im-module)
  177. use_gtk3=N
  178. ;;
  179. --qt5-moc-path=*)
  180. QT5_MOC_PATH=$(echo "$opt" | cut -d '=' -f 2)
  181. ;;
  182. --qt5-install-to=* | --qt5-im-module-path=*)
  183. QT5_IM_DIR_CUSTOM=$(echo "$opt" | cut -d '=' -f 2)
  184. ;;
  185. esac
  186. done
  187. echo "prefix: $prefix"
  188. echo -n ".... Testing pkg-config : "
  189. if ! command -v pkg-config >/dev/null 2>&1; then
  190. echo "please install pkg-config. abort!"
  191. exit 1
  192. else
  193. echo "Found: $(command -v pkg-config)"
  194. fi
  195. echo -n ".... Testing Xtst : "
  196. if ! pkg-config --exists xtst 2>/dev/null; then
  197. echo "please install libxtst. abort!"
  198. exit 1
  199. else
  200. echo "Found: $(pkg-config --print-provides xtst)"
  201. fi
  202. echo -n ".... Testing anthy : "
  203. if ! pkg-config --libs anthy >/dev/null 2>/dev/null; then
  204. echo "Not found, anthy module is turned off."
  205. USE_ANTHY='N'
  206. else
  207. if [ "$use_anthy" = "N" ]; then
  208. USE_ANTHY='N'
  209. echo "Found, but disabled."
  210. else
  211. USE_ANTHY='Y'
  212. ANTHY_INC="-I$(pkg-config --variable=includedir anthy) $(pkg-config --libs anthy)"
  213. echo "Found: $(pkg-config --print-provides anthy)"
  214. fi
  215. fi
  216. echo -n ".... Testing chewing : "
  217. if ! pkg-config --libs chewing >/dev/null 2>/dev/null; then
  218. echo Not found, chewing module is turned off.
  219. USE_CHEWING='N'
  220. else
  221. if [ "$use_chewing" = "N" ]; then
  222. USE_CHEWING='N'
  223. echo "Found, but disabled."
  224. else
  225. if ! pkg-config --exists 'chewing >= 0.3.4' 2>/dev/null; then
  226. USE_CHEWING='N'
  227. echo "Disabled. chewing >= 0.3.4 is needed to enable chewing."
  228. else
  229. USE_CHEWING='Y'
  230. echo "Found: $(pkg-config --print-provides chewing)"
  231. fi
  232. fi
  233. fi
  234. GTK=${GTK:-gtk+-2.0}
  235. echo -n ".... Testing $GTK : "
  236. if ! pkg-config --exists "$GTK"; then
  237. echo "$GTK Not found."
  238. echo "$GTK or above required --cflags. abort!"
  239. rm -f config.mak
  240. exit 1
  241. fi
  242. echo "Found: $(pkg-config --print-provides $GTK)"
  243. # version guards for GTK+
  244. if [ "$GTK" = gtk+-2.0 ]; then
  245. if ! pkg-config --exists 'gtk+-2.0 >= 2.24.31'; then
  246. echo "gtk+-2.0 >= 2.24.31 is required. abort!"
  247. rm -f config.mak
  248. exit 1
  249. fi
  250. APPINDICATOR=appindicator-0.1
  251. fi
  252. if [ "$GTK" = gtk+-3.0 ]; then
  253. if ! pkg-config --exists 'gtk+-3.0 >= 3.22.30'; then
  254. echo "gtk+-3.0 >= 3.22.30 is required. abort!"
  255. rm -f config.mak
  256. exit 1
  257. fi
  258. APPINDICATOR=appindicator3-0.1
  259. fi
  260. if ! pkg-config --libs "$GTK" >/dev/null 2>/dev/null; then
  261. echo "$GTK or above required --libs"
  262. echo "please install rpm/package libgtk+2.0_0-devel/libgtk+3.0_0-devel. abort!"
  263. rm -f config.mak
  264. exit 1
  265. fi
  266. GTKINC=$(pkg-config --cflags "$GTK" 2>/dev/null)
  267. GTKLDFLAGS=$(pkg-config --libs "$GTK" 2>/dev/null)
  268. if [ "$use_unity_tray" = "Y" ]; then
  269. echo -n ".... Testing appindicator : "
  270. if ! pkg-config --libs "$APPINDICATOR" >/dev/null 2>/dev/null; then
  271. echo Not found, appindicator is disabled.
  272. USE_UNITY_TRAY=N
  273. else
  274. if [ "$use_unity_tray" = "N" ]; then
  275. USE_UNITY_TRAY='N'
  276. echo "Found, but disabled."
  277. else
  278. if ! pkg-config --exists "$APPINDICATOR >= 0.4.0" 2>/dev/null; then
  279. echo "Disabled. appindicator > 0.4.0 is needed to enable appindicator."
  280. USE_UNITY_TRAY='N'
  281. else
  282. echo "Found: $(pkg-config --print-provides $APPINDICATOR)"
  283. USE_UNITY_TRAY='Y'
  284. GTKINC=$(pkg-config --cflags "$GTK" "$APPINDICATOR" 2>/dev/null)
  285. GTKLDFLAGS=$(pkg-config --libs "$GTK" "$APPINDICATOR" 2>/dev/null)
  286. fi
  287. fi
  288. fi
  289. fi
  290. echo -n ".... Testing lib : "
  291. LIB='lib'
  292. if [ -d /usr/lib64 ] && [ -d /lib64 ]; then
  293. LIB='lib64'
  294. fi
  295. if [ "$(uname -s)" = Linux ]; then
  296. if command -v lsb_release >/dev/null; then
  297. distid=$(lsb_release -is 2>/dev/null)
  298. case $distid in
  299. Ubuntu | Debian | Arch | archlinux)
  300. LIB='lib'
  301. ;;
  302. esac
  303. else
  304. DEBIAN_LD=$(ld -v 2>&1 | grep -i debian)
  305. UBUNTU_LD=$(ld -v 2>&1 | grep -i ubuntu)
  306. if [ "$DEBIAN_LD" != "" ] || [ "$UBUNTU_LD" != "" ]; then
  307. LIB='lib'
  308. elif [ -e /etc/arch-release ]; then
  309. LIB='lib'
  310. fi
  311. fi
  312. fi
  313. if [ -n "$use_lib" ]; then
  314. echo "Decteted $LIB, but set to $prefix/$use_lib"
  315. LIB="$use_lib"
  316. else
  317. echo "Using $prefix/$LIB"
  318. fi
  319. # --- QT5 START ---
  320. QT5_IM='N'
  321. if [ -z "$QT5_IM_DIR" ]; then QT5_IM_DIR=/qt5/plugins/platforminputcontexts; fi
  322. echo -n ".... Testing Qt 5.x : "
  323. if pkg-config --libs Qt5Core Qt5Gui >/dev/null 2>/dev/null; then
  324. QT5_IM='Y'
  325. fi
  326. if [ ! -x "$QT5_MOC_PATH" ]; then
  327. find_in_path_list_to_variable "$(pkg-config --variable=host_bins Qt5Core)/moc $qt5_moc_path_list" "QT5_MOC_PATH"
  328. fi
  329. if [ "$QT5_IM" = "Y" ]; then
  330. if [ "$use_qt5" = "N" ]; then
  331. QT5_IM='N'
  332. echo "Found: $(pkg-config --print-provides Qt5Core), but disabled."
  333. else
  334. if [ ! -x "$QT5_MOC_PATH" ]; then
  335. echo "Not found, cannot find \"moc\" tool for Qt 5.x."
  336. echo "Hint: use the --qt5-moc-path option. abort!"
  337. exit 1
  338. fi
  339. echo "Found: $(pkg-config --print-provides Qt5Core)"
  340. fi
  341. else
  342. echo "Not found, Qt 5.x immodule is turned off."
  343. fi
  344. # --- QT5 END ---
  345. # --- MOC INFO START ---
  346. if [ "$QT5_IM" = "Y" ]; then echo ".... Path of Qt5 moc : $QT5_MOC_PATH"; fi
  347. # --- MOC INFO END ---
  348. GTK_IM='N'
  349. if [ "$GTK" = "gtk+-2.0" ]; then
  350. echo -n ".... Testing GTK+ 2.x immodule : "
  351. if pkg-config --libs gtk+-2.0 >/dev/null 2>/dev/null; then
  352. GTK_IM='Y'
  353. fi
  354. if [ "$GTK_IM" = "Y" ]; then
  355. if [ "$use_gtk2" = "N" ]; then
  356. GTK_IM='N'
  357. echo "Found, but disabled."
  358. else
  359. echo "Found."
  360. fi
  361. else
  362. echo "Not found. It's ok if you don't want GTK+ 2.x immodule."
  363. fi
  364. fi
  365. GTK3_IM='N'
  366. echo -n ".... Testing GTK+ 3.x immodule : "
  367. if pkg-config --libs gtk+-3.0 >/dev/null 2>/dev/null; then
  368. GTK3_IM='Y'
  369. fi
  370. if [ "$GTK3_IM" = "Y" ]; then
  371. if [ "$use_gtk3" = "N" ]; then
  372. GTK3_IM='N'
  373. echo "Found, but disabled."
  374. else
  375. echo "Found."
  376. fi
  377. else
  378. echo "Not found. It's ok if you don't want GTK+ 3.x immodule."
  379. fi
  380. [ -f "data/dayi3.cin" ] && INSTALL_DFSG_INCOMPATIBLE=Y
  381. if [ -d .git ]; then
  382. GIT_HAVE='Y'
  383. GIT_HASH=$(git log 2>/dev/null | head -n 1 | cut -d ' ' -f 2 | head -c 7)
  384. fi
  385. echo ".... GIT hash: $GIT_HASH"
  386. CC="${CC:-gcc}"
  387. CXX="${CXX:-g++}"
  388. if [ -z "$CFLAGS" ]; then
  389. CFLAGS="-std=gnu17"
  390. CXXFLAGS="-std=gnu++17"
  391. OPTFLAGS="-Wall"
  392. else
  393. OPTFLAGS="$CFLAGS"
  394. fi
  395. echo ".... Toolchains flags:"
  396. echo " CC/CXX = $CC/$CXX"
  397. echo " CFLAGS = $CFLAGS"
  398. echo " CXXFLAGS = $CXXFLAGS"
  399. echo " OPTFLAGS = $OPTFLAGS"
  400. # build
  401. echo "MAKE=$MAKE" >config.mak
  402. echo "CC=$CC" >>config.mak
  403. echo "CCX=$CC" >>config.mak
  404. echo "CXX=$CXX" >>config.mak
  405. echo "CCLD=$CC" >>config.mak
  406. echo "LDFLAGS_ENV=$LDFLAGS" >>config.mak
  407. echo "LDFLAGS=$LDFLAGS -Wl,--as-needed -lX11 -lm" >>config.mak
  408. echo "CFLAGS=$CFLAGS $CPPFLAGS" >>config.mak
  409. echo "CXXFLAGS=$CXXFLAGS $CPPFLAGS" >>config.mak
  410. echo "FREEBSD=$FREEBSD" >>config.mak
  411. if [ "$FREEBSD" -eq 0 ]; then
  412. echo "LDFLAGS+=$GTKLDFLAGS -lX11 -ldl" >>config.mak
  413. else
  414. echo "LDFLAGS+=$GTKLDFLAGS -lX11" >>config.mak
  415. fi
  416. echo "OPTFLAGS=$OPTFLAGS" >>config.mak
  417. echo "SO_FLAGS=$SO_FLAGS" >>config.mak
  418. echo "prefix=$prefix" >>config.mak
  419. # installation
  420. bindir=$prefix/bin
  421. datadir=$prefix/share
  422. if [ "$FREEBSD" -eq 0 ]; then
  423. mandir=$datadir/man
  424. else
  425. mandir=$prefix/man
  426. fi
  427. libdir=$prefix/$LIB
  428. includedir=$prefix/include
  429. hime_version="$(head -n 1 ChangeLog)"
  430. echo "bindir=\$(DESTDIR)$bindir" >>config.mak
  431. echo "mandir=\$(DESTDIR)$mandir" >>config.mak
  432. echo "man1dir=\$(mandir)/man1" >>config.mak
  433. echo "datadir=\$(DESTDIR)$datadir" >>config.mak
  434. echo "filterdir=\$(datadir)/hime/filter" >>config.mak
  435. echo "includedir=\$(DESTDIR)$includedir" >>config.mak
  436. echo "libdir=\$(DESTDIR)$libdir" >>config.mak
  437. echo "himelibdir=\$(libdir)/hime" >>config.mak
  438. echo "hime_ld_run_path=\$(himelibdir)" >>config.mak
  439. echo "gcc_ld_run_path=-Wl,-rpath,\$(hime_ld_run_path)" >>config.mak
  440. echo "HIME_BIN_DIR=\$(bindir)" >>config.mak
  441. echo "HIME_DEFAULT_ICON_DIR=\$(datadir)/pixmaps/hime" >>config.mak
  442. echo "HIME_OGG_DIR=\$(datadir)/hime/ogg" >>config.mak
  443. echo "HIME_SCRIPT_DIR=\$(datadir)/hime/script" >>config.mak
  444. echo "HIME_TABLE_DIR=\$(datadir)/hime/table" >>config.mak
  445. echo "HIME_VERSION=$hime_version" >>config.mak
  446. echo "DOC_DIR=\$(datadir)/doc/hime" >>config.mak
  447. echo "SYS_ICON_DIR=\$(datadir)/pixmaps" >>config.mak
  448. echo "INSTALL_DFSG_INCOMPATIBLE=$INSTALL_DFSG_INCOMPATIBLE" >>config.mak
  449. # configure script flags
  450. echo "USE_XIM=$use_xim" >>config.mak
  451. echo "USE_SYSTEM_TRAY=$use_system_tray" >>config.mak
  452. echo "USE_UNITY_TRAY=$USE_UNITY_TRAY" >>config.mak
  453. echo "USE_I18N=$use_i18n" >>config.mak
  454. echo "USE_TSIN=$use_tsin" >>config.mak
  455. echo "USE_ANTHY=$USE_ANTHY" >>config.mak
  456. echo "ANTHY_INC=$ANTHY_INC" >>config.mak
  457. echo "USE_CHEWING=$USE_CHEWING" >>config.mak
  458. echo "LIB=$LIB" >>config.mak
  459. # QT
  460. echo "QT5_IM=$QT5_IM" >>config.mak
  461. if [ -z "$QT5_IM_DIR_CUSTOM" ]; then
  462. echo "QT5_IM_DIR=$(pkg-config --define-variable=prefix=$\(DESTDIR\)/\$\(prefix\) --variable=libdir Qt5Core)$QT5_IM_DIR" >>config.mak
  463. else
  464. echo "QT5_IM_DIR=\$(DESTDIR)$QT5_IM_DIR_CUSTOM" >>config.mak
  465. fi
  466. echo "QT5_MOC_PATH=$QT5_MOC_PATH" >>config.mak
  467. echo "QT5_QMAKE_PATH=$QT5_MOC_PATH" | sed 's/moc/qmake/' >>config.mak
  468. # GTK
  469. echo "GTK=$GTK" >>config.mak
  470. echo "GTKINC=$GTKINC" >>config.mak
  471. echo "GTK_IM=$GTK_IM" >>config.mak
  472. echo "GTK3_IM=$GTK3_IM" >>config.mak
  473. # git
  474. echo "GIT_HAVE=$GIT_HAVE" >>config.mak
  475. echo "GIT_HASH=$GIT_HASH" >>config.mak