]> git.lyx.org Git - features.git/commitdiff
better scons install (man directory and windows system), fix a few bugs, use g++...
authorBo Peng <bpeng@lyx.org>
Fri, 12 May 2006 14:21:30 +0000 (14:21 +0000)
committerBo Peng <bpeng@lyx.org>
Fri, 12 May 2006 14:21:30 +0000 (14:21 +0000)
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@13838 a592a061-630c-0410-9148-cb99ea01b6c8

development/scons/SConscript
development/scons/SConstruct
development/scons/scons_utils.py

index 79625217b81968c9c8da868f67907a3ce6bb903c..b7842f0a729bf7873f3eb7afa9be52bd8ff9d7c1 100644 (file)
@@ -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')
 
index f2f8247e3a2ca86f17dce83d5a10d1e8d870276e..f3daf1f7b17e384bf3e98b7808f7b0cfc18430ff 100644 (file)
@@ -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':\r
+#
+# 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']:\r
-  env['SYSTEM_LIBS'] += ['shlwapi', 'z']
+  env['SYSTEM_LIBS'] = ['shlwapi', 'z']
 else:
-  env['SYSTEM_LIBS'] += ['z']
+  env['SYSTEM_LIBS'] = ['z']
 
 #
 # Build parameters CPPPATH etc
index 5f44b9b1cb618f4a2dee9de04359ad4663f9ab45..bb06ff45044b1b1d84a739c3b5858dac44bc934a 100644 (file)
@@ -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))