diff --git a/.gitignore b/.gitignore index 0989b26..e8249f7 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,40 @@ *.dll *.exe *.pc +/.libs + +/*.in + +/aclocal.m4 + +/autom4te.cache + +/c9y/.deps + +/c9y/.dirstamp +/c9y/*.lo + +/test/.deps + +/test/.dirstamp + +/missing + +/m4/libtool.m4 +/m4/ltoptions.m4 +/m4/ltsugar.m4 +/m4/ltversion.m4 +/m4/lt~obsolete.m4 + +/ltmain.sh + +/ar-lib +/config.guess +/config.log +/config.status +/config.sub +/configure +/depcomp +/install-sh +/libc9y.la +/libtool diff --git a/Makefile b/Makefile deleted file mode 100644 index 78a6e8d..0000000 --- a/Makefile +++ /dev/null @@ -1,94 +0,0 @@ - -PACKAGE := c9y -VERSION := 0.1.0 -prefix ?= /usr/local -CXX ?= g++ -CXXFLAGS += -g -Wall -std=c++0x -I./c9y -LDFLAGS += -luv - -headers := $(wildcard c9y/*.h) -srcs := $(wildcard c9y/*.cpp) -test_srcs := $(wildcard test/*.cpp) -extra_dist := Makefile README.md - -ifeq ($(OS), Windows_NT) - extra_libs := -lws2_32 -liphlpapi -lpsapi - libname := c9y.dll - checkname := c9y-check.exe - LDFLAGS += $(extra_libs) -Wl,--out-implib=lib$(PACKAGE).a -else - extra_libs := - libname := libc9y.so - checkname := c9y-check - CXXFLAGS += -fPIC -endif - -.PHONY: all check clean install uninstall dist - -all: $(libname) - -$(libname): $(patsubst %.cpp, %.o, $(srcs)) - $(CXX) -shared $(CXXFLAGS) $^ $(LDFLAGS) -o $@ - -check: $(checkname) - LD_LIBRARY_PATH=`pwd`:$$LD_LIBRARY_PATH ./$(checkname) - -$(checkname): $(patsubst %.cpp, %.o, $(test_srcs)) $(libname) - $(CXX) $(CXXFLAGS) $^ $(LDFLAGS) -lrtest -o $@ - -clean: - rm -f c9y/*.o c9y/*.d test/*.o test/*.d libc9y.a $(libname) $(checkname) - -dist: - mkdir $(PACKAGE)-$(VERSION) - cp --parents $(dist_files) $(PACKAGE)-$(VERSION) - tar -czvf $(PACKAGE)-$(VERSION).tar.gz $(PACKAGE)-$(VERSION) - rm -rf $(PACKAGE)-$(VERSION) - -c9y.pc: c9y.pc.in - cat c9y.pc.in | sed -e "s:%prefix%:$(prefix):g" -e "s/%extra_libs%/$(extra_libs)/g" -e "s/%VERSION%/$(VERSION)/g" > c9y.pc - -ifeq ($(OS), Windows_NT) - -install: c9y.pc c9y.dll - mkdir -p $(prefix)/include/$(PACKAGE) - cp $(headers) $(prefix)/include/$(PACKAGE) - mkdir -p $(prefix)/lib - cp libc9y.a $(prefix)/lib - mkdir -p $(prefix)/bin - cp c9y.dll $(prefix)/bin - mkdir -p $(prefix)/lib/pkgconfig - cp c9y.pc $(prefix)/lib/pkgconfig - -uninstall: - rm -r $(prefix)/include/$(PACKAGE) - rm $(prefix)/lib/libc9y.a - rm $(prefix)/bin/c9y.dll - rm $(prefix)/lib/pkgconfig/c9y.pc - -else - -install: c9y.pc c9y.so - mkdir -p $(prefix)/include/$(PACKAGE) - cp $(headers) $(prefix)/include/$(PACKAGE) - mkdir -p $(prefix)/lib - cp libc9y.so $(prefix)/lib - mkdir -p $(prefix)/lib/pkgconfig - cp c9y.pc $(prefix)/lib/pkgconfig - -uninstall: - rm -r $(prefix)/include/$(PACKAGE) - rm $(prefix)/lib/libc9y.so - rm $(prefix)/lib/pkgconfig/c9y.pc - -endif - -%.o : %.cpp - $(CXX) $(CXXFLAGS) -MD -c $< -o $(patsubst %.cpp, %.o, $<) - -ifneq "$(MAKECMDGOALS)" "clean" -deps = $(patsubst %.cpp, %.d, $(srcs)) -deps += $(patsubst %.cpp, %.d, $(test_srcs)) --include $(deps) -endif - diff --git a/Makefile.am b/Makefile.am new file mode 100644 index 0000000..9c16132 --- /dev/null +++ b/Makefile.am @@ -0,0 +1,24 @@ +ACLOCAL_AMFLAGS = -I m4 + +pkginclude_HEADERS = c9y/Barrier.h c9y/Idler.h c9y/RWLock.h c9y/Thread.h \ + c9y/c9y.h c9y/Condition.h c9y/IpAddress.h c9y/Semaphore.h \ + c9y/Timer.h c9y/EventLoop.h c9y/Mutex.h c9y/TcpSocket.h \ + c9y/UdpSocket.h + +lib_LTLIBRARIES = libc9y.la + +libc9y_la_LDFLAGS = -no-undefined -version-info 0:0:0 +libc9y_la_SOURCES = c9y/Barrier.cpp c9y/Condition.cpp c9y/EventLoop.cpp \ + c9y/Idler.cpp c9y/IpAddress.cpp c9y/Mutex.cpp c9y/RWLock.cpp \ + c9y/Semaphore.cpp c9y/TcpSocket.cpp c9y/Thread.cpp \ + c9y/Timer.cpp c9y/UdpSocket.cpp c9y/c9y.cpp + +check_PROGRAMS = c9y-test +TESTS = c9y-test + +c9y_test_CXXFLAGS = -Ic9y +c9y_test_LDADD = libc9y.la +c9y_test_SOURCES = test/events.cpp test/main.cpp test/net.cpp \ + test/philosophers.cpp + +EXTRA_DIST = README.md \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..afecfd5 --- /dev/null +++ b/README.md @@ -0,0 +1,3 @@ + +c9y +=== diff --git a/autogen.sh b/autogen.sh new file mode 100644 index 0000000..e4e2c2e --- /dev/null +++ b/autogen.sh @@ -0,0 +1,8 @@ +#!/bin/sh + +set -x + +aclocal -I m4 +libtoolize +autoconf +automake --add-missing --copy \ No newline at end of file diff --git a/c9y.pc.in b/c9y.pc.in index de66faf..2dc6743 100644 --- a/c9y.pc.in +++ b/c9y.pc.in @@ -1,12 +1,12 @@ # Package Information for pkg-config -prefix=%prefix% +prefix=@prefix@ exec_prefix=${prefix} libdir=${exec_prefix}/lib includedir=${prefix}/include Name: c9y Description: concurrency -Version: %VERSION% -Libs: -L${libdir} -lc9y -luv %extra_libs% +Version: @VERSION@ +Libs: -L${libdir} -lc9y -luv Cflags: -I${includedir} diff --git a/configure.ac b/configure.ac new file mode 100644 index 0000000..4346224 --- /dev/null +++ b/configure.ac @@ -0,0 +1,25 @@ + +AC_INIT([c9y], [0.1.0], [https://github.com/rioki/c9y/issues]) +AC_CONFIG_MACRO_DIR([m4]) +AC_CANONICAL_HOST + +AM_INIT_AUTOMAKE([-Wall -Werror foreign subdir-objects]) +AM_SILENT_RULES([yes]) +AM_PROG_AR + +AC_LANG([C++]) + +AC_PROG_CXX +AX_CXX_COMPILE_STDCXX_11 + +LT_INIT([shared static win32-dll]) + +AC_CHECK_HEADER([rtest.h], :, AC_MSG_ERROR([rtest.h not found!])) +AC_CHECK_LIB([rtest], [main], LIBS="$LIBS -lrtest", AC_MSG_ERROR([rtest not found!])) + +AC_CHECK_HEADER([uv.h], :, AC_MSG_ERROR([uv.h not found!])) +AC_CHECK_LIB([uv], [uv_run], LIBS="$LIBS -luv", AC_MSG_ERROR([libuv not found!])) + +AC_CONFIG_FILES([Makefile c9y.pc]) + +AC_OUTPUT \ No newline at end of file diff --git a/m4/ax_cxx_compile_stdcxx_11.m4 b/m4/ax_cxx_compile_stdcxx_11.m4 new file mode 100644 index 0000000..6d355fd --- /dev/null +++ b/m4/ax_cxx_compile_stdcxx_11.m4 @@ -0,0 +1,133 @@ +# ============================================================================ +# http://www.gnu.org/software/autoconf-archive/ax_cxx_compile_stdcxx_11.html +# ============================================================================ +# +# SYNOPSIS +# +# AX_CXX_COMPILE_STDCXX_11([ext|noext],[mandatory|optional]) +# +# DESCRIPTION +# +# Check for baseline language coverage in the compiler for the C++11 +# standard; if necessary, add switches to CXXFLAGS to enable support. +# +# The first argument, if specified, indicates whether you insist on an +# extended mode (e.g. -std=gnu++11) or a strict conformance mode (e.g. +# -std=c++11). If neither is specified, you get whatever works, with +# preference for an extended mode. +# +# The second argument, if specified 'mandatory' or if left unspecified, +# indicates that baseline C++11 support is required and that the macro +# should error out if no mode with that support is found. If specified +# 'optional', then configuration proceeds regardless, after defining +# HAVE_CXX11 if and only if a supporting mode is found. +# +# LICENSE +# +# Copyright (c) 2008 Benjamin Kosnik +# Copyright (c) 2012 Zack Weinberg +# Copyright (c) 2013 Roy Stogner +# +# Copying and distribution of this file, with or without modification, are +# permitted in any medium without royalty provided the copyright notice +# and this notice are preserved. This file is offered as-is, without any +# warranty. + +#serial 3 + +m4_define([_AX_CXX_COMPILE_STDCXX_11_testbody], [ + template + struct check + { + static_assert(sizeof(int) <= sizeof(T), "not big enough"); + }; + + typedef check> right_angle_brackets; + + int a; + decltype(a) b; + + typedef check check_type; + check_type c; + check_type&& cr = static_cast(c); + + auto d = a; +]) + +AC_DEFUN([AX_CXX_COMPILE_STDCXX_11], [dnl + m4_if([$1], [], [], + [$1], [ext], [], + [$1], [noext], [], + [m4_fatal([invalid argument `$1' to AX_CXX_COMPILE_STDCXX_11])])dnl + m4_if([$2], [], [ax_cxx_compile_cxx11_required=true], + [$2], [mandatory], [ax_cxx_compile_cxx11_required=true], + [$2], [optional], [ax_cxx_compile_cxx11_required=false], + [m4_fatal([invalid second argument `$2' to AX_CXX_COMPILE_STDCXX_11])])dnl + AC_LANG_PUSH([C++])dnl + ac_success=no + AC_CACHE_CHECK(whether $CXX supports C++11 features by default, + ax_cv_cxx_compile_cxx11, + [AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_11_testbody])], + [ax_cv_cxx_compile_cxx11=yes], + [ax_cv_cxx_compile_cxx11=no])]) + if test x$ax_cv_cxx_compile_cxx11 = xyes; then + ac_success=yes + fi + + m4_if([$1], [noext], [], [dnl + if test x$ac_success = xno; then + for switch in -std=gnu++11 -std=gnu++0x; do + cachevar=AS_TR_SH([ax_cv_cxx_compile_cxx11_$switch]) + AC_CACHE_CHECK(whether $CXX supports C++11 features with $switch, + $cachevar, + [ac_save_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS $switch" + AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_11_testbody])], + [eval $cachevar=yes], + [eval $cachevar=no]) + CXXFLAGS="$ac_save_CXXFLAGS"]) + if eval test x\$$cachevar = xyes; then + CXXFLAGS="$CXXFLAGS $switch" + ac_success=yes + break + fi + done + fi]) + + m4_if([$1], [ext], [], [dnl + if test x$ac_success = xno; then + for switch in -std=c++11 -std=c++0x; do + cachevar=AS_TR_SH([ax_cv_cxx_compile_cxx11_$switch]) + AC_CACHE_CHECK(whether $CXX supports C++11 features with $switch, + $cachevar, + [ac_save_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS $switch" + AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_11_testbody])], + [eval $cachevar=yes], + [eval $cachevar=no]) + CXXFLAGS="$ac_save_CXXFLAGS"]) + if eval test x\$$cachevar = xyes; then + CXXFLAGS="$CXXFLAGS $switch" + ac_success=yes + break + fi + done + fi]) + AC_LANG_POP([C++]) + if test x$ax_cxx_compile_cxx11_required = xtrue; then + if test x$ac_success = xno; then + AC_MSG_ERROR([*** A compiler with support for C++11 language features is required.]) + fi + else + if test x$ac_success = xno; then + HAVE_CXX11=0 + AC_MSG_NOTICE([No compiler with C++11 support was found]) + else + HAVE_CXX11=1 + AC_DEFINE(HAVE_CXX11,1, + [define if the compiler supports basic C++11 syntax]) + fi + + AC_SUBST(HAVE_CXX11) + fi +]) \ No newline at end of file diff --git a/wercker.yml b/wercker.yml index b2a1188..0a091ab 100644 --- a/wercker.yml +++ b/wercker.yml @@ -15,6 +15,12 @@ build: - script: name: build libuv code: cd libuv && sh autogen.sh && sh configure && make && sudo make install + - script: + name: autogen + code: sh autogen.sh + - script: + name: configure + code: sh configure - script: name: make code: make