diff --git a/CMakeLists.txt b/CMakeLists.txt index 4fccee394..31c52b74e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -467,3 +467,9 @@ if(FREECAD_MAINTAINERS_BUILD AND NOT WIN32) #ADD_CUSTOM_TARGET(DIST make package_source) endif(FREECAD_MAINTAINERS_BUILD AND NOT WIN32) + add_custom_target(dist-git + COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_SOURCE_DIR}/src/Tools/makedist.py + --srcdir=${CMAKE_SOURCE_DIR} --bindir=${CMAKE_BINARY_DIR} + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + ) + diff --git a/src/App/Application.cpp b/src/App/Application.cpp index aa49a5575..bed1c143d 100644 --- a/src/App/Application.cpp +++ b/src/App/Application.cpp @@ -1028,12 +1028,18 @@ void Application::initConfig(int argc, char ** argv) // only for 'BuildVersionMajor'. if (App::Application::Config().find("BuildVersionMajor") == App::Application::Config().end()) { std::stringstream str; str << FCVersionMajor << "." << FCVersionMinor; - App::Application::Config()["ExeVersion"] = str.str(); - App::Application::Config()["BuildVersionMajor"] = FCVersionMajor; - App::Application::Config()["BuildVersionMinor"] = FCVersionMinor; - App::Application::Config()["BuildRevision"] = FCRevision; - App::Application::Config()["BuildRepositoryURL"] = FCRepositoryURL; - App::Application::Config()["BuildRevisionDate"] = FCCurrentDateT; + App::Application::Config()["ExeVersion" ] = str.str(); + App::Application::Config()["BuildVersionMajor" ] = FCVersionMajor; + App::Application::Config()["BuildVersionMinor" ] = FCVersionMinor; + App::Application::Config()["BuildRevision" ] = FCRevision; + App::Application::Config()["BuildRepositoryURL" ] = FCRepositoryURL; + App::Application::Config()["BuildRevisionDate" ] = FCRevisionDate; +#if defined(FCRepositoryHash) + App::Application::Config()["BuildRevisionHash" ] = FCRepositoryHash; +#endif +#if defined(FCRepositoryBranch) + App::Application::Config()["BuildRevisionBranch"] = FCRepositoryBranch; +#endif } _argc = argc; diff --git a/src/Build/Version.h.in b/src/Build/Version.h.in index c67cfb174..ac7a33ee4 100644 --- a/src/Build/Version.h.in +++ b/src/Build/Version.h.in @@ -1,18 +1,10 @@ -/// Version Number +// Version Number #define FCVersionMajor "0" #define FCVersionMinor "13" #define FCVersionName "Vulcan" #define FCRevision "$WCREV$" //Highest committed revision number #define FCRevisionDate "$WCDATE$" //Date of highest committed revision -#define FCRevisionRange "$WCRANGE$" //Update revision range #define FCRepositoryURL "$WCURL$" //Repository URL of the working copy -#define FCCurrentDateT "$WCNOW$" //Current system date & time - -//Placeholders of the form "$WCxxx?TrueText:FalseText$" are replaced with -//TrueText if the tested condition is true, and FalseText if false. - -#define FCScrClean "$WCMODS?Src modified:Src not modified$" //True if local modifications found -#define FCScrMixed "$WCMIXED?Src mixed:Src not mixed$" //True if mixed update revisions found diff --git a/src/Gui/AboutApplication.ui b/src/Gui/AboutApplication.ui index e8d20441f..3c864a682 100644 --- a/src/Gui/AboutApplication.ui +++ b/src/Gui/AboutApplication.ui @@ -16,13 +16,17 @@ true - - - 9 - - - 6 - + + + + + + + + Qt::AlignCenter + + + @@ -36,15 +40,18 @@ - - - - + + + + Qt::Horizontal - - Qt::AlignCenter + + + 31 + 20 + - + @@ -161,6 +168,34 @@ + + + + Branch + + + + + + + <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:MS Shell Dlg 2; font-size:7.8pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-weight:600;">Unknown</span></p></body></html> + + + + + + + <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:MS Shell Dlg 2; font-size:7.8pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-weight:600;">Unknown</span></p></body></html> + + + + + + + Hash + + + @@ -178,19 +213,6 @@ - - - - Qt::Horizontal - - - - 31 - 20 - - - - @@ -219,6 +241,13 @@ + + + + Copy to clipboard + + + @@ -239,19 +268,6 @@ - - - - Qt::Horizontal - - - - 181 - 20 - - - - @@ -264,7 +280,7 @@ - + diff --git a/src/Gui/Splashscreen.cpp b/src/Gui/Splashscreen.cpp index 9da80f552..f7e2d1e10 100644 --- a/src/Gui/Splashscreen.cpp +++ b/src/Gui/Splashscreen.cpp @@ -248,18 +248,18 @@ static QString getPlatform() void AboutDialog::setupLabels() { - QString exeName = QString::fromAscii(App::Application::Config()["ExeName"].c_str()); - std::map& cfg = App::Application::Config(); - std::map::iterator it = cfg.find("WindowTitle"); - if (it != cfg.end()) + std::map& config = App::Application::Config(); + QString exeName = QString::fromAscii(config["ExeName"].c_str()); + std::map::iterator it = config.find("WindowTitle"); + if (it != config.end()) exeName = QString::fromUtf8(it->second.c_str()); - QString banner = QString::fromUtf8(App::Application::Config()["ConsoleBanner"].c_str()); + QString banner = QString::fromUtf8(config["ConsoleBanner"].c_str()); banner = banner.left( banner.indexOf(QLatin1Char('\n')) ); - QString major = QString::fromAscii(App::Application::Config()["BuildVersionMajor"].c_str()); - QString minor = QString::fromAscii(App::Application::Config()["BuildVersionMinor"].c_str()); - QString build = QString::fromAscii(App::Application::Config()["BuildRevision"].c_str()); - QString disda = QString::fromAscii(App::Application::Config()["BuildRevisionDate"].c_str()); - QString mturl = QString::fromAscii(App::Application::Config()["MaintainerUrl"].c_str()); + QString major = QString::fromAscii(config["BuildVersionMajor"].c_str()); + QString minor = QString::fromAscii(config["BuildVersionMinor"].c_str()); + QString build = QString::fromAscii(config["BuildRevision"].c_str()); + QString disda = QString::fromAscii(config["BuildRevisionDate"].c_str()); + QString mturl = QString::fromAscii(config["MaintainerUrl"].c_str()); QString author = ui->labelAuthor->text(); author.replace(QString::fromAscii("Unknown Application"), exeName); @@ -283,10 +283,38 @@ void AboutDialog::setupLabels() platform.replace(QString::fromAscii("Unknown"), QString::fromAscii("%1 (%2-bit)").arg(getPlatform()).arg(QSysInfo::WordSize)); ui->labelBuildPlatform->setText(platform); + + // branch name + it = config.find("BuildRevisionBranch"); + if (it != config.end()) { + QString branch = ui->labelBuildBranch->text(); + branch.replace(QString::fromAscii("Unknown"), QString::fromAscii(it->second.c_str())); + ui->labelBuildBranch->setText(branch); + } + else { + ui->labelBranch->hide(); + ui->labelBuildBranch->hide(); + } + + // hash id + it = config.find("BuildRevisionHash"); + if (it != config.end()) { + QString hash = ui->labelBuildHash->text(); + hash.replace(QString::fromAscii("Unknown"), QString::fromAscii(it->second.c_str())); + ui->labelBuildHash->setText(hash); + } + else { + ui->labelHash->hide(); + ui->labelBuildHash->hide(); + } } void AboutDialog::on_licenseButton_clicked() { } +void AboutDialog::on_copyButton_clicked() +{ +} + #include "moc_Splashscreen.cpp" diff --git a/src/Gui/Splashscreen.h b/src/Gui/Splashscreen.h index 957d4c748..0f07e8d2b 100644 --- a/src/Gui/Splashscreen.h +++ b/src/Gui/Splashscreen.h @@ -85,6 +85,7 @@ protected: protected Q_SLOTS: virtual void on_licenseButton_clicked(); + virtual void on_copyButton_clicked(); private: Ui_AboutApplication* ui; diff --git a/src/Tools/SubWCRev.py b/src/Tools/SubWCRev.py index 28835ce36..843f0796b 100644 --- a/src/Tools/SubWCRev.py +++ b/src/Tools/SubWCRev.py @@ -50,11 +50,7 @@ class VersionControl: def __init__(self): self.rev = "" self.date = "" - self.range = "" self.url = "" - self.time = "" - self.mods = "Src not modified" - self.mixed = "Src not mixed" def extractInfo(self, srcdir): return False @@ -67,11 +63,7 @@ class VersionControl: for line in lines: line = string.replace(line,'$WCREV$',self.rev) line = string.replace(line,'$WCDATE$',self.date) - line = string.replace(line,'$WCRANGE$',self.range) line = string.replace(line,'$WCURL$',self.url) - line = string.replace(line,'$WCNOW$',self.time) - line = string.replace(line,'$WCMODS?Src modified:Src not modified$',self.mods) - line = string.replace(line,'$WCMIXED?Src mixed:Src not mixed$',self.mixed) content.append(line) return content @@ -82,9 +74,7 @@ class UnknownControl(VersionControl): return False self.rev = "Unknown" self.date = "Unknown" - self.range = "Unknown" self.url = "Unknown" - self.time = "Unknown" return True def printInfo(self): @@ -104,13 +94,10 @@ class DebianChangelog(VersionControl): r=re.search("bzr(\\d+)",c) if r != None: self.rev = r.groups()[0] + " (Launchpad)" - self.range = self.rev t = time.localtime() - self.url = "https://code.launchpad.net/~vcs-imports/freecad/trunk" - #self.time = time.asctime() self.date = ("%d/%02d/%02d %02d:%02d:%02d") % (t.tm_year, t.tm_mon, t.tm_mday, t.tm_hour, t.tm_min, t.tm_sec) - self.time = ("%d/%02d/%02d %02d:%02d:%02d") % (t.tm_year, t.tm_mon, t.tm_mday, t.tm_hour, t.tm_min, t.tm_sec) + self.url = "https://code.launchpad.net/~vcs-imports/freecad/trunk" return True def printInfo(self): @@ -121,8 +108,6 @@ class BazaarControl(VersionControl): info=os.popen("bzr log -l 1 %s" % (srcdir)).read() if len(info) == 0: return False - #Get the current local date - self.time = time.strftime("%Y/%m/%d %H:%M:%S") lines=info.split("\n") for i in lines: r = re.match("^revno: (\\d+)$", i) @@ -151,7 +136,6 @@ class GitControl(VersionControl): if len(info) == 0: return False self.rev='%04d (Git)' % (info.count('\n')) - self.range='%04d' % (info.count('\n')) # date/time info=os.popen("git log -1 --date=iso").read() info=info.split("\n") @@ -159,9 +143,7 @@ class GitControl(VersionControl): r = re.match("^Date:\\W+(\\d+-\\d+-\\d+\\W+\\d+:\\d+:\\d+)", i) if r != None: self.date = r.groups()[0].replace('-','/') - self.time = self.date break - #self.time = time.strftime("%Y/%m/%d %H:%M:%S") self.url = "Unknown" info=os.popen("git remote -v").read() info=info.split("\n") @@ -170,11 +152,20 @@ class GitControl(VersionControl): if r != None: self.url = r.groups()[0] break + self.hash=os.popen("git log -1 --pretty=format:%H").read() + self.branch=os.popen("git branch").read().split('\n')[0][2:] return True def printInfo(self): print "git" + def writeVersion(self, lines): + content = VersionControl.writeVersion(self, lines) + content.append('// Git relevant stuff\n') + content.append('#define FCRepositoryHash "%s"\n' % (self.hash)) + content.append('#define FCRepositoryBranch "%s"\n' % (self.branch)) + return content + class MercurialControl(VersionControl): def extractInfo(self, srcdir): return False diff --git a/src/Tools/makedist.py b/src/Tools/makedist.py new file mode 100644 index 000000000..d5590874c --- /dev/null +++ b/src/Tools/makedist.py @@ -0,0 +1,57 @@ +#! python +# -*- coding: utf-8 -*- +# (c) 2006 Werner Mayer LGPL +# +# Python script to make source tarballs. +# + +import sys, os, getopt, tarfile, gzip, time, StringIO + +def main(): + srcdir="." + bindir="." + try: + opts, args = getopt.getopt(sys.argv[1:], "sb:", ["srcdir=","bindir="]) + except getopt.GetoptError: + pass + + for o, a in opts: + if o in ("-s", "--srcdir"): + srcdir = a + if o in ("-b", "--bindir"): + bindir = a + + # revision number + info=os.popen("git rev-list HEAD").read() + revision='%04d' % (info.count('\n')) + + PACKAGE_NAME = 'freecad' + version = "0.13.%s" % (revision) + + DIRNAME = "%(p)s-%(v)s" % {'p': PACKAGE_NAME, 'v': version} + TARNAME = DIRNAME + '.tar.gz' + + verfile = open("%s/src/Build/Version.h" % (bindir), 'r') + verstream = StringIO.StringIO(verfile.read()) + verfile.close() + verinfo = tarfile.TarInfo(DIRNAME + "/src/Build/Version.h") + verinfo.mode = 0660 + verinfo.size = len(verstream.getvalue()) + verinfo.mtime = time.time() + + print "git archive --worktree-attributes --prefix=%s/ HEAD" % (DIRNAME) + tardata = os.popen("git archive --worktree-attributes --prefix=%s/ HEAD" + % (DIRNAME)).read() + tarstream = StringIO.StringIO(tardata) + + tar = tarfile.TarFile(mode="a", fileobj=tarstream) + tar.addfile(verinfo, verstream) + tar.close() + + out = gzip.open(TARNAME, "wb") + out.write(tarstream.getvalue()) + out.close() + print "Created " + TARNAME + +if __name__ == "__main__": + main()