diff options
| author | Jérémy Zurcher <jeremy@asynk.ch> | 2013-12-06 15:05:31 +0100 | 
|---|---|---|
| committer | Jérémy Zurcher <jeremy@asynk.ch> | 2013-12-06 15:05:31 +0100 | 
| commit | ca99540270f229485e64caed4aa949e129ddf1d8 (patch) | |
| tree | a7fd9f49078ceb25c6f4d01f0c8bb8505f78dd7c | |
| download | eina_graph-ca99540270f229485e64caed4aa949e129ddf1d8.zip eina_graph-ca99540270f229485e64caed4aa949e129ddf1d8.tar.gz  | |
Initial commit
| -rw-r--r-- | AUTHORS | 1 | ||||
| -rw-r--r-- | COPYING | 26 | ||||
| -rw-r--r-- | ChangeLog | 3 | ||||
| -rw-r--r-- | INSTALL | 370 | ||||
| -rw-r--r-- | Makefile.am | 79 | ||||
| -rw-r--r-- | NEWS | 3 | ||||
| -rw-r--r-- | README | 25 | ||||
| -rwxr-xr-x | autogen.sh | 15 | ||||
| -rw-r--r-- | configure.ac | 256 | ||||
| -rw-r--r-- | eina_graph.pc.in | 12 | ||||
| -rw-r--r-- | m4/efl_attribute.m4 | 83 | ||||
| -rw-r--r-- | m4/efl_binary.m4 | 71 | ||||
| -rw-r--r-- | m4/efl_compiler.m4 | 90 | ||||
| -rw-r--r-- | m4/efl_path_max.m4 | 36 | ||||
| -rw-r--r-- | m4/project_init.m4 | 115 | ||||
| -rw-r--r-- | src/Makefile.am | 30 | ||||
| -rw-r--r-- | src/Makefile_lib.am | 32 | ||||
| -rw-r--r-- | src/lib/Eina_Graph.h | 60 | ||||
| -rw-r--r-- | src/lib/eina_graph_main.c | 92 | ||||
| -rw-r--r-- | src/lib/eina_graph_private.h | 63 | ||||
| -rw-r--r-- | src/tests/eina_graph_suite.c | 41 | 
21 files changed, 1503 insertions, 0 deletions
@@ -0,0 +1 @@ +Jérémy Zurcher <jeremy@asynk.ch> @@ -0,0 +1,26 @@ +Copyright notice for eina_graph: + +Copyright (C) 2013 Jérémy Zurcher <jeremy@asynk.ch> +      and various contributors (see AUTHORS). + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +   1. Redistributions of source code must retain the above copyright +      notice, this list of conditions and the following disclaimer. +   2. Redistributions in binary form must reproduce the above copyright +      notice, this list of conditions and the following disclaimer in the +      documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, +OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, +EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/ChangeLog b/ChangeLog new file mode 100644 index 0000000..540fe18 --- /dev/null +++ b/ChangeLog @@ -0,0 +1,3 @@ +2013-12-06  Jérémy Zurcher (jeyzu) + +      * Initial commit @@ -0,0 +1,370 @@ +Installation Instructions +************************* + +Copyright (C) 1994-1996, 1999-2002, 2004-2013 Free Software Foundation, +Inc. + +   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 warranty of any kind. + +Basic Installation +================== + +   Briefly, the shell commands `./configure; make; make install' should +configure, build, and install this package.  The following +more-detailed instructions are generic; see the `README' file for +instructions specific to this package.  Some packages provide this +`INSTALL' file but do not implement all of the features documented +below.  The lack of an optional feature in a given package is not +necessarily a bug.  More recommendations for GNU packages can be found +in *note Makefile Conventions: (standards)Makefile Conventions. + +   The `configure' shell script attempts to guess correct values for +various system-dependent variables used during compilation.  It uses +those values to create a `Makefile' in each directory of the package. +It may also create one or more `.h' files containing system-dependent +definitions.  Finally, it creates a shell script `config.status' that +you can run in the future to recreate the current configuration, and a +file `config.log' containing compiler output (useful mainly for +debugging `configure'). + +   It can also use an optional file (typically called `config.cache' +and enabled with `--cache-file=config.cache' or simply `-C') that saves +the results of its tests to speed up reconfiguring.  Caching is +disabled by default to prevent problems with accidental use of stale +cache files. + +   If you need to do unusual things to compile the package, please try +to figure out how `configure' could check whether to do them, and mail +diffs or instructions to the address given in the `README' so they can +be considered for the next release.  If you are using the cache, and at +some point `config.cache' contains results you don't want to keep, you +may remove or edit it. + +   The file `configure.ac' (or `configure.in') is used to create +`configure' by a program called `autoconf'.  You need `configure.ac' if +you want to change it or regenerate `configure' using a newer version +of `autoconf'. + +   The simplest way to compile this package is: + +  1. `cd' to the directory containing the package's source code and type +     `./configure' to configure the package for your system. + +     Running `configure' might take a while.  While running, it prints +     some messages telling which features it is checking for. + +  2. Type `make' to compile the package. + +  3. Optionally, type `make check' to run any self-tests that come with +     the package, generally using the just-built uninstalled binaries. + +  4. Type `make install' to install the programs and any data files and +     documentation.  When installing into a prefix owned by root, it is +     recommended that the package be configured and built as a regular +     user, and only the `make install' phase executed with root +     privileges. + +  5. Optionally, type `make installcheck' to repeat any self-tests, but +     this time using the binaries in their final installed location. +     This target does not install anything.  Running this target as a +     regular user, particularly if the prior `make install' required +     root privileges, verifies that the installation completed +     correctly. + +  6. You can remove the program binaries and object files from the +     source code directory by typing `make clean'.  To also remove the +     files that `configure' created (so you can compile the package for +     a different kind of computer), type `make distclean'.  There is +     also a `make maintainer-clean' target, but that is intended mainly +     for the package's developers.  If you use it, you may have to get +     all sorts of other programs in order to regenerate files that came +     with the distribution. + +  7. Often, you can also type `make uninstall' to remove the installed +     files again.  In practice, not all packages have tested that +     uninstallation works correctly, even though it is required by the +     GNU Coding Standards. + +  8. Some packages, particularly those that use Automake, provide `make +     distcheck', which can by used by developers to test that all other +     targets like `make install' and `make uninstall' work correctly. +     This target is generally not run by end users. + +Compilers and Options +===================== + +   Some systems require unusual options for compilation or linking that +the `configure' script does not know about.  Run `./configure --help' +for details on some of the pertinent environment variables. + +   You can give `configure' initial values for configuration parameters +by setting variables in the command line or in the environment.  Here +is an example: + +     ./configure CC=c99 CFLAGS=-g LIBS=-lposix + +   *Note Defining Variables::, for more details. + +Compiling For Multiple Architectures +==================================== + +   You can compile the package for more than one kind of computer at the +same time, by placing the object files for each architecture in their +own directory.  To do this, you can use GNU `make'.  `cd' to the +directory where you want the object files and executables to go and run +the `configure' script.  `configure' automatically checks for the +source code in the directory that `configure' is in and in `..'.  This +is known as a "VPATH" build. + +   With a non-GNU `make', it is safer to compile the package for one +architecture at a time in the source code directory.  After you have +installed the package for one architecture, use `make distclean' before +reconfiguring for another architecture. + +   On MacOS X 10.5 and later systems, you can create libraries and +executables that work on multiple system types--known as "fat" or +"universal" binaries--by specifying multiple `-arch' options to the +compiler but only a single `-arch' option to the preprocessor.  Like +this: + +     ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ +                 CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ +                 CPP="gcc -E" CXXCPP="g++ -E" + +   This is not guaranteed to produce working output in all cases, you +may have to build one architecture at a time and combine the results +using the `lipo' tool if you have problems. + +Installation Names +================== + +   By default, `make install' installs the package's commands under +`/usr/local/bin', include files under `/usr/local/include', etc.  You +can specify an installation prefix other than `/usr/local' by giving +`configure' the option `--prefix=PREFIX', where PREFIX must be an +absolute file name. + +   You can specify separate installation prefixes for +architecture-specific files and architecture-independent files.  If you +pass the option `--exec-prefix=PREFIX' to `configure', the package uses +PREFIX as the prefix for installing programs and libraries. +Documentation and other data files still use the regular prefix. + +   In addition, if you use an unusual directory layout you can give +options like `--bindir=DIR' to specify different values for particular +kinds of files.  Run `configure --help' for a list of the directories +you can set and what kinds of files go in them.  In general, the +default for these options is expressed in terms of `${prefix}', so that +specifying just `--prefix' will affect all of the other directory +specifications that were not explicitly provided. + +   The most portable way to affect installation locations is to pass the +correct locations to `configure'; however, many packages provide one or +both of the following shortcuts of passing variable assignments to the +`make install' command line to change installation locations without +having to reconfigure or recompile. + +   The first method involves providing an override variable for each +affected directory.  For example, `make install +prefix=/alternate/directory' will choose an alternate location for all +directory configuration variables that were expressed in terms of +`${prefix}'.  Any directories that were specified during `configure', +but not in terms of `${prefix}', must each be overridden at install +time for the entire installation to be relocated.  The approach of +makefile variable overrides for each directory variable is required by +the GNU Coding Standards, and ideally causes no recompilation. +However, some platforms have known limitations with the semantics of +shared libraries that end up requiring recompilation when using this +method, particularly noticeable in packages that use GNU Libtool. + +   The second method involves providing the `DESTDIR' variable.  For +example, `make install DESTDIR=/alternate/directory' will prepend +`/alternate/directory' before all installation names.  The approach of +`DESTDIR' overrides is not required by the GNU Coding Standards, and +does not work on platforms that have drive letters.  On the other hand, +it does better at avoiding recompilation issues, and works well even +when some directory options were not specified in terms of `${prefix}' +at `configure' time. + +Optional Features +================= + +   If the package supports it, you can cause programs to be installed +with an extra prefix or suffix on their names by giving `configure' the +option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. + +   Some packages pay attention to `--enable-FEATURE' options to +`configure', where FEATURE indicates an optional part of the package. +They may also pay attention to `--with-PACKAGE' options, where PACKAGE +is something like `gnu-as' or `x' (for the X Window System).  The +`README' should mention any `--enable-' and `--with-' options that the +package recognizes. + +   For packages that use the X Window System, `configure' can usually +find the X include and library files automatically, but if it doesn't, +you can use the `configure' options `--x-includes=DIR' and +`--x-libraries=DIR' to specify their locations. + +   Some packages offer the ability to configure how verbose the +execution of `make' will be.  For these packages, running `./configure +--enable-silent-rules' sets the default to minimal output, which can be +overridden with `make V=1'; while running `./configure +--disable-silent-rules' sets the default to verbose, which can be +overridden with `make V=0'. + +Particular systems +================== + +   On HP-UX, the default C compiler is not ANSI C compatible.  If GNU +CC is not installed, it is recommended to use the following options in +order to use an ANSI C compiler: + +     ./configure CC="cc -Ae -D_XOPEN_SOURCE=500" + +and if that doesn't work, install pre-built binaries of GCC for HP-UX. + +   HP-UX `make' updates targets which have the same time stamps as +their prerequisites, which makes it generally unusable when shipped +generated files such as `configure' are involved.  Use GNU `make' +instead. + +   On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot +parse its `<wchar.h>' header file.  The option `-nodtk' can be used as +a workaround.  If GNU CC is not installed, it is therefore recommended +to try + +     ./configure CC="cc" + +and if that doesn't work, try + +     ./configure CC="cc -nodtk" + +   On Solaris, don't put `/usr/ucb' early in your `PATH'.  This +directory contains several dysfunctional programs; working variants of +these programs are available in `/usr/bin'.  So, if you need `/usr/ucb' +in your `PATH', put it _after_ `/usr/bin'. + +   On Haiku, software installed for all users goes in `/boot/common', +not `/usr/local'.  It is recommended to use the following options: + +     ./configure --prefix=/boot/common + +Specifying the System Type +========================== + +   There may be some features `configure' cannot figure out +automatically, but needs to determine by the type of machine the package +will run on.  Usually, assuming the package is built to be run on the +_same_ architectures, `configure' can figure that out, but if it prints +a message saying it cannot guess the machine type, give it the +`--build=TYPE' option.  TYPE can either be a short name for the system +type, such as `sun4', or a canonical name which has the form: + +     CPU-COMPANY-SYSTEM + +where SYSTEM can have one of these forms: + +     OS +     KERNEL-OS + +   See the file `config.sub' for the possible values of each field.  If +`config.sub' isn't included in this package, then this package doesn't +need to know the machine type. + +   If you are _building_ compiler tools for cross-compiling, you should +use the option `--target=TYPE' to select the type of system they will +produce code for. + +   If you want to _use_ a cross compiler, that generates code for a +platform different from the build platform, you should specify the +"host" platform (i.e., that on which the generated programs will +eventually be run) with `--host=TYPE'. + +Sharing Defaults +================ + +   If you want to set default values for `configure' scripts to share, +you can create a site shell script called `config.site' that gives +default values for variables like `CC', `cache_file', and `prefix'. +`configure' looks for `PREFIX/share/config.site' if it exists, then +`PREFIX/etc/config.site' if it exists.  Or, you can set the +`CONFIG_SITE' environment variable to the location of the site script. +A warning: not all `configure' scripts look for a site script. + +Defining Variables +================== + +   Variables not defined in a site shell script can be set in the +environment passed to `configure'.  However, some packages may run +configure again during the build, and the customized values of these +variables may be lost.  In order to avoid this problem, you should set +them in the `configure' command line, using `VAR=value'.  For example: + +     ./configure CC=/usr/local2/bin/gcc + +causes the specified `gcc' to be used as the C compiler (unless it is +overridden in the site shell script). + +Unfortunately, this technique does not work for `CONFIG_SHELL' due to +an Autoconf limitation.  Until the limitation is lifted, you can use +this workaround: + +     CONFIG_SHELL=/bin/bash ./configure CONFIG_SHELL=/bin/bash + +`configure' Invocation +====================== + +   `configure' recognizes the following options to control how it +operates. + +`--help' +`-h' +     Print a summary of all of the options to `configure', and exit. + +`--help=short' +`--help=recursive' +     Print a summary of the options unique to this package's +     `configure', and exit.  The `short' variant lists options used +     only in the top level, while the `recursive' variant lists options +     also present in any nested packages. + +`--version' +`-V' +     Print the version of Autoconf used to generate the `configure' +     script, and exit. + +`--cache-file=FILE' +     Enable the cache: use and save the results of the tests in FILE, +     traditionally `config.cache'.  FILE defaults to `/dev/null' to +     disable caching. + +`--config-cache' +`-C' +     Alias for `--cache-file=config.cache'. + +`--quiet' +`--silent' +`-q' +     Do not print messages saying which checks are being made.  To +     suppress all normal output, redirect it to `/dev/null' (any error +     messages will still be shown). + +`--srcdir=DIR' +     Look for the package's source code in directory DIR.  Usually +     `configure' can determine that directory automatically. + +`--prefix=DIR' +     Use DIR as the installation prefix.  *note Installation Names:: +     for more details, including other options available for fine-tuning +     the installation locations. + +`--no-create' +`-n' +     Run the configure checks, but stop before creating any output +     files. + +`configure' also accepts some other, not widely useful, options.  Run +`configure --help' for more details. diff --git a/Makefile.am b/Makefile.am new file mode 100644 index 0000000..8dd446c --- /dev/null +++ b/Makefile.am @@ -0,0 +1,79 @@ +ACLOCAL_AMFLAGS = -I m4 +AM_MAKEFLAGS = --no-print-directory +AM_DISTCHECK_CONFIGURE_FLAGS = \ +   --with-tests=regular + +SUBDIRS = src + +MAINTAINERCLEANFILES = \ +   Makefile.in \ +   $(PACKAGE_TARNAME)-$(PACKAGE_VERSION).tar.gz \ +   $(PACKAGE_TARNAME)-$(PACKAGE_VERSION).tar.bz2 \ +   aclocal.m4 \ +   config.guess \ +   config.cache-env \ +   config.h.in \ +   config.sub \ +   configure \ +   compile \ +   depcomp \ +   install-sh \ +   ltconfig \ +   ltmain.sh \ +   missing \ +   mkinstalldirs \ +   stamp-h.in \ +   stamp-h \ +   m4/libtool.m4 \ +   m4/lt~obsolete.m4 \ +   m4/ltoptions.m4 \ +   m4/ltsugar.m4 \ +   m4/ltversion.m4 + +EXTRA_DIST = \ +   README \ +   AUTHORS \ +   COPYING \ +   autogen.sh \ +   eina_graph.pc.in \ +   m4/efl_attribute.m4 \ +   m4/efl_compiler.m4 \ +   m4/efl_path_max.m4 \ +   m4/efl_binary.m4 \ +   m4/project_init.m4 + +pkgconfigdir = $(libdir)/pkgconfig +pkgconfig_DATA = eina_graph.pc + + +# Unit tests + +if EINA_GRAPH_ENABLE_COVERAGE + +lcov-reset: +	@rm -rf $(top_builddir)/coverage +	@find $(top_builddir) -name "*.gcda" -delete +	@lcov --zerocounters --directory $(top_builddir) + +lcov-report: +	@mkdir $(top_builddir)/coverage +	lcov --capture --compat-libtool --output-file $(top_builddir)/coverage/coverage.info --directory $(top_builddir) --base-directory $(top_srcdir)/src/ +	lcov --remove $(top_builddir)/coverage/coverage.info '*.h' --output-file $(top_builddir)/coverage/coverage.cleaned.info +	lcov --remove $(top_builddir)/coverage/coverage.cleaned.info '*/tests/*' --output-file $(top_builddir)/coverage/coverage.cleaned2.info +	genhtml --branch-coverage -t "$(PACKAGE_STRING)" -o $(top_builddir)/coverage/html $(top_builddir)/coverage/coverage.cleaned2.info +	@echo "Coverage Report at $(top_builddir)/coverage/html" + +endif + +if EINA_GRAPH_ENABLE_TESTS + +lcov-check: +if EINA_GRAPH_ENABLE_COVERAGE +	@$(MAKE) $(AM_MAKEFLAGS) lcov-reset +endif +	@$(MAKE) $(AM_MAKEFLAGS) check +if EINA_GRAPH_ENABLE_COVERAGE +	@$(MAKE) $(AM_MAKEFLAGS) lcov-report +endif + +endif @@ -0,0 +1,3 @@ +eina_graph 0.0.1 + +      * Initial version @@ -0,0 +1,25 @@ +eina_graph 0.0.1 + +****************************************************************************** + + FOR ANY ISSUES PLEASE EMAIL: + jeremy@asynk.ch + +****************************************************************************** + +Requirements: +------------- + +Must: +  libc +  eina 1.8 (part of EFL) + +------------------------------------------------------------------------------ + +COMPILING AND INSTALLING: + +  $ ./configure +  $ make +(as root unless you are installing in your users directories): +  $ make install + diff --git a/autogen.sh b/autogen.sh new file mode 100755 index 0000000..fe644eb --- /dev/null +++ b/autogen.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +rm -rf autom4te.cache +rm -f aclocal.m4 ltmain.sh + +echo "Running autopoint..." ; autopoint -f || : +echo "Running aclocal..." ; aclocal -I m4 $ACLOCAL_FLAGS || exit 1 +echo "Running autoconf..." ; autoconf || exit 1 +echo "Running autoheader..." ; autoheader || exit 1 +echo "Running libtoolize..." ; (libtoolize --copy --automake || glibtoolize --automake) || exit 1 +echo "Running automake..." ; automake --add-missing --copy --gnu || exit 1 + +if [ -z "$NOCONFIGURE" ]; then +  ./configure "$@" +fi diff --git a/configure.ac b/configure.ac new file mode 100644 index 0000000..cce8589 --- /dev/null +++ b/configure.ac @@ -0,0 +1,256 @@ +dnl Process this file with autoconf to produce a configure script. + +# get rid of that stupid cache mechanism +rm -f config.cache + +PROJECT_VERSION([0], [0], [1], [dev]) +AC_INIT([eina_graph], [v_ver], [jeremy@asynk.ch]) +AC_PREREQ([2.65]) +AC_CONFIG_SRCDIR([configure.ac]) +AC_CONFIG_MACRO_DIR([m4]) + +AC_CONFIG_HEADERS([config.h]) +AH_TOP([ +#ifndef __CONFIG_H__ +#define __CONFIG_H__ +]) +AH_BOTTOM([ +#endif /* __CONFIG_H__ */ +]) + +AM_INIT_AUTOMAKE([1.10 dist-bzip2]) +m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])]) + +# this will speed up libtool checks +LT_PREREQ([2.2]) +LT_INIT([win32-dll]) +PROJECT_INIT + +### Default options with respect to host + +AC_CANONICAL_BUILD +AC_CANONICAL_HOST + +### Additional options to configure + +# Build profile + +AC_ARG_WITH([profile], +   [AC_HELP_STRING([--with-profile=PROFILE], +                   [use the predefined build profile, one of: dev, debug and release. +                    @<:@default=dev@:>@])], +   [build_profile=${withval}], +   [build_profile=def_build_profile]) + +case "${build_profile}" in +   dev|debug|release) +     ;; +   *) +     AC_MSG_ERROR([Unknown build profile --with-profile=${build_profile}]) +     ;; +esac + +# Tests + +AC_ARG_WITH([tests], +   [AC_HELP_STRING([--with-tests=none|regular|coverage], +                   [choose testing method: regular, coverage or none. +                    @<:@default=none@:>@])], +   [build_tests=${withval}], +   [build_tests=auto]) + +want_coverage="no" +want_tests="no" +case "${build_tests}" in +   auto) +     if test "${build_profile}" = "dev"; then +        want_tests="yes" +     fi +     ;; +   regular) +     want_tests="yes" +     ;; +   coverage) +     want_tests="yes" +     want_coverage="yes" +     ;; +   none) +     ;; +   *) +     AC_MSG_ERROR([Unknown build tests option: --with-tests=${build_tests}]) +     ;; +esac + +### Checks for programs + +AC_PROG_CC + +# pkg-config + +PKG_PROG_PKG_CONFIG + +# Check whether pkg-config supports Requires.private + +if $PKG_CONFIG --atleast-pkgconfig-version 0.22; then +   pkgconfig_requires_private="Requires.private" +else +   pkgconfig_requires_private="Requires" +fi +AC_SUBST(pkgconfig_requires_private) + +# lcov + +if test "${want_coverage}" = "yes" ; then +   AC_CHECK_PROG([have_lcov], [lcov], [yes], [no]) +   if test "x${have_lcov}" = "xyes" ; then +      EINA_GRAPH_COV_CFLAGS="${EINA_GRAPH_COV_CFLAGS} -fprofile-arcs -ftest-coverage" +      EINA_GRAPH_COV_LIBS="${EINA_GRAPH_COV_LIBS} -lgcov" +      if test "x${prefer_assert}" = "xno"; then +         EINA_GRAPH_COV_CFLAGS="${EINA_GRAPH_COV_CFLAGS} -DNDEBUG" +      else +         EINA_GRAPH_COV_CFLAGS="${EINA_GRAPH_COV_CFLAGS} -g -O0 -DDEBUG" +      fi +   else +      AC_MSG_ERROR([lcov is not found]) +   fi +fi + +AC_SUBST(EINA_GRAPH_COV_LIBS) +AC_SUBST(EINA_GRAPH_COV_CFLAGS) +AM_CONDITIONAL([EINA_GRAPH_ENABLE_COVERAGE], [test "${want_coverage}" = "yes"]) + +### Checks for libraries + +# check unit testing library + +if test "${want_tests}" = "yes"; then +   PKG_CHECK_MODULES([CHECK], [check >= 0.9.5]) +fi +AM_CONDITIONAL([EINA_GRAPH_ENABLE_TESTS], [test "${want_tests}" = "yes"]) + +# Checks for library functions. + +# Evil library for compilation on Windows + +EINA_GRAPH_BUILD="" +case "$host_os" in +   mingw*) +      PKG_CHECK_MODULES([EVIL], [evil >= 1.0.0]) +      AC_DEFINE([HAVE_EVIL], [1], [Set to 1 if Evil library is installed]) +      requirement_eina_graph="evil ${requirement_eina_graph}" +      EINA_GRAPH_BUILD="-DEINA_GRAPH_BUILD" +      ;; +esac +AC_SUBST(EINA_GRAPH_BUILD) + +# Dependencies for the library + +requirement_eina_graph="eina >= 1.8.0 ${requirement_eina_graph}" +PKG_CHECK_MODULES([EFL], [ $requirement_eina_graph ]) + +AC_SUBST(requirement_eina_graph) + +# Checks for library functions. + +AM_GNU_GETTEXT_VERSION([0.18]) + +### Checks for header files + +EFL_CHECK_PATH_MAX + +### Checks for types + +### Checks for structures + +### Checks for compiler characteristics + +AM_PROG_CC_C_O +AC_C_CONST +AC_PROG_CC_STDC +AC_HEADER_STDC + +ELM_QUICKLAUNCH +EFL_ATTRIBUTE_VECTOR + +case "$host_os" in +   mingw32ce*) +      EINA_GRAPH_CFLAGS="${EINA_GRAPH_CFLAGS} -D_WIN32_WCE=0x0420" +      ;; +esac + +EFL_CHECK_COMPILER_FLAGS([EINA_GRAPH], [-Wall -Wunused -Wextra -Wpointer-arith -Wno-missing-field-initializers -fvisibility=hidden -fdata-sections -ffunction-sections]) +EFL_CHECK_LINKER_FLAGS([EINA_GRAPH], [-fvisibility=hidden -fdata-sections -ffunction-sections -Wl,--gc-sections -fno-strict-aliasing -Wl,--as-needed -Wl,--no-copy-dt-needed-entries]) + +case "${build_profile}" in +   dev) +     dnl Check if compiler has a dodgy -Wshadow that emits errors when shadowing a global +     AC_MSG_CHECKING([whether -Wshadow generates spurious warnings]) +     CFLAGS_save="${CFLAGS}" +     CFLAGS="${CFLAGS} -Werror -Wshadow" +     AC_TRY_COMPILE([int x;], [int x = 0; (void)x;], +       [AC_MSG_RESULT([no]) +        EFL_CHECK_COMPILER_FLAGS([EFL], [-Wshadow])], +       [AC_MSG_RESULT([yes])]) +     CFLAGS="${CFLAGS_save}" +     ;; + +   debug) +     ;; + +   release) +     ;; +esac + +# CPU architecture specific assembly + +### Checks for linker characteristics + +lt_enable_auto_import="" +case "$host_os" in +   mingw*) +      lt_enable_auto_import="-Wl,--enable-auto-import" +      ;; +esac +AC_SUBST(lt_enable_auto_import) + +### Output + +AC_OUTPUT([ +   eina_graph.pc +   Makefile +   src/Makefile +]) + +AC_OUTPUT + +##################################################################### +## Info + +echo +echo +echo +echo "------------------------------------------------------------------------" +echo "$PACKAGE $VERSION" +echo "------------------------------------------------------------------------" +echo +echo "Compilation................: make (or gmake)" +echo "  CPPFLAGS.................: $CPPFLAGS" +echo "  CFLAGS...................: $CFLAGS" +echo "  LDFLAGS..................: $LDFLAGS" +echo +echo "Installation...............: make install (as root if needed, with 'su' or 'sudo')" +echo "  prefix...................: $prefix" +echo "  edje_cc..................: ${edje_cc}" +echo +echo "Configuration...: ${COLOR_OTHER}profile=${build_profile} os=${host_os}${COLOR_RESET}" +echo +if test "${want_coverage}" = "yes"; then +echo "Tests...........: make lcov-check" +else +if test "${want_tests}" = "yes"; then +echo "Tests...........: make check" +else +echo "Tests...........: no" +fi +fi +echo diff --git a/eina_graph.pc.in b/eina_graph.pc.in new file mode 100644 index 0000000..3bd6f75 --- /dev/null +++ b/eina_graph.pc.in @@ -0,0 +1,12 @@ +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ +includedir=@includedir@ +vmaj=@VMAJ@ + +Name: eina_graph +Description: EFL-eina based graph algorithms collection +@pkgconfig_requires_private@: @requirement_eina_graph@ +Version: @VERSION@ +Libs: -L${libdir} -leina_graph +Cflags: -I${includedir}/eina_graph-@VMAJ@ diff --git a/m4/efl_attribute.m4 b/m4/efl_attribute.m4 new file mode 100644 index 0000000..4f31d93 --- /dev/null +++ b/m4/efl_attribute.m4 @@ -0,0 +1,83 @@ +dnl Copyright (C) 2011 Vincent Torri <vtorri at univ-evry dot fr> +dnl That code is public domain and can be freely used or copied. + +dnl Macros for checking if the compiler supports some __attribute__ uses + +dnl Usage: EFL_ATTRIBUTE_VECTOR +dnl call AC_DEFINE for HAVE_GCC_ATTRIBUTE_VECTOR if __attribute__((vector)) is available + +AC_DEFUN([EFL_ATTRIBUTE_VECTOR], +[ +AC_MSG_CHECKING([for __attribute__ ((vector))]) +AC_COMPILE_IFELSE( +   [AC_LANG_PROGRAM( +       [[ +typedef int v4si __attribute__ ((vector_size (16))); +       ]], +       [[ +if (sizeof(v4si) == 16) +  return 0; +else +  return -1; +       ]])], +   [have_attribute_vector="yes"], +   [have_attribute_vector="no"]) +AC_MSG_RESULT([${have_attribute_vector}]) + +if test "x${have_attribute_vector}" = "xyes" ; then +   AC_DEFINE([HAVE_GCC_ATTRIBUTE_VECTOR], [1], [Define to 1 if your compiler supports __attribute__ ((vector)).]) +fi +]) + +dnl Usage: EFL_ATTRIBUTE_ALWAYS_INLINE +dnl call AC_DEFINE for alway_inline if __attribute__((always_inline)) is available + +AC_DEFUN([EFL_ATTRIBUTE_ALWAYS_INLINE], +[ + +have_attribute_forceinline="no" + +AC_MSG_CHECKING([for __forceinline]) + +AC_COMPILE_IFELSE( +   [AC_LANG_PROGRAM( +       [[ +#include <windows.h> +static __forceinline void foo(void) {} +       ]], +       [[ +       ]])], +   [ +    have_attribute_always_inline="yes" +    have_attribute_forceinline="yes" +   ], +   [have_attribute_always_inline="no"]) + +AC_MSG_RESULT([${have_attribute_always_inline}]) + +if test "x${have_attribute_always_inline}" = "xno" ; then +   AC_MSG_CHECKING([for __attribute__ ((__always_inline__))]) +   AC_COMPILE_IFELSE( +      [AC_LANG_PROGRAM( +          [[ +static __attribute__((__always_inline__)) inline void foo(void) {} +          ]], +          [[ +          ]])], +      [have_attribute_always_inline="yes"], +      [have_attribute_always_inline="no"]) +   AC_MSG_RESULT([${have_attribute_always_inline}]) +fi + +if test "x${have_attribute_always_inline}" = "xyes" ; then +   if test "x${have_attribute_forceinline}" = "xyes" ; then +      AC_DEFINE([EFL_ALWAYS_INLINE], [__forceinline], [Macro declaring a function to always be inlined.]) +   else +      AC_DEFINE([EFL_ALWAYS_INLINE], [__attribute__ ((__always_inline__)) inline], [Macro declaring a function to always be inlined.]) +   fi +else +   AC_DEFINE([EFL_ALWAYS_INLINE], [static inline], [Macro declaring a function to always be inlined.]) +fi +]) + +dnl End of efl_attribute.m4 diff --git a/m4/efl_binary.m4 b/m4/efl_binary.m4 new file mode 100644 index 0000000..c774688 --- /dev/null +++ b/m4/efl_binary.m4 @@ -0,0 +1,71 @@ +dnl Copyright (C) 2010 Vincent Torri <vtorri at univ-evry dot fr> +dnl That code is public domain and can be freely used or copied. + +dnl Macro that check if a binary is built or not + +dnl Usage: EFL_ENABLE_BIN(binary) +dnl Call AC_SUBST(BINARY_PRG) (BINARY is the uppercase of binary, - being transformed into _) +dnl Define have_binary (- is transformed into _) +dnl Define conditional BUILD_BINARY (BINARY is the uppercase of binary, - being transformed into _) + +AC_DEFUN([EFL_ENABLE_BIN], +[ + +m4_pushdef([UP], m4_translit([[$1]], [-a-z], [_A-Z]))dnl +m4_pushdef([DOWN], m4_translit([[$1]], [-A-Z], [_a-z]))dnl + +have_[]m4_defn([DOWN])="yes" + +dnl configure option + +AC_ARG_ENABLE([$1], +   [AC_HELP_STRING([--disable-$1], [disable building of ]DOWN)], +   [ +    if test "x${enableval}" = "xyes" ; then +       have_[]m4_defn([DOWN])="yes" +    else +       have_[]m4_defn([DOWN])="no" +    fi +   ]) + +AC_MSG_CHECKING([whether to build ]DOWN[ binary]) +AC_MSG_RESULT([$have_[]m4_defn([DOWN])]) + +if test "x$have_[]m4_defn([DOWN])" = "xyes"; then +   UP[]_PRG=DOWN[${EXEEXT}] +fi + +AC_SUBST(UP[]_PRG) + +AM_CONDITIONAL(BUILD_[]UP, test "x$have_[]m4_defn([DOWN])" = "xyes") + +AS_IF([test "x$have_[]m4_defn([DOWN])" = "xyes"], [$2], [$3]) + +]) + + +dnl Macro that check if a binary is built or not + +dnl Usage: EFL_WITH_BIN(package, binary, default_value) +dnl Call AC_SUBST(_binary) (_binary is the lowercase of binary, - being transformed into _ by default, or the value set by the user) + +AC_DEFUN([EFL_WITH_BIN], +[ + +m4_pushdef([DOWN], m4_translit([[$2]], [-A-Z], [_a-z]))dnl + +dnl configure option + +AC_ARG_WITH([$2], +   [AC_HELP_STRING([--with-$2=PATH], [specify a specific path to ]DOWN[ @<:@default=$3@:>@])], +   [_efl_with_binary=${withval}], +   [_efl_with_binary=$(pkg-config --variable=prefix $1)/bin/$3]) + +DOWN=${_efl_with_binary} +AC_MSG_NOTICE(DOWN[ set to ${_efl_with_binary}]) + +with_binary_[]m4_defn([DOWN])=${_efl_with_binary} + +AC_SUBST(DOWN) + +]) diff --git a/m4/efl_compiler.m4 b/m4/efl_compiler.m4 new file mode 100644 index 0000000..32819f2 --- /dev/null +++ b/m4/efl_compiler.m4 @@ -0,0 +1,90 @@ +dnl Copyright (C) 2012 Vincent Torri <vincent dot torri at gmail dot com> +dnl This code is public domain and can be freely used or copied. + +dnl Macro that check if compiler of linker flags are available + + +dnl Macro that checks for a compiler flag availability +dnl +dnl _EFL_CHECK_COMPILER_FLAGS(EFL, FLAGS) +dnl AC_SUBST : EFL_CFLAGS (EFL being replaced by its value) +dnl have_flag: yes or no. +AC_DEFUN([_EFL_CHECK_COMPILER_FLAGS], +[dnl +m4_pushdef([UPEFL], m4_translit([[$1]], [-a-z], [_A-Z]))dnl + +dnl store in options -Wfoo if -Wno-foo is passed +option="m4_bpatsubst([[$2]], [-Wno-], [-W])" +CFLAGS_save="${CFLAGS}" +CFLAGS="${CFLAGS} ${option}" +AC_LANG_PUSH([C]) + +AC_MSG_CHECKING([whether the compiler supports $2]) +AC_COMPILE_IFELSE( +   [AC_LANG_PROGRAM([[]])], +   [have_flag="yes"], +   [have_flag="no"]) +AC_MSG_RESULT([${have_flag}]) + +AC_LANG_POP([C]) +CFLAGS="${CFLAGS_save}" +if test "x${have_flag}" = "xyes" ; then +   UPEFL[_CFLAGS]="${UPEFL[_CFLAGS]} [$2]" +fi +AC_SUBST(UPEFL[_CFLAGS])dnl +m4_popdef([UPEFL])dnl +]) + +dnl EFL_CHECK_COMPILER_FLAGS(EFL, FLAGS) +dnl Checks if FLAGS are supported and add to EFL_CLFAGS. +dnl +dnl It will first try every flag at once, if one fails will try them one by one. +AC_DEFUN([EFL_CHECK_COMPILER_FLAGS], +[dnl +_EFL_CHECK_COMPILER_FLAGS([$1], [$2]) +if test "${have_flag}" != "yes"; then +m4_foreach_w([flag], [$2], [_EFL_CHECK_COMPILER_FLAGS([$1], m4_defn([flag]))]) +fi +]) + + +dnl Macro that checks for a linker flag availability +dnl +dnl _EFL_CHECK_LINKER_FLAGS(EFL, FLAGS) +dnl AC_SUBST : EFL_LDFLAGS (EFL being replaced by its value) +dnl have_flag: yes or no +AC_DEFUN([_EFL_CHECK_LINKER_FLAGS], +[dnl +m4_pushdef([UPEFL], m4_translit([[$1]], [-a-z], [_A-Z]))dnl + +LDFLAGS_save="${LDFLAGS}" +LDFLAGS="${LDFLAGS} $2" +AC_LANG_PUSH([C]) + +AC_MSG_CHECKING([whether the linker supports $2]) +AC_LINK_IFELSE( +   [AC_LANG_PROGRAM([[]])], +   [have_flag="yes"], +   [have_flag="no"]) +AC_MSG_RESULT([${have_flag}]) + +AC_LANG_POP([C]) +LDFLAGS="${LDFLAGS_save}" +if test "x${have_flag}" = "xyes" ; then +   UPEFL[_LDFLAGS]="${UPEFL[_LDFLAGS]} [$2]" +fi +AC_SUBST(UPEFL[_LDFLAGS])dnl +m4_popdef([UPEFL])dnl +]) + +dnl EFL_CHECK_LINKER_FLAGS(EFL, FLAGS) +dnl Checks if FLAGS are supported and add to EFL_CLFAGS. +dnl +dnl It will first try every flag at once, if one fails will try them one by one. +AC_DEFUN([EFL_CHECK_LINKER_FLAGS], +[dnl +_EFL_CHECK_LINKER_FLAGS([$1], [$2]) +if test "${have_flag}" != "yes"; then +m4_foreach_w([flag], [$2], [_EFL_CHECK_LINKER_FLAGS([$1], m4_defn([flag]))]) +fi +])dnl diff --git a/m4/efl_path_max.m4 b/m4/efl_path_max.m4 new file mode 100644 index 0000000..f57bfd2 --- /dev/null +++ b/m4/efl_path_max.m4 @@ -0,0 +1,36 @@ +dnl Check for PATH_MAX in limits.h, and define a default value if not found +dnl This is a workaround for systems not providing PATH_MAX, like GNU/Hurd + +dnl EFL_CHECK_PATH_MAX([DEFAULT_VALUE_IF_NOT_FOUND]) +dnl +dnl If PATH_MAX is not defined in <limits.h>, defines it +dnl to DEFAULT_VALUE_IF_NOT_FOUND if it exists, or fallback +dnl to using 4096 + +AC_DEFUN([EFL_CHECK_PATH_MAX], +[ + +default_max=m4_default([$1], "4096") +AC_LANG_PUSH([C]) + +AC_MSG_CHECKING([for PATH_MAX in limits.h]) +AC_COMPILE_IFELSE( +   [AC_LANG_PROGRAM( +       [[ +#include <limits.h> +       ]], +       [[ +int i = PATH_MAX; +       ]])], +   [AC_MSG_RESULT([yes])], +   [ +    AC_DEFINE_UNQUOTED([PATH_MAX], +       [${default_max}], +       [default value since PATH_MAX is not defined]) +    AC_MSG_RESULT([no: using ${default_max}]) +   ]) + +AC_LANG_POP([C]) + +]) +dnl end of efl_path_max.m4 diff --git a/m4/project_init.m4 b/m4/project_init.m4 new file mode 100644 index 0000000..12645a8 --- /dev/null +++ b/m4/project_init.m4 @@ -0,0 +1,115 @@ + +dnl PROJECT_VERSION(major, minor, micro, release) +dnl This setup PROJECT version information and should be called BEFORE AC_INIT(). +dnl +dnl release parameter is 'dev' to use from SVN or libtool -release field. +dnl It may be empty if not dev (svn/live build) and no -release is to be used. +dnl +dnl Examples: +dnl     PROJECT_VERSION(1, 7, 99, dev) +dnl     PROJECT_VERSION(1, 7, 99, ver-1234) +dnl This will define couple of m4 symbols: +dnl     v_maj = given major number (first parameter) +dnl     v_min = given minor number (second parameter) +dnl     v_mic = given micro number (third parameter) +dnl     v_rev = if release, it's 0, otherwise it's dev_version. +dnl     v_rel = if release, it's -release followed by fourth parameter, +dnl             otherwise it's empty. (mostly for libtool) +dnl     v_ver = if release, it's major.minor.micro, otherwise it's +dnl             major.minor.micro.dev_version +dnl     dev_version = development version (svn revision). +dnl     def_build_profile = dev or release based on 'dev' release parameter. +AC_DEFUN([PROJECT_VERSION], +[dnl +m4_define([v_maj], [$1])dnl +m4_define([v_min], [$2])dnl +m4_define([v_mic], [$3])dnl +m4_define([dev_version], m4_esyscmd([(git rev-list --count HEAD 2>/dev/null || echo 0) | tr -d '\n']))dnl +m4_define([v_rev], m4_if($4, dev, [dev_version], [0]))dnl +m4_define([v_rel], m4_if($4, dev, [], m4_ifblank($4, [], [-release $4])))dnl +m4_define([def_build_profile], m4_if($4, dev, [dev], [release]))dnl +m4_define([v_ver], m4_if($4, dev, [v_maj.v_min.v_mic.v_rev], [v_maj.v_min.v_mic]))dnl +]) + +dnl PROJECT_COLOR +dnl will check if terminal supports color and if color is wanted by user. +dnl +dnl Used Variables: +dnl     WANT_COLOR: if no, forces no color output. +dnl     TERM: used to check if color should be enabled. +dnl +dnl Defined Variables: +dnl     COLOR_YES: to be used in positive/yes conditions +dnl     COLOR_NO: to be used in negative/no conditions +dnl     COLOR_OTHER: to be used to highlight some other condition +dnl     COLOR_RESET: to reset color +dnl     want_color: yes or no +AC_DEFUN([PROJECT_COLOR], +[dnl +case "$TERM" in +   xterm|xterm-color|Eterm|aterm|kterm|rxvt*|screen|gnome|interix) +      want_color="${WANT_COLOR:-yes}" +      ;; +   *) +      want_color="no" +      ;; +esac + +if test "${want_color}" = "yes"; then +   COLOR_YES=`echo -e "\033@<:@1;32m"` +   COLOR_NO=`echo -e "\033@<:@1;31m"` +   COLOR_OTHER=`echo -e "\033@<:@1;36m"` +   COLOR_RESET=`echo -e "\033@<:@0m"` +else +   COLOR_YES="" +   COLOR_NO="" +   COLOR_OTHER="" +   COLOR_RESET="" +fi +]) + +dnl PROJECT_INIT() +dnl Will AC_DEFINE() the following: +dnl     VMAJ = v_maj +dnl     VMIN = v_min +dnl     VMIC = v_mic +dnl     VREV = v_rev +dnl Will AC_SUBST() the following: +dnl     VMAJ = v_maj +dnl     VMIN = v_min +dnl     VMIC = v_mic +dnl     PROJECT_LTLIBRARY_FLAGS="-no-undefined -version-info ..." +dnl     PROJECT_LTMODULE_FLAGS="-no-undefined -avoid-version" +dnl Will define the following m4: +dnl     lt_cur = libtool 'current' field of libtool's -version-info +dnl     lt_rev = libtool 'revision' field of libtool's -version-info +dnl     lt_age = libtool 'age' field of libtool's -version-info +AC_DEFUN([PROJECT_INIT], +[dnl +AC_REQUIRE([PROJECT_COLOR])dnl +AC_DEFINE_UNQUOTED([VMAJ], [v_maj], [Major version])dnl +AC_DEFINE_UNQUOTED([VMIN], [v_min], [Minor version])dnl +AC_DEFINE_UNQUOTED([VMIC], [v_mic], [Micro version])dnl +AC_DEFINE_UNQUOTED([VREV], [v_rev], [Revison])dnl +VMAJ=v_maj +VMIN=v_min +VMIC=v_mic +AC_SUBST([VMAJ])dnl +AC_SUBST([VMIN])dnl +AC_SUBST([VMIC])dnl +dnl +dnl TODO: warning - lt_cur: +dnl the previous code assumed v_maj + v_min, but this will be a problem when +dnl we bump v_maj and reset v_min. 1 + 7 == 7 + 1, so if v_maj is bumped +dnl we multiply it by 100. +m4_define([lt_cur], m4_if(m4_cmp(v_maj, 1), 0, m4_eval(v_maj + v_min), m4_eval(v_maj * 100 + v_min)))dnl +m4_define([lt_rev], v_mic)dnl +m4_define([lt_age], v_min)dnl +dnl +PROJECT_LTLIBRARY_FLAGS="-no-undefined -version-info lt_cur:lt_rev:lt_age v_rel" +AC_SUBST(PROJECT_LTLIBRARY_FLAGS)dnl +PROJECT_LTMODULE_FLAGS="-no-undefined -avoid-version" +AC_SUBST([PROJECT_LTMODULE_FLAGS])dnl +AC_MSG_NOTICE([Initialized AC_PACKAGE_NAME (AC_PACKAGE_VERSION) development=dev_version v_rel]) +]) + diff --git a/src/Makefile.am b/src/Makefile.am new file mode 100644 index 0000000..cf11d1c --- /dev/null +++ b/src/Makefile.am @@ -0,0 +1,30 @@ +AUTOMAKE_OPTIONS = subdir-objects + +MAINTAINERCLEANFILES = Makefile.in +CLEANFILES = +BUILT_SOURCES = + +DIST_SUBDIRS = +SUBDIRS = + +lib_LTLIBRARIES = +bin_PROGRAMS = +bin_SCRIPTS = +noinst_PROGRAMS = +check_PROGRAMS = +TESTS = +EXTRA_DIST = + +EINA_GRAPH_INSTALL_DATA_HOOK= + +AM_CPPFLAGS = -I. \ +   -I$(top_srcdir) \ +   -I$(top_srcdir)/src/lib \ +   -DPACKAGE_BIN_DIR=\"$(bindir)\" \ +   -DPACKAGE_LIB_DIR=\"$(libdir)\" \ +   -DPACKAGE_DATA_DIR=\"$(datadir)/$(PACKAGE)\" \ +   @EFL_CFLAGS@ \ +   @EINA_GRAPH_CFLAGS@ \ +   @EINA_GRAPH_COV_CFLAGS@ + +include Makefile_lib.am diff --git a/src/Makefile_lib.am b/src/Makefile_lib.am new file mode 100644 index 0000000..f46abe0 --- /dev/null +++ b/src/Makefile_lib.am @@ -0,0 +1,32 @@ +### Libraries + +includesdir = $(includedir)/eina_graph-@VMAJ@ +includes_HEADERS = \ +   lib/Eina_Graph.h + +lib_libeina_graph_la_SOURCES = \ +   lib/eina_graph_main.c + +EXTRA_DIST += lib/eina_graph_private.h + +lib_LTLIBRARIES += lib/libeina_graph.la + +lib_libeina_graph_la_LIBADD = @EFL_LIBS@ @EINA_GRAPH_COV_LIBS@ +lib_libeina_graph_la_CFLAGS = +lib_libeina_graph_la_LDFLAGS = @EINA_GRAPH_LDFLAGS@ @PROJECT_LTLIBRARY_FLAGS@ + +### Unit tests + +if EINA_GRAPH_ENABLE_TESTS + +TESTS += tests/eina_graph_suite +check_PROGRAMS += tests/eina_graph_suite + +tests_eina_graph_suite_SOURCES = \ +   tests/eina_graph_suite.c + +tests_eina_graph_suite_CFLAGS = @CHECK_CFLAGS@ +tests_eina_graph_suite_LDADD = @CHECK_LIBS@ lib/libeina_graph.la +tests_eina_graph_suite_DEPENDENCIES =  + +endif diff --git a/src/lib/Eina_Graph.h b/src/lib/Eina_Graph.h new file mode 100644 index 0000000..2a444d8 --- /dev/null +++ b/src/lib/Eina_Graph.h @@ -0,0 +1,60 @@ +/* EINA_GRAPH - EFL graph processing library + * Copyright (C) 2013 Jérémy Zurcher + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies of the Software and its Copyright notices. In addition publicly + * documented acknowledgment must be given that this software has been used if no + * source code of this software is made available publicly. This includes + * acknowledgments in either Copyright notices, Manuals, Publicity and Marketing + * documents or any documentation provided with any product containing this + * software. This License does not apply to any software that links to the + * libraries provided by this software (statically or dynamically), but only to + * the software provided. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifndef _EINA_GRAPH_MAIN_H +#define _EINA_GRAPH_MAIN_H + +#include <eina_types.h> + +/** + * Initialize eina_graph. + * + * @return The init counter value. + * + * This function initializes eina_graph and increments a counter of the number + * of calls to it. The new counter value is then returned. + * + * @see eina_graph_shutdown(). + */ +EAPI int +eina_graph_init(void); + +/** + * Shutdown eina_graph. + * + * @return The init counter value. + * + * This function finalizes eina_graph and decrements a counter of the number + * of calls to eina_graph_init(). The new counter value is then returned. + * + * @see eina_graph_init(). + */ +EAPI int +eina_graph_shutdown(void); + +#endif   /* _EINA_GRAPH_MAIN_H */ diff --git a/src/lib/eina_graph_main.c b/src/lib/eina_graph_main.c new file mode 100644 index 0000000..bd8be47 --- /dev/null +++ b/src/lib/eina_graph_main.c @@ -0,0 +1,92 @@ +/* EINA_GRAPH - EFL graph processing library + * Copyright (C) 2013 Jérémy Zurcher + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies of the Software and its Copyright notices. In addition publicly + * documented acknowledgment must be given that this software has been used if no + * source code of this software is made available publicly. This includes + * acknowledgments in either Copyright notices, Manuals, Publicity and Marketing + * documents or any documentation provided with any product containing this + * software. This License does not apply to any software that links to the + * libraries provided by this software (statically or dynamically), but only to + * the software provided. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif /* HAVE_CONFIG_H */ + +int _eina_graph_log_dom = -1; +int _eina_graph_init_count = 0; + +#include <Eina.h> +#include "eina_graph_private.h" + +EAPI int +eina_graph_init(void) +{ +   const char * log_dom = "eina_graph"; + +   if (++_eina_graph_init_count != 1) +     { +        DBG("init count is %d.", _eina_graph_init_count); +        return _eina_graph_init_count; +     } + +   if(!eina_init()) +     goto shutdown_eina; + +   _eina_graph_log_dom = eina_log_domain_register(log_dom, EINA_COLOR_LIGHTBLUE); +   if (_eina_graph_log_dom < 0) +     { +        EINA_LOG_ERR("Could not register log domain: %s", log_dom); +        goto shutdown_log_dom; +     } + +   /* FIXME init stuff goes here */ +   DBG("init..."); + +   return _eina_graph_init_count; + +shutdown_log_dom: +   eina_shutdown(); +shutdown_eina: +   return --_eina_graph_init_count; +} + +EAPI int +eina_graph_shutdown(void) +{ +   if (_eina_graph_init_count <= 0) +     { +        ERR("init count not greater than 0."); +        return 0; +     } + +   if (--_eina_graph_init_count != 0) +     { +        DBG("init count is %d.", _eina_graph_init_count); +        return _eina_graph_init_count; +     } + +   /* FIXME shutdown stuff goes here */ +   DBG("shutdown..."); + +   eina_shutdown(); + +   return _eina_graph_init_count; +} diff --git a/src/lib/eina_graph_private.h b/src/lib/eina_graph_private.h new file mode 100644 index 0000000..a75ed6b --- /dev/null +++ b/src/lib/eina_graph_private.h @@ -0,0 +1,63 @@ +/* EINA_GRAPH - EFL graph processing library + * Copyright (C) 2013 Jérémy Zurcher + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies of the Software and its Copyright notices. In addition publicly + * documented acknowledgment must be given that this software has been used if no + * source code of this software is made available publicly. This includes + * acknowledgments in either Copyright notices, Manuals, Publicity and Marketing + * documents or any documentation provided with any product containing this + * software. This License does not apply to any software that links to the + * libraries provided by this software (statically or dynamically), but only to + * the software provided. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifndef _EINA_GRAPH_PRIVATE_H +#define _EINA_GRAPH_PRIVATE_H + +#include <Eina.h> + +#include "Eina_Graph.h" + +extern int _eina_graph_log_dom; + +#ifdef CRITICAL +#undef CRITICAL +#endif +#define CRITICAL(...) EINA_LOG_DOM_CRIT(_eina_graph_log_dom, __VA_ARGS__) + +#ifdef ERR +#undef ERR +#endif +#define ERR(...) EINA_LOG_DOM_ERR(_eina_graph_log_dom, __VA_ARGS__) + +#ifdef WRN +#undef WRN +#endif +#define WRN(...) EINA_LOG_DOM_WARN(_eina_graph_log_dom, __VA_ARGS__) + +#ifdef INF +#undef INF +#endif +#define INF(...) EINA_LOG_DOM_INFO(_eina_graph_log_dom, __VA_ARGS__) + +#ifdef DBG +#undef DBG +#endif +#define DBG(...) EINA_LOG_DOM_DBG(_eina_graph_log_dom, __VA_ARGS__) + +#endif   /* _EINA_GRAPH_PRIVATE_H */ diff --git a/src/tests/eina_graph_suite.c b/src/tests/eina_graph_suite.c new file mode 100644 index 0000000..79c02aa --- /dev/null +++ b/src/tests/eina_graph_suite.c @@ -0,0 +1,41 @@ +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif /* HAVE_CONFIG_H */ + +#include <check.h> +#include "Eina_Graph.h" + + +START_TEST (test_eina_graph_lib) +{ +   ck_assert(eina_graph_init() == 1); +   ck_assert(eina_graph_init() == 2); + +   ck_assert(eina_graph_shutdown() == 1); +   ck_assert(eina_graph_shutdown() == 0); +} +END_TEST + +Suite * +eina_graph_suite (void) +{ +   Suite *s = suite_create ("Eina Graph"); + +   TCase *tc_core = tcase_create ("Core"); +   tcase_add_test (tc_core, test_eina_graph_lib); +   suite_add_tcase (s, tc_core); + +   return s; +} + +int +main(int argc EINA_UNUSED, char *argv[] EINA_UNUSED) +{ +   int number_failed; +   Suite *s = eina_graph_suite(); +   SRunner *sr = srunner_create(s); +   srunner_run_all(sr, CK_ENV); +   number_failed = srunner_ntests_failed(sr); +   srunner_free(sr); +   return ((number_failed == 0) ? 0: 1); +}  | 
