1# Copyright (C) 2008, Bertrand Mesot <http://www.objectif-securite.ch>
2#	 	2008, Cedric Tissieres <http://www.objectif-securite.ch>
3#
4# This program is free software; you can redistribute it and/or modify
5# it under the terms of the GNU General Public License as published by
6# the Free Software Foundation; either version 2 of the License, or
7# or (at your option) any later version.
8#
9# This program is distributed in the hope that it will be useful,
10# but WITHOUT ANY WARRANTY; without even the implied warranty of
11# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12# GNU General Public License for more details.
13#
14# You should have received a copy of the GNU General Public License
15# along with this program; if not, write to the Free Software
16# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-13, USA
17
18
19#                                               -*- Autoconf -*-
20# Process this file with autoconf to produce a configure script.
21
22AC_PREREQ(2.62)
23AC_INIT(ophcrack, 3.8.0, http://ophcrack.sf.net)
24AC_CONFIG_SRCDIR([src])
25AC_CONFIG_HEADER([config.h])
26
27AC_SUBST(MAJOR,[3])
28AC_SUBST(MINOR,[8])
29AC_SUBST(MAINT,[0])
30
31m4_include([config/ax_path_qmake5.m4])
32m4_include([config/check_qtcharts.m4])
33m4_include([config/check_ssl.m4])
34
35# Check host and system types
36AC_CANONICAL_HOST
37
38# Checks for programs.
39AC_PROG_CXX
40AC_PROG_CC
41
42AC_ARG_ENABLE(debug,
43	      [AS_HELP_STRING([--enable-debug],
44			      [Enable debugging])],
45			      ,
46			      [enable_debug=no])
47
48AC_MSG_CHECKING(if debugging is enabled)
49if test "x$enable_debug" = "xyes"; then
50	AC_MSG_RESULT(yes)
51	AM_CONDITIONAL(HAVE_DEBUG, true)
52	AC_DEFINE_UNQUOTED([DEBUG], 1, [DEBUG is enabled])
53	CFLAGS="-g"
54	CXXFLAGS="-g"
55else
56	AC_MSG_RESULT(no)
57	AM_CONDITIONAL(HAVE_DEBUG, false)
58	if test "$GCC" = "yes"; then
59	   CFLAGS="$CFLAGS -DNDEBUG"
60	   CXXFLAGS="$CXXFLAGS -DNDEBUG"
61	else
62	   CFLAGS="$CFLAGS -DNDEBUG"
63           CXXFLAGS="$CXXFLAGS -DNDEBUG"
64	fi
65
66fi
67
68AC_PROG_INSTALL
69AC_PROG_LN_S
70AC_PROG_MAKE_SET
71AC_PROG_RANLIB
72
73if test "$GCC" = "yes"; then
74   CFLAGS="$CFLAGS -Wall -std=gnu9x -pedantic -I.."
75   CXXFLAGS="$CXXFLAGS -Wall -pedantic -fpermissive -Wno-long-long -I../.."
76fi
77CFLAGS="$CFLAGS -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -I.."
78CXXFLAGS="$CXXFLAGS -I../.."
79
80# Mac OS X, WIN32 and Solaris related
81AC_MSG_CHECKING(for Mac OS X or WIN32 or Solaris)
82case "${host_os}" in
83   *darwin* )
84      AC_MSG_RESULT(Mac OS X detected)
85      AM_CONDITIONAL(HAVE_OSX, true)
86      AM_CONDITIONAL(HAVE_WIN32, false)
87      CFLAGS="$CFLAGS -DOSX"
88      CXXFLAGS="$CXXFLAGS -DOSX"
89      QMAKE_ARG="-macx -spec macx-g++"
90      ;;
91   *mingw* )
92      AC_MSG_RESULT(WIN32 detected)
93      enable_win32=yes
94      AM_CONDITIONAL(HAVE_WIN32, true)
95      AM_CONDITIONAL(HAVE_OSX, false)
96      CFLAGS="$CFLAGS -DWIN32"
97      CXXFLAGS="$CXXFLAGS -DWIN32"
98      LIBS_END="$LIBS_END -lwsock32 -lregex -lntdll -lmman"
99      QMAKE_ARG=""
100      ;;
101   *solaris* | *sun*)
102      AC_MSG_RESULT(Solaris detected)
103      AM_CONDITIONAL(HAVE_OSX, false)
104      AM_CONDITIONAL(HAVE_WIN32, false)
105      LIBS="$LIBS -lkstat -lrt"
106      ;;
107   * )
108      AC_MSG_RESULT(no)
109      AM_CONDITIONAL(HAVE_OSX, false)
110      AM_CONDITIONAL(HAVE_WIN32, false)
111      ;;
112esac
113
114# Check for big or little endian
115AC_C_BIGENDIAN(
116   [ac_c_bigendian=yes],
117   [ac_c_bigendian=no],
118   [AC_COMPILE_IFELSE(
119      [AC_LANG_PROGRAM(
120         [[typedef unsigned char uchar_t;
121	   typedef unsigned short int uint16_t;]],
122         [[uchar_t x[2] = { 0x00, 0xff };
123           uint16_t y = *(uint16_t*)x;
124
125	   if (y & x[1])
126     	      return 0;
127	   else
128	     return 1;]])],
129
130      [ac_c_bigendian=yes],
131      [ac_c_bigendian=no]
132   )]
133)
134
135if test $ac_c_bigendian = yes; then
136   AC_DEFINE([WORDS_BIGENDIAN], 1,
137             [Define WORDS_BIGENDIAN to 1 if your processor stores words with the most
138              significant byte first])
139fi
140
141# Checks for libraries.
142with_pthread=no
143AC_ARG_WITH(libpthread, AC_HELP_STRING(--with-libpthread=DIR,use libpthread in DIR),
144[ AC_MSG_CHECKING(for libpthread)
145  case "$withval" in
146  no)
147     AC_MSG_RESULT(no)
148     ;;
149  *)
150     AC_MSG_RESULT(yes)
151     with_pthread=$withval
152     if test "x$enable_win32" = "xyes"; then
153     	CFLAGS="$CFLAGS -I$with_pthread"
154     	CXXFLAGS="$CXXFLAGS -I$with_pthread"
155     	LIBS="$LIBS -L$with_pthread"
156	LIBS_END="$LIBS_END -lpthreadGC2"
157     else
158	CFLAGS="$CFLAGS -I$with_pthread/include"
159	CXXFLAGS="$CXXFLAGS -I$with_pthread/include"
160	LIBS="$LIBS -L$with_pthread/lib -lpthread"
161     fi
162     ;;
163  esac ]
164)
165
166if test "x$with_pthread" = "xno"; then
167   AC_CHECK_LIB([pthread], [pthread_mutex_init], [], [AC_MSG_ERROR([ophcrack requires libpthread.])])
168fi
169
170
171AC_MSG_CHECKING(for libssl)
172with_ssl=no
173AC_ARG_WITH(libssl, AC_HELP_STRING(--with-libssl=DIR,use libssl in DIR),
174[ case "$withval" in
175  no)
176     AC_MSG_RESULT(no)
177     ;;
178  *)
179     AC_MSG_RESULT(yes)
180     with_ssl=$withval
181     CFLAGS="$CFLAGS -I$with_ssl/include"
182     CXXFLAGS="$CXXFLAGS -I$with_ssl/include"
183	   LIBS="$LIBS -L$with_ssl/lib -lssl -lcrypto"
184     ;;
185  esac ]
186)
187
188if test "x$with_ssl" = "xno"; then
189   CHECK_SSL
190fi
191
192with_expat=no
193AC_ARG_WITH(libexpat, AC_HELP_STRING(--with-libexpat=DIR,use libexpat in DIR),
194[ AC_MSG_CHECKING(for libexpat)
195  case "$withval" in
196  no)
197     AC_MSG_RESULT(no)
198     ;;
199  *)
200     AC_MSG_RESULT(yes)
201     with_expat=$withval
202     if test "x$enable_win32" = "xyes"; then
203     	CFLAGS="$CFLAGS -I$with_expat/lib"
204     	CXXFLAGS="$CXXFLAGS -I$with_expat/lib"
205     	LIBS="$LIBS -L$with_expat"
206	LIBS_END="$LIBS_END -lexpat"
207     else
208	CFLAGS="$CFLAGS -I$with_expat/include"
209	CXXFLAGS="$CXXFLAGS -I$with_expat/include"
210	LIBS="$LIBS -L$with_expat/lib -lexpat"
211     fi
212     ;;
213  esac ]
214)
215
216if test "x$with_expat" = "xno"; then
217   AC_CHECK_LIB([expat], [XML_ParserCreate], [], [AC_MSG_ERROR([ophcrack requires libexpat.])])
218fi
219
220AC_CHECK_LIB([m], [sqrt], [], [AC_MSG_ERROR([ophcrack requires libmath.])])
221
222# Checks for header files.
223AC_HEADER_STDC
224AC_CHECK_HEADERS([netinet/in.h stdint.h stdlib.h string.h sys/param.h sys/time.h unistd.h sys/sysinfo.h sys/sysctl.h byteswap.h libkern/OSByteOrder.h])
225
226# Checks for typedefs, structures, and compiler characteristics.
227AC_HEADER_STDBOOL
228AC_C_CONST
229AC_TYPE_SIZE_T
230AC_HEADER_TIME
231AC_TYPE_UINT16_T
232AC_TYPE_UINT32_T
233AC_TYPE_UINT64_T
234AC_CHECK_TYPES([uchar_t, ulong_t])
235AC_CHECK_TYPES([struct sysinfo],[], [], [[#include <sys/sysinfo.h>]])
236
237
238# Sets GUI_TARGET and qt specific stuff
239AC_ARG_ENABLE(gui,
240	      [AC_HELP_STRING([--enable-gui],
241			      [Builds gui frontend (enabled by default, use
242			       --disable-gui to disable it)])],
243			      ,
244			      [enable_gui=yes])
245
246AC_MSG_CHECKING(whether we want to build ophcrack gui)
247# Check QT environment if we want GUI
248if test "x$enable_gui" = "xyes"; then
249	AC_MSG_RESULT(yes)
250
251	AX_PATH_QMAKE5
252  CHECK_QTCHARTS
253
254	AC_DEFINE_UNQUOTED([HAVE_GUI], 1, [GUI is enabled])
255	AM_CONDITIONAL(HAVE_GUI, true)
256else
257	AC_MSG_RESULT(no)
258	AM_CONDITIONAL(HAVE_GUI, false)
259fi
260
261
262
263# Dirty trick for win32 MinGW
264LIBS="$LIBS ${LIBS_END}"
265
266# Checks for library functions.
267# AC_FUNC_MALLOC
268AC_FUNC_MEMCMP
269AC_FUNC_MMAP
270AC_FUNC_SELECT_ARGTYPES
271AC_CHECK_FUNCS([floor gettimeofday memchr memset munmap regcomp select sqrt strchr strdup strndup strtoul])
272
273
274AC_CONFIG_FILES([
275  Makefile
276  src/Makefile
277  src/common.mk
278  src/core/Makefile
279  src/ntproba/Makefile
280  src/samdump2/Makefile
281  src/test/Makefile
282  src/gui/Makefile
283  src/gui/gui.pro
284  src/gui/ophcrack_win32.rc
285  src/gui/Info.plist
286])
287AC_OUTPUT
288
289echo
290echo "===================================================="
291echo "ophcrack has been successfully configured as follow"
292echo "===================================================="
293echo
294echo " Install directory: "${prefix}
295echo
296echo " GUI: "${enable_gui}
297echo " Debugging: "${enable_debug}
298echo
299echo "===================================================="
300echo
301echo "Now enter 'make' to compile"
302echo "followed by 'make install' to install"
303echo
304