]> git.lyx.org Git - lyx.git/blobdiff - development/scons/SConstruct
Fix byte order problems
[lyx.git] / development / scons / SConstruct
index b1cde5b479fb078650b9941479d6ad27d2c34a74..c3923ea71272bac1b281cadc2ac08fba6393049b 100644 (file)
@@ -464,7 +464,7 @@ if use_vc:
     #   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')
@@ -523,25 +523,34 @@ def setEnvVariable(env, name, required = None, default = None, split = True):
                 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 varaible %s from system environment: %s" % (name, os.environ[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')
@@ -662,13 +671,27 @@ if not fast_start:
         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'
+    else:
+        print 'Did not find iconv or libiconv, exiting!'
+        Exit(1)
+    env_cache['ICONV_LIB'] = env['ICONV_LIB']
+else:
+    env['ICONV_LIB'] = env_cache['ICONV_LIB']
 
 # qt libraries?
 if not fast_start:
     #
     # qt3 does not use pkg_config
     if frontend == 'qt3':
-        if not conf.CheckLibWithHeader('qt-mt', 'qapp.h', 'c++', 'QApplication qapp();'):
+        # windows lib name is qt-mt3
+        if not conf.CheckLibWithHeader('qt-mt', 'qapp.h', 'c++', 'QApplication qapp();') \
+            and not conf.CheckLibWithHeader('qt-mt3', 'qapp.h', 'c++', 'QApplication qapp();'):
             print 'Did not find qt libraries, exiting!'
             Exit(1)
     elif frontend == 'qt4':
@@ -702,10 +725,13 @@ if not fast_start:
 
 # now, if msvc2005 is used, we will need that QT_LIB_PATH/QT_LIB.manifest file
 if use_vc:
-    if mode == 'debug':
-        manifest = os.path.join(qt_lib_path, 'QtGuid4.dll.manifest')
-    else:
-        manifest = os.path.join(qt_lib_path, 'QtGui4.dll.manifest')
+    if frontend == 'qt3':
+        manifest = os.path.join(qt_lib_path, 'qt-mt3.dll.manifest')
+    elif frontend == 'qt4':
+        if mode == 'debug':
+            manifest = os.path.join(qt_lib_path, 'QtGuid4.dll.manifest')
+        else:
+            manifest = os.path.join(qt_lib_path, 'QtGui4.dll.manifest')
     if os.path.isfile(manifest):
         env['LINKCOM'] = [env['LINKCOM'], 'mt.exe /MANIFEST %s /outputresource:$TARGET;1' % manifest]
 
@@ -891,7 +917,6 @@ if not fast_start or not os.path.isfile(boost_config_h) \
 #define BOOST_ENABLE_ASSERT_HANDLER 1
 
 #define BOOST_DISABLE_THREADS 1
-#define BOOST_NO_WREGEX 1
 #define BOOST_NO_WSTRING 1
 
 #ifdef __CYGWIN__
@@ -1017,7 +1042,6 @@ int count()
         ],
         libs = [
             ('gdi32', 'HAVE_LIBGDI32'),
-            (('iconv', 'libiconv'), 'HAVE_ICONV', 'ICONV_LIB'),
             (('Aiksaurus', 'libAiksaurus'), 'HAVE_LIBAIKSAURUS', 'AIKSAURUS_LIB'),
         ],
         custom_tests = [
@@ -1035,6 +1059,12 @@ int count()
                 'MKDIR_TAKES_ONE_ARG',
                 'Define if mkdir takes only one argument.'
             ),
+            (conf.CheckIconvConst(),
+                'ICONV_CONST',
+                'Define as const if the declaration of iconv() needs const.',
+                '#define ICONV_CONST const',
+                '#define ICONV_CONST',
+            ),
             (conf.CheckLC_MESSAGES(),
                 'HAVE_LC_MESSAGES',
                 'Define if your <locale.h> file defines LC_MESSAGES.'
@@ -1070,6 +1100,10 @@ int count()
             (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),
@@ -1124,8 +1158,7 @@ int mkstemp(char*);
 
     # these keys are needed in env
     for key in ['USE_ASPELL', 'USE_PSPELL', 'USE_ISPELL', 'HAVE_FCNTL',\
-        'HAVE_ICONV', 'HAVE_LIBGDI32', 'HAVE_LIBAIKSAURUS',
-        'ICONV_LIB', 'AIKSAURUS_LIB']:
+        'HAVE_LIBGDI32', 'HAVE_LIBAIKSAURUS', 'AIKSAURUS_LIB']:
         # USE_ASPELL etc does not go through result
         if result.has_key(key):
             env[key] = result[key]
@@ -1206,7 +1239,6 @@ int mkstemp(char*);
                 ('uintmax_t', 'HAVE_STDINT_H_WITH_UINTMAX', '#include <stdint.h>'),
             ],
             libs = [
-                (('iconv', 'libiconv'), 'HAVE_ICONV', 'ICONV_LIB'),
                 ('c', 'HAVE_LIBC'),
             ],
             custom_tests = [
@@ -1217,8 +1249,8 @@ int mkstemp(char*);
                 (conf.CheckIconvConst(),
                     'ICONV_CONST',
                     'Define as const if the declaration of iconv() needs const.',
-                    '#define ICONV_CONST',
                     '#define ICONV_CONST const',
+                    '#define ICONV_CONST',
                 ),
                 (conf.CheckType('intmax_t', includes='#include <stdint.h>') or \
                 conf.CheckType('intmax_t', includes='#include <inttypes.h>'),
@@ -1230,12 +1262,15 @@ int mkstemp(char*);
                     "Define to 1 if translation of program messages to the user's native anguage is requested.",
                 ),
             ],
+            extra_items = [
+                ('#define HAVE_ICONV 1', 'Define if iconv or libiconv is found')
+            ],
             config_post = '#endif'
         )
 
         # these keys are needed in env
         for key in ['HAVE_ASPRINTF', 'HAVE_WPRINTF', 'HAVE_SNPRINTF', \
-            'HAVE_POSIX_PRINTF', 'HAVE_ICONV', 'HAVE_LIBC']:
+            'HAVE_POSIX_PRINTF', 'HAVE_LIBC']:
             # USE_ASPELL etc does not go through result
             if result.has_key(key):
                 env[key] = result[key]
@@ -1250,15 +1285,14 @@ else:
     conf.CheckCHeader('io.h')
     # only a few variables need to be rescanned
     for key in ['USE_ASPELL', 'USE_PSPELL', 'USE_ISPELL', 'HAVE_FCNTL',\
-        'HAVE_ICONV', 'HAVE_LIBGDI32', 'HAVE_LIBAIKSAURUS',
-        'ICONV_LIB', 'AIKSAURUS_LIB']:
+        'HAVE_LIBGDI32', 'HAVE_LIBAIKSAURUS', 'AIKSAURUS_LIB']:
         env[key] = env_cache[key]
     #
     # nls related keys
     if env['nls'] and included_gettext:
         # only a few variables need to be rescanned
         for key in ['HAVE_ASPRINTF', 'HAVE_WPRINTF', 'HAVE_SNPRINTF', \
-            'HAVE_POSIX_PRINTF', 'HAVE_ICONV', 'HAVE_LIBC']:
+            'HAVE_POSIX_PRINTF', 'HAVE_LIBC']:
             env[key] = env_cache[key]
 
 # this looks misplaced, but intl/libintl.h is needed by src/message.C
@@ -1283,8 +1317,11 @@ env = conf.Finish()
 # in their respective directory and specialized env.
 if frontend == 'qt3':
     # note: env.Tool('qt') my set QT_LIB to qt
-    qt_libs = ['qt-mt']
-    frontend_libs = ['qt-mt']
+    if platform_name == 'win32':
+        qt_libs = ['qt-mt3']
+    else:
+        qt_libs = ['qt-mt']
+    frontend_libs = qt_libs
 elif frontend == 'qt4':
     qt_libs = ['QtCore', 'QtGui']
     # set the right lib names
@@ -1305,18 +1342,17 @@ 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 = ['shlwapi', 'shell32', 'advapi32', 'zdll']
+        system_libs = [env['ICONV_LIB'], 'ole32', 'shlwapi', 'shell32', 'advapi32', 'zdll']
     else:
-        system_libs = ['shlwapi', 'stdc++', 'z']
+        system_libs = [env['ICONV_LIB'], 'shlwapi', 'stdc++', 'z']
 elif platform_name == 'cygwin' and env['X11']:
-    system_libs = ['GL',  'Xmu', 'Xi', 'Xrender', 'Xrandr', 'Xcursor',
-        'Xft', 'freetype', 'fontconfig', 'Xext', 'X11', 'SM', 'ICE', 'resolv',
-        'pthread', 'z']
+    system_libs = [env['ICONV_LIB'], 'GL',  'Xmu', 'Xi', 'Xrender', 'Xrandr',
+        'Xcursor', 'Xft', 'freetype', 'fontconfig', 'Xext', 'X11', 'SM', 'ICE', 
+        'resolv', 'pthread', 'z']
 else:
-    system_libs = ['z']
+    system_libs = [env['ICONV_LIB'], 'z']
 
 libs = [
-    ('HAVE_ICONV', env['ICONV_LIB']),
     ('HAVE_LIBGDI32', 'gdi32'),
     ('HAVE_LIBAIKSAURUS', env['AIKSAURUS_LIB']),
     ('USE_ASPELL', aspell_lib),
@@ -1739,7 +1775,7 @@ if build_qt3:
     qt3 = qt3env.StaticLibrary(
         target = '$LOCALLIBPATH/qt3',
         source = ['$BUILDDIR/common/frontends/qt3/%s' % x for x in src_frontends_qt3_files] \
-            + qt3_moced_files + qt3_uiced_cc_files
+            + qt3_uiced_cc_files
     )
     Alias('qt3', qt3)
 
@@ -1775,7 +1811,6 @@ if build_qt4:
         '-DQT_CLEAN_NAMESPACE',
         '-DQT_GENUINE_STR',
         '-DQT_NO_STL',
-        '-DQT3_SUPPORT',
         '-DQT_NO_KEYWORDS',
         ]
     )
@@ -1787,7 +1822,7 @@ if build_qt4:
     # Compile resources
     #
     resources = [qt4env.Uic4(x.split('.')[0]) for x in \
-        src_frontends_qt4_ui_files]
+        ["$BUILDDIR/common/frontends/qt4/ui/%s" % x for x in src_frontends_qt4_ui_files]]
 
     #
     # moc qt4_moc_files, the moced files are included in the original files
@@ -2196,7 +2231,7 @@ if 'install' in targets:
     # 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)