root/branches/libffado-2.0/SConstruct

Revision 1393, 20.7 kB (checked in by arnonym, 15 years ago)

remove the cache when calling 'scons -c'.

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