~ubuntu-branches/ubuntu/raring/sunpinyin/raring

« back to all changes in this revision

Viewing changes to .pc/fix-ftbfs-on-sh.patch/SConstruct

  • Committer: Package Import Robot
  • Author(s): YunQiang Su
  • Date: 2012-03-30 15:31:55 UTC
  • mfrom: (1.1.3) (1.2.7 sid)
  • Revision ID: package-import@ubuntu.com-20120330153155-qgls77sogzgtg9zp
Tags: 2.0.3+git20120222-1
* Team upload: git snapshot 20120222.
   - fix breaks if LDFLAGS in environment contains
       multiple words (Closese #646001).
   - rm patches merged to upstream:
       append-os-environ-toenv.patch
       fix-ftbfs-on-sh.patch
       remove-10-candidate-words-limitation.patch
   - refresh disable-lm-dict-compile.patch.
* Bump stardard version to 3.9.3: no modify needed.
* add libsunpinyin3-dbg and python-sunpinyin packages.
* debian/compat to 9, multiarch it.
* rewrite debian/rules with dh 7 format.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
import platform
2
 
import os
3
 
import sys
4
 
 
5
 
version="2.0.3"
6
 
abi_major = 3
7
 
abi_minor = 0
8
 
 
9
 
cflags='-O2 -g -pipe '
10
 
 
11
 
slmsource=['src/slm/ids2ngram/ids2ngram.cpp',
12
 
           'src/slm/ids2ngram/idngram_merge.cpp',
13
 
           'src/slm/mmseg/mmseg.cpp',
14
 
           'src/slm/tslminfo/tslminfo.cpp',
15
 
           'src/slm/tslmpack/arpa_slm.cpp',
16
 
           'src/slm/tslmpack/arpa_conv.cpp',
17
 
           'src/slm/tslmpack/slmpack.cpp',
18
 
           'src/slm/slm.cpp',
19
 
           'src/slm/slminfo/slminfo.cpp',
20
 
           'src/slm/sim_sen.cpp',
21
 
           'src/slm/sim_slm.cpp',
22
 
           'src/slm/getWordFreq/getWordFreq.cpp',
23
 
           'src/slm/slmseg/slmseg.cpp',
24
 
           'src/slm/thread/slmthread.cpp',
25
 
           'src/slm/thread/test_vc.cpp',
26
 
           'src/slm/thread/ValueCompress.cpp',
27
 
           'src/slm/slmbuild/slmbuild.cpp',
28
 
           'src/slm/slmprune/slmprune.cpp',
29
 
           'src/slm/sim_slmbuilder.cpp',
30
 
           'src/slm/tslmendian/slm_endian.cpp',
31
 
           'src/slm/tslmendian/writer.cpp',
32
 
           'src/slm/tslmendian/slm_file.cpp',
33
 
           'src/slm/sim_dict.cpp',
34
 
           'src/portability.cpp',
35
 
           'src/lexicon/trie_writer.cpp',
36
 
           'src/lexicon/genPYT.cpp',
37
 
           'src/lexicon/pytrie_gen.cpp',
38
 
           'src/lexicon/pytrie.cpp',
39
 
           'src/pinyin/pinyin_data.cpp']
40
 
 
41
 
imesource=['src/portability.cpp',
42
 
           'src/slm/slm.cpp',
43
 
           'src/lexicon/pytrie.cpp',
44
 
           'src/pinyin/pinyin_data.cpp',
45
 
           'src/pinyin/pinyin_seg.cpp',
46
 
           'src/pinyin/shuangpin_data.cpp',
47
 
           'src/pinyin/shuangpin_seg.cpp',
48
 
           'src/pinyin/hunpin_seg.cpp',
49
 
           'src/ime-core/imi_context.cpp',
50
 
           'src/ime-core/imi_data.cpp',
51
 
           'src/ime-core/lattice_states.cpp',
52
 
           'src/ime-core/imi_view.cpp',
53
 
           'src/ime-core/imi_uiobjects.cpp',
54
 
           'src/ime-core/imi_view_classic.cpp',
55
 
           'src/ime-core/imi_winHandler.cpp',
56
 
           'src/ime-core/ic_history.cpp',
57
 
           'src/ime-core/imi_funcobjs.cpp',
58
 
           'src/ime-core/imi_options.cpp',
59
 
           'src/ime-core/imi_option_event.cpp',
60
 
           'src/ime-core/userdict.cpp']
61
 
 
62
 
headers=['src/slm/ids2ngram/idngram.h',
63
 
         'src/slm/ids2ngram/idngram_merge.h',
64
 
         'src/slm/slm.h',
65
 
         'src/slm/tslmpack/arpa_slm.h',
66
 
         'src/slm/tslmpack/common.h',
67
 
         'src/slm/tslmpack/arpa_conv.h',
68
 
         'src/slm/sim_dict.h',
69
 
         'src/slm/sim_sen.h',
70
 
         'src/slm/sim_slm.h',
71
 
         'src/slm/thread/ValueCompress.h',
72
 
         'src/slm/sim_fmerge.h',
73
 
         'src/slm/sim_slmbuilder.h',
74
 
         'src/slm/tslmendian/slm_file.h',
75
 
         'src/slm/tslmendian/writer.h',
76
 
         'src/lexicon/pytrie_gen.h',
77
 
         'src/lexicon/trie_writer.h',
78
 
         'src/lexicon/pytrie.h',
79
 
         'src/ime-core/imi_view_classic.h',
80
 
         'src/ime-core/imi_uiobjects.h',
81
 
         'src/ime-core/lattice_states.h',
82
 
         'src/ime-core/ic_history.h',
83
 
         'src/ime-core/imi_funcobjs.h',
84
 
         'src/ime-core/imi_context.h',
85
 
         'src/ime-core/imi_winHandler.h',
86
 
         'src/ime-core/userdict.h',
87
 
         'src/ime-core/imi_option_event.h',
88
 
         'src/ime-core/imi_data.h',
89
 
         'src/ime-core/utils.h',
90
 
         'src/ime-core/imi_keys.h',
91
 
         'src/ime-core/imi_option_keys.h',
92
 
         'src/ime-core/imi_options.h',
93
 
         'src/ime-core/imi_defines.h',
94
 
         'src/ime-core/imi_view.h',
95
 
         'src/portability.h',
96
 
         'src/pinyin/segmentor.h',
97
 
         'src/pinyin/shuangpin_seg.h',
98
 
         'src/pinyin/datrie.h',
99
 
         'src/pinyin/quanpin_trie.h',
100
 
         'src/pinyin/pinyin_seg.h',
101
 
         'src/pinyin/pinyin_data.h',
102
 
         'src/pinyin/syllable.h',
103
 
         'src/pinyin/shuangpin_data.h',
104
 
         'src/pinyin/hunpin_seg.h',
105
 
         'src/pinyin/datrie_impl.h',
106
 
         'src/sunpinyin.h']
107
 
 
108
 
# options
109
 
AddOption('--prefix', dest='prefix', metavar='DIR',
110
 
          help='installation prefix')
111
 
 
112
 
AddOption('--libdir', dest='libdir', metavar='DIR',
113
 
          help='installation libdir')
114
 
 
115
 
AddOption('--libdatadir', dest='libdatadir', metavar='DIR',
116
 
          help='installation libdata dir')
117
 
 
118
 
AddOption('--rpath', dest='rpath', metavar='DIR',
119
 
          help='encode rpath in the executables')
120
 
 
121
 
# save the options
122
 
opts = Variables('configure.conf')
123
 
opts.Add('PREFIX', default='/usr/local')
124
 
opts.Add('LIBDIR', default='/usr/local/lib')
125
 
opts.Add('LIBDATADIR', default='/usr/local/lib')
126
 
 
127
 
#
128
 
#==============================environment==============================
129
 
#
130
 
#
131
 
def allinc():
132
 
    inc=[]
133
 
    for root, dirs, files in os.walk('src'):
134
 
        inc.append(root)
135
 
    return inc
136
 
 
137
 
def GetOS():
138
 
    return platform.uname()[0]
139
 
 
140
 
def CreateEnvironment():
141
 
    tar = 'tar'
142
 
    make = 'make'
143
 
    wget = 'wget'
144
 
    if GetOS() == 'Darwin':
145
 
        wget = 'curl -O'
146
 
    elif GetOS() == 'FreeBSD':
147
 
        wget = 'fetch'
148
 
        make = 'gmake'
149
 
    elif GetOS() == 'SunOS':
150
 
        tar = 'gtar'
151
 
        make = 'gmake'
152
 
 
153
 
    return Environment(ENV=os.environ, CFLAGS=cflags, CXXFLAGS=cflags,
154
 
                       TAR=tar, MAKE=make, WGET=wget,
155
 
                       CPPPATH=['.'] + allinc())
156
 
 
157
 
def PassVariables(envvar, env):
158
 
    for (x, y) in envvar:
159
 
        if x in os.environ:
160
 
            print 'Warning: you\'ve set %s in the environmental variable!' % x
161
 
            env[y] = os.environ[x]
162
 
    
163
 
env = CreateEnvironment()
164
 
opts.Update(env)
165
 
 
166
 
if GetOption('prefix') is not None:
167
 
    env['PREFIX'] = GetOption('prefix')
168
 
    env['LIBDATADIR'] = env['PREFIX'] + '/lib'
169
 
    env['LIBDIR'] = env['PREFIX'] + '/lib'
170
 
 
171
 
if GetOption('libdir') is not None:
172
 
    env['LIBDIR'] = GetOption('libdir')
173
 
 
174
 
if GetOption('libdatadir') is not None:
175
 
    env['LIBDATADIR'] = GetOption('libdatadir')
176
 
 
177
 
opts.Save('configure.conf', env)
178
 
 
179
 
libdir = env['LIBDIR']
180
 
libdatadir = env['LIBDATADIR'] + '/sunpinyin/data'
181
 
headersdir = env['PREFIX'] + '/include/sunpinyin-2.0'
182
 
 
183
 
# pass through environmental variables
184
 
envvar = [('CC', 'CC'),
185
 
          ('CXX', 'CXX'),
186
 
          ('CFLAGS', 'CFLAGS'),
187
 
          ('CXXFLAGS', 'CXXFLAGS'),
188
 
          ('LDFLAGS', 'LINKFLAGS'),
189
 
          ('TAR', 'TAR'),
190
 
          ('MAKE', 'MAKE'),
191
 
          ('WGET', 'WGET')]
192
 
PassVariables(envvar, env)
193
 
 
194
 
# append critical cflags
195
 
extra_cflags=' -DHAVE_CONFIG_H -DSUNPINYIN_DATA_DIR=\'"%s"\'' % libdatadir
196
 
env.Append(CFLAGS=extra_cflags)
197
 
env.Append(CXXFLAGS=extra_cflags)
198
 
 
199
 
if GetOS() != 'Darwin':
200
 
    env.Append(LINKFLAGS=['-Wl,-soname=libsunpinyin.so.%d' % abi_major])
201
 
 
202
 
if GetOption('rpath') is not None and GetOS() != 'Darwin':
203
 
    env.Append(LINKFLAGS=['-Wl,-R', '-Wl,%s' % GetOption('rpath')])
204
 
 
205
 
#
206
 
#==============================configure================================
207
 
#
208
 
def CheckPKGConfig(context, version='0.12.0'):
209
 
    context.Message( 'Checking for pkg-config... ' )
210
 
    ret = context.TryAction('pkg-config --atleast-pkgconfig-version=%s' % version)[0]
211
 
    context.Result(ret)
212
 
    return ret
213
 
 
214
 
def CheckPKG(context, name):
215
 
    context.Message( 'Checking for %s... ' % name )
216
 
    ret = context.TryAction('pkg-config --exists \'%s\'' % name)[0]
217
 
    context.Result(ret)
218
 
    return ret
219
 
 
220
 
def AppendEndianCheck(conf):
221
 
    conf.config_h_text += r'''
222
 
 
223
 
#if defined(_BIG_ENDIAN) && !defined(_LITTLE_ENDIAN)
224
 
# define WORDS_BIGENDIAN 1
225
 
 
226
 
#elif defined(_LITTLE_ENDIAN) && !defined(_BIG_ENDIAN)
227
 
# undef WORDS_BIGENDIAN
228
 
 
229
 
#elif defined(__sparc) || defined(__sparc__) \
230
 
  || defined(_POWER)   || defined(__powerpc__) \
231
 
  || defined(__ppc__)  || defined(__hpux) || defined(__hppa) \
232
 
  || defined(_MIPSEB)  || defined(_POWER) \
233
 
  || defined(__s390__)
234
 
# define WORDS_BIGENDIAN 1
235
 
 
236
 
#elif defined(__i386__) || defined(__i386) \
237
 
  || defined(__ia64)    || defined(__ia64__) \
238
 
  || defined(_M_IX86)   || defined(_M_IA64) \
239
 
  || defined(_M_ALPHA)  || defined(__amd64) \
240
 
  || defined(__amd64__) || defined(_M_AMD64) \
241
 
  || defined(__x86_64)  || defined(__x86_64__) \
242
 
  || defined(_M_X64)    || defined(__bfin__) \
243
 
  || defined(__alpha__) || defined(__ARMEL__)
244
 
# undef WORDS_BIGENDIAN
245
 
 
246
 
#else
247
 
# error can not detect the endianness!
248
 
#endif
249
 
'''
250
 
 
251
 
conf = env.Configure(clean=False, help=False, config_h='config.h',
252
 
                     custom_tests={'CheckPKGConfig' : CheckPKGConfig,
253
 
                                   'CheckPKG' : CheckPKG})
254
 
 
255
 
def DoConfigure():
256
 
    if GetOption('clean'):
257
 
        return
258
 
 
259
 
    if GetOS() == 'Darwin':
260
 
        if not conf.CheckLibWithHeader('sqlite3', 'sqlite3.h', 'C'):
261
 
            Exit(1)
262
 
        if not conf.CheckLibWithHeader('iconv', 'iconv.h', 'C'):
263
 
            Exit(1)
264
 
    else:
265
 
        if not conf.CheckPKGConfig():
266
 
            Exit(1)
267
 
        if not conf.CheckPKG('sqlite3'):
268
 
            Exit(1)
269
 
 
270
 
    conf.Define('ENABLE_NLS', 1)
271
 
    conf.Define('GETTEXT_PACKAGE', '"sunpinyin2"')
272
 
    conf.CheckCHeader('assert.h')
273
 
    conf.CheckFunc('bind_textdomain_codeset')
274
 
    conf.CheckFunc('dcgettext')
275
 
    conf.CheckCHeader('dlfcn.h')
276
 
    conf.CheckFunc('exp2')
277
 
    conf.CheckCHeader('fcntl.h')
278
 
    conf.CheckCHeader('getopt.h')
279
 
    conf.CheckFunc('getopt_long')
280
 
    conf.CheckFunc('getpagesize')
281
 
    conf.CheckFunc('get_opt')
282
 
    conf.CheckCHeader('iconv.h')
283
 
    conf.CheckCHeader('inttypes.h')
284
 
    conf.CheckCHeader('locale.h')
285
 
    conf.CheckCHeader('libintl.h')
286
 
    conf.CheckCHeader('limits.h')
287
 
    conf.CheckCHeader('locale.h')
288
 
    conf.CheckFunc('log2')
289
 
    conf.CheckCHeader('memory.h')
290
 
    conf.CheckFunc('memset')
291
 
    conf.CheckFunc('mmap')
292
 
    conf.CheckFunc('munmap')
293
 
    conf.CheckFunc('setlocale')
294
 
    conf.CheckFunc('strndup')
295
 
    conf.CheckCHeader('sys/mman.h')
296
 
    conf.CheckCHeader('sys/param.h')
297
 
    conf.CheckCHeader('sys/stat.h')
298
 
    conf.CheckCHeader('sys/types.h')
299
 
    conf.CheckCHeader('unistd.h')
300
 
    conf.CheckCHeader('wchar.h')
301
 
 
302
 
    # add essential package requirements
303
 
    conf.Define('PACKAGE', '"sunpinyin"')
304
 
    conf.Define('PACKAGE_NAME', '"sunpinyin"')
305
 
    conf.Define('PACKAGE_STRING', '"sunpinyin 2.0"')
306
 
    conf.Define('PACKAGE_TARNAME', '"sunpinyin"')
307
 
    conf.Define('PACKAGE_VERSION', '"2.0"')
308
 
    conf.Define('VRESION', '"2.0"')
309
 
 
310
 
    # append endianness checking defines
311
 
    AppendEndianCheck(conf)
312
 
 
313
 
    env = conf.Finish()
314
 
    # generate sunpinyin.pc
315
 
    f = file('sunpinyin-2.0.pc', 'w')
316
 
    content = (
317
 
        'prefix='+env['PREFIX'],
318
 
        'exec_prefix=${prefix}',
319
 
        'libdir=' + libdir,
320
 
        'includedir=${exec_prefix}/include/sunpinyin-2.0',
321
 
        '',
322
 
        'Name: libsunpinyin',
323
 
        'Description: IME library based on Statistical Language Model',
324
 
        'Version: %s' % version,
325
 
        'Requires: sqlite3',
326
 
        'Libs: -L${libdir} -lsunpinyin',
327
 
        'Cflags: ' + reduce(lambda a, b: a + ' ' + b,
328
 
                            map(lambda x: '-I${includedir}' + x[3:],
329
 
                                allinc()))
330
 
        )
331
 
    f.write(reduce(lambda a, b: a + '\n' + b, content))
332
 
    f.close()
333
 
 
334
 
    if GetOS() != 'Darwin':
335
 
        env.ParseConfig('pkg-config sqlite3 --libs --cflags')
336
 
 
337
 
DoConfigure()
338
 
 
339
 
#
340
 
#==============================compile==============================
341
 
#
342
 
env.Object(slmsource)
343
 
 
344
 
SConscript(['build/SConscript'], exports='env')
345
 
 
346
 
libname = 'libsunpinyin.so.%d.%d' % (abi_major, abi_minor)
347
 
libname_soname = 'libsunpinyin.so.%d' % abi_major
348
 
libname_link = 'libsunpinyin.so'
349
 
 
350
 
lib = env.SharedLibrary('sunpinyin-%d.%d' % (abi_major, abi_minor),
351
 
                        source=imesource)
352
 
 
353
 
if GetOption('clean'):
354
 
    os.environ['TAR'] = env['TAR']
355
 
    os.environ['MAKE'] = env['MAKE']
356
 
    os.system('$MAKE -C raw clean WGET="$WGET" TAR="$TAR"')
357
 
    os.system('$MAKE -C data clean WGET="$WGET" TAR="$TAR"')
358
 
 
359
 
def DoInstall():
360
 
    if not 'install' in COMMAND_LINE_TARGETS:
361
 
        return
362
 
 
363
 
    lib_target = None
364
 
    if GetOS() == 'Darwin':
365
 
        lib_target = env.Install(libdir, lib)
366
 
    else:
367
 
        lib_target_bin = env.InstallAs(libdir + '/' + libname, lib)
368
 
        install_path = os.path.dirname(str(lib_target_bin[0])) + '/'
369
 
        lib_target = [
370
 
            lib_target_bin,
371
 
            env.Command(install_path + libname_soname, lib_target_bin,
372
 
                        'cd %s && ln -sf %s %s' %
373
 
                        (install_path, libname, libname_soname)),
374
 
            env.Command(install_path + libname_link, lib_target_bin,
375
 
                        'cd %s && ln -sf %s %s' %
376
 
                        (install_path, libname, libname_link))
377
 
            ]
378
 
 
379
 
    lib_pkgconfig_target = env.Install(libdir+'/pkgconfig',
380
 
                                       ['sunpinyin-2.0.pc'])
381
 
    libdata_target = env.Install(libdatadir)
382
 
    header_targets = []
383
 
    for header in headers:
384
 
        header_targets.append(env.InstallAs(headersdir + header[3:], header))
385
 
    env.Alias('install-headers', header_targets)
386
 
    env.Alias('install-lib', lib_target + [lib_pkgconfig_target])
387
 
    env.Alias('install-libdata', libdata_target)
388
 
 
389
 
DoInstall()
390
 
env.Alias('install', ['install-lib', 'install-libdata', 'install-headers'])
391