root/branches/libffado-2.0/SConstruct

Revision 1476, 20.6 kB (checked in by arnonym, 15 years ago)

Could have been so simple...

Line 
1 #! /usr/bin/python
2 #
3 # Copyright (C) 2007-2008 Arnold Krille
4 # Copyright (C) 2007-2008 Pieter Palmers
5 # Copyright (C) 2008 Jonathan Woithe
6 #
7 # This file is part of FFADO
8 # FFADO = Free Firewire (pro-)audio drivers for linux
9 #
10 # FFADO is based upon FreeBoB.
11 #
12 # This program is free software: you can redistribute it and/or modify
13 # it under the terms of the GNU General Public License as published by
14 # the Free Software Foundation, either version 2 of the License, or
15 # (at your option) version 3 of the License.
16 #
17 # This program is distributed in the hope that it will be useful,
18 # but WITHOUT ANY WARRANTY; without even the implied warranty of
19 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
20 # GNU General Public License for more details.
21 #
22 # You should have received a copy of the GNU General Public License
23 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
24 #
25
26 FFADO_API_VERSION="8"
27 FFADO_VERSION="1.999.41"
28
29 import os
30 import re
31 from string import Template
32 import imp
33
34 build_dir = ARGUMENTS.get('BUILDDIR', "")
35 if build_dir:
36         build_base=build_dir+'/'
37         if not os.path.isdir( build_base ):
38                 os.makedirs( build_base )
39         print "Building into: " + build_base
40 else:
41         build_base=''
42
43 destdir = ARGUMENTS.get( 'DESTDIR', "" )
44
45 if not os.path.isdir( "cache" ):
46         os.makedirs( "cache" )
47
48 opts = Options( "cache/"+build_base+"options.cache" )
49
50 #
51 # If this is just to display a help-text for the variable used via ARGUMENTS, then its wrong...
52 opts.Add( "BUILDDIR", "Path to place the built files in", "")
53
54 opts.AddOptions(
55         BoolOption( "DEBUG", """\
56 Toggle debug-build. DEBUG means \"-g -Wall\" and more, otherwise we will use
57   \"-O2\" to optimise.""", True ),
58         BoolOption( "PROFILE", "Build with symbols and other profiling info", False ),
59         PathOption( "PREFIX", "The prefix where ffado will be installed to.", "/usr/local", PathOption.PathAccept ),
60         PathOption( "BINDIR", "Overwrite the directory where apps are installed to.", "$PREFIX/bin", PathOption.PathAccept ),
61         PathOption( "LIBDIR", "Overwrite the directory where libs are installed to.", "$PREFIX/lib", PathOption.PathAccept ),
62         PathOption( "INCLUDEDIR", "Overwrite the directory where headers are installed to.", "$PREFIX/include", PathOption.PathAccept ),
63         PathOption( "SHAREDIR", "Overwrite the directory where misc shared files are installed to.", "$PREFIX/share/libffado", PathOption.PathAccept ),
64         BoolOption( "ENABLE_BEBOB", "Enable/Disable the bebob part.", True ),
65         BoolOption( "ENABLE_FIREWORKS", "Enable/Disable the ECHO Audio FireWorks AV/C part.", True ),
66         BoolOption( "ENABLE_MOTU", "Enable/Disable the MOTU part.", True ),
67         BoolOption( "ENABLE_GENERICAVC", """\
68 Enable/Disable the the generic avc part (mainly used by apple).
69   Note that disabling this option might be overwritten by other devices needing
70   this code.""", False ),
71         BoolOption( "ENABLE_ALL", "Enable/Disable support for all devices.", False ),
72         BoolOption( "SERIALIZE_USE_EXPAT", "Use libexpat for XML serialization.", False ),
73         BoolOption( "BUILD_TESTS", """\
74 Build the tests in their directory. As some contain quite some functionality,
75   this is on by default.
76   If you just want to use ffado with jack without the tools, you can disable this.\
77 """, True ),
78     BoolOption( "BUILD_STATIC_TOOLS", "Build a statically linked version of the FFADO tools.", False ),
79     EnumOption('DIST_TARGET', 'Build target for cross compiling packagers', 'auto', allowed_values=('auto', 'i386', 'i686', 'x86_64', 'powerpc', 'powerpc64', 'none' ), ignorecase=2),
80     BoolOption( "ENABLE_OPTIMIZATIONS", "Enable optimizations and the use of processor specific extentions (MMX/SSE/...).", False ),
81
82         )
83
84 ## Load the builders in config
85 buildenv=os.environ
86 vars_to_check = [
87         'PATH',
88         'PKG_CONFIG_PATH',
89         'LD_LIBRARY_PATH',
90         'XDG_CONFIG_DIRS',
91         'XDG_DATA_DIRS',
92         'HOME',
93         'CC',
94         'CFLAGS',
95         'CXX',
96         'CXXFLAGS',
97         'CPPFLAGS',
98 ]
99 for var in vars_to_check:
100         if os.environ.has_key(var):
101                 buildenv[var]=os.environ[var]
102         else:
103                 buildenv[var]=''
104
105 env = Environment( tools=['default','scanreplace','pyuic','pyuic4','dbus','doxygen','pkgconfig'], toolpath=['admin'], ENV = buildenv, options=opts )
106
107 if os.environ.has_key('LDFLAGS'):
108         env['LINKFLAGS'] = os.environ['LDFLAGS']
109
110 # grab OS CFLAGS / CCFLAGS
111 env['OS_CFLAGS']=[]
112 if os.environ.has_key('CFLAGS'):
113         env['OS_CFLAGS'] = os.environ['CFLAGS']
114 env['OS_CCFLAGS']=[]
115 if os.environ.has_key('CCFLAGS'):
116         env['OS_CCFLAGS'] = os.environ['CCFLAGS']
117
118 Help( """
119 For building ffado you can set different options as listed below. You have to
120 specify them only once, scons will save the last value you used and re-use
121 that.
122 To really undo your settings and return to the factory defaults, remove the
123 "cache"-folder and the file ".sconsign.dblite" from this directory.
124 For example with: "rm -Rf .sconsign.dblite cache"
125
126 Note that this is a development version! Don't complain if its not working!
127 See www.ffado.org for stable releases.
128 """ )
129 Help( opts.GenerateHelpText( env ) )
130
131 # make sure the necessary dirs exist
132 if not os.path.isdir( "cache/" + build_base ):
133         os.makedirs( "cache/" + build_base )
134 if not os.path.isdir( 'cache/objects' ):
135         os.makedirs( 'cache/objects' )
136
137 CacheDir( 'cache/objects' )
138
139 opts.Save( 'cache/' + build_base + "options.cache", env )
140
141 def ConfigGuess( context ):
142         context.Message( "Trying to find the system triple: " )
143         ret = os.popen( "admin/config.guess" ).read()[:-1]
144         context.Result( ret )
145         return ret
146
147 def CheckForApp( context, app ):
148         context.Message( "Checking whether '" + app + "' executes " )
149         ret = context.TryAction( app )
150         context.Result( ret[0] )
151         return ret[0]
152
153 def CheckForPyModule( context, module ):
154         context.Message( "Checking for the python module '" + module + "' " )
155         ret = context.TryAction( "python $SOURCE", "import %s" % module, ".py" )
156         context.Result( ret[0] )
157         return ret[0]
158
159 def CompilerCheck( context ):
160         context.Message( "Checking for a working C-compiler " )
161         ret = context.TryRun( """
162 #include <stdlib.h>
163
164 int main() {
165         printf( "Hello World!" );
166         return 0;
167 }""", '.c' )[0]
168         context.Result( ret )
169         if ret == 0:
170                 return False;
171         context.Message( "Checking for a working C++-compiler " )
172         ret = context.TryRun( """
173 #include <iostream>
174
175 int main() {
176         std::cout << "Hello World!" << std::endl;
177         return 0;
178 }""", ".cpp" )[0]
179         context.Result( ret )
180         return ret
181
182 tests = {
183         "ConfigGuess" : ConfigGuess,
184         "CheckForApp" : CheckForApp,
185         "CheckForPyModule": CheckForPyModule,
186         "CompilerCheck" : CompilerCheck,
187 }
188 tests.update( env['PKGCONFIG_TESTS'] )
189 tests.update( env['PYUIC_TESTS'] )
190 tests.update( env['PYUIC4_TESTS'] )
191
192 conf = Configure( env,
193         custom_tests = tests,
194         conf_dir = "cache/" + build_base,
195         log_file = "cache/" + build_base + 'config.log' )
196
197 if env['SERIALIZE_USE_EXPAT']:
198         env['SERIALIZE_USE_EXPAT']=1
199 else:
200         env['SERIALIZE_USE_EXPAT']=0
201
202 if not env.GetOption('clean'):
203         #
204         # Check for working gcc and g++ compilers and their environment.
205         #
206         if not conf.CompilerCheck():
207                 print "\nIt seems as if your system isn't even able to compile any C-/C++-programs. Probably you don't have gcc and g++ installed. Compiling a package from source without a working compiler is very hard to do, please install the needed packages.\nHint: on *ubuntu you need both gcc- and g++-packages installed, easiest solution is to install build-essential which depends on gcc and g++."
208                 Exit( 1 )
209
210         # Check for pkg-config before using pkg-config to check for other dependencies.
211         if not conf.CheckForPKGConfig():
212                 print "\nThe program 'pkg-config' could not be found.\nEither you have to install the corresponding package first or make sure that PATH points to the right directions."
213                 Exit( 1 )
214
215         #
216         # The following checks are for headers and libs and packages we need.
217         #
218         allpresent = 1;
219         # for DBUS C++ bindings
220         allpresent &= conf.CheckHeader( "expat.h" )
221         allpresent &= conf.CheckLib( 'expat', 'XML_ExpatVersion', '#include <expat.h>' )
222        
223         pkgs = {
224                 'libraw1394' : '1.3.0',
225                 'libiec61883' : '1.1.0',
226                 'dbus-1' : '1.0',
227                 }
228         if not env['SERIALIZE_USE_EXPAT']:
229                 pkgs['libxml++-2.6'] = '2.13.0'
230
231         for pkg in pkgs:
232                 name2 = pkg.replace("+","").replace(".","").replace("-","").upper()
233                 env['%s_FLAGS' % name2] = conf.GetPKGFlags( pkg, pkgs[pkg] )
234                 if env['%s_FLAGS'%name2] == 0:
235                         allpresent &= 0
236
237         if not allpresent:
238                 print """
239 (At least) One of the dependencies is missing. I can't go on without it, please
240 install the needed packages for each of the lines saying "no".
241 (Remember to also install the *-devel packages!)
242
243 And remember to remove the cache with "rm -Rf .sconsign.dblite cache" so the
244 results above get rechecked.
245 """
246                 Exit( 1 )
247
248         # Check for C99 lrint() and lrintf() functions used to convert from
249         # float to integer more efficiently via float_cast.h.  If not
250         # present the standard slower methods will be used instead.  This
251         # might not be the best way of testing for these but it's the only
252         # way which seems to work properly.  CheckFunc() fails due to
253         # argument count problems.
254         if env.has_key( 'CFLAGS' ):
255                 oldcf = env['CFLAGS']
256         else:
257                 oldcf = ""
258         oldcf = env.Append(CFLAGS = '-std=c99')
259         if conf.CheckLibWithHeader( "m", "math.h", "c", "lrint(3.2);" ):
260                 HAVE_LRINT = 1
261         else:
262                 HAVE_LRINT = 0
263         if conf.CheckLibWithHeader( "m", "math.h", "c", "lrintf(3.2);" ):
264                 HAVE_LRINTF = 1
265         else:
266                 HAVE_LRINTF = 0
267         env['HAVE_LRINT'] = HAVE_LRINT;
268         env['HAVE_LRINTF'] = HAVE_LRINTF;
269         env.Replace(CFLAGS=oldcf)
270
271         #
272         # Optional checks follow:
273         #
274
275         # PyQT checks
276         build_mixer = False
277         if conf.CheckForApp( 'which pyuic4' ) and conf.CheckForPyModule( 'dbus' ) and conf.CheckForPyModule( 'PyQt4' ) and conf.CheckForPyModule( 'dbus.mainloop.qt' ):
278                 env['PYUIC4'] = True
279                 build_mixer = True
280        
281         if conf.CheckForApp( 'which pyuic' ) and conf.CheckForPyModule( 'dbus' ) and conf.CheckForPyModule( 'qt' ):
282                 env['PYUIC'] = True
283                 build_mixer = True
284        
285         if conf.CheckForApp( 'xdg-desktop-menu --help' ):
286                 env['XDG_TOOLS'] = True
287         else:
288                 print """
289 I couldn't find the program 'xdg-desktop-menu'. Together with xdg-icon-resource
290 this is needed to add the fancy entry to your menu. But the mixer will be installed, you can start it by executing "ffado-mixer".
291 """
292        
293         if not build_mixer:
294                 print """
295         I couldn't find all the prerequisites ('pyuic' / 'pyuic4' and the python-modules 'dbus' and
296         'qt' / 'PyQt4', the packages could be named like dbus-python and PyQt) to build the mixer.
297         Therefor neither the qt3 nor the qt4 mixer will get installed.
298         """
299
300 config_guess = conf.ConfigGuess()
301
302 env = conf.Finish()
303
304 if env['DEBUG']:
305         print "Doing a DEBUG build"
306         # -Werror could be added to, which would force the devs to really remove all the warnings :-)
307         env.AppendUnique( CCFLAGS=["-DDEBUG","-Wall","-g"] )
308         env.AppendUnique( CFLAGS=["-DDEBUG","-Wall","-g"] )
309 else:
310         env.AppendUnique( CCFLAGS=["-O2","-DNDEBUG"] )
311         env.AppendUnique( CFLAGS=["-O2","-DNDEBUG"] )
312
313 if env['PROFILE']:
314         print "Doing a PROFILE build"
315         # -Werror could be added to, which would force the devs to really remove all the warnings :-)
316         env.AppendUnique( CCFLAGS=["-Wall","-g"] )
317         env.AppendUnique( CFLAGS=["-Wall","-g"] )
318
319
320 # this is required to indicate that the DBUS version we use has support
321 # for platform dependent threading init functions
322 # this is true for DBUS >= 0.96 or so. Since we require >= 1.0 it is
323 # always true
324 env.AppendUnique( CCFLAGS=["-DDBUS_HAS_THREADS_INIT_DEFAULT"] )
325
326 if env['ENABLE_ALL']:
327         env['ENABLE_BEBOB'] = True
328         env['ENABLE_FIREWORKS'] = True
329         env['ENABLE_MOTU'] = True
330
331 if env['ENABLE_BEBOB'] or env['ENABLE_FIREWORKS']:
332         env['ENABLE_GENERICAVC'] = True
333
334 env['BUILD_STATIC_LIB'] = False
335 if env['BUILD_STATIC_TOOLS']:
336     print "Building static versions of the tools..."
337     env['BUILD_STATIC_LIB'] = True
338
339 if build_base:
340         env['build_base']="#/"+build_base
341 else:
342         env['build_base']="#/"
343
344 #
345 # Uppercase variables are for usage in code, lowercase versions for usage in
346 # scons-files for installing.
347 #
348 env['BINDIR'] = Template( env['BINDIR'] ).safe_substitute( env )
349 env['LIBDIR'] = Template( env['LIBDIR'] ).safe_substitute( env )
350 env['INCLUDEDIR'] = Template( env['INCLUDEDIR'] ).safe_substitute( env )
351 env['SHAREDIR'] = Template( env['SHAREDIR'] ).safe_substitute( env )
352 env['bindir'] = Template( destdir + env['BINDIR'] ).safe_substitute( env )
353 env['libdir'] = Template( destdir + env['LIBDIR'] ).safe_substitute( env )
354 env['includedir'] = Template( destdir + env['INCLUDEDIR'] ).safe_substitute( env )
355 env['sharedir'] = Template( destdir + env['SHAREDIR'] ).safe_substitute( env )
356
357 env.Command( target=env['sharedir'], source="", action=Mkdir( env['sharedir'] ) )
358
359 env.Alias( "install", env['libdir'] )
360 env.Alias( "install", env['includedir'] )
361 env.Alias( "install", env['sharedir'] )
362 env.Alias( "install", env['bindir'] )
363
364 #
365 # shamelessly copied from the Ardour scons file
366 #
367
368 opt_flags = []
369 env['USE_SSE'] = 0
370
371 # guess at the platform, used to define compiler flags
372
373 config_cpu = 0
374 config_arch = 1
375 config_kernel = 2
376 config_os = 3
377 config = config_guess.split ("-")
378
379 needs_fPIC = False
380
381 # Autodetect
382 if env['DIST_TARGET'] == 'auto':
383     if re.search ("x86_64", config[config_cpu]) != None:
384         env['DIST_TARGET'] = 'x86_64'
385     elif re.search("i[0-5]86", config[config_cpu]) != None:
386         env['DIST_TARGET'] = 'i386'
387     elif re.search("powerpc64", config[config_cpu]) != None:
388         env['DIST_TARGET'] = 'powerpc64'
389     elif re.search("powerpc", config[config_cpu]) != None:
390         env['DIST_TARGET'] = 'powerpc'
391     else:
392         env['DIST_TARGET'] = 'i686'
393     print "Detected DIST_TARGET = " + env['DIST_TARGET']
394
395 if ((re.search ("i[0-9]86", config[config_cpu]) != None) or (re.search ("x86_64", config[config_cpu]) != None) or (re.search ("powerpc", config[config_cpu]) != None)):
396    
397     build_host_supports_sse = 0
398     build_host_supports_sse2 = 0
399     build_host_supports_sse3 = 0
400
401     if config[config_kernel] == 'linux' :
402        
403         if (env['DIST_TARGET'] == 'i686') or (env['DIST_TARGET'] == 'x86_64'):
404            
405             flag_line = os.popen ("cat /proc/cpuinfo | grep '^flags'").read()[:-1]
406             x86_flags = flag_line.split (": ")[1:][0].split ()
407            
408             if "mmx" in x86_flags:
409                 opt_flags.append ("-mmmx")
410             if "sse" in x86_flags:
411                 build_host_supports_sse = 1
412             if "sse2" in x86_flags:
413                 build_host_supports_sse2 = 1
414             #if "sse3" in x86_flags:
415                 #build_host_supports_sse3 = 1
416             if "3dnow" in x86_flags:
417                 opt_flags.append ("-m3dnow")
418            
419             if config[config_cpu] == "i586":
420                 opt_flags.append ("-march=i586")
421             elif config[config_cpu] == "i686":
422                 opt_flags.append ("-march=i686")
423
424         elif (env['DIST_TARGET'] == 'powerpc') or (env['DIST_TARGET'] == 'powerpc64'):
425
426             cpu_line = os.popen ("cat /proc/cpuinfo | grep '^cpu'").read()[:-1]
427
428             ppc_type = cpu_line.split (": ")[1]
429             if re.search ("altivec", ppc_type) != None:
430                 opt_flags.append ("-maltivec")
431                 opt_flags.append ("-mabi=altivec")
432
433             ppc_type = ppc_type.split (", ")[0]
434             if re.match ("74[0145][0578]A?", ppc_type) != None:
435                 opt_flags.append ("-mcpu=7400")
436                 opt_flags.append ("-mtune=7400")
437             elif re.match ("750", ppc_type) != None:
438                 opt_flags.append ("-mcpu=750")
439                 opt_flags.append ("-mtune=750")
440             elif re.match ("PPC970", ppc_type) != None:
441                 opt_flags.append ("-mcpu=970")
442                 opt_flags.append ("-mtune=970")
443             elif re.match ("Cell Broadband Engine", ppc_type) != None:
444                 opt_flags.append ("-mcpu=cell")
445                 opt_flags.append ("-mtune=cell")
446
447     if ((env['DIST_TARGET'] == 'i686') or (env['DIST_TARGET'] == 'x86_64')) \
448        and build_host_supports_sse and env['ENABLE_OPTIMIZATIONS']:
449         opt_flags.extend (["-msse", "-mfpmath=sse"])
450         env['USE_SSE'] = 1
451
452     if ((env['DIST_TARGET'] == 'i686') or (env['DIST_TARGET'] == 'x86_64')) \
453        and build_host_supports_sse2 and env['ENABLE_OPTIMIZATIONS']:
454         opt_flags.extend (["-msse2"])
455         env['USE_SSE2'] = 1
456
457     #if ((env['DIST_TARGET'] == 'i686') or (env['DIST_TARGET'] == 'x86_64')) \
458        #and build_host_supports_sse2 and env['ENABLE_OPTIMIZATIONS']:
459         #opt_flags.extend (["-msse3"])
460         #env['USE_SSE3'] = 1
461
462     # build for 64-bit userland?
463     if env['DIST_TARGET'] == "powerpc64":
464         print "Doing a 64-bit PowerPC build"
465         env.AppendUnique( CCFLAGS=["-m64"] )
466         env.AppendUnique( CFLAGS=["-m64"] )
467     elif env['DIST_TARGET'] == "x86_64":
468         print "Doing a 64-bit x86 build"
469         env.AppendUnique( CCFLAGS=["-m64"] )
470         env.AppendUnique( CFLAGS=["-m64"] )
471         needs_fPIC = True
472     else:
473         print "Doing a 32-bit build"
474         env.AppendUnique( CCFLAGS=["-m32"] )
475         env.AppendUnique( CFLAGS=["-m32"] )
476
477 if needs_fPIC or '-fPIC' in env['OS_CFLAGS']:
478     env.AppendUnique( CFLAGS=["-fPIC"] )
479 if needs_fPIC or '-fPIC' in env['OS_CCFLAGS']:
480     env.AppendUnique( CCFLAGS=["-fPIC"] )
481
482 # end of processor-specific section
483 if env['ENABLE_OPTIMIZATIONS']:
484     opt_flags.extend (["-fomit-frame-pointer","-ffast-math","-funroll-loops"])
485     env.AppendUnique( CCFLAGS=opt_flags )
486     env.AppendUnique( CFLAGS=opt_flags )
487     print "Doing an optimized build..."
488
489 env['REVISION'] = os.popen('svnversion .').read()[:-1]
490 # This may be as simple as '89' or as complex as '4123:4184M'.
491 # We'll just use the last bit.
492 env['REVISION'] = env['REVISION'].split(':')[-1]
493
494 # try to circumvent localized versions
495 if len(env['REVISION']) >= 5 and env['REVISION'][0:6] == 'export':
496         env['REVISION'] = ''
497
498 env['FFADO_API_VERSION']=FFADO_API_VERSION
499
500 env['PACKAGE'] = "libffado"
501 env['VERSION'] = FFADO_VERSION
502 env['LIBVERSION'] = "1.0.0"
503
504 env['CONFIGDIR'] = "~/.ffado"
505 env['CACHEDIR'] = "~/.ffado"
506
507 env['USER_CONFIG_FILE'] = env['CONFIGDIR'] + "/configuration"
508 env['SYSTEM_CONFIG_FILE'] = env['SHAREDIR'] + "/configuration"
509
510 env['REGISTRATION_URL'] = "http://ffado.org/deviceregistration/register.php?action=register"
511
512 #
513 # To have the top_srcdir as the doxygen-script is used from auto*
514 #
515 env['top_srcdir'] = env.Dir( "." ).abspath
516
517 #
518 # Start building
519 #
520 env.ScanReplace( "config.h.in" )
521 # ensure that the config.h is updated with the version
522
523 env.Depends( "config.h", "SConstruct" )
524 env.Depends( "config.h", 'cache/' + build_base + "options.cache" )
525
526 # update config.h whenever the SVN revision changes
527 env.Depends( "config.h", env.Value(env['REVISION']))
528
529 env.Depends( "libffado.pc", "SConstruct" )
530 pkgconfig = env.ScanReplace( "libffado.pc.in" )
531 env.Install( env['libdir'] + '/pkgconfig', pkgconfig )
532
533 env.Install( env['sharedir'], 'configuration' )
534
535 subdirs=['external','src','libffado','tests','support','doc']
536 if build_base:
537         env.SConscript( dirs=subdirs, exports="env", build_dir=build_base+subdir )
538 else:
539         env.SConscript( dirs=subdirs, exports="env" )
540
541 # By default only src is built but all is cleaned
542 if not env.GetOption('clean'):
543     Default( 'src' )
544     Default( 'support' )
545     if env['BUILD_TESTS']:
546         Default( 'tests' )
547
548 if not env.has_key( 'DESTDIR' ):
549         env.Execute( env.Action( "rm -f %s/ffadomixer" % env['bindir'] ) )
550
551 #
552 # Deal with the DESTDIR vs. xdg-tools conflict (which is basicely that the
553 # xdg-tools can't deal with DESTDIR, so the packagers have to deal with this
554 # their own :-/
555 #
556 if len(destdir) > 0:
557         if not len( ARGUMENTS.get( "WILL_DEAL_WITH_XDG_MYSELF", "" ) ) > 0:
558                 print """
559 WARNING!
560 You are using the (packagers) option DESTDIR to install this package to a
561 different place than the real prefix. As the xdg-tools can't cope with
562 that, the .desktop-files are not installed by this build, you have to
563 deal with them your own.
564 (And you have to look into the SConstruct to learn how to disable this
565 message.)
566 """
567 else:
568
569         def CleanAction( action ):
570                 if env.GetOption( "clean" ):
571                         env.Execute( action )
572
573         if env.has_key( 'XDG_TOOLS' ) and env.has_key( 'PYUIC4' ):
574                 if not env.GetOption("clean"):
575                         action = "install"
576                 else:
577                         action = "uninstall"
578                 mixerdesktopaction = env.Action( "xdg-desktop-menu %s support/xdg/ffado.org-ffadomixer.desktop" % action )
579                 mixericonaction = env.Action( "xdg-icon-resource %s --size 64 --novendor --context apps support/xdg/hi64-apps-ffado.png ffado" % action )
580                 env.Command( "__xdgstuff1", None, mixerdesktopaction )
581                 env.Command( "__xdgstuff2", None, mixericonaction )
582                 env.Alias( "install", ["__xdgstuff1", "__xdgstuff2" ] )
583                 CleanAction( mixerdesktopaction )
584                 CleanAction( mixericonaction )
585
586 #
587 # Create a tags-file for easier emacs/vim-source-browsing
588 #  I don't know if the dependency is right...
589 #
590 findcommand = "find . \( -path \"*.h\" -o -path \"*.cpp\" -o -path \"*.c\" \) \! -path \"*.svn*\" \! -path \"./doc*\" \! -path \"./cache*\""
591 env.Command( "tags", "", findcommand + " |xargs ctags" )
592 env.Command( "TAGS", "", findcommand + " |xargs etags" )
593 env.AlwaysBuild( "tags", "TAGS" )
594 if 'NoCache' in dir(env):
595     env.NoCache( "tags", "TAGS" )
596
597 # Another convinience target
598 if env.GetOption( "clean" ):
599         env.Execute( "rm cache/objects -Rf" )
600
Note: See TracBrowser for help on using the browser.