win32 build fixes
This commit is contained in:
parent
25520b6097
commit
815e027b24
39
Makefile.am
39
Makefile.am
@ -3,7 +3,7 @@
|
||||
|
||||
ACLOCAL_AMFLAGS = -I m4
|
||||
|
||||
AM_CXXFLAGS = $(BOOST_CPPFLAGS) $(ZLIB_CFLAGS)
|
||||
AM_CXXFLAGS = $(BOOST_CPPFLAGS)
|
||||
AM_DEFAULT_SOURCE_EXT = .cpp
|
||||
|
||||
###############################################################################
|
||||
@ -178,22 +178,8 @@ UTIL_FILES = \
|
||||
matrix4.cpp \
|
||||
matrix.hpp \
|
||||
matrix.ipp \
|
||||
memory/buffer/circular.cpp \
|
||||
memory/buffer/circular.hpp \
|
||||
memory/buffer/paged.cpp \
|
||||
memory/buffer/paged.hpp \
|
||||
memory/deleter.cpp \
|
||||
memory/deleter.hpp \
|
||||
memory/system.cpp \
|
||||
memory/system.hpp \
|
||||
net/address.cpp \
|
||||
net/address.hpp \
|
||||
net/except.cpp \
|
||||
net/except.hpp \
|
||||
net/socket.cpp \
|
||||
net/socket.hpp \
|
||||
net/types.cpp \
|
||||
net/types.hpp \
|
||||
nocopy.hpp \
|
||||
pascal.cpp \
|
||||
pascal.hpp \
|
||||
@ -276,6 +262,20 @@ UTIL_FILES = \
|
||||
|
||||
if PLATFORM_LINUX
|
||||
UTIL_FILES += \
|
||||
net/address.cpp \
|
||||
net/address.hpp \
|
||||
net/except.cpp \
|
||||
net/except.hpp \
|
||||
net/socket.cpp \
|
||||
net/socket.hpp \
|
||||
net/types.cpp \
|
||||
net/types.hpp \
|
||||
memory/buffer/circular.cpp \
|
||||
memory/buffer/circular.hpp \
|
||||
memory/buffer/paged.cpp \
|
||||
memory/buffer/paged.hpp \
|
||||
memory/system.cpp \
|
||||
memory/system.hpp \
|
||||
debug_posix.cpp \
|
||||
io_posix.cpp \
|
||||
io_posix.hpp \
|
||||
@ -299,7 +299,7 @@ UTIL_FILES += \
|
||||
win32/registry.cpp
|
||||
endif
|
||||
|
||||
if HAVE_EXECINFO_H
|
||||
if HAVE_EXECINFO
|
||||
UTIL_FILES += backtrace_execinfo.cpp
|
||||
else
|
||||
UTIL_FILES += backtrace_null.cpp
|
||||
@ -331,7 +331,7 @@ pkgconfig_DATA = libcruft-util.pc
|
||||
###############################################################################
|
||||
## Utility programs
|
||||
|
||||
AM_LDFLAGS = $(BOOST_LDFLAGS) -lrt
|
||||
LDADD = $(top_builddir)/libcruft-util.a $(BOOST_LDFLAGS) $(LIBS)
|
||||
|
||||
bin_PROGRAMS = \
|
||||
tools/json-clean \
|
||||
@ -341,14 +341,11 @@ bin_PROGRAMS = \
|
||||
|
||||
noinst_PROGRAMS = tools/scratch
|
||||
|
||||
LDADD = $(top_builddir)/libcruft-util.a $(BOOST_FILESYSTEM_LIB) $(BOOST_SYSTEM_LIB) $(ZLIB_LIBS)
|
||||
|
||||
|
||||
##-----------------------------------------------------------------------------
|
||||
## Tests
|
||||
|
||||
AM_LDFLAGS += $(BOOST_LDFLAGS) $(BOOST_FILESYSTEM_LIB) $(BOOST_SYSTEM_LIB)
|
||||
AM_CXXFLAGS += -I$(top_srcdir) -I$(top_builddir)
|
||||
AM_CXXFLAGS += -I$(top_srcdir)
|
||||
|
||||
TEST_BIN = \
|
||||
test/alloc/arena \
|
||||
|
44
configure.ac
44
configure.ac
@ -1,4 +1,4 @@
|
||||
AC_INIT([cruft-util], [0.1.0], [danny@nerdcruft.net])
|
||||
AC_INIT([util-cruft], [0.1.0], [danny@nerdcruft.net])
|
||||
## Explicitly set an empty CXXFLAGS if not present to prevent AC_PROG_CXX from
|
||||
## generating a default -O2. This allows us to manually select -O0 when
|
||||
## debugging is enabled.
|
||||
@ -44,25 +44,30 @@ AC_C_BIGENDIAN
|
||||
## Platform features
|
||||
|
||||
AC_DEFINE([_XOPEN_SOURCE], [700], [use POSIX 2008])
|
||||
AC_DEFINE([__STDC_FORMAT_MACROS], [1], [use C format macros])
|
||||
|
||||
AC_FUNC_MMAP
|
||||
|
||||
AC_CHECK_HEADERS([execinfo.h], [break;], [have_execinfo_h=true])
|
||||
AM_CONDITIONAL([HAVE_EXECINFO_H], [test "x$have_execinfo_h" = "xtrue"])
|
||||
AC_CHECK_FUNC([backtrace])
|
||||
AM_CONDITIONAL([HAVE_EXECINFO], [test "x$ac_cv_func_backtrace" = "xtrue"])
|
||||
|
||||
AC_SEARCH_LIBS([clock_gettime], [rt], [], [
|
||||
# windows doesn't have clock_gettime
|
||||
AS_IF([test "x${host_os}" != "xmingw32"], [
|
||||
AC_MSG_ERROR([unable to find the clock library])
|
||||
])
|
||||
])
|
||||
|
||||
AC_SEARCH_LIBS([cos], [m], [], [
|
||||
AC_MSG_ERROR([unable to find the maths library])
|
||||
])
|
||||
AC_SEARCH_LIBS([cos], [m], [], [AC_MSG_ERROR([unable to find the maths library])])
|
||||
|
||||
## Use dynamic loader if present (for util::library)
|
||||
## Find some POSIX functions that windows doesn't support
|
||||
AS_IF([test "x${host_os}" != "xmingw32"],[
|
||||
AC_SEARCH_LIBS([dlopen], [dl])
|
||||
AC_SEARCH_LIBS([shm_open], [rt], [], [AC_MSG_ERROR([unable to find shm library])])
|
||||
])
|
||||
|
||||
AC_SEARCH_LIBS([htons], [ws2_32], [], [AC_MSG_ERROR([unable to find htnos library])])
|
||||
|
||||
|
||||
###############################################################################
|
||||
## Debug features
|
||||
@ -75,30 +80,13 @@ AS_IF([test "x${host_os}" != "xmingw32"],[
|
||||
|
||||
CHECK_RAGEL([ip.cpp])
|
||||
|
||||
AX_BOOST_BASE([1.53], [], [AC_MSG_ERROR([Boost version >= 1.53 required])])
|
||||
|
||||
# boost-system isn't a hard requirement, it's only really used to fulfill
|
||||
# some other dependency I've since forgotten about...
|
||||
AX_BOOST_SYSTEM
|
||||
|
||||
AX_BOOST_THREAD
|
||||
AS_IF([test "x$ax_cv_boost_thread" != "xyes"], [
|
||||
AC_MSG_ERROR("boost-thread is a hard requirement")
|
||||
])
|
||||
|
||||
AX_BOOST_FILESYSTEM
|
||||
AS_IF([test "x$ax_cv_boost_filesystem" != "xyes"], [
|
||||
AC_MSG_ERROR("boost-filesystem is a hard requirement")
|
||||
])
|
||||
|
||||
NC_BOOST([1.53], [system filesystem thread])
|
||||
AC_SUBST(BOOST_CPPFLAGS)
|
||||
AC_SUBST(BOOST_LDFLAGS)
|
||||
|
||||
###############################################################################
|
||||
## Optional packages
|
||||
|
||||
PKG_CHECK_MODULES([ZLIB], [zlib >= 1.2.0])
|
||||
AC_SUBST(ZLIB_CFLAGS)
|
||||
AC_SUBST(ZLIB_LIBS)
|
||||
|
||||
AC_CHECK_TOOL([ADDR2LINE], [addr2line], [:])
|
||||
AS_IF([test "x$ADDR2LINE" != "x:"], [
|
||||
AC_DEFINE_UNQUOTED([ADDR2LINE], ["$ADDR2LINE"], [addr2line tool name])
|
||||
@ -110,6 +98,8 @@ AS_IF([test "x$ADDR2LINE" != "x:"], [
|
||||
###############################################################################
|
||||
## Output
|
||||
|
||||
AC_SUBST(LIBS)
|
||||
|
||||
# inclusion of config.h has to go after compilation tests otherwise we risk
|
||||
# failure on a clean build
|
||||
AX_APPEND_FLAG([-include config.h])
|
||||
|
42
m4/nc_boost.m4
Normal file
42
m4/nc_boost.m4
Normal file
@ -0,0 +1,42 @@
|
||||
dnl Attempt to locate boost libraries.
|
||||
dnl
|
||||
dnl We explicitly do not use ax_boost_* macros aside from the version checks
|
||||
dnl because they are catastrophically broken for any remotely complex setup,
|
||||
dnl and I will just end up punching someone if I have to look at any more
|
||||
dnl broken M4.
|
||||
dnl
|
||||
dnl $1 version required
|
||||
dnl $2 space delimited list of components required
|
||||
dnl
|
||||
dnl sets BOOST_LDFLAGS and BOOST_CPPFLAGS
|
||||
|
||||
AC_DEFUN([NC_BOOST], [
|
||||
AC_REQUIRE([NC_BOOST_BASE])
|
||||
|
||||
for _nc_boost_lib in $2; do
|
||||
AS_CASE([$_nc_boost_lib],
|
||||
["system"], [NC_BOOST_SYSTEM],
|
||||
["thread"], [NC_BOOST_THREAD],
|
||||
["filesystem"], [NC_BOOST_FILESYSTEM],
|
||||
[AC_MSG_ERROR([unknown boost library $_nc_boost_lib])]
|
||||
)
|
||||
|
||||
dnl find what the variable name is for this package's CPPFLAGS/LIBS
|
||||
_NAME="$(echo $_nc_boost_lib | tr "[a-z]" "[A-Z]")"
|
||||
_CPPFLAGS_NAME="BOOST_${_NAME}_CPPFLAGS"
|
||||
_LDFLAGS_NAME="BOOST_${_NAME}_LDFLAGS"
|
||||
|
||||
dnl extract the aforementioned variable's values
|
||||
_CPPFLAGS="$(eval "echo \$$_CPPFLAGS_NAME")"
|
||||
_LDFLAGS="$(eval "echo \$$_LDFLAGS_NAME")"
|
||||
|
||||
dnl append flags and libs if they don't already exist
|
||||
for flag in $_CPPFLAGS; do
|
||||
[[[ ! " $BOOST_CPPFLAGS " =~ " $flag " ]]] && BOOST_CPPFLAGS="$BOOST_CPPFLAGS $flag"
|
||||
done
|
||||
|
||||
for lib in $_LDFLAGS; do
|
||||
[[[ ! " $BOOST_LDFLAGS " =~ " $lib " ]]] && BOOST_LDFLAGS="$BOOST_LDFLAGS $lib"
|
||||
done
|
||||
done
|
||||
])
|
7
m4/nc_boost_base.m4
Normal file
7
m4/nc_boost_base.m4
Normal file
@ -0,0 +1,7 @@
|
||||
AC_DEFUN([NC_BOOST_BASE], [
|
||||
: ${BOOST_LDFLAGS=""}
|
||||
: ${BOOST_CPPFLAGS=""}
|
||||
|
||||
BOOST_BASE_LDFLAGS=""
|
||||
BOOST_BASE_CPPFLAGS=""
|
||||
])
|
37
m4/nc_boost_filesystem.m4
Normal file
37
m4/nc_boost_filesystem.m4
Normal file
@ -0,0 +1,37 @@
|
||||
AC_DEFUN([NC_BOOST_FILESYSTEM], [
|
||||
AC_REQUIRE([NC_BOOST_BASE])
|
||||
AC_REQUIRE([NC_BOOST_SYSTEM])
|
||||
|
||||
AC_LANG_PUSH([C++])
|
||||
for lib in boost_filesystem; do
|
||||
AC_MSG_CHECKING([if boost filesystem library is $lib])
|
||||
|
||||
nc_save_cflags=$CFLAGS
|
||||
nc_save_libs=$LIBS
|
||||
|
||||
CFLAGS="$CFLAGS $BOOST_BASE_CPPFLAGS $BOOST_SYSTEM_CPPFLAGS"
|
||||
LIBS="$LIBS $BOOST_BASE_LDFLAGS $BOOST_SYSTEM_LDFLAGS -l$lib"
|
||||
|
||||
dnl filesystem::path::filename appears to be extern. try calling it.
|
||||
AC_TRY_LINK(
|
||||
[@%:@include <boost/filesystem/path.hpp>],
|
||||
[boost::filesystem::path (".").filename ();],
|
||||
[nc_cv_boost_filesystem=yes],
|
||||
[nc_cv_boost_filesystem=no]
|
||||
)
|
||||
|
||||
BOOST_FILESYSTEM_CPPFLAGS=$CFLAGS
|
||||
BOOST_FILESYSTEM_LDFLAGS=$LIBS
|
||||
|
||||
CFLAGS=$nc_save_cflags
|
||||
LIBS=$nc_save_libs
|
||||
|
||||
AC_MSG_RESULT([$nc_cv_boost_filesystem])
|
||||
AS_IF([test "x$nc_cv_boost_filesystem" = "xyes"], [break;])
|
||||
done
|
||||
AC_LANG_POP([C++])
|
||||
|
||||
AS_IF([test "x$nc_cv_boost_filesystem" != "xyes"], [
|
||||
AC_MSG_ERROR([unable to locate a suitable boost_filesystem])
|
||||
])
|
||||
])
|
36
m4/nc_boost_system.m4
Normal file
36
m4/nc_boost_system.m4
Normal file
@ -0,0 +1,36 @@
|
||||
AC_DEFUN([NC_BOOST_SYSTEM], [
|
||||
AC_REQUIRE([NC_BOOST_BASE])
|
||||
|
||||
AC_LANG_PUSH([C++])
|
||||
for lib in boost_system; do
|
||||
AC_MSG_CHECKING([if boost system library is $lib])
|
||||
|
||||
nc_save_cflags=$CFLAGS
|
||||
nc_save_libs=$LIBS
|
||||
|
||||
CFLAGS="$CFLAGS $BOOST_BASE_CPPFLAGS"
|
||||
LIBS="$LIBS $BOOST_BASE_LDFLAGS -l$lib"
|
||||
|
||||
dnl Try to call boost::system::throws as it appears to be extern
|
||||
AC_TRY_LINK(
|
||||
[@%:@include <boost/system/error_code.hpp>],
|
||||
[boost::system::throws ();],
|
||||
[nc_cv_boost_system=yes],
|
||||
[nc_cv_boost_system=no]
|
||||
)
|
||||
|
||||
BOOST_SYSTEM_CPPFLAGS=$CFLAGS
|
||||
BOOST_SYSTEM_LDFLAGS=$LIBS
|
||||
|
||||
CFLAGS=$nc_save_cflags
|
||||
LIBS=$nc_save_libs
|
||||
|
||||
AC_MSG_RESULT([$nc_cv_boost_system])
|
||||
AS_IF([test "x$nc_cv_boost_system" = "xyes"], [break;])
|
||||
done
|
||||
AC_LANG_POP([C++])
|
||||
|
||||
AS_IF([test "x$nc_cv_boost_system" != "xyes"], [
|
||||
AC_MSG_ERROR([unable to locate boost_system])
|
||||
])
|
||||
])
|
48
m4/nc_boost_thread.m4
Normal file
48
m4/nc_boost_thread.m4
Normal file
@ -0,0 +1,48 @@
|
||||
AC_DEFUN([NC_BOOST_THREAD], [
|
||||
AC_REQUIRE([NC_BOOST_BASE])
|
||||
AC_REQUIRE([NC_BOOST_SYSTEM])
|
||||
|
||||
AC_REQUIRE([AC_CANONICAL_HOST])
|
||||
AS_CASE(["x$host_os"],
|
||||
["*xmingw*"], [
|
||||
extra_cflags="-mthreads"
|
||||
], [
|
||||
AC_REQUIRE([AX_PTHREAD])
|
||||
extra_cflags="$PTHREAD_CFLAGS"
|
||||
extra_libs="$PTHREAD_LIBS"
|
||||
]
|
||||
)
|
||||
|
||||
AC_LANG_PUSH([C++])
|
||||
for lib in boost_thread boost_thread_win32; do
|
||||
AC_MSG_CHECKING([if boost threading library is $lib])
|
||||
|
||||
nc_save_cflags=$CFLAGS
|
||||
nc_save_libs=$LIBS
|
||||
|
||||
CFLAGS="$CFLAGS $BOOST_BASE_CPPFLAGS $BOOST_SYSTEM_CPPFLAGS $extra_cflags"
|
||||
LIBS="$LIBS $BOOST_BASE_LDFLAGS $BOOST_SYSTEM_LDFLAGS $extra_libs -l$lib"
|
||||
|
||||
dnl Try to call this_thread::yield as it appears to be extern
|
||||
AC_TRY_LINK(
|
||||
[@%:@include <boost/thread/thread.hpp>],
|
||||
[boost::this_thread::yield ();],
|
||||
[nc_cv_boost_thread=yes],
|
||||
[nc_cv_boost_thread=no]
|
||||
)
|
||||
|
||||
BOOST_THREAD_CPPFLAGS=$CFLAGS
|
||||
BOOST_THREAD_LDFLAGS=$LIBS
|
||||
|
||||
CFLAGS=$nc_save_cflags
|
||||
LIBS=$nc_save_libs
|
||||
|
||||
AC_MSG_RESULT([$nc_cv_boost_thread])
|
||||
AS_IF([test "x$nc_cv_boost_thread" = "xyes"], [break;])
|
||||
done
|
||||
AC_LANG_POP([C++])
|
||||
|
||||
AS_IF([test "x$nc_cv_boost_thread" != "xyes"], [
|
||||
AC_MSG_ERROR([unable to locate a suitable boost_thread])
|
||||
])
|
||||
])
|
@ -6,9 +6,7 @@ AC_DEFUN([NC_DEBUGGING],[
|
||||
AX_REQUIRE_DEFINED([NC_APPEND_ONE_COMPILE_FLAG])
|
||||
|
||||
##-------------------------------------------------------------------------
|
||||
AC_ARG_ENABLE([sanitizer], [
|
||||
AS_HELP_STRING([--enable-sanitizer], [enable memory sanitizer])
|
||||
])
|
||||
AC_ARG_ENABLE([sanitizer], [AS_HELP_STRING([--enable-sanitizer], [enable memory sanitizer])])
|
||||
|
||||
AS_IF([test "x$enable_sanitizer" = "xyes"], [
|
||||
m4_foreach([NAME], [
|
||||
@ -51,9 +49,7 @@ AC_DEFUN([NC_DEBUGGING],[
|
||||
])
|
||||
|
||||
##-------------------------------------------------------------------------
|
||||
AC_ARG_ENABLE([debugging], [
|
||||
AS_HELP_STRING([--enable-debugging], [enables developer debugging support])
|
||||
])
|
||||
AC_ARG_ENABLE([debugging], [AS_HELP_STRING([--enable-debugging], [enables developer debugging support])])
|
||||
|
||||
AS_IF([test "x${enable_debugging}" = "xyes"], [
|
||||
AC_DEFINE([ENABLE_DEBUGGING], [], [Debugging support enabled])
|
||||
|
@ -1,7 +1,6 @@
|
||||
AC_DEFUN([NC_OPTIMISATION],[
|
||||
##-------------------------------------------------------------------------
|
||||
AX_REQUIRE_DEFINED([AX_APPEND_COMPILE_FLAGS])
|
||||
AX_REQUIRE_DEFINED([AC_CANONICAL_HOST])
|
||||
AX_REQUIRE_DEFINED([AX_COMPILER_VENDOR])
|
||||
|
||||
AX_COMPILER_VENDOR
|
||||
@ -9,15 +8,9 @@ AC_DEFUN([NC_OPTIMISATION],[
|
||||
##-------------------------------------------------------------------------
|
||||
## Enable LTO
|
||||
|
||||
AC_ARG_ENABLE([lto], [
|
||||
AS_HELP_STRING([--enable-lto], [enable link-time optimisation])
|
||||
])
|
||||
AC_ARG_ENABLE([lto], [AS_HELP_STRING([--enable-lto], [enable link-time optimisation])])
|
||||
|
||||
AS_IF([test "x$enable_lto" == "xyes"], [
|
||||
AS_IF([test x"${host_os}" == x"mingw32"], [
|
||||
AC_ERROR([mingw32 link-time optimisation is currently broken])
|
||||
])
|
||||
|
||||
AS_IF([test "x$ax_cv_cxx_compiler_vendor" == "xgnu"], [
|
||||
AC_CHECK_TOOLS([RANLIB], [gcc-ranlib ranlib])
|
||||
AC_CHECK_TOOLS([AR], [gcc-ar ar])
|
||||
@ -35,9 +28,7 @@ AC_DEFUN([NC_OPTIMISATION],[
|
||||
##-------------------------------------------------------------------------
|
||||
## Enable frame pointer
|
||||
|
||||
AC_ARG_ENABLE([frame-pointer], [
|
||||
AS_HELP_STRING([--enable-frame-pointer], [retain the frame pointer even if optimising])
|
||||
])
|
||||
AC_ARG_ENABLE([frame-pointer], [AS_HELP_STRING([--enable-frame-pointer], [retain the frame pointer even if optimising])])
|
||||
|
||||
AS_IF([test "x$enable_frame_pointer" = "xyes"], [
|
||||
AX_APPEND_COMPILE_FLAGS([-fno-omit-frame-pointer], [], [-Werror])
|
||||
|
@ -6,6 +6,8 @@ AC_DEFUN([NC_PLATFORM],[
|
||||
|
||||
AS_CASE([$host_os],
|
||||
[mingw32], [
|
||||
AC_DEFINE([WIN32_LEAN_AND_MEAN], [], [reduce win32 header complexity])
|
||||
|
||||
AC_CHECK_HEADERS([winsock2.h ws2tcpip.h])
|
||||
AC_CHECK_HEADERS([windows.h],[],[],[AC_INCLUDES_DEFAULT])
|
||||
AC_SUBST([NET_LIBS], [-lws2_32])
|
||||
|
Loading…
Reference in New Issue
Block a user