# vi:filetype=python:expandtab:tabstop=2:shiftwidth=2 # file SConscript # # This file is part of LyX, the document processor. # Licence details can be found in the file COPYING. # # \author Bo Peng # Full author contact details are available in file CREDITS. import os, sys sys.path.append('config') from scons_utils import globSource Import('env') targets = env['BUILD_TARGETS'] build_lyx = (targets == [] or 'lyx' in targets or 'install' in targets or 'all' in targets) build_boost = env['INCLUDED_BOOST'] or 'boost' in targets build_intl = env['INCLUDED_GETTEXT'] or 'intl' in targets build_support = build_lyx or True in [x in targets for x in ['support', 'client', 'tex2lyx']] build_mathed = build_lyx or 'mathed' in targets build_insets = build_lyx or 'insets' in targets build_frontends = build_lyx or 'frontends' in targets build_graphics = build_lyx or 'graphics' in targets build_controllers = build_lyx or 'controllers' in targets build_client = 'client' in targets or 'install' in targets or 'all' in targets build_tex2lyx = 'tex2lyx' in targets or 'install' in targets or 'all' in targets build_lyxbase = build_lyx or 'lyxbase' in targets build_po = 'po' in targets or 'install' in targets or 'all' in targets build_qt3 = (build_lyx and env['frontend'] == 'qt3') or 'qt3' in targets build_qt4 = (build_lyx and env['frontend'] == 'qt4') or 'qt4' in targets build_msvs_projects = env['USE_VC'] and 'msvs_projects' in targets # now, if rebuild_targets is specified, do not rebuild some targets rebuild_targets = env['REBUILD_TARGETS'] if rebuild_targets: def ifBuildLib(name, libname, old_value): # explicitly asked to rebuild if name in rebuild_targets: return True # else if not rebuild, and if the library already exists elif os.path.isfile(File(env.subst('$LOCALLIBPATH/${LIBPREFIX}%s$LIBSUFFIX'%libname)).abspath): return False # do not change the original value else: return old_value build_boost = ifBuildLib('boost', 'included_boost_filesystem', build_boost) build_intl = ifBuildLib('intl', 'included_intl', build_intl) build_support = ifBuildLib('support', 'support', build_support) build_mathed = ifBuildLib('mathed', 'mathed', build_mathed) build_insets = ifBuildLib('insets', 'insets', build_insets) build_frontends = ifBuildLib('frontends', 'frontends', build_frontends) build_graphics = ifBuildLib('graphics', 'graphics', build_graphics) build_controllers = ifBuildLib('controllers', 'controllers', build_controllers) build_lyxbase = ifBuildLib('lyxbase', 'lyxbase_pre', build_lyxbase) build_qt3 = ifBuildLib('qt3', 'qt3', build_qt3) build_qt4 = ifBuildLib('qt4', 'qt4', build_qt4) # sync frontend and env['frontend'] (maybe build qt4 with frontend=qt3) if build_qt3: frontend = 'qt3' env['frontend'] = 'qt3' elif build_qt4: frontend = 'qt4' env['frontend'] = 'qt4' else: frontend = env['frontend'] if build_boost: # # boost libraries # # special builddir env.BuildDir('$BUILDDIR/boost', '$TOP_SRC_DIR/boost/libs', duplicate = 0) boostenv = env.Copy() boostenv.AppendUnique(CCFLAGS = '-DBOOST_USER_CONFIG=""') print 'Processing files in boost/libs/filesystem/src...' filesystem = boostenv.StaticLibrary( target = '$LOCALLIBPATH/included_boost_filesystem', source = globSource(dir = env.subst('$TOP_SRC_DIR/boost/libs/filesystem/src'), pattern = '*.cpp', build_dir = '$BUILDDIR/boost/filesystem/src') ) print 'Processing files in boost/libs/regex/src...' regex = boostenv.StaticLibrary( target = '$LOCALLIBPATH/included_boost_regex', source = globSource(dir = env.subst('$TOP_SRC_DIR/boost/libs/regex/src'), pattern = '*.cpp', build_dir = '$BUILDDIR/boost/regex/src') ) print 'Processing files in boost/libs/signals/src...' signals = boostenv.StaticLibrary( target = '$LOCALLIBPATH/included_boost_signals', source = globSource(dir = env.subst('$TOP_SRC_DIR/boost/libs/signals/src'), pattern = '*.cpp', build_dir = '$BUILDDIR/boost/signals/src') ) print 'Processing files in boost/libs/iostreams/src...' iostreams = boostenv.StaticLibrary( target = '$LOCALLIBPATH/included_boost_iostreams', source = globSource(dir = env.subst('$TOP_SRC_DIR/boost/libs/iostreams/src'), pattern = '*.cpp', build_dir = '$BUILDDIR/boost/iostreams/src') ) Alias('boost', filesystem) Alias('boost', regex) Alias('boost', signals) Alias('boost', iostreams) if build_intl: # # intl # print "Processing files in intl..." env.BuildDir('$BUILDDIR/intl', '$TOP_SRC_DIR/intl', duplicate = 0) intlenv = env.Copy() # we need the original C compiler for these files intlenv['CC'] = intlenv['C_COMPILER'] intlenv['CCFLAGS'] = intlenv['C_CCFLAGS'] intlenv['CPPPATH'] += ['intl'] intlenv.Append(CCFLAGS = [ r'-DLOCALEDIR=\"' + env['LOCALE_DIR'].replace('\\', '\\\\') + r'\"', r'-DLOCALE_ALIAS_PATH=\"' + env['LOCALE_DIR'].replace('\\', '\\\\') + r'\"', r'-DLIBDIR=\"' + env['TOP_SRC_DIR'].replace('\\', '\\\\') + r'/lib\"', '-DIN_LIBINTL', '-DENABLE_RELOCATABLE=1', '-DIN_LIBRARY', r'-DINSTALLDIR=\"' + env['PREFIX'].replace('\\', '\\\\') + r'/lib\"', '-DNO_XMALLOC', '-Dset_relocation_prefix=libintl_set_relocation_prefix', '-Drelocate=libintl_relocate', '-DDEPENDS_ON_LIBICONV=1', '-DHAVE_CONFIG_H' ] ) # libgnuintl.h.in => libintl.h env.substFile('$TOP_SRC_DIR/intl/libintl.h', '$TOP_SRC_DIR/intl/libgnuintl.h.in') env.Command('$TOP_SRC_DIR/intl/libgnuintl.h', '$TOP_SRC_DIR/intl/libintl.h', [Copy('$TARGET', '$SOURCE')]) intl = intlenv.StaticLibrary( target = '$LOCALLIBPATH/included_intl', LIBS = ['c'], source = globSource(dir = env.subst('$TOP_SRC_DIR/intl'), pattern = '*.c', exclude = ['vasnprintf.c', 'printf-parse.c', 'printf-args.c', 'os2compat.c'], build_dir = '$BUILDDIR/intl') ) Alias('intl', intl) # # Now, src code under src/ # env.BuildDir('$BUILDDIR/common', '$TOP_SRC_DIR/src', duplicate = 0) if build_support: # # src/support # print "Processing files in src/support..." env.substFile('$BUILDDIR/common/support/package.C', '$TOP_SRC_DIR/src/support/package.C.in') support = env.StaticLibrary( target = '$LOCALLIBPATH/support', source = globSource(dir = env.subst('$TOP_SRC_DIR/src/support'), pattern = env['LYX_EXT'], exclude = ['os_win32.C', 'os_unix.C', 'os_cygwin.C', 'atexit.c'], include = ['package.C'], build_dir = '$BUILDDIR/common/support') ) Alias('support', support) if build_mathed: # # src/mathed # print "Processing files in src/mathed..." mathed = env.StaticLibrary( target = '$LOCALLIBPATH/mathed', source = globSource(dir = env.subst('$TOP_SRC_DIR/src/mathed'), pattern = env['LYX_EXT'], exclude = ['math_xyarrowinset.C', 'math_mboxinset.C', 'formulamacro.C'], build_dir = '$BUILDDIR/common/mathed') ) Alias('mathed', mathed) if build_insets: # # src/insets # print "Processing files in src/insets..." insets = env.StaticLibrary( target = '$LOCALLIBPATH/insets', source = globSource(dir = env.subst('$TOP_SRC_DIR/src/insets'), pattern = env['LYX_EXT'], exclude = ['insettheorem.C'], build_dir = '$BUILDDIR/common/insets') ) Alias('insets', insets) if build_frontends: # # src/frontends # print "Processing files in src/frontends..." frontends = env.StaticLibrary( target = '$LOCALLIBPATH/frontends', source = globSource(dir = env.subst('$TOP_SRC_DIR/src/frontends'), pattern = env['LYX_EXT'], build_dir = '$BUILDDIR/common/frontends') ) Alias('frontends', frontends) if build_graphics: # # src/graphics # print "Processing files in src/graphics..." graphics = env.StaticLibrary( target = '$LOCALLIBPATH/graphics', source = globSource(dir = env.subst('$TOP_SRC_DIR/src/graphics'), pattern = env['LYX_EXT'], build_dir = '$BUILDDIR/common/graphics') ) Alias('graphics', graphics) if build_controllers: # # src/frontends/controllers # print "Processing files in src/frontends/controllers..." controllers = env.StaticLibrary( target = '$LOCALLIBPATH/controllers', source = globSource(dir = env.subst('$TOP_SRC_DIR/src/frontends/controllers'), pattern = env['LYX_EXT'], build_dir = '$BUILDDIR/common/frontends/controllers') ) Alias('controllers', controllers) # # src/frontend/qt3/4 # if build_qt3 or build_qt4: env.BuildDir('$BUILDDIR/$frontend', '$TOP_SRC_DIR/src/frontend/$frontend', duplicate = 0) if build_qt3: print "Processing files in src/frontends/qt3..." qt3env = env.Copy() # disable auto scan to speed up non build time qt3env['QT_AUTOSCAN'] = 0 qt3env['QT_MOCHPREFIX'] = '' # load qt3 tools qt3env.Tool('qt') qt3env.AppendUnique(CPPPATH = [ '$BUILDDIR/common', '$BUILDDIR/common/images', '$BUILDDIR/common/frontends', '$BUILDDIR/common/frontends/qt3', '$BUILDDIR/common/frontends/controllers', '$QT_INC_PATH'] ) qt3_moc_files = ["$BUILDDIR/common/frontends/qt3/%s" % x for x in Split(''' BulletsModule.C emptytable.C FileDialog_private.C floatplacement.C iconpalette.C lengthcombo.C panelstack.C QAboutDialog.C QBibitemDialog.C QBibtexDialog.C QBoxDialog.C QBranchDialog.C QBrowseBox.C QChangesDialog.C QCharacterDialog.C QCitationDialog.C QCommandBuffer.C QCommandEdit.C QContentPane.C QDelimiterDialog.C QDocumentDialog.C QErrorListDialog.C QERTDialog.C QExternalDialog.C QFloatDialog.C QGraphicsDialog.C QIncludeDialog.C QIndexDialog.C QLogDialog.C QViewSourceDialog.C QLPopupMenu.C QLPrintDialog.C QMathDialog.C QMathMatrixDialog.C QNoteDialog.C QParagraphDialog.C QPrefsDialog.C QRefDialog.C QSearchDialog.C QSendtoDialog.C qsetborder.C QShowFileDialog.C QSpellcheckerDialog.C QDialogView.C QTabularCreateDialog.C QTabularDialog.C QTexinfoDialog.C QThesaurusDialog.C QTocDialog.C qttableview.C QtView.C QURLDialog.C QVSpaceDialog.C QWrapDialog.C QLToolbar.C socket_callback.C validators.C ''')] # manually moc and uic files for better performance qt3_moced_files = [qt3env.Moc(x.replace('.C', '_moc.cpp'), x.replace('.C', '.h')) for x in qt3_moc_files] qt3_uiced_files = [qt3env.Uic('$BUILDDIR/common/frontends/qt3/ui/'+x) for x in \ globSource(dir = env.subst('$TOP_SRC_DIR/src/frontends/qt3/ui'), pattern = '*.ui')] qt3_uiced_cc_files = [] for x in qt3_uiced_files: qt3_uiced_cc_files.extend(x[1:]) qt3 = qt3env.StaticLibrary( target = '$LOCALLIBPATH/qt3', source = globSource(dir = env.subst('$TOP_SRC_DIR/src/frontends/qt3/'), pattern = env['LYX_EXT'], build_dir = '$BUILDDIR/common/frontends/qt3') + qt3_moced_files + qt3_uiced_cc_files ) Alias('qt3', qt3) if build_qt4: print "Processing files in src/frontends/qt4..." qt4env = env.Copy() qt4env['QT_AUTOSCAN'] = 0 # local qt4 toolset from # http://www.iua.upf.es/~dgarcia/Codders/sconstools.html # # NOTE: I have to patch qt4.py since it does not automatically # process .C file!!! (add to cxx_suffixes ) # qt4env.Tool('qt4', [env['SCONS_DIR']]) qt4env.EnableQt4Modules(env['QT_LIB'], debug = False) qt4env.AppendUnique(CPPPATH = [ '$BUILDDIR/common', '$BUILDDIR/common/images', '$BUILDDIR/common/frontends', '$BUILDDIR/common/frontends/qt4', '$BUILDDIR/common/frontends/controllers' ] ) # FIXME: replace by something from pkg_config qt4env.Append(CCFLAGS = [ '-DHAVE_CONFIG_H', '-DQT_CLEAN_NAMESPACE', '-DQT_GENUINE_STR', '-DQT_NO_STL', '-DQT3_SUPPORT', '-DQT_NO_STL', ] ) qt4_moc_files = ["$BUILDDIR/common/frontends/qt4/%s" % x for x in Split(''' BulletsModule.C emptytable.C FileDialog_private.C floatplacement.C iconpalette.C lengthcombo.C InsertTableWidget.C panelstack.C QAboutDialog.C QBibitemDialog.C QBibtexDialog.C QBoxDialog.C QBranchDialog.C QBranches.C QChangesDialog.C QCharacterDialog.C QCitationDialog.C QCommandBuffer.C QCommandEdit.C QDelimiterDialog.C QDocumentDialog.C QErrorListDialog.C QERTDialog.C QExternalDialog.C QFloatDialog.C QGraphicsDialog.C QIncludeDialog.C QIndexDialog.C QLAction.C QLogDialog.C QViewSourceDialog.C QViewSource.C QLMenubar.C QLPopupMenu.C QLPrintDialog.C QMathDialog.C QMathMatrixDialog.C QNoteDialog.C QParagraphDialog.C QPrefsDialog.C QRefDialog.C QSearchDialog.C QSendtoDialog.C qsetborder.C QShowFileDialog.C QSpellcheckerDialog.C QDialogView.C QTabularCreateDialog.C QTabularDialog.C QTexinfoDialog.C QThesaurusDialog.C TocModel.C QTocDialog.C QtView.C QURLDialog.C QVSpaceDialog.C QWorkArea.C QWrapDialog.C QLToolbar.C socket_callback.C validators.C ''') ] # # Compile resources # resources = [qt4env.Uic4(x.split('.')[0]) for x in \ globSource(dir = env.subst('$TOP_SRC_DIR/src/frontends/qt4/ui'), pattern = '*.ui', build_dir = '$BUILDDIR/common/frontends/qt4/ui')] # # moc qt4_moc_files, the moced files are included in the original files # qt4_moced_files = [qt4env.Moc4(x.replace('.C', '_moc.cpp'), x.replace('.C', '.h')) for x in qt4_moc_files] qt4 = qt4env.StaticLibrary( target = '$LOCALLIBPATH/qt4', LIBS = qt4env['QT_LIB'], source = globSource(dir = env.subst('$TOP_SRC_DIR/src/frontends/qt4'), pattern = env['LYX_EXT'], exclude = ['QBrowseBox.C'], build_dir = '$BUILDDIR/common/frontends/qt4') ) Alias('qt4', qt4) if build_client: # # src/client # env.BuildDir('$BUILDDIR/common', '$TOP_SRC_DIR/src', duplicate = 0) print "Processing files in src/client..." if env['HAVE_FCNTL']: client = env.Program( target = '$BUILDDIR/common/client/lyxclient', LIBS = ['support'] + env['INTL_LIBS'] + env['SYSTEM_LIBS'] + env['SOCKET_LIBS'] + env['BOOST_LIBRARIES'], source = globSource(dir = env.subst('$TOP_SRC_DIR/src/client'), pattern = env['LYX_EXT'], build_dir = '$BUILDDIR/common/client') ) Alias('client', env.Command(os.path.join('$BUILDDIR', os.path.split(str(client[0]))[1]), client, [Copy('$TARGET', '$SOURCE')])) else: client = None Alias('client', client) if build_tex2lyx: # # tex2lyx # print "Processing files in src/tex2lyx..." tex2lyx_env = env.Copy() # the order is important here. tex2lyx_env.Prepend(CPPPATH = ['$BUILDDIR/common/tex2lyx']) tex2lyx_env.AppendUnique(LIBPATH = ['#$LOCALLIBPATH']) for file in ['FloatList.C', 'Floating.C', 'counters.C', 'lyxlayout.h', 'lyxlayout.C', 'lyxtextclass.h', 'lyxtextclass.C', 'lyxlex.C', 'lyxlex_pimpl.C']: env.Command('$BUILDDIR/common/tex2lyx/'+file, '$TOP_SRC_DIR/src/'+file, [Copy('$TARGET', '$SOURCE')]) tex2lyx = tex2lyx_env.Program( target = '$BUILDDIR/common/tex2lyx/tex2lyx', LIBS = ['support'] + env['BOOST_LIBRARIES'] + env['SYSTEM_LIBS'], source = globSource(dir = env.subst('$TOP_SRC_DIR/src/tex2lyx'), pattern = env['LYX_EXT'], include = ['FloatList.C', 'Floating.C', 'counters.C', 'lyxlayout.C', 'lyxtextclass.C', 'lyxlex.C', 'lyxlex_pimpl.C'], build_dir = '$BUILDDIR/common/tex2lyx') ) Alias('tex2lyx', env.Command(os.path.join('$BUILDDIR', os.path.split(str(tex2lyx[0]))[1]), tex2lyx, [Copy('$TARGET', '$SOURCE')])) Alias('tex2lyx', tex2lyx) if build_lyxbase: # # src/ # print "Processing files in src..." env.substFile('$BUILDDIR/common/version.C', '$TOP_SRC_DIR/src/version.C.in') lyx_post_source = Split(''' tabular.C dimension.C PrinterParams.C box.C Thesaurus.C SpellBase.C ''') if env.has_key('USE_ASPELL') and env['USE_ASPELL']: lyx_post_source.append('aspell.C') elif env.has_key('USE_PSPELL') and env['USE_PSPELL']: lyx_post_source.append('pspell.C') elif env.has_key('USE_ISPELL') and env['USE_ISPELL']: lyx_post_source.append('ispell.C') # temporary fix for MSVC, will remove later. if not env['USE_VC']: main_source = ['main.C'] else: main_source = [] lyxbase_pre = env.StaticLibrary( target = '$LOCALLIBPATH/lyxbase_pre', source = globSource(dir = env.subst('$TOP_SRC_DIR/src'), pattern = env['LYX_EXT'], exclude = lyx_post_source + ['main.C', 'aspell.C', 'pspell.C', 'ispell.C', 'Variables.C', 'Sectioning.C'], include = ['version.C'] + main_source, build_dir = '$BUILDDIR/common') ) lyxbase_post = env.StaticLibrary( target = '$LOCALLIBPATH/lyxbase_post', source = ["$BUILDDIR/common/%s" % x for x in lyx_post_source] ) Alias('lyxbase', lyxbase_pre) Alias('lyxbase', lyxbase_post) if build_lyx: # # Build lyx with given frontend # # temporary fix for MSVC, will remove later. if env['USE_VC']: lyx_source = ['$BUILDDIR/common/main.C'] else: lyx_source = [] lyx = env.Program( target = '$BUILDDIR/$frontend/lyx', source = lyx_source, LIBS = [ 'lyxbase_pre', 'mathed', 'insets', 'frontends', env['frontend'], 'controllers', 'graphics', 'support', 'lyxbase_post', ] + env['BOOST_LIBRARIES'] + env['EXTRA_LIBS'] + env['INTL_LIBS'] + env['SOCKET_LIBS'] + env['SYSTEM_LIBS'] ) # [/path/to/lyx.ext] => lyx-qt3.ext target_name = os.path.split(str(lyx[0]))[1].replace('lyx', 'lyx-%s' % frontend) Alias('lyx', env.Command(os.path.join('$BUILDDIR', target_name), lyx, [Copy('$TARGET', '$SOURCE')])) Alias('lyx', lyx) if build_msvs_projects: def build_project(target, dir, src_pattern = env['LYX_EXT'], include=[], resource=None, rebuild=True): if resource is not None: res = globSource(dir = env.subst('$TOP_SRC_DIR/'+resource), pattern = '*.ui', build_dir = env.subst('$TOP_SRC_DIR/'+resource)) else: res = [] if rebuild: cmds = 'faststart=yes rebuild='+target else: cmds = 'faststart=yes' if type(dir) == type([]): src = [] inc = [] for d in dir: src.extend(globSource(dir = env.subst('$TOP_SRC_DIR/' + d), pattern = src_pattern, include = include, build_dir = boostenv.subst('$TOP_SRC_DIR/' + d) )) inc.extend(globSource(dir = env.subst('$TOP_SRC_DIR/' + d), pattern = '*.h', build_dir = env.subst('$TOP_SRC_DIR/' + d) )) else: src = globSource(dir = env.subst('$TOP_SRC_DIR/' + dir), pattern = src_pattern, include = include, build_dir = boostenv.subst('$TOP_SRC_DIR/' + dir) ) inc = globSource(dir = env.subst('$TOP_SRC_DIR/' + dir), pattern = '*.h', build_dir = env.subst('$TOP_SRC_DIR/' + dir) ) # project proj = boostenv.MSVSProject( target = '$MSVSPATH/' + target + env['MSVSPROJECTSUFFIX'], srcs = src, incs = [boostenv.subst('$TOP_SRC_DIR/src/config.h')], localincs = inc, resources = res, buildtarget = target, cmdargs = cmds, variant = 'Release' ) Alias('msvs_projects', proj) build_project('boost', ['boost/libs/filesystem/src', 'boost/libs/regex/src', 'boost/libs/signals/src', 'boost/libs/iostreams/src'], src_pattern = '*.cpp') build_project('intl', 'intl', src_pattern = '*.c') build_project('support', 'src/support', include=['package.C.in']) build_project('mathed', 'src/mathed') build_project('insets', 'src/insets') build_project('frontends', 'src/frontends') build_project('graphics', 'src/graphics') build_project('controllers', 'src/frontends/controllers') build_project('qt3', 'src/frontends/qt3', resource = 'src/frontends/qt3/ui') build_project('qt4', 'src/frontends/qt4', resource = 'src/frontends/qt4/ui') build_project('client', 'src/client', rebuild=False) build_project('tex2lyx', 'src/tex2lyx', rebuild=False) build_project('lyxbase', 'src') if frontend == 'qt3': build_project('lyx', ['src', 'src/support', 'src/mathed', 'src/insets', 'src/frontends', 'src/graphics', 'src/frontends/controllers', 'src/frontends/qt3'], resource = 'src/frontends/qt3/ui') else: build_project('lyx', ['src', 'src/support', 'src/mathed', 'src/insets', 'src/frontends', 'src/graphics', 'src/frontends/controllers', 'src/frontends/qt4'], resource = 'src/frontends/qt4/ui') if build_po: # # po/ # print 'Processing files in po...' import glob # handle po files # # files to translate transfiles = glob.glob(os.path.join(env.subst('$TOP_SRC_DIR'), 'po', '*.po')) # possibly *only* handle these languages languages = None if env.has_key('languages'): languages = env.make_list(env['lanauges']) # use defulat msgfmt if not env['MSGFMT']: print 'msgfmt does not exist. Can not process po files' else: # create a builder env['BUILDERS']['Transfiles'] = Builder(action='$MSGFMT $SOURCE -o $TARGET',suffix='.gmo',src_suffix='.po') # gmo_files = [] for f in transfiles: # get filename fname = os.path.split(f)[1] # country code country = fname.split('.')[0] # if not languages or country in languages: gmo_files.extend(env.Transfiles(f)) if 'install' in targets: # create the directory if needed if not os.path.isdir(env['DEST_DIR']): try: os.makedirs(env['DEST_DIR']) except: pass if not os.path.isdir(env['DEST_DIR']): print 'Can not create directory', env['DEST_DIR'] Exit(3) # import glob # # do not install these files exclude_list = ['Makefile.am', 'Makefile.in', 'Makefile', 'lyx2lyx_version.py', 'lyx2lyx_version.py.in'] def install(dest, src): ''' recusive installation of src to dest ''' # separate file and directory files = filter(lambda x: os.path.isfile(x) and not os.path.split(x)[1] in exclude_list, src) dirs = filter(os.path.isdir, src) # install file env.Install(dest, files) # install directory ins_dir = [dest] for dir in dirs: ins_dir.extend(install(os.path.join(dest, os.path.basename(dir)), glob.glob(os.path.join(dir, '*'))) ) return ins_dir # # executables (some of them may be none) # if env['ADD_SUFFIX_TO_EXECUTABLES']: program_suffix = env['PROGRAM_SUFFIX'] else: program_suffix = '' # # install lyx target_name = os.path.split(str(lyx[0]))[1].replace('lyx', 'lyx%s' % program_suffix) target = os.path.join(env['BIN_DEST_DIR'], target_name) env.InstallAs(target, lyx) Alias('install', target) # install lyx as lyx-qt3 target_name = os.path.split(str(lyx[0]))[1].replace('lyx', 'lyx-%s%s' % (frontend, program_suffix)) target = os.path.join(env['BIN_DEST_DIR'], target_name) env.InstallAs(target, lyx) Alias('install', target) # # install tex2lyx target_name = os.path.split(str(tex2lyx[0]))[1].replace('tex2lyx', 'tex2lyx%s' % program_suffix) target = os.path.join(env['BIN_DEST_DIR'], target_name) env.InstallAs(target, tex2lyx) Alias('install', target) # # install lyxclient, may not exist if client != None: target_name = os.path.split(str(client[0]))[1].replace('client', 'client%s' % program_suffix) target = os.path.join(env['BIN_DEST_DIR'], target_name) env.InstallAs(target, client) Alias('install', target) # # share/lyx dirs = install(env['SHARE_DEST_DIR'], [env.subst('$TOP_SRC_DIR/lib/') + file for file in ['configure.py', 'encodings', 'chkconfig.ltx', 'CREDITS', 'external_templates', 'symbols', 'languages', 'lyxrc.example', 'syntax.default', 'bind', 'images', 'layouts', 'scripts', 'templates', 'examples', 'kbd', 'lyx2lyx', 'tex', 'clipart', 'doc', 'ui']] ) env.substFile('$SHARE_DEST_DIR/lyx2lyx/lyx2lyx_version.py', '$TOP_SRC_DIR/lib/lyx2lyx/lyx2lyx_version.py.in') Alias('install', dirs) # man env.InstallAs(os.path.join(env['MAN_DEST_DIR'], 'lyx.1'), env.subst('$TOP_SRC_DIR/lyx.man')) env.InstallAs(os.path.join(env['MAN_DEST_DIR'], 'tex2lyx.1'), env.subst('$TOP_SRC_DIR/src/tex2lyx/tex2lyx.man')) env.InstallAs(os.path.join(env['MAN_DEST_DIR'], 'lyxclient.1'), env.subst('$TOP_SRC_DIR/src/client/lyxclient.man')) Alias('install', [os.path.join(env['MAN_DEST_DIR'], x) for x in ['lyx.1', 'tex2lyx.1', 'lyxclient.1']]) # locale files? # ru.gmo ==> ru/LC_MESSAGES/lyxSUFFIX.mo for gmo in gmo_files: lan = os.path.split(str(gmo))[1].split('.')[0] dest_file = os.path.join(env['LOCALE_DEST_DIR'], lan, 'LC_MESSAGES', 'lyx' + env['PROGRAM_SUFFIX'] + '.mo') env.InstallAs(dest_file, gmo) Alias('install', dest_file) Default('lyx') Alias('all', ['lyx', 'client', 'tex2lyx', 'po'])