configure.ac 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295
  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([clang++80 clang++70 clang++60 clang++50 clang++40 clang++39 clang++38 clang++37 clang++36 clang++35 clang++34 g++8 g++7 g++6 g++5 clang++ eg++ g++ c++ CC cxx cc++])
  17. CC="${CXX} -x c"
  18. AC_SUBST(CC)
  19. AC_REQUIRE_CPP
  20. AX_CXX_COMPILE_STDCXX_11([noext], [mandatory])
  21. EGG_CHECK_CC
  22. #CXX_RPATH_CHECK
  23. #checkpoint
  24. AC_CACHE_SAVE
  25. # Speedup compile
  26. EGG_CHECK_CCWALL
  27. EGG_CHECK_CCPIPE
  28. CXX_FLAG_CHECK([CXXFLAGS], [-fcolor-diagnostics], [colordiagnostics])
  29. #CXX_FLAG_CHECK([CXXFLAGS], [-Qunused-arguments], [unusedarguments])
  30. CXX_FLAG_CHECK_NO([CXXFLAGS], [-Winvalid-source-encoding], [-Wno-invalid-source-encoding], [invalid_source_encoding])
  31. CXX_FLAG_CHECK_NO([CXXFLAGS], [-Wnarrowing], [-Wno-narrowing], [nonarrowing])
  32. CXX_FLAG_CHECK_NO([CXXFLAGS], [-Wcast-function-type], [-Wno-cast-function-type], [no_cast_function_type])
  33. CXX_FLAG_CHECK([CXXFLAGS], [-Wimplicit-fallthrough=0], [wimplicit_fallthrough])
  34. CXX_FLAG_CHECK([CXXFLAGS], [-fstack-protector], [stackprotector])
  35. CXX_FLAG_CHECK([CXXFLAGS], [-fstack-protector-strong], [stackprotectorstrong])
  36. if [[ "${ax_cv_prog_cc_stackprotectorstrong}" = "yes" ]]; then
  37. LDFLAGS="${LDFLAGS} -fstack-protector-strong"
  38. elif [[ "${ax_cv_prog_cc_stackprotector}" = "yes" ]]; then
  39. LDFLAGS="${LDFLAGS} -fstack-protector"
  40. fi
  41. CXX_FLAG_CHECK([DEBCXXFLAGS], [-Og], [Og])
  42. if [[ "${ax_cv_prog_cc_Og}" = "no" ]]; then
  43. DEBCXXFLAGS="${DEBCXXFLAGS} -O0"
  44. fi
  45. CXX_FLAG_CHECK_LINK([DEBCXXFLAGS], [-fsanitize=address], [fsanitize_address])
  46. if [[ "${ax_cv_prog_cc_fsanitize_address}" = "yes" ]]; then
  47. DEBLDFLAGS="${DEBLDFLAGS} -fsanitize=address"
  48. DEBCXXFLAGS="${DEBCXXFLAGS} -D__SANITIZE_ADDRESS__"
  49. fi
  50. CXX_FLAG_CHECK([DEBCXXFLAGS], [-fstack-protector-all], [stackprotectorall])
  51. CXX_FLAG_CHECK([DEBCXXFLAGS], [-Wsuggest-attribute=pure -Wsuggest-attribute=const], [wsuggest_attribute])
  52. CXX_FLAG_CHECK([DEBCXXFLAGS], [-Wconditional-uninitialized], [w_conditional_uninitialized])
  53. CXX_FLAG_CHECK([LDFLAGS], [-static-libstdc++], [static_libstdcxx])
  54. #CXX_FLAG_CHECK([LDFLAGS], [-static-libgcc], [static_libgcc])
  55. if [[ "${ax_cv_prog_cc_static_libstdcxx}" = "yes" ]]; then
  56. AC_MSG_CHECKING([for static libstdc++])
  57. AC_TRY_LINK([], [], [AC_MSG_RESULT(OK)],
  58. [
  59. AC_MSG_RESULT([not found.])
  60. AC_MSG_ERROR([Static libstdc++ is rquired to build.], 1)
  61. ]
  62. )
  63. fi
  64. EGG_CHECK_DEPMODE
  65. #checkpoint
  66. AC_CACHE_SAVE
  67. # Checks for programs
  68. AC_PROG_MAKE_SET
  69. AC_PROG_SED
  70. EGG_PROG_HEAD_1
  71. EGG_PROG_AWK
  72. EGG_PROG_BASENAME
  73. AC_CHECK_PROG(OBJCOPY, objcopy, [objcopy --remove-section=.note --remove-section=.comment], touch)
  74. AC_CHECK_PROG(STRIP, strip, strip, touch)
  75. AC_CHECK_PROG(DIFF, gdiff, gdiff, diff)
  76. AC_CHECK_PROG(UNAME, uname, uname)
  77. # Test the os and set the module linking settings
  78. EGG_CHECK_OS
  79. # Check for IPv6 support
  80. #EGG_IPV6_SUPPORTED
  81. EGG_IPV6_OPTIONS
  82. EGG_CHECK_SOCKLEN_T
  83. # Check for inconsistent random() functions
  84. EGG_CHECK_RANDOM_MAX
  85. # Create static binaries
  86. EGG_CHECK_CCSTATIC
  87. AC_SUBST(DEBCXXFLAGS)
  88. AC_SUBST(DEBLDFLAGS)
  89. #checkpoint
  90. AC_CACHE_SAVE
  91. # Checks for system libraries
  92. EGG_CHECK_LIBS
  93. CHECK_LIBELF
  94. # Checks for header files
  95. AC_HEADER_DIRENT
  96. AC_HEADER_SYS_WAIT
  97. AC_HEADER_TIME
  98. AC_HEADER_STAT
  99. #checkpoint
  100. AC_CACHE_SAVE
  101. AC_CHECK_HEADERS([stdarg.h arpa/inet.h fcntl.h limits.h locale.h netdb.h netinet/in.h])
  102. AC_CHECK_HEADERS([sys/file.h sys/ioctl.h sys/param.h sys/socket.h wchar.h])
  103. AC_CHECK_HEADERS([sys/ptrace.h paths.h sys/prctl.h sys/procctl.h])
  104. #checkpoint
  105. AC_CACHE_SAVE
  106. #AC_CHECK_HEADERS(openssl/ssl.h openssl/crypto.h)
  107. #AC_CHECK_HEADERS(zlib.h)
  108. CHECK_SSL
  109. # TCL checks
  110. # Tcl version to recommend if no Tcl is found, and the site where it can be
  111. # found for download.
  112. tclrecommendver="8.5.X"
  113. tclrecommendsite="ftp://tcl.activestate.com/pub/tcl/tcl8_5/"
  114. # Tcl library filename prefixes, suffixes, and search paths.
  115. tcllibnames="tcl8.6 tcl86 tcl8.5 tcl85 tcl8.4 tcl84 tcl8.3 tcl83 tcl8.2 tcl82 \
  116. tcl8.1 tcl81 tcl8.0 tcl80 tcl tcl7.6 tcl76 tcl7.5 tcl75 \
  117. tcl7.4 tcl74 tcl7.3 tcl73 tcl7.2 tcl72 tcl7.1 tcl71 \
  118. tcl7.0 tcl70"
  119. tcllibextensions=".so .so.1 .so.1.0 .so.1.1 .so.1.2 .dll .dylib .sl .a"
  120. tcllibpaths="$HOME/lib $HOME/tcl/lib \
  121. /usr/local/lib /usr/lib /lib /lib64 /usr/lib64 \
  122. /usr/local/lib/tcl8.6 /usr/lib/tcl8.6 \
  123. /usr/local/lib/tcl8.5 /usr/lib/tcl8.5 \
  124. /usr/local/lib/tcl8.4 /usr/lib/tcl8.4 \
  125. /usr/local/lib/tcl8.3 /usr/lib/tcl8.3 \
  126. /usr/local/pkgs/tcl/lib /sys/lib /usr/pkg/lib \
  127. /usr/i486-linuxaout/lib /beos/system/lib $HOME"
  128. # Tcl header filenames and search paths.
  129. tclheadernames="tcl.h"
  130. tclheaderpaths="$HOME/include $HOME/tcl/include \
  131. /usr/local/include /usr/include \
  132. /usr/local/include/tcl8.6 /usr/include/tcl8.6 \
  133. /usr/local/include/tcl8.5 /usr/include/tcl8.5 \
  134. /usr/local/include/tcl8.4 /usr/include/tcl8.4 \
  135. /usr/local/include/tcl8.3 /usr/include/tcl8.3 \
  136. /usr/local/pkgs/tcl/include /sys/include \
  137. /usr/pkg/lib /beos/system/include /beos/devel/include $HOME"
  138. # Misc Tcl checks.
  139. EGG_TCL_OPTIONS
  140. EGG_TCL_ENV
  141. EGG_TCL_WITH_TCLLIB
  142. EGG_TCL_WITH_TCLINC
  143. EGG_TCL_FIND_LIBRARY
  144. EGG_TCL_FIND_HEADER
  145. EGG_TCL_CHECK_LIBRARY
  146. EGG_TCL_CHECK_HEADER
  147. EGG_TCL_DETECT_CHANGE
  148. EGG_TCL_CHECK_VERSION
  149. EGG_TCL_CHECK_PRE70
  150. EGG_TCL_TESTLIBS
  151. EGG_TCL_CHECK_FREE
  152. #EGG_TCL_CHECK_GETCURRENTTHREAD
  153. #EGG_TCL_CHECK_GETTHREADDATA
  154. EGG_TCL_CHECK_SETNOTIFIER
  155. EGG_TCL_LIB_REQS
  156. AC_CACHE_SAVE
  157. # Checks for typedefs, structures, and compiler characteristics
  158. AC_TYPE_PID_T
  159. AC_TYPE_SIZE_T
  160. AC_TYPE_UID_T
  161. #AC_C_CONST
  162. AC_C_VOLATILE
  163. AC_C_BIGENDIAN(AC_DEFINE(B_ENDIAN, 1, [big endian]),AC_DEFINE(L_ENDIAN, 1, [little endian]))
  164. #AC_C_INLINE
  165. AC_C_CHAR_UNSIGNED
  166. #AC_C_STRINGIZE
  167. #AC_C_PROTOTYPES
  168. #checkpoint
  169. AC_CACHE_SAVE
  170. # Checks for typedefs, structures, and compiler characteristics
  171. AC_TYPE_PID_T
  172. AC_TYPE_SIZE_T
  173. AC_TYPE_UID_T
  174. AC_TYPE_LONG_LONG_INT
  175. AC_TYPE_INT8_T
  176. AC_TYPE_UINT8_T
  177. AC_TYPE_INT16_T
  178. AC_TYPE_UINT16_T
  179. AC_TYPE_INT32_T
  180. AC_TYPE_UINT32_T
  181. AC_TYPE_INT64_T
  182. AC_TYPE_UINT64_T
  183. AC_STRUCT_TIMEZONE
  184. AC_STRUCT_TM
  185. # Checks for library functions
  186. AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK
  187. AC_FUNC_MMAP
  188. EGG_FUNC_TIMESPEC
  189. #checkpoint
  190. AC_CACHE_SAVE
  191. AC_CHECK_FUNCS([getrusage getpassphrase posix_madvise madvise])
  192. AC_CHECK_FUNCS([memmem random snprintf srandom gettime])
  193. #checkpoint
  194. AC_CACHE_SAVE
  195. AC_CHECK_FUNCS([vsnprintf prctl procctl closefrom])
  196. #autoscan suggested this....
  197. #These are recommended by autoscan, but no code supports it currently
  198. #AC_CHECK_FUNCS([alarm bzero dup2 getcwd gethostbyaddr gethostname getpass gettimeofday mbrlen
  199. #mkdir munmap realpath select setlocale socket strchr strerror strpbrk strrchr strstr strtol tzset])
  200. EGG_CHECK_FUNC_VSPRINTF
  201. EGG_CHECK_FUNC_UNAME
  202. # Make sure we have stdc headers, since we can't compile without them
  203. EGG_HEADER_STDC
  204. #checkpoint
  205. AC_CACHE_SAVE
  206. EGG_SUBST_VERSION
  207. #FIND_WRAPS
  208. DO_DEPS
  209. AC_CONFIG_FILES([Makefile lib/Makefile src/Makefile src/buildinfo.h])
  210. AH_TEMPLATE(HAVE_ST_MTIM, [Define to 1 if your struct stat has an st_mtim member])
  211. AH_TEMPLATE(HAVE_ST_MTIMESPEC, [Define to 1 if your struct stat has an st_mtimespec member])
  212. AH_TEMPLATE(HAVE_TIMESPEC, [Define to 1 if you have struct timespec in sys/time.h])
  213. AH_TEMPLATE(HAVE_TIMESPECSUB2, [Define to 1 if you have a timespecsub macro or function that takes two arguments (not three)])
  214. AH_BOTTOM([#include "config-sanity.h"])
  215. [
  216. GIT_REQUIRED=1
  217. if [ "$GIT_REQUIRED" = "1" ]; then
  218. if ! test -d .git; then
  219. echo ""
  220. echo ""
  221. echo "You have downloaded a GIT version of wraith."
  222. echo "Either 'git clone' from a git repository or download a source tarball"
  223. echo "A distribution version can be found at https://github.com/wraith/wraith/wiki/Download"
  224. echo ""
  225. echo ""
  226. exit 1
  227. fi
  228. fi
  229. ]
  230. [
  231. if test -d .git; then
  232. git submodule init
  233. git submodule update
  234. git submodule foreach --recursive git clean -fdx
  235. # Restore as it may have been removed by an older 'make distclean'
  236. if ! test -f src/response.h; then
  237. git checkout src/response.h
  238. fi
  239. fi
  240. ]
  241. export CC CXX
  242. if [[ -f lib/bdlib/configure ]]; then
  243. AC_CONFIG_SUBDIRS([lib/bdlib])
  244. fi
  245. if [[ -n "${LIBELF_BUNDLED}" ]] && [[ -f lib/libelf/configure ]]; then
  246. AC_CONFIG_SUBDIRS([lib/libelf])
  247. fi
  248. AC_OUTPUT
  249. CXX="$CXX" CXXFLAGS="$CXXFLAGS" TCL_INCLUDES="$TCL_INCLUDES" SSL_INCLUDES="$SSL_INCLUDES" \
  250. SED="$SED" src/generate_defs.sh || exit 1