#!/bin/sh AC_INIT(.version) AC_CONFIG_HEADER(ddconfig.h:ddconfig_in.h) AC_PROG_AWK AC_MSG_CHECKING(version of the package) if test -f ${srcdir}/.version; then VERSION=`cat ${srcdir}/.version` AC_MSG_RESULT($VERSION) else VERSION="0.0.0" AC_MSG_RESULT(unknown using 0.0.0) fi VERSIONHI=`echo $VERSION|$AWK 'BEGIN {FS="."} {print $1}'` VERSIONLO=`echo $VERSION|$AWK 'BEGIN {FS="."} {print $2}'` VERSIONP=`echo $VERSION|$AWK 'BEGIN {FS="."} {print $3}'` AC_SUBST(VERSION) AC_SUBST(VERSIONHI) AC_SUBST(VERSIONLO) AC_SUBST(VERSIONP) AC_DEFINE_UNQUOTED(VERSIONSTR, "${VERSION}") AC_DEFINE_UNQUOTED(VERSIONHI, $VERSIONHI) AC_DEFINE_UNQUOTED(VERSIONLO, $VERSIONLO) AC_DEFINE_UNQUOTED(VERSIONP, $VERSIONP) # Some options #============== # *nix default: "${datadir}/sdcc/doc" AC_ARG_VAR(docdir, documentation installation directory) if test "${docdir}" = ""; then docdir="\${datadir}"/sdcc/doc fi AC_SUBST(docdir) AC_ARG_ENABLE(ucsim, [ --enable-ucsim compile ucsim frontend], if test $enable_ucsim != "no"; then enable_ucsim="yes" fi, #default enable_ucsim="no") AC_ARG_ENABLE(dlso, [ --enable-dlso compile dynamically loadable shared libraries], if test $enable_dlso != "no"; then enable_dlso="yes" fi, enable_dlso="no") AC_ARG_ENABLE(51, [ --disable-51 do not compile simulator for MCS51], if test $enable_51 != "no"; then enable_51="yes" fi, enable_51="yes") AC_ARG_ENABLE(avr, [ --disable-avr do not compile simulator for AVR], if test $enable_avr != "no"; then enable_avr="yes" fi, enable_avr="yes") AC_ARG_ENABLE(z80, [ --disable-z80 do not compile simulator for Z80], if test $enable_z80 != "no"; then enable_z80="yes" fi, enable_z80="yes") AC_ARG_ENABLE(hc08, [ --disable-hc08 do not compile simulator for hc08], if test $enable_hc08 != "no"; then enable_hc08="yes" fi, enable_hc08="yes") AC_ARG_ENABLE(xa, [ --enable-xa compile simulator for XA], if test $enable_xa != "no"; then enable_xa="yes" fi, enable_xa="no") AC_ARG_ENABLE(portmon, [ --enable-serio compile serio GUI tool (needs curses)], if test $enable_serio != "no"; then enable_serio="yes" fi, enable_serio="no") AC_SUBST(enable_ucsim) AC_SUBST(enable_dlso) AC_SUBST(enable_51) AC_SUBST(enable_avr) AC_SUBST(enable_z80) AC_SUBST(enable_hc08) AC_SUBST(enable_xa) AC_SUBST(enable_serio) AC_ARG_ENABLE(statistic, [ --enable-statistic compile statistical features (slower simulation)], if test $enable_statistic != "no"; then enable_statistic="yes" fi, enable_statistic="no") AC_DEFINE_UNQUOTED(STATISTIC, $enable_statistic) # Required programs #------------------- AC_PROG_CXX AC_PROG_CXXCPP AC_PROG_INSTALL AC_PROG_RANLIB dnl AC_LANG_CPLUSPLUS AC_CHECK_PROG(STRIP, strip, strip, :) AC_LIBTOOL_DLOPEN dnl AC_LIBTOOL_WIN32_DLL AC_PROG_LIBTOOL AC_SUBST(LIBTOOL_DEPS) AC_PROG_LEX if test ${LEX} = "flex"; then AC_DEFINE(HAVE_FLEX) fi AC_PROG_YACC AC_CHECK_PROG(BISON_PLUS_PLUS, bison++, bison++, :) AC_LANG_CPLUSPLUS # Checking for header files. # =========================================================================== if test -d /stuff/include; then CPPFLAGS="$CPPFLAGS -I/stuff/include" fi AC_HEADER_STDC AC_CHECK_HEADERS(getopt.h) AC_CHECK_HEADERS(unistd.h) AC_CHECK_HEADER(termios.h, AC_DEFINE(HAVE_TERMIOS_H) SERIAL_AVAIL=1, SERIAL_AVAIL=0 ) AC_SUBST(SERIAL_AVAIL) AC_CHECK_HEADER(curses.h, AC_DEFINE(HAVE_CURSES_H) curses_h_ok=yes, curses_h_ok=no ) ucsim_cv_socket="unknown" AC_CHECK_HEADER(sys/socket.h, AC_DEFINE(HAVE_SYS_SOCKET_H) AC_DEFINE(SOCKET_AVAIL) AC_DEFINE_UNQUOTED(UCSOCKET_T, int) ucsim_cv_socket="" ) if test $ucsim_cv_socket = unknown; then AC_CHECK_HEADER(winsock2.h, AC_DEFINE(HAVE_WINSOCK2_H) AC_DEFINE(SOCKET_AVAIL) AC_DEFINE_UNQUOTED(UCSOCKET_T, SOCKET) ucsim_cv_socket="" ) fi if test $ucsim_cv_socket != unknown; then AC_EGREP_HEADER(socklen_t, $ucsim_cv_socket, AC_DEFINE_UNQUOTED(SOCKLEN_T, socklen_t), AC_DEFINE_UNQUOTED(SOCKLEN_T, uint)) fi AC_DEFINE_UNQUOTED(HEADER_SOCKET, ${ucsim_cv_socket}) AC_CHECK_HEADER(dlfcn.h) AC_HEADER_DIRENT # This must be after CXXCPP AC_CACHE_CHECK(which header file defines FD_ macros, ucsim_cv_fd, [ucsim_cv_fd="unknown" AC_EGREP_CPP(yes, [ #include #ifdef FD_ZERO yes #endif], ucsim_cv_fd="") AC_EGREP_CPP(yes, [ #include #ifdef FD_ZERO yes #endif], ucsim_cv_fd="") AC_EGREP_CPP(yes, [ #include #ifdef FD_ZERO yes #endif], ucsim_cv_fd="") AC_EGREP_CPP(yes, [ #include #ifdef FD_ZERO yes #endif], ucsim_cv_fd="")]) ucsim_cv_header_ok=0 if echo $ucsim_cv_fd|grep time >/dev/null 2>&1; then AC_DEFINE(FD_NEED_TIME_H, 1) ucsim_cv_header_ok=1 else AC_DEFINE(FD_NEED_TIME_H, 0) fi if echo $ucsim_cv_fd|grep types >/dev/null 2>&1; then AC_DEFINE(FD_NEED_TYPES_H, 1) ucsim_cv_header_ok=1 else AC_DEFINE(FD_NEED_TYPES_H, 0) fi if echo $ucsim_cv_fd|grep select >/dev/null 2>&1; then AC_DEFINE(FD_NEED_SELECT_H, 1) ucsim_cv_header_ok=1 else AC_DEFINE(FD_NEED_SELECT_H, 0) fi if echo $ucsim_cv_fd|grep winsock2 >/dev/null 2>&1; then AC_DEFINE(FD_NEED_WINSOCK2_H, 1) ucsim_cv_header_ok=1 else AC_DEFINE(FD_NEED_WINSOCK2_H, 0) fi AC_DEFINE_UNQUOTED(FD_HEADER_OK, ${ucsim_cv_header_ok}) AC_DEFINE_UNQUOTED(HEADER_FD, ${ucsim_cv_fd}) # Checking for functions/libs # =========================================================================== if echo $ucsim_cv_socket|grep winsock2 >/dev/null 2>&1; then LIBS="-lwsock32 $LIBS" else AC_CHECK_LIB(socket,socket) AC_CHECK_LIB(nsl,xdr_short) fi AC_CHECK_LIB(dl,dlopen, dl_ok="yes" DL="-ldl", dl_ok="no" DL="") AC_SUBST(dl_ok) AC_SUBST(DL) #AC_CHECK_LIB(panel,panel_above, #panel_ok="yes" #curses_ok="yes" #CURSES_LIBS="-lpanel -lcurses" #, #panel_ok="no" #AC_CHECK_LIB(curses,nl, #curses_ok="yes" #CURSES_LIBS="-lcurses" #, #curses_ok="no") #, #-lcurses) if test $curses_h_ok != yes; then panel_ok="no" curses_ok="no" else AC_CHECK_LIB(panel,panel_above, panel_ok="yes" curses_ok="yes" CURSES_LIBS="-lpanel", panel_ok="no" curses_ok="no" ) if test $curses_ok != yes; then AC_CHECK_LIB(curses,nl, curses_ok="yes" CURSES_LIBS="-lcurses", curses_ok="no") fi if test $curses_ok != yes; then AC_CHECK_LIB(ncurses,nl, curses_ok="yes" CURSES_LIBS="-lncurses", curses_ok="no") fi fi AC_SUBST(panel_ok) AC_SUBST(curses_ok) AC_SUBST(CURSES_LIBS) AC_FUNC_VPRINTF AC_CHECK_FUNCS(vsnprintf) AC_CHECK_FUNCS(vasprintf) AC_CHECK_FUNCS(strlen strcpy strcat strstr strcmp strerror strtok strdup) AC_CHECK_FUNCS(strchr memcpy) dnl AC_CHECK_FUNCS(getline) dnl AC_CHECK_FUNCS(getdelim) AC_CHECK_FUNCS(fgets) AC_CHECK_FUNCS(yylex) AC_CACHE_CHECK(whether scanf knows %a, ucsim_cv_scanf_a, [echo "a b" >conftest.data AC_TRY_RUN([ #include void main(void) { FILE *f; char *a; int i; if ((f= fopen("conftest.data", "r")) == NULL) exit(1); i= fscanf(f, " %a[a-z] ", &a); fclose(f); if (i == 0) exit(2); if (i == 1) exit(0); exit(3); }], ucsim_cv_scanf_a="yes", ucsim_cv_scanf_a="no", ucsim_cv_scanf_a="unknown") ]) if test "$ucsim_cv_scanf_a" = "yes"; then AC_DEFINE(SCANF_A) fi AC_CACHE_CHECK(whether getcwd is GNUish, ucsim_cv_getcwd, [AC_TRY_RUN([ #include void main(void) { if ((getcwd(NULL, 0)) == NULL) exit(1); exit(0); }], ucsim_cv_getcwd="yes", ucsim_cv_getcwd="no", ucsim_cv_getcwd="unknown") ]) if test "$ucsim_cv_getcwd" = "yes"; then AC_DEFINE(GNU_GETCWD) fi AC_DEFUN(ucsim_ACCEPT_LENGTH_T, [AC_CACHE_CHECK([for type of length pointer parameter of accept], ucsim_cv_accept_length_type, [ac_save_CPPFLAGS="$CPPFLAGS" ucsim_cv_accept_length_type=no for ac_val in int size_t socklen_t; do CPPFLAGS="$ac_save_CPPFLAGS -DACCEPT_SOCKLEN_T=$ac_val" AC_TRY_COMPILE([#include #include ${ucsim_cv_socket}], [struct sockaddr a; $ac_val len; accept (0, &a, &len);], [ucsim_cv_accept_length_type=$ac_val; break]) done CPPFLAGS="$ac_save_CPPFLAGS"]) if test "$ucsim_cv_accept_length_type" != no; then AC_DEFINE_UNQUOTED(ACCEPT_SOCKLEN_T, $ucsim_cv_accept_length_type, [Define to be the type of length parameter of accept (without the \*').]) fi ] ) #' ucsim_ACCEPT_LENGTH_T # Macro definitions ################### # DD_COPT macro checks if the compiler specified as the 1st parameter # supports option specified as the 2nd parameter # For example: DD_COPT(CXX, fPIC) AC_DEFUN(DD_COPT, [ AC_CACHE_CHECK(whether $$1 accepts -$2,ucsim_cv_$1$2, cat >_test_.c < int main(void) {return(0);} EOF $$1 -v -$2 -c _test_.c 1>&5 2>&5 if test "$?" = "0"; then ucsim_cv_$1$2="yes" else ucsim_cv_$1$2="no" fi rm -f _test_.* a.out) ]) # Checking characteristics of compilers and other programs # -------------------------------------------------------- # Cross compiling overrides # FIXME if test "$CC" = "i586-mingw32msvc-gcc"; then ac_cv_c_bigendian=no ac_cv_sizeof_char=1 ac_cv_sizeof_short=2 ac_cv_sizeof_int=4 ac_cv_sizeof_long=4 ac_cv_sizeof_long_long=4 fi if test "$cross_compiling" = "no" then AC_C_BIGENDIAN else #echo "CROSS ENDIAN" if $CXX -v 2>&1|grep "mingw" >/dev/null 2>&1; then ac_cv_c_bigendian=no else : # FIXME fi #echo "CROSS ENDIAN DONE" fi AC_CACHE_CHECK(whether preprocessor accepts -MM or -M,ucsim_cv_MM, echo "#include " >_test_.c echo "" >>_test_.c $CXXCPP -v -MM _test_.c 1>&5 2>&5 if test "$?" = "0"; then ucsim_cv_MM="-MM" else ucsim_cv_MM="-M" fi rm -f _test_.*) M_OR_MM=$ucsim_cv_MM AC_SUBST(M_OR_MM) # This is the first time when CFLAGS are set/modified!! DD_COPT(CXX, ggdb) DD_COPT(CXX, gstabs) if test "$ucsim_cv_CXXgstabs" = "yes"; then gopt="-gstabs+ -g3" elif test "$ucsim_cv_CXXggdb" = "yes"; then gopt="-ggdb -g3" else gopt="-g" fi if test "$CXXFLAGS"x = x ;then CXXFLAGS="$gopt" else CXXFLAGS="$CXXFLAGS $gopt" fi DD_COPT(CXX, pipe) if test "$ucsim_cv_CXXpipe" = "yes"; then CXXFLAGS="$CXXFLAGS -pipe" fi PICOPT="" SHAREDLIB="no" DD_COPT(CXX, fPIC) if test "$ucsim_cv_CXXfPIC" = "yes"; then PICOPT="-fPIC" else DD_COPT(CXX, fpic) if test "$ucsim_cv_CXXfpic" = "yes"; then PICOPT="-fpic" fi fi if test "$PICOPT"x != "x"; then SHAREDLIB="yes" fi # If this is Cygwin neither use Position Independant Code # nor build .so # Quick + dirty by Bernhard # FIXME if $CXX --version 2>&1 | grep -i cygming 1>&5 2>&5 || $CXX --version 2>&1 | grep -i cygwin 1>&5 2>&5; then PICOPT="" SHAREDLIB="no" fi AC_SUBST(SHAREDLIB) AC_SUBST(PICOPT) dlso_ok="no" if test $SHAREDLIB = "yes" -a $dl_ok = "yes" -a $enable_dlso = "yes"; then dlso_ok="yes" fi AC_SUBST(dlso_ok) # Checks for typedefs, structures, and compiler characteristics. # =========================================================================== AC_TYPE_SIGNAL if test "$cross_compiling" = "no"; then AC_CHECK_SIZEOF(char) AC_CHECK_SIZEOF(short) AC_CHECK_SIZEOF(int) AC_CHECK_SIZEOF(long) AC_CHECK_SIZEOF(long long) else if $CXX -v 2>&1|grep "mingw" >/dev/null 2>&1; then ac_cv_sizeof_char=1 ac_cv_sizeof_short=2 ac_cv_sizeof_int=4 ac_cv_sizeof_long=4 ac_cv_sizeof_long_long=4 else : # FIXME fi #echo fi type_name() { if expr "$ac_cv_sizeof_char" '>=' "$1" >/dev/null; then echo "char" exit fi if expr "$ac_cv_sizeof_short" '>=' "$1" >/dev/null; then echo "short" exit fi if expr "$ac_cv_sizeof_int" '>=' "$1" >/dev/null; then echo "int" exit fi if expr "$ac_cv_sizeof_long" '>=' "$1" >/dev/null; then echo "long" exit fi if expr "$ac_cv_sizeof_long_long" '>=' "$1" >/dev/null; then echo "long long" exit fi echo "long long" } AC_MSG_CHECKING(type name for byte) TYPE_BYTE=`type_name 1` AC_MSG_RESULT($TYPE_BYTE) AC_MSG_CHECKING(type name for word) TYPE_WORD=`type_name 2` AC_MSG_RESULT($TYPE_WORD) AC_MSG_CHECKING(type name for dword) TYPE_DWORD=`type_name 4` AC_MSG_RESULT($TYPE_DWORD) AC_DEFINE_UNQUOTED(TYPE_BYTE, $TYPE_BYTE) AC_DEFINE_UNQUOTED(TYPE_WORD, $TYPE_WORD) AC_DEFINE_UNQUOTED(TYPE_DWORD, $TYPE_DWORD) if echo $TYPE_DWORD|grep short >/dev/null; then A="h" elif echo $TYPE_DWORD|grep long >/dev/null; then A="l" else A="" fi if echo $TYPE_WORD|grep short >/dev/null; then M="h" elif echo $TYPE_WORD|grep long >/dev/null; then M="l" else M="" fi AC_DEFINE_UNQUOTED(_A_, "${A}") AC_DEFINE_UNQUOTED(_M_, "${M}") # Generating output files # =========================================================================== AC_OUTPUT(Makefile main.mk:main_in.mk packages.mk:packages_in.mk sim.src/Makefile cmd.src/Makefile s51.src/Makefile avr.src/Makefile z80.src/Makefile hc08.src/Makefile xa.src/Makefile gui.src/Makefile gui.src/serio.src/Makefile doc/Makefile ) #gui.src/portmon.src/Makefile # End of configure/configure.in