diff --git a/doxybuild.py b/doxybuild.py
index 82bdea6..792bff7 100644
--- a/doxybuild.py
+++ b/doxybuild.py
@@ -6,47 +6,7 @@
 import os.path
 import sys
 import shutil
-import gzip
-import tarfile
-
-TARGZ_DEFAULT_COMPRESSION_LEVEL = 9
-
-def make_tarball(tarball_path, sources, base_dir, prefix_dir=''):
-    """Parameters:
-    tarball_path: output path of the .tar.gz file
-    sources: list of sources to include in the tarball, relative to the current directory
-    base_dir: if a source file is in a sub-directory of base_dir, then base_dir is stripped
-        from path in the tarball.
-    prefix_dir: all files stored in the tarball be sub-directory of prefix_dir. Set to ''
-        to make them child of root.
-    """
-    base_dir = os.path.normpath( os.path.abspath( base_dir ) )
-    def archive_name( path ):
-        """Makes path relative to base_dir."""
-        path = os.path.normpath( os.path.abspath( path ) )
-        common_path = os.path.commonprefix( (base_dir, path) )
-        archive_name = path[len(common_path):]
-        if os.path.isabs( archive_name ):
-            archive_name = archive_name[1:]
-        return os.path.join( prefix_dir, archive_name )
-    def visit(tar, dirname, names):
-        for name in names:
-            path = os.path.join(dirname, name)
-            if os.path.isfile(path):
-                path_in_tar = archive_name(path)
-                tar.add(path, path_in_tar )
-    compression = TARGZ_DEFAULT_COMPRESSION_LEVEL
-    fileobj = gzip.GzipFile( tarball_path, 'wb', compression )
-    tar = tarfile.TarFile(os.path.splitext(tarball_path)[0], 'w', fileobj)
-    for source in sources:
-        source_path = source
-        if os.path.isdir( source ):
-            os.path.walk(source_path, visit, tar)
-        else:
-            path_in_tar = archive_name(source_path)
-            tar.add(source_path, path_in_tar )      # filename, arcname
-    tar.close()
-
+from devtools import tarball
 
 def find_program(filename):
     """find a program in folders path_lst, and sets env[var]
@@ -171,7 +131,7 @@
             'version'
             ]
         tarball_basedir = os.path.join( full_output_dir, html_output_dirname )
-        make_tarball( tarball_path, tarball_sources, tarball_basedir, html_output_dirname )
+        tarball.make_tarball( tarball_path, tarball_sources, tarball_basedir, html_output_dirname )
 
 def main():
     usage = """%prog
