[packages/candl] - added git patch (with latest snap), updates required by pluto 0.11 - updated isl patch, added syst
qboosh
qboosh at pld-linux.org
Sun Oct 5 17:59:09 CEST 2014
commit 65a2ccbcf7286adc211eb5d2967d98480d041b58
Author: Jakub Bogusz <qboosh at pld-linux.org>
Date: Sun Oct 5 17:56:53 2014 +0200
- added git patch (with latest snap), updates required by pluto 0.11
- updated isl patch, added system-libs patch
candl-git.patch | 13861 ++++++++++++++++++++++++++++++++++++++++++++++
candl-isl.patch | 27 +-
candl-system-libs.patch | 20 +
candl.spec | 32 +-
4 files changed, 13921 insertions(+), 19 deletions(-)
---
diff --git a/candl.spec b/candl.spec
index b9eb7d7..22f09a1 100644
--- a/candl.spec
+++ b/candl.spec
@@ -2,19 +2,27 @@ Summary: Candl - Data Dependence Analysis Tool in the Polyhedral Model
Summary(pl.UTF-8): Candl - narzędzie do analizy zależności danych w modelu wielościennym
Name: candl
Version: 0.6.2
-Release: 1
+%define snap 20140806
+Release: 1.%{snap}.1
License: LGPL v3+
Group: Libraries
Source0: http://web.cse.ohio-state.edu/~pouchet/software/pocc/download/modules/%{name}-%{version}.tar.gz
# Source0-md5: 4e86392fa46a514b03532f93d9c83f8d
-Patch0: %{name}-isl.patch
-Patch1: %{name}-info.patch
+# git clone git://repo.or.cz/candl.git
+# git diff 0.6.2
+Patch0: %{name}-git.patch
+Patch1: %{name}-isl.patch
+Patch2: %{name}-info.patch
+Patch3: %{name}-system-libs.patch
URL: http://icps.u-strasbg.fr/people/bastoul/public_html/development/candl/
+BuildRequires: autoconf >= 2.53
+BuildRequires: automake >= 1:1.9
BuildRequires: gmp-devel
# 0.12.x originally, 0.13 with isl patch
BuildRequires: isl-devel >= 0.13
+BuildRequires: libtool
+BuildRequires: osl-devel
BuildRequires: piplib-devel
-BuildRequires: scoplib-devel >= 0.2.1-2
BuildRequires: texinfo
BuildRoot: %{tmpdir}/%{name}-%{version}-root-%(id -u -n)
@@ -34,8 +42,8 @@ Group: Development/Libraries
Requires: %{name} = %{version}-%{release}
Requires: gmp-devel
Requires: isl-devel >= 0.13
+Requires: osl-devel
Requires: piplib-devel
-Requires: scoplib-devel >= 0.2.1-2
%description devel
Header files for Candl library.
@@ -57,10 +65,24 @@ Statyczna biblioteka Candl.
%prep
%setup -q
+# clean after make dist to allow git patch
+%{__rm} include/candl/candl.h
%patch0 -p1
%patch1 -p1
+%patch2 -p1
+%patch3 -p1
+
+# because of tests subdir stripped from git patch
+> tests/Makefile.am
+
+%{__rm} osl piplib
+install -d osl piplib
%build
+%{__libtoolize}
+%{__aclocal} -I m4
+%{__autoconf}
+%{__automake}
%configure \
--enable-mp-version \
--disable-silent-rules
diff --git a/candl-git.patch b/candl-git.patch
new file mode 100644
index 0000000..cd74220
--- /dev/null
+++ b/candl-git.patch
@@ -0,0 +1,13861 @@
+diff --git a/.gitmodules b/.gitmodules
+new file mode 100644
+index 0000000..3279daf
+--- /dev/null
++++ b/.gitmodules
+@@ -0,0 +1,6 @@
++[submodule "osl"]
++ path = osl
++ url = https://github.com/periscop/openscop.git
++[submodule "piplib"]
++ path = piplib
++ url = https://github.com/periscop/piplib.git
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+new file mode 100755
+index 0000000..a16d5e4
+--- /dev/null
++++ b/CMakeLists.txt
+@@ -0,0 +1,249 @@
++cmake_minimum_required(VERSION 2.8)
++
++
++set(PACKAGE_VERSION "0.6.2")
++set(RELEASE "${PACKAGE_VERSION}")
++set(BITS "32")
++set(DEFINE_HAS_ISL_LIB "")
++set(top_srcdir "${CMAKE_CURRENT_SOURCE_DIR}")
++
++set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
++
++
++# User's settings - C Flags
++
++# set(release "TRUE")
++ set(release "FALSE")
++
++ # Release
++ if (release)
++ set(CMAKE_C_FLAGS "-O3")
++ # Debug # valgrind --show-reachable=yes --leak-check=full -v exe
++ else()
++ set(CMAKE_C_FLAGS "-O0 -g3")
++ endif()
++
++# User's settings - General C Flags
++ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -pedantic -std=c99")
++
++
++# Build doxygen
++ find_package(Doxygen)
++ if (DOXYGEN_FOUND)
++ configure_file("doc/Doxyfile.in" "Doxyfile")
++ add_custom_target(
++ doxygen
++ ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile
++ WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}"
++ COMMENT "Generating API documentation with Doxygen" VERBATIM
++ )
++ else()
++ message (STATUS "Doxygen not found :( API documentation can not be built")
++ endif()
++
++# Build documentation
++
++ # doc
++ find_program(texi2pdf_exe texi2pdf)
++ if (texi2pdf_exe)
++ add_custom_target(
++ doc
++ ${texi2pdf_exe} ${CMAKE_CURRENT_SOURCE_DIR}/doc/candl.texi --output=${CMAKE_CURRENT_BINARY_DIR}/candl.pdf
++ WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}"
++ COMMENT "Generating documentation (pdf) (with texi2pdf)" VERBATIM
++ )
++ else()
++ message (STATUS "texi2pdf not found :( Documentation can not be built")
++ endif()
++
++
++# osl
++ find_package(osl REQUIRED)
++
++# GMP & piplib
++ message(STATUS "---")
++ find_library(gmp_LIB gmp)
++ if (gmp_LIB)
++ message (STATUS "Library gmp found =) ${gmp_LIB}")
++ set(BITS "MP")
++ # piplibMP
++ find_package(piplibMP REQUIRED)
++ else()
++ message(STATUS "Library gmp not found :(")
++ # piplib64
++ find_package(piplib64 REQUIRED)
++ endif()
++
++# Include directories (to use #include <> instead of #include "")
++
++ # include/candl/macros.h
++ configure_file("include/candl/macros.h.in" "include/candl/macros.h")
++ include_directories("${CMAKE_CURRENT_BINARY_DIR}/include")
++ # candl
++ include_directories("./include")
++
++
++# Compiler log
++ message(STATUS "---")
++ message(STATUS "C compiler = ${CMAKE_C_COMPILER}")
++ if (release)
++ message(STATUS "Mode Release")
++ else()
++ message(STATUS "Mode Debug")
++ endif()
++ message(STATUS "C flags = ${CMAKE_C_FLAGS}")
++
++
++# Library
++
++ message(STATUS "---")
++
++ # files .c
++ file(
++ GLOB_RECURSE
++ sources
++ source/*
++ )
++ string(REPLACE "${CMAKE_CURRENT_SOURCE_DIR}/source/candl.c;" "" sources "${sources}") # with ;
++ string(REPLACE "${CMAKE_CURRENT_SOURCE_DIR}/source/candl.c" "" sources "${sources}") # without ;
++
++ # Shared
++ add_library(
++ candl
++ SHARED
++ ${sources}
++ )
++ target_link_libraries(candl ${OSL_LIBRARY})
++ if (gmp_LIB)
++ target_link_libraries(candl ${PIPLIBMP_LIBRARY})
++ else()
++ target_link_libraries(candl ${PIPLIB64_LIBRARY})
++ endif()
++ get_property(candl_lib_location TARGET candl PROPERTY LOCATION)
++ message(STATUS "Add candl library (shared) ${candl_lib_location}")
++
++ # Static
++ add_library(
++ candl_static
++ STATIC
++ ${sources}
++ )
++ set_target_properties(candl_static PROPERTIES OUTPUT_NAME candl)
++ if (gmp_LIB)
++ target_link_libraries(candl_static ${PIPLIBMP_LIBRARY})
++ else()
++ target_link_libraries(candl_static ${PIPLIB64_LIBRARY})
++ endif()
++ target_link_libraries(candl_static ${OSL_LIBRARY})
++ get_property(candl_static_lib_location TARGET candl_static PROPERTY LOCATION)
++ message(STATUS "Add candl library (static) ${candl_static_lib_location}")
++
++
++# Executables & tests
++
++ message(STATUS "---") # candl
++
++ message(STATUS "Add executable candl")
++ add_executable(candl_exe "source/candl.c")
++ set_target_properties(candl_exe PROPERTIES OUTPUT_NAME "candl")
++ target_link_libraries(candl_exe candl_static ${OSL_LIBRARY})
++ if (gmp_LIB)
++ target_link_libraries(candl_exe candl_static ${gmp_LIB})
++ endif()
++
++ # candl test
++ find_program(bash_exe bash)
++ if (bash_exe)
++
++ message(STATUS "---")
++
++ enable_testing()
++
++ file(
++ GLOB_RECURSE
++ tests_unitary
++ tests/unitary/*.c
++ )
++
++ foreach(test ${tests_unitary})
++ message(STATUS "Add Unitary test ${test}")
++ add_test(
++ "tests_unitary_${test}"
++ "${bash_exe}"
++ "${CMAKE_CURRENT_SOURCE_DIR}/tests/checker.sh"
++ "${test}"
++ "${test}"
++ "0"
++ )
++ endforeach()
++
++ file(
++ GLOB_RECURSE
++ tests_transformations_must_fail
++ tests/transformations/must_fail/*.c
++ )
++
++ foreach(test ${tests_transformations_must_fail})
++ message(STATUS "Add Transformation must fail test ${test}")
++ add_test(
++ "tests_transformations_must_fail_${test}"
++ "${bash_exe}"
++ "${CMAKE_CURRENT_SOURCE_DIR}/tests/checker.sh"
++ "${test}"
++ "${test}"
++ "1"
++ )
++ endforeach()
++
++ file(
++ GLOB_RECURSE
++ tests_transformations_working
++ tests/transformations/working/*.c
++ )
++
++ foreach(test ${tests_transformations_working})
++ message(STATUS "Add Transformation working test ${test}")
++ add_test(
++ "tests_transformations_working_${test}"
++ "${bash_exe}"
++ "${CMAKE_CURRENT_SOURCE_DIR}/tests/checker.sh"
++ "${test}"
++ "${test}"
++ "1"
++ )
++ endforeach()
++
++ endif()
++
++
++# Install
++
++ install(TARGETS candl LIBRARY DESTINATION lib)
++ install(TARGETS candl_static ARCHIVE DESTINATION lib)
++ install(DIRECTORY include/ DESTINATION include FILES_MATCHING PATTERN "*.h")
++ install(DIRECTORY include/ DESTINATION include FILES_MATCHING PATTERN "*.hpp")
++ install(DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/include/" DESTINATION include FILES_MATCHING PATTERN "*.h")
++ install(FILES candl-config.cmake DESTINATION lib/candl)
++ install(TARGETS candl_exe RUNTIME DESTINATION bin)
++
++
++# Little help
++
++ message(STATUS "You can execute:")
++ message(STATUS " make # To compile candl library & candl")
++ if (bash_exe)
++ message(STATUS " make test # To execute tests")
++ message(STATUS " (with the first candl in the $PATH (?))")
++ endif()
++ message(STATUS " make install # To install library, include and CMake module")
++ message(STATUS " # If you need root access:")
++ message(STATUS " # sudo make install")
++ message(STATUS " # su -c \"make install\"")
++ if (DOXYGEN_FOUND)
++ message(STATUS " make doxygen # To generate the Doxygen")
++ endif()
++ if( texi2pdf_exe)
++ message(STATUS " make doc # To generate the documentation")
++ endif()
++
++ message(STATUS "---")
+diff --git a/Makefile.am b/Makefile.am
+index fefbf45..6839b4b 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -32,39 +32,90 @@
+ # * *
+ # *****************************************************************************/
+
++#############################################################################
++
++if BUNDLED_OSL
++ MAYBE_OSL = osl
++ OSL_LA = $(top_builddir)/osl/libosl.la
++endif
++if BUNDLED_PIPLIB
++ MAYBE_PIPLIB = piplib
++ PIPLIB_LA = $(top_builddir)/piplib/libpiplib$(BITS).la
++endif
++
++SUBDIRS = $(MAYBE_OSL) $(MAYBE_PIPLIB) doc tests
++DIST_SUBDIRS = $(MAYBE_OSL) $(MAYBE_PIPLIB) doc tests
++ACLOCAL_AMFLAGS = -I m4
++
++#############################################################################
++
++bin_PROGRAMS = candl
++lib_LTLIBRARIES = libcandl.la
+
+ #############################################################################
+-SUBDIRS = doc source include tests
+
++pkginclude_HEADERS = \
++ include/candl/candl.h \
++ include/candl/dependence.h \
++ include/candl/scop.h \
++ include/candl/statement.h \
++ include/candl/macros.h \
++ include/candl/util.h \
++ include/candl/ddv.h \
++ include/candl/matrix.h \
++ include/candl/options.h \
++ include/candl/piplib.h \
++ include/candl/piplib-wrapper.h \
++ include/candl/violation.h
++
++DEFAULT_INCLUDES = -I.
++INCLUDES = -I$(top_builddir)/include -I$(top_srcdir)/include
++AM_CFLAGS = $(CFLAGS_WARN)
+
+ #############################################################################
+-ACLOCAL_AMFLAGS = -I autoconf
+
+-m4datadir = $(datadir)/aclocal
++EXTRA_DIST = COPYING.LESSER AUTHORS
++
++libcandl_la_LIBADD = @OSL_LIBS@ @PIPLIB_LIBS@ $(OSL_LA) $(PIPLIB_LA)
++libcandl_la_CPPFLAGS = @OSL_CPPFLAGS@ @PIPLIB_CPPFLAGS@ -g
++libcandl_la_LDFLAGS = @OSL_LDFLAGS@ @PIPLIB_LDFLAGS@
++libcandl_la_SOURCES = \
++ source/dependence.c \
++ source/ddv.c \
++ source/scop.c \
++ source/statement.c \
++ source/util.c \
++ source/isl-wrapper.c \
++ source/matrix.c \
++ source/options.c \
++ source/piplib-wrapper.c \
++ source/pruning.c \
++ source/violation.c
+
+-EXTRA_DIST = COPYING.LESSER AUTHORS
++#############################################################################
+
+-AUX_DIST = \
+- $(ac_aux_dir)/config.guess \
+- $(ac_aux_dir)/config.sub \
+- $(ac_aux_dir)/install-sh \
+- $(ac_aux_dir)/ltmain.sh \
+- $(ac_aux_dir)/missing \
+- $(ac_aux_dir)/depcomp \
+- $(ac_aux_dir)/texinfo.tex
++LDADD = @CANDL_LIBS@ @OSL_LIBS@ @PIPLIB_LIBS@
++candl_CPPFLAGS = @OSL_CPPFLAGS@ @PIPLIB_CPPFLAGS@ -g -Wall
++candl_LDFLAGS = #@OSL_LDFLAGS@ @PIPLIB_LDFLAGS@ # TO BE REMOVED
++candl_DEPENDENCIES = libcandl.la
++candl_SOURCES = source/candl.c
+
++#############################################################################
+
+-MAINTAINERCLEANFILES = \
+- Makefile.in \
+- aclocal.m4 \
+- configure \
+- source/stamp-h.in \
++MAINTAINERCLEANFILES = \
++ Makefile.in \
++ aclocal.m4 \
++ configure \
+ $(AUX_DIST)
+
+ #############################################################################
++
+ dist-hook:
+ (cd $(distdir) && mkdir -p $(ac_aux_dir))
+ for file in $(AUX_DIST); do \
+ cp $$file $(distdir)/$$file; \
+ done
+ #############################################################################
++
++valcheck:
++ $(MAKE) valcheck -C tests
+diff --git a/README b/README
+index 1b20de6..864d102 100644
+--- a/README
++++ b/README
+@@ -5,7 +5,7 @@
+ Install
+ -------
+
+-To install candl, PIPLib must be installed. Optionally, scoplib must
++To install candl, PIPLib must be installed. Optionally, OpenScop library must
+ be installed to enable SCoP support.
+
+ $> ./configure --with-piplib=/path/to/piplib/install --with-scoplib=/path/to/scoplib/install
+@@ -15,6 +15,32 @@ $> make
+ $> make install
+
+
++Alternatively, to use bunled PIPLib and OpenScop library, follow following command
++sequence:
++
++$> ./get_submodules.sh
++
++$> ./autogen.sh
++
++$> ./configure --with-piplib=bundled --with-scoplib=bundled
++
++$> make
++
++$> make install
++
++Alternative: Install with CMake
++-------------------------------
++
++$> mkdir build
++$> cd build
++$> cmake .. # -DCMAKE_INSTALL_PREFIX="/your/install/directory"
++$> make
++$> make test
++$> # make install # sudo make install # su -c "make install"
++$> make doc
++$> make doxygen
++
++
+ Support
+ -------
+
+diff --git a/TODO b/TODO
+new file mode 100644
+index 0000000..74b6087
+--- /dev/null
++++ b/TODO
+@@ -0,0 +1,59 @@
++
++- unchecked -commute
++
++- lastwriter not finished
++ see the FIXME in the function candl_dep_compute_lastwriter
++
++- compilation error with ISL :
++ To test it, in isl-wrapper change #ifdef CANDL_SUPPORTS_ISL to
++ #ifndef CANDL_SUPPORTS_ISL
++
++ The error is :
++ source/isl-wrapper.c: In function ‘isl_constraint_read_from_matrix’:
++ source/isl-wrapper.c:79: warning: passing argument 1 of ‘isl_equality_alloc’ from incompatible pointer type
++ /home/jpoudroux/usr/include/isl/constraint.h:28: note: expected ‘struct isl_local_space *’ but argument is of type ‘struct isl_space *’
++ source/isl-wrapper.c:81: warning: passing argument 1 of ‘isl_inequality_alloc’ from incompatible pointer type
++ /home/jpoudroux/usr/include/isl/constraint.h:29: note: expected ‘struct isl_local_space *’ but argument is of type ‘struct isl_space *’
++
++- prunnning not finish (prunning.c: line 258 to 328)
++ Uncomment the CANDL_COMPILE_PRUNNING in candl.h, or remove the ifdef in
++ prunning.c
++
++- change the type of the dependence/violation domain
++ (at the end of candl_dependence_build_system and candl_matrix_violation)
++ today it's : OSL_UNDEFINED
++
++- candl_usr_init
++ the statements must be sorted to compute the statement label
++ the problem is if the scop is reordered, the second transformed scop
++ must be "aligned" with it (the first statement need to corresponds to the first
++ statement of the second scop, but the scattering could be different)
++
++ Functions of clay, which could return a non ordered scop :
++ (they create new statements)
++ iss, unroll, peel
++
++- in pip_has_rational_point:
++ -> FIXME (dependence.c:2243)
++
++- autocorrect not implemented yet
++
++- compilation warning with gmp :
++ /usr/bin/ld: warning: libgmp.so.3, needed by /home/jpoudroux/usr/lib/libosl.so, may conflict with libgmp.so.10
++
++- autoreconf error in the piplib module
++ -> piplib must be installed in /
++
++ or execute these commands :
++ $ cd piplib
++ $ echo "AM_PROG_CC_C_O" >>configure.in
++ $ touch NEWS AUTHORS ChangeLog
++ $ cd ..
++ $ ./redo.sh
++
++ If you want to set piplib as "bundled", uncomment these lines in the
++ configure.ac :
++ 295: if test $with_piplib = bundled; then
++ 296: AC_CONFIG_SUBDIRS(piplib)
++ 297: fi
++
+diff --git a/autoconf/.gitignore b/autoconf/.gitignore
+new file mode 100644
+index 0000000..e69de29
+diff --git a/autoconf/candl.m4 b/autoconf/candl.m4
+deleted file mode 100644
+index 2d1347e..0000000
+--- a/autoconf/candl.m4
++++ /dev/null
+@@ -1,81 +0,0 @@
+-AC_DEFUN([CANDL_ARG_LIBS_DEPENDENCIES],
+-[
+-dnl Add $prefix to the library path (convenience).
+- if test -e ${prefix}/include; then
+- CPPFLAGS="${CPPFLAGS} -I${prefix}/include"
+- fi;
+- if test -e ${prefix}/lib; then
+- LDFLAGS="${LDFLAGS} -L${prefix}/lib"
+- fi;
+-dnl Offer --with-piplib.
+- AC_ARG_WITH(piplib,
+- AC_HELP_STRING([--with-piplib=DIR],
+- [DIR Location of PIPLib package]),
+- [with_piplib=$withval;
+- CPPFLAGS="${CPPFLAGS} -I$withval/include";
+- LDFLAGS="${LDFLAGS} -L$withval/lib"
+- ],
+- [with_piplib=yes])
+-dnl Check for piplib existence.
+- AS_IF([test "x$with_piplib" != xno],
+- [AC_SEARCH_LIBS([pip_solve], [piplib$BITS],
+- [LIBS="-lpiplib$BITS $LIBS";
+- AC_DEFINE([HAVE_LIBPIPLIB], [1], [Define if you have libpiplib$BITS])
+- ],
+- [if test "x$with_piplib" != xcheck; then
+- AC_MSG_FAILURE([--with-piplib was given, but test for piplib failed])
+- fi
+- ])
+- ])
+-dnl Offer --with-scoplib.
+- AC_ARG_WITH(scoplib,
+- AC_HELP_STRING([--with-scoplib=DIR],
+- [DIR Location of ScopLib package]),
+- [with_scoplib=$withval;
+- CPPFLAGS="${CPPFLAGS} -I$withval/include";
+- LDFLAGS="${LDFLAGS} -L$withval/lib"
+- ],
+- [with_scoplib=check])
+-dnl Check for scoplib existence.
+- AS_IF([test "x$with_scoplib" != xno],
+- [AC_SEARCH_LIBS([scoplib_scop_read], [scoplib],
+- [LIBS="-lscoplib $LIBS";
+- DEFINE_HAS_SCOPLIB_LIB="# define CANDL_SUPPORTS_SCOPLIB"
+- ],
+- [DEFINE_HAS_SCOPLIB_LIB=""
+- if test "x$with_scoplib" != xcheck; then
+- AC_MSG_FAILURE([Test for ScopLib failed. Use --with-scoplib to specify libscoplib path.])
+- fi
+- ])
+- ])
+-dnl Offer --with-gmp-prefix.
+- AC_ARG_WITH(gmp-prefix,
+- AC_HELP_STRING([--with-gmp-prefix=DIR],
+- [DIR Location of GMP package (only headers are needed)]),
+- [CPPFLAGS="${CPPFLAGS} -I$withval/include";
+- LDFLAGS="${LDFLAGS} -L$withval/lib";
+- ])
+-dnl Offer --with-isl.
+- AC_ARG_WITH(isl,
+- AC_HELP_STRING([--with-isl=DIR],
+- [DIR Location of Isl package]),
+- [with_isl=$withval;
+- CPPFLAGS="${CPPFLAGS} -I$withval/include";
+- LDFLAGS="${LDFLAGS} -L$withval/lib"
+- ],
+- [with_isl=check])
+-dnl Check for isl existence.
+- AS_IF([test "x$with_isl" != xno],
+- [AC_SEARCH_LIBS([isl_version], [isl],
+- [LIBS="-lisl $LIBS";
+- DEFINE_HAS_ISL_LIB="# define CANDL_SUPPORTS_ISL"
+- ],
+- [DEFINE_HAS_ISL_LIB=""
+- if test "x$with_isl" != xcheck; then
+- AC_MSG_FAILURE([Test for Isl failed. Use --with-isl to specify libisl path.])
+- fi
+- ])
+- ])
+-])
+-
+-
+#diff --git a/autogen.sh b/autogen.sh
+#index b67de1f..c27fa40 100755
+#--- a/autogen.sh
+#+++ b/autogen.sh
+#@@ -1,5 +1,8 @@
+#-#! /bin/sh
+#-
+#-aclocal -I autoconf
+#-libtoolize --force --copy
+#-autoreconf -vfi
+#+#!/bin/sh
+#+autoreconf -i
+#+if test -f osl/autogen.sh; then
+#+ (cd osl; ./autogen.sh)
+#+fi
+#+if test -f piplib/autogen.sh; then
+#+ (cd piplib; ./autogen.sh)
+#+fi
+diff --git a/candl-config.cmake b/candl-config.cmake
+new file mode 100644
+index 0000000..c1047d0
+--- /dev/null
++++ b/candl-config.cmake
+@@ -0,0 +1,25 @@
++# Try to find the candl library
++
++# CANDL_FOUND - System has candl lib
++# CANDL_INCLUDE_DIR - The candl include directory
++# CANDL_LIBRARY - Library needed to use candl
++
++
++if (CANDL_INCLUDE_DIR AND CANDL_LIBRARY)
++ # Already in cache, be silent
++ set(CANDL_FIND_QUIETLY TRUE)
++endif()
++
++find_path(CANDL_INCLUDE_DIR NAMES candl/candl.h)
++find_library(CANDL_LIBRARY NAMES candl)
++
++if (CANDL_LIBRARY AND CANDL_INCLUDE_DIR)
++ message(STATUS "Library candl found =) ${CANDL_LIBRARY}")
++else()
++ message(STATUS "Library candl not found =(")
++endif()
++
++include(FindPackageHandleStandardArgs)
++FIND_PACKAGE_HANDLE_STANDARD_ARGS(CANDL DEFAULT_MSG CANDL_INCLUDE_DIR CANDL_LIBRARY)
++
++mark_as_advanced(CANDL_INCLUDE_DIR CANDL_LIBRARY)
+diff --git a/configure.ac b/configure.ac
+new file mode 100644
+index 0000000..03c9ce4
+--- /dev/null
++++ b/configure.ac
+@@ -0,0 +1,320 @@
++dnl /**-------------------------------------------------------------------**
++dnl ** CAnDL **
++dnl **-------------------------------------------------------------------**
++dnl ** configure.in **
++dnl **-------------------------------------------------------------------**
++dnl ** First version: september 8th 2003 **
++dnl **-------------------------------------------------------------------**/
++dnl
++dnl /**************************************************************************
++dnl * CAnDL : the Chunky Analyser for Dependences in Loops (experimental) *
++dnl ***************************************************************************
++dnl * *
++dnl * Copyright (C) 2003-2008 Cedric Bastoul *
++dnl * *
++dnl * This is free software; you can redistribute it and/or modify it under *
++dnl * the terms of the GNU General Public License as published by the Free *
++dnl * Software Foundation; either version 2 of the License, or (at your *
++dnl * option) any later version. *
++dnl * *
++dnl * This software is distributed in the hope that it will be useful, but *
++dnl * WITHOUT ANY WARRANTY; without even the implied warranty of *
++dnl * MERCHANTABILITYor FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
++dnl * General Public License for more details. *
++dnl * *
++dnl * You should have received a copy of the GNU General Public License along *
++dnl * with software; if not, write to the Free Software Foundation, Inc., *
++dnl * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA *
++dnl * *
++dnl * CAnDL, the Chunky Dependence Analyser *
++dnl * Written by Cedric Bastoul, Cedric.Bastoul at inria.fr *
++dnl * *
++dnl ***************************************************************************/
++
++m4_define([version_major], [0])
++m4_define([version_minor], [0])
++m4_define([version_revision], [1])
++
++AC_PREREQ(2.53)
++
++dnl Fill here the @bug email adress.
++AC_INIT([candl], [0.6.2], [cedric.bastoul at inria.fr,pouchet at cse.ohio-state.edu])
++
++AC_CONFIG_SRCDIR([include/candl/candl.h])
++
++dnl Put as most as possible configuration files to an auxialiry
++dnl directory.
++AC_CONFIG_AUX_DIR(autoconf)
++AC_CONFIG_MACRO_DIR([m4])
++
++dnl Initialize automake. Here, a special tar version that enables
++dnl (very) long filenames.
++#AM_INIT_AUTOMAKE([1.9 tar-ustar no-define foreign dist-bzip2])
++AM_INIT_AUTOMAKE([foreign])
++m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])])
++
++dnl default version
++BITS="MP"
++CPPFLAGS=-DCANDL_LINEAR_VALUE_IS_MP
++
++
++dnl /**************************************************************************
++dnl * Checking *
++dnl **************************************************************************/
++
++
++dnl Checks for programs.
++AC_PROG_CC
++AC_PROG_LN_S
++AC_PROG_MAKE_SET
++AC_CHECK_PROG(CD, cd)
++AC_PROG_INSTALL
++AC_PROG_LIBTOOL
++AC_CHECK_PROGS(DOXYGEN,doxygen,doxygen)
++
++AX_CC_MAXOPT
++AC_SUBST(CFLAGS_WARN)
++AX_CFLAGS_WARN_ALL(CFLAGS_WARN)
++
++dnl Checks for typedefs, structures, and compiler characteristics.
++AC_C_CONST
++AC_TYPE_SIZE_T
++
++dnl Checks for header files.
++AC_HEADER_STDC
++AC_CHECK_HEADERS([errno.h stddef.h stdlib.h string.h strings.h unistd.h])
++
++dnl Checks for library functions.
++AC_CHECK_FUNCS(strtol)
++
++
++dnl /**************************************************************************
++dnl * Option setting *
++dnl **************************************************************************/
++
++dnl /**************************************************************************
++dnl * Where is the OpenScop Library? *
++dnl **************************************************************************/
++
++AX_SUBMODULE(osl,system|build|bundled,system)
++
++AC_SUBST(OSL_CPPFLAGS)
++AC_SUBST(OSL_LDFLAGS)
++AC_SUBST(OSL_LIBS)
++case "$with_osl" in
++bundled)
++ OSL_CPPFLAGS="-I$srcdir/osl/include -Iosl/include"
++ OSL_LIBS="$srcdir/osl/libosl.la"
++ ;;
++build)
++ OSL_CPPFLAGS="-I$osl_srcdir/include -I$with_osl_builddir/include"
++ OSL_LIBS="$with_osl_builddir/libosl.la"
++ ;;
++system)
++ if test "x$with_osl_prefix" != "x"; then
++ OSL_CPPFLAGS="-I$with_osl_prefix/include"
++ fi
++ if test "x$with_osl_exec_prefix" != "x"; then
++ OSL_LDFLAGS="-L$with_osl_exec_prefix/lib"
++ fi
++ OSL_LIBS="$with_osl_prefix/lib/libosl.la -losl"
++esac
++AM_CONDITIONAL(BUNDLED_OSL, test $with_osl = bundled)
++
++
++
++dnl GMP
++
++dnl Some default values cause I'm not sure whether autoconf set them, while
++dnl documentation says it does...
++gmp_package="yes"
++gmp_include_package="yes"
++gmp_library_package="yes"
++
++NEED_MP="no"
++
++dnl --with-gmp=gmp-path
++AC_ARG_WITH(gmp,
++ [ --with-gmp=DIR DIR where the gmp package is installed],
++ [ echo "Package gmp : $withval" &&
++ gmp_package=$withval &&
++ GMP_INC=$gmp_package/include &&
++ GMP_LIB=$gmp_package/lib &&
++ CPPFLAGS=-DCANDL_LINEAR_VALUE_IS_MP &&
++ NEED_MP="yes"])
++
++AC_ARG_WITH(gmp-include,
++ [ --with-gmp-include=DIR DIR where gmp.h is installed],
++ [ echo "Package gmp-include : $withval" &&
++ gmp_include_package=$withval &&
++ GMP_INC=$gmp_include_package &&
++ CPPFLAGS=-DCANDL_LINEAR_VALUE_IS_MP &&
++ NEED_MP="yes"])
++
++AC_ARG_WITH(gmp-library,
++ [ --with-gmp-library=DIR DIR where the gmp library is installed],
++ [ echo "Package gmp-library : $withval" &&
++ gmp_library_package=$withval &&
++ GMP_LIB=$gmp_library_package &&
++ CPPFLAGS=-DCANDL_LINEAR_VALUE_IS_MP &&
++ NEED_MP="yes"])
++
++AC_ARG_ENABLE(int-version,
++ [ --enable-int-version 'int' (32 bits) version is built],
++ [ echo "Package int : $enableval" &&
++ BITS="32" &&
++ CPPFLAGS=-DCANDL_LINEAR_VALUE_IS_LONG])
++
++AC_ARG_ENABLE(llint-version,
++ [ --enable-llint-version 'long long int' (64 bits) version is built],
++ [ echo "Package long long int : $enableval" &&
++ BITS="64" &&
++ CPPFLAGS=-DCANDL_LINEAR_VALUE_IS_LONGLONG])
++
++AC_ARG_ENABLE(mp-version,
++ [ --enable-mp-version 'MP' (multiple precision) version is built],
++ [ echo "Package mp : $enableval" &&
++ BITS="MP" &&
++ CPPFLAGS=-DCANDL_LINEAR_VALUE_IS_MP &&
++ NEED_MP="yes"])
++
++AC_ARG_ENABLE(piplib-hybrid,
++ [ --enable-piplib-hybrid Link with piplib-hybrid],
++ [ echo "Piplib-hybrid support : $enableval" &&
++ if test "x$enableval" = "xyes"; then
++ CPPFLAGS=-DCANDL_HAS_PIPLIB_HYBRID
++ fi])
++
++
++dnl /**************************************************************************
++dnl * Where is the PipLib Library? *
++dnl **************************************************************************/
++
++AX_SUBMODULE(piplib,system|build|bundled,system)
++
++AC_SUBST(PIPLIB_CPPFLAGS)
++AC_SUBST(PIPLIB_LDFLAGS)
++AC_SUBST(PIPLIB_LIBS)
++case "$with_piplib" in
++bundled)
++ PIPLIB_CPPFLAGS="-I$srcdir/piplib/include -Ipiplib/include"
++ PIPLIB_LIBS="$srcdir/piplib/libpiplib$BITS.la"
++ ;;
++build)
++ PIPLIB_CPPFLAGS="-I$piplib_srcdir/include -I$with_piplib_builddir/include"
++ PIPLIB_LIBS="$with_piplib_builddir/libpiplib$BITS.la"
++ ;;
++system)
++ if test "x$with_piplib_prefix" != "x"; then
++ PIPLIB_CPPFLAGS="-I$with_piplib_prefix/include"
++ fi
++ if test "x$with_piplib_exec_prefix" != "x"; then
++ PIPLIB_LDFLAGS="-L$with_piplib_exec_prefix/lib"
++ fi
++ PIPLIB_LIBS="$with_piplib_prefix/lib/libpiplib$BITS.la -lpiplib$BITS"
++esac
++AM_CONDITIONAL(BUNDLED_PIPLIB, test $with_piplib = bundled)
++
++
++
++dnl /**************************************************************************
++dnl * Where is GMP? *
++dnl **************************************************************************/
++
++
++dnl Checking for gmp
++AC_MSG_CHECKING(whether gmp works)
++if test "$gmp_package" = "no"; then
++ echo "GMP package not defined"
++ AC_MSG_RESULT(no)
++ TO_BUILD_MP=""
++else
++ if test "$NEED_MP" = "no"; then
++ echo "Mode normal GMP"
++ TO_BUILD="$TO_BUILD MP"
++ AC_CHECK_HEADER(gmp.h,
++ [AC_SEARCH_LIBS([__gmpz_init], [gmp],
++ [LIBS="$LIBS -lgmp"],
++ [echo "Can't find gmp library." &&
++ echo "MP version will not be built." &&
++ TO_BUILD_MP=""])],
++ [echo "Can't find gmp headers." &&
++ echo "MP version will not be built." &&
++ TO_BUILD_MP=""])
++ else
++ dnl Default given by --with-X is "yes", --without-X is "no". We also
++ dnl initialized manually all gmp_package* variables to "yes" (thus they are
++ dnl supposed to be "yes" except if the user set them himself).
++ if test "$gmp_package" != "yes" ; then
++ echo "(GMP path has been set by user)"
++ GMP_DIR=$gmp_package
++ dnl Useful for AC_CHECK_X to find what we want.
++ CPPFLAGS="-I$GMP_DIR/include $CPPFLAGS"
++ LDFLAGS="-L$GMP_DIR/lib $LDFLAGS"
++ fi
++
++ if test "$gmp_include_package" != "yes" ; then
++ CPPFLAGS="-I$GMP_INC $CPPFLAGS"
++ fi
++
++ if test "$gmp_library_package" != "yes" ; then
++ LDFLAGS="-L$GMP_LIB $LDFLAGS"
++ fi
++
++ AC_CHECK_HEADER(gmp.h,
++ [],
++ [AC_MSG_ERROR(Can't find gmp headers.)])
++ AC_SEARCH_LIBS([__gmpz_init], [gmp],
++ [LIBS="$LIBS -lgmp"],
++ [AC_MSG_ERROR(Can't find gmp library.)])
++
++ AC_MSG_RESULT(yes)
++ fi
++fi
++
++dnl /**************************************************************************
++dnl * Substitutions *
++dnl **************************************************************************/
++
++
++dnl Substitutions to do.
++AC_SUBST(BITS)
++AC_SUBST(DEFINE_HAS_ISL_LIB)
++AC_SUBST(ac_aux_dir)
++AC_SUBST(abs_top_srcdir)
++
++
++dnl Configure Makefiles.
++AC_CONFIG_FILES([
++ Makefile
++ doc/Makefile
++ doc/Doxyfile
++ include/candl/macros.h
++ include/candl/piplib.h
++ tests/Makefile
++ ],
++ [test -z "$CONFIG_HEADERS" || echo timestamp > source/stamp-h.in])
++
++#if test $with_piplib = system; then
++# AC_CONFIG_SUBDIRS(piplib)
++#fi
++if test $with_osl = bundled; then
++ AC_CONFIG_SUBDIRS(osl)
++fi
++
++dnl forcing candl to use local libcandl.la
++dnl if --prefix is not specified
++CANDL_LIBS="$srcdir/libcandl.la -lcandl"
++AC_SUBST(CANDL_LIBS)
++
++
++
++AC_OUTPUT
++
++echo " /*-----------------------------------------------*"
++echo " * Candl configuration is OK *"
++echo " *-----------------------------------------------*/"
++echo "It appears that your system is OK to start Candl compilation. You need"
++echo "now to type \"make\". Lastly type \"make install\" to install Candl on"
++echo "your system (log as root if necessary)."
++
+diff --git a/configure.in b/configure.in
+deleted file mode 100644
+index f6cf7ad..0000000
+--- a/configure.in
++++ /dev/null
+@@ -1,233 +0,0 @@
+-dnl /**-------------------------------------------------------------------**
+-dnl ** CAnDL **
+-dnl **-------------------------------------------------------------------**
+-dnl ** configure.in **
+-dnl **-------------------------------------------------------------------**
+-dnl ** First version: september 8th 2003 **
+-dnl **-------------------------------------------------------------------**/
+-dnl
+-dnl /**************************************************************************
+-dnl * CAnDL : the Chunky Analyser for Dependences in Loops (experimental) *
+-dnl ***************************************************************************
+-dnl * *
+-dnl * Copyright (C) 2003-2008 Cedric Bastoul *
+-dnl * *
+-dnl * This is free software; you can redistribute it and/or modify it under *
+-dnl * the terms of the GNU General Public License as published by the Free *
+-dnl * Software Foundation; either version 2 of the License, or (at your *
+-dnl * option) any later version. *
+-dnl * *
+-dnl * This software is distributed in the hope that it will be useful, but *
+-dnl * WITHOUT ANY WARRANTY; without even the implied warranty of *
+-dnl * MERCHANTABILITYor FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
+-dnl * General Public License for more details. *
+-dnl * *
+-dnl * You should have received a copy of the GNU General Public License along *
+-dnl * with software; if not, write to the Free Software Foundation, Inc., *
+-dnl * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA *
+-dnl * *
+-dnl * CAnDL, the Chunky Dependence Analyser *
+-dnl * Written by Cedric Bastoul, Cedric.Bastoul at inria.fr *
+-dnl * *
+-dnl ***************************************************************************/
+-
+-
+-AC_PREREQ(2.13)
+-dnl Fill here the @bug email adress.
+-AC_INIT([candl], [0.6.2], [cedric.bastoul at inria.fr,pouchet at cse.ohio-state.edu])
+-dnl A common file, which serve as a test.
+-AC_CONFIG_SRCDIR([include/candl/program.h])
+-dnl Put as most as possible configuration files to an auxialiry
+-dnl directory.
+-AC_CONFIG_AUX_DIR([autoconf])
+-dnl Initialize automake. Here, a special tar version that enables
+-dnl (very) long filenames.
+-AM_INIT_AUTOMAKE([1.9 tar-ustar no-define foreign dist-bzip2])
+-
+-
+-dnl default version
+-BITS="64"
+-CPPFLAGS=-DLINEAR_VALUE_IS_LONGLONG
+-
+-
+-dnl /**************************************************************************
+-dnl * Checking *
+-dnl **************************************************************************/
+-
+-
+-dnl Checks for programs.
+-AC_PROG_CC
+-AC_PROG_LN_S
+-AC_PROG_MAKE_SET
+-AC_CHECK_PROG(CD, cd)
+-AC_PROG_LIBTOOL
+-AC_CHECK_PROGS(DOXYGEN,doxygen,doxygen)
+-
+-dnl Checks for typedefs, structures, and compiler characteristics.
+-AC_C_CONST
+-AC_TYPE_SIZE_T
+-
+-dnl Checks for header files.
+-AC_HEADER_STDC
+-AC_CHECK_HEADERS([errno.h stddef.h stdlib.h string.h strings.h unistd.h])
+-
+-dnl Checks for library functions.
+-AC_CHECK_FUNCS(strtol)
+-
+-
+-dnl /**************************************************************************
+-dnl * Option setting *
+-dnl **************************************************************************/
+-
+-dnl Some default values cause I'm not sure whether autoconf set them, while
+-dnl documentation says it does...
+-gmp_package="yes"
+-gmp_include_package="yes"
+-gmp_library_package="yes"
+-
+-NEED_MP="no"
+-
+-dnl --with-gmp=gmp-path
+-AC_ARG_WITH(gmp,
+- [ --with-gmp=DIR DIR where the gmp package is installed],
+- [ echo "Package gmp : $withval" &&
+- gmp_package=$withval &&
+- GMP_INC=$gmp_package/include &&
+- GMP_LIB=$gmp_package/lib &&
+- CPPFLAGS=-DLINEAR_VALUE_IS_MP &&
+- NEED_MP="yes"])
+-
+-AC_ARG_WITH(gmp-include,
+- [ --with-gmp-include=DIR DIR where gmp.h is installed],
+- [ echo "Package gmp-include : $withval" &&
+- gmp_include_package=$withval &&
+- GMP_INC=$gmp_include_package &&
+- CPPFLAGS=-DLINEAR_VALUE_IS_MP &&
+- NEED_MP="yes"])
+-
+-AC_ARG_WITH(gmp-library,
+- [ --with-gmp-library=DIR DIR where the gmp library is installed],
+- [ echo "Package gmp-library : $withval" &&
+- gmp_library_package=$withval &&
+- GMP_LIB=$gmp_library_package &&
+- CPPFLAGS=-DLINEAR_VALUE_IS_MP &&
+- NEED_MP="yes"])
+-
+-AC_ARG_ENABLE(int-version,
+- [ --enable-int-version 'int' (32 bits) version is built],
+- [ echo "Package int : $enableval" &&
+- BITS="32" &&
+- CPPFLAGS=-DLINEAR_VALUE_IS_LONG])
+-
+-AC_ARG_ENABLE(llint-version,
+- [ --enable-llint-version 'long long int' (64 bits) version is built],
+- [ echo "Package long long int : $enableval" &&
+- BITS="64" &&
+- CPPFLAGS=-DLINEAR_VALUE_IS_LONGLONG])
+-
+-AC_ARG_ENABLE(mp-version,
+- [ --enable-mp-version 'MP' (multiple precision) version is built],
+- [ echo "Package mp : $enableval" &&
+- BITS="MP" &&
+- CPPFLAGS=-DLINEAR_VALUE_IS_MP &&
+- NEED_MP="yes"])
+-
+-AC_ARG_ENABLE(piplib-hybrid,
+- [ --enable-piplib-hybrid Link with piplib-hybrid],
+- [ echo "Piplib-hybrid support : $enableval" &&
+- if test "x$enableval" = "xyes"; then
+- CPPFLAGS=-DCANDL_HAS_PIPLIB_HYBRID
+- fi])
+-
+-
+-dnl /**************************************************************************
+-dnl * Where is GMP? *
+-dnl **************************************************************************/
+-
+-
+-dnl Checking for gmp
+-AC_MSG_CHECKING(whether gmp works)
+-if test "$gmp_package" = "no"; then
+- echo "GMP package not defined"
+- AC_MSG_RESULT(no)
+- TO_BUILD_MP=""
+-else
+- if test "$NEED_MP" = "no"; then
+- echo "Mode normal GMP"
+- TO_BUILD="$TO_BUILD MP"
+- AC_CHECK_HEADER(gmp.h,
+- [AC_SEARCH_LIBS([__gmpz_init], [gmp],
+- [LIBS="$LIBS -lgmp"],
+- [echo "Can't find gmp library." &&
+- echo "MP version will not be built." &&
+- TO_BUILD_MP=""])],
+- [echo "Can't find gmp headers." &&
+- echo "MP version will not be built." &&
+- TO_BUILD_MP=""])
+- else
+- dnl Default given by --with-X is "yes", --without-X is "no". We also
+- dnl initialized manually all gmp_package* variables to "yes" (thus they are
+- dnl supposed to be "yes" except if the user set them himself).
+-
+- if test "$gmp_package" != "yes" ; then
+- echo "(GMP path has been set by user)"
+- GMP_DIR=$gmp_package
+- dnl Useful for AC_CHECK_X to find what we want.
+- CPPFLAGS="-I$GMP_DIR/include $CPPFLAGS"
+- LDFLAGS="-L$GMP_DIR/lib $LDFLAGS"
+- fi
+-
+- if test "$gmp_include_package" != "yes" ; then
+- CPPFLAGS="-I$GMP_INC $CPPFLAGS"
+- fi
+-
+- if test "$gmp_library_package" != "yes" ; then
+- LDFLAGS="-L$GMP_LIB $LDFLAGS"
+- fi
+-
+- AC_CHECK_HEADER(gmp.h,
+- [],
+- [AC_MSG_ERROR(Can't find gmp headers.)])
+- AC_SEARCH_LIBS([__gmpz_init], [gmp],
+- [LIBS="$LIBS -lgmp"],
+- [AC_MSG_ERROR(Can't find gmp library.)])
+-
+- AC_MSG_RESULT(yes)
+- fi
+-fi
+-
+-CANDL_ARG_LIBS_DEPENDENCIES
+-
+-
+-
+-dnl /**************************************************************************
+-dnl * Substitutions *
+-dnl **************************************************************************/
+-
+-
+-dnl Substitutions to do.
+-AC_SUBST(BITS)
+-AC_SUBST(DEFINE_HAS_SCOPLIB_LIB)
+-AC_SUBST(DEFINE_HAS_ISL_LIB)
+-AC_SUBST(ac_aux_dir)
+-
+-dnl Configure Makefiles.
+-AC_CONFIG_FILES([
+- Makefile
+- doc/Makefile
+- doc/Doxyfile
+- include/Makefile
+- include/candl/candl.h
+- source/Makefile
+- tests/Makefile
+- ],
+- [test -z "$CONFIG_HEADERS" || echo timestamp > source/stamp-h.in])
+-
+-AC_OUTPUT
+-
+-echo " /*-----------------------------------------------*"
+-echo " * Candl configuration is OK *"
+-echo " *-----------------------------------------------*/"
+-echo "It appears that your system is OK to start Candl compilation. You need"
+-echo "now to type \"make\". Lastly type \"make install\" to install Candl on"
+-echo "your system (log as root if necessary)."
+diff --git a/doc/Doxyfile.in b/doc/Doxyfile.in
+index e172bda..510d8f1 100644
+--- a/doc/Doxyfile.in
++++ b/doc/Doxyfile.in
+@@ -478,7 +478,8 @@ WARN_LOGFILE =
+ # with spaces.
+
+ INPUT = @top_srcdir@/source \
+- @top_srcdir@/include/candl
++ @top_srcdir@/include/candl \
++ include/candl/macros.h
+
+ # This tag can be used to specify the character encoding of the source files that
+ # doxygen parses. Internally doxygen uses the UTF-8 encoding, which is also the default
+diff --git a/get_submodules.sh b/get_submodules.sh
+new file mode 100755
+index 0000000..94842b6
+--- /dev/null
++++ b/get_submodules.sh
+@@ -0,0 +1,9 @@
++#!/bin/bash
++git submodule init
++git submodule update
++if test -f osl/autogen.sh; then
++ (cd osl; ./autogen.sh && ./configure)
++fi
++if test -f piplib/autogen.sh; then
++ (cd piplib; ./autogen.sh && ./configure)
++fi
+diff --git a/include/Makefile.am b/include/Makefile.am
+deleted file mode 100644
+index ed48dcd..0000000
+--- a/include/Makefile.am
++++ /dev/null
+@@ -1,54 +0,0 @@
+-#
+-# /**-------------------------------------------------------------------**
+-# ** CAnDL **
+-# **-------------------------------------------------------------------**
+-# ** Makefile.am **
+-# **-------------------------------------------------------------------**
+-# ** First version: september 8th 2003 **
+-# **-------------------------------------------------------------------**/
+-#
+-#/*****************************************************************************
+-# * CAnDL : the Chunky Analyser for Dependences in Loops (experimental) *
+-# *****************************************************************************
+-# * *
+-# * Copyright (C) 2003-2008 Cedric Bastoul *
+-# * *
+-# * This is free software; you can redistribute it and/or modify it under the *
+-# * terms of the GNU General Public License as published by the Free Software *
+-# * Foundation; either version 2 of the License, or (at your option) any *
+-# * later version. *
+-# * *
+-# * This software is distributed in the hope that it will be useful, but *
+-# * WITHOUT ANY WARRANTY; without even the implied warranty of *
+-# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General *
+-# * Public License for more details. *
+-# * *
+-# * You should have received a copy of the GNU General Public License along *
+-# * with software; if not, write to the Free Software Foundation, Inc., *
+-# * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA *
+-# * *
+-# * CAnDL, the Chunky Dependence Analyser *
+-# * Written by Cedric Bastoul, Cedric.Bastoul at inria.fr *
+-# * *
+-# *****************************************************************************/
+-
+-
+-#############################################################################
+-SUBDIRS =
+-
+-#############################################################################
+-MAINTAINERCLEANFILES = Makefile.in
+-
+-#############################################################################
+-
+-pkginclude_HEADERS = \
+- candl/candl.h \
+- candl/dependence.h \
+- candl/ddv.h \
+- candl/matrix.h \
+- candl/options.h \
+- candl/piplib-wrapper.h \
+- candl/program.h \
+- candl/pruning.h \
+- candl/statement.h \
+- candl/violation.h
+diff --git a/include/candl/candl.h b/include/candl/candl.h
+new file mode 100644
+index 0000000..926511f
+--- /dev/null
++++ b/include/candl/candl.h
+@@ -0,0 +1,50 @@
++
++ /**------ ( ----------------------------------------------------------**
++ ** )\ CAnDL **
++ **----- / ) --------------------------------------------------------**
++ ** ( * ( candl.h **
++ **---- \#/ --------------------------------------------------------**
++ ** .-"#'-. First version: september 8th 2003 **
++ **--- |"-.-"| -------------------------------------------------------**
++ | |
++ | |
++ ******** | | *************************************************************
++ * CAnDL '-._,-' the Chunky Analyzer for Dependences in Loops (experimental) *
++ ******************************************************************************
++ * *
++ * Copyright (C) 2003-2008 Cedric Bastoul *
++ * *
++ * This is free software; you can redistribute it and/or modify it under the *
++ * terms of the GNU Lesser General Public License as published by the Free *
++ * Software Foundation; either version 3 of the License, or (at your option) *
++ * any later version. *
++ * *
++ * This software is distributed in the hope that it will be useful, but *
++ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY *
++ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License *
++ * for more details. *
++ * *
++ * You should have received a copy of the GNU Lesser General Public License *
++ * along with software; if not, write to the Free Software Foundation, Inc., *
++ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA *
++ * *
++ * CAnDL, the Chunky Dependence Analyser *
++ * Written by Cedric Bastoul, Cedric.Bastoul at inria.fr *
++ * *
++ ******************************************************************************/
++
++#ifndef CANDL_H
++#define CANDL_H
++
++# include <candl/ddv.h>
++# include <candl/dependence.h>
++# include <candl/macros.h>
++# include <candl/matrix.h>
++# include <candl/options.h>
++# include <candl/piplib-wrapper.h>
++# include <candl/scop.h>
++# include <candl/statement.h>
++# include <candl/util.h>
++# include <candl/violation.h>
++
++#endif
+diff --git a/include/candl/candl.h.in b/include/candl/candl.h.in
+deleted file mode 100644
+index 187981e..0000000
+--- a/include/candl/candl.h.in
++++ /dev/null
+@@ -1,160 +0,0 @@
+-
+- /**------ ( ----------------------------------------------------------**
+- ** )\ CAnDL **
+- **----- / ) --------------------------------------------------------**
+- ** ( * ( candl.h **
+- **---- \#/ --------------------------------------------------------**
+- ** .-"#'-. First version: september 8th 2003 **
+- **--- |"-.-"| -------------------------------------------------------**
+- | |
+- | |
+- ******** | | *************************************************************
+- * CAnDL '-._,-' the Chunky Analyzer for Dependences in Loops (experimental) *
+- ******************************************************************************
+- * *
+- * Copyright (C) 2003-2008 Cedric Bastoul *
+- * *
+- * This is free software; you can redistribute it and/or modify it under the *
+- * terms of the GNU Lesser General Public License as published by the Free *
+- * Software Foundation; either version 3 of the License, or (at your option) *
+- * any later version. *
+- * *
+- * This software is distributed in the hope that it will be useful, but *
+- * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY *
+- * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License *
+- * for more details. *
+- * *
+- * You should have received a copy of the GNU Lesser General Public License *
+- * along with software; if not, write to the Free Software Foundation, Inc., *
+- * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA *
+- * *
+- * CAnDL, the Chunky Dependence Analyser *
+- * Written by Cedric Bastoul, Cedric.Bastoul at inria.fr *
+- * *
+- ******************************************************************************/
+-
+-
+-/******************************************************************************
+- * THIS FILE HAS BEEN AUTOMATICALLY GENERATED FROM candl.h.in BY configure *
+- ******************************************************************************/
+-
+-
+-#ifndef CANDL_H
+-# define CANDL_H
+-
+-# define CANDL_RELEASE "@PACKAGE_VERSION@"
+-# define CANDL_VERSION "@BITS@"
+- at DEFINE_HAS_SCOPLIB_LIB@
+- at DEFINE_HAS_ISL_LIB@
+-
+-
+-# include <piplib/piplib at BITS@.h>
+-# include <candl/options.h>
+-# include <candl/matrix.h>
+-# include <candl/statement.h>
+-# include <candl/program.h>
+-# include <candl/dependence.h>
+-# include <candl/ddv.h>
+-# include <candl/violation.h>
+-# include <candl/pruning.h>
+-
+-# define CANDL_UNSET -1 /* Must be negative (we do use that property).
+- * All other constants have to be different.
+- */
+-
+-# define CANDL_RAW 1
+-# define CANDL_WAR 2
+-# define CANDL_WAW 3
+-# define CANDL_RAR 4
+-# define CANDL_RAW_SCALPRIV 5
+-
+-# define CANDL_ASSIGNMENT 1
+-# define CANDL_P_REDUCTION 2
+-# define CANDL_M_REDUCTION 3
+-# define CANDL_T_REDUCTION 4
+-
+-# define CANDL_EQUAL 1
+-# define CANDL_POSIT 2
+-# define CANDL_LATER 3
+-# define CANDL_NEVER 4
+-
+-# define CANDL_NB_INFOS 3
+-
+-# define CANDL_MAX_STRING 2048
+-# define CANDL_TEMP_OUTPUT "candl.temp"
+-
+-/* Useful macros. */
+-# define CANDL_max(x,y) ((x) > (y)? (x) : (y))
+-# define CANDL_min(x,y) ((x) < (y)? (x) : (y))
+-
+-# define CANDL_FAIL(msg) { fprintf(stderr, "[Candl] " msg "\n"); exit(1); }
+-
+-/******************************************************************************
+- * FORMAT *
+- ******************************************************************************/
+-#if defined(LINEAR_VALUE_IS_LONGLONG)
+-#define CANDL_FMT "%4lld "
+-#elif defined(LINEAR_VALUE_IS_LONG)
+-#define CANDL_FMT "%4ld "
+-#else /* GNUMP */
+-#define CANDL_FMT "%4s"
+-#endif
+-
+-/******************************************************************************
+- * CANDL GMP MACROS *
+- ******************************************************************************/
+-#ifdef LINEAR_VALUE_IS_MP
+-/* Basic Macros */
+-#define CANDL_init(val) (mpz_init((val)))
+-#define CANDL_assign(v1,v2) (mpz_set((v1),(v2)))
+-#define CANDL_set_si(val,i) (mpz_set_si((val),(i)))
+-#define CANDL_get_si(val) (mpz_get_si((val)))
+-#define CANDL_clear(val) (mpz_clear((val)))
+-#define CANDL_print(Dst,fmt,val) { char *str; \
+- str = mpz_get_str(0,10,(val)); \
+- fprintf((Dst),(fmt),str); free(str); \
+- }
+-
+-/* Boolean operators on 'Value' or 'Entier' */
+-#define CANDL_eq(v1,v2) (mpz_cmp((v1),(v2)) == 0)
+-#define CANDL_ne(v1,v2) (mpz_cmp((v1),(v2)) != 0)
+-
+-/* Binary operators on 'Value' or 'Entier' */
+-#define CANDL_increment(ref,val) (mpz_add_ui((ref),(val),1))
+-#define CANDL_decrement(ref,val) (mpz_sub_ui((ref),(val),1))
+-#define CANDL_subtract(ref,val1,val2) (mpz_sub((ref),(val1),(val2)))
+-#define CANDL_oppose(ref,val) (mpz_neg((ref),(val)))
+-
+-/* Conditional operations on 'Value' or 'Entier' */
+-#define CANDL_zero_p(val) (mpz_sgn(val) == 0)
+-#define CANDL_notzero_p(val) (mpz_sgn(val) != 0)
+-
+-/******************************************************************************
+- * CANDL BASIC TYPES MACROS *
+- ******************************************************************************/
+-#else
+-/* Basic Macros */
+-#define CANDL_init(val) ((val) = 0)
+-#define CANDL_assign(v1,v2) ((v1) = (v2))
+-#define CANDL_set_si(val,i) ((val) = (Entier)(i))
+-#define CANDL_get_si(val) ((val))
+-#define CANDL_clear(val) ((val) = 0)
+-#define CANDL_print(Dst,fmt,val) (fprintf((Dst),(fmt),(val)))
+-
+-/* Boolean operators on 'Value' or 'Entier' */
+-#define CANDL_eq(v1,v2) ((v1)==(v2))
+-#define CANDL_ne(v1,v2) ((v1)!=(v2))
+-
+-/* Binary operators on 'Value' or 'Entier' */
+-#define CANDL_increment(ref,val) ((ref) = (val)+(Entier)(1))
+-#define CANDL_decrement(ref,val) ((ref) = (val)-(Entier)(1))
+-#define CANDL_subtract(ref,val1,val2) ((ref) = (val1)-(val2))
+-#define CANDL_oppose(ref,val) ((ref) = (-(val)))
+-
+-/* Conditional operations on 'Value' or 'Entier' */
+-#define CANDL_zero_p(val) CANDL_eq(val,0)
+-#define CANDL_notzero_p(val) CANDL_ne(val,0)
+-
+-#endif
+-
+-#endif // !CANDL_H
+diff --git a/include/candl/ddv.h b/include/candl/ddv.h
+index bbc97db..8ae9a61 100644
+--- a/include/candl/ddv.h
++++ b/include/candl/ddv.h
+@@ -38,26 +38,18 @@
+ * \author Louis-Noel Pouchet
+ */
+
+-
+ #ifndef CANDL_DDV_H
+ # define CANDL_DDV_H
+
+-
+ # include <stdio.h>
+-# include <candl/statement.h>
+-# include <candl/matrix.h>
+-# include <candl/program.h>
+-# include <candl/options.h>
+-# include <candl/dependence.h>
+-
+-
+
+ # if defined(__cplusplus)
+ extern "C"
+ {
+ # endif
+
+-
++struct osl_scop;
++struct osl_dependence;
+
+ /******************************************************************************
+ * Dependence Distance structures *
+@@ -112,9 +104,6 @@ extern "C"
+
+ typedef struct candl_ddv CandlDDV;
+
+-
+-
+-
+ /******************************************************************************
+ * Memory deallocation function *
+ ******************************************************************************/
+@@ -127,7 +116,6 @@ extern "C"
+ CandlDDV*
+ candl_ddv_malloc();
+
+-
+ /**
+ * candl_ddv_alloc: Allocate a ddv for a loop of depth 'size'.
+ *
+@@ -136,7 +124,6 @@ candl_ddv_malloc();
+ CandlDDV*
+ candl_ddv_alloc(int);
+
+-
+ /**
+ * candl_ddv_free: Free a ddv.
+ *
+@@ -145,7 +132,6 @@ candl_ddv_alloc(int);
+ void
+ candl_ddv_free(CandlDDV*);
+
+-
+ /**
+ * candl_ddv_set_type_at: Set the type of a ddv component. Type is one of
+ * '=', '>', '<', '*' or 'constant' as defined by the enum e_dv_type.
+@@ -173,12 +159,10 @@ candl_ddv_set_value_at(CandlDDV*, int, int);
+ void
+ candl_ddv_set_deptype(CandlDDV*, int);
+
+-
+ /******************************************************************************
+ * Structure display function *
+ ******************************************************************************/
+
+-
+ /**
+ * candl_ddv_print: print a ddv.
+ *
+@@ -186,7 +170,6 @@ candl_ddv_set_deptype(CandlDDV*, int);
+ void
+ candl_ddv_print(FILE*, CandlDDV*);
+
+-
+ /******************************************************************************
+ * Processing functions *
+ ******************************************************************************/
+@@ -199,7 +182,7 @@ candl_ddv_print(FILE*, CandlDDV*);
+ *
+ */
+ CandlDDV*
+-candl_ddv_extract_in_loop(CandlProgram*, CandlDependence*, int);
++candl_ddv_extract_in_loop(struct osl_scop*, struct osl_dependence*, int);
+
+ /**
+ * candl_loops_are_permutable: output 1 if the 2 loops are permutable.
+@@ -207,10 +190,7 @@ candl_ddv_extract_in_loop(CandlProgram*, CandlDependence*, int);
+ *
+ */
+ int
+-candl_loops_are_permutable(CandlProgram* program, CandlDependence* deps,
+- int loop_id1, int loop_id2);
+-
+-
++candl_loops_are_permutable(struct osl_scop*, struct osl_dependence*, int, int);
+
+ # if defined(__cplusplus)
+ }
+diff --git a/include/candl/dependence.h b/include/candl/dependence.h
+index 0f40e65..9205de4 100644
+--- a/include/candl/dependence.h
++++ b/include/candl/dependence.h
+@@ -33,153 +33,99 @@
+ * *
+ ******************************************************************************/
+
+-
+ #ifndef CANDL_DEPENDENCE_H
+ # define CANDL_DEPENDENCE_H
+
+-
+ # include <stdio.h>
+-# include <candl/statement.h>
+-# include <candl/matrix.h>
+-# include <candl/program.h>
+ # include <candl/options.h>
+
+-
+-
+-# define CANDL_ARRAY_BUFF_SIZE 2048
+-# define CANDL_VAR_UNDEF 1
+-# define CANDL_VAR_IS_DEF 2
+-# define CANDL_VAR_IS_USED 3
+-# define CANDL_VAR_IS_DEF_USED 4
+-
++# define CANDL_ARRAY_BUFF_SIZE 2048
++# define CANDL_VAR_UNDEF 1
++# define CANDL_VAR_IS_DEF 2
++# define CANDL_VAR_IS_USED 3
++# define CANDL_VAR_IS_DEF_USED 4
+
+ # if defined(__cplusplus)
+ extern "C"
+ {
+ # endif
+
+-
+-/**
+- * CandlDependence structure:
+- * this structure contains all the informations about a data dependence, it is
+- * also a node of the linked list of all dependences of the dependence graph.
+- */
+-struct candldependence
+-{ CandlStatement * source; /**< Pointer to source statement. */
+- CandlStatement * target; /**< Pointer to target statement. */
+- int depth; /**< Dependence level. */
+- int type; /**< Dependence type: a dependence from source
+- * to target can be:
+- * - CANDL_UNSET if the dependence type is
+- * still not set,
+- * - CANDL_RAW if source writes M and
+- * target read M (flow-dependence),
+- * - CANDL_WAR if source reads M and
+- * target writes M (anti-dependence),
+- * - CANDL_WAW if source writes M and
+- * target writes M too (output-dependence)
+- * - CANDL_RAR if source reads M and
+- * target reads M too (input-dependence).
+- */
+- int ref_source; /**< Position of source reference. */
+- int ref_target; /**< Position of target reference. */
+- CandlMatrix * domain; /**< Dependence polyhedron. */
+-
+- void* usr; /**< User field, for library users
+- convenience. */
+- struct candldependence * next; /**< Pointer to next dependence */
+-};
+-typedef struct candldependence CandlDependence;
+-typedef struct candldependence candl_dependence_t;
+-typedef struct candldependence * candl_dependence_p;
+-
+-
+-/******************************************************************************
+- * Structure display function *
+- ******************************************************************************/
+-void candl_dependence_print_structure(FILE *, candl_dependence_p, int);
+-void candl_dependence_print(FILE *, candl_dependence_p);
+-void candl_dependence_pprint(FILE *, candl_dependence_p);
+-void candl_dependence_view(candl_dependence_p);
+-# ifdef CANDL_SUPPORTS_SCOPLIB
+-CandlDependence* candl_dependence_read_from_scop(scoplib_scop_p, CandlProgram*);
+-void candl_dependence_update_scop_with_deps(scoplib_scop_p, CandlDependence*);
+-void candl_dependence_print_scop(FILE*, FILE*, CandlDependence*);
+-# endif
++struct osl_relation;
++struct osl_statement;
++struct osl_scop;
++struct osl_dependence;
+
+ #ifdef CANDL_SUPPORTS_ISL
+-CandlDependence* candl_dependence_isl_simplify(CandlDependence*, CandlProgram*);
++struct osl_dependence* candl_dependence_isl_simplify(struct osl_dependence*,
++ struct osl_scop*);
+ # endif
+
+-
+-/******************************************************************************
+- * Memory alloc/dealloc function *
+- ******************************************************************************/
+-candl_dependence_p candl_dependence_malloc();
+-void candl_dependence_free(candl_dependence_p);
+-
++/*+***************************************************************************
++ * Structure display function *
++ *****************************************************************************/
++void candl_dependence_pprint(FILE*, struct osl_dependence*);
++void candl_dependence_view(struct osl_dependence*);
+
+ /******************************************************************************
+ * Processing functions *
+ ******************************************************************************/
+-int candl_dependence_gcd_test(CandlStatement*,
+- CandlStatement*,
+- CandlMatrix*, int);
+-int candl_dependence_check(CandlProgram *,
+- candl_dependence_p,
+- CandlOptions *);
+-candl_dependence_p candl_dependence(CandlProgram *, CandlOptions *);
+-
++int candl_dependence_gcd_test(struct osl_statement*,
++ struct osl_statement*,
++ struct osl_relation*, int);
++int candl_dependence_check(struct osl_scop*,
++ struct osl_dependence*,
++ candl_options_p);
++struct osl_dependence* candl_dependence(struct osl_scop*, candl_options_p);
++void candl_dependence_add_extension(struct osl_scop*,
++ candl_options_p);
++
++/*+***************************************************************************
++ * Memory allocation/deallocation function *
++ *****************************************************************************/
++void candl_dependence_init_fields(struct osl_scop*,
++ struct osl_dependence*);
+
+ /******************************************************************************
+ * Scalar analysis functions *
+ ******************************************************************************/
+-int
+-candl_dependence_var_is_scalar (candl_program_p, int);
+-
+-CandlStatement**
+-candl_dependence_refvar_chain(candl_program_p, CandlStatement*, int, int);
+-
+-int
+-candl_dependence_var_is_ref(CandlStatement*, int);
+-
+-int
+-candl_dependence_check_domain_is_included(CandlStatement*, CandlStatement*,
+- CandlMatrix*, int);
+-
+-int
+-candl_dependence_scalar_is_privatizable_at(candl_program_p, int, int);
+-
+-int
+-candl_dependence_is_loop_carried (candl_program_p, CandlDependence*, int);
+-
+-void
+-candl_dependence_prune_scalar_waw (candl_program_p, CandlOptions*,
+- CandlDependence**);
+-
+-void
+-candl_dependence_prune_with_privatization (candl_program_p, CandlOptions*,
+- CandlDependence**);
+-
+-int
+-candl_dependence_scalar_renaming(candl_program_p, CandlOptions*,
+- CandlDependence**);
+-
+-int
+-candl_dependence_analyze_scalars(candl_program_p, CandlOptions*);
++int candl_dependence_var_is_scalar(struct osl_scop*, int);
++struct osl_statement** candl_dependence_refvar_chain(struct osl_scop*,
++ struct osl_statement*, int, int);
++int candl_dependence_var_is_ref(struct osl_statement*, int);
++int candl_dependence_check_domain_is_included(
++ struct osl_statement*,
++ struct osl_statement*,
++ struct osl_relation*, int);
++int candl_dependence_scalar_is_privatizable_at(
++ struct osl_scop*, int, int);
++int candl_dependence_is_loop_carried(struct osl_scop*,
++ struct osl_dependence*, int);
++void candl_dependence_prune_scalar_waw(struct osl_scop*,
++ candl_options_p,
++ struct osl_dependence**);
++void candl_dependence_prune_with_privatization(
++ struct osl_scop*,
++ candl_options_p,
++ struct osl_dependence**);
++int candl_dependence_scalar_renaming(struct osl_scop*,
++ candl_options_p,
++ struct osl_dependence**);
++int candl_dependence_analyze_scalars(struct osl_scop*,
++ candl_options_p);
+
+ /******************************************************************************
+ * Miscellaneous functions *
+ ******************************************************************************/
+-int
+-candl_num_dependences(CandlDependence *candl_deps);
+-
+-void
+-candl_compute_last_writer (CandlDependence *dep, CandlProgram *prog);
++struct osl_relation* candl_dependence_get_relation_ref_source_in_dep(
++ struct osl_dependence*);
++struct osl_relation* candl_dependence_get_relation_ref_target_in_dep(
++ struct osl_dependence*);
++int candl_num_dependences(struct osl_dependence*);
++void candl_compute_last_writer(struct osl_dependence*,
++ struct osl_scop*);
++struct osl_dependence* candl_dependence_prune_transitively_covered(
++ struct osl_dependence*);
+
+-CandlDependence*
+-candl_dependence_prune_transitively_covered (CandlDependence* deps);
+-
+ # if defined(__cplusplus)
+ }
+ # endif
+diff --git a/include/candl/macros.h.in b/include/candl/macros.h.in
+new file mode 100644
+index 0000000..def4643
+--- /dev/null
++++ b/include/candl/macros.h.in
+@@ -0,0 +1,160 @@
++
++ /**------ ( ----------------------------------------------------------**
++ ** )\ CAnDL **
++ **----- / ) --------------------------------------------------------**
++ ** ( * ( candl.h **
++ **---- \#/ --------------------------------------------------------**
++ ** .-"#'-. First version: september 8th 2003 **
++ **--- |"-.-"| -------------------------------------------------------**
++ | |
++ | |
++ ******** | | *************************************************************
++ * CAnDL '-._,-' the Chunky Analyzer for Dependences in Loops (experimental) *
++ ******************************************************************************
++ * *
++ * Copyright (C) 2003-2008 Cedric Bastoul *
++ * *
++ * This is free software; you can redistribute it and/or modify it under the *
++ * terms of the GNU Lesser General Public License as published by the Free *
++ * Software Foundation; either version 3 of the License, or (at your option) *
++ * any later version. *
++ * *
++ * This software is distributed in the hope that it will be useful, but *
++ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY *
++ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License *
++ * for more details. *
++ * *
++ * You should have received a copy of the GNU Lesser General Public License *
++ * along with software; if not, write to the Free Software Foundation, Inc., *
++ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA *
++ * *
++ * CAnDL, the Chunky Dependence Analyser *
++ * Written by Cedric Bastoul, Cedric.Bastoul at inria.fr *
++ * *
++ ******************************************************************************/
++
++
++/******************************************************************************
++ * THIS FILE HAS BEEN AUTOMATICALLY GENERATED FROM macros.h.in BY configure *
++ ******************************************************************************/
++
++#ifndef CANDL_MACROS_H
++# define CANDL_MACROS_H
++
++# define CANDL_EQUAL 1
++# define CANDL_POSIT 2
++# define CANDL_LATER 3
++# define CANDL_NEVER 4
++
++# define CANDL_NB_INFOS 3
++
++# define CANDL_MAX_STRING 2048
++# define CANDL_TEMP_OUTPUT "candl.temp"
++
++# define CANDL_RELEASE "@PACKAGE_VERSION@"
++# define CANDL_VERSION "@BITS@"
++ at DEFINE_HAS_ISL_LIB@
++
++/* Useful macros. */
++# define CANDL_max(x,y) ((x) > (y)? (x) : (y))
++# define CANDL_min(x,y) ((x) < (y)? (x) : (y))
++
++# define CANDL_info(msg) \
++ do { \
++ fprintf(stderr,"[Candl] Info: "msg" (%s).\n", __func__); \
++ } while (0)
++
++# define CANDL_warning(msg) \
++ do { \
++ fprintf(stderr,"[Candl] Warning: "msg" (%s).\n", __func__); \
++ } while (0)
++
++# define CANDL_error(msg) \
++ do { \
++ fprintf(stderr,"[Candl] Error: "msg" (%s).\n", __func__); \
++ exit(1); \
++ } while (0)
++
++# define CANDL_malloc(ptr, type, size) \
++ do { \
++ if (((ptr) = (type)malloc(size)) == NULL) \
++ CANDL_error("memory overflow"); \
++ } while (0)
++
++# define CANDL_realloc(ptr, type, size) \
++ do { \
++ if (((ptr) = (type)realloc(ptr, size)) == NULL) \
++ CANDL_error("memory overflow"); \
++ } while (0)
++
++# define CANDL_fail(msg) { fprintf(stderr, "[Candl] " msg "\n"); exit(1); }
++
++/******************************************************************************
++ * FORMAT *
++ ******************************************************************************/
++#if defined(CANDL_LINEAR_VALUE_IS_LONGLONG)
++#define CANDL_FMT "%4lld "
++#elif defined(CANDL_LINEAR_VALUE_IS_LONG)
++#define CANDL_FMT "%4ld "
++#else /* GNUMP */
++#define CANDL_FMT "%4s"
++#endif
++
++/******************************************************************************
++ * CANDL GMP MACROS *
++ ******************************************************************************/
++#ifdef CANDL_LINEAR_VALUE_IS_MP
++/* Basic Macros */
++#define CANDL_init(val) (mpz_init((val)))
++#define CANDL_assign(v1,v2) (mpz_set((v1),(v2)))
++#define CANDL_set_si(val,i) (mpz_set_si((val),(i)))
++#define CANDL_get_si(val) (mpz_get_si((val)))
++#define CANDL_clear(val) (mpz_clear((val)))
++#define CANDL_print(Dst,fmt,val) { char *str; \
++ str = mpz_get_str(0,10,(val)); \
++ fprintf((Dst),(fmt),str); free(str); \
++ }
++
++/* Boolean operators on 'Value' or 'Entier' */
++#define CANDL_eq(v1,v2) (mpz_cmp((v1),(v2)) == 0)
++#define CANDL_ne(v1,v2) (mpz_cmp((v1),(v2)) != 0)
++
++/* Binary operators on 'Value' or 'Entier' */
++#define CANDL_increment(ref,val) (mpz_add_ui((ref),(val),1))
++#define CANDL_decrement(ref,val) (mpz_sub_ui((ref),(val),1))
++#define CANDL_subtract(ref,val1,val2) (mpz_sub((ref),(val1),(val2)))
++#define CANDL_oppose(ref,val) (mpz_neg((ref),(val)))
++
++/* Conditional operations on 'Value' or 'Entier' */
++#define CANDL_zero_p(val) (mpz_sgn(val) == 0)
++#define CANDL_notzero_p(val) (mpz_sgn(val) != 0)
++
++/******************************************************************************
++ * CANDL BASIC TYPES MACROS *
++ ******************************************************************************/
++#else
++/* Basic Macros */
++#define CANDL_init(val) ((val) = 0)
++#define CANDL_assign(v1,v2) ((v1) = (v2))
++#define CANDL_set_si(val,i) ((val) = (Entier)(i))
++#define CANDL_get_si(val) ((val))
++#define CANDL_clear(val) ((val) = 0)
++#define CANDL_print(Dst,fmt,val) (fprintf((Dst),(fmt),(val)))
++
++/* Boolean operators on 'Value' or 'Entier' */
++#define CANDL_eq(v1,v2) ((v1)==(v2))
++#define CANDL_ne(v1,v2) ((v1)!=(v2))
++
++/* Binary operators on 'Value' or 'Entier' */
++#define CANDL_increment(ref,val) ((ref) = (val)+(Entier)(1))
++#define CANDL_decrement(ref,val) ((ref) = (val)-(Entier)(1))
++#define CANDL_subtract(ref,val1,val2) ((ref) = (val1)-(val2))
++#define CANDL_oppose(ref,val) ((ref) = (-(val)))
++
++/* Conditional operations on 'Value' or 'Entier' */
++#define CANDL_zero_p(val) CANDL_eq(val,0)
++#define CANDL_notzero_p(val) CANDL_ne(val,0)
++
++#endif
++
++#endif // !CANDL_MACROS_H
+diff --git a/include/candl/matrix.h b/include/candl/matrix.h
+index 7bbc13b..60e525f 100644
+--- a/include/candl/matrix.h
++++ b/include/candl/matrix.h
+@@ -33,92 +33,26 @@
+ * *
+ ******************************************************************************/
+
+-
+ #ifndef CANDL_MATRIX_H
+ # define CANDL_MATRIX_H
+
+-# include <stdio.h>
+-# include <piplib/piplib.h>
+-
+-# ifdef LINEAR_VALUE_IS_LONG
+-# define CLAN_INT_T_IS_LONG
+-# endif
+-# ifdef LINEAR_VALUE_IS_LONGLONG
+-# define CLAN_INT_T_IS_LONGLONG
+-# endif
+-# ifdef LINEAR_VALUE_IS_MP
+-# define CLAN_INT_T_IS_MP
+-# endif
++# include <candl/violation.h>
+
+ # if defined(__cplusplus)
+ extern "C"
+ {
+ # endif
+
++struct osl_relation;
++struct osl_dependence;
+
+-/**
+- * The matrix structure comes directly from PipLib (defined in piplib/piplib.h)
+- * which is directly the PolyLib Matrix (defined in polylib/types.h)
+- * here is how it looks like (at least in PipLib 1.3.5 version):
+- *
+- * struct pipmatrix
+- * { unsigned NbRows; // The number of rows (= NbConstraints in Polyhedron).
+- * unsigned NbColumns; // The number of columns (= Dimension+2 in Polyhedron).
+- * Value **p; // An array of pointers to the beginning of each row.
+- * Value *p_Init; // The matrix is stored here, contiguously in memory.
+- * int p_Init_size; // Needed to free the memory allocated by mpz_init.
+- * } ;
+- * typedef struct pipmatrix PipMatrix ;
+- */
+-
+-typedef PipMatrix CandlMatrix;
+-
+-
+-/**
+- * CandlMatrixList structure:
+- * this structure reprensents a node of a linked list of CandlMatrix structures.
+- */
+-struct candlmatrixlist
+-{ CandlMatrix * matrix; /**< An element of the list. */
+- struct candlmatrixlist * next;/**< Pointer to the next element of the list.*/
+-};
+-typedef struct candlmatrixlist CandlMatrixList;
+-
+-
+-/******************************************************************************
+- * Structure display function *
+- ******************************************************************************/
+-void candl_matrix_print_structure(FILE *, CandlMatrix *, int);
+-void candl_matrix_print(FILE *, CandlMatrix *);
+-void candl_matrix_print_data(FILE *, CandlMatrix *);
+-void candl_matrix_list_print_structure(FILE *, CandlMatrixList *, int);
+-void candl_matrix_list_print(FILE *, CandlMatrixList *);
+-
+-/******************************************************************************
+- * Memory deallocation function *
+- ******************************************************************************/
+-void candl_matrix_free(CandlMatrix *);
+-void candl_matrix_list_free(CandlMatrixList *);
+-
+-
+-/******************************************************************************
+- * Reading functions *
+- ******************************************************************************/
+-CandlMatrix * candl_matrix_read(FILE *);
+-CandlMatrixList * candl_matrix_list_read(FILE *);
+-
+-
+-/******************************************************************************
+- * Processing functions *
+- ******************************************************************************/
+-CandlMatrix * candl_matrix_malloc(int, int);
+-CandlMatrixList * candl_matrix_list_malloc();
+-CandlMatrix * candl_matrix_violation(CandlMatrix *, CandlMatrix *,
+- CandlMatrix *, int, int);
+-int candl_matrix_check_point (CandlMatrix* , CandlMatrix* );
++candl_violation_p candl_matrix_violation(struct osl_dependence*,
++ struct osl_relation*, struct osl_relation*,
++ int, int);
++int candl_matrix_check_point(struct osl_relation*,
++ struct osl_relation*);
+
+ # if defined(__cplusplus)
+ }
+ # endif
+-#endif /* define CANDL_DEPENDENCE_H */
+-
++#endif
+diff --git a/include/candl/options.h b/include/candl/options.h
+index e62fddb..7154cb5 100644
+--- a/include/candl/options.h
++++ b/include/candl/options.h
+@@ -33,7 +33,6 @@
+ * *
+ ******************************************************************************/
+
+-
+ #ifndef CANDL_OPTIONS_H
+ # define CANDL_OPTIONS_H
+
+@@ -44,60 +43,55 @@ extern "C"
+ {
+ # endif
+
+-
+ /**
+- * CandlOptions structure:
++ * candl_options structure:
+ * this structure contains all the informations on the state of Candl options.
+ */
+-struct candloptions
+-{ /* OPTIONS FOR DEPENDENCE COMPUTATION */
++struct candl_options {
++ /* OPTIONS FOR DEPENDENCE COMPUTATION */
+ int waw; /**< 1 if write after write (output) dependences matter. */
+ int raw; /**< 1 if read after write (flow) dependences matter. */
+ int war; /**< 1 if write after read (anti) dependences matter. */
+ int rar; /**< 1 if read after read (input) dependences matter. */
+ int commute; /**< 1 to use commutativity to simplify dependences. */
+ int fullcheck; /**< 1 to compute all dependence violations. */
+- int depgraph; /**< 1 to print the dependence graph. */
+- int violgraph; /**< 1 to print the violation graph. */
+ int scalar_renaming; /**< 1 to enable scalar renaming. */
+ int scalar_privatization; /**< 1 to enable scalar privatization. */
+ int scalar_expansion; /**< 1 to enable scalar privatization. */
+ int lastwriter; /**< 1 to compute last writer */
+- int readscop; /**< 1 to enable reading from a .scop formatted file. */
+- int writescop; /**< 1 to enable writing to a .scop formatted file. */
+- int scoptocandl; /**< 1 to act as a .scop to candl converter. */
+ int verbose; /**< 1 to enable verbose output. */
++ int outscop; /**< 1 to print the scop with dependences. */
++ int autocorrect; /**< 1 to correct violations. fullcheck is set to 1 and
++ * the -test is required.
++ */
+ /* UNDOCUMENTED OPTIONS FOR THE AUTHOR ONLY */
+ int view; /**< 1 to call dot and gv to visualize the graphs. */
+ int structure; /**< 1 to print internal dependence structure. */
+ int prune_dups; /**< 1 to use experimental dependence pruning algorithm. */
+-} ;
+-typedef struct candloptions CandlOptions;
++};
+
++typedef struct candl_options candl_options_t;
++typedef struct candl_options* candl_options_p;
+
+ /******************************************************************************
+ * Structure display function *
+ ******************************************************************************/
+-void candl_options_print(FILE *, CandlOptions *);
+-
++void candl_options_print(FILE *, candl_options_p);
+
+ /******************************************************************************
+ * Memory deallocation function *
+ ******************************************************************************/
+-void candl_options_free(CandlOptions *);
+-
++void candl_options_free(candl_options_p);
+
+ /******************************************************************************
+ * Reading function *
+ ******************************************************************************/
+-void candl_options_read(int, char **, FILE **, FILE **, CandlOptions **);
+-
++void candl_options_read(int, char **, FILE **, FILE **, FILE**, candl_options_p*);
+
+ /******************************************************************************
+ * Processing functions *
+ ******************************************************************************/
+-CandlOptions * candl_options_malloc(void);
+-
++candl_options_p candl_options_malloc(void);
+
+ #if defined(__cplusplus)
+ }
+diff --git a/include/candl/piplib-wrapper.h b/include/candl/piplib-wrapper.h
+index 27576f5..642e366 100644
+--- a/include/candl/piplib-wrapper.h
++++ b/include/candl/piplib-wrapper.h
+@@ -41,23 +41,27 @@
+ #ifndef CANDL_PIPLIB_WRAPPER_H
+ # define CANDL_PIPLIB_WRAPPER_H
+
+-
+-# include <stdio.h>
+-# include <candl/matrix.h>
+-
+-
+-
+ # if defined(__cplusplus)
+ extern "C"
+ {
+ # endif
+-
+
+-int
+-pip_has_rational_point(PipMatrix* system,
+- PipMatrix* context,
+- int conservative);
+-
++struct osl_relation;
++struct pipmatrix;
++struct pipquast;
++struct pipoptions;
++struct piplist;
++
++struct pipmatrix* pip_relation2matrix(struct osl_relation*);
++struct osl_relation* pip_matrix2relation(struct pipmatrix*);
++int pip_has_rational_point(struct osl_relation*,
++ struct osl_relation*, int);
++struct pipquast* pip_solve_osl(struct osl_relation*, struct osl_relation*,
++ int, struct pipoptions*);
++int piplist_are_equal(struct piplist*, struct piplist*, int);
++struct osl_relation* pip_quast_to_polyhedra(struct pipquast*, int, int);
++struct osl_relation* pip_quast_no_solution_to_polyhedra(struct pipquast*,
++ int, int);
+
+ # if defined(__cplusplus)
+ }
+diff --git a/include/candl/piplib.h.in b/include/candl/piplib.h.in
+new file mode 100644
+index 0000000..dfaf33a
+--- /dev/null
++++ b/include/candl/piplib.h.in
+@@ -0,0 +1,51 @@
++
++ /**------ ( ----------------------------------------------------------**
++ ** )\ CAnDL **
++ **----- / ) --------------------------------------------------------**
++ ** ( * ( piplib.h **
++ **---- \#/ --------------------------------------------------------**
++ ** .-"#'-. First version: August 5th 2014 **
++ **--- |"-.-"| -------------------------------------------------------**
++ | |
++ | |
++ ******** | | *************************************************************
++ * CAnDL '-._,-' the Chunky Analyzer for Dependences in Loops (experimental) *
++ ******************************************************************************
++ * *
++ * Copyright (C) 2003-2008 Cedric Bastoul *
++ * *
++ * This is free software; you can redistribute it and/or modify it under the *
++ * terms of the GNU Lesser General Public License as published by the Free *
++ * Software Foundation; either version 3 of the License, or (at your option) *
++ * any later version. *
++ * *
++ * This software is distributed in the hope that it will be useful, but *
++ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY *
++ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License *
++ * for more details. *
++ * *
++ * You should have received a copy of the GNU Lesser General Public License *
++ * along with software; if not, write to the Free Software Foundation, Inc., *
++ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA *
++ * *
++ * CAnDL, the Chunky Dependence Analyzer *
++ * Written by Cedric Bastoul, Cedric.Bastoul at inria.fr *
++ * *
++ ******************************************************************************/
++
++
++#ifndef CANDL_PIPLIB_H
++# define CANDL_PIPLIB_H
++
++# if defined(__cplusplus)
++extern "C"
++ {
++# endif
++
++# include <piplib/piplib at BITS@.h>
++
++# if defined(__cplusplus)
++ }
++# endif
++#endif /* define CANDL_PIPLIB_H */
++
+diff --git a/include/candl/program.h b/include/candl/program.h
+deleted file mode 100644
+index 073016a..0000000
+--- a/include/candl/program.h
++++ /dev/null
+@@ -1,113 +0,0 @@
+-
+- /**------ ( ----------------------------------------------------------**
+- ** )\ CAnDL **
+- **----- / ) --------------------------------------------------------**
+- ** ( * ( program.h **
+- **---- \#/ --------------------------------------------------------**
+- ** .-"#'-. First version: september 9th 2003 **
+- **--- |"-.-"| -------------------------------------------------------**
+- | |
+- | |
+- ******** | | *************************************************************
+- * CAnDL '-._,-' the Chunky Analyzer for Dependences in Loops (experimental) *
+- ******************************************************************************
+- * *
+- * Copyright (C) 2003-2008 Cedric Bastoul *
+- * *
+- * This is free software; you can redistribute it and/or modify it under the *
+- * terms of the GNU General Public License as published by the Free Software *
+- * Foundation; either version 2 of the License, or (at your option) any later *
+- * version. *
+- * *
+- * This software is distributed in the hope that it will be useful, but *
+- * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY *
+- * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License *
+- * for more details. *
+- * *
+- * You should have received a copy of the GNU General Public License along *
+- * with software; if not, write to the Free Software Foundation, Inc., *
+- * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA *
+- * *
+- * CAnDL, the Chunky Dependence Analyzer *
+- * Written by Cedric Bastoul, Cedric.Bastoul at inria.fr *
+- * *
+- ******************************************************************************/
+-
+-
+-#ifndef CANDL_PROGRAM_H
+-# define CANDL_PROGRAM_H
+-
+-# include <stdio.h>
+-# include <stdlib.h>
+-# include <candl/matrix.h>
+-# include <candl/statement.h>
+-
+-# ifdef CANDL_SUPPORTS_SCOPLIB
+-# include <scoplib/scop.h>
+-# endif
+-
+-
+-# if defined(__cplusplus)
+-extern "C"
+- {
+-# endif
+-
+-/**
+- * candl_program_t structure:
+- * this structure contains all the informations about a program.
+- */
+-struct candl_program
+-{
+- CandlMatrix * context; /**< The context of the program. */
+- int nb_statements; /**< The number of statements. */
+- CandlStatement ** statement; /**< Array of nb_statements pointers on
+- * the statements of the program.
+- */
+- CandlMatrix ** transformation; /**< Array of nb_statements pointers on
+- * the transformation candidate (one
+- * function per statement). If NULL:
+- * no tranformation candidate.
+- */
+- int* scalars_privatizable;
+-};
+-typedef struct candl_program CandlProgram;
+-typedef struct candl_program candl_program_t;
+-typedef struct candl_program * candl_program_p;
+-
+-
+-/******************************************************************************
+- * Structure display function *
+- ******************************************************************************/
+-void candl_program_print_structure(FILE *, candl_program_p, int);
+-void candl_program_print(FILE *, candl_program_p);
+-void candl_program_print_candl_file(FILE *, candl_program_p);
+-
+-/******************************************************************************
+- * Memory alloc/dealloc function *
+- ******************************************************************************/
+-candl_program_p candl_program_malloc();
+-void candl_program_free(candl_program_p);
+-
+-
+-/******************************************************************************
+- * Reading function *
+- ******************************************************************************/
+-candl_program_p candl_program_read(FILE *);
+-/* This function is compiled if candl was configured with CLAN support. */
+-# ifdef CANDL_SUPPORTS_SCOPLIB
+-candl_program_p candl_program_read_scop(FILE *);
+-# endif
+-
+-/******************************************************************************
+- * Processing functions *
+- ******************************************************************************/
+-/* This function is compiled if candl was configured with CLAN support. */
+-# ifdef CANDL_SUPPORTS_SCOPLIB
+-candl_program_p candl_program_convert_scop(scoplib_scop_p, int**);
+-# endif
+-
+-# if defined(__cplusplus)
+- }
+-# endif
+-#endif /* define CANDL_PROGRAM_H */
+-
+diff --git a/include/candl/pruning.h b/include/candl/pruning.h
+deleted file mode 100644
+index ad75e38..0000000
+--- a/include/candl/pruning.h
++++ /dev/null
+@@ -1,65 +0,0 @@
+-
+- /**------ ( ----------------------------------------------------------**
+- ** )\ CAnDL **
+- **----- / ) --------------------------------------------------------**
+- ** ( * ( pruning.h **
+- **---- \#/ --------------------------------------------------------**
+- ** .-"#'-. First version: July 17th 2011 **
+- **--- |"-.-"| -------------------------------------------------------**
+- | |
+- | |
+- ******** | | *************************************************************
+- * CAnDL '-._,-' the Chunky Analyzer for Dependences in Loops (experimental) *
+- ******************************************************************************
+- * *
+- * Copyright (C) 2003-2008 Cedric Bastoul *
+- * *
+- * This is free software; you can redistribute it and/or modify it under the *
+- * terms of the GNU General Public License as published by the Free Software *
+- * Foundation; either version 2 of the License, or (at your option) any later *
+- * version. *
+- * *
+- * This software is distributed in the hope that it will be useful, but *
+- * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY *
+- * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License *
+- * for more details. *
+- * *
+- * You should have received a copy of the GNU General Public License along *
+- * with software; if not, write to the Free Software Foundation, Inc., *
+- * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA *
+- * *
+- * CAnDL, the Chunky Dependence Analyzer *
+- * Written by Cedric Bastoul, Cedric.Bastoul at inria.fr *
+- * *
+- ******************************************************************************/
+-
+-/**
+- * \file pruning.h
+- * \author Louis-Noel Pouchet
+- */
+-
+-#ifndef CANDL_PRUNING_H
+-# define CANDL_PRUNING_H
+-
+-
+-# include <stdio.h>
+-# include <candl/statement.h>
+-# include <candl/matrix.h>
+-# include <candl/program.h>
+-# include <candl/options.h>
+-# include <candl/matrix.h>
+-
+-
+-# if defined(__cplusplus)
+-extern "C"
+- {
+-# endif
+-
+-CandlDependence*
+-candl_dependence_prune_transitively_covered (CandlDependence* deps);
+-
+-# if defined(__cplusplus)
+- }
+-# endif
+-#endif /* define CANDL_PRUNING_H */
+-
+diff --git a/include/candl/scop.h b/include/candl/scop.h
+new file mode 100644
+index 0000000..ead43ed
+--- /dev/null
++++ b/include/candl/scop.h
+@@ -0,0 +1,66 @@
++
++ /**------ ( ----------------------------------------------------------**
++ ** )\ CAnDL **
++ **----- / ) --------------------------------------------------------**
++ ** ( * ( scop.h **
++ **---- \#/ --------------------------------------------------------**
++ ** .-"#'-. First version: july 9th 2012 **
++ **--- |"-.-"| -------------------------------------------------------**
++ | |
++ | |
++ ******** | | *************************************************************
++ * CAnDL '-._,-' the Chunky Analyzer for Dependences in Loops (experimental) *
++ ******************************************************************************
++ * *
++ * Copyright (C) 2003-2008 Cedric Bastoul *
++ * *
++ * This is free software; you can redistribute it and/or modify it under the *
++ * terms of the GNU General Public License as published by the Free Software *
++ * Foundation; either version 2 of the License, or (at your option) any later *
++ * version. *
++ * *
++ * This software is distributed in the hope that it will be useful, but *
++ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY *
++ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License *
++ * for more details. *
++ * *
++ * You should have received a copy of the GNU General Public License along *
++ * with software; if not, write to the Free Software Foundation, Inc., *
++ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA *
++ * *
++ * CAnDL, the Chunky Dependence Analyzer *
++ * Written by Cedric Bastoul, Cedric.Bastoul at inria.fr *
++ * *
++ ******************************************************************************/
++
++/*
++ * author Joel Poudroux
++ */
++
++#ifndef CANDL_SCOP_H
++# define CANDL_SCOP_H
++
++# if defined(__cplusplus)
++extern "C"
++ {
++# endif
++
++struct osl_scop;
++
++struct candl_scop_usr {
++ int size;
++ int *scalars_privatizable;
++ void *usr_backup; /**< If there is already a usr field, it will be saved */
++};
++
++typedef struct candl_scop_usr candl_scop_usr_t;
++typedef struct candl_scop_usr* candl_scop_usr_p;
++
++void candl_scop_usr_init(struct osl_scop*);
++void candl_scop_usr_cleanup(struct osl_scop*);
++
++# if defined(__cplusplus)
++ }
++# endif
++
++#endif
+diff --git a/include/candl/statement.h b/include/candl/statement.h
+index 9e434a4..a26eff6 100644
+--- a/include/candl/statement.h
++++ b/include/candl/statement.h
+@@ -4,7 +4,7 @@
+ **----- / ) --------------------------------------------------------**
+ ** ( * ( statement.h **
+ **---- \#/ --------------------------------------------------------**
+- ** .-"#'-. First version: september 8th 2003 **
++ ** .-"#'-. First version: july 9th 2012 **
+ **--- |"-.-"| -------------------------------------------------------**
+ | |
+ | |
+@@ -33,68 +33,38 @@
+ * *
+ ******************************************************************************/
+
++/*
++ * author Joel Poudroux
++ */
+
+ #ifndef CANDL_STATEMENT_H
+-# define CANDL_STATEMENT_H
+-
+-# include <stdio.h>
+-# include <candl/matrix.h>
++#define CANDL_STATEMENT_H
+
+ # if defined(__cplusplus)
+ extern "C"
+ {
+ # endif
+
++struct osl_scop;
++struct osl_statement;
+
+-/**
+- * CandlStatement structure:
+- * this structure contains all the informations about a program statement.
+- */
+-struct candlstatement
+-{ int label; /**< Statement number (it must be the array
+- * index of this statement in the "statement"
+- * field of the CandlProgram structure).
+- */
+- int type; /**< Statement type. */
+- int depth; /**< Nesting level (nb of surrounding loops).*/
+- int * index; /**< Iteration domain's iterator labels. */
+- CandlMatrix * domain; /**< Iteration domain. */
+- CandlMatrix * written; /**< Array of written data. */
+- CandlMatrix * read; /**< Array of read data. */
+- void* ref; /**< Reference to another structure
+- describing the same statement. */
++struct candl_statement_usr {
++ int label; /**< Statement label = 'n'th statement */
++ int depth;
++ int type;
++ int *index; /**< Loops label name */
++ void *usr_backup; /**< If there is already a usr field, it will be saved */
+ };
+-typedef struct candlstatement CandlStatement;
+-
+
+-/******************************************************************************
+- * Structure display function *
+- ******************************************************************************/
+-void candl_statement_print_structure(FILE *, CandlStatement *, int);
+-void candl_statement_print(FILE *, CandlStatement *);
+-
+-
+-/******************************************************************************
+- * Memory deallocation function *
+- ******************************************************************************/
+-void candl_statement_free(CandlStatement *);
+-
+-
+-/******************************************************************************
+- * Reading functions *
+- ******************************************************************************/
+-CandlStatement * candl_statement_read(FILE *, int, int);
+-
+-
+-/******************************************************************************
+- * Processing functions *
+- ******************************************************************************/
+-CandlStatement * candl_statement_malloc();
+-int candl_statement_commute(CandlStatement *, CandlStatement *);
++typedef struct candl_statement_usr candl_statement_usr_t;
++typedef struct candl_statement_usr* candl_statement_usr_p;
+
++void candl_statement_usr_init_all(struct osl_scop*);
++void candl_statement_usr_cleanup(struct osl_statement*);
+
+ # if defined(__cplusplus)
+ }
+ # endif
+-#endif /* define CANDL_STATEMENT_H */
+
++
++#endif
+diff --git a/include/candl/util.h b/include/candl/util.h
+new file mode 100644
+index 0000000..c20f09b
+--- /dev/null
++++ b/include/candl/util.h
+@@ -0,0 +1,61 @@
++
++ /**------ ( ----------------------------------------------------------**
++ ** )\ CAnDL **
++ **----- / ) --------------------------------------------------------**
++ ** ( * ( util.h **
++ **---- \#/ --------------------------------------------------------**
++ ** .-"#'-. First version: june 7th 2012 **
++ **--- |"-.-"| -------------------------------------------------------**
++ | |
++ | |
++ ******** | | *************************************************************
++ * CAnDL '-._,-' the Chunky Analyzer for Dependences in Loops (experimental) *
++ ******************************************************************************
++ * *
++ * Copyright (C) 2003-2008 Cedric Bastoul *
++ * *
++ * This is free software; you can redistribute it and/or modify it under the *
++ * terms of the GNU General Public License as published by the Free Software *
++ * Foundation; either version 2 of the License, or (at your option) any later *
++ * version. *
++ * *
++ * This software is distributed in the hope that it will be useful, but *
++ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY *
++ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License *
++ * for more details. *
++ * *
++ * You should have received a copy of the GNU General Public License along *
++ * with software; if not, write to the Free Software Foundation, Inc., *
++ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA *
++ * *
++ * CAnDL, the Chunky Dependence Analyzer *
++ * Written by Cedric Bastoul, Cedric.Bastoul at inria.fr *
++ * *
++ ******************************************************************************/
++
++/*
++ * author Joel Poudroux
++ */
++
++#ifndef CANDL_UTIL_H
++#define CANDL_UTIL_H
++
++# if defined(__cplusplus)
++extern "C"
++ {
++# endif
++
++struct osl_scop;
++struct osl_relation;
++struct osl_statement;
++
++int candl_util_relation_get_line(struct osl_relation*, int);
++int candl_util_statement_commute(struct osl_statement*, struct osl_statement*);
++int candl_util_check_scop(struct osl_scop*, struct osl_scop*);
++int candl_util_check_scop_list(struct osl_scop*, struct osl_scop*);
++
++# if defined(__cplusplus)
++ }
++# endif
++
++#endif
+diff --git a/include/candl/violation.h b/include/candl/violation.h
+index da09565..f395b63 100644
+--- a/include/candl/violation.h
++++ b/include/candl/violation.h
+@@ -38,52 +38,92 @@
+ # define CANDL_VIOLATION_H
+
+ # include <stdio.h>
+-# include <candl/dependence.h>
+-# include <candl/matrix.h>
++# include <candl/options.h>
+
+ # if defined(__cplusplus)
+ extern "C"
+ {
+ # endif
+
++struct osl_scop;
++struct osl_dependence;
++struct osl_relation;
+
+ /**
+ * CandlViolation structure:
+ * this structure contains all informations about a data dependence violation.
+- */
+-struct candlviolation
+-{ CandlDependence * dependence; /**< Pointer to violated dependence. */
+- int dimension; /**< Violation dimension. */
+- CandlMatrix * domain; /**< Violation polyhedron. */
+- struct candlviolation * next; /**< Pointer to next violation. */
++ *
++
++ Violation domain structure
++ ________________________________________________________________________________________________
++ / source (output) | target (input) | local dims \
++ __ |_______________________|_______________________|___________________________________________________|_____________
++ / eq |output |output |output |output |output |output |ld dom |ld acc |ld scatt |ld dom |ld acc |ld scatt | | \
++ | in |domain |access |scatt |domain |access |scatt |source |source |source |target |target |target |parameters | 1 |
++ _____________________|____|_______|_______|_______|_______|_______|_______|_______|_______|_________|_______|_______|_________|___________|___|
++ |Domain source | X | X : : | : : | X : : | : : | X | X |
++ |________________|____|_______:_______:_______|_______:_______:_______|_______:_______:_________|_______:_______:_________|___________|___|
++ |Domain target | X | : : | X : : | : : | X : : | X | X |
++ |________________|____|_______:_______:_______|_______:_______:_______|_______:_______:_________|_______:_______:_________|___________|___|
++ Dependence |Access source | X | X : X : | : : | : X : | : : | X | X |
++ system |________________|____|_______:_______:_______|_______:_______:_______|_______:_______:_________|_______:_______:_________|___________|___|
++ |Access target | X | : : | X : X : | : : | : X : | X | X |
++ |________________|____|_______:_______:_______|_______:_______:_______|_______:_______:_________|_______:_______:_________|___________|___|
++ |Access equality | | : Id : | : -Id : | : : | : : | | |
++ |________________|____|_______:_______:_______|_______:_______:_______|_______:_______:_________|_______:_______:_________|___________|___| | 0 : 0..depth-1
++ |Precedence | X | Id : : | -Id : : | : : | : : | | X | <--| 0|-1 : depth
++ ===============================================================================================================================================
++ |Scattering | | : : | : : | : : | : : | | |
++ |source | X | X : : X | : : | : : X | : : | X | X |
++ |________________|____|_______:_______:_______|_______:_______:_______|_______:_______:_________|_______:_______:_________|___________|___|
++ |Scattering | | : : | : : | : : | : : | | |
++ |target | X | : : | X : : X | : : | : : X | X | X |
++ |________________|____|_______:_______:_______|_______:_______:_______|_______:_______:_________|_______:_______:_________|___________|___|
++ |Equality at | | : : | : : | : : | : : | | |
++ |1 ... dim_1 | | : : Id | : : -Id | : : | : : | | |
++ |________________|____|_______:_______:_______|_______:_______:_______|_______:_______:_________|_______:_______:_________|___________|___|
++ at |Scat source > | | : : | : : | : : | : : | | |
++ dim |Scat target | 1 | : : 1 | : : -1 | : : | : : | |-1 |
++ \________________|____|_______:_______:_______|_______:_______:_______|_______:_______:_________|_______:_______:_________|___________|___/
++
++ (1) (2) (3) (4)
++*/
++
++struct candl_violation {
++ struct osl_dependence* dependence; /**< Pointer to violated dependence. */
++ int dimension; /**< Violation dimension. */
++ struct osl_relation* domain; /**< Violation polyhedron. */
++ struct candl_violation* next; /**< Pointer to next violation. */
++
++ int source_nb_output_dims_scattering; // (1)
++ int target_nb_output_dims_scattering; // (2)
++ int source_nb_local_dims_scattering; // (3)
++ int target_nb_local_dims_scattering; // (4)
+ };
+-typedef struct candlviolation CandlViolation;
+-
++typedef struct candl_violation candl_violation_t;
++typedef struct candl_violation* candl_violation_p;
+
+ /******************************************************************************
+ * Structure display function *
+ ******************************************************************************/
+-void candl_violation_print_structure(FILE *, CandlViolation *, int);
+-void candl_violation_print(FILE *, CandlViolation *);
+-void candl_violation_pprint(FILE *, CandlViolation *);
+-void candl_violation_view(CandlViolation *);
+-
++void candl_violation_idump(FILE*, candl_violation_p, int);
++void candl_violation_dump(FILE*, candl_violation_p);
++void candl_violation_pprint(FILE*, candl_violation_p);
++void candl_violation_view(candl_violation_p);
+
+ /******************************************************************************
+ * Memory deallocation function *
+ ******************************************************************************/
+-void candl_violation_free(CandlViolation *);
+-
++void candl_violation_free(candl_violation_p);
+
+ /******************************************************************************
+ * Processing functions *
+ ******************************************************************************/
+-CandlViolation * candl_violation_malloc();
+-void candl_violation_add(CandlViolation **, CandlViolation **,
+- CandlViolation *);
+-CandlViolation * candl_violation(CandlProgram *, CandlDependence *,
+- CandlOptions *);
+-
++candl_violation_p candl_violation_malloc();
++void candl_violation_add(candl_violation_p*, candl_violation_p*,
++ candl_violation_p);
++candl_violation_p candl_violation(struct osl_scop*, struct osl_dependence*,
++ struct osl_scop*, candl_options_p);
+
+ # if defined(__cplusplus)
+ }
+diff --git a/m4/ax_cc_maxopt.m4 b/m4/ax_cc_maxopt.m4
+new file mode 100644
+index 0000000..da415be
+--- /dev/null
++++ b/m4/ax_cc_maxopt.m4
+@@ -0,0 +1,178 @@
++# ===========================================================================
++# http://www.nongnu.org/autoconf-archive/ax_cc_maxopt.html
++# ===========================================================================
++#
++# SYNOPSIS
++#
++# AX_CC_MAXOPT
++#
++# DESCRIPTION
++#
++# Try to turn on "good" C optimization flags for various compilers and
++# architectures, for some definition of "good". (In our case, good for
++# FFTW and hopefully for other scientific codes. Modify as needed.)
++#
++# The user can override the flags by setting the CFLAGS environment
++# variable. The user can also specify --enable-portable-binary in order to
++# disable any optimization flags that might result in a binary that only
++# runs on the host architecture.
++#
++# Note also that the flags assume that ANSI C aliasing rules are followed
++# by the code (e.g. for gcc's -fstrict-aliasing), and that floating-point
++# computations can be re-ordered as needed.
++#
++# Requires macros: AX_CHECK_COMPILER_FLAGS, AX_COMPILER_VENDOR,
++# AX_GCC_ARCHFLAG, AX_GCC_X86_CPUID.
++#
++# LICENSE
++#
++# Copyright (c) 2008 Steven G. Johnson <stevenj at alum.mit.edu>
++# Copyright (c) 2008 Matteo Frigo
++#
++# This program is free software: you can redistribute it and/or modify it
++# under the terms of the GNU General Public License as published by the
++# Free Software Foundation, either version 3 of the License, or (at your
++# option) any later version.
++#
++# This program is distributed in the hope that it will be useful, but
++# WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
++# Public License for more details.
++#
++# You should have received a copy of the GNU General Public License along
++# with this program. If not, see <http://www.gnu.org/licenses/>.
++#
++# As a special exception, the respective Autoconf Macro's copyright owner
++# gives unlimited permission to copy, distribute and modify the configure
++# scripts that are the output of Autoconf when processing the Macro. You
++# need not follow the terms of the GNU General Public License when using
++# or distributing such scripts, even though portions of the text of the
++# Macro appear in them. The GNU General Public License (GPL) does govern
++# all other use of the material that constitutes the Autoconf Macro.
++#
++# This special exception to the GPL applies to versions of the Autoconf
++# Macro released by the Autoconf Archive. When you make and distribute a
++# modified version of the Autoconf Macro, you may extend this special
++# exception to the GPL to apply to your modified version as well.
++
++AC_DEFUN([AX_CC_MAXOPT],
++[
++AC_REQUIRE([AC_PROG_CC])
++AC_REQUIRE([AX_COMPILER_VENDOR])
++AC_REQUIRE([AC_CANONICAL_HOST])
++
++AC_ARG_ENABLE(portable-binary, [AC_HELP_STRING([--enable-portable-binary], [disable compiler optimizations that would produce unportable binaries])],
++ acx_maxopt_portable=$withval, acx_maxopt_portable=no)
++
++# Try to determine "good" native compiler flags if none specified via CFLAGS
++if test "$ac_test_CFLAGS" != "set"; then
++ CFLAGS=""
++ case $ax_cv_c_compiler_vendor in
++ dec) CFLAGS="-newc -w0 -O5 -ansi_alias -ansi_args -fp_reorder -tune host"
++ if test "x$acx_maxopt_portable" = xno; then
++ CFLAGS="$CFLAGS -arch host"
++ fi;;
++
++ sun) CFLAGS="-native -fast -xO5 -dalign"
++ if test "x$acx_maxopt_portable" = xyes; then
++ CFLAGS="$CFLAGS -xarch=generic"
++ fi;;
++
++ hp) CFLAGS="+Oall +Optrs_ansi +DSnative"
++ if test "x$acx_maxopt_portable" = xyes; then
++ CFLAGS="$CFLAGS +DAportable"
++ fi;;
++
++ ibm) if test "x$acx_maxopt_portable" = xno; then
++ xlc_opt="-qarch=auto -qtune=auto"
++ else
++ xlc_opt="-qtune=auto"
++ fi
++ AX_CHECK_COMPILER_FLAGS($xlc_opt,
++ CFLAGS="-O3 -qansialias -w $xlc_opt",
++ [CFLAGS="-O3 -qansialias -w"
++ echo "******************************************************"
++ echo "* You seem to have the IBM C compiler. It is *"
++ echo "* recommended for best performance that you use: *"
++ echo "* *"
++ echo "* CFLAGS=-O3 -qarch=xxx -qtune=xxx -qansialias -w *"
++ echo "* ^^^ ^^^ *"
++ echo "* where xxx is pwr2, pwr3, 604, or whatever kind of *"
++ echo "* CPU you have. (Set the CFLAGS environment var. *"
++ echo "* and re-run configure.) For more info, man cc. *"
++ echo "******************************************************"])
++ ;;
++
++ intel) CFLAGS="-O3 -ansi_alias"
++ if test "x$acx_maxopt_portable" = xno; then
++ icc_archflag=unknown
++ icc_flags=""
++ case $host_cpu in
++ i686*|x86_64*)
++ # icc accepts gcc assembly syntax, so these should work:
++ AX_GCC_X86_CPUID(0)
++ AX_GCC_X86_CPUID(1)
++ case $ax_cv_gcc_x86_cpuid_0 in # see AX_GCC_ARCHFLAG
++ *:756e6547:*:*) # Intel
++ case $ax_cv_gcc_x86_cpuid_1 in
++ *6a?:*[[234]]:*:*|*6[[789b]]?:*:*:*) icc_flags="-xK";;
++ *f3[[347]]:*:*:*|*f4[1347]:*:*:*) icc_flags="-xP -xN -xW -xK";;
++ *f??:*:*:*) icc_flags="-xN -xW -xK";;
++ esac ;;
++ esac ;;
++ esac
++ if test "x$icc_flags" != x; then
++ for flag in $icc_flags; do
++ AX_CHECK_COMPILER_FLAGS($flag, [icc_archflag=$flag; break])
++ done
++ fi
++ AC_MSG_CHECKING([for icc architecture flag])
++ AC_MSG_RESULT($icc_archflag)
++ if test "x$icc_archflag" != xunknown; then
++ CFLAGS="$CFLAGS $icc_archflag"
++ fi
++ fi
++ ;;
++
++ gnu)
++ # default optimization flags for gcc on all systems
++ CFLAGS="-O3 -fomit-frame-pointer"
++
++ # -malign-double for x86 systems
++ AX_CHECK_COMPILER_FLAGS(-malign-double, CFLAGS="$CFLAGS -malign-double")
++
++ # -fstrict-aliasing for gcc-2.95+
++ AX_CHECK_COMPILER_FLAGS(-fstrict-aliasing,
++ CFLAGS="$CFLAGS -fstrict-aliasing")
++
++ # note that we enable "unsafe" fp optimization with other compilers, too
++ AX_CHECK_COMPILER_FLAGS(-ffast-math, CFLAGS="$CFLAGS -ffast-math")
++
++ AX_GCC_ARCHFLAG($acx_maxopt_portable)
++ ;;
++ esac
++
++ if test -z "$CFLAGS"; then
++ echo ""
++ echo "********************************************************"
++ echo "* WARNING: Don't know the best CFLAGS for this system *"
++ echo "* Use ./configure CFLAGS=... to specify your own flags *"
++ echo "* (otherwise, a default of CFLAGS=-O3 will be used) *"
++ echo "********************************************************"
++ echo ""
++ CFLAGS="-O3"
++ fi
++
++ AX_CHECK_COMPILER_FLAGS($CFLAGS, [], [
++ echo ""
++ echo "********************************************************"
++ echo "* WARNING: The guessed CFLAGS don't seem to work with *"
++ echo "* your compiler. *"
++ echo "* Use ./configure CFLAGS=... to specify your own flags *"
++ echo "********************************************************"
++ echo ""
++ CFLAGS=""
++ ])
++
++fi
++])
+diff --git a/m4/ax_cflags_warn_all.m4 b/m4/ax_cflags_warn_all.m4
+new file mode 100644
+index 0000000..026c6e9
+--- /dev/null
++++ b/m4/ax_cflags_warn_all.m4
+@@ -0,0 +1,149 @@
++# ===========================================================================
++# http://www.nongnu.org/autoconf-archive/ax_cflags_warn_all.html
++# ===========================================================================
++#
++# SYNOPSIS
++#
++# AX_CFLAGS_WARN_ALL [(shellvar [,default, [A/NA]])]
++#
++# DESCRIPTION
++#
++# Try to find a compiler option that enables most reasonable warnings.
++#
++# For the GNU CC compiler it will be -Wall (and -ansi -pedantic) The
++# result is added to the shellvar being CFLAGS by default.
++#
++# Currently this macro knows about GCC, Solaris C compiler, Digital Unix C
++# compiler, C for AIX Compiler, HP-UX C compiler, IRIX C compiler, NEC
++# SX-5 (Super-UX 10) C compiler, and Cray J90 (Unicos 10.0.0.8) C
++# compiler.
++#
++# - $1 shell-variable-to-add-to : CFLAGS
++# - $2 add-value-if-not-found : nothing
++# - $3 action-if-found : add value to shellvariable
++# - $4 action-if-not-found : nothing
++#
++# LICENSE
++#
++# Copyright (c) 2008 Guido U. Draheim <guidod at gmx.de>
++#
++# This program is free software; you can redistribute it and/or modify it
++# under the terms of the GNU General Public License as published by the
++# Free Software Foundation; either version 2 of the License, or (at your
++# option) any later version.
++#
++# This program is distributed in the hope that it will be useful, but
++# WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
++# Public License for more details.
++#
++# You should have received a copy of the GNU General Public License along
++# with this program. If not, see <http://www.gnu.org/licenses/>.
++#
++# As a special exception, the respective Autoconf Macro's copyright owner
++# gives unlimited permission to copy, distribute and modify the configure
++# scripts that are the output of Autoconf when processing the Macro. You
++# need not follow the terms of the GNU General Public License when using
++# or distributing such scripts, even though portions of the text of the
++# Macro appear in them. The GNU General Public License (GPL) does govern
++# all other use of the material that constitutes the Autoconf Macro.
++#
++# This special exception to the GPL applies to versions of the Autoconf
++# Macro released by the Autoconf Archive. When you make and distribute a
++# modified version of the Autoconf Macro, you may extend this special
++# exception to the GPL to apply to your modified version as well.
++
++AC_DEFUN([AX_CFLAGS_WARN_ALL],[dnl
++AS_VAR_PUSHDEF([FLAGS],[CFLAGS])dnl
++AS_VAR_PUSHDEF([VAR],[ac_cv_cflags_warn_all])dnl
++AC_CACHE_CHECK([m4_ifval($1,$1,FLAGS) for maximum warnings],
++VAR,[VAR="no, unknown"
++ AC_LANG_SAVE
++ AC_LANG_C
++ ac_save_[]FLAGS="$[]FLAGS"
++for ac_arg dnl
++in "-pedantic % -Wall" dnl GCC
++ "-xstrconst % -v" dnl Solaris C
++ "-std1 % -verbose -w0 -warnprotos" dnl Digital Unix
++ "-qlanglvl=ansi % -qsrcmsg -qinfo=all:noppt:noppc:noobs:nocnd" dnl AIX
++ "-ansi -ansiE % -fullwarn" dnl IRIX
++ "+ESlit % +w1" dnl HP-UX C
++ "-Xc % -pvctl[,]fullmsg" dnl NEC SX-5 (Super-UX 10)
++ "-h conform % -h msglevel 2" dnl Cray C (Unicos)
++ #
++do FLAGS="$ac_save_[]FLAGS "`echo $ac_arg | sed -e 's,%%.*,,' -e 's,%,,'`
++ AC_TRY_COMPILE([],[return 0;],
++ [VAR=`echo $ac_arg | sed -e 's,.*% *,,'` ; break])
++done
++ FLAGS="$ac_save_[]FLAGS"
++ AC_LANG_RESTORE
++])
++case ".$VAR" in
++ .ok|.ok,*) m4_ifvaln($3,$3) ;;
++ .|.no|.no,*) m4_ifvaln($4,$4,[m4_ifval($2,[
++ AC_RUN_LOG([: m4_ifval($1,$1,FLAGS)="$m4_ifval($1,$1,FLAGS) $2"])
++ m4_ifval($1,$1,FLAGS)="$m4_ifval($1,$1,FLAGS) $2"])]) ;;
++ *) m4_ifvaln($3,$3,[
++ if echo " $[]m4_ifval($1,$1,FLAGS) " | grep " $VAR " 2>&1 >/dev/null
++ then AC_RUN_LOG([: m4_ifval($1,$1,FLAGS) does contain $VAR])
++ else AC_RUN_LOG([: m4_ifval($1,$1,FLAGS)="$m4_ifval($1,$1,FLAGS) $VAR"])
++ m4_ifval($1,$1,FLAGS)="$m4_ifval($1,$1,FLAGS) $VAR"
++ fi ]) ;;
++esac
++AS_VAR_POPDEF([VAR])dnl
++AS_VAR_POPDEF([FLAGS])dnl
++])
++
++dnl the only difference - the LANG selection... and the default FLAGS
++
++AC_DEFUN([AX_CXXFLAGS_WARN_ALL],[dnl
++AS_VAR_PUSHDEF([FLAGS],[CXXFLAGS])dnl
++AS_VAR_PUSHDEF([VAR],[ax_cv_cxxflags_warn_all])dnl
++AC_CACHE_CHECK([m4_ifval($1,$1,FLAGS) for maximum warnings],
++VAR,[VAR="no, unknown"
++ AC_LANG_SAVE
++ AC_LANG_CPLUSPLUS
++ ac_save_[]FLAGS="$[]FLAGS"
++for ac_arg dnl
++in "-pedantic % -Wall" dnl GCC
++ "-xstrconst % -v" dnl Solaris C
++ "-std1 % -verbose -w0 -warnprotos" dnl Digital Unix
++ "-qlanglvl=ansi % -qsrcmsg -qinfo=all:noppt:noppc:noobs:nocnd" dnl AIX
++ "-ansi -ansiE % -fullwarn" dnl IRIX
++ "+ESlit % +w1" dnl HP-UX C
++ "-Xc % -pvctl[,]fullmsg" dnl NEC SX-5 (Super-UX 10)
++ "-h conform % -h msglevel 2" dnl Cray C (Unicos)
++ #
++do FLAGS="$ac_save_[]FLAGS "`echo $ac_arg | sed -e 's,%%.*,,' -e 's,%,,'`
++ AC_TRY_COMPILE([],[return 0;],
++ [VAR=`echo $ac_arg | sed -e 's,.*% *,,'` ; break])
++done
++ FLAGS="$ac_save_[]FLAGS"
++ AC_LANG_RESTORE
++])
++case ".$VAR" in
++ .ok|.ok,*) m4_ifvaln($3,$3) ;;
++ .|.no|.no,*) m4_ifvaln($4,$4,[m4_ifval($2,[
++ AC_RUN_LOG([: m4_ifval($1,$1,FLAGS)="$m4_ifval($1,$1,FLAGS) $2"])
++ m4_ifval($1,$1,FLAGS)="$m4_ifval($1,$1,FLAGS) $2"])]) ;;
++ *) m4_ifvaln($3,$3,[
++ if echo " $[]m4_ifval($1,$1,FLAGS) " | grep " $VAR " 2>&1 >/dev/null
++ then AC_RUN_LOG([: m4_ifval($1,$1,FLAGS) does contain $VAR])
++ else AC_RUN_LOG([: m4_ifval($1,$1,FLAGS)="$m4_ifval($1,$1,FLAGS) $VAR"])
++ m4_ifval($1,$1,FLAGS)="$m4_ifval($1,$1,FLAGS) $VAR"
++ fi ]) ;;
++esac
++AS_VAR_POPDEF([VAR])dnl
++AS_VAR_POPDEF([FLAGS])dnl
++])
++
++dnl implementation tactics:
++dnl the for-argument contains a list of options. The first part of
++dnl these does only exist to detect the compiler - usually it is
++dnl a global option to enable -ansi or -extrawarnings. All other
++dnl compilers will fail about it. That was needed since a lot of
++dnl compilers will give false positives for some option-syntax
++dnl like -Woption or -Xoption as they think of it is a pass-through
++dnl to later compile stages or something. The "%" is used as a
++dnl delimimiter. A non-option comment can be given after "%%" marks
++dnl which will be shown but not added to the respective C/CXXFLAGS.
+diff --git a/m4/ax_check_compiler_flags.m4 b/m4/ax_check_compiler_flags.m4
+new file mode 100644
+index 0000000..7da8324
+--- /dev/null
++++ b/m4/ax_check_compiler_flags.m4
+@@ -0,0 +1,74 @@
++# ===========================================================================
++# http://www.nongnu.org/autoconf-archive/ax_check_compiler_flags.html
++# ===========================================================================
++#
++# SYNOPSIS
++#
++# AX_CHECK_COMPILER_FLAGS(FLAGS, [ACTION-SUCCESS], [ACTION-FAILURE])
++#
++# DESCRIPTION
++#
++# Check whether the given compiler FLAGS work with the current language's
++# compiler, or whether they give an error. (Warnings, however, are
++# ignored.)
++#
++# ACTION-SUCCESS/ACTION-FAILURE are shell commands to execute on
++# success/failure.
++#
++# LICENSE
++#
++# Copyright (c) 2009 Steven G. Johnson <stevenj at alum.mit.edu>
++# Copyright (c) 2009 Matteo Frigo
++#
++# This program is free software: you can redistribute it and/or modify it
++# under the terms of the GNU General Public License as published by the
++# Free Software Foundation, either version 3 of the License, or (at your
++# option) any later version.
++#
++# This program is distributed in the hope that it will be useful, but
++# WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
++# Public License for more details.
++#
++# You should have received a copy of the GNU General Public License along
++# with this program. If not, see <http://www.gnu.org/licenses/>.
++#
++# As a special exception, the respective Autoconf Macro's copyright owner
++# gives unlimited permission to copy, distribute and modify the configure
++# scripts that are the output of Autoconf when processing the Macro. You
++# need not follow the terms of the GNU General Public License when using
++# or distributing such scripts, even though portions of the text of the
++# Macro appear in them. The GNU General Public License (GPL) does govern
++# all other use of the material that constitutes the Autoconf Macro.
++#
++# This special exception to the GPL applies to versions of the Autoconf
++# Macro released by the Autoconf Archive. When you make and distribute a
++# modified version of the Autoconf Macro, you may extend this special
++# exception to the GPL to apply to your modified version as well.
++
++AC_DEFUN([AX_CHECK_COMPILER_FLAGS],
++[AC_PREREQ(2.59) dnl for _AC_LANG_PREFIX
++AC_MSG_CHECKING([whether _AC_LANG compiler accepts $1])
++dnl Some hackery here since AC_CACHE_VAL can't handle a non-literal varname:
++AS_LITERAL_IF([$1],
++ [AC_CACHE_VAL(AS_TR_SH(ax_cv_[]_AC_LANG_ABBREV[]_flags_[$1]), [
++ ax_save_FLAGS=$[]_AC_LANG_PREFIX[]FLAGS
++ _AC_LANG_PREFIX[]FLAGS="$1"
++ AC_COMPILE_IFELSE([AC_LANG_PROGRAM()],
++ AS_TR_SH(ax_cv_[]_AC_LANG_ABBREV[]_flags_[$1])=yes,
++ AS_TR_SH(ax_cv_[]_AC_LANG_ABBREV[]_flags_[$1])=no)
++ _AC_LANG_PREFIX[]FLAGS=$ax_save_FLAGS])],
++ [ax_save_FLAGS=$[]_AC_LANG_PREFIX[]FLAGS
++ _AC_LANG_PREFIX[]FLAGS="$1"
++ AC_COMPILE_IFELSE([AC_LANG_PROGRAM()],
++ eval AS_TR_SH(ax_cv_[]_AC_LANG_ABBREV[]_flags_[$1])=yes,
++ eval AS_TR_SH(ax_cv_[]_AC_LANG_ABBREV[]_flags_[$1])=no)
++ _AC_LANG_PREFIX[]FLAGS=$ax_save_FLAGS])
++eval ax_check_compiler_flags=$AS_TR_SH(ax_cv_[]_AC_LANG_ABBREV[]_flags_[$1])
++AC_MSG_RESULT($ax_check_compiler_flags)
++if test "x$ax_check_compiler_flags" = xyes; then
++ m4_default([$2], :)
++else
++ m4_default([$3], :)
++fi
++])dnl AX_CHECK_COMPILER_FLAGS
+diff --git a/m4/ax_compiler_vendor.m4 b/m4/ax_compiler_vendor.m4
+new file mode 100644
+index 0000000..b074260
+--- /dev/null
++++ b/m4/ax_compiler_vendor.m4
+@@ -0,0 +1,61 @@
++# ===========================================================================
++# http://www.nongnu.org/autoconf-archive/ax_compiler_vendor.html
++# ===========================================================================
++#
++# SYNOPSIS
++#
++# AX_COMPILER_VENDOR
++#
++# DESCRIPTION
++#
++# Determine the vendor of the C/C++ compiler, e.g., gnu, intel, ibm, sun,
++# hp, borland, comeau, dec, cray, kai, lcc, metrowerks, sgi, microsoft,
++# watcom, etc. The vendor is returned in the cache variable
++# $ax_cv_c_compiler_vendor for C and $ax_cv_cxx_compiler_vendor for C++.
++#
++# LICENSE
++#
++# Copyright (c) 2008 Steven G. Johnson <stevenj at alum.mit.edu>
++# Copyright (c) 2008 Matteo Frigo
++#
++# This program is free software: you can redistribute it and/or modify it
++# under the terms of the GNU General Public License as published by the
++# Free Software Foundation, either version 3 of the License, or (at your
++# option) any later version.
++#
++# This program is distributed in the hope that it will be useful, but
++# WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
++# Public License for more details.
++#
++# You should have received a copy of the GNU General Public License along
++# with this program. If not, see <http://www.gnu.org/licenses/>.
++#
++# As a special exception, the respective Autoconf Macro's copyright owner
++# gives unlimited permission to copy, distribute and modify the configure
++# scripts that are the output of Autoconf when processing the Macro. You
++# need not follow the terms of the GNU General Public License when using
++# or distributing such scripts, even though portions of the text of the
++# Macro appear in them. The GNU General Public License (GPL) does govern
++# all other use of the material that constitutes the Autoconf Macro.
++#
++# This special exception to the GPL applies to versions of the Autoconf
++# Macro released by the Autoconf Archive. When you make and distribute a
++# modified version of the Autoconf Macro, you may extend this special
++# exception to the GPL to apply to your modified version as well.
++
++AC_DEFUN([AX_COMPILER_VENDOR],
++[
++AC_CACHE_CHECK([for _AC_LANG compiler vendor], ax_cv_[]_AC_LANG_ABBREV[]_compiler_vendor,
++ [ax_cv_[]_AC_LANG_ABBREV[]_compiler_vendor=unknown
++ # note: don't check for gcc first since some other compilers define __GNUC__
++ for ventest in intel:__ICC,__ECC,__INTEL_COMPILER ibm:__xlc__,__xlC__,__IBMC__,__IBMCPP__ pathscale:__PATHCC__,__PATHSCALE__ gnu:__GNUC__ sun:__SUNPRO_C,__SUNPRO_CC hp:__HP_cc,__HP_aCC dec:__DECC,__DECCXX,__DECC_VER,__DECCXX_VER borland:__BORLANDC__,__TURBOC__ comeau:__COMO__ cray:_CRAYC kai:__KCC lcc:__LCC__ metrowerks:__MWERKS__ sgi:__sgi,sgi microsoft:_MSC_VER watcom:__WATCOMC__ portland:__PGI; do
++ vencpp="defined("`echo $ventest | cut -d: -f2 | sed 's/,/) || defined(/g'`")"
++ AC_COMPILE_IFELSE([AC_LANG_PROGRAM(,[
++#if !($vencpp)
++ thisisanerror;
++#endif
++])], [ax_cv_]_AC_LANG_ABBREV[_compiler_vendor=`echo $ventest | cut -d: -f1`; break])
++ done
++ ])
++])
+diff --git a/m4/ax_gcc_archflag.m4 b/m4/ax_gcc_archflag.m4
+new file mode 100644
+index 0000000..dedeef4
+--- /dev/null
++++ b/m4/ax_gcc_archflag.m4
+@@ -0,0 +1,213 @@
++# ===========================================================================
++# http://www.nongnu.org/autoconf-archive/ax_gcc_archflag.html
++# ===========================================================================
++#
++# SYNOPSIS
++#
++# AX_GCC_ARCHFLAG([PORTABLE?], [ACTION-SUCCESS], [ACTION-FAILURE])
++#
++# DESCRIPTION
++#
++# This macro tries to guess the "native" arch corresponding to the target
++# architecture for use with gcc's -march=arch or -mtune=arch flags. If
++# found, the cache variable $ax_cv_gcc_archflag is set to this flag and
++# ACTION-SUCCESS is executed; otherwise $ax_cv_gcc_archflag is is set to
++# "unknown" and ACTION-FAILURE is executed. The default ACTION-SUCCESS is
++# to add $ax_cv_gcc_archflag to the end of $CFLAGS.
++#
++# PORTABLE? should be either [yes] (default) or [no]. In the former case,
++# the flag is set to -mtune (or equivalent) so that the architecture is
++# only used for tuning, but the instruction set used is still portable. In
++# the latter case, the flag is set to -march (or equivalent) so that
++# architecture-specific instructions are enabled.
++#
++# The user can specify --with-gcc-arch=<arch> in order to override the
++# macro's choice of architecture, or --without-gcc-arch to disable this.
++#
++# When cross-compiling, or if $CC is not gcc, then ACTION-FAILURE is
++# called unless the user specified --with-gcc-arch manually.
++#
++# Requires macros: AX_CHECK_COMPILER_FLAGS, AX_GCC_X86_CPUID
++#
++# (The main emphasis here is on recent CPUs, on the principle that doing
++# high-performance computing on old hardware is uncommon.)
++#
++# LICENSE
++#
++# Copyright (c) 2008 Steven G. Johnson <stevenj at alum.mit.edu>
++# Copyright (c) 2008 Matteo Frigo
++#
++# This program is free software: you can redistribute it and/or modify it
++# under the terms of the GNU General Public License as published by the
++# Free Software Foundation, either version 3 of the License, or (at your
++# option) any later version.
++#
++# This program is distributed in the hope that it will be useful, but
++# WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
++# Public License for more details.
++#
++# You should have received a copy of the GNU General Public License along
++# with this program. If not, see <http://www.gnu.org/licenses/>.
++#
++# As a special exception, the respective Autoconf Macro's copyright owner
++# gives unlimited permission to copy, distribute and modify the configure
++# scripts that are the output of Autoconf when processing the Macro. You
++# need not follow the terms of the GNU General Public License when using
++# or distributing such scripts, even though portions of the text of the
++# Macro appear in them. The GNU General Public License (GPL) does govern
++# all other use of the material that constitutes the Autoconf Macro.
++#
++# This special exception to the GPL applies to versions of the Autoconf
++# Macro released by the Autoconf Archive. When you make and distribute a
++# modified version of the Autoconf Macro, you may extend this special
++# exception to the GPL to apply to your modified version as well.
++
++AC_DEFUN([AX_GCC_ARCHFLAG],
++[AC_REQUIRE([AC_PROG_CC])
++AC_REQUIRE([AC_CANONICAL_HOST])
++
++AC_ARG_WITH(gcc-arch, [AC_HELP_STRING([--with-gcc-arch=<arch>], [use architecture <arch> for gcc -march/-mtune, instead of guessing])],
++ ax_gcc_arch=$withval, ax_gcc_arch=yes)
++
++AC_MSG_CHECKING([for gcc architecture flag])
++AC_MSG_RESULT([])
++AC_CACHE_VAL(ax_cv_gcc_archflag,
++[
++ax_cv_gcc_archflag="unknown"
++
++if test "$GCC" = yes; then
++
++if test "x$ax_gcc_arch" = xyes; then
++ax_gcc_arch=""
++if test "$cross_compiling" = no; then
++case $host_cpu in
++ i[[3456]]86*|x86_64*) # use cpuid codes, in part from x86info-1.7 by D. Jones
++ AX_GCC_X86_CPUID(0)
++ AX_GCC_X86_CPUID(1)
++ case $ax_cv_gcc_x86_cpuid_0 in
++ *:756e6547:*:*) # Intel
++ case $ax_cv_gcc_x86_cpuid_1 in
++ *5[[48]]?:*:*:*) ax_gcc_arch="pentium-mmx pentium" ;;
++ *5??:*:*:*) ax_gcc_arch=pentium ;;
++ *6[[3456]]?:*:*:*) ax_gcc_arch="pentium2 pentiumpro" ;;
++ *6a?:*[[01]]:*:*) ax_gcc_arch="pentium2 pentiumpro" ;;
++ *6a?:*[[234]]:*:*) ax_gcc_arch="pentium3 pentiumpro" ;;
++ *6[[9d]]?:*:*:*) ax_gcc_arch="pentium-m pentium3 pentiumpro" ;;
++ *6[[78b]]?:*:*:*) ax_gcc_arch="pentium3 pentiumpro" ;;
++ *6??:*:*:*) ax_gcc_arch=pentiumpro ;;
++ *f3[[347]]:*:*:*|*f4[1347]:*:*:*)
++ case $host_cpu in
++ x86_64*) ax_gcc_arch="nocona pentium4 pentiumpro" ;;
++ *) ax_gcc_arch="prescott pentium4 pentiumpro" ;;
++ esac ;;
++ *f??:*:*:*) ax_gcc_arch="pentium4 pentiumpro";;
++ esac ;;
++ *:68747541:*:*) # AMD
++ case $ax_cv_gcc_x86_cpuid_1 in
++ *5[[67]]?:*:*:*) ax_gcc_arch=k6 ;;
++ *5[[8d]]?:*:*:*) ax_gcc_arch="k6-2 k6" ;;
++ *5[[9]]?:*:*:*) ax_gcc_arch="k6-3 k6" ;;
++ *60?:*:*:*) ax_gcc_arch=k7 ;;
++ *6[[12]]?:*:*:*) ax_gcc_arch="athlon k7" ;;
++ *6[[34]]?:*:*:*) ax_gcc_arch="athlon-tbird k7" ;;
++ *67?:*:*:*) ax_gcc_arch="athlon-4 athlon k7" ;;
++ *6[[68a]]?:*:*:*)
++ AX_GCC_X86_CPUID(0x80000006) # L2 cache size
++ case $ax_cv_gcc_x86_cpuid_0x80000006 in
++ *:*:*[[1-9a-f]]??????:*) # (L2 = ecx >> 16) >= 256
++ ax_gcc_arch="athlon-xp athlon-4 athlon k7" ;;
++ *) ax_gcc_arch="athlon-4 athlon k7" ;;
++ esac ;;
++ *f[[4cef8b]]?:*:*:*) ax_gcc_arch="athlon64 k8" ;;
++ *f5?:*:*:*) ax_gcc_arch="opteron k8" ;;
++ *f7?:*:*:*) ax_gcc_arch="athlon-fx opteron k8" ;;
++ *f??:*:*:*) ax_gcc_arch="k8" ;;
++ esac ;;
++ *:746e6543:*:*) # IDT
++ case $ax_cv_gcc_x86_cpuid_1 in
++ *54?:*:*:*) ax_gcc_arch=winchip-c6 ;;
++ *58?:*:*:*) ax_gcc_arch=winchip2 ;;
++ *6[[78]]?:*:*:*) ax_gcc_arch=c3 ;;
++ *69?:*:*:*) ax_gcc_arch="c3-2 c3" ;;
++ esac ;;
++ esac
++ if test x"$ax_gcc_arch" = x; then # fallback
++ case $host_cpu in
++ i586*) ax_gcc_arch=pentium ;;
++ i686*) ax_gcc_arch=pentiumpro ;;
++ esac
++ fi
++ ;;
++
++ sparc*)
++ AC_PATH_PROG([PRTDIAG], [prtdiag], [prtdiag], [$PATH:/usr/platform/`uname -i`/sbin/:/usr/platform/`uname -m`/sbin/])
++ cputype=`(((grep cpu /proc/cpuinfo | cut -d: -f2) ; ($PRTDIAG -v |grep -i sparc) ; grep -i cpu /var/run/dmesg.boot ) | head -n 1) 2> /dev/null`
++ cputype=`echo "$cputype" | tr -d ' -' |tr $as_cr_LETTERS $as_cr_letters`
++ case $cputype in
++ *ultrasparciv*) ax_gcc_arch="ultrasparc4 ultrasparc3 ultrasparc v9" ;;
++ *ultrasparciii*) ax_gcc_arch="ultrasparc3 ultrasparc v9" ;;
++ *ultrasparc*) ax_gcc_arch="ultrasparc v9" ;;
++ *supersparc*|*tms390z5[[05]]*) ax_gcc_arch="supersparc v8" ;;
++ *hypersparc*|*rt62[[056]]*) ax_gcc_arch="hypersparc v8" ;;
++ *cypress*) ax_gcc_arch=cypress ;;
++ esac ;;
++
++ alphaev5) ax_gcc_arch=ev5 ;;
++ alphaev56) ax_gcc_arch=ev56 ;;
++ alphapca56) ax_gcc_arch="pca56 ev56" ;;
++ alphapca57) ax_gcc_arch="pca57 pca56 ev56" ;;
++ alphaev6) ax_gcc_arch=ev6 ;;
++ alphaev67) ax_gcc_arch=ev67 ;;
++ alphaev68) ax_gcc_arch="ev68 ev67" ;;
++ alphaev69) ax_gcc_arch="ev69 ev68 ev67" ;;
++ alphaev7) ax_gcc_arch="ev7 ev69 ev68 ev67" ;;
++ alphaev79) ax_gcc_arch="ev79 ev7 ev69 ev68 ev67" ;;
++
++ powerpc*)
++ cputype=`((grep cpu /proc/cpuinfo | head -n 1 | cut -d: -f2 | cut -d, -f1 | sed 's/ //g') ; /usr/bin/machine ; /bin/machine; grep CPU /var/run/dmesg.boot | head -n 1 | cut -d" " -f2) 2> /dev/null`
++ cputype=`echo $cputype | sed -e 's/ppc//g;s/ *//g'`
++ case $cputype in
++ *750*) ax_gcc_arch="750 G3" ;;
++ *740[[0-9]]*) ax_gcc_arch="$cputype 7400 G4" ;;
++ *74[[4-5]][[0-9]]*) ax_gcc_arch="$cputype 7450 G4" ;;
++ *74[[0-9]][[0-9]]*) ax_gcc_arch="$cputype G4" ;;
++ *970*) ax_gcc_arch="970 G5 power4";;
++ *POWER4*|*power4*|*gq*) ax_gcc_arch="power4 970";;
++ *POWER5*|*power5*|*gr*|*gs*) ax_gcc_arch="power5 power4 970";;
++ 603ev|8240) ax_gcc_arch="$cputype 603e 603";;
++ *) ax_gcc_arch=$cputype ;;
++ esac
++ ax_gcc_arch="$ax_gcc_arch powerpc"
++ ;;
++esac
++fi # not cross-compiling
++fi # guess arch
++
++if test "x$ax_gcc_arch" != x -a "x$ax_gcc_arch" != xno; then
++for arch in $ax_gcc_arch; do
++ if test "x[]m4_default([$1],yes)" = xyes; then # if we require portable code
++ flags="-mtune=$arch"
++ # -mcpu=$arch and m$arch generate nonportable code on every arch except
++ # x86. And some other arches (e.g. Alpha) don't accept -mtune. Grrr.
++ case $host_cpu in i*86|x86_64*) flags="$flags -mcpu=$arch -m$arch";; esac
++ else
++ flags="-march=$arch -mcpu=$arch -m$arch"
++ fi
++ for flag in $flags; do
++ AX_CHECK_COMPILER_FLAGS($flag, [ax_cv_gcc_archflag=$flag; break])
++ done
++ test "x$ax_cv_gcc_archflag" = xunknown || break
++done
++fi
++
++fi # $GCC=yes
++])
++AC_MSG_CHECKING([for gcc architecture flag])
++AC_MSG_RESULT($ax_cv_gcc_archflag)
++if test "x$ax_cv_gcc_archflag" = xunknown; then
++ m4_default([$3],:)
++else
++ m4_default([$2], [CFLAGS="$CFLAGS $ax_cv_gcc_archflag"])
++fi
++])
+diff --git a/m4/ax_gcc_x86_cpuid.m4 b/m4/ax_gcc_x86_cpuid.m4
+new file mode 100644
+index 0000000..5420b09
+--- /dev/null
++++ b/m4/ax_gcc_x86_cpuid.m4
+@@ -0,0 +1,77 @@
++# ===========================================================================
++# http://www.nongnu.org/autoconf-archive/ax_gcc_x86_cpuid.html
++# ===========================================================================
++#
++# SYNOPSIS
++#
++# AX_GCC_X86_CPUID(OP)
++#
++# DESCRIPTION
++#
++# On Pentium and later x86 processors, with gcc or a compiler that has a
++# compatible syntax for inline assembly instructions, run a small program
++# that executes the cpuid instruction with input OP. This can be used to
++# detect the CPU type.
++#
++# On output, the values of the eax, ebx, ecx, and edx registers are stored
++# as hexadecimal strings as "eax:ebx:ecx:edx" in the cache variable
++# ax_cv_gcc_x86_cpuid_OP.
++#
++# If the cpuid instruction fails (because you are running a
++# cross-compiler, or because you are not using gcc, or because you are on
++# a processor that doesn't have this instruction), ax_cv_gcc_x86_cpuid_OP
++# is set to the string "unknown".
++#
++# This macro mainly exists to be used in AX_GCC_ARCHFLAG.
++#
++# LICENSE
++#
++# Copyright (c) 2008 Steven G. Johnson <stevenj at alum.mit.edu>
++# Copyright (c) 2008 Matteo Frigo
++#
++# This program is free software: you can redistribute it and/or modify it
++# under the terms of the GNU General Public License as published by the
++# Free Software Foundation, either version 3 of the License, or (at your
++# option) any later version.
++#
++# This program is distributed in the hope that it will be useful, but
++# WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
++# Public License for more details.
++#
++# You should have received a copy of the GNU General Public License along
++# with this program. If not, see <http://www.gnu.org/licenses/>.
++#
++# As a special exception, the respective Autoconf Macro's copyright owner
++# gives unlimited permission to copy, distribute and modify the configure
++# scripts that are the output of Autoconf when processing the Macro. You
++# need not follow the terms of the GNU General Public License when using
++# or distributing such scripts, even though portions of the text of the
++# Macro appear in them. The GNU General Public License (GPL) does govern
++# all other use of the material that constitutes the Autoconf Macro.
++#
++# This special exception to the GPL applies to versions of the Autoconf
++# Macro released by the Autoconf Archive. When you make and distribute a
++# modified version of the Autoconf Macro, you may extend this special
++# exception to the GPL to apply to your modified version as well.
++
++AC_DEFUN([AX_GCC_X86_CPUID],
++[AC_REQUIRE([AC_PROG_CC])
++AC_LANG_PUSH([C])
++AC_CACHE_CHECK(for x86 cpuid $1 output, ax_cv_gcc_x86_cpuid_$1,
++ [AC_RUN_IFELSE([AC_LANG_PROGRAM([#include <stdio.h>], [
++ int op = $1, eax, ebx, ecx, edx;
++ FILE *f;
++ __asm__("cpuid"
++ : "=a" (eax), "=b" (ebx), "=c" (ecx), "=d" (edx)
++ : "a" (op));
++ f = fopen("conftest_cpuid", "w"); if (!f) return 1;
++ fprintf(f, "%x:%x:%x:%x\n", eax, ebx, ecx, edx);
++ fclose(f);
++ return 0;
++])],
++ [ax_cv_gcc_x86_cpuid_$1=`cat conftest_cpuid`; rm -f conftest_cpuid],
++ [ax_cv_gcc_x86_cpuid_$1=unknown; rm -f conftest_cpuid],
++ [ax_cv_gcc_x86_cpuid_$1=unknown])])
++AC_LANG_POP([C])
++])
+diff --git a/m4/ax_submodule.m4 b/m4/ax_submodule.m4
+new file mode 100644
+index 0000000..57e3a56
+--- /dev/null
++++ b/m4/ax_submodule.m4
+@@ -0,0 +1,63 @@
++AC_DEFUN([AX_SUBMODULE],
++[
++
++AC_ARG_WITH($1,
++ [AS_HELP_STRING([--with-$1=$2],
++ [Which $1 to use])])
++case "system" in
++$2)
++ AC_ARG_WITH($1_prefix,
++ [AS_HELP_STRING([--with-$1-prefix=DIR],
++ [Prefix of $1 installation])])
++ AC_ARG_WITH($1_exec_prefix,
++ [AS_HELP_STRING([--with-$1-exec-prefix=DIR],
++ [Exec prefix of $1 installation])])
++esac
++case "build" in
++$2)
++ AC_ARG_WITH($1_builddir,
++ [AS_HELP_STRING([--with-$1-builddir=DIR],
++ [Location of $1 builddir])])
++esac
++if test "x$with_$1_prefix" != "x" -a "x$with_$1_exec_prefix" = "x"; then
++ with_$1_exec_prefix=$with_$1_prefix
++fi
++if test "x$with_$1_prefix" != "x" -o "x$with_$1_exec_prefix" != "x"; then
++ if test "x$with_$1" != "x" -a "x$with_$1" != "xsystem"; then
++ AC_MSG_ERROR([Setting $with_$1_prefix implies use of system $1])
++ fi
++ with_$1="system"
++fi
++if test "x$with_$1_builddir" != "x"; then
++ if test "x$with_$1" != "x" -a "x$with_$1" != "xbuild"; then
++ AC_MSG_ERROR([Setting $with_$1_builddir implies use of build $1])
++ fi
++ with_$1="build"
++ $1_srcdir=`echo @abs_srcdir@ | $with_$1_builddir/config.status --file=-`
++ AC_MSG_NOTICE($1 sources in $$1_srcdir)
++fi
++case "$with_$1" in
++$2)
++ ;;
++*)
++ if test -d $srcdir/.git -a \
++ -d $srcdir/$1 -a \
++ ! -d $srcdir/$1/.git; then
++ AC_MSG_WARN(
++[git repo detected, but submodule $1 not initialized])
++ AC_MSG_WARN([You may want to run])
++ AC_MSG_WARN([ git submodule init])
++ AC_MSG_WARN([ git submodule update])
++ AC_MSG_WARN([ sh autogen.sh])
++ fi
++ if test -f $srcdir/$1/configure -a "$3" != "no"; then
++ with_$1="bundled"
++ else
++ with_$1="$3"
++ fi
++ ;;
++esac
++AC_MSG_CHECKING([which $1 to use])
++AC_MSG_RESULT($with_$1)
++
++])
+diff --git a/osl b/osl
+new file mode 160000
+index 0000000..46ef4ec
+--- /dev/null
++++ b/osl
+@@ -0,0 +1 @@
++Subproject commit 46ef4ec9917713d5d51dd45331c0e74870c5375d
+diff --git a/piplib b/piplib
+new file mode 160000
+index 0000000..f2cfdd3
+--- /dev/null
++++ b/piplib
+@@ -0,0 +1 @@
++Subproject commit f2cfdd3f7a7c4c0c4f7408437205fa27bfb041ba
+diff --git a/redo.sh b/redo.sh
+new file mode 100755
+index 0000000..a1cdb50
+--- /dev/null
++++ b/redo.sh
+@@ -0,0 +1,12 @@
++#!/bin/sh
++make maintainer-clean
++#./get_submodules.sh
++./autogen.sh
++./configure \
++ --prefix=$HOME/usr \
++ --with-osl=system \
++ --with-osl-prefix=$HOME/usr \
++ --with-piplib=system \
++ --with-piplib-prefix=$HOME/usr
++
++make
+diff --git a/source/Makefile.am b/source/Makefile.am
+deleted file mode 100644
+index 3909be1..0000000
+--- a/source/Makefile.am
++++ /dev/null
+@@ -1,70 +0,0 @@
+-#
+-# /**-------------------------------------------------------------------**
+-# ** CAnDL **
+-# **-------------------------------------------------------------------**
+-# ** Makefile.am **
+-# **-------------------------------------------------------------------**
+-# ** First version: september 8th 2003 **
+-# **-------------------------------------------------------------------**/
+-#
+-#/*****************************************************************************
+-# * CAnDL : the Chunky Analyser for Dependences in Loops (experimental) *
+-# *****************************************************************************
+-# * *
+-# * Copyright (C) 2003-2008 Cedric Bastoul *
+-# * *
+-# * This is free software; you can redistribute it and/or modify it under the *
+-# * terms of the GNU General Public License as published by the Free Software *
+-# * Foundation; either version 2 of the License, or (at your option) any *
+-# * later version. *
+-# * *
+-# * This software is distributed in the hope that it will be useful, but *
+-# * WITHOUT ANY WARRANTY; without even the implied warranty of *
+-# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General *
+-# * Public License for more details. *
+-# * *
+-# * You should have received a copy of the GNU General Public License along *
+-# * with software; if not, write to the Free Software Foundation, Inc., *
+-# * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA *
+-# * *
+-# * CAnDL, the Chunky Dependence Analyser *
+-# * Written by Cedric Bastoul, Cedric.Bastoul at inria.fr *
+-# * *
+-# *****************************************************************************/
+-
+-
+-#############################################################################
+-SUBDIRS =
+-
+-#############################################################################
+-MAINTAINERCLEANFILES = Makefile.in
+-
+-INCLUDES = -I$(top_builddir) -I$(top_srcdir) \
+- -I$(top_builddir)/include \
+- -I$(top_srcdir)/include
+-
+-#############################################################################
+-
+-lib_LTLIBRARIES = libcandl.la
+-
+-
+-libcandl_la_SOURCES = \
+- dependence.c \
+- ddv.c \
+- isl-wrapper.c \
+- matrix.c \
+- options.c \
+- piplib-wrapper.c \
+- program.c \
+- pruning.c \
+- statement.c \
+- violation.c
+-
+-AM_CFLAGS = -Wall -fomit-frame-pointer -g
+-
+-
+-bin_PROGRAMS = candl
+-
+-LDADD = libcandl.la
+-
+-candl_SOURCES = candl.c
+diff --git a/source/candl.c b/source/candl.c
+index 27e8ca4..df6bf18 100644
+--- a/source/candl.c
++++ b/source/candl.c
+@@ -6,8 +6,8 @@
+ **---- \#/ --------------------------------------------------------**
+ ** .-"#'-. First version: september 8th 2003 **
+ **--- |"-.-"| -------------------------------------------------------**
+- | |
+- | |
++ | |
++ | |
+ ******** | | *************************************************************
+ * CAnDL '-._,-' the Chunky Analyzer for Dependences in Loops (experimental) *
+ ******************************************************************************
+@@ -33,98 +33,162 @@
+ * *
+ ******************************************************************************/
+
+-
+ #include <stdlib.h>
+ #include <stdio.h>
+-#include <candl/candl.h>
++#include <osl/scop.h>
++#include <osl/macros.h>
++#include <osl/util.h>
++#include <osl/extensions/dependence.h>
++#include <candl/macros.h>
+ #include <candl/dependence.h>
+-#include <candl/program.h>
+ #include <candl/violation.h>
+ #include <candl/options.h>
++#include <candl/scop.h>
++#include <candl/util.h>
++#include <candl/piplib.h>
+
+
+-int main(int argc, char * argv[])
+-{
+- CandlProgram * program = NULL;
+- CandlOptions * options;
+- CandlDependence * dependence;
+- CandlViolation * violation = NULL;
+- FILE * input, * output;
++int main(int argc, char * argv[]) {
++
++ osl_scop_p scop = NULL;
++ osl_scop_p orig_scop = NULL;
++ osl_dependence_p dep = NULL;
++ int num_scops = 0, i= 0;
++ candl_options_p options;
++ candl_violation_p *violations = NULL;
++ FILE *input, *output, *input_test;
++ int precision;
++ #if defined(CANDL_LINEAR_VALUE_IS_INT)
++ precision = OSL_PRECISION_SP;
++ #elif defined(CANDL_LINEAR_VALUE_IS_LONGLONG)
++ precision = OSL_PRECISION_DP;
++ #elif defined(CANDL_LINEAR_VALUE_IS_MP)
++ precision = OSL_PRECISION_MP;
++ #endif
+
+ /* Options and input/output file setting. */
+- candl_options_read(argc, argv, &input, &output, &options);
+-
+- /* Reading the program informations. */
+-#ifdef CANDL_SUPPORTS_SCOPLIB
+- if (options->readscop)
+- {
+- program = candl_program_read_scop(input);
+- if (options->scoptocandl)
+- {
+- if (! options->readscop)
+- program = candl_program_read_scop(input);
+- candl_program_print_candl_file(output, program);
+- candl_program_free(program);
+- candl_options_free(options);
+- return 0;
+- }
+- }
+- else
+-#endif
+- program = candl_program_read(input);
+-
<Skipped 10030 lines>
================================================================
---- gitweb:
http://git.pld-linux.org/gitweb.cgi/packages/candl.git/commitdiff/65a2ccbcf7286adc211eb5d2967d98480d041b58
More information about the pld-cvs-commit
mailing list