From 46bf7d0a25bc7fe36a90fe157c1804fb3aa97258 Mon Sep 17 00:00:00 2001 From: Bo Peng Date: Fri, 12 May 2006 14:21:30 +0000 Subject: [PATCH] better scons install (man directory and windows system), fix a few bugs, use g++ as LINK. git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@13838 a592a061-630c-0410-9148-cb99ea01b6c8 --- development/scons/SConscript | 53 ++++++++++++++++++++++++-------- development/scons/SConstruct | 39 +++++++++++++++++++---- development/scons/scons_utils.py | 42 +------------------------ 3 files changed, 74 insertions(+), 60 deletions(-) diff --git a/development/scons/SConscript b/development/scons/SConscript index 79625217b8..b7842f0a72 100644 --- a/development/scons/SConscript +++ b/development/scons/SConscript @@ -902,7 +902,7 @@ if 'client' in targets or 'install' in targets: client = env.Program( target = '$BUILDDIR/common/client/lyxclient', - LIBS = env['BOOST_LIBRARIES'] + env['socket_libs'] + ['supports'], + LIBS = env['BOOST_LIBRARIES'] + env['SOCKET_LIBS'] + ['supports'], source = ["$BUILDDIR/common/client/%s" % x for x in Split(''' boost.C client.C @@ -911,7 +911,8 @@ if 'client' in targets or 'install' in targets: messages.C ''')] ) - Alias('client', env.fileCopy('$BUILDDIR/lyxclient', '$BUILDDIR/common/client/lyxclient')) + Alias('client', env.Command(os.path.join('$BUILDDIR', os.path.split(str(client[0]))[1]), + client, [Copy('$TARGET', '$SOURCE')])) Alias('client', client) @@ -961,13 +962,15 @@ if 'tex2lyx' in targets or 'install' in targets: text.C ''')] ) - Alias('tex2lyx', env.fileCopy('$BUILDDIR/tex2lyx', '$BUILDDIR/common/tex2lyx/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_lyx or 'lyxbase' in targets: # # src/ # - -if build_lyx or 'lyxbase' in targets: print "Processing files in src" env['SUBST_KEYS'] = ['PACKAGE_VERSION', 'VERSION_INFO'] @@ -1089,11 +1092,11 @@ if build_lyx or 'lyxbase' in targets: ''') if env.has_key('USE_ASPELL') and env['USE_ASPELL']: - lyx_source_pre.append('aspell.C') + lyx_source_post.append('aspell.C') elif env.has_key('USE_PSPELL') and env['USE_PSPELL']: - lyx_source_pre.append('pspell.C') + lyx_source_post.append('pspell.C') elif env.has_key('USE_ISPELL') and env['USE_ISPELL']: - lyx_source_pre.append('ispell.C') + lyx_source_post.append('ispell.C') lyxbase_pre = env.StaticLibrary( target = '$LOCALLIBPATH/lyxbase_pre', @@ -1127,9 +1130,13 @@ if build_lyx or 'lyx' in targets: ] + env['BOOST_LIBRARIES'] + env['EXTRA_LIBS'] + + env['SOCKET_LIBS'] + env['SYSTEM_LIBS'] ) - Alias('lyx', env.fileCopy('$BUILDDIR/lyx-$frontend', '$BUILDDIR/$frontend/lyx')) + # [/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) @@ -1140,7 +1147,17 @@ if 'install' in targets: # with the hope that scons can finish standarding this soon. # import glob - + + # windows: $PREFIX/Resources + # others: $PREDIX/share/lyx + share_dir = env['SHARE_DIR'] + # windows: $PREFIX/Resouces/man/man1 + # others: $PREFIX/man/man1 + man_dir = env['MAN_DIR'] + # windows: $PREFIX/Resources/locale + # others: $PREFIX/share/locale + locale_dir = env['LOCALE_DIR'] + def install(dest, src): ''' recusive installation of src ''' # separate file and directory @@ -1155,12 +1172,12 @@ if 'install' in targets: glob.glob(os.path.join(dir, '*'))) ) return ins_dir # - # other targets include client, tex2lyx + # executables env.Install(env['BIN_DIR'], [lyx, tex2lyx, client]) Alias('install', env['BIN_DIR']) # - # copy files - dirs = install(os.path.join(env['PREFIX'], 'share/lyx/'), + # share/lyx + dirs = install(env['SHARE_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', \ @@ -1168,6 +1185,16 @@ if 'install' in targets: 'examples', 'kbd', 'lyx2lyx', 'tex', 'clipart', 'doc', 'ui']] ) Alias('install', dirs) + # man + env.InstallAs(os.path.join(env['MAN_DIR'], 'lyx.1'), + env.subst('$TOP_SRC_DIR/lyx.man')) + env.InstallAs(os.path.join(env['MAN_DIR'], 'tex2lyx.1'), + env.subst('$TOP_SRC_DIR/src/tex2lyx/tex2lyx.man')) + env.InstallAs(os.path.join(env['MAN_DIR'], 'lyxclient.1'), + env.subst('$TOP_SRC_DIR/src/client/lyxclient.man')) + Alias('install', [os.path.join(env['MAN_DIR'], x) for + x in ['lyx.1', 'tex2lyx.1', 'lyxclient.1']]) + Default('lyx') diff --git a/development/scons/SConstruct b/development/scons/SConstruct index f2f8247e3a..f3daf1f7b1 100644 --- a/development/scons/SConstruct +++ b/development/scons/SConstruct @@ -140,6 +140,9 @@ if os.name == 'nt': # If not specified, boost tries to figure out by itself, but it may fail. boost_posix = False packaging_method = 'windows' + share_dir = 'Resources' + man_dir = 'Resouces/man/man1' + locale_dir = 'Resources/locale' elif os.name == 'posix' and sys.platform != 'cygwin': platform_name = sys.platform default_frontend = 'qt3' @@ -150,6 +153,9 @@ elif os.name == 'posix' and sys.platform != 'cygwin': default_with_x = True boost_posix = True packaging_method = 'posix' + share_dir = 'share/lyx' + man_dir = 'man/man1' + locale_dir = 'share/locale' elif os.name == 'posix' and sys.platform == 'cygwin': platform_name = 'cygwin' default_frontend = 'qt3' @@ -160,6 +166,9 @@ elif os.name == 'posix' and sys.platform == 'cygwin': default_with_x = True boost_posix = True packaging_method = 'posix' + share_dir = 'share/lyx' + man_dir = 'man/man1' + locale_dir = 'share/locale' elif os.name == 'darwin': platform_name = 'mac' default_frontend = 'qt3' @@ -170,6 +179,9 @@ elif os.name == 'darwin': default_with_x = False boost_posix = True packaging_method = 'msc' + share_dir = 'Resources' + man_dir = 'Resouces/man/man1' + locale_dir = 'Resources/locale' else: # unsupported system platform_name = 'others' default_frontend = 'qt3' @@ -180,6 +192,9 @@ else: # unsupported system default_with_x = True boost_posix = False packaging_method = 'posix' + share_dir = 'share/lyx' + man_dir = 'man/man1' + locale_dir = 'share/locale' #--------------------------------------------------------- # Handling options @@ -302,6 +317,9 @@ if env.has_key('exec_prefix') and env['exec_prefix'] != '.': env['BIN_DIR'] = env['exec_prefix'] else: env['BIN_DIR'] = os.path.join(env['PREFIX'], 'bin') +env['SHARE_DIR'] = os.path.join(env['PREFIX'], share_dir) +env['MAN_DIR'] = os.path.join(env['PREFIX'], man_dir) +env['LOCALE_DIR'] = os.path.join(env['PREFIX'], locale_dir) # speed up source file processing #env['CPPSUFFIXES'] = ['.C', '.cc', '.cpp'] @@ -329,7 +347,16 @@ getEnvVariable(env, 'LDFLAGS') # under windows, scons is confused by .C/.c and uses gcc instead of # g++. I am forcing the use of g++ here. This is expected to change # after lyx renames all .C files to .cpp -if platform_name == 'cygwin': +# +# Solaris seems to use gcc for the last step as well, so, to +# make sure everyone uses a C++ compiler, linker, I do this for +# all platform +# +# just to be safe +if env.has_key('CXX') and env['CXX'] != '': + env['CC'] = env['CXX'] + env['LINK'] = env['CXX'] +else: env['CC'] = 'g++' env['LINK'] = 'g++' @@ -469,14 +496,14 @@ elif env['frontend'] == 'qt4': Exit(1) # check socket libs -env['SYSTEM_LIBS'] = [] +env['SOCKET_LIBS'] = [] if conf.CheckLib('socket'): - env['SYSTEM_LIBS'].append('socket') + env['SOCKET_LIBS'].append('socket') # EF: This is the network services library and provides a # transport-level interface to networking services. if conf.CheckLib('nsl'): - env['SYSTEM_LIBS'].append('nsl') + env['SOCKET_LIBS'].append('nsl') # check boost libraries boost_opt = ARGUMENTS.get('boost', default_boost_opt) @@ -772,9 +799,9 @@ except: print " QTDIR: ", env['QTDIR'] if platform_name in ['win32', 'cygwin']: - env['SYSTEM_LIBS'] += ['shlwapi', 'z'] + env['SYSTEM_LIBS'] = ['shlwapi', 'z'] else: - env['SYSTEM_LIBS'] += ['z'] + env['SYSTEM_LIBS'] = ['z'] # # Build parameters CPPPATH etc diff --git a/development/scons/scons_utils.py b/development/scons/scons_utils.py index 5f44b9b1cb..bb06ff4504 100644 --- a/development/scons/scons_utils.py +++ b/development/scons/scons_utils.py @@ -72,6 +72,7 @@ def env_subst(target, source, env): def env_filecopy(target, source, env): + ''' target can be a directory ''' shutil.copy(str(source[0]), str(target[0])) @@ -617,47 +618,6 @@ def setLoggedSpawn(env, logfile = '', longarg=False, info=''): # replace the old SPAWN by the new function env['SPAWN'] = ls.spawn -# -# Install program with permission -# http://www.scons.org/cgi-sys/cgiwrap/scons/moin.cgi/InstallTargets -# -import SCons -from SCons.Script.SConscript import SConsEnvironment - -SConsEnvironment.Chmod = SCons.Action.ActionFactory(os.chmod, - lambda dest, mode: 'Chmod("%s", 0%o)' % (dest, mode)) - -def installPerm(target, source, env, perm): - ''' install program with permission, will copy - files recursively if needed ''' - # FIXME: mixed use of scons and python interfaces? - target_dir = str(target[0]) - if os.path.isfile(target_dir): - print "Target should be a directory: ", target_dir - return - if not os.path.isdir(target_dir): - os.makedirs(target_dir) - objs = [] - for fnode in source: - fname = str(fnode) - print "Installing", fname, "to", target_dir - if os.path.isfile(fname): - objs.append(os.path.join(target_dir, fname)) - shutil.copy(fname, target_dir) - elif os.path.isdir(fname): - # FIXME: directory permission is not set - if os.path.isdir(os.path.join(target_dir, fname)): - shutil.rmtree(os.path.join(target_dir, fname)) - shutil.copytree(fname, target_dir) - #for i in objs: - # env.AddPostAction(File(i), env.Chmod(i, perm)) - return target - -def env_installProg(target, source, env): - installPerm(target, source, env, 0755) - -def env_installFile(target, source, env): - installPerm(target, source, env, 0644) ## def DistSources(env, node): ## env.DistFiles(_get_sources(env, node)) -- 2.39.2