configure.ac 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274
  1. dnl Process this file with autoconf to produce a configure script.
  2. dnl
  3. dnl
  4. AC_PREREQ(2.59)
  5. AC_INIT([wraith],[],[wraith@botpack.net])
  6. AC_CONFIG_SRCDIR(src/eggdrop.h)
  7. AC_CONFIG_HEADER(src/config.h)
  8. AC_CONFIG_AUX_DIR([build/autotools])
  9. AC_COPYRIGHT([Copyright (c) Bryan Drewery])
  10. AC_REVISION($Revision$)
  11. EGG_SAVE_PARAMETERS
  12. # Setup build environment
  13. dnl Search for newer gcc versions before older
  14. #AC_REQUIRE_CPP
  15. AC_LANG([C++])
  16. AC_PROG_CXX([g++49 g++-4.9 g++48 g++-4.8 g++47 g++-4.7 clang++ g++46 g++-4.6 g++45 g++-4.5 g++-4.4 g++-4.4.1 g++-4.4.2 g++-4.4.0 g++44 g++4 eg++ g++-3.3 g++33 g++-3 g++3 g++ c++ gpp aCC CC cxx cc++ cl FCC KCC RCC xlC_r xlC])
  17. dnl AC_PROG_CC([gcc34 gcc-3.4 gcc33 gcc3 gcc-3.3 gcc cc c1])
  18. AC_REQUIRE_CPP
  19. AX_CXX_COMPILE_STDCXX_11([noext], [mandatory])
  20. EGG_CHECK_CC
  21. #checkpoint
  22. AC_CACHE_SAVE
  23. # Speedup compile
  24. EGG_CHECK_CCWALL
  25. EGG_CHECK_CCPIPE
  26. CXX_FLAG_CHECK([CXXFLAGS], [-fcolor-diagnostics], [colordiagnostics])
  27. #CXX_FLAG_CHECK([CXXFLAGS], [-Qunused-arguments], [unusedarguments])
  28. CXX_FLAG_CHECK([CXXFLAGS], [-Wno-invalid-source-encoding], [invalid_source_encoding])
  29. CXX_FLAG_CHECK([CXXFLAGS], [-fstack-protector], [stackprotector])
  30. CXX_FLAG_CHECK([CXXFLAGS], [-fstack-protector-strong], [stackprotectorstrong])
  31. if [[ "${ax_cv_prog_cc_stackprotectorstrong}" = "yes" ]]; then
  32. LDFLAGS="${LDFLAGS} -fstack-protector-strong"
  33. elif [[ "${ax_cv_prog_cc_stackprotector}" = "yes" ]]; then
  34. LDFLAGS="${LDFLAGS} -fstack-protector"
  35. fi
  36. CXX_FLAG_CHECK([DEBCXXFLAGS], [-fstack-protector-all], [stackprotectorall])
  37. EGG_CHECK_DEPMODE
  38. #checkpoint
  39. AC_CACHE_SAVE
  40. # Checks for programs
  41. AC_PROG_MAKE_SET
  42. AC_PROG_SED
  43. EGG_PROG_HEAD_1
  44. EGG_PROG_AWK
  45. EGG_PROG_BASENAME
  46. AC_CHECK_PROG(OBJCOPY, objcopy, [objcopy --remove-section=.note --remove-section=.comment], touch)
  47. AC_CHECK_PROG(STRIP, strip, strip, touch)
  48. AC_CHECK_PROG(DIFF, gdiff, gdiff, diff)
  49. AC_CHECK_PROG(UNAME, uname, uname)
  50. AC_CHECK_PROG(CCACHE, ccache, env CCACHE_CPP2=1 ccache)
  51. AC_CHECK_PROG(DISTCC, distcc, distcc)
  52. # Test the os and set the module linking settings
  53. EGG_CHECK_OS
  54. # Check for IPv6 support
  55. #EGG_IPV6_SUPPORTED
  56. EGG_IPV6_OPTIONS
  57. EGG_CHECK_SOCKLEN_T
  58. # Check for inconsistent random() functions
  59. EGG_CHECK_RANDOM_MAX
  60. # Create static binaries
  61. EGG_CHECK_CCSTATIC
  62. AC_SUBST(DEBCXXFLAGS)
  63. #checkpoint
  64. AC_CACHE_SAVE
  65. # Checks for system libraries
  66. EGG_CHECK_LIBS
  67. CHECK_LIBELF
  68. # Checks for header files
  69. AC_HEADER_DIRENT
  70. AC_HEADER_SYS_WAIT
  71. AC_HEADER_TIME
  72. AC_HEADER_STAT
  73. #checkpoint
  74. AC_CACHE_SAVE
  75. AC_CHECK_HEADERS([stdarg.h arpa/inet.h fcntl.h limits.h locale.h netdb.h netinet/in.h])
  76. AC_CHECK_HEADERS([sys/file.h sys/ioctl.h sys/param.h sys/socket.h wchar.h sys/ptrace.h paths.h sys/prctl.h])
  77. #checkpoint
  78. AC_CACHE_SAVE
  79. #AC_CHECK_HEADERS(openssl/ssl.h openssl/crypto.h)
  80. #AC_CHECK_HEADERS(zlib.h)
  81. #EGG_CHECK_ZLIB
  82. CHECK_SSL
  83. # TCL checks
  84. # Tcl version to recommend if no Tcl is found, and the site where it can be
  85. # found for download.
  86. tclrecommendver="8.5.X"
  87. tclrecommendsite="ftp://tcl.activestate.com/pub/tcl/tcl8_5/"
  88. # Tcl library filename prefixes, suffixes, and search paths.
  89. tcllibnames="tcl8.6 tcl86 tcl8.5 tcl85 tcl8.4 tcl84 tcl8.3 tcl83 tcl8.2 tcl82 \
  90. tcl8.1 tcl81 tcl8.0 tcl80 tcl tcl7.6 tcl76 tcl7.5 tcl75 \
  91. tcl7.4 tcl74 tcl7.3 tcl73 tcl7.2 tcl72 tcl7.1 tcl71 \
  92. tcl7.0 tcl70"
  93. tcllibextensions=".so .so.1 .so.1.0 .so.1.1 .so.1.2 .dll .dylib .sl .a"
  94. tcllibpaths="$HOME/lib $HOME/tcl/lib \
  95. /usr/local/lib /usr/lib /lib /lib64 /usr/lib64 \
  96. /usr/local/lib/tcl8.6 /usr/lib/tcl8.6 \
  97. /usr/local/lib/tcl8.5 /usr/lib/tcl8.5 \
  98. /usr/local/lib/tcl8.4 /usr/lib/tcl8.4 \
  99. /usr/local/lib/tcl8.3 /usr/lib/tcl8.3 \
  100. /usr/local/pkgs/tcl/lib /sys/lib /usr/pkg/lib \
  101. /usr/i486-linuxaout/lib /beos/system/lib $HOME"
  102. # Tcl header filenames and search paths.
  103. tclheadernames="tcl.h"
  104. tclheaderpaths="$HOME/include $HOME/tcl/include \
  105. /usr/local/include /usr/include \
  106. /usr/local/include/tcl8.6 /usr/include/tcl8.6 \
  107. /usr/local/include/tcl8.5 /usr/include/tcl8.5 \
  108. /usr/local/include/tcl8.4 /usr/include/tcl8.4 \
  109. /usr/local/include/tcl8.3 /usr/include/tcl8.3 \
  110. /usr/local/pkgs/tcl/include /sys/include \
  111. /usr/pkg/lib /beos/system/include /beos/devel/include $HOME"
  112. # Misc Tcl checks.
  113. EGG_TCL_OPTIONS
  114. EGG_TCL_ENV
  115. EGG_TCL_WITH_TCLLIB
  116. EGG_TCL_WITH_TCLINC
  117. EGG_TCL_FIND_LIBRARY
  118. EGG_TCL_FIND_HEADER
  119. EGG_TCL_CHECK_LIBRARY
  120. EGG_TCL_CHECK_HEADER
  121. EGG_TCL_DETECT_CHANGE
  122. EGG_TCL_CHECK_VERSION
  123. EGG_TCL_CHECK_PRE70
  124. EGG_TCL_TESTLIBS
  125. EGG_TCL_CHECK_FREE
  126. #EGG_TCL_CHECK_GETCURRENTTHREAD
  127. #EGG_TCL_CHECK_GETTHREADDATA
  128. EGG_TCL_CHECK_SETNOTIFIER
  129. EGG_TCL_LIB_REQS
  130. AC_CACHE_SAVE
  131. #AC_SUBST(ZLIB)dnl
  132. # Checks for typedefs, structures, and compiler characteristics
  133. AC_TYPE_PID_T
  134. AC_TYPE_SIZE_T
  135. AC_TYPE_UID_T
  136. #AC_C_CONST
  137. AC_C_VOLATILE
  138. AC_C_BIGENDIAN(AC_DEFINE(B_ENDIAN, 1, [big endian]),AC_DEFINE(L_ENDIAN, 1, [little endian]))
  139. #AC_C_INLINE
  140. AC_C_CHAR_UNSIGNED
  141. #AC_C_STRINGIZE
  142. #AC_C_PROTOTYPES
  143. #checkpoint
  144. AC_CACHE_SAVE
  145. # Checks for typedefs, structures, and compiler characteristics
  146. AC_TYPE_PID_T
  147. AC_TYPE_SIZE_T
  148. AC_TYPE_UID_T
  149. AC_TYPE_LONG_LONG_INT
  150. AC_TYPE_INT8_T
  151. AC_TYPE_UINT8_T
  152. AC_TYPE_INT16_T
  153. AC_TYPE_UINT16_T
  154. AC_TYPE_INT32_T
  155. AC_TYPE_UINT32_T
  156. AC_TYPE_INT64_T
  157. AC_TYPE_UINT64_T
  158. AC_STRUCT_TIMEZONE
  159. AC_STRUCT_TM
  160. # Checks for library functions
  161. AC_FUNC_FORK
  162. AC_FUNC_LSTAT
  163. AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK
  164. AC_FUNC_MALLOC
  165. AC_FUNC_MKTIME
  166. AC_FUNC_MMAP
  167. AC_FUNC_REALLOC
  168. AC_FUNC_STAT
  169. EGG_FUNC_TIMESPEC
  170. AC_FUNC_STRFTIME
  171. #checkpoint
  172. AC_CACHE_SAVE
  173. AC_CHECK_FUNCS([clock fsync getrusage isascii getpassphrase posix_madvise madvise])
  174. AC_CHECK_FUNCS([memcpy memmem memset random rename snprintf srandom gettime])
  175. #checkpoint
  176. AC_CACHE_SAVE
  177. AC_CHECK_FUNCS([strcasecmp strncasecmp vsnprintf inet_ntop])
  178. #autoscan suggested this....
  179. #These are recommended by autoscan, but no code supports it currently
  180. #AC_CHECK_FUNCS([alarm bzero dup2 getcwd gethostbyaddr gethostname getpass gettimeofday mbrlen
  181. #mkdir munmap realpath select setlocale socket strchr strerror strpbrk strrchr strstr strtol tzset])
  182. EGG_CHECK_FUNC_VSPRINTF
  183. EGG_CHECK_FUNC_UNAME
  184. # Make sure we have stdc headers, since we can't compile without them
  185. EGG_HEADER_STDC
  186. #checkpoint
  187. AC_CACHE_SAVE
  188. EGG_SUBST_VERSION
  189. #FIND_WRAPS
  190. EGG_SUBST_MOD_UPDIR
  191. DO_DEPS
  192. AC_CONFIG_FILES([Makefile lib/Makefile src/Makefile src/compat/Makefile src/crypto/Makefile src/mod/Makefile src/buildinfo.h])
  193. AH_TEMPLATE(HAVE_ST_MTIM, [Define to 1 if your struct stat has an st_mtim member])
  194. AH_TEMPLATE(HAVE_ST_MTIMESPEC, [Define to 1 if your struct stat has an st_mtimespec member])
  195. AH_TEMPLATE(HAVE_TIMESPEC, [Define to 1 if you have struct timespec in sys/time.h])
  196. AH_TEMPLATE(HAVE_TIMESPECSUB2, [Define to 1 if you have a timespecsub macro or function that takes two arguments (not three)])
  197. AH_BOTTOM([#include "config-sanity.h"])
  198. [
  199. GIT_REQUIRED=1
  200. if [ "$GIT_REQUIRED" = "1" ]; then
  201. if ! test -d .git; then
  202. echo ""
  203. echo ""
  204. echo "You have downloaded a GIT version of wraith."
  205. echo "Either 'git clone' from a git repository or download a source tarball"
  206. echo "A distribution version can be found at http://wraith.botpack.net/wiki/Download"
  207. echo ""
  208. echo ""
  209. exit 1
  210. fi
  211. fi
  212. ]
  213. [
  214. if test -d .git; then
  215. git submodule init
  216. git submodule update
  217. git submodule foreach --recursive git clean -fdx
  218. fi
  219. ]
  220. if [[ -f lib/bdlib/configure ]]; then
  221. AC_CONFIG_SUBDIRS([lib/bdlib])
  222. fi
  223. if [[ -n "${LIBELF_BUNDLED}" ]] && [[ -f lib/libelf/configure ]]; then
  224. AC_CONFIG_SUBDIRS([lib/libelf])
  225. fi
  226. AC_OUTPUT
  227. CXX="$CXX" CXXFLAGS="$CXXFLAGS" TCL_INCLUDES="$TCL_INCLUDES" SSL_INCLUDES="$SSL_INCLUDES" \
  228. SED="$SED" src/generate_defs.sh || exit 1