mirror of
https://git.lyx.org/repos/lyx.git
synced 2025-01-03 16:31:13 +00:00
scons-based build system, by Bo Peng (ben.bob@gmail.com)
* SConstruct: main SConstruct file * scons_utils.py: utility functions * qt4.py: qt4 support is not yet official, and I have to patch this file * src/SConscript * src/insets/SConscript * src/graphics/SConscript * src/mathed/SConscript * src/frontends/qt3/SConscript * src/frontends/qt4/SConscript * src/frontends/SConscript * src/frontends/controllers/SConscript * src/support/SConscript * src/client/SConscript * src/tex2lyx/SConscript * boost/libs/SConscript * boost/libs/signals/src/SConscript * boost/libs/filesystem/src/SConscript * boost/libs/iostreams/src/SConscript * boost/libs/regex/src/SConscript git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@13807 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
parent
b6c3478eda
commit
7168ce58b5
800
SConstruct
Normal file
800
SConstruct
Normal file
@ -0,0 +1,800 @@
|
||||
# vi:filetype=python:expandtab:tabstop=2:shiftwidth=2
|
||||
#
|
||||
# file SConstruct
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
#
|
||||
# This is a scons based building system for lyx, you can use it as follows:
|
||||
# (after of course installation of scons from www.scons.org)
|
||||
#
|
||||
# scons [frontend=qt3|gt4] [boost=included|auto] ...
|
||||
#
|
||||
# Where:
|
||||
# * use scons -h for details about parameters
|
||||
# * qt3 is used by default on linux, cygwin and mac
|
||||
# * qt4 is used by default on win32
|
||||
#
|
||||
# File layouts (Important):
|
||||
# * Unless you specify builddir=dir, building will happen
|
||||
# in $BUILDDIR = $mode/$platform-$frontend. E.g., something like
|
||||
# debug/linux-qt3/
|
||||
# * All shared libs will be put in $BUILDDIR/libs, e.g.
|
||||
# debug/linux-qt3/libs
|
||||
# * lyx executable will be in directories like debug/linux-qt3
|
||||
#
|
||||
# Hints:
|
||||
# * scons --config=force
|
||||
# force re-configuration (use scons -H for details)
|
||||
#
|
||||
# * check config.log to see why config has failed
|
||||
#
|
||||
# * use extra_inc_path, extra_lib_path, qt_dir, qt_inc_path
|
||||
# qt_lib_path to help locate qt and other libraries
|
||||
#
|
||||
# * (Important) use scons logfile=logfile.log to enable command line
|
||||
# logging. (default is no logging)
|
||||
#
|
||||
# Notes:
|
||||
# * Currently, all scons does is building lyx in
|
||||
# $LYXROOT/$mode/$build_dir/
|
||||
# where $mode is debug or release, $build_dir is the build_dir name
|
||||
# listed above
|
||||
#
|
||||
# * scons install etc may be added later. Interested contributors can follow
|
||||
# http://www.scons.org/cgi-sys/cgiwrap/scons/moin.cgi/AccumulateBuilder
|
||||
# or
|
||||
# http://www.scons.org/cgi-sys/cgiwrap/scons/moin.cgi/DistTarBuilder
|
||||
# Please also see the commented out code in scons_utils.py
|
||||
#
|
||||
# * NSIS support can be found here.
|
||||
# http://www.scons.org/cgi-sys/cgiwrap/scons/moin.cgi/NsisSconsTool
|
||||
#
|
||||
# * rpm support?
|
||||
# http://www.scons.org/cgi-sys/cgiwrap/scons/moin.cgi/RpmHonchoTemp
|
||||
#
|
||||
# However, I decide to wait since scons seems to be standardizing these
|
||||
# features.
|
||||
#
|
||||
|
||||
import os, sys
|
||||
|
||||
# scons_util defines a few utility function
|
||||
import scons_utils as utils
|
||||
|
||||
#----------------------------------------------------------
|
||||
# Required runtime environment
|
||||
#----------------------------------------------------------
|
||||
|
||||
# FIXME: I remember lyx requires higher version of python?
|
||||
EnsurePythonVersion(1, 5)
|
||||
# Please use at least 0.96.91 (not 0.96.1)
|
||||
EnsureSConsVersion(0, 96)
|
||||
|
||||
#----------------------------------------------------------
|
||||
# Global definitions
|
||||
#----------------------------------------------------------
|
||||
|
||||
# some global settings
|
||||
PACKAGE_VERSION = '1.5.0svn'
|
||||
DEVEL_VERSION = True
|
||||
default_build_mode = 'debug'
|
||||
|
||||
PACKAGE = 'lyx'
|
||||
PACKAGE_BUGREPORT = 'lyx-devel@lists.lyx.org'
|
||||
PACKAGE_NAME = 'LyX'
|
||||
PACKAGE_TARNAME = 'lyx'
|
||||
PACKAGE_STRING = '%s %s' % (PACKAGE_NAME, PACKAGE_VERSION)
|
||||
PROGRAM_SUFFIX = ''
|
||||
config_h = os.path.join('src', 'config.h')
|
||||
default_log_file = 'scons_lyx.log'
|
||||
|
||||
# FIXME: what is this? (They are used in src/support/package.C.in
|
||||
LOCALEDIR = "../locale/"
|
||||
LYX_DIR = "/usr/local/share/lyx"
|
||||
|
||||
# platform dependent default build_dir and other settings
|
||||
#
|
||||
# I know, somebody would say:
|
||||
# This is TOTALLY wrong! Everything should be automatically
|
||||
# determined.
|
||||
#
|
||||
if os.name == 'nt':
|
||||
platform_name = 'win32'
|
||||
default_frontend = 'qt4'
|
||||
# boost and gettext are unlikely to be installed already
|
||||
default_boost_opt = 'included'
|
||||
default_gettext_opt = 'included'
|
||||
default_pch_opt = False
|
||||
default_with_x = False
|
||||
spell_checker = 'auto'
|
||||
# FIXME: I need to know what exactly is boost_posix
|
||||
boost_posix = False
|
||||
packaging_method = 'windows'
|
||||
elif os.name == 'posix' and sys.platform != 'cygwin':
|
||||
platform_name = 'linux'
|
||||
default_frontend = 'qt3'
|
||||
# try to use system boost/gettext libraries
|
||||
default_boost_opt = 'auto'
|
||||
default_gettext_opt = 'auto'
|
||||
default_pch_opt = False
|
||||
default_with_x = True
|
||||
boost_posix = False
|
||||
packaging_method = 'posix'
|
||||
elif os.name == 'posix' and sys.platform == 'cygwin':
|
||||
platform_name = 'cygwin'
|
||||
default_frontend = 'qt3'
|
||||
# force the use of cygwin/boost/gettext
|
||||
default_boost_opt = 'system'
|
||||
default_gettext_opt = 'system'
|
||||
default_pch_opt = False
|
||||
default_with_x = True
|
||||
boost_posix = True
|
||||
packaging_method = 'posix'
|
||||
elif os.name == 'darwin':
|
||||
platform_name = 'mac'
|
||||
default_frontend = 'qt3'
|
||||
# to be safe
|
||||
default_boost_opt = 'included'
|
||||
default_gettext_opt = 'included'
|
||||
default_pch_opt = False
|
||||
default_with_x = False
|
||||
boost_posix = False
|
||||
packaging_method = 'msc'
|
||||
else: # unsupported system
|
||||
platform_name = 'others'
|
||||
default_frontend = 'qt3'
|
||||
# to be safe
|
||||
default_boost_opt = 'included'
|
||||
default_gettext_opt = 'included'
|
||||
default_pch_opt = False
|
||||
default_with_x = True
|
||||
boost_posix = False
|
||||
packaging_method = 'posix'
|
||||
|
||||
#---------------------------------------------------------
|
||||
# Handling options
|
||||
#----------------------------------------------------------
|
||||
# Note that if you set the options via the command line,
|
||||
# they will be remembered in the file 'options.cache'
|
||||
#
|
||||
# NOTE: the scons people are trying to fix scons so that
|
||||
# options like --prefix will be accepted. Right now,
|
||||
# we have to use the KEY=VALUE style of scons
|
||||
#
|
||||
opts = Options(['options.cache', 'config.py'])
|
||||
opts.AddOptions(
|
||||
# frontend,
|
||||
EnumOption('frontend', 'Main GUI',
|
||||
default_frontend,
|
||||
allowed_values = ('xform', 'qt3', 'qt4', 'gtk') ),
|
||||
# debug or release build
|
||||
EnumOption('mode', 'Building method', default_build_mode,
|
||||
allowed_values = ('debug', 'release') ),
|
||||
# boost libraries
|
||||
EnumOption('boost',
|
||||
'Use included, system boost library, or try sytem first.',
|
||||
default_boost_opt,
|
||||
allowed_values = (
|
||||
'auto', # detect boost, if not found, use included
|
||||
'included', # always use included boost
|
||||
'system', # always use system boost, fail if can not find
|
||||
) ),
|
||||
EnumOption('gettext',
|
||||
'Use included, system gettext library, or try sytem first',
|
||||
default_gettext_opt,
|
||||
allowed_values = (
|
||||
'auto', # detect gettext, if not found, use included
|
||||
'included', # always use included gettext
|
||||
'system', # always use system gettext, fail if can not find
|
||||
) ),
|
||||
# FIXME: I am not allowed to use '' as default, '.' is not good either.
|
||||
PathOption('qt_dir', 'Path to qt directory', '.'),
|
||||
PathOption('qt_include_path', 'Path to qt include directory', '.'),
|
||||
PathOption('qt_lib_path', 'Path to qt library directory', '.'),
|
||||
# FIXME: I do not know how pch is working. Ignore this option now.
|
||||
BoolOption('pch', '(NA) Whether or not use pch', default_pch_opt),
|
||||
# FIXME: Not implemented yet.
|
||||
BoolOption('version_suffix', '(NA) Whether or not add version suffix', False),
|
||||
# build directory, will replace build_dir if set
|
||||
PathOption('build_dir', 'Build directory', '.'),
|
||||
# extra include and libpath
|
||||
PathOption('extra_inc_path', 'Extra include path', '.'),
|
||||
PathOption('extra_lib_path', 'Extra library path', '.'),
|
||||
# enable assertion, (config.h has ENABLE_ASSERTIOS
|
||||
BoolOption('assertions', 'Use assertions', True),
|
||||
# enable warning, (config.h has WITH_WARNINGS)
|
||||
BoolOption('warnings', 'Use warnings', True),
|
||||
# enable glib, (config.h has _GLIBCXX_CONCEPT_CHECKS)
|
||||
BoolOption('concept_checks', 'Enable concept checks', True),
|
||||
# FIXME: I do not know what is nls
|
||||
BoolOption('nls', '(NA) Whether or not use native language support', False),
|
||||
# FIXME: not implemented
|
||||
BoolOption('profile', '(NA) Whether or not enable profiling', False),
|
||||
# FIXME: not implemented
|
||||
PathOption('prefix', '(NA) install architecture-independent files in PREFIX', '.'),
|
||||
# FIXME: not implemented
|
||||
PathOption('exec_prefix', '(NA) install architecture-independent executable files in PREFIX', '.'),
|
||||
# FIXME: not implemented
|
||||
BoolOption('std_debug', '(NA) Whether or not turn on stdlib debug', False),
|
||||
# using x11?
|
||||
BoolOption('X11', 'Use x11 windows system', default_with_x),
|
||||
# FIXME: not implemented
|
||||
BoolOption('libintl', '(NA) Use libintl library', False),
|
||||
# FIXME: not implemented
|
||||
PathOption('intl_prefix', '(NA) Path to intl library', '.'),
|
||||
# log file
|
||||
('logfile', 'save commands (not outputs) to logfile', default_log_file),
|
||||
# What is aiksaurus?
|
||||
BoolOption('aikasurus', 'Whether or not use aikasurus library', False),
|
||||
#
|
||||
EnumOption('spell', 'Choose spell checker to use.', 'auto',
|
||||
allowed_values = ('aspell', 'pspell', 'ispell', 'auto') )
|
||||
)
|
||||
|
||||
# Determine the frontend to use
|
||||
frontend = ARGUMENTS.get('frontend', default_frontend)
|
||||
use_X11 = ARGUMENTS.get('X11', default_with_x)
|
||||
|
||||
#---------------------------------------------------------
|
||||
# Setting up environment
|
||||
#---------------------------------------------------------
|
||||
|
||||
env = Environment(
|
||||
options = opts
|
||||
)
|
||||
|
||||
# set environment since I do not really like ENV = os.environ
|
||||
env['ENV']['PATH'] = os.environ.get('PATH')
|
||||
env['ENV']['HOME'] = os.environ.get('HOME')
|
||||
env['ENV']['PKG_CONFIG_PATH'] = os.environ.get('PKG_CONFIG_PATH')
|
||||
env['TOP_SRC_DIR'] = Dir('.').abspath
|
||||
|
||||
#
|
||||
# frontend, mode, BUILDDIR and LOCALLIBPATH=BUILDDIR/libs
|
||||
#
|
||||
env['frontend'] = frontend
|
||||
env['mode'] = ARGUMENTS.get('mode', default_build_mode)
|
||||
# lyx will be built to $build/build_dir so it is possible
|
||||
# to build multiple build_dirs using the same source
|
||||
# $mode can be debug or release
|
||||
if ARGUMENTS.has_key('build_dir'):
|
||||
build_dir = ARGUMENTS['build_dir']
|
||||
env['BUILDDIR'] = build_dir
|
||||
else:
|
||||
# Determine the name of the build (platform+frontend
|
||||
build_dir = '%s-%s' % (platform_name, frontend)
|
||||
if use_X11 and platform_name == 'cygwin':
|
||||
build_dir += '-X11'
|
||||
env['BUILDDIR'] = os.path.join('$mode', build_dir)
|
||||
# all built libraries will go to build_dir/libs
|
||||
# (This is different from the make file approach)
|
||||
env['LOCALLIBPATH'] = '#$BUILDDIR/libs'
|
||||
env.Append(LIBPATH = ['$LOCALLIBPATH'])
|
||||
|
||||
#
|
||||
# QTDIR, QT_LIB_PATH, QT_INC_PATH
|
||||
#
|
||||
if platform_name == 'win32':
|
||||
env.Tool('mingw')
|
||||
|
||||
if ARGUMENTS.has_key('qt_dir'):
|
||||
env['QTDIR'] = ARGUMENTS['qt_dir']
|
||||
# add path to the qt tools
|
||||
env.Append(LIBPATH = [os.path.join(ARGUMENTS['qt_dir'], 'lib')])
|
||||
env.Append(CPPPATH = [os.path.join(ARGUMENTS['qt_dir'], 'include')])
|
||||
# set environment so that moc etc can be found even if its path is not set properly
|
||||
env['ENV']['PATH'] = os.path.join(ARGUMENTS['qt_dir'], 'bin') + os.pathsep + env['ENV']['PATH']
|
||||
else:
|
||||
env['QTDIR'] = os.environ.get('QTDIR', '/usr/lib/qt-3.3')
|
||||
|
||||
if ARGUMENTS.has_key('qt_lib_path'):
|
||||
env['QT_LIB_PATH'] = ARGUMENTS['qt_lib_path']
|
||||
else:
|
||||
env['QT_LIB_PATH'] = '$QTDIR/lib'
|
||||
env.Append(LIBPATH = ['$QT_LIB_PATH'])
|
||||
# qt4 seems to be using pkg_config
|
||||
env['ENV']['PKG_CONFIG_PATH'] = env.subst('$QT_LIB_PATH')
|
||||
|
||||
if ARGUMENTS.has_key('qt_inc_path'):
|
||||
env['QT_INC_PATH'] = ARGUMENTS['qt_inc_path']
|
||||
elif os.path.isdir(os.path.join(env.subst('$QTDIR'), 'include')):
|
||||
env['QT_INC_PATH'] = '$QTDIR/include'
|
||||
else: # have to guess
|
||||
env['QT_INC_PATH'] = '/usr/include/$frontend/'
|
||||
env.Append(CPPPATH = env['QT_INC_PATH'])
|
||||
|
||||
#
|
||||
# extra_inc_path and extra_lib_path
|
||||
#
|
||||
if ARGUMENTS.has_key('extra_inc_path'):
|
||||
env.Append(CPPPATH = [ARGUMENTS['extra_inc_path']])
|
||||
if ARGUMENTS.has_key('extra_lib_path'):
|
||||
env.Append(LIBPATH = [ARGUMENTS['extra_lib_path']])
|
||||
|
||||
#
|
||||
# this is a bit out of place (after auto-configration)
|
||||
# but it is required to do the tests.
|
||||
if platform_name == 'win32':
|
||||
env.Append(CPPPATH = ['#c:/MinGW/include'])
|
||||
|
||||
#----------------------------------------------------------
|
||||
# Autoconf business
|
||||
#----------------------------------------------------------
|
||||
|
||||
conf = Configure(env,
|
||||
custom_tests = {
|
||||
'CheckPkgConfig' : utils.checkPkgConfig,
|
||||
'CheckPackage' : utils.checkPackage,
|
||||
'CheckPutenv' : utils.checkPutenv,
|
||||
'CheckIstreambufIterator' : utils.checkIstreambufIterator,
|
||||
'CheckMkdirOneArg' : utils.checkMkdirOneArg,
|
||||
'CheckStdCount' : utils.checkStdCount,
|
||||
'CheckSelectArgType' : utils.checkSelectArgType,
|
||||
'CheckBoostLibraries' : utils.checkBoostLibraries,
|
||||
}
|
||||
)
|
||||
|
||||
# pkg-config? (if not, we use hard-coded options)
|
||||
if conf.CheckPkgConfig('0.15.0'):
|
||||
env['HAS_PKG_CONFIG'] = True
|
||||
else:
|
||||
print 'pkg-config >= 0.1.50 is not found'
|
||||
env['HAS_PKG_CONFIG'] = False
|
||||
|
||||
# zlib? This is required.
|
||||
if not conf.CheckLibWithHeader('z', 'zlib.h', 'C'):
|
||||
print 'Did not find libz or zlib.h, exiting!'
|
||||
Exit(1)
|
||||
|
||||
# qt libraries?
|
||||
#
|
||||
# qt3 does not use pkg_config
|
||||
if env['frontend'] == 'qt3':
|
||||
if not conf.CheckLibWithHeader('qt-mt', 'qapp.h', 'c++', 'QApplication qapp();'):
|
||||
print 'Did not find qt libraries, exiting!'
|
||||
Exit(1)
|
||||
elif env['frontend'] == 'qt4':
|
||||
succ = False
|
||||
# first: try pkg_config
|
||||
if env['HAS_PKG_CONFIG']:
|
||||
succ = conf.CheckPackage('QtCore')
|
||||
env['QT4_PKG_CONFIG'] = succ
|
||||
# second: try to link to it
|
||||
if not succ:
|
||||
# FIXME: under linux, I can test the following perfectly
|
||||
# However, under windows, lib names need to passed as libXXX4.a ...
|
||||
succ = conf.CheckLibWithHeader('QtCore', 'QtGui/QApplication', 'c++', 'QApplication qapp();')
|
||||
# third: try to look up the path
|
||||
if not succ:
|
||||
succ = True
|
||||
for lib in ['QtCore', 'QtGui', 'Qt3Support']:
|
||||
# windows version has something like QtGui4 ...
|
||||
if not (os.path.isfile(os.path.join(env.subst('$QT_LIB_PATH'), 'lib%s.a' % lib)) or \
|
||||
os.path.isfile(os.path.join(env.subst('$QT_LIB_PATH'), 'lib%s4.a' % lib))):
|
||||
succ = False
|
||||
break
|
||||
# still can not find it
|
||||
if not succ:
|
||||
print 'Did not find qt libraries, exiting!'
|
||||
Exit(1)
|
||||
|
||||
# check socket libs
|
||||
env['socket_libs'] = []
|
||||
if conf.CheckLib('socket'):
|
||||
env.Append(socket_libs = ['socket'])
|
||||
|
||||
# FIXME: What is nsl, is it related to socket?
|
||||
if conf.CheckLib('nsl'):
|
||||
env.Append(socket_libs = ['nsl'])
|
||||
|
||||
# check boost libraries
|
||||
boost_opt = ARGUMENTS.get('boost', default_boost_opt)
|
||||
# check for system boost
|
||||
succ = False
|
||||
if boost_opt in ['auto', 'system']:
|
||||
pathes = env['LIBPATH'] + ['/usr/lib', '/usr/local/lib']
|
||||
sig = conf.CheckBoostLibraries('boost_signals', pathes)
|
||||
reg = conf.CheckBoostLibraries('boost_regex', pathes)
|
||||
fil = conf.CheckBoostLibraries('boost_filesystem', pathes)
|
||||
ios = conf.CheckBoostLibraries('boost_iostreams', pathes)
|
||||
# if any them is not found
|
||||
if ('' in [sig[0], reg[0], fil[0], ios[0]]):
|
||||
if boost_opt == 'system':
|
||||
print "Can not find system boost libraries"
|
||||
print "Please supply a path through extra_lib_path"
|
||||
print "and try again."
|
||||
Exit(2)
|
||||
else:
|
||||
env['BOOST_LIBRARIES'] = [sig[1], reg[1], fil[1], ios[1]]
|
||||
# assume all boost libraries are in the same path...
|
||||
env.Append(LIBPATH = sig[0])
|
||||
env['INCLUDED_BOOST'] = False
|
||||
succ = True
|
||||
# now, auto and succ = false, or included
|
||||
if not succ:
|
||||
# we do not need to set LIBPATH now.
|
||||
env['BOOST_LIBRARIES'] = ['boost_signals', 'boost_regex',
|
||||
'boost_filesystem', 'boost_iostreams']
|
||||
env['INCLUDED_BOOST'] = True
|
||||
|
||||
#
|
||||
# Building config.h
|
||||
#
|
||||
|
||||
print "Generating ", config_h, "..."
|
||||
|
||||
# I do not handle all macros in src/config.h.in, rather I am following a list
|
||||
# of *used-by-lyx* macros compiled by Abdelrazak Younes <younes.a@free.fr>
|
||||
#
|
||||
# Note: addToConfig etc are defined in scons_util
|
||||
utils.startConfigH(config_h)
|
||||
|
||||
# HAVE_IO_H
|
||||
# HAVE_LIMITS_H
|
||||
# HAVE_LOCALE_H
|
||||
# HAVE_LOCALE
|
||||
# HAVE_PROCESS_H
|
||||
# HAVE_STDLIB_H
|
||||
# HAVE_SYS_STAT_H
|
||||
# HAVE_SYS_TIME_H
|
||||
# HAVE_SYS_TYPES_H
|
||||
# HAVE_SYS_UTIME_H
|
||||
# HAVE_UNISTD_H
|
||||
# HAVE_UTIME_H
|
||||
# HAVE_ISTREAM
|
||||
# HAVE_OSTREAM
|
||||
# HAVE_IOS
|
||||
|
||||
# Check header files
|
||||
headers = [
|
||||
('io.h', 'HAVE_IO_H', 'c'),
|
||||
('limits.h', 'HAVE_LIMITS_H', 'c'),
|
||||
('locale.h', 'HAVE_LOCALE_H', 'c'),
|
||||
('locale', 'HAVE_LOCALE', 'cxx'),
|
||||
('process.h', 'HAVE_PROCESS_H', 'c'),
|
||||
('stdlib.h', 'HAVE_STDLIB_H', 'c'),
|
||||
('sys/stat.h', 'HAVE_SYS_STAT_H', 'c'),
|
||||
('sys/time.h', 'HAVE_SYS_TIME_H', 'c'),
|
||||
('sys/types.h', 'HAVE_SYS_TYPES_H', 'c'),
|
||||
('sys/utime.h', 'HAVE_SYS_UTIME_H', 'c'),
|
||||
('sys/socket.h', 'HAVE_SYS_SOCKET_H', 'c'),
|
||||
('unistd.h', 'HAVE_UNISTD_H', 'c'),
|
||||
('utime.h', 'HAVE_UTIME_H', 'c'),
|
||||
('istream', 'HAVE_ISTREAM', 'cxx'),
|
||||
('ostream', 'HAVE_OSTREAM', 'cxx'),
|
||||
('ios', 'HAVE_IOS', 'cxx')
|
||||
]
|
||||
|
||||
for header in headers:
|
||||
if (header[2] == 'c' and conf.CheckCHeader(header[0])) or \
|
||||
(header[2] == 'cxx' and conf.CheckCXXHeader(header[0])):
|
||||
utils.addToConfig('#define %s 1' % header[1])
|
||||
else:
|
||||
utils.addToConfig('/* #undef %s */' % header[1])
|
||||
|
||||
# HAVE_OPEN
|
||||
# HAVE_CLOSE
|
||||
# HAVE_POPEN
|
||||
# HAVE_PCLOSE
|
||||
# HAVE__OPEN
|
||||
# HAVE__CLOSE
|
||||
# HAVE__POPEN
|
||||
# HAVE__PCLOSE
|
||||
# HAVE_GETPID
|
||||
# HAVE__GETPID
|
||||
# HAVE_MKDIR
|
||||
# HAVE__MKDIR
|
||||
# HAVE_MKTEMP
|
||||
# HAVE_MKSTEMP
|
||||
# HAVE_STRERROR
|
||||
|
||||
# Check functions
|
||||
functions = [
|
||||
('open', 'HAVE_OPEN'),
|
||||
('close', 'HAVE_CLOSE'),
|
||||
('popen', 'HAVE_POPEN'),
|
||||
('pclose', 'HAVE_PCLOSE'),
|
||||
('_open', 'HAVE__OPEN'),
|
||||
('_close', 'HAVE__CLOSE'),
|
||||
('_popen', 'HAVE__POPEN'),
|
||||
('_pclose', 'HAVE__PCLOSE'),
|
||||
('getpid', 'HAVE_GETPID'),
|
||||
('_getpid', 'HAVE__GETPID'),
|
||||
('mkdir', 'HAVE_MKDIR'),
|
||||
('_mkdir', 'HAVE__MKDIR'),
|
||||
('mktemp', 'HAVE_MKTEMP'),
|
||||
('mkstemp', 'HAVE_MKSTEMP'),
|
||||
('strerror', 'HAVE_STRERROR')
|
||||
]
|
||||
|
||||
for func in functions:
|
||||
if conf.CheckFunc(func[0]):
|
||||
utils.addToConfig('#define %s 1' % func[1])
|
||||
else:
|
||||
utils.addToConfig('/* #undef %s */' % func[1])
|
||||
|
||||
# PACKAGE
|
||||
# PACKAGE_VERSION
|
||||
# DEVEL_VERSION
|
||||
utils.addToConfig('#define PACKAGE "%s"' % PACKAGE)
|
||||
utils.addToConfig('#define PACKAGE_VERSION "%s"' % PACKAGE_VERSION)
|
||||
if DEVEL_VERSION:
|
||||
utils.addToConfig('#define DEVEL_VERSION 1')
|
||||
|
||||
# ENABLE_ASSERTIONS
|
||||
# ENABLE_NLS
|
||||
# WITH_WARNINGS
|
||||
# _GLIBCXX_CONCEPT_CHECKS
|
||||
|
||||
# items are (ENV, ARGUMENTS)
|
||||
values = [
|
||||
('ENABLE_ASSERTIONS', 'assertions'),
|
||||
('ENABLE_NLS', 'nls'),
|
||||
('WITH_WARNINGS', 'warnings'),
|
||||
('_GLIBCXX_CONCEPT_CHECKS', 'concept_checks'),
|
||||
]
|
||||
|
||||
for val in values:
|
||||
if (env.has_key(val[0]) and env[val[0]]) or \
|
||||
ARGUMENTS.get(val[1]):
|
||||
utils.addToConfig('#define %s 1' % val[0])
|
||||
else:
|
||||
utils.addToConfig('/* #undef %s */' % val[0])
|
||||
|
||||
# AIKSAURUS_H_LOCATION
|
||||
if ARGUMENTS.get('aiksaurus'):
|
||||
if conf.CheckLib('Aiksaurus'):
|
||||
utils.addToConfig("#define AIKSAURUS_H_LOCATION")
|
||||
else:
|
||||
print 'Library Aiksaurus not found'
|
||||
Exit(2)
|
||||
|
||||
# USE_ASPELL
|
||||
# USE_PSPELL
|
||||
# USE_ISPELL
|
||||
|
||||
# determine headers to use
|
||||
spell_engine = ARGUMENTS.get('spell', 'auto')
|
||||
spell_detected = False
|
||||
if spell_engine in ['auto', 'aspell'] and \
|
||||
conf.CheckLibWithHeader('aspell', 'aspell.h', 'C'):
|
||||
utils.addToConfig('#define USE_ASPELL 1')
|
||||
spell_detected = True
|
||||
elif spell_engine in ['auto', 'pspell'] and \
|
||||
conf.CheckLibWithHeader('pspell', 'pspell.h', 'C'):
|
||||
utils.addToConfig('#define USE_PSPELL 1')
|
||||
spell_detected = True
|
||||
elif spell_engine in ['auto', 'ispell'] and \
|
||||
conf.CheckLibWithHeader('ispell', 'ispell.h', 'C'):
|
||||
utils.addToConfig('#define USE_ISPELL 1')
|
||||
spell_detected = False
|
||||
|
||||
if not spell_detected:
|
||||
# FIXME: can lyx work without an spell engine
|
||||
if spell_engine == 'auto':
|
||||
print "Warning: Can not locate any spell checker"
|
||||
else:
|
||||
print "Warning: Can not locate specified spell checker:", spell_engine
|
||||
|
||||
# USE_POSIX_PACKAGING
|
||||
# USE_MACOSX_PACKAGING
|
||||
# USE_WINDOWS_PACKAGING
|
||||
if packaging_method == 'windows':
|
||||
utils.addToConfig('#define USE_WINDOWS_PACKAGING 1')
|
||||
elif packaging_method == 'posix':
|
||||
utils.addToConfig('#define USE_POSIX_PACKAGING 1')
|
||||
elif packaging_method == 'mac':
|
||||
utils.addToConfig('#define USE_MACOSX_PACKAGING 1')
|
||||
|
||||
# BOOST_POSIX
|
||||
if boost_posix:
|
||||
utils.addToConfig('#define BOOST_POSIX 1')
|
||||
else:
|
||||
utils.addToConfig('/* #undef BOOST_POSIX */')
|
||||
|
||||
# HAVE_PUTENV
|
||||
if conf.CheckPutenv():
|
||||
utils.addToConfig('#define HAVE_PUTENV 1')
|
||||
else:
|
||||
utils.addToConfig('/* #undef HAVE_PUTENV */')
|
||||
|
||||
# HAVE_DECL_ISTREAMBUF_ITERATOR
|
||||
if conf.CheckIstreambufIterator():
|
||||
utils.addToConfig('#define HAVE_DECL_ISTREAMBUF_ITERATOR 1')
|
||||
else:
|
||||
utils.addToConfig('/* #undef HAVE_DECL_ISTREAMBUF_ITERATOR */')
|
||||
|
||||
# MKDIR_TAKES_ONE_ARG
|
||||
if conf.CheckMkdirOneArg():
|
||||
utils.addToConfig('#define MKDIR_TAKES_ONE_ARG 1')
|
||||
else:
|
||||
utils.addToConfig('/* #undef MKDIR_TAKES_ONE_ARG */')
|
||||
|
||||
# HAVE_STD_COUNT
|
||||
if conf.CheckStdCount():
|
||||
utils.addToConfig('#define HAVE_STD_COUNT 1')
|
||||
else:
|
||||
utils.addToConfig('/* #undef HAVE_STD_COUNT */')
|
||||
|
||||
# SELECT_TYPE_ARG1
|
||||
# SELECT_TYPE_ARG234
|
||||
# SELECT_TYPE_ARG5
|
||||
(arg1, arg234, arg5) = conf.CheckSelectArgType()
|
||||
utils.addToConfig('#define SELECT_TYPE_ARG1 %s' % arg1)
|
||||
utils.addToConfig('#define SELECT_TYPE_ARG234 %s' % arg234)
|
||||
utils.addToConfig('#define SELECT_TYPE_ARG5 %s' % arg5)
|
||||
|
||||
# mkstemp
|
||||
# USE_BOOST_FORMAT
|
||||
# WANT_GETFILEATTRIBUTESEX_WRAPPER
|
||||
utils.endConfigH(config_h)
|
||||
|
||||
#
|
||||
# Finish auto-configuration
|
||||
env = conf.Finish()
|
||||
|
||||
#----------------------------------------------------------
|
||||
# Now set up our build process accordingly
|
||||
#----------------------------------------------------------
|
||||
|
||||
#
|
||||
# QT_LIB etc (EXTRA_LIBS holds lib for each frontend)
|
||||
#
|
||||
# NOTE: Tool('qt') or Tool('qt4') will be loaded later
|
||||
# in their respective directory and specialized env.
|
||||
try:
|
||||
if frontend == 'qt3':
|
||||
# note: env.Tool('qt') my set QT_LIB to qt
|
||||
env['QT_LIB'] = 'qt-mt'
|
||||
env['EXTRA_LIBS'] = ['qt-mt']
|
||||
if platform_name == 'cygwin' and use_X11:
|
||||
env['EXTRA_LIBS'] += ['GL', 'Xmu', 'Xi', 'Xrender', 'Xrandr', 'Xcursor',
|
||||
'Xft', 'freetype', 'fontconfig', 'Xext', 'X11', 'SM', 'ICE', 'resolv',
|
||||
'pthread']
|
||||
env.Append(LIBPATH = ['/usr/X11R6/lib'])
|
||||
elif frontend == 'qt4':
|
||||
# local qt4 toolset from
|
||||
# http://www.iua.upf.es/~dgarcia/Codders/sconstools.html
|
||||
env['QT_LIB'] = ['QtCore', 'QtGui', 'Qt3Support']
|
||||
env['EXTRA_LIBS'] = env['QT_LIB']
|
||||
except:
|
||||
print "Can not locate qt tools"
|
||||
print "What I get is "
|
||||
print " QTDIR: ", env['QTDIR']
|
||||
|
||||
#
|
||||
# Build parameters CPPPATH etc
|
||||
#
|
||||
# boost is always in
|
||||
env.Append(CPPPATH = ['#boost', '#src'])
|
||||
|
||||
# TODO: add (more) appropriate compiling options (-DNDEBUG etc)
|
||||
# for debug/release mode
|
||||
if ARGUMENTS.get('mode', default_build_mode) == 'debug':
|
||||
env.Append(CCFLAGS = [])
|
||||
else:
|
||||
env.Append(CCFLAGS = [])
|
||||
|
||||
#
|
||||
# Customized builders
|
||||
#
|
||||
# install customized builders
|
||||
env['BUILDERS']['substFile'] = Builder(action = utils.env_subst)
|
||||
# FIXME: there must be a better way.
|
||||
env['BUILDERS']['fileCopy'] = Builder(action = utils.env_filecopy)
|
||||
|
||||
#
|
||||
# A Link script for cygwin see
|
||||
# http://www.cygwin.com/ml/cygwin/2004-09/msg01101.html
|
||||
# http://www.cygwin.com/ml/cygwin-apps/2004-09/msg00309.html
|
||||
# for details
|
||||
#
|
||||
if platform_name == 'cygwin' and env['frontend'] == 'qt3':
|
||||
ld_script_path = '/usr/lib/qt3/mkspecs/cygwin-g++'
|
||||
ld_script = utils.installCygwinLDScript(ld_script_path)
|
||||
env.Append(LINKFLAGS = ['-Wl,--enable-runtime-pseudo-reloc -Wl,--script,%s -Wl,-s' % ld_script])
|
||||
|
||||
|
||||
#
|
||||
# Report results
|
||||
#
|
||||
# src/support/package.C.in needs the following to replace
|
||||
env['LYX_DIR'] = LYX_DIR
|
||||
env['LOCALEDIR'] = LOCALEDIR
|
||||
env['TOP_SRCDIR'] = str(Dir('#'))
|
||||
env['PROGRAM_SUFFIX'] = PROGRAM_SUFFIX
|
||||
# needed by src/version.C.in => src/version.C
|
||||
env['PACKAGE_VERSION'] = PACKAGE_VERSION
|
||||
# fill in the version info
|
||||
env['VERSION_INFO'] = '''Configuration
|
||||
Host type: %s
|
||||
Special build flags: %s
|
||||
C Compiler: %s
|
||||
C Compiler flags: %s %s
|
||||
C++ Compiler: %s
|
||||
C++ Compiler LyX flags: %s
|
||||
C++ Compiler flags: %s %s
|
||||
Linker flags: %s
|
||||
Linker user flags: %s
|
||||
Build info:
|
||||
Builing directory: %s
|
||||
Local library directory: %s
|
||||
Libraries pathes: %s
|
||||
Boost libraries: %s
|
||||
Frontend:
|
||||
Frontend: %s
|
||||
Packaging: %s
|
||||
LyX binary dir: FIXME
|
||||
LyX files dir: FIXME
|
||||
''' % (platform_name,
|
||||
env.subst('$CCFLAGS'), env.subst('$CC'),
|
||||
env.subst('$CPPFLAGS'), env.subst('$CFLAGS'),
|
||||
env.subst('$CXX'), env.subst('$CXXFLAGS'),
|
||||
env.subst('$CPPFLAGS'), env.subst('$CXXFLAGS'),
|
||||
env.subst('$LINKFLAGS'), env.subst('$LINKFLAGS'),
|
||||
env.subst('$BUILDDIR'), env.subst('$LOCALLIBPATH'),
|
||||
str(env['LIBPATH']), str(env['BOOST_LIBRARIES']),
|
||||
env['frontend'], packaging_method)
|
||||
|
||||
if env['frontend'] in ['qt3', 'qt4']:
|
||||
env['VERSION_INFO'] += ''' include dir: %s
|
||||
library dir: %s
|
||||
X11: %s
|
||||
''' % (env.subst('$QT_INC_PATH'), env.subst('$QT_LIB_PATH'), use_X11)
|
||||
|
||||
print env['VERSION_INFO']
|
||||
|
||||
#
|
||||
# Mingw command line may be too short for our link usage,
|
||||
# Here we use a trick from scons wiki
|
||||
# http://www.scons.org/cgi-sys/cgiwrap/scons/moin.cgi/LongCmdLinesOnWin32
|
||||
#
|
||||
# I also would like to add logging (commands only) capacity to the
|
||||
# spawn system.
|
||||
logfile = ARGUMENTS.get('logfile', default_log_file)
|
||||
if logfile != '' or platform_name == 'win32':
|
||||
import time
|
||||
utils.setLoggedSpawn(env, logfile, longarg = (platform_name == 'win32'),
|
||||
info = '''# This is a log of commands used by scons to build lyx
|
||||
# Time: %s
|
||||
# Command: %s
|
||||
# Info: %s
|
||||
''' % (time.asctime(), ' '.join(sys.argv),
|
||||
env['VERSION_INFO'].replace('\n','\n# ')) )
|
||||
|
||||
|
||||
#
|
||||
# Cleanup stuff
|
||||
#
|
||||
# save options
|
||||
opts.Save('options.cache', env)
|
||||
# -h will print out help info
|
||||
Help(opts.GenerateHelpText(env))
|
||||
|
||||
|
||||
|
||||
#----------------------------------------------------------
|
||||
# Start building
|
||||
#----------------------------------------------------------
|
||||
Export('env')
|
||||
env.BuildDir('$BUILDDIR', 'src')
|
||||
print "Building all targets recursively"
|
||||
|
||||
client = env.SConscript('#$BUILDDIR/client/SConscript')
|
||||
lyx = env.SConscript('#$BUILDDIR/SConscript')
|
||||
tex2lyx = env.SConscript('#$BUILDDIR/tex2lyx/SConscript')
|
||||
|
||||
# avoid using full path to build them
|
||||
Alias('client', client)
|
||||
Alias('tex2lyx', tex2lyx)
|
||||
Alias('lyx', lyx)
|
||||
|
||||
Default('lyx', 'tex2lyx')
|
||||
|
||||
print "Buinging lyx done with targets", map(str, BUILD_TARGETS)
|
||||
|
32
boost/libs/SConscript
Normal file
32
boost/libs/SConscript
Normal file
@ -0,0 +1,32 @@
|
||||
# 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('env')
|
||||
|
||||
# This will be used by all boost libraries
|
||||
boostenv = env.Copy()
|
||||
boostenv.Append(CCFLAGS = '-DBOOST_USER_CONFIG="<config.h>"')
|
||||
# for config.h
|
||||
boostenv.Append(CPPPATH = ['#src'])
|
||||
Export('boostenv')
|
||||
|
||||
print "Entering boost/libs..."
|
||||
|
||||
boost = boostenv.SConscript(
|
||||
dirs = [
|
||||
'filesystem/src',
|
||||
'iostreams/src',
|
||||
'regex/src',
|
||||
'signals/src'
|
||||
]
|
||||
)
|
||||
|
||||
# Return boost libraries
|
||||
Return('boost')
|
26
boost/libs/filesystem/src/SConscript
Normal file
26
boost/libs/filesystem/src/SConscript
Normal file
@ -0,0 +1,26 @@
|
||||
# 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('boostenv')
|
||||
|
||||
print 'Entering boost/libs/filesystem/src...'
|
||||
|
||||
filesystem = boostenv.StaticLibrary(
|
||||
target = '$LOCALLIBPATH/boost_filesystem',
|
||||
source = Split('''
|
||||
convenience.cpp
|
||||
exception.cpp
|
||||
operations_posix_windows.cpp
|
||||
path_posix_windows.cpp
|
||||
''')
|
||||
)
|
||||
|
||||
# Return the library
|
||||
Return('filesystem')
|
25
boost/libs/iostreams/src/SConscript
Normal file
25
boost/libs/iostreams/src/SConscript
Normal file
@ -0,0 +1,25 @@
|
||||
# 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('boostenv')
|
||||
|
||||
print 'Entering boost/libs/iostreams/src...'
|
||||
|
||||
iostreams = boostenv.StaticLibrary(
|
||||
target = '$LOCALLIBPATH/boost_iostreams',
|
||||
source = Split('''
|
||||
file_descriptor.cpp
|
||||
mapped_file.cpp
|
||||
zlib.cpp
|
||||
''')
|
||||
)
|
||||
|
||||
# Return the library
|
||||
Return('iostreams')
|
31
boost/libs/regex/src/SConscript
Normal file
31
boost/libs/regex/src/SConscript
Normal file
@ -0,0 +1,31 @@
|
||||
# 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('boostenv')
|
||||
|
||||
print 'Entering boost/libs/regex/src...'
|
||||
|
||||
regex = boostenv.StaticLibrary(
|
||||
target = '$LOCALLIBPATH/boost_regex',
|
||||
source = Split('''
|
||||
cpp_regex_traits.cpp
|
||||
c_regex_traits.cpp
|
||||
cregex.cpp
|
||||
fileiter.cpp
|
||||
instances.cpp
|
||||
regex.cpp
|
||||
regex_raw_buffer.cpp
|
||||
regex_traits_defaults.cpp
|
||||
w32_regex_traits.cpp
|
||||
''')
|
||||
)
|
||||
|
||||
# Return the library
|
||||
Return('regex')
|
27
boost/libs/signals/src/SConscript
Normal file
27
boost/libs/signals/src/SConscript
Normal file
@ -0,0 +1,27 @@
|
||||
# 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('boostenv')
|
||||
|
||||
print 'Entering boost/libs/signals/src...'
|
||||
|
||||
signals = boostenv.StaticLibrary(
|
||||
target = '$LOCALLIBPATH/boost_signals',
|
||||
source = Split('''
|
||||
connection.cpp
|
||||
named_slot_map.cpp
|
||||
signal_base.cpp
|
||||
slot.cpp
|
||||
trackable.cpp
|
||||
''')
|
||||
)
|
||||
|
||||
# Return the library
|
||||
Return('signals')
|
372
qt4.py
Normal file
372
qt4.py
Normal file
@ -0,0 +1,372 @@
|
||||
import re
|
||||
import os.path
|
||||
|
||||
import SCons.Defaults
|
||||
import SCons.Tool
|
||||
import SCons.Util
|
||||
|
||||
|
||||
class ToolQtWarning(SCons.Warnings.Warning):
|
||||
pass
|
||||
class GeneratedMocFileNotIncluded(ToolQtWarning):
|
||||
pass
|
||||
class QtdirNotFound(ToolQtWarning):
|
||||
pass
|
||||
SCons.Warnings.enableWarningClass(ToolQtWarning)
|
||||
|
||||
qrcinclude_re = re.compile(r'<file>([^<]*)</file>', re.M)
|
||||
|
||||
|
||||
header_extensions = [".h", ".hxx", ".hpp", ".hh"]
|
||||
if SCons.Util.case_sensitive_suffixes('.h', '.H'):
|
||||
header_extensions.append('.H')
|
||||
#cplusplus = __import__('c++', globals(), locals(), ['Scons.Tools'])
|
||||
#cxx_suffixes = cplusplus.CXXSuffixes
|
||||
cxx_suffixes = [".c", ".cxx", ".cpp", ".cc", ".C"]
|
||||
|
||||
def _checkMocIncluded(target, source, env):
|
||||
moc = target[0]
|
||||
cpp = source[0]
|
||||
# looks like cpp.includes is cleared before the build stage :-(
|
||||
# not really sure about the path transformations (moc.cwd? cpp.cwd?) :-/
|
||||
path = SCons.Defaults.CScan.path_function(env, moc.cwd)
|
||||
includes = SCons.Defaults.CScan(cpp, env, path)
|
||||
if not moc in includes:
|
||||
SCons.Warnings.warn(
|
||||
GeneratedMocFileNotIncluded,
|
||||
"Generated moc file '%s' is not included by '%s'" %
|
||||
(str(moc), str(cpp)))
|
||||
|
||||
def _find_file(filename, paths, node_factory):
|
||||
retval = None
|
||||
for dir in paths:
|
||||
node = node_factory(filename, dir)
|
||||
if node.rexists():
|
||||
return node
|
||||
return None
|
||||
|
||||
class _Automoc:
|
||||
"""
|
||||
Callable class, which works as an emitter for Programs, SharedLibraries and
|
||||
StaticLibraries.
|
||||
"""
|
||||
|
||||
def __init__(self, objBuilderName):
|
||||
self.objBuilderName = objBuilderName
|
||||
|
||||
def __call__(self, target, source, env):
|
||||
"""
|
||||
Smart autoscan function. Gets the list of objects for the Program
|
||||
or Lib. Adds objects and builders for the special qt files.
|
||||
"""
|
||||
try:
|
||||
if int(env.subst('$QT_AUTOSCAN')) == 0:
|
||||
return target, source
|
||||
except ValueError:
|
||||
pass
|
||||
try:
|
||||
debug = int(env.subst('$QT_DEBUG'))
|
||||
except ValueError:
|
||||
debug = 0
|
||||
|
||||
# some shortcuts used in the scanner
|
||||
FS = SCons.Node.FS.default_fs
|
||||
splitext = SCons.Util.splitext
|
||||
objBuilder = getattr(env, self.objBuilderName)
|
||||
|
||||
# some regular expressions:
|
||||
# Q_OBJECT detection
|
||||
q_object_search = re.compile(r'[^A-Za-z0-9]Q_OBJECT[^A-Za-z0-9]')
|
||||
# cxx and c comment 'eater'
|
||||
#comment = re.compile(r'(//.*)|(/\*(([^*])|(\*[^/]))*\*/)')
|
||||
# CW: something must be wrong with the regexp. See also bug #998222
|
||||
# CURRENTLY THERE IS NO TEST CASE FOR THAT
|
||||
|
||||
# The following is kind of hacky to get builders working properly (FIXME)
|
||||
objBuilderEnv = objBuilder.env
|
||||
objBuilder.env = env
|
||||
mocBuilderEnv = env.Moc4.env
|
||||
env.Moc4.env = env
|
||||
|
||||
# make a deep copy for the result; MocH objects will be appended
|
||||
out_sources = source[:]
|
||||
|
||||
for obj in source:
|
||||
if not obj.has_builder():
|
||||
# binary obj file provided
|
||||
if debug:
|
||||
print "scons: qt: '%s' seems to be a binary. Discarded." % str(obj)
|
||||
continue
|
||||
cpp = obj.sources[0]
|
||||
if not splitext(str(cpp))[1] in cxx_suffixes:
|
||||
if debug:
|
||||
print "scons: qt: '%s' is no cxx file. Discarded." % str(cpp)
|
||||
# c or fortran source
|
||||
continue
|
||||
#cpp_contents = comment.sub('', cpp.get_contents())
|
||||
cpp_contents = cpp.get_contents()
|
||||
h=None
|
||||
for h_ext in header_extensions:
|
||||
# try to find the header file in the corresponding source
|
||||
# directory
|
||||
hname = splitext(cpp.name)[0] + h_ext
|
||||
h = _find_file(hname,
|
||||
(cpp.get_dir(),),
|
||||
FS.File)
|
||||
if h:
|
||||
if debug:
|
||||
print "scons: qt: Scanning '%s' (header of '%s')" % (str(h), str(cpp))
|
||||
#h_contents = comment.sub('', h.get_contents())
|
||||
h_contents = h.get_contents()
|
||||
break
|
||||
if not h and debug:
|
||||
print "scons: qt: no header for '%s'." % (str(cpp))
|
||||
if h and q_object_search.search(h_contents):
|
||||
# h file with the Q_OBJECT macro found -> add moc_cpp
|
||||
moc_cpp = env.Moc4(h)
|
||||
moc_o = objBuilder(moc_cpp)
|
||||
out_sources.append(moc_o)
|
||||
#moc_cpp.target_scanner = SCons.Defaults.CScan
|
||||
if debug:
|
||||
print "scons: qt: found Q_OBJECT macro in '%s', moc'ing to '%s'" % (str(h), str(moc_cpp))
|
||||
if cpp and q_object_search.search(cpp_contents):
|
||||
# cpp file with Q_OBJECT macro found -> add moc
|
||||
# (to be included in cpp)
|
||||
moc = env.Moc4(cpp)
|
||||
env.Ignore(moc, moc)
|
||||
if debug:
|
||||
print "scons: qt: found Q_OBJECT macro in '%s', moc'ing to '%s'" % (str(cpp), str(moc))
|
||||
#moc.source_scanner = SCons.Defaults.CScan
|
||||
# restore the original env attributes (FIXME)
|
||||
objBuilder.env = objBuilderEnv
|
||||
env.Moc4.env = mocBuilderEnv
|
||||
|
||||
return (target, out_sources)
|
||||
|
||||
AutomocShared = _Automoc('SharedObject')
|
||||
AutomocStatic = _Automoc('StaticObject')
|
||||
|
||||
def _detect(env):
|
||||
"""Not really safe, but fast method to detect the QT library"""
|
||||
|
||||
QTDIR = env.get('QTDIR',None)
|
||||
if QTDIR!=None : return QTDIR
|
||||
|
||||
QTDIR = os.environ.get('QTDIR',None)
|
||||
if QTDIR!=None : return QTDIR
|
||||
|
||||
moc = env.WhereIs('moc-qt4') or env.WhereIs('moc')
|
||||
if moc:
|
||||
SCons.Warnings.warn(
|
||||
QtdirNotFound,
|
||||
"QTDIR variable is not defined, using moc executable as a hint (QTDIR=%s)" % QTDIR)
|
||||
return os.path.dirname(os.path.dirname(moc))
|
||||
|
||||
SCons.Warnings.warn(
|
||||
QtdirNotFound,
|
||||
"Could not detect qt, using empty QTDIR")
|
||||
return None
|
||||
|
||||
def generate(env):
|
||||
"""Add Builders and construction variables for qt to an Environment."""
|
||||
|
||||
print "Loading qt4 tool..."
|
||||
|
||||
def locateQt4Command(env, command, qtdir) :
|
||||
fullpath = env.Detect([command+'-qt4', command])
|
||||
if not (fullpath is None) : return fullpath
|
||||
fullpath1 = os.path.join(qtdir,'bin',command +'-qt4')
|
||||
if os.access(fullpath1, os.X_OK) or \
|
||||
os.access(fullpath1+".exe", os.X_OK):
|
||||
return fullpath1
|
||||
fullpath2 = os.path.join(qtdir,'bin',command)
|
||||
if os.access(fullpath2, os.X_OK) or \
|
||||
os.access(fullpath2+".exe", os.X_OK):
|
||||
return fullpath2
|
||||
raise "Qt4 command '" + command + "' not found. Tried: " + fullpath1 + " and "+ fullpath2
|
||||
|
||||
|
||||
CLVar = SCons.Util.CLVar
|
||||
Action = SCons.Action.Action
|
||||
Builder = SCons.Builder.Builder
|
||||
splitext = SCons.Util.splitext
|
||||
|
||||
# the basics
|
||||
env['QTDIR'] = _detect(env)
|
||||
env['QT4_MOC'] = locateQt4Command(env,'moc', env['QTDIR'])
|
||||
env['QT4_UIC'] = locateQt4Command(env,'uic', env['QTDIR'])
|
||||
env['QT4_RCC'] = locateQt4Command(env,'rcc', env['QTDIR'])
|
||||
env['QT4_LUPDATE'] = locateQt4Command(env,'lupdate', env['QTDIR'])
|
||||
env['QT4_LRELEASE'] = locateQt4Command(env,'lrelease', env['QTDIR'])
|
||||
|
||||
# Should the qt tool try to figure out, which sources are to be moc'ed ?
|
||||
env['QT4_AUTOSCAN'] = 1
|
||||
|
||||
# Some QT specific flags. I don't expect someone wants to
|
||||
# manipulate those ...
|
||||
env['QT4_UICDECLFLAGS'] = CLVar('')
|
||||
env['QT4_MOCFROMHFLAGS'] = CLVar('')
|
||||
env['QT4_MOCFROMCXXFLAGS'] = CLVar('-i')
|
||||
env['QT4_QRCFLAGS'] = ''
|
||||
|
||||
# suffixes/prefixes for the headers / sources to generate
|
||||
env['QT4_MOCHPREFIX'] = 'moc_'
|
||||
env['QT4_MOCHSUFFIX'] = '$CXXFILESUFFIX'
|
||||
env['QT4_MOCCXXPREFIX'] = 'moc_'
|
||||
env['QT4_MOCCXXSUFFIX'] = '.moc'
|
||||
env['QT4_UISUFFIX'] = '.ui'
|
||||
env['QT4_UICDECLPREFIX'] = 'ui_'
|
||||
env['QT4_UICDECLSUFFIX'] = '.h'
|
||||
env['QT4_QRCSUFFIX'] = '.qrc',
|
||||
env['QT4_QRCCXXSUFFIX'] = '$CXXFILESUFFIX'
|
||||
env['QT4_QRCCXXPREFIX'] = 'qrc_'
|
||||
|
||||
env['QT4_LIB'] = '' # KLUDGE to avoid linking qt3 library
|
||||
|
||||
# Translation builder
|
||||
tsbuilder = Builder(
|
||||
action ='$QT4_LUPDATE $SOURCES -ts $TARGETS',
|
||||
multi=1
|
||||
)
|
||||
env.Append( BUILDERS = { 'Ts': tsbuilder } )
|
||||
qmbuilder = Builder(
|
||||
action =[
|
||||
'$QT4_LRELEASE $SOURCE',
|
||||
],
|
||||
src_suffix = '.ts',
|
||||
suffix = '.qm',
|
||||
single_source = True
|
||||
)
|
||||
env.Append( BUILDERS = { 'Qm': qmbuilder } )
|
||||
|
||||
# Resource builder
|
||||
def scanResources(node, env, path, arg):
|
||||
contents = node.get_contents()
|
||||
includes = qrcinclude_re.findall(contents)
|
||||
return includes
|
||||
qrcscanner = env.Scanner(name = 'qrcfile',
|
||||
function = scanResources,
|
||||
argument = None,
|
||||
skeys = ['.qrc'])
|
||||
qrcbuilder = Builder(
|
||||
action ='$QT4_RCC $QT4_QRCFLAGS $SOURCE -o $TARGET',
|
||||
source_scanner = qrcscanner,
|
||||
src_suffix = '$QT4_QRCSUFFIX',
|
||||
suffix = '$QT4_QRCCXXSUFFIX',
|
||||
prefix = '$QT4_QRCCXXPREFIX',
|
||||
single_source = True
|
||||
)
|
||||
env.Append( BUILDERS = { 'Qrc': qrcbuilder } )
|
||||
|
||||
# Interface builder
|
||||
env['QT4_UIC4COM'] = [
|
||||
CLVar('$QT4_UIC $QT4_UICDECLFLAGS -o ${TARGETS[0]} $SOURCE'),
|
||||
]
|
||||
uic4builder = Builder(
|
||||
action='$QT4_UIC4COM',
|
||||
src_suffix='$QT4_UISUFFIX',
|
||||
suffix='$QT4_UICDECLSUFFIX',
|
||||
prefix='$QT4_UICDECLPREFIX',
|
||||
single_source = True
|
||||
)
|
||||
env.Append( BUILDERS = { 'Uic4': uic4builder } )
|
||||
|
||||
# Metaobject builder
|
||||
env['QT4_MOCFROMHCOM'] = (
|
||||
'$QT4_MOC $QT4_MOCFROMHFLAGS -o ${TARGETS[0]} $SOURCE')
|
||||
env['QT4_MOCFROMCXXCOM'] = [
|
||||
CLVar('$QT4_MOC $QT4_MOCFROMCXXFLAGS -o ${TARGETS[0]} $SOURCE'),
|
||||
Action(_checkMocIncluded,None)]
|
||||
mocBld = Builder(action={}, prefix={}, suffix={})
|
||||
for h in header_extensions:
|
||||
mocBld.add_action(h, '$QT4_MOCFROMHCOM')
|
||||
mocBld.prefix[h] = '$QT4_MOCHPREFIX'
|
||||
mocBld.suffix[h] = '$QT4_MOCHSUFFIX'
|
||||
for cxx in cxx_suffixes:
|
||||
mocBld.add_action(cxx, '$QT4_MOCFROMCXXCOM')
|
||||
mocBld.prefix[cxx] = '$QT4_MOCCXXPREFIX'
|
||||
mocBld.suffix[cxx] = '$QT4_MOCCXXSUFFIX'
|
||||
env.Append( BUILDERS = { 'Moc4': mocBld } )
|
||||
|
||||
# er... no idea what that was for
|
||||
static_obj, shared_obj = SCons.Tool.createObjBuilders(env)
|
||||
static_obj.src_builder.append('Uic4')
|
||||
shared_obj.src_builder.append('Uic4')
|
||||
|
||||
# We use the emitters of Program / StaticLibrary / SharedLibrary
|
||||
# to scan for moc'able files
|
||||
# We can't refer to the builders directly, we have to fetch them
|
||||
# as Environment attributes because that sets them up to be called
|
||||
# correctly later by our emitter.
|
||||
env.AppendUnique(PROGEMITTER =[AutomocStatic],
|
||||
SHLIBEMITTER=[AutomocShared],
|
||||
LIBEMITTER =[AutomocStatic],
|
||||
# Of course, we need to link against the qt libraries
|
||||
CPPPATH=[os.path.join('$QTDIR', 'include')],
|
||||
LIBPATH=[os.path.join('$QTDIR', 'lib')],
|
||||
LIBS=['$QT4_LIB'])
|
||||
|
||||
import new
|
||||
method = new.instancemethod(enable_modules, env, SCons.Environment)
|
||||
env.EnableQt4Modules=method
|
||||
|
||||
def enable_modules(self, modules, debug=False) :
|
||||
import sys
|
||||
|
||||
validModules = [
|
||||
'QtCore',
|
||||
'QtGui',
|
||||
'QtOpenGL',
|
||||
'Qt3Support',
|
||||
# The next modules have not been tested yet so, please
|
||||
# maybe they require additional work on non Linux platforms
|
||||
'QtSql',
|
||||
'QtNetwork',
|
||||
'QtSvg',
|
||||
'QtTest',
|
||||
'QtXml',
|
||||
'QtUiTools',
|
||||
]
|
||||
pclessModules = [
|
||||
'QtUiTools',
|
||||
'QtUiTools_debug',
|
||||
]
|
||||
invalidModules=[]
|
||||
for module in modules:
|
||||
if module not in validModules :
|
||||
invalidModules.append(module)
|
||||
if invalidModules :
|
||||
raise "Modules %s are not Qt4 modules. Valid Qt4 modules are: %s"% \
|
||||
(str(invalidModules),str(validModules))
|
||||
|
||||
# TODO: Check whether we should add QT_CORE_LIB, QT_XML_LIB, QT_NETWORK_LIB...
|
||||
if 'QtGui' in modules:
|
||||
self.AppendUnique(CPPFLAGS='-DQT_GUI_LIB')
|
||||
|
||||
if sys.platform == "linux2" :
|
||||
if debug : modules = [module+"_debug" for module in modules]
|
||||
for module in modules :
|
||||
if module in pclessModules :
|
||||
# self.AppendUnique(LIBS=[module])
|
||||
self.AppendUnique(LIBPATH=[os.path.join(self["QTDIR"],"lib",module)])
|
||||
self.AppendUnique(CPPPATH=[os.path.join(self["QTDIR"],"include","qt4",module)])
|
||||
modules.remove(module)
|
||||
self.ParseConfig('PKG_CONFIG_PATH=%s/lib/pkgconfig pkg-config %s --libs --cflags'%
|
||||
(
|
||||
self['QTDIR'],
|
||||
' '.join(modules)))
|
||||
return
|
||||
if sys.platform == "win32" :
|
||||
if debug : debugSuffix = 'd'
|
||||
else : debugSuffix = ''
|
||||
self.AppendUnique(LIBS=[lib+'4'+debugSuffix for lib in modules])
|
||||
if 'QtOpenGL' in modules:
|
||||
self.AppendUnique(LIBS=['opengl32'])
|
||||
self.AppendUnique(CPPPATH=[ '$QTDIR/include/'+module
|
||||
for module in modules])
|
||||
self.AppendUnique(LIBPATH=['$QTDIR/lib'])
|
||||
|
||||
|
||||
def exists(env):
|
||||
return _detect(env)
|
||||
|
776
scons_utils.py
Normal file
776
scons_utils.py
Normal file
@ -0,0 +1,776 @@
|
||||
# vi:filetype=python:expandtab:tabstop=2:shiftwidth=2
|
||||
#
|
||||
# file scons_utils.py
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
# This file defines all the utility functions for the
|
||||
# scons-based build system of lyx
|
||||
#
|
||||
|
||||
import os, sys, re, shutil, glob
|
||||
|
||||
def writeToFile(filename, lines, append = False):
|
||||
" utility function: write or append lines to filename "
|
||||
if append:
|
||||
file = open(filename, 'a')
|
||||
else:
|
||||
file = open(filename, 'w')
|
||||
file.write(lines)
|
||||
file.close()
|
||||
|
||||
|
||||
def addToConfig(lines):
|
||||
''' utility function: shortcut for appending lines to outfile
|
||||
add newline at the end of lines.
|
||||
'''
|
||||
if lines.strip() != '':
|
||||
writeToFile(os.path.join('src', 'config.h'),
|
||||
lines + '\n\n', append = True)
|
||||
|
||||
|
||||
def printEnvironment(env, keys=[]):
|
||||
''' used to check profile settings '''
|
||||
dict = env.Dictionary()
|
||||
if len(keys) == 0:
|
||||
keys = dict.keys()
|
||||
keys.sort()
|
||||
for key in keys:
|
||||
try:
|
||||
# try to expand, but this is not always possible
|
||||
print key, '=', env.subst('$'+key)
|
||||
except:
|
||||
print '<<UNEXPANDED>>:', key, '=', dict[key]
|
||||
|
||||
|
||||
def env_subst(target, source, env):
|
||||
''' subst variables in source by those in env, and output to target
|
||||
source and target are scons File() objects
|
||||
|
||||
%key% (not key itself) is an indication of substitution
|
||||
'''
|
||||
assert len(target) == 1
|
||||
assert len(source) == 1
|
||||
target_file = file(str(target[0]), "w")
|
||||
source_file = file(str(source[0]), "r")
|
||||
|
||||
contents = source_file.read()
|
||||
for (k, v) in env.items():
|
||||
try:
|
||||
contents = re.sub('%'+k+'%', v, contents)
|
||||
except:
|
||||
pass
|
||||
target_file.write(contents + "\n")
|
||||
target_file.close()
|
||||
#st = os.stat(str(source[0]))
|
||||
#os.chmod(str(target[0]), stat.S_IMODE(st[stat.ST_MODE]) | stat.S_IWRITE)
|
||||
|
||||
|
||||
def env_filecopy(target, source, env):
|
||||
shutil.copy(str(source[0]), str(target[0]))
|
||||
|
||||
|
||||
#
|
||||
# autoconf tests
|
||||
#
|
||||
|
||||
def checkPkgConfig(conf, version):
|
||||
''' Return false if pkg_config does not exist, or is too old '''
|
||||
conf.Message('Checking for pkg-config...')
|
||||
ret = conf.TryAction('pkg-config --atleast-pkgconfig-version=%s' % version)[0]
|
||||
conf.Result(ret)
|
||||
return ret
|
||||
|
||||
|
||||
def checkPackage(conf, pkg):
|
||||
''' check if pkg is under the control of conf '''
|
||||
conf.Message('Checking for package %s...' % pkg)
|
||||
print "pkg-config --exists %s" % pkg
|
||||
ret = conf.TryAction("pkg-config --print-errors --exists %s" % pkg)[0]
|
||||
conf.Result(ret)
|
||||
return ret
|
||||
|
||||
|
||||
def startConfigH(config_h):
|
||||
''' Write the first part of config.h '''
|
||||
writeToFile(config_h,
|
||||
'''/* src/config.h. Generated by scon. */
|
||||
|
||||
/* -*- C++ -*- */
|
||||
/*
|
||||
* \file config.h
|
||||
* This file is part of LyX, the document processor.
|
||||
* Licence details can be found in the file COPYING.
|
||||
*
|
||||
* This is the compilation configuration file for LyX.
|
||||
* It was generated by scon.
|
||||
* You might want to change some of the defaults if something goes wrong
|
||||
* during the compilation.
|
||||
*/
|
||||
|
||||
#ifndef _CONFIG_H
|
||||
#define _CONFIG_H
|
||||
''')
|
||||
|
||||
|
||||
def endConfigH(config_h):
|
||||
''' Write the last part of config.h '''
|
||||
writeToFile(config_h, '''
|
||||
/************************************************************
|
||||
** You should not need to change anything beyond this point */
|
||||
|
||||
#ifndef HAVE_STRERROR
|
||||
#if defined(__cplusplus)
|
||||
extern "C"
|
||||
#endif
|
||||
char * strerror(int n);
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_MKSTEMP
|
||||
#ifndef HAVE_DECL_MKSTEMP
|
||||
#if defined(__cplusplus)
|
||||
extern "C"
|
||||
#endif
|
||||
int mkstemp(char*);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef __EMX__
|
||||
# include "support/os2_defines.h"
|
||||
#endif
|
||||
|
||||
#if defined(HAVE_OSTREAM) && defined(HAVE_LOCALE) && defined(HAVE_SSTREAM)
|
||||
# define USE_BOOST_FORMAT 1
|
||||
#else
|
||||
# define USE_BOOST_FORMAT 0
|
||||
#endif
|
||||
|
||||
#define BOOST_USER_CONFIG <config.h>
|
||||
|
||||
#if !defined(ENABLE_ASSERTIONS)
|
||||
# define BOOST_DISABLE_ASSERTS 1
|
||||
#endif
|
||||
#define BOOST_ENABLE_ASSERT_HANDLER 1
|
||||
|
||||
#define BOOST_DISABLE_THREADS 1
|
||||
#define BOOST_NO_WREGEX 1
|
||||
#define BOOST_NO_WSTRING 1
|
||||
|
||||
#ifdef __CYGWIN__
|
||||
# define BOOST_POSIX 1
|
||||
#endif
|
||||
|
||||
#if defined(HAVE_NEWAPIS_H)
|
||||
# define WANT_GETFILEATTRIBUTESEX_WRAPPER 1
|
||||
#endif
|
||||
|
||||
#endif
|
||||
''', append=True)
|
||||
|
||||
|
||||
#HAVE_PUTENV
|
||||
def checkPutenv(conf):
|
||||
check_putenv_source = """
|
||||
#include <stdlib.h>
|
||||
int main()
|
||||
{
|
||||
putenv("");
|
||||
return(0);
|
||||
}
|
||||
"""
|
||||
conf.Message('Checking for putenv... ')
|
||||
ret = conf.TryLink(check_putenv_source, '.c')
|
||||
conf.Result(ret)
|
||||
return ret
|
||||
|
||||
|
||||
#HAVE_DECL_ISTREAMBUF_ITERATOR
|
||||
def checkIstreambufIterator(conf):
|
||||
check_istreambuf_iterator_source = """
|
||||
#include <streambuf>
|
||||
#include <istream>
|
||||
int main()
|
||||
{
|
||||
std::istreambuf_iterator<std::istream> iter;
|
||||
return 0;
|
||||
}
|
||||
"""
|
||||
conf.Message('Checking for iostreambuf::iterator... ')
|
||||
ret = conf.TryLink(check_istreambuf_iterator_source, '.cpp')
|
||||
conf.Result(ret)
|
||||
return ret
|
||||
|
||||
|
||||
#MKDIR_TAKES_ONE_ARG
|
||||
def checkMkdirOneArg(conf):
|
||||
check_mkdir_one_arg_source = """
|
||||
#include <sys/stat.h>
|
||||
int main()
|
||||
{
|
||||
mkdir("somedir");
|
||||
}
|
||||
"""
|
||||
conf.Message('Checking for the number of args for mkdir... ')
|
||||
ret = conf.TryLink(check_mkdir_one_arg_source, '.c')
|
||||
if ret:
|
||||
conf.Result('one')
|
||||
else:
|
||||
conf.Result('two')
|
||||
return ret
|
||||
|
||||
|
||||
#HAVE_STD_COUNT
|
||||
def checkStdCount(conf):
|
||||
check_std_count_source = """
|
||||
#include <algorithm>
|
||||
using std::count;
|
||||
int countChar(char * b, char * e, char const c)
|
||||
{
|
||||
return count(b, e, c);
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
char a[] = "hello";
|
||||
int i = countChar(a, a + 5, 'l');
|
||||
}
|
||||
"""
|
||||
conf.Message('Checking for std::count... ')
|
||||
ret = conf.TryLink(check_std_count_source, '.cpp')
|
||||
conf.Result(ret)
|
||||
return ret
|
||||
|
||||
|
||||
# SELECT_TYPE_ARG1
|
||||
# SELECT_TYPE_ARG234
|
||||
# SELECT_TYPE_ARG5
|
||||
def checkSelectArgType(conf):
|
||||
''' Adapted from autoconf '''
|
||||
conf.Message('Checking for arg types for select... ')
|
||||
for arg234 in ['fd_set *', 'int *', 'void *']:
|
||||
for arg1 in ['int', 'size_t', 'unsigned long', 'unsigned']:
|
||||
for arg5 in ['struct timeval *', 'const struct timeval *']:
|
||||
check_select_source = '''
|
||||
#if HAVE_SYS_SELECT_H
|
||||
# include <sys/select.h>
|
||||
#endif
|
||||
#if HAVE_SYS_SOCKET_H
|
||||
# include <sys/socket.h>
|
||||
#endif
|
||||
extern int select (%s, %s, %s, %s, %s);
|
||||
int main()
|
||||
{
|
||||
return(0);
|
||||
}
|
||||
''' % (arg1, arg234, arg234, arg234, arg5)
|
||||
ret = conf.TryLink(check_select_source, '.c')
|
||||
if ret:
|
||||
conf.Result(ret)
|
||||
return (arg1, arg234, arg5)
|
||||
conf.Result('no (use default)')
|
||||
return ('int', 'int *', 'struct timeval *')
|
||||
|
||||
|
||||
def checkBoostLibraries(conf, lib, pathes):
|
||||
''' look for boost libraries '''
|
||||
conf.Message('Checking for boost library %s... ' % lib)
|
||||
for path in pathes:
|
||||
# direct form: e.g. libboost_iostreams.a
|
||||
if os.path.isfile(os.path.join(path, 'lib%s.a' % lib)):
|
||||
conf.Result('yes')
|
||||
return (path, lib)
|
||||
# check things like libboost_iostreams-gcc.a
|
||||
# I know, this does not look clever ...
|
||||
files = glob.glob(os.path.join(path, 'lib%s-[a-z][a-z].a' % lib)) + \
|
||||
glob.glob(os.path.join(path, 'lib%s-[a-z][a-z][a-z].a' % lib)) + \
|
||||
glob.glob(os.path.join(path, 'lib%s-[a-z][a-z][a-z][a-z].a' % lib))
|
||||
# and not clean
|
||||
if len(files) >= 1:
|
||||
# get xxx-gcc from /usr/local/lib/libboost_xxx-gcc.a
|
||||
conf.Result('yes')
|
||||
return (path, files[0].split(os.sep)[-1][3:-2])
|
||||
conf.Result('n')
|
||||
return ('','')
|
||||
|
||||
|
||||
import SCons.Node
|
||||
def processLang(env, folder):
|
||||
""" Process translations (.po files) in a po/ dir
|
||||
This is copied from KDE knetstats-1.5/admin/kde.py
|
||||
|
||||
FIXME: imcomplete
|
||||
"""
|
||||
import glob
|
||||
dir=SCons.Node.FS.default_fs.Dir(folder).srcnode()
|
||||
fld=dir.srcnode()
|
||||
tmptransfiles = glob.glob(str(fld)+'/*.po')
|
||||
|
||||
transfiles=[]
|
||||
if env.has_key('_BUILDDIR_'):
|
||||
bdir=env['_BUILDDIR_']
|
||||
for dir in env.make_list(tmptransfiles):
|
||||
transfiles.append( env.join(bdir, dir) )
|
||||
else:
|
||||
transfiles=tmptransfiles
|
||||
|
||||
env['MSGFMT'] = 'msgfmt'
|
||||
env['BUILDERS']['Transfiles']=SCons.Builder.Builder(action='$MSGFMT $SOURCE -o $TARGET',suffix='.gmo',src_suffix='.po')
|
||||
languages=None
|
||||
# FIXME: KDE has this ARGS thing...
|
||||
#if env['ARGS'] and env['ARGS'].has_key('languages'):
|
||||
# languages=env.make_list(env['ARGS']['languages'])
|
||||
mydir=SCons.Node.FS.default_fs.Dir('.')
|
||||
for f in transfiles:
|
||||
fname=f.replace(mydir.abspath, '')
|
||||
file=SCons.Node.FS.default_fs.File(fname)
|
||||
country = SCons.Util.splitext(file.name)[0]
|
||||
if not languages or country in languages:
|
||||
result = env.Transfiles(file)
|
||||
# FIXME
|
||||
# dir=env.join( getInstDirForResType(env, 'KDELOCALE'), country)
|
||||
# env.bksys_install(env.join(dir, 'LC_MESSAGES'), result, destfile=appname+'.mo')
|
||||
|
||||
|
||||
def installCygwinLDScript(path):
|
||||
''' Install i386pe.x-no-rdata '''
|
||||
ld_script = os.path.join(path, 'i386pe.x-no-rdata')
|
||||
script = open(ld_script, 'w')
|
||||
script.write('''/* specific linker script avoiding .rdata sections, for normal executables
|
||||
for a reference see
|
||||
http://www.cygwin.com/ml/cygwin/2004-09/msg01101.html
|
||||
http://www.cygwin.com/ml/cygwin-apps/2004-09/msg00309.html
|
||||
*/
|
||||
OUTPUT_FORMAT(pei-i386)
|
||||
SEARCH_DIR("/usr/i686-pc-cygwin/lib"); SEARCH_DIR("/usr/lib"); SEARCH_DIR("/usr/lib/w32api");
|
||||
ENTRY(_mainCRTStartup)
|
||||
SECTIONS
|
||||
{
|
||||
.text __image_base__ + __section_alignment__ :
|
||||
{
|
||||
*(.init)
|
||||
*(.text)
|
||||
*(SORT(.text$*))
|
||||
*(.glue_7t)
|
||||
*(.glue_7)
|
||||
___CTOR_LIST__ = .; __CTOR_LIST__ = . ;
|
||||
LONG (-1);*(.ctors); *(.ctor); *(SORT(.ctors.*)); LONG (0);
|
||||
___DTOR_LIST__ = .; __DTOR_LIST__ = . ;
|
||||
LONG (-1); *(.dtors); *(.dtor); *(SORT(.dtors.*)); LONG (0);
|
||||
*(.fini)
|
||||
/* ??? Why is .gcc_exc here? */
|
||||
*(.gcc_exc)
|
||||
PROVIDE (etext = .);
|
||||
*(.gcc_except_table)
|
||||
}
|
||||
/* The Cygwin32 library uses a section to avoid copying certain data
|
||||
on fork. This used to be named ".data". The linker used
|
||||
to include this between __data_start__ and __data_end__, but that
|
||||
breaks building the cygwin32 dll. Instead, we name the section
|
||||
".data_cygwin_nocopy" and explictly include it after __data_end__. */
|
||||
.data BLOCK(__section_alignment__) :
|
||||
{
|
||||
__data_start__ = . ;
|
||||
*(.data)
|
||||
*(.data2)
|
||||
*(SORT(.data$*))
|
||||
*(.rdata)
|
||||
*(SORT(.rdata$*))
|
||||
*(.eh_frame)
|
||||
___RUNTIME_PSEUDO_RELOC_LIST__ = .;
|
||||
__RUNTIME_PSEUDO_RELOC_LIST__ = .;
|
||||
*(.rdata_runtime_pseudo_reloc)
|
||||
___RUNTIME_PSEUDO_RELOC_LIST_END__ = .;
|
||||
__RUNTIME_PSEUDO_RELOC_LIST_END__ = .;
|
||||
__data_end__ = . ;
|
||||
*(.data_cygwin_nocopy)
|
||||
}
|
||||
.rdata BLOCK(__section_alignment__) :
|
||||
{
|
||||
}
|
||||
.pdata BLOCK(__section_alignment__) :
|
||||
{
|
||||
*(.pdata)
|
||||
}
|
||||
.bss BLOCK(__section_alignment__) :
|
||||
{
|
||||
__bss_start__ = . ;
|
||||
*(.bss)
|
||||
*(COMMON)
|
||||
__bss_end__ = . ;
|
||||
}
|
||||
.edata BLOCK(__section_alignment__) :
|
||||
{
|
||||
*(.edata)
|
||||
}
|
||||
/DISCARD/ :
|
||||
{
|
||||
*(.debug$S)
|
||||
*(.debug$T)
|
||||
*(.debug$F)
|
||||
*(.drectve)
|
||||
}
|
||||
.idata BLOCK(__section_alignment__) :
|
||||
{
|
||||
/* This cannot currently be handled with grouped sections.
|
||||
See pe.em:sort_sections. */
|
||||
SORT(*)(.idata$2)
|
||||
SORT(*)(.idata$3)
|
||||
/* These zeroes mark the end of the import list. */
|
||||
LONG (0); LONG (0); LONG (0); LONG (0); LONG (0);
|
||||
SORT(*)(.idata$4)
|
||||
SORT(*)(.idata$5)
|
||||
SORT(*)(.idata$6)
|
||||
SORT(*)(.idata$7)
|
||||
}
|
||||
.CRT BLOCK(__section_alignment__) :
|
||||
{
|
||||
___crt_xc_start__ = . ;
|
||||
*(SORT(.CRT$XC*)) /* C initialization */
|
||||
___crt_xc_end__ = . ;
|
||||
___crt_xi_start__ = . ;
|
||||
*(SORT(.CRT$XI*)) /* C++ initialization */
|
||||
___crt_xi_end__ = . ;
|
||||
___crt_xl_start__ = . ;
|
||||
*(SORT(.CRT$XL*)) /* TLS callbacks */
|
||||
/* ___crt_xl_end__ is defined in the TLS Directory support code */
|
||||
___crt_xp_start__ = . ;
|
||||
*(SORT(.CRT$XP*)) /* Pre-termination */
|
||||
___crt_xp_end__ = . ;
|
||||
___crt_xt_start__ = . ;
|
||||
*(SORT(.CRT$XT*)) /* Termination */
|
||||
___crt_xt_end__ = . ;
|
||||
}
|
||||
.tls BLOCK(__section_alignment__) :
|
||||
{
|
||||
___tls_start__ = . ;
|
||||
*(.tls)
|
||||
*(.tls$)
|
||||
*(SORT(.tls$*))
|
||||
___tls_end__ = . ;
|
||||
}
|
||||
.endjunk BLOCK(__section_alignment__) :
|
||||
{
|
||||
/* end is deprecated, don't use it */
|
||||
PROVIDE (end = .);
|
||||
PROVIDE ( _end = .);
|
||||
__end__ = .;
|
||||
}
|
||||
.rsrc BLOCK(__section_alignment__) :
|
||||
{
|
||||
*(.rsrc)
|
||||
*(SORT(.rsrc$*))
|
||||
}
|
||||
.reloc BLOCK(__section_alignment__) :
|
||||
{
|
||||
*(.reloc)
|
||||
}
|
||||
.stab BLOCK(__section_alignment__) (NOLOAD) :
|
||||
{
|
||||
*(.stab)
|
||||
}
|
||||
.stabstr BLOCK(__section_alignment__) (NOLOAD) :
|
||||
{
|
||||
*(.stabstr)
|
||||
}
|
||||
/* DWARF debug sections.
|
||||
Symbols in the DWARF debugging sections are relative to the beginning
|
||||
of the section. Unlike other targets that fake this by putting the
|
||||
section VMA at 0, the PE format will not allow it. */
|
||||
/* DWARF 1.1 and DWARF 2. */
|
||||
.debug_aranges BLOCK(__section_alignment__) (NOLOAD) :
|
||||
{
|
||||
*(.debug_aranges)
|
||||
}
|
||||
.debug_pubnames BLOCK(__section_alignment__) (NOLOAD) :
|
||||
{
|
||||
*(.debug_pubnames)
|
||||
}
|
||||
/* DWARF 2. */
|
||||
.debug_info BLOCK(__section_alignment__) (NOLOAD) :
|
||||
{
|
||||
*(.debug_info) *(.gnu.linkonce.wi.*)
|
||||
}
|
||||
.debug_abbrev BLOCK(__section_alignment__) (NOLOAD) :
|
||||
{
|
||||
*(.debug_abbrev)
|
||||
}
|
||||
.debug_line BLOCK(__section_alignment__) (NOLOAD) :
|
||||
{
|
||||
*(.debug_line)
|
||||
}
|
||||
.debug_frame BLOCK(__section_alignment__) (NOLOAD) :
|
||||
{
|
||||
*(.debug_frame)
|
||||
}
|
||||
.debug_str BLOCK(__section_alignment__) (NOLOAD) :
|
||||
{
|
||||
*(.debug_str)
|
||||
}
|
||||
.debug_loc BLOCK(__section_alignment__) (NOLOAD) :
|
||||
{
|
||||
*(.debug_loc)
|
||||
}
|
||||
.debug_macinfo BLOCK(__section_alignment__) (NOLOAD) :
|
||||
{
|
||||
*(.debug_macinfo)
|
||||
}
|
||||
/* SGI/MIPS DWARF 2 extensions. */
|
||||
.debug_weaknames BLOCK(__section_alignment__) (NOLOAD) :
|
||||
{
|
||||
*(.debug_weaknames)
|
||||
}
|
||||
.debug_funcnames BLOCK(__section_alignment__) (NOLOAD) :
|
||||
{
|
||||
*(.debug_funcnames)
|
||||
}
|
||||
.debug_typenames BLOCK(__section_alignment__) (NOLOAD) :
|
||||
{
|
||||
*(.debug_typenames)
|
||||
}
|
||||
.debug_varnames BLOCK(__section_alignment__) (NOLOAD) :
|
||||
{
|
||||
*(.debug_varnames)
|
||||
}
|
||||
/* DWARF 3. */
|
||||
.debug_ranges BLOCK(__section_alignment__) (NOLOAD) :
|
||||
{
|
||||
*(.debug_ranges)
|
||||
}
|
||||
}
|
||||
''')
|
||||
script.close()
|
||||
return(ld_script)
|
||||
|
||||
|
||||
class loggedSpawn:
|
||||
def __init__(self, env, logfile, longarg, info):
|
||||
# save the spawn system
|
||||
self.env = env
|
||||
self.logfile = logfile
|
||||
# clear the logfile (it may not exist)
|
||||
if logfile != '':
|
||||
# this will overwrite existing content.
|
||||
writeToFile(logfile, info, append=False)
|
||||
#
|
||||
self.longarg = longarg
|
||||
# get hold of the old spawn? (necessary?)
|
||||
self._spawn = env['SPAWN']
|
||||
|
||||
# define new SPAWN
|
||||
def spawn(self, sh, escape, cmd, args, spawnenv):
|
||||
# get command line
|
||||
newargs = ' '.join(map(escape, args[1:]))
|
||||
cmdline = cmd + " " + newargs
|
||||
#
|
||||
# if log is not empty, write to it
|
||||
if self.logfile != '':
|
||||
# this tend to be slow (?) but ensure correct output
|
||||
# Note that cmdline may be long so I do not escape it
|
||||
try:
|
||||
# since this is not an essential operation, proceed if things go wrong here.
|
||||
writeToFile(self.logfile, cmd + " " + ' '.join(args[1:]) + '\n', append=True)
|
||||
except:
|
||||
print "Warning: can not write to log file ", self.logfile
|
||||
#
|
||||
# if the command is not too long, use the old
|
||||
if not self.longarg or len(cmdline) < 8000:
|
||||
exit_code = self._spawn(sh, escape, cmd, args, spawnenv)
|
||||
else:
|
||||
sAttrs = win32security.SECURITY_ATTRIBUTES()
|
||||
StartupInfo = win32process.STARTUPINFO()
|
||||
for var in spawnenv:
|
||||
spawnenv[var] = spawnenv[var].encode('ascii', 'replace')
|
||||
# check for any special operating system commands
|
||||
if cmd == 'del':
|
||||
for arg in args[1:]:
|
||||
win32file.DeleteFile(arg)
|
||||
exit_code = 0
|
||||
else:
|
||||
# otherwise execute the command.
|
||||
hProcess, hThread, dwPid, dwTid = win32process.CreateProcess(None, cmdline, None, None, 1, 0, spawnenv, None, StartupInfo)
|
||||
win32event.WaitForSingleObject(hProcess, win32event.INFINITE)
|
||||
exit_code = win32process.GetExitCodeProcess(hProcess)
|
||||
win32file.CloseHandle(hProcess);
|
||||
win32file.CloseHandle(hThread);
|
||||
return exit_code
|
||||
|
||||
|
||||
def setLoggedSpawn(env, logfile = '', longarg=False, info=''):
|
||||
''' This function modify env and allow logging of
|
||||
commands to a logfile. If the argument is too long
|
||||
a win32 spawn will be used instead of the system one
|
||||
'''
|
||||
if longarg:
|
||||
import win32file
|
||||
import win32event
|
||||
import win32process
|
||||
import win32security
|
||||
import string
|
||||
#
|
||||
# create a new spwn object
|
||||
ls = loggedSpawn(env, logfile, longarg, info)
|
||||
# replace the old SPAWN by the new function
|
||||
env['SPAWN'] = ls.spawn
|
||||
|
||||
|
||||
## def CheckPython(context, minver):
|
||||
## context.Message('Checking for Python >= %s...' % '.'.join(str(x) for x in minver))
|
||||
## try:
|
||||
## python = context.env['PYTHON']
|
||||
## except KeyError:
|
||||
## try:
|
||||
## python = os.environ['PYTHON']
|
||||
## except KeyError:
|
||||
## python = WhereIs("python")
|
||||
## if not python:
|
||||
## python = python = WhereIs("python%i.%i" % (minver[0], minver[1]))
|
||||
## minverhex = 0
|
||||
## minver = list(minver) + [0, 0, 0, 0]
|
||||
## for i in xrange(0, 4):
|
||||
## minverhex = (minverhex << 8) + minver[i]
|
||||
## prog = "import sys; sys.exit(sys.hexversion >= %s)" % minverhex
|
||||
## if python is None:
|
||||
## python = 'python'
|
||||
## try:
|
||||
## result = Popen([python, "-c", prog]).wait()
|
||||
## except OSError:
|
||||
## context.Result(False)
|
||||
## return False
|
||||
## context.Result(result)
|
||||
## if result:
|
||||
## context.env.Replace(PYTHON=python)
|
||||
## proc = Popen([python, "-c", "import sys; print sys.version[:3]"], stdout=PIPE)
|
||||
## pyver = proc.communicate()[0].rstrip()
|
||||
## context.env.Replace(PYTHON_VERSION=pyver)
|
||||
## context.env.Replace(pythondir="$prefix/lib/python$PYTHON_VERSION/site-packages")
|
||||
## context.env.Replace(pyexecdir="${exec_prefix}/lib/python$PYTHON_VERSION/site-packages")
|
||||
## return result
|
||||
##
|
||||
## def DistSources(env, node):
|
||||
## env.DistFiles(_get_sources(env, node))
|
||||
##
|
||||
## def DistFiles(env, files):
|
||||
## assert isinstance(files, (list, tuple))
|
||||
## DISTFILES = [env.File(fname) for fname in files]
|
||||
## env.AppendUnique(DISTFILES=DISTFILES)
|
||||
##
|
||||
##
|
||||
## def make_distdir(target=None, source=None, env=None):
|
||||
## distdir = env.subst('$DISTDIR')
|
||||
## Execute(Delete(distdir))
|
||||
## Execute(Mkdir(distdir))
|
||||
## for fnode in env["DISTFILES"]:
|
||||
## dirname, fname = os.path.split(str(fnode))
|
||||
## if dirname:
|
||||
## distdirname = os.path.join(distdir, dirname)
|
||||
## if not os.path.exists(distdirname):
|
||||
## Execute(Mkdir(distdirname))
|
||||
## Execute(Copy(os.path.join(distdir, dirname, fname), str(fnode)))
|
||||
##
|
||||
## def make_dist(target=None, source=None, env=None):
|
||||
## return Popen([env['TAR'], "-zcf",
|
||||
## env.subst("${PACKAGE}-${VERSION}.tar.gz"),
|
||||
## env.subst('$DISTDIR')]).wait()
|
||||
##
|
||||
## def make_distcheck(target=None, source=None, env=None):
|
||||
## distdir = env.subst('$DISTDIR')
|
||||
## distcheckinstdir = tempfile.mkdtemp('', env.subst('${PACKAGE}-${VERSION}-instdir-'))
|
||||
## distcheckdestdir = tempfile.mkdtemp('', env.subst('${PACKAGE}-${VERSION}-destdir-'))
|
||||
## instdirs = [os.path.join(distcheckinstdir, d) for d in
|
||||
## 'lib', 'share', 'bin', 'include']
|
||||
## for dir_ in instdirs:
|
||||
## Execute(Mkdir(dir_))
|
||||
##
|
||||
## cmd = env.subst("cd $DISTDIR && scons DESTDIR=%s prefix=%s"
|
||||
## " && scons check && scons install") %\
|
||||
## (os.path.join(distcheckdestdir, ''), distcheckinstdir)
|
||||
## status = Popen(cmd, shell=True).wait()
|
||||
## if status:
|
||||
## return status
|
||||
## ## Check that inst dirs are empty (to catch cases of $DESTDIR not being honored
|
||||
## for dir_ in instdirs:
|
||||
## if os.listdir(dir_):
|
||||
## raise SCons.Errors.BuildError(target, "%s not empy" % dir_)
|
||||
## ## Check that something inside $DESTDIR was installed
|
||||
## dir_ = os.path.join(distcheckdestdir, distcheckinstdir)
|
||||
## if not os.path.exists(dir_):
|
||||
## raise SCons.Errors.BuildError(target, "%s does not exist" % dir_)
|
||||
## Execute(Delete(distcheckinstdir))
|
||||
## Execute(Delete(distcheckdestdir))
|
||||
## Execute(Delete(distdir))
|
||||
##
|
||||
## def InstallWithDestDir(self, dir_, source):
|
||||
## dir_ = '${DESTDIR}' + str(dir_)
|
||||
## return SConsEnvironment.Install(self, dir_, source)
|
||||
##
|
||||
##
|
||||
## def InstallAsWithDestDir(self, target, source):
|
||||
## target = '${DESTDIR}' + str(target)
|
||||
## return SConsEnvironment.InstallAs(self, target, source)
|
||||
##
|
||||
## def generate(env):
|
||||
## env.EnsureSConsVersion(0, 96, 91)
|
||||
##
|
||||
## opts = Options(['options.cache'], ARGUMENTS)
|
||||
## opts.Add(PathOption('prefix', 'Installation prefix', '/usr/local'))
|
||||
## opts.Add(PathOption('exec_prefix', 'Installation prefix blah blah',
|
||||
## '$prefix'))
|
||||
## opts.Add(PathOption('libdir',
|
||||
## 'Installation prefix for architecture dependent files', '$prefix/lib'))
|
||||
## opts.Add(PathOption('includedir',
|
||||
## 'Installation prefix for C header files', '$prefix/include'))
|
||||
## opts.Add(PathOption('datadir',
|
||||
## 'Installation prefix for architecture independent files', '$prefix/share'))
|
||||
## opts.Add(PathOption('bindir', 'Installation prefix for programs', '$prefix/bin'))
|
||||
## opts.Add(PathOption('DESTDIR', 'blah blah', None))
|
||||
## opts.Update(env)
|
||||
## opts.Save('options.cache', env)
|
||||
## SConsEnvironment.Help(env, opts.GenerateHelpText(env))
|
||||
##
|
||||
## env.Append(CPPFLAGS=r' -DVERSION=\"$VERSION\"')
|
||||
## env.Append(CCFLAGS=ARGUMENTS.get('CCFLAGS', '-g -O2'))
|
||||
##
|
||||
## env['GNOME_TESTS'] = dict(CheckPython=CheckPython,
|
||||
## CheckPythonHeaders=CheckPythonHeaders,
|
||||
## PkgCheckModules=PkgCheckModules)
|
||||
##
|
||||
## SConsEnvironment.DistSources = DistSources
|
||||
## SConsEnvironment.DistFiles = DistFiles
|
||||
## env['DISTDIR'] = "${PACKAGE}-${VERSION}"
|
||||
##
|
||||
## #env.Command(env.Dir("$DISTDIR"), None, make_distdir)
|
||||
##
|
||||
## distdir_alias = env.Alias("distdir", None, make_distdir)
|
||||
## dist_alias = env.Alias("dist", None, make_dist)
|
||||
## env.Depends(dist_alias, distdir_alias)
|
||||
## distcheck_alias = env.Alias("distcheck", None, make_distcheck)
|
||||
## env.Depends(distcheck_alias, distdir_alias)
|
||||
## env.AlwaysBuild(env.Alias('check'))
|
||||
##
|
||||
## #env['TARFLAGS'] ='-c -z'
|
||||
## #env['TARSUFFIX'] = '.tar.gz'
|
||||
## #tar = env.Tar('${PACKAGE}-${VERSION}.tar.gz', "${DISTDIR}")
|
||||
## #env.Depends(tar, distdir_alias)
|
||||
## #print env['DEFAULT_TARGETS']
|
||||
##
|
||||
## #env.Depends(distdir_alias, "${DISTFILES}")
|
||||
## #env.Alias('dist', tar)
|
||||
## env.AlwaysBuild('dist')
|
||||
## env.AlwaysBuild('distdir')
|
||||
## env.AlwaysBuild('distcheck')
|
||||
## env.DistFiles(['SConstruct', 'scons/gnome.py'])
|
||||
##
|
||||
## env['BUILDERS']['EnvSubstFile'] = SCons.Builder.Builder(action=env_subst)
|
||||
##
|
||||
## SConsEnvironment.PythonByteCompile = env.Action(byte_compile_python)
|
||||
##
|
||||
## env.Install = new.instancemethod(InstallWithDestDir, env, env.__class__)
|
||||
## env.InstallAs = new.instancemethod(InstallAsWithDestDir, env, env.__class__)
|
||||
##
|
||||
##
|
||||
##
|
||||
|
175
src/SConscript
Normal file
175
src/SConscript
Normal file
@ -0,0 +1,175 @@
|
||||
# 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('env')
|
||||
|
||||
print "Entering src"
|
||||
|
||||
# building all the libraries
|
||||
env.SConscript(
|
||||
dirs = [
|
||||
'mathed',
|
||||
'insets',
|
||||
'frontends',
|
||||
'frontends/controllers',
|
||||
'graphics',
|
||||
'support',
|
||||
'frontends/$frontend'
|
||||
]
|
||||
)
|
||||
|
||||
if env['INCLUDED_BOOST']:
|
||||
env.SConscript(dirs = ['#boost/libs'])
|
||||
|
||||
#
|
||||
# Start in src directory
|
||||
#
|
||||
env.substFile('version.C', 'version.C.in')
|
||||
|
||||
lyx_source = Split('''
|
||||
main.C
|
||||
Bidi.C
|
||||
BufferView.C
|
||||
BufferView_pimpl.C
|
||||
Bullet.C
|
||||
BranchList.C
|
||||
Chktex.C
|
||||
Color.C
|
||||
CutAndPaste.C
|
||||
DepTable.C
|
||||
FloatList.C
|
||||
Floating.C
|
||||
FontIterator.C
|
||||
FuncStatus.C
|
||||
InsetList.C
|
||||
LColor.C
|
||||
LaTeX.C
|
||||
LaTeXFeatures.C
|
||||
LyXAction.C
|
||||
MenuBackend.C
|
||||
ParagraphParameters.C
|
||||
PrinterParams.C
|
||||
Spacing.C
|
||||
Thesaurus.C
|
||||
ToolbarBackend.C
|
||||
author.C
|
||||
boost.C
|
||||
box.C
|
||||
buffer.C
|
||||
buffer_funcs.C
|
||||
bufferlist.C
|
||||
bufferparams.C
|
||||
bufferview_funcs.C
|
||||
changes.C
|
||||
chset.C
|
||||
converter.C
|
||||
counters.C
|
||||
coordcache.C
|
||||
cursor.C
|
||||
cursor_slice.C
|
||||
debug.C
|
||||
dimension.C
|
||||
dociterator.C
|
||||
encoding.C
|
||||
errorlist.C
|
||||
exporter.C
|
||||
gettext.C
|
||||
factory.C
|
||||
format.C
|
||||
funcrequest.C
|
||||
graph.C
|
||||
importer.C
|
||||
intl.C
|
||||
insetiterator.C
|
||||
kbmap.C
|
||||
kbsequence.C
|
||||
language.C
|
||||
session.C
|
||||
lengthcommon.C
|
||||
lyx_cb.C
|
||||
lyx_main.C
|
||||
lyx_sty.C
|
||||
lyxfont.C
|
||||
lyxfind.C
|
||||
lyxfunc.C
|
||||
lyxgluelength.C
|
||||
lyxlayout.C
|
||||
lyxlength.C
|
||||
lyxlex.C
|
||||
lyxlex_pimpl.C
|
||||
lyxrc.C
|
||||
lyxrow.C
|
||||
lyxrow_funcs.C
|
||||
lyxserver.C
|
||||
lyxsocket.C
|
||||
lyxtextclass.C
|
||||
lyxtextclasslist.C
|
||||
lyxvc.C
|
||||
messages.C
|
||||
metricsinfo.C
|
||||
mover.C
|
||||
output.C
|
||||
outputparams.C
|
||||
output_docbook.C
|
||||
output_latex.C
|
||||
output_linuxdoc.C
|
||||
output_plaintext.C
|
||||
paragraph.C
|
||||
paragraph_funcs.C
|
||||
paragraph_pimpl.C
|
||||
pariterator.C
|
||||
SpellBase.C
|
||||
rowpainter.C
|
||||
sgml.C
|
||||
tabular.C
|
||||
tex-accent.C
|
||||
tex-strings.C
|
||||
texrow.C
|
||||
text.C
|
||||
text2.C
|
||||
text3.C
|
||||
TocBackend.C
|
||||
toc.C
|
||||
trans.C
|
||||
trans_mgr.C
|
||||
undo.C
|
||||
vc-backend.C
|
||||
version.C
|
||||
vspace.C
|
||||
''')
|
||||
|
||||
if env.has_key('USE_ASPELL') and env['USE_ASPELL']:
|
||||
lyx_source += ['aspell.C']
|
||||
elif env.has_key('USE_PSPELL') and env['USE_PSPELL']:
|
||||
lyx_source += ['pspell.C']
|
||||
elif env.has_key('USE_ISPELL') and env['USE_ISPELL']:
|
||||
lyx_source += ['ispell.C']
|
||||
|
||||
#
|
||||
# Build lyx with given frontend
|
||||
#
|
||||
lyx = env.Program(
|
||||
target = 'lyx',
|
||||
source = lyx_source,
|
||||
LIBS = [
|
||||
'mathed',
|
||||
'insets',
|
||||
'frontends',
|
||||
env['frontend'],
|
||||
'controllers',
|
||||
'graphics',
|
||||
'supports',
|
||||
'z' ] +
|
||||
env['EXTRA_LIBS'] +
|
||||
env['BOOST_LIBRARIES']
|
||||
)
|
||||
|
||||
# Return program
|
||||
Return('lyx')
|
28
src/client/SConscript
Normal file
28
src/client/SConscript
Normal file
@ -0,0 +1,28 @@
|
||||
# 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('env')
|
||||
|
||||
print "Entering src/client"
|
||||
|
||||
lyxclient = env.Program(
|
||||
target = 'lyxclient',
|
||||
LIBS = [ 'boost_regex', 'boost_filesystem',
|
||||
'supports' ] + env['socket_libs'],
|
||||
source = Split('''
|
||||
boost.C
|
||||
client.C
|
||||
debug.C
|
||||
gettext.C
|
||||
messages.C
|
||||
''')
|
||||
)
|
||||
|
||||
Return('lyxclient')
|
32
src/frontends/SConscript
Normal file
32
src/frontends/SConscript
Normal file
@ -0,0 +1,32 @@
|
||||
# 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('env')
|
||||
|
||||
print "Entering src/frontends"
|
||||
|
||||
frontends = env.StaticLibrary(
|
||||
target = '$LOCALLIBPATH/frontends',
|
||||
source = Split('''
|
||||
Alert.C
|
||||
Dialogs.C
|
||||
LyXView.C
|
||||
Painter.C
|
||||
Timeout.C
|
||||
Toolbars.C
|
||||
guiapi.C
|
||||
nullpainter.C
|
||||
screen.C
|
||||
screen.h
|
||||
''')
|
||||
)
|
||||
|
||||
# return the library
|
||||
Return('frontends')
|
69
src/frontends/controllers/SConscript
Normal file
69
src/frontends/controllers/SConscript
Normal file
@ -0,0 +1,69 @@
|
||||
# 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('env')
|
||||
|
||||
print "Entering src/frontends/controllers"
|
||||
|
||||
controllers = env.StaticLibrary(
|
||||
target = '$LOCALLIBPATH/controllers',
|
||||
source = Split('''
|
||||
Dialog.C
|
||||
Kernel.C
|
||||
biblio.C
|
||||
character.C
|
||||
frnt_lang.C
|
||||
tex_helpers.C
|
||||
BCView.C
|
||||
ButtonController.C
|
||||
ButtonPolicies.C
|
||||
ControlAboutlyx.C
|
||||
ControlBibtex.C
|
||||
ControlBox.C
|
||||
ControlBranch.C
|
||||
ControlCharacter.C
|
||||
ControlChanges.C
|
||||
ControlCitation.C
|
||||
ControlCommand.C
|
||||
ControlCommandBuffer.C
|
||||
ControlDocument.C
|
||||
ControlErrorList.C
|
||||
ControlERT.C
|
||||
ControlExternal.C
|
||||
ControlFloat.C
|
||||
ControlGraphics.C
|
||||
ControlInclude.C
|
||||
ControlLog.C
|
||||
ControlViewSource.C
|
||||
ControlMath.C
|
||||
ControlNote.C
|
||||
ControlParagraph.C
|
||||
ControlPreamble.C
|
||||
ControlPrefs.C
|
||||
ControlPrint.C
|
||||
ControlRef.C
|
||||
ControlSearch.C
|
||||
ControlSendto.C
|
||||
ControlShowFile.C
|
||||
ControlSpellchecker.C
|
||||
ControlTabular.C
|
||||
ControlTabularCreate.C
|
||||
ControlTexinfo.C
|
||||
ControlThesaurus.C
|
||||
ControlToc.C
|
||||
ControlVSpace.C
|
||||
ControlWrap.C
|
||||
helper_funcs.C
|
||||
helper_funcs.h
|
||||
''')
|
||||
)
|
||||
|
||||
#return the library
|
||||
Return('controllers')
|
230
src/frontends/qt3/SConscript
Normal file
230
src/frontends/qt3/SConscript
Normal file
@ -0,0 +1,230 @@
|
||||
# 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('env')
|
||||
|
||||
print "Entering src/frontends/qt3"
|
||||
|
||||
qtenv = env.Copy()
|
||||
|
||||
# load qt3 tools
|
||||
qtenv.Tool('qt')
|
||||
|
||||
qtenv.Append(CPPPATH = [
|
||||
'#$BUILDDIR',
|
||||
'#$BUILDDIR/frontends',
|
||||
'#$BUILDDIR/images',
|
||||
'#$BUILDDIR/frontends/controllers',
|
||||
'$QT_INC_DIR',
|
||||
'.']
|
||||
)
|
||||
|
||||
ui_files = Split('''
|
||||
BiblioModuleBase.ui
|
||||
BranchesModuleBase.ui
|
||||
BulletsModuleBase.ui
|
||||
TextLayoutModuleBase.ui
|
||||
LanguageModuleBase.ui
|
||||
LaTeXModuleBase.ui
|
||||
MarginsModuleBase.ui
|
||||
NumberingModuleBase.ui
|
||||
MathsModuleBase.ui
|
||||
PageLayoutModuleBase.ui
|
||||
PreambleModuleBase.ui
|
||||
QAboutDialogBase.ui
|
||||
QAskForTextDialog.ui
|
||||
QBibitemDialogBase.ui
|
||||
QBibtexDialogBase.ui
|
||||
QBibtexAddDialogBase.ui
|
||||
QBoxDialogBase.ui
|
||||
QBranchDialogBase.ui
|
||||
QChangesDialogBase.ui
|
||||
QCharacterDialogBase.ui
|
||||
QCitationDialogBase.ui
|
||||
QCitationFindDialogBase.ui
|
||||
QDelimiterDialogBase.ui
|
||||
QDocumentDialogBase.ui
|
||||
QErrorListDialogBase.ui
|
||||
QERTDialogBase.ui
|
||||
QExternalDialogBase.ui
|
||||
QFloatDialogBase.ui
|
||||
QGraphicsDialogBase.ui
|
||||
QIncludeDialogBase.ui
|
||||
QIndexDialogBase.ui
|
||||
QLogDialogBase.ui
|
||||
QViewSourceDialogBase.ui
|
||||
QMathDialogBase.ui
|
||||
QMathMatrixDialogBase.ui
|
||||
QNoteDialogBase.ui
|
||||
QParagraphDialogBase.ui
|
||||
QPrefAsciiModule.ui
|
||||
QPrefColorsModule.ui
|
||||
QPrefConvertersModule.ui
|
||||
QPrefCopiersModule.ui
|
||||
QPrefCygwinPathModule.ui
|
||||
QPrefDateModule.ui
|
||||
QPrefDisplayModule.ui
|
||||
QPrefFileformatsModule.ui
|
||||
QPrefIdentityModule.ui
|
||||
QPrefKeyboardModule.ui
|
||||
QPrefLanguageModule.ui
|
||||
QPrefLatexModule.ui
|
||||
QPrefPathsModule.ui
|
||||
QPrefPrinterModule.ui
|
||||
QPrefScreenFontsModule.ui
|
||||
QPrefsDialogBase.ui
|
||||
QPrefSpellcheckerModule.ui
|
||||
QPrefUIModule.ui
|
||||
QPrintDialogBase.ui
|
||||
QRefDialogBase.ui
|
||||
QSearchDialogBase.ui
|
||||
QSendtoDialogBase.ui
|
||||
QShowFileDialogBase.ui
|
||||
QSpellcheckerDialogBase.ui
|
||||
QTabularCreateDialogBase.ui
|
||||
QTabularDialogBase.ui
|
||||
QTexinfoDialogBase.ui
|
||||
QThesaurusDialogBase.ui
|
||||
QTocDialogBase.ui
|
||||
QURLDialogBase.ui
|
||||
QVSpaceDialogBase.ui
|
||||
QWrapDialogBase.ui
|
||||
''')
|
||||
|
||||
moc_files = 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
|
||||
''')
|
||||
|
||||
qt3 = qtenv.StaticLibrary(
|
||||
target = '$LOCALLIBPATH/qt3',
|
||||
source = Split('''
|
||||
QDialogView.C
|
||||
Alert_pimpl.C
|
||||
Dialogs.C
|
||||
FileDialog.C
|
||||
LyXKeySymFactory.C
|
||||
LyXScreenFactory.C
|
||||
QLMenubar.C
|
||||
qtTimeout.C
|
||||
QAbout.C
|
||||
QBibitem.C
|
||||
QBibtex.C
|
||||
QBox.C
|
||||
QBranch.C
|
||||
QChanges.C
|
||||
QCharacter.C
|
||||
QCitation.C
|
||||
QDocument.C
|
||||
QErrorList.C
|
||||
QERT.C
|
||||
QExternal.C
|
||||
QFloat.C
|
||||
QGraphics.C
|
||||
QInclude.C
|
||||
QIndex.C
|
||||
QLImage.C
|
||||
QLog.C
|
||||
QViewSource.C
|
||||
QLPainter.C
|
||||
QLyXKeySym.C
|
||||
QMath.C
|
||||
QNote.C
|
||||
QParagraph.C
|
||||
QPrefs.C
|
||||
QPrint.C
|
||||
QRef.C
|
||||
QSearch.C
|
||||
QSendto.C
|
||||
QShowFile.C
|
||||
QSpellchecker.C
|
||||
QTabular.C
|
||||
QTabularCreate.C
|
||||
QTexinfo.C
|
||||
QThesaurus.C
|
||||
QToc.C
|
||||
QURL.C
|
||||
QVSpace.C
|
||||
QWorkArea.C
|
||||
QWrap.C
|
||||
Qt2BC.C
|
||||
WorkAreaFactory.C
|
||||
checkedwidgets.C
|
||||
lyx_gui.C
|
||||
lcolorcache.C
|
||||
panelstack.C
|
||||
qcoloritem.C
|
||||
qfontexample.C
|
||||
qfont_loader.C
|
||||
qfont_metrics.C
|
||||
qscreen.C
|
||||
qt_helpers.C
|
||||
''') +
|
||||
moc_files +
|
||||
['ui/' + x for x in ui_files]
|
||||
)
|
||||
|
||||
# return the library
|
||||
Return('qt3')
|
264
src/frontends/qt4/SConscript
Normal file
264
src/frontends/qt4/SConscript
Normal file
@ -0,0 +1,264 @@
|
||||
# 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('env')
|
||||
|
||||
print "Entering src/frontends/qt4"
|
||||
|
||||
qtenv = env.Copy()
|
||||
|
||||
# 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 )
|
||||
#
|
||||
qtenv.Tool('qt4', ['$TOP_SRC_DIR'])
|
||||
qtenv.EnableQt4Modules(env['QT_LIB'], debug = False)
|
||||
|
||||
qtenv.Append(CPPPATH = [
|
||||
'#$BUILDDIR',
|
||||
'#$BUILDDIR/frontends',
|
||||
'#$BUILDDIR/images',
|
||||
'#$BUILDDIR/frontends/controllers',
|
||||
'$QT_INC_PATH',
|
||||
'$QT_INC_PATH/Qt',
|
||||
'$QT_INC_PATH/QtCore',
|
||||
'$QT_INC_PATH/QtGui',
|
||||
'$QT_INC_PATH/Qt3Support',
|
||||
'.']
|
||||
)
|
||||
|
||||
# FIXME: replace by something from pkg_config
|
||||
qtenv.Append(CCFLAGS = [
|
||||
'-DHAVE_CONFIG_H',
|
||||
'-DQT_CLEAN_NAMESPACE',
|
||||
'-DQT_GENUINE_STR',
|
||||
'-DQT_NO_STL',
|
||||
'-DQT3_SUPPORT',
|
||||
'-Winvalid-pch']
|
||||
)
|
||||
|
||||
ui_files = Split('''
|
||||
BiblioUi
|
||||
BranchesUi
|
||||
BulletsUi
|
||||
TextLayoutUi
|
||||
LanguageUi
|
||||
LaTeXUi
|
||||
MarginsUi
|
||||
NumberingUi
|
||||
MathsUi
|
||||
PageLayoutUi
|
||||
PreambleUi
|
||||
QAboutUi
|
||||
QAskForTextUi
|
||||
QBibitemUi
|
||||
QBibtexUi
|
||||
QBibtexAddUi
|
||||
QBoxUi
|
||||
QBranchUi
|
||||
QChangesUi
|
||||
QCharacterUi
|
||||
QCitationUi
|
||||
QCitationFindUi
|
||||
QDelimiterUi
|
||||
QDocumentUi
|
||||
QErrorListUi
|
||||
QERTUi
|
||||
QExternalUi
|
||||
QFloatUi
|
||||
QGraphicsUi
|
||||
QIncludeUi
|
||||
QIndexUi
|
||||
QLogUi
|
||||
QViewSourceUi
|
||||
QMathUi
|
||||
QMathMatrixUi
|
||||
QNoteUi
|
||||
QParagraphUi
|
||||
QPrefAsciiUi
|
||||
QPrefColorsUi
|
||||
QPrefConvertersUi
|
||||
QPrefCopiersUi
|
||||
QPrefCygwinPathUi
|
||||
QPrefDateUi
|
||||
QPrefDisplayUi
|
||||
QPrefFileformatsUi
|
||||
QPrefIdentityUi
|
||||
QPrefKeyboardUi
|
||||
QPrefLanguageUi
|
||||
QPrefLatexUi
|
||||
QPrefPathsUi
|
||||
QPrefPrinterUi
|
||||
QPrefScreenFontsUi
|
||||
QPrefsUi
|
||||
QPrefSpellcheckerUi
|
||||
QPrefUi
|
||||
QPrintUi
|
||||
QRefUi
|
||||
QSearchUi
|
||||
QSendtoUi
|
||||
QShowFileUi
|
||||
QSpellcheckerUi
|
||||
QTabularCreateUi
|
||||
QTabularUi
|
||||
QTexinfoUi
|
||||
QThesaurusUi
|
||||
QTocUi
|
||||
QURLUi
|
||||
QVSpaceUi
|
||||
QWrapUi
|
||||
''')
|
||||
|
||||
moc_files = 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
|
||||
QBranches.C
|
||||
QBrowseBox.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 = [qtenv.Uic4('ui/' + x) for x in ui_files]
|
||||
|
||||
source_files = Split('''
|
||||
QDialogView.C
|
||||
Alert_pimpl.C
|
||||
Dialogs.C
|
||||
FileDialog.C
|
||||
LyXKeySymFactory.C
|
||||
LyXScreenFactory.C
|
||||
QLMenubar.C
|
||||
qtTimeout.C
|
||||
QAbout.C
|
||||
QBibitem.C
|
||||
QBibtex.C
|
||||
QBox.C
|
||||
QBranch.C
|
||||
QBranches.C
|
||||
QChanges.C
|
||||
QCharacter.C
|
||||
QCitation.C
|
||||
QDocument.C
|
||||
QErrorList.C
|
||||
QERT.C
|
||||
QExternal.C
|
||||
QFloat.C
|
||||
QGraphics.C
|
||||
QInclude.C
|
||||
QIndex.C
|
||||
QLAction.C
|
||||
QLImage.C
|
||||
QLog.C
|
||||
QViewSource.C
|
||||
QLPainter.C
|
||||
QLyXKeySym.C
|
||||
QMath.C
|
||||
QNote.C
|
||||
QParagraph.C
|
||||
QPrefs.C
|
||||
QPrint.C
|
||||
QRef.C
|
||||
QSearch.C
|
||||
QSendto.C
|
||||
QShowFile.C
|
||||
QSpellchecker.C
|
||||
QTabular.C
|
||||
QTabularCreate.C
|
||||
QTexinfo.C
|
||||
QThesaurus.C
|
||||
QToc.C
|
||||
QURL.C
|
||||
QVSpace.C
|
||||
QWorkArea.C
|
||||
QWrap.C
|
||||
Qt2BC.C
|
||||
WorkAreaFactory.C
|
||||
checkedwidgets.C
|
||||
lyx_gui.C
|
||||
lcolorcache.C
|
||||
panelstack.h
|
||||
panelstack.C
|
||||
qcoloritem.C
|
||||
qfontexample.C
|
||||
qfont_loader.C
|
||||
qfont_metrics.C
|
||||
qscreen.C
|
||||
qt_helpers.C
|
||||
''')
|
||||
|
||||
qt4 = qtenv.StaticLibrary(
|
||||
target = '$LOCALLIBPATH/qt4',
|
||||
LIBS = qtenv['QT_LIB'],
|
||||
source = source_files + moc_files
|
||||
)
|
||||
|
||||
# return the library
|
||||
Return('qt4')
|
33
src/graphics/SConscript
Normal file
33
src/graphics/SConscript
Normal file
@ -0,0 +1,33 @@
|
||||
# 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('env')
|
||||
|
||||
print "Entering src/graphics"
|
||||
|
||||
graphics = env.StaticLibrary(
|
||||
target = '$LOCALLIBPATH/graphics',
|
||||
source = Split('''
|
||||
GraphicsCache.C
|
||||
GraphicsCacheItem.C
|
||||
GraphicsConverter.C
|
||||
GraphicsImage.C
|
||||
GraphicsLoader.C
|
||||
GraphicsParams.C
|
||||
LoaderQueue.C
|
||||
GraphicsTypes.C
|
||||
PreviewImage.C
|
||||
PreviewLoader.C
|
||||
Previews.C
|
||||
''')
|
||||
)
|
||||
|
||||
# return the library
|
||||
Return('graphics')
|
71
src/insets/SConscript
Normal file
71
src/insets/SConscript
Normal file
@ -0,0 +1,71 @@
|
||||
# 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('env')
|
||||
|
||||
print "Entering src/insets"
|
||||
|
||||
insets = env.StaticLibrary(
|
||||
target = '$LOCALLIBPATH/insets',
|
||||
source = Split('''
|
||||
mailinset.C
|
||||
ExternalSupport.C
|
||||
ExternalTemplate.C
|
||||
ExternalTransforms.C
|
||||
render_button.C
|
||||
render_graphic.C
|
||||
render_preview.C
|
||||
inset.C
|
||||
insetbase.C
|
||||
insetbibitem.C
|
||||
insetbibtex.C
|
||||
insetbox.C
|
||||
insetbranch.C
|
||||
insetcaption.C
|
||||
insetcharstyle.C
|
||||
insetcite.C
|
||||
insetcollapsable.C
|
||||
insetcommand.C
|
||||
insetcommandparams.C
|
||||
insetenv.C
|
||||
insetert.C
|
||||
insetexternal.C
|
||||
insetfloat.C
|
||||
insetfloatlist.C
|
||||
insetfoot.C
|
||||
insetfootlike.C
|
||||
insetgraphicsParams.C
|
||||
insetgraphics.C
|
||||
insethfill.C
|
||||
insetinclude.C
|
||||
insetindex.C
|
||||
insetlabel.C
|
||||
insetlatexaccent.C
|
||||
insetline.C
|
||||
insetmarginal.C
|
||||
insetnewline.C
|
||||
insetnote.C
|
||||
insetoptarg.C
|
||||
insetpagebreak.C
|
||||
insetquotes.C
|
||||
insetref.C
|
||||
insetspace.C
|
||||
insetspecialchar.C
|
||||
insettabular.C
|
||||
insettext.C
|
||||
insettoc.C
|
||||
inseturl.C
|
||||
insetvspace.C
|
||||
insetwrap.C
|
||||
''')
|
||||
)
|
||||
|
||||
# return the library
|
||||
Return('insets')
|
94
src/mathed/SConscript
Normal file
94
src/mathed/SConscript
Normal file
@ -0,0 +1,94 @@
|
||||
# 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('env')
|
||||
|
||||
print "Entering src/mathed"
|
||||
|
||||
mathed = env.StaticLibrary(
|
||||
target = '$LOCALLIBPATH/mathed',
|
||||
source = Split('''
|
||||
textpainter.C
|
||||
math_amsarrayinset.C
|
||||
math_arrayinset.C
|
||||
math_atom.C
|
||||
math_autocorrect.C
|
||||
math_biginset.C
|
||||
math_binominset.C
|
||||
math_boldsymbolinset.C
|
||||
math_boxinset.C
|
||||
math_boxedinset.C
|
||||
math_braceinset.C
|
||||
math_casesinset.C
|
||||
math_charinset.C
|
||||
math_colorinset.C
|
||||
math_commentinset.C
|
||||
math_data.C
|
||||
math_decorationinset.C
|
||||
math_deliminset.C
|
||||
math_dfracinset.C
|
||||
math_diffinset.C
|
||||
math_diminset.C
|
||||
math_dotsinset.C
|
||||
math_envinset.C
|
||||
math_extern.C
|
||||
math_exfuncinset.C
|
||||
math_exintinset.C
|
||||
math_factory.C
|
||||
math_fboxinset.C
|
||||
math_frameboxinset.C
|
||||
math_fontinset.C
|
||||
math_fontoldinset.C
|
||||
math_fracinset.C
|
||||
math_fracbase.C
|
||||
math_gridinset.C
|
||||
math_hullinset.C
|
||||
math_inset.C
|
||||
math_kerninset.C
|
||||
math_lefteqninset.C
|
||||
math_liminset.C
|
||||
math_macro.C
|
||||
math_macroarg.C
|
||||
math_macrotemplate.C
|
||||
math_macrotable.C
|
||||
math_makeboxinset.C
|
||||
math_mathmlstream.C
|
||||
math_matrixinset.C
|
||||
math_nestinset.C
|
||||
math_numberinset.C
|
||||
math_oversetinset.C
|
||||
math_parinset.C
|
||||
math_parser.C
|
||||
math_phantominset.C
|
||||
math_rootinset.C
|
||||
math_scriptinset.C
|
||||
math_sizeinset.C
|
||||
math_spaceinset.C
|
||||
math_splitinset.C
|
||||
math_sqrtinset.C
|
||||
math_stackrelinset.C
|
||||
math_streamstr.C
|
||||
math_stringinset.C
|
||||
math_substackinset.C
|
||||
math_support.C
|
||||
math_symbolinset.C
|
||||
math_tabularinset.C
|
||||
math_tfracinset.C
|
||||
math_unknowninset.C
|
||||
math_undersetinset.C
|
||||
math_xarrowinset.C
|
||||
math_xymatrixinset.C
|
||||
command_inset.C
|
||||
ref_inset.C
|
||||
''')
|
||||
)
|
||||
|
||||
# return the library
|
||||
Return('mathed')
|
55
src/support/SConscript
Normal file
55
src/support/SConscript
Normal file
@ -0,0 +1,55 @@
|
||||
# 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('env')
|
||||
|
||||
print "Entering src/supports"
|
||||
|
||||
env.Append(CPPPATH = ['.'])
|
||||
|
||||
env.substFile('package.C', 'package.C.in')
|
||||
|
||||
supports = env.StaticLibrary(
|
||||
target = '$LOCALLIBPATH/supports',
|
||||
source = Split('''
|
||||
FileMonitor.C
|
||||
abort.C
|
||||
chdir.C
|
||||
convert.C
|
||||
copy.C
|
||||
environment.C
|
||||
filefilterlist.C
|
||||
filename.C
|
||||
filetools.C
|
||||
forkedcall.C
|
||||
forkedcallqueue.C
|
||||
forkedcontr.C
|
||||
fs_extras.C
|
||||
getcwd.C
|
||||
kill.C
|
||||
lstrings.C
|
||||
lyxtime.C
|
||||
lyxsum.C
|
||||
mkdir.C
|
||||
os.C
|
||||
path.C
|
||||
package.C
|
||||
rename.C
|
||||
socktools.C
|
||||
systemcall.C
|
||||
tempname.C
|
||||
userinfo.C
|
||||
unlink.C
|
||||
''')
|
||||
)
|
||||
|
||||
# return the library
|
||||
Return('supports')
|
||||
|
61
src/tex2lyx/SConscript
Normal file
61
src/tex2lyx/SConscript
Normal file
@ -0,0 +1,61 @@
|
||||
# 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('env')
|
||||
|
||||
print "Entering src/tex2lyx"
|
||||
|
||||
tex2lyx_env = env.Copy()
|
||||
# the order is important here.
|
||||
#tex2lyx_env.Prepend(CPPPATH = ['.', '#$BUILDDIR'])
|
||||
tex2lyx_env.Append(LIBPATH = ['#$LOCALLIBPATH'])
|
||||
|
||||
tex2lyx_env.fileCopy('FloatList.C', '#$BUILDDIR/FloatList.C')
|
||||
tex2lyx_env.fileCopy('Floating.C', '#$BUILDDIR/Floating.C')
|
||||
tex2lyx_env.fileCopy('counters.C', '#$BUILDDIR/counters.C')
|
||||
tex2lyx_env.fileCopy('lyxlex.C', '#$BUILDDIR/lyxlex.C')
|
||||
tex2lyx_env.fileCopy('lyxlex_pimpl.C', '#$BUILDDIR/lyxlex_pimpl.C')
|
||||
# for some reason I do not know, I have to copy the header files as well.
|
||||
tex2lyx_env.fileCopy('lyxlayout.h', '#$BUILDDIR/lyxlayout.h')
|
||||
tex2lyx_env.fileCopy('lyxlayout.C', '#$BUILDDIR/lyxlayout.C')
|
||||
tex2lyx_env.fileCopy('lyxtextclass.h', '#$BUILDDIR/lyxtextclass.h')
|
||||
tex2lyx_env.fileCopy('lyxtextclass.C', '#$BUILDDIR/lyxtextclass.C')
|
||||
|
||||
tex2lyx = tex2lyx_env.Program(
|
||||
target = 'tex2lyx',
|
||||
LIBS = [
|
||||
'supports',
|
||||
'z',
|
||||
] + env['BOOST_LIBRARIES'],
|
||||
source = Split('''
|
||||
FloatList.C
|
||||
Floating.C
|
||||
counters.C
|
||||
lyxlayout.C
|
||||
lyxtextclass.C
|
||||
lyxlex.C
|
||||
lyxlex_pimpl.C
|
||||
boost.C
|
||||
context.C
|
||||
gettext.C
|
||||
lengthcommon.C
|
||||
lyxfont.C
|
||||
texparser.C
|
||||
tex2lyx.C
|
||||
preamble.C
|
||||
math.C
|
||||
table.C
|
||||
text.C
|
||||
''')
|
||||
)
|
||||
|
||||
# Return the program
|
||||
Return('tex2lyx')
|
||||
|
Loading…
Reference in New Issue
Block a user