Remove setuid root and use setcap instead in RPM packages.
[dcpomatic.git] / wscript
diff --git a/wscript b/wscript
index 4b3164f71e16d6101133c96c504a0318f630eb54..5c729bd4326c0428471a3a7f7d0038c98524bf28 100644 (file)
--- a/wscript
+++ b/wscript
@@ -35,9 +35,11 @@ except ImportError:
 from waflib import Logs, Context
 
 APPNAME = 'dcpomatic'
+libdcp_version = '1.8.5'
+libsub_version = '1.6.5'
 
 this_version = subprocess.Popen(shlex.split('git tag -l --points-at HEAD'), stdout=subprocess.PIPE).communicate()[0]
-last_version = subprocess.Popen(shlex.split('git describe --tags --abbrev=0'), stdout=subprocess.PIPE).communicate()[0]
+last_version = subprocess.Popen(shlex.split('git describe --tags --match v* --abbrev=0'), stdout=subprocess.PIPE).communicate()[0]
 
 # Python 2/3 compatibility; I don't really understand what's going on here
 if not isinstance(this_version, str):
@@ -92,8 +94,8 @@ def configure(conf):
     conf.env.DEBUG = conf.options.enable_debug
     conf.env.STATIC_DCPOMATIC = conf.options.static_dcpomatic
     conf.env.ENABLE_DISK = conf.options.enable_disk
-    if conf.options.destdir is None:
-        conf.env.INSTALL_PREFIX = conf.env.PREFIX
+    if conf.options.destdir == '':
+        conf.env.INSTALL_PREFIX = conf.options.prefix
     else:
         conf.env.INSTALL_PREFIX = conf.options.destdir
 
@@ -151,7 +153,6 @@ def configure(conf):
         conf.env.append_value('CXXFLAGS', '-DDCPOMATIC_WINDOWS')
         conf.env.append_value('CXXFLAGS', '-DWIN32_LEAN_AND_MEAN')
         conf.env.append_value('CXXFLAGS', '-DBOOST_USE_WINDOWS_H')
-        conf.env.append_value('CXXFLAGS', '-DUNICODE')
         conf.env.append_value('CXXFLAGS', '-DBOOST_THREAD_PROVIDES_GENERIC_SHARED_MUTEX_ON_WIN')
         conf.env.append_value('CXXFLAGS', '-mfpmath=sse')
         conf.env.append_value('CXXFLAGS', '-Wcast-align')
@@ -276,37 +277,6 @@ def configure(conf):
     # leqm_nrt
     conf.check_cfg(package='leqm_nrt', args='--cflags --libs', uselib_store='LEQM_NRT', mandatory=True)
 
-    # See if we have Cairo::ImageSurface::format_stride_for_width; Centos 5 does not
-    conf.check_cxx(fragment="""
-                            #include <cairomm/cairomm.h>
-                            int main(void) {
-                                Cairo::ImageSurface::format_stride_for_width (Cairo::FORMAT_ARGB32, 1024);\n
-                                return 0; }\n
-                            """,
-                       mandatory=False,
-                       msg='Checking for format_stride_for_width',
-                       okmsg='yes',
-                       includes=conf.env['INCLUDES_CAIROMM'],
-                       uselib='CAIROMM',
-                       define_name='DCPOMATIC_HAVE_FORMAT_STRIDE_FOR_WIDTH')
-
-    # See if we have Pango::Layout::show_in_cairo_context; Centos 5 does not
-    conf.check_cxx(fragment="""
-                            #include <pangomm.h>
-                            int main(void) {
-                                Cairo::RefPtr<Cairo::Context> context;
-                                Glib::RefPtr<Pango::Layout> layout;
-                                layout->show_in_cairo_context (context);
-                                return 0; }\n
-                            """,
-                       mandatory=False,
-                       msg='Checking for show_in_cairo_context',
-                       okmsg='yes',
-                       includes=conf.env['INCLUDES_PANGOMM'],
-                       uselib='PANGOMM',
-                       define_name='DCPOMATIC_HAVE_SHOW_IN_CAIRO_CONTEXT')
-
-
     # libcxml
     if conf.options.static_cxml:
         conf.check_cfg(package='libcxml', atleast_version='0.17.0', args='--cflags', uselib_store='CXML', mandatory=True)
@@ -334,21 +304,21 @@ def configure(conf):
 
     # libdcp
     if conf.options.static_dcp:
-        conf.check_cfg(package='libdcp-1.0', atleast_version='1.6.7', args='--cflags', uselib_store='DCP', mandatory=True)
+        conf.check_cfg(package='libdcp-1.0', atleast_version=libdcp_version, args='--cflags', uselib_store='DCP', mandatory=True)
         conf.env.DEFINES_DCP = [f.replace('\\', '') for f in conf.env.DEFINES_DCP]
         conf.env.STLIB_DCP = ['dcp-1.0', 'asdcp-carl', 'kumu-carl', 'openjp2']
         conf.env.LIB_DCP = ['glibmm-2.4', 'ssl', 'crypto', 'bz2', 'xslt', 'xerces-c']
     else:
-        conf.check_cfg(package='libdcp-1.0', atleast_version='1.6.7', args='--cflags --libs', uselib_store='DCP', mandatory=True)
+        conf.check_cfg(package='libdcp-1.0', atleast_version=libdcp_version, args='--cflags --libs', uselib_store='DCP', mandatory=True)
         conf.env.DEFINES_DCP = [f.replace('\\', '') for f in conf.env.DEFINES_DCP]
 
     # libsub
     if conf.options.static_sub:
-        conf.check_cfg(package='libsub-1.0', atleast_version='1.4.7', args='--cflags', uselib_store='SUB', mandatory=True)
+        conf.check_cfg(package='libsub-1.0', atleast_version=libsub_version, args='--cflags', uselib_store='SUB', mandatory=True)
         conf.env.DEFINES_SUB = [f.replace('\\', '') for f in conf.env.DEFINES_SUB]
         conf.env.STLIB_SUB = ['sub-1.0']
     else:
-        conf.check_cfg(package='libsub-1.0', atleast_version='1.4.7', args='--cflags --libs', uselib_store='SUB', mandatory=True)
+        conf.check_cfg(package='libsub-1.0', atleast_version=libsub_version, args='--cflags --libs', uselib_store='SUB', mandatory=True)
         conf.env.DEFINES_SUB = [f.replace('\\', '') for f in conf.env.DEFINES_SUB]
 
     # libxml++
@@ -468,6 +438,19 @@ def configure(conf):
                    define_name='DCPOMATIC_HAVE_AVCOMPONENTDESCRIPTOR_DEPTH_MINUS1',
                    mandatory=False)
 
+    # See if we have av_register_all and avfilter_register_all
+    conf.check_cxx(fragment="""
+                            extern "C" {\n
+                            #include <libavformat/avformat.h>\n
+                            #include <libavfilter/avfilter.h>\n
+                            }\n
+                            int main () { av_register_all(); avfilter_register_all(); }\n
+                            """,
+                   msg='Checking for av_register_all and avfilter_register_all',
+                   uselib='AVFORMAT AVFILTER',
+                   define_name='DCPOMATIC_HAVE_AVREGISTER',
+                   mandatory=False)
+
     # Hack: the previous two check_cxx calls end up copying their (necessary) cxxflags
     # to these variables.  We don't want to use these for the actual build, so clean them out.
     conf.env['CXXFLAGS_AVCODEC'] = []
@@ -604,24 +587,8 @@ def configure(conf):
 
     Logs.pprint('YELLOW', '')
 
-def download_supporters(can_fail):
-    r = os.system('curl -m 2 -s -f https://dcpomatic.com/supporters.cc > src/wx/supporters.cc')
-    if (r >> 8) == 0:
-        r = os.system('curl -s -f https://dcpomatic.com/subscribers.cc > src/wx/subscribers.cc')
-    if (r >> 8) != 0:
-        if can_fail:
-            raise Exception("Could not download supporters lists (%d)" % (r >> 8))
-        else:
-            f = open('src/wx/supporters.cc', 'w')
-            print('supported_by.Add(wxT("Debug build - no supporters lists available"));', file=f)
-            f.close()
-            f = open('src/wx/subscribers.cc', 'w')
-            print('subscribers.Add(wxT("Debug build - no subscribers lists available"));', file=f)
-            f.close()
-
 def build(bld):
     create_version_cc(VERSION, bld.env.CXXFLAGS)
-    download_supporters(not bld.env.DEBUG)
 
     bld.recurse('src')
     bld.recurse('graphics')
@@ -697,16 +664,6 @@ def create_version_cc(version, cxx_flags):
 def post(ctx):
     if ctx.cmd == 'install' and ctx.env.TARGET_LINUX:
         ctx.exec_command('/sbin/ldconfig')
-        # setuid root executables
-        for e in ['dcpomatic2_uuid', 'dcpomatic2_disk_writer']:
-            # I can't find anything which tells me where things have been installed to,
-            # so here's some nasty hacks to guess.
-            debian = os.path.join(ctx.out_dir, '../debian/dcpomatic/usr/bin/%s' % e)
-            prefix = os.path.join(ctx.env['INSTALL_PREFIX'], 'bin/%s' % e)
-            if os.path.exists(debian):
-                os.chmod(debian, 0o4755)
-            if os.path.exists(prefix):
-                os.chmod(prefix, 0o4755)
 
 def pot(bld):
     bld.recurse('src')
@@ -714,6 +671,13 @@ def pot(bld):
 def pot_merge(bld):
     bld.recurse('src')
 
+def supporters(bld):
+    r = os.system('curl -m 2 -s -f https://dcpomatic.com/supporters.cc > src/wx/supporters.cc')
+    if (r >> 8) == 0:
+        r = os.system('curl -s -f https://dcpomatic.com/subscribers.cc > src/wx/subscribers.cc')
+    if (r >> 8) != 0:
+        raise Exception("Could not download supporters lists (%d)" % (r >> 8))
+
 def tags(bld):
     os.system('etags src/lib/*.cc src/lib/*.h src/wx/*.cc src/wx/*.h src/tools/*.cc')