From d7c2644cfd074bb46922c1976044312ad07be1c7 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Sat, 21 Jul 2012 03:14:10 +0100 Subject: [PATCH] Add versioning; tweak libdcp version reporting; make makedcp more useful for testing. --- .gitignore | 1 + src/lib/util.cc | 4 ++- src/lib/version.h | 3 ++ src/lib/wscript | 1 + src/tools/makedcp.cc | 66 ++++++++++++++++++++++++++++++++------------ wscript | 25 +++++++++++++++-- 6 files changed, 80 insertions(+), 20 deletions(-) create mode 100644 src/lib/version.h diff --git a/.gitignore b/.gitignore index c37d2ea1b..f57fb980c 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,4 @@ deps/vobcopy-1.2.0/vobcopy core build films-* +src/lib/version.cc diff --git a/src/lib/util.cc b/src/lib/util.cc index 92861739c..7c80ca3c9 100644 --- a/src/lib/util.cc +++ b/src/lib/util.cc @@ -35,6 +35,7 @@ #include #include #include +#include extern "C" { #include #include @@ -269,7 +270,8 @@ dependency_version_summary () << "libpostproc " << ffmpeg_version_to_string (postproc_version()) << ", " << "libswscale " << ffmpeg_version_to_string (swscale_version()) << ", " << MagickVersion << ", " - << "libssh " << ssh_version (0); + << "libssh " << ssh_version (0) << ", " + << "libdcp " << libdcp::version << " git " << libdcp::git_commit; return s.str (); } diff --git a/src/lib/version.h b/src/lib/version.h new file mode 100644 index 000000000..71639e3bc --- /dev/null +++ b/src/lib/version.h @@ -0,0 +1,3 @@ + +extern char const * dvdomatic_version; +extern char const * dvdomatic_git_commit; diff --git a/src/lib/wscript b/src/lib/wscript index a263a13d1..65df3f4ac 100644 --- a/src/lib/wscript +++ b/src/lib/wscript @@ -52,5 +52,6 @@ def build(bld): transcode_job.cc transcoder.cc util.cc + version.cc """ obj.target = 'dvdomatic' diff --git a/src/tools/makedcp.cc b/src/tools/makedcp.cc index 15880cae9..5856ba0aa 100644 --- a/src/tools/makedcp.cc +++ b/src/tools/makedcp.cc @@ -20,6 +20,8 @@ #include #include #include +#include +#include #include "format.h" #include "film.h" #include "filter.h" @@ -29,6 +31,7 @@ #include "ab_transcode_job.h" #include "util.h" #include "scaler.h" +#include "version.h" using namespace std; using namespace boost; @@ -36,24 +39,33 @@ using namespace boost; static void help (string n) { - cerr << "Syntax: " << n << " [--help] [--deps] [--film ]\n"; + cerr << "Syntax: " << n << " [OPTION] \n" + << " -h, --help show this help\n" + << " -d, --deps list DVD-o-matic dependency details and quit\n" + << " -t, --test run in test mode (repeatable UUID generation and timestamps)\n" + << " -n, --no-progress do not print progress to stdout\n" + << "\n" + << " is the film directory.\n"; } int main (int argc, char* argv[]) { string film_dir; + bool test_mode = false; + bool progress = true; + int option_index = 0; while (1) { static struct option long_options[] = { { "help", no_argument, 0, 'h'}, { "deps", no_argument, 0, 'd'}, - { "film", required_argument, 0, 'f'}, + { "test", no_argument, 0, 't'}, + { "no-progress", no_argument, 0, 'n'}, { 0, 0, 0, 0 } }; - int option_index = 0; - int c = getopt_long (argc, argv, "hdf:", long_options, &option_index); + int c = getopt_long (argc, argv, "hdtn", long_options, &option_index); if (c == -1) { break; @@ -66,19 +78,36 @@ main (int argc, char* argv[]) case 'd': cout << dependency_version_summary () << "\n"; exit (EXIT_SUCCESS); - case 'f': - film_dir = optarg; + case 't': + test_mode = true; + break; + case 'n': + progress = false; break; } } - if (film_dir.empty ()) { + if (optind >= argc) { help (argv[0]); exit (EXIT_FAILURE); } + + film_dir = argv[optind]; dvdomatic_setup (); + cout << "DVD-o-matic " << dvdomatic_version << " git " << dvdomatic_git_commit; + char buf[256]; + if (gethostname (buf, 256) == 0) { + cout << " on " << buf; + } + cout << "\n"; + + if (test_mode) { + libdcp::enable_test_mode (); + cout << dependency_version_summary() << "\n"; + } + Film* film = 0; try { film = new Film (film_dir, true); @@ -92,6 +121,7 @@ main (int argc, char* argv[]) cout << "A/B "; } cout << "DCP for " << film->name() << "\n"; + cout << "Test mode: " << (test_mode ? "yes" : "no") << "\n"; cout << "Content: " << film->content() << "\n"; pair const f = Filter::ffmpeg_strings (film->filters ()); cout << "Filters: " << f.first << " " << f.second << "\n"; @@ -105,8 +135,8 @@ main (int argc, char* argv[]) while (!all_done) { sleep (5); - - if (!first) { + + if (!first && progress) { cout << "\033[" << jobs.size() << "A"; cout.flush (); } @@ -115,14 +145,16 @@ main (int argc, char* argv[]) all_done = true; for (list >::iterator i = jobs.begin(); i != jobs.end(); ++i) { - cout << (*i)->name() << ": "; - - float const p = (*i)->overall_progress (); - - if (p >= 0) { - cout << (*i)->status() << " \n"; - } else { - cout << ": Running \n"; + if (progress) { + cout << (*i)->name() << ": "; + + float const p = (*i)->overall_progress (); + + if (p >= 0) { + cout << (*i)->status() << " \n"; + } else { + cout << ": Running \n"; + } } if (!(*i)->finished ()) { diff --git a/wscript b/wscript index ceacc0093..ec6f76824 100644 --- a/wscript +++ b/wscript @@ -1,5 +1,7 @@ +import subprocess + APPNAME = 'dvdomatic' -VERSION = '0.26' +VERSION = '0.27pre' def options(opt): opt.load('compiler_cxx') @@ -67,6 +69,8 @@ def configure(conf): conf.recurse('test') def build(bld): + create_version_cc(VERSION) + bld.recurse('src') bld.recurse('test') @@ -81,6 +85,23 @@ def build(bld): for r in ['22x22', '32x32', '48x48', '64x64', '128x128']: bld.install_files('${PREFIX}/share/icons/hicolor/%s/apps' % r, 'icons/%s/dvdomatic.png' % r) - def dist(ctx): ctx.excl = 'TODO core *~ src/gtk/*~ src/lib/*~ .waf* build .git' + +def create_version_cc(version): + cmd = "LANG= git log --abbrev HEAD^..HEAD ." + output = subprocess.Popen(cmd, shell=True, stderr=subprocess.STDOUT, stdout=subprocess.PIPE).communicate()[0].splitlines() + o = output[0].decode('utf-8') + commit = o.replace ("commit ", "")[0:10] + + try: + text = '#include "version.h"\n' + text += 'char const * dvdomatic_git_commit = \"%s\";\n' % commit + text += 'char const * dvdomatic_version = \"%s\";\n' % version + print('Writing version information to src/lib/version.cc') + o = open('src/lib/version.cc', 'w') + o.write(text) + o.close() + except IOError: + print('Could not open src/lib/version.cc for writing\n') + sys.exit(-1) -- 2.30.2