summaryrefslogtreecommitdiff
path: root/cmake/modules/distcheck.py
blob: 1edc89c763f0d2f6f39b130fa203b560c3ffaeb9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#!/usr/bin/python
# -*- coding: utf-8 -*-

# Copyright (C) 2009 Collabora Limited <http://www.collabora.co.uk>
#
# This library 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 2.1 of the License, or (at your option) any later version.
#
# This library 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
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA

import os
import re
import shutil
import sys
import tarfile
import subprocess

project = sys.argv[1]
version = sys.argv[2]
srcDir = sys.argv[3]
buildDir = sys.argv[4]

tarName = project + '-' + version
distfilesDir = buildDir + "/distfiles"

try:
    os.mkdir( distfilesDir )
except:
    print "Delete " + distfilesDir + " before running distcheck again."
    exit( 1 )

cloneSrcDir = distfilesDir + "/" + tarName
cloneBuildDir = cloneSrcDir + "_build"

os.chdir( buildDir )
subprocess.call( ["git", "clone", srcDir,  cloneSrcDir ] )
os.chdir( cloneSrcDir )
hashOfTar = subprocess.Popen(["git", "log", "--pretty=oneline", "-n1"], stdout=subprocess.PIPE).communicate()[0].strip()
os.mkdir( cloneBuildDir )
os.chdir( cloneBuildDir )

originalCache = open( buildDir + "/CMakeCache.txt" )
newCache = open( cloneBuildDir + "/CMakeCache.txt", 'w' )
reSrcDir = re.compile( srcDir + "$" )
reBuildDir = re.compile( buildDir + "$" )
for line in originalCache.xreadlines():
    line = reSrcDir.sub( cloneSrcDir, line )
    newCache.write( reBuildDir.sub( cloneBuildDir, line ) )
newCache.close()

if subprocess.call( ["cmake", cloneSrcDir] ) == 0:
    if subprocess.call( ["make"] ) == 0:
        docStatus = ( subprocess.call( ["make", "doxygen-doc"] ) == 0 )
        shutil.move( cloneBuildDir + "/doc", cloneSrcDir )

        testStatus = ( subprocess.call( ["make", "test"] ) == 0 )

        subprocess.call( ["rm", "-rf", cloneSrcDir + "/.git*" ] )
        tarPath = buildDir + "/" + tarName + ".tar.gz"
        tar = tarfile.open( tarPath, "w|gz" )
        tar.add( cloneSrcDir )
        tar.close()
        print "Tarball " + tarPath + " built."
        print "Remember to tag " + hashOfTar
        if not docStatus:
            print "WARNING: Problem building documentation."
        if not testStatus:
            print "WARNING: One or more tests failed."
    else:
        print "Building failed"
        exit( 1 )
else:
    print "CMake failed"
    exit( 1 )