← Back to team overview

dolfin team mailing list archive

Re: CGAL build flag

 

Hi Andre,

Attached is a patch for adding CGAL to the build system. Please let me
know how it works for you.

Johannes

On Tue, Dec 1, 2009 at 2:25 PM, Johannes Ring <johannr@xxxxxxxxx> wrote:
> On Tue, Dec 1, 2009 at 1:33 PM, Andre Massing <massing@xxxxxxxxx> wrote:
>> Johannes Ring wrote:
>>>
>>> On Tue, Dec 1, 2009 at 11:34 AM, Anders Logg <logg@xxxxxxxxx> wrote:
>>>>
>>>> Johannes, could you help Andre to add CGAL detection and build flag to
>>>> his CGAL branch of DOLFIN:
>>>>
>>>>  https://code.launchpad.net/~massing/dolfin/cgal_branch
>>>>
>>>> Andre can give detailed instructions on which flags are needed.
>>>
>>> Yes, of course. Andre: It would be great if you also have a tiny
>>> example of CGAL that I can compile and run in the pkg-config
>>> generator.
>>
>> Ok, attached a mini file printing out the CGAL version nummer.
>> Additonally  scons must assure that CGAL >= 3.5 is used.
>
> OK, thanks.
>
> Johannes
>
>>>
>>> Johannes
>>>
>>>> The plan is to merge the CGAL branch into DOLFIN main after the
>>>> release of 0.9.5 and then make a quick release of DOLFIN 0.9.6
>>>> with the CGAL stuff.
>>>>
>>>> --
>>>> Anders
>>>>
>>>> -----BEGIN PGP SIGNATURE-----
>>>> Version: GnuPG v1.4.9 (GNU/Linux)
>>>>
>>>> iEYEARECAAYFAksU8T0ACgkQTuwUCDsYZdE2RgCfb3cyn8WMBIw2E945h2meOi3H
>>>> mxcAoJG09J5SMFd/wRDU6981tL0AFV4V
>>>> =+et7
>>>> -----END PGP SIGNATURE-----
>>>>
>>>>
>>
>
# Bazaar merge directive format 2 (Bazaar 0.90)
# revision_id: johannr@xxxxxxxxx-20091203094438-ds2b2pa7l6utf5dh
# target_branch: bzr+ssh://bazaar.launchpad.net/~massing/dolfin\
#   /cgal_branch/
# testament_sha1: ae672a2eb2c5a8a648be7c72762ca9e9a3a39c6b
# timestamp: 2009-12-03 10:51:51 +0100
# base_revision_id: massing@xxxxxxxxx-20091201235924-mrxqky2y5twbtyxw
# 
# Begin patch
=== modified file 'SConstruct'
--- SConstruct	2009-11-18 09:53:57 +0000
+++ SConstruct	2009-12-03 09:44:38 +0000
@@ -103,6 +103,7 @@
     BoolVariable("enableParmetis", "Compile with support for ParMETIS", "yes"),
     BoolVariable("enableGmp", "Compile with support for GMP", "no"),
     BoolVariable("enableZlib", "Compile with support for zlib", "yes"),
+    BoolVariable("enableCgal", "Compile with support for CGAL", "yes"),
     BoolVariable("enablePython", "Compile the Python wrappers", "yes"),
     BoolVariable("enablePydolfin", "Compile the Python wrappers of DOLFIN *deprecated*", "yes"),
     # some of the above may need extra options (like petscDir), should we
@@ -123,6 +124,7 @@
     PathVariable("withLibxml2Dir", "Specify path to libXML2", None, path_validator),
     PathVariable("withGtsDir", "Specify path to GTS", None, path_validator),
     PathVariable("withZlibDir", "Specify path to zlib", None, path_validator),
+    PathVariable("withCgalDir", "Specify path to CGAL", None, path_validator),
     #
     # a few more options originally from PyCC:
     #BoolVariable("autoFetch", "Automatically fetch datafiles from (password protected) SSH repository", 0),

=== modified file 'dolfin/SConscript'
--- dolfin/SConscript	2009-10-19 10:41:27 +0000
+++ dolfin/SConscript	2009-12-03 09:44:38 +0000
@@ -60,6 +60,8 @@
         disabled_packages.append("gmp")
     if not env["enableZlib"]:
         disabled_packages.append("zlib")
+    if not env["enableCgal"]:
+        disabled_packages.append("cgal")
 
     # Find modules in the project and dependencies:
     # only modules and configuredPackages will be used in this code:

=== modified file 'dolfin/scons.cfg'
--- dolfin/scons.cfg	2009-11-04 10:46:13 +0000
+++ dolfin/scons.cfg	2009-12-03 09:44:38 +0000
@@ -17,7 +17,8 @@
                    'mtl4': '4',
                    'parmetis': '3.1',
                    'gmp': '4.2.4',
-                   'zlib': '1.2.3'}
+                   'zlib': '1.2.3',
+		   'cgal': '3.5'}
 SwigDependencies = ['python-2', 'numpy-1','ufc-1']
 
 # List of components

=== added file 'scons/simula-scons/simula_scons/pkgconfiggenerators/cgal.py'
--- scons/simula-scons/simula_scons/pkgconfiggenerators/cgal.py	1970-01-01 00:00:00 +0000
+++ scons/simula-scons/simula_scons/pkgconfiggenerators/cgal.py	2009-12-03 09:44:38 +0000
@@ -0,0 +1,122 @@
+#!/usr/bin/env python
+import os,sys
+import string
+import os.path
+
+from commonPkgConfigUtils import *
+
+def getCgalDir(sconsEnv=None):
+    return getPackageDir("cgal", sconsEnv=sconsEnv, default="/usr")
+
+def pkgVersion(compiler=None, linker=None,
+               cflags=None, libs=None, sconsEnv=None):
+  # This is a bit special. It is given in the library as
+  # a 10 digit number, like 1030511000. We have to do some arithmetics
+  # to find the real version:
+  # (VERSION / 1000 - 1000001) / 10000 => major version (3 in this case)
+  # (VERSION / 1000 - 1000001) / 100 % 100 => minor version (5 in this case)
+  # (VERSION / 1000 - 1000001) / 10 % 10 => sub-minor version (1 in this case).
+  # 
+  # The version check also verify that we can include some CGAL headers.
+    cpp_test_version_str = r"""
+#include <CGAL/version.h>
+#include <iostream>
+
+int main() {
+  #ifdef CGAL_VERSION_NR
+    std::cout << CGAL_VERSION_NR;
+  #endif
+  return 0;
+}
+"""
+    cppfile = "cgal_config_test_version.cpp"
+    write_cppfile(cpp_test_version_str, cppfile);
+
+    if not compiler:
+        compiler = get_compiler(sconsEnv=sconsEnv)
+    if not cflags:
+        cflags = pkgCflags(sconsEnv=sconsEnv)
+
+    cmdstr = "%s -o a.out %s %s" % (compiler, cflags, cppfile)
+    compileFailed, cmdoutput = getstatusoutput(cmdstr)
+    if compileFailed:
+        remove_cppfile(cppfile)
+        raise UnableToCompileException("CGAL", cmd=cmdstr,
+                                       program=cpp_test_version_str,
+                                       errormsg=cmdoutput)
+
+    cmdstr = os.path.join(os.getcwd(), "a.out")
+    runFailed, cmdoutput = getstatusoutput(cmdstr)
+    if runFailed:
+        remove_cppfile(cppfile, execfile=True)
+        raise UnableToRunException("CGAL", errormsg=cmdoutput)
+    cgal_version_nr = int(cmdoutput)
+    cgal_major = (cgal_version_nr / 1000 - 1000001) / 10000
+    cgal_minor = (cgal_version_nr / 1000 - 1000001) / 100 % 100
+    cgal_subminor = (cgal_version_nr / 1000 - 1000001) / 10 % 10
+    full_cgal_version = "%s.%s.%s" % (cgal_major, cgal_minor, cgal_subminor)
+
+    remove_cppfile(cppfile, execfile=True)
+
+    return full_cgal_version
+
+def pkgCflags(sconsEnv=None):
+    return "-I%s -frounding-math" % \
+           os.path.join(getCgalDir(sconsEnv=sconsEnv), "include")
+
+def pkgLibs(sconsEnv=None):
+    return "-L%s -lCGAL -lCGAL_Core" % \
+           os.path.join(getCgalDir(sconsEnv), "lib")
+
+def pkgTests(forceCompiler=None, sconsEnv=None,
+             cflags=None, libs=None, version=None, **kwargs):
+    """Run the tests for this package
+     
+    If Ok, return various variables, if not we will end with an exception.
+    forceCompiler, if set, should be a tuple containing (compiler, linker)
+    or just a string, which in that case will be used as both
+    """
+
+    if not forceCompiler:
+        compiler = get_compiler(sconsEnv)
+        linker = get_linker(sconsEnv)
+    else:
+        compiler, linker = set_forced_compiler(forceCompiler)
+
+    if not cflags:
+        cflags = pkgCflags(sconsEnv=sconsEnv)
+    if not libs:
+        libs = pkgLibs(sconsEnv=sconsEnv)
+    if not version:
+        version = pkgVersion(sconsEnv=sconsEnv, compiler=compiler,
+                             linker=linker, cflags=cflags, libs=libs)
+    else:
+        # FIXME: Add a real test for this package
+        pkgVersion(sconsEnv=sconsEnv, compiler=compiler,
+                   linker=linker, cflags=cflags, libs=libs)
+
+    return version, libs, cflags
+
+def generatePkgConf(directory=None, sconsEnv=None, **kwargs):
+    if directory is None:
+        directory = suitablePkgConfDir()
+    
+    version, libs, cflags = pkgTests(sconsEnv=sconsEnv)
+
+    pkg_file_str = r"""Name: cgal
+Version: %s
+Description: Computational Geometry Algorithms Library
+Libs: %s
+Cflags: %s
+""" % (version, repr(libs)[1:-1], repr(cflags)[1:-1])
+    # FIXME:      ^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^
+    # Is there a better way to handle this on Windows?
+
+    pkg_file = open(os.path.join(directory, "cgal.pc"), 'w')
+    pkg_file.write(pkg_file_str)
+    pkg_file.close()
+    print "done\n Found cgal and generated pkg-config file in\n '%s'" \
+          % directory
+
+if __name__ == "__main__":
+    generatePkgConf(directory=".")

# Begin bundle
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

References