# to INSTALL.scons for detailed instructions.
#
-import os, sys, copy, cPickle, glob
+import os, sys, copy, cPickle, glob, time
# scons_utils.py defines a few utility function
sys.path.append('config')
# some global settings
#
package_version = '1.5.0svn'
+package_cygwin_version = '1.5.0svn-1'
boost_version = '1_33_1'
devel_version = True
# lib/lyx2lyx/lyx2lyx_version.py.in
# PACKAGE_VERSION
# src/version.C.in
-# PACKAGE_VERSION, VERSION_INFO
+# PACKAGE_VERSION, LYX_DATE, VERSION_INFO
# full path name is used to build msvs project files
# and to replace TOP_SRCDIR in package.C
env['TOP_SRCDIR'] = Dir(top_src_dir).abspath
# needed by src/version.C.in => src/version.C
env['PACKAGE_VERSION'] = package_version
+env['LYX_DATE'] = time.asctime()
# determine share_dir etc
packaging_method = env.get('packaging')
share_dir = 'Resources'
man_dir = 'Resources/man/man1'
locale_dir = 'Resources/locale'
- default_prefix = 'c:/program files/lyx'
else:
share_dir = 'share/lyx'
- man_dir = 'man/man1'
locale_dir = 'share/locale'
- default_prefix = '/usr/local/'
+ if platform_name == 'cygwin':
+ man_dir = 'share/man/man1'
+ else:
+ man_dir = 'man/man1'
-# install to default_prefix by default
# program suffix: can be yes, or a string
if env.has_key('version_suffix'):
if env['version_suffix'] in true_strings:
# in the current code page (number)
# C4996: foo was decleared deprecated
CCFLAGS_required.extend(['/TP', '/EHsc'])
- CCFLAGS_default.extend(['/wd4819', '/wd4996', '/nologo'])
+ CCFLAGS_default.extend(['/wd4819', '/wd4996', '/nologo', '/MD'])
else:
if env.has_key('CXX') and env['CXX']:
env['CC'] = env.subst('$CXX')
environment variables
split: whether or not split obtained variable like '-02 -g'
'''
- # first try command line argument (override environment settings)
+ # 1. ARGUMENTS is already set to env[name], override default.
if ARGUMENTS.has_key(name):
- default = ARGUMENTS[name]
- if split:
- default = default.split()
+ default = None
# then use environment default
elif os.environ.has_key(name):
print "Acquiring variable %s from system environment: %s" % (name, os.environ[name])
default = os.environ[name]
if split:
default = default.split()
- # set variable
- if required is not None:
- env[name] = required
- if default is not None:
- if env.has_key(name) and env[name] != default:
- env[name] += default
- else:
- env[name] = default
+ # the real value should be env[name] + default + required
+ if split:
+ value = []
+ if env.has_key(name):
+ value = str(env[name]).split()
+ if required is not None:
+ value += required
+ if default is not None:
+ value += default
+ else:
+ value = ""
+ if env.has_key(name):
+ value = str(env[name])
+ if required is not None:
+ value += " " + required
+ if default is not None:
+ value += " " + default
+ env[name] = value
+ # print name, env[name]
setEnvVariable(env, 'DESTDIR', split=False)
setEnvVariable(env, 'CC')
'CheckCXXGlobalCstd' : utils.checkCXXGlobalCstd,
'CheckLC_MESSAGES' : utils.checkLC_MESSAGES,
'CheckIconvConst' : utils.checkIconvConst,
+ 'CheckSizeOfWChar' : utils.checkSizeOfWChar,
}
)
or (use_vc and not conf.CheckLibWithHeader('zdll', 'zlib.h', 'C')):
print 'Did not find zdll.lib or zlib.h, exiting!'
Exit(1)
- has_iconv = conf.CheckLib('iconv')
- has_libiconv = conf.CheckLib('libiconv')
- if has_iconv:
- env['ICONV_LIB'] = 'iconv'
- elif has_libiconv:
- env['ICONV_LIB'] = 'libiconv'
+ if conf.CheckLib('iconv'):
+ env['ICONV_LIB'] = ['iconv']
+ elif conf.CheckLib('libiconv'):
+ env['ICONV_LIB'] = ['libiconv']
+ elif conf.CheckFunc('iconv_open'):
+ env['ICONV_LIB'] = []
else:
print 'Did not find iconv or libiconv, exiting!'
Exit(1)
else:
env['MSGFMT'] = env_cache['MSGFMT']
+# cygwin packaging requires the binaries to be stripped
+if platform_name == 'cygwin':
+ if not fast_start:
+ env['STRIP'] = conf.CheckCommand('strip')
+ env_cache['STRIP'] = env['STRIP']
+ else:
+ env['STRIP'] = env_cache['STRIP']
+
# check uic and moc commands for qt frontends
if not fast_start:
if frontend[:2] == 'qt' and (conf.CheckCommand('uic') == None \
'Define if you want assertions to be enabled in the code'
),
],
+ types = [
+ ('wchar_t', 'HAVE_WCHAR_T', None),
+ ],
config_post = '''
#if defined(HAVE_OSTREAM) && defined(HAVE_LOCALE) && defined(HAVE_SSTREAM)
#ifdef __CYGWIN__
# define BOOST_POSIX 1
+# define BOOST_POSIX_API 1
+# define BOOST_POSIX_PATH 1
#endif
#define BOOST_ALL_NO_LIB 1
# check arg types of select function
(select_arg1, select_arg234, select_arg5) = conf.CheckSelectArgType()
+ # check the size of wchar_t
+ sizeof_wchar_t = conf.CheckSizeOfWChar()
+ # something wrong
+ if sizeof_wchar_t == 0:
+ print 'Error: Can not determine the size of wchar_t.'
+ Exit(1)
+
#
# create config.h
result = utils.createConfigFile(conf,
],
types = [
('std::istreambuf_iterator<std::istream>', 'HAVE_DECL_ISTREAMBUF_ITERATOR',
- '#include <streambuf>\n#include <istream>')
+ '#include <streambuf>\n#include <istream>'),
+ ('wchar_t', 'HAVE_WCHAR_T', None),
],
libs = [
('gdi32', 'HAVE_LIBGDI32'),
'libstdc++ pedantic debug mode'
),
(os.name != 'nt', 'BOOST_POSIX',
- 'Indicates to boost which API to use (posix or windows).'
+ 'Indicates to boost < 1.34 which API to use (posix or windows).'
+ ),
+ (os.name != 'nt', 'BOOST_POSIX_API',
+ 'Indicates to boost 1.34 which API to use (posix or windows).'
+ ),
+ (os.name != 'nt', 'BOOST_POSIX_PATH',
+ 'Indicates to boost 1.34 which path style to use (posix or windows).'
),
(spell_engine is not None, spell_engine,
'Spell engine to use'
),
+ # we need to know the byte order for unicode conversions
+ (sys.byteorder == 'big', 'WORDS_BIGENDIAN',
+ 'Define to 1 if your processor stores words with the most significant byte first (like Motorola and SPARC, unlike Intel and VAX).'
+ ),
],
extra_items = [
('#define PACKAGE "%s%s"' % (package, program_suffix),
"Define to the type of arg 2, 3, 4 for `select'."),
('#define SELECT_TYPE_ARG5 %s' % select_arg5,
"Define to the type of arg 5 for `select'."),
+ ('#define SIZEOF_WCHAR_T %d' % sizeof_wchar_t,
+ 'Define to be the size of type wchar_t'),
],
config_post = '''/************************************************************
** You should not need to change anything beyond this point */
),
],
extra_items = [
- ('#define HAVE_ICONV 1', 'Define if iconv or libiconv is found')
+ ('#define HAVE_ICONV 1', 'Define if iconv or libiconv is found'),
+ ('#define SIZEOF_WCHAR_T %d' % sizeof_wchar_t,
+ 'Define to be the size of type wchar_t'),
],
config_post = '#endif'
)
frontend_libs = [x + qt_lib_suffix for x in qt_libs]
+system_libs = env['ICONV_LIB']
if platform_name in ['win32', 'cygwin']:
# the final link step needs stdc++ to succeed under mingw
# FIXME: shouldn't g++ automatically link to stdc++?
if use_vc:
- system_libs = [env['ICONV_LIB'], 'shlwapi', 'shell32', 'advapi32', 'zdll']
+ system_libs += ['ole32', 'shlwapi', 'shell32', 'advapi32', 'zdll']
else:
- system_libs = [env['ICONV_LIB'], 'shlwapi', 'stdc++', 'z']
+ system_libs += ['shlwapi', 'stdc++', 'z']
elif platform_name == 'cygwin' and env['X11']:
- system_libs = [env['ICONV_LIB'], 'GL', 'Xmu', 'Xi', 'Xrender', 'Xrandr',
+ system_libs += ['GL', 'Xmu', 'Xi', 'Xrender', 'Xrandr',
'Xcursor', 'Xft', 'freetype', 'fontconfig', 'Xext', 'X11', 'SM', 'ICE',
'resolv', 'pthread', 'z']
else:
- system_libs = [env['ICONV_LIB'], 'z']
+ system_libs += ['z']
libs = [
('HAVE_LIBGDI32', 'gdi32'),
# for details
#
if platform_name == 'cygwin':
- ld_script_path = '/usr/lib/qt3/mkspecs/cygwin-g++'
+ ld_script_path = '/tmp'
ld_script = utils.installCygwinLDScript(ld_script_path)
env.AppendUnique(LINKFLAGS = ['-Wl,--enable-runtime-pseudo-reloc',
'-Wl,--script,%s' % ld_script, '-Wl,-s'])
else:
version_suffix = ''
#
- # install lyx
- target_name = os.path.split(str(lyx[0]))[1].replace('lyx', 'lyx%s' % version_suffix)
- target = os.path.join(bin_dest_dir, target_name)
- env.InstallAs(target, lyx)
- Alias('install', target)
- # install lyx as lyx-qt3
- target_name = os.path.split(str(lyx[0]))[1].replace('lyx', 'lyx-%s%s' % (frontend, version_suffix))
- target = os.path.join(bin_dest_dir, target_name)
- env.InstallAs(target, lyx)
- Alias('install', target)
- #
- # install tex2lyx
- target_name = os.path.split(str(tex2lyx[0]))[1].replace('tex2lyx', 'tex2lyx%s' % version_suffix)
- target = os.path.join(bin_dest_dir, target_name)
- env.InstallAs(target, tex2lyx)
- Alias('install', target)
- #
- # install lyxclient, may not exist
- if client != None:
- target_name = os.path.split(str(client[0]))[1].replace('client', 'client%s' % version_suffix)
+ # install lyx, if in release mode, try to strip the binary
+ if env.has_key('STRIP') and env['STRIP'] is not None and mode != 'debug':
+ # create a builder to strip and install
+ env['BUILDERS']['StripInstallAs'] = Builder(action='$STRIP $SOURCE -o $TARGET')
+
+ # install executables
+ for (name, obj) in (('lyx', lyx), ('tex2lyx', tex2lyx), ('client', client)):
+ if obj is None:
+ continue
+ target_name = os.path.split(str(obj[0]))[1].replace(name, '%s%s' % (name, version_suffix))
target = os.path.join(bin_dest_dir, target_name)
- env.InstallAs(target, client)
+ if env['BUILDERS'].has_key('StripInstallAs'):
+ env.StripInstallAs(target, obj)
+ else:
+ env.InstallAs(target, obj)
Alias('install', target)
- #
+
# share/lyx
dirs = []
for (dir,files) in [
('lyx2lyx', lib_lyx2lyx_files)]:
dirs.append(env.Install(os.path.join(share_dest_dir, dir),
[env.subst('$TOP_SRCDIR/lib/%s/%s' % (dir, file)) for file in files]))
+ Alias('install', dirs)
+ if platform_name == 'cygwin':
+ # cygwin packaging requires a file /usr/share/doc/Cygwin/foot-vendor-suffix.README
+ Cygwin_README = os.path.join(dest_prefix_dir, 'doc', 'Cygwin',
+ '%s%s.README' % (package, package_cygwin_version))
+ env.InstallAs(Cygwin_README,
+ os.path.join(env.subst('$TOP_SRCDIR'), 'README.cygwin'))
+ Alias('install', Cygwin_README)
+ # also a directory /usr/share/doc/lyx for README etc
+ Cygwin_Doc = os.path.join(dest_prefix_dir, 'doc', package)
+ env.Install(Cygwin_Doc, [os.path.join(env.subst('$TOP_SRCDIR'), x) for x in \
+ ['INSTALL', 'README', 'README.Cygwin', 'RELEASE-NOTES', 'COPYING', 'ANNOUNCE']])
+ Alias('install', Cygwin_Doc)
+
# lyx1.4.x does not have lyx2lyx_version.py.in
if os.path.isfile(env.subst('$TOP_SRCDIR/lib/lyx2lyx/lyx2lyx_version.py.in')):
# subst and install this file
env.substFile(share_dest_dir + '/lyx2lyx/lyx2lyx_version.py',
'$TOP_SRCDIR/lib/lyx2lyx/lyx2lyx_version.py.in')
Alias('install', share_dest_dir + '/lyx2lyx/lyx2lyx_version.py')
- Alias('install', dirs)
# man
env.InstallAs(os.path.join(man_dest_dir, 'lyx' + version_suffix + '.1'),
env.subst('$TOP_SRCDIR/lyx.man'))
# ru.gmo ==> ru/LC_MESSAGES/lyxSUFFIX.mo
for gmo in gmo_files:
lan = os.path.split(str(gmo))[1].split('.')[0]
- dest_file = os.path.join(locale_dest_dir, lan, 'LC_MESSAGES', 'lyx' + version_suffix + '.mo')
+ dest_file = os.path.join(locale_dest_dir, lan, 'LC_MESSAGES', 'lyx' + program_suffix + '.mo')
env.InstallAs(dest_file, gmo)
Alias('install', dest_file)