2 # Copyright (C) 2012-2020 Carl Hetherington <cth@carlh.net>
4 # This file is part of DCP-o-matic.
6 # DCP-o-matic is free software; you can redistribute it and/or modify
7 # it under the terms of the GNU General Public License as published by
8 # the Free Software Foundation; either version 2 of the License, or
9 # (at your option) any later version.
11 # DCP-o-matic is distributed in the hope that it will be useful,
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 # GNU General Public License for more details.
16 # You should have received a copy of the GNU General Public License
17 # along with DCP-o-matic. If not, see <http://www.gnu.org/licenses/>.
22 from waflib import Logs
26 def description(tool, variant):
28 'dcpomatic': 'DCP-o-matic',
29 'dcpomatic_batch': 'DCP-o-matic Batch Converter',
30 'dcpomatic_server': 'DCP-o-matic Encode Server',
31 'dcpomatic_kdm': 'DCP-o-matic KDM Creator',
32 'dcpomatic_player': 'DCP-o-matic Player',
33 'dcpomatic_playlist': 'DCP-o-matic Playlist Editor',
34 'dcpomatic_combiner': 'DCP-o-matic Combiner',
36 return descriptions[tool] if tool in descriptions else tool
39 def make_rc(tool, icon, variant):
40 filename = f'build/src/tools/{tool}.rc'
41 with open(filename, 'w') as rc:
42 if tool == 'dcpomatic_disk_writer':
43 print('#include "winuser.h"', file=rc)
44 print('1 RT_MANIFEST "dcpomatic2_disk_writer.exe.manifest"', file=rc)
45 with open("build/src/tools/dcpomatic2_disk_writer.exe.manifest", "w") as manifest:
47 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
48 <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
49 <assemblyIdentity version="1.0.0.0" processorArchitecture="X86" name="dcpomatic2_disk_writer" type="win32"/>
50 <description>DCP-o-matic Disk Writer</description>
51 <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
54 <requestedExecutionLevel level="requireAdministrator" uiAccess="false"/>
55 </requestedPrivileges>
58 </assembly>""", file=manifest)
61 id ICON "../../graphics/windows/{icon}"
62 #include "wx-3.1/wx/msw/wx.rc"'
63 VS_VERSION_INFO VERSIONINFO
65 PRODUCTVERSION 0,0,0,2
76 BLOCK "StringFileInfo"
80 VALUE "FileDescription", "{description(tool, variant)}\\0"
85 VALUE "Translation", 0x409, 1200
92 if conf.env.TARGET_WINDOWS_64 or conf.env.TARGET_WINDOWS_32:
93 conf.env.append_value('CXXFLAGS', ['-mconsole'])
94 conf.env.append_value('LINKFLAGS', ['-mconsole'])
97 uselib = 'BOOST_THREAD BOOST_DATETIME DCP XMLSEC CXML XMLPP AVFORMAT AVFILTER AVCODEC '
98 uselib += 'AVUTIL SWSCALE SWRESAMPLE POSTPROC CURL BOOST_FILESYSTEM SSH ZIP CAIROMM FONTCONFIG PANGOMM SUB '
99 uselib += 'SNDFILE SAMPLERATE BOOST_REGEX ICU NETTLE RTAUDIO PNG JPEG LEQM_NRT '
101 if bld.env.ENABLE_DISK:
102 if bld.env.TARGET_LINUX:
104 uselib += 'LWEXT4 NANOMSG '
106 if bld.env.TARGET_WINDOWS_64 or bld.env.TARGET_WINDOWS_32:
107 uselib += 'WINSOCK2 DBGHELP SHLWAPI MSWSOCK BOOST_LOCALE WINSOCK2 OLE32 DSOUND WINMM KSUSER SETUPAPI UUID '
108 if bld.env.TARGET_LINUX:
111 cli_tools = ['dcpomatic_cli', 'dcpomatic_server_cli', 'server_test', 'dcpomatic_kdm_cli', 'dcpomatic_create', 'dcpomatic_map']
112 if bld.env.ENABLE_DISK and not bld.env.DISABLE_GUI:
113 cli_tools.append('dcpomatic_disk_writer')
116 os.makedirs('build/src/tools')
121 obj = bld(features='cxx cxxprogram')
123 obj.includes = ['..']
124 obj.use = ['libdcpomatic2']
125 obj.source = '%s.cc' % t
126 if (bld.env.TARGET_WINDOWS_64 or bld.env.TARGET_WINDOWS_32) and t == 'dcpomatic_disk_writer':
127 obj.source += f' ../../{make_rc(t, None, bld.env.VARIANT)}'
128 # Prevent a console window opening when we start dcpomatic2_disk_writer
129 obj.env.append_value('LINKFLAGS', '-Wl,-subsystem,windows')
130 obj.target = t.replace('dcpomatic', 'dcpomatic2')
131 if t == 'server_test':
132 obj.install_path = None
135 if not bld.env.DISABLE_GUI:
136 gui_tools = ['dcpomatic',
141 'dcpomatic_playlist',
142 'dcpomatic_combiner',
144 'dcpomatic_verifier']
145 if bld.env.ENABLE_DISK:
146 gui_tools.append('dcpomatic_disk')
149 obj = bld(features='cxx cxxprogram')
151 if bld.env.BUILD_STATIC or bld.env.TARGET_LINUX:
153 obj.uselib += ' WXWIDGETS'
154 if not bld.env.TARGET_OSX:
155 obj.uselib += ' GL GLU'
156 if bld.env.TARGET_LINUX:
158 if bld.env.TARGET_WINDOWS_64 or bld.env.TARGET_WINDOWS_32:
159 obj.uselib += ' GLEW'
160 obj.includes = ['..']
161 obj.use = ['libdcpomatic2', 'libdcpomatic2-wx']
162 obj.source = '%s.cc' % t
163 if bld.env.TARGET_WINDOWS_64 or bld.env.TARGET_WINDOWS_32:
164 obj.source += f' ../../{make_rc(t, t.replace("dcpomatic", "dcpomatic2") + ".ico", bld.env.VARIANT)}'
165 obj.target = t.replace('dcpomatic', 'dcpomatic2')
167 i18n.po_to_mo(os.path.join('src', 'tools'), 'dcpomatic2', bld)
173 dcpomatic_combiner.cc
179 dcpomatic_playlist.cc
182 i18n.pot(os.path.join('src', 'tools'), cc, 'dcpomatic')
185 i18n.pot_merge(os.path.join('src', 'tools'), 'dcpomatic')