- added the following step to make_release: fix EOL in distribution source, generate source tarball.
- devtools/ was made into a python module and common utilities are being moved in this module
diff --git a/devtools/fixeol.py b/devtools/fixeol.py
new file mode 100644
index 0000000..5d8372d
--- /dev/null
+++ b/devtools/fixeol.py
@@ -0,0 +1,63 @@
+import os.path

+

+def fix_source_eol( path, is_dry_run = True, verbose = True, eol = '\n' ):

+    """Makes sure that all sources have the specified eol sequence (default: unix)."""

+    if not os.path.isfile( path ):

+        raise ValueError( 'Path "%s" is not a file' % path )

+    try:

+        f = open(path, 'rb')

+    except IOError, msg:

+        print >> sys.stderr, "%s: I/O Error: %s" % (file, str(msg))

+        return False

+    try:

+        raw_lines = f.readlines()

+    finally:

+        f.close()

+    fixed_lines = [line.rstrip('\r\n') + eol for line in raw_lines]

+    if raw_lines != fixed_lines:

+        print '%s =>' % path,

+        if not is_dry_run:

+            f = open(path, "wb")

+            try:

+                f.writelines(fixed_lines)

+            finally:

+                f.close()

+        if verbose:

+            print is_dry_run and ' NEED FIX' or ' FIXED'

+    return True

+##    

+##    

+##

+##def _do_fix( is_dry_run = True ):

+##    from waftools import antglob

+##    python_sources = antglob.glob( '.',

+##        includes = '**/*.py **/wscript **/wscript_build',

+##        excludes = antglob.default_excludes + './waf.py',

+##        prune_dirs = antglob.prune_dirs + 'waf-* ./build' )

+##    for path in python_sources:

+##        _fix_python_source( path, is_dry_run )

+##

+##    cpp_sources = antglob.glob( '.',

+##        includes = '**/*.cpp **/*.h **/*.inl',

+##        prune_dirs = antglob.prune_dirs + 'waf-* ./build' )

+##    for path in cpp_sources:

+##        _fix_source_eol( path, is_dry_run )

+##

+##

+##def dry_fix(context):

+##    _do_fix( is_dry_run = True )

+##

+##def fix(context):

+##    _do_fix( is_dry_run = False )

+##

+##def shutdown():

+##    pass

+##

+##def check(context):

+##    # Unit tests are run when "check" target is used

+##    ut = UnitTest.unit_test()

+##    ut.change_to_testfile_dir = True

+##    ut.want_to_see_test_output = True

+##    ut.want_to_see_test_error = True

+##    ut.run()

+##    ut.print_results()