[libchewing] Fixed Bug 477690 - libchewing multilib conflict Update upstream download url.

Ding-Yi Chen dchen at fedoraproject.org
Thu Jul 19 05:31:42 UTC 2012


commit 2280256489084db408b921f39042de867698cb29
Author: Ding-Yi Chen <dingyichen at gmail.com>
Date:   Thu Jul 19 15:30:45 2012 +1000

    Fixed Bug 477690 - libchewing multilib conflict
    Update upstream download url.

 libchewing-0.3.3.multilibConflict.patch |  495 +++++++++++++++++++++++++++++++
 libchewing.spec                         |   20 +-
 2 files changed, 508 insertions(+), 7 deletions(-)
---
diff --git a/libchewing-0.3.3.multilibConflict.patch b/libchewing-0.3.3.multilibConflict.patch
new file mode 100644
index 0000000..cb947ba
--- /dev/null
+++ b/libchewing-0.3.3.multilibConflict.patch
@@ -0,0 +1,495 @@
+diff -up ./data/Makefile.am.orig ./data/Makefile.am
+--- ./data/Makefile.am.orig	2012-07-19 13:51:44.417897943 +1000
++++ ./data/Makefile.am	2012-07-19 15:00:08.067960510 +1000
+@@ -9,8 +9,11 @@ datas = \
+ 	us_freq.dat \
+ 	dict.dat \
+ 	ph_index.dat \
+-	fonetree.dat \
+ 	$(chindexs)
++
++datas_lib = \
++	fonetree.dat
++
+ generated_header = $(top_builddir)/src/chewing-definition.h
+ 
+ all: checkdata_stamp gendata_stamp
+@@ -37,4 +40,7 @@ install-data-local: $(datas) pinyin.tab
+ 	$(mkinstalldirs) $(DESTDIR)/$(datadir)/chewing
+ 	$(INSTALL_DATA) $(datas) pinyin.tab swkb.dat symbols.dat \
+ 		$(DESTDIR)/$(datadir)/chewing
+-CLEANFILES = $(datas) gendata_stamp checkdata_stamp $(generated_header)
++	$(mkinstalldirs) $(DESTDIR)/$(libdir)/chewing
++	$(INSTALL_DATA) $(datas_lib) $(DESTDIR)/$(libdir)/chewing
++
++CLEANFILES = $(datas) $(datas_lib) gendata_stamp checkdata_stamp $(generated_header)
+diff -up ./src/Makefile.am.orig ./src/Makefile.am
+--- ./src/Makefile.am.orig	2012-07-19 13:52:45.633807454 +1000
++++ ./src/Makefile.am	2012-07-19 15:01:05.563605235 +1000
+@@ -1,3 +1,5 @@
++AM_CPPFLAGS = ${CFLAGS} -DLIBDIR=\"${libdir}\"
++
+ SUBDIRS = porting_layer
+ INCLUDES = \
+ 	-I$(top_srcdir)/include \
+diff -up ./src/tree.c.orig ./src/tree.c
+--- ./src/tree.c.orig	2012-07-19 13:52:04.111868256 +1000
++++ ./src/tree.c	2012-07-19 15:16:55.864761600 +1000
+@@ -114,7 +114,7 @@ void InitTree( const char *prefix )
+ 	int i;
+ #endif
+ 
+-	sprintf( filename, "%s" PLAT_SEPARATOR "%s", prefix, PHONE_TREE_FILE );
++	sprintf( filename, "%s" PLAT_SEPARATOR "chewing" PLAT_SEPARATOR "%s", LIBDIR, PHONE_TREE_FILE );
+ #ifdef USE_BINARY_DATA
+ 	plat_mmap_set_invalid( &tree_mmap );
+ 	tree_size = plat_mmap_create( &tree_mmap, filename, FLAG_ATTRIBUTE_READ );
+@@ -151,10 +151,10 @@ static int CheckBreakpoint( int from, in
+ 	return 1;
+ }
+ 
+-static int CheckUserChoose( 
++static int CheckUserChoose(
+ 		uint16 *new_phoneSeq, int from , int to,
+-		Phrase **pp_phr, 
+-		char selectStr[][ MAX_PHONE_SEQ_LEN * MAX_UTF8_SIZE + 1 ], 
++		Phrase **pp_phr,
++		char selectStr[][ MAX_PHONE_SEQ_LEN * MAX_UTF8_SIZE + 1 ],
+ 		IntervalType selectInterval[], int nSelect )
+ {
+ 	IntervalType inte, c;
+@@ -191,9 +191,9 @@ static int CheckUserChoose(
+ 			c = selectInterval[ chno ];
+ 
+ 			if ( IsContain( inte, c ) ) {
+-				/* 
+-				 * find a phrase of ph_id where the text contains 
+-				 * 'selectStr[chno]' test if not ok then return 0, 
++				/*
++				 * find a phrase of ph_id where the text contains
++				 * 'selectStr[chno]' test if not ok then return 0,
+ 				 * if ok then continue to test. */
+ 				len = c.to - c.from;
+ 				if ( memcmp(
+@@ -218,19 +218,19 @@ static int CheckUserChoose(
+ 		}
+ 	} while ( ( pUserPhraseData = UserGetPhraseNext( new_phoneSeq ) ) != NULL );
+ 
+-	if ( p_phr->freq != -1 ) 
++	if ( p_phr->freq != -1 )
+ 		return 1;
+-		
++
+ 	free( p_phr );
+ 	return 0;
+ }
+ 
+ /*
+- * phrase is said to satisfy a choose interval if 
++ * phrase is said to satisfy a choose interval if
+  * their intersections are the same */
+ static int CheckChoose(
+-		int ph_id, int from, int to, Phrase **pp_phr, 
+-		char selectStr[][ MAX_PHONE_SEQ_LEN * MAX_UTF8_SIZE + 1 ], 
++		int ph_id, int from, int to, Phrase **pp_phr,
++		char selectStr[][ MAX_PHONE_SEQ_LEN * MAX_UTF8_SIZE + 1 ],
+ 		IntervalType selectInterval[], int nSelect )
+ {
+ 	IntervalType inte, c;
+@@ -249,8 +249,8 @@ static int CheckChoose(
+ 			c = selectInterval[ chno ];
+ 
+ 			if ( IsContain( inte, c ) ) {
+-				/* find a phrase of ph_id where the text contains 
+-				 * 'selectStr[chno]' test if not ok then return 0, if ok 
++				/* find a phrase of ph_id where the text contains
++				 * 'selectStr[chno]' test if not ok then return 0, if ok
+ 				 * then continue to test
+ 				 */
+ 				len = c.to - c.from;
+@@ -263,7 +263,7 @@ static int CheckChoose(
+ 			else if ( IsIntersect( inte, selectInterval[ chno ] ) ) {
+ 				free( phrase );
+ 				return 0;
+-			} 
++			}
+ 		}
+ 		if ( chno == nSelect ) {
+ 			*pp_phr = phrase;
+@@ -283,7 +283,7 @@ int TreeFindPhrase( int begin, int end,
+ 
+ 	tree_p = 0;
+ 	for ( i = begin; i <= end; i++ ) {
+-		for ( 
++		for (
+ 			child = tree[ tree_p ].child_begin;
+ 			child != -1 && child <= tree[ tree_p ].child_end;
+ 			child++ ) {
+@@ -304,7 +304,7 @@ int TreeFindPhrase( int begin, int end,
+ }
+ 
+ static void AddInterval(
+-		TreeDataType *ptd, int begin , int end, 
++		TreeDataType *ptd, int begin , int end,
+ 		int p_id, Phrase *p_phrase, int dict_or_user )
+ {
+ 	ptd->interval[ ptd->nInterval ].from = begin;
+@@ -344,9 +344,9 @@ static void internal_release_Phrase( Use
+ }
+ 
+ static void FindInterval(
+-		uint16 *phoneSeq, int nPhoneSeq, 
+-		char selectStr[][ MAX_PHONE_SEQ_LEN * MAX_UTF8_SIZE + 1 ], 
+-		IntervalType selectInterval[], int nSelect, 
++		uint16 *phoneSeq, int nPhoneSeq,
++		char selectStr[][ MAX_PHONE_SEQ_LEN * MAX_UTF8_SIZE + 1 ],
++		IntervalType selectInterval[], int nSelect,
+ 		int bArrBrkpt[], TreeDataType *ptd )
+ {
+ 	int end, begin, pho_id;
+@@ -360,9 +360,9 @@ static void FindInterval(
+ 				continue;
+ 
+ 			/* set new_phoneSeq */
+-			memcpy( 
+-				new_phoneSeq, 
+-				&phoneSeq[ begin ], 
++			memcpy(
++				new_phoneSeq,
++				&phoneSeq[ begin ],
+ 				sizeof( uint16 ) * ( end - begin + 1 ) );
+ 			new_phoneSeq[ end - begin + 1 ] = 0;
+ 			puserphrase = pdictphrase = NULL;
+@@ -370,24 +370,24 @@ static void FindInterval(
+ 
+ 			/* check user phrase */
+ 			if ( UserGetPhraseFirst( new_phoneSeq ) &&
+-					CheckUserChoose( new_phoneSeq, begin, end + 1, 
++					CheckUserChoose( new_phoneSeq, begin, end + 1,
+ 					&p_phrase, selectStr, selectInterval, nSelect ) ) {
+ 				puserphrase = p_phrase;
+ 			}
+ 
+ 			/* check dict phrase */
+ 			pho_id = TreeFindPhrase( begin, end, phoneSeq );
+-			if ( 
+-				( pho_id != -1 ) && 
+-				CheckChoose( 
+-					pho_id, begin, end + 1, 
+-					&p_phrase, selectStr, 
++			if (
++				( pho_id != -1 ) &&
++				CheckChoose(
++					pho_id, begin, end + 1,
++					&p_phrase, selectStr,
+ 					selectInterval, nSelect ) ) {
+ 				pdictphrase = p_phrase;
+ 			}
+ 
+ 			/* add only one interval, which has the largest freqency
+-			 * but when the phrase is the same, the user phrase overrides 
++			 * but when the phrase is the same, the user phrase overrides
+ 			 * static dict
+ 			 */
+ 			if ( puserphrase != NULL && pdictphrase == NULL ) {
+@@ -399,7 +399,7 @@ static void FindInterval(
+ 			else if ( puserphrase != NULL && pdictphrase != NULL ) {
+ 				/* the same phrase, userphrase overrides */
+ 				if ( ! strcmp(
+-					puserphrase->phrase, 
++					puserphrase->phrase,
+ 					pdictphrase->phrase ) ) {
+ 					i_used_phrase = USED_PHRASE_USER;
+ 				}
+@@ -475,7 +475,7 @@ static int CompFrom( IntervalType *pa, I
+ }
+ #endif
+ 
+-/* 
++/*
+  * First we compare the 'nMatchCnnct'.
+  * If the values are the same, we will compare the 'score'
+  */
+@@ -497,32 +497,32 @@ static void Discard1( TreeDataType *ptd
+ 
+ 	memset( failflag, 0, sizeof( failflag ) );
+ 	for ( a = 0; a < ptd->nInterval; a++ ) {
+-		if ( failflag[ a ] ) 
++		if ( failflag[ a ] )
+ 			continue;
+ 		for ( b = 0; b < ptd->nInterval; b++ ) {
+ 			if ( a == b || failflag[ b ] )
+ 				continue ;
+-			if ( ptd->interval[ b ].from >= ptd->interval[ a ].from && 
++			if ( ptd->interval[ b ].from >= ptd->interval[ a ].from &&
+ 				ptd->interval[ b ].to <= ptd->interval[ a ].to )
+ 				continue;
+-			if ( ptd->interval[ b ].from <= ptd->interval[ a ].from && 
++			if ( ptd->interval[ b ].from <= ptd->interval[ a ].from &&
+ 				ptd->interval[ b ].to <= ptd->interval[ a ].from )
+ 				continue;
+-			if ( ptd->interval[ b ].from >= ptd->interval[ a ].to && 
++			if ( ptd->interval[ b ].from >= ptd->interval[ a ].to &&
+ 				ptd->interval[ b ].to >= ptd->interval[ a ].to )
+ 				continue;
+ 			break;
+ 		}
+-		/* if any other interval b is inside or leftside or rightside the 
++		/* if any other interval b is inside or leftside or rightside the
+ 		 * interval a */
+ 		if ( b >= ptd->nInterval ) {
+ 			/* then kill all the intervals inside the interval a */
+ 			int i;
+ 			for ( i = 0; i < ptd->nInterval; i++ )  {
+-				if ( 
++				if (
+ 					! failflag[ i ] && i != a &&
+-					ptd->interval[ i ].from >= 
+-						ptd->interval[ a ].from && 
++					ptd->interval[ i ].from >=
++						ptd->interval[ a ].from &&
+ 					ptd->interval[ i ].to <= ptd->interval[ a ].to ) {
+ 					failflag[ i ] = 1;
+ 				}
+@@ -559,14 +559,14 @@ static void Discard2( TreeDataType *ptd
+ 		for ( j = 0; j < ptd->nInterval; j++ ) {
+ 			if ( j == i )
+ 				continue;
+-			memset( 
++			memset(
+ 				&overwrite[ ptd->interval[ j ].from ],
+-				1, 
++				1,
+ 				ptd->interval[ j ].to - ptd->interval[ j ].from );
+ 		}
+-		if ( memchr( 
++		if ( memchr(
+ 			&overwrite[ ptd->interval[ i ].from ],
+-			1,	
++			1,
+ 			ptd->interval[ i ].to - ptd->interval[ i ].from ) )
+ 			failflag[ i ] = 1;
+ 	}
+@@ -594,9 +594,9 @@ static void LoadChar( char *buf, int buf
+ /* kpchen said, record is the index array of interval */
+ static void OutputRecordStr(
+ 		char *out_buf, int out_buf_len,
+-		int *record, int nRecord, 
+-		uint16 phoneSeq[], int nPhoneSeq, 
+-		char selectStr[][ MAX_PHONE_SEQ_LEN * MAX_UTF8_SIZE + 1 ], 
++		int *record, int nRecord,
++		uint16 phoneSeq[], int nPhoneSeq,
++		char selectStr[][ MAX_PHONE_SEQ_LEN * MAX_UTF8_SIZE + 1 ],
+ 		IntervalType selectInterval[],
+ 		int nSelect, TreeDataType *ptd )
+ {
+@@ -664,7 +664,7 @@ static int rule_largest_freqsum( int *re
+ 	for ( i = 0; i < nRecord; i++ ) {
+ 		inter = ptd->interval[ record[ i ] ];
+ 		assert( inter.p_phr );
+-		
++
+ 		/* We adjust the 'freq' of One-word Phrase */
+ 		score += ( inter.to - inter.from == 1 ) ?
+ 			( inter.p_phr->freq / 512 ) :
+@@ -691,19 +691,19 @@ static int IsRecContain( int *intA, int
+ 	int big, sml;
+ 
+ 	for ( big = 0, sml = 0; sml < nB; sml++ ) {
+-		while ( 
+-			( big < nA ) && 
+-			ptd->interval[ intA[ big ] ].from < 
++		while (
++			( big < nA ) &&
++			ptd->interval[ intA[ big ] ].from <
+ 				ptd->interval[ intB[ sml ] ].to ) {
+ 			if ( PhraseIntervalContain(
+-				ptd->interval[ intA[ big ] ], 
++				ptd->interval[ intA[ big ] ],
+ 				ptd->interval[ intB[ sml ] ] ) )
+ 				break;
+ 			big++;
+ 		}
+-		if ( 
+-			( big >= nA ) || 
+-			ptd->interval[ intA[ big ] ].from >= 
++		if (
++			( big >= nA ) ||
++			ptd->interval[ intA[ big ] ].from >=
+ 				ptd->interval[ intB[ sml ] ].to )
+ 			return 0;
+ 	}
+@@ -715,9 +715,9 @@ static void SortListByScore( TreeDataTyp
+ 	int i, listLen;
+ 	RecordNode *p, **arr;
+ 
+-	for ( 
+-		listLen = 0, p = ptd->phList; 
+-		p; 
++	for (
++		listLen = 0, p = ptd->phList;
++		p;
+ 		listLen++, p = p->next )
+ 		;
+ 	ptd->nPhListLen = listLen;
+@@ -725,7 +725,7 @@ static void SortListByScore( TreeDataTyp
+ 	arr = ALC( RecordNode *, listLen );
+ 	assert( arr );
+ 
+-	for ( 
++	for (
+ 		i = 0, p = ptd->phList;
+ 		i < listLen;
+ 		p = p->next, i++ ) {
+@@ -755,23 +755,23 @@ static void SaveRecord( int *record, int
+ 	pre = NULL;
+ 	for ( p = ptd->phList; p; ) {
+ 		/* if  'p' contains 'record', then discard 'record'. */
+-		if ( IsRecContain( p->arrIndex, p->nInter, record, nInter, ptd ) ) 
++		if ( IsRecContain( p->arrIndex, p->nInter, record, nInter, ptd ) )
+ 			return;
+ 
+-		/* if 'record' contains 'p', then discard 'p' 
++		/* if 'record' contains 'p', then discard 'p'
+ 		 * -- We must deal with the linked list. */
+ 		if ( IsRecContain( record, nInter, p->arrIndex, p->nInter, ptd ) ) {
+ 			RecordNode *tp = p;
+ 
+-			if ( pre ) 
++			if ( pre )
+ 				pre->next = p->next;
+ 			else
+ 				ptd->phList = ptd->phList->next;
+ 			p = p->next;
+-			free( tp->arrIndex );			
++			free( tp->arrIndex );
+ 			free( tp );
+ 		}
+-		else 
++		else
+ 			pre = p, p = p->next;
+ 	}
+ 	now = ALC( RecordNode, 1 );
+@@ -780,7 +780,7 @@ static void SaveRecord( int *record, int
+ 	now->arrIndex = ALC( int, nInter );
+ 	assert( now->arrIndex );
+ 	now->nInter = nInter;
+-	memcpy( now->arrIndex, record, nInter * sizeof( int ) );	
++	memcpy( now->arrIndex, record, nInter * sizeof( int ) );
+ 	ptd->phList = now;
+ }
+ 
+@@ -788,9 +788,9 @@ static void RecursiveSave( int depth, in
+ {
+ 	int first, i;
+ 	/* to find first interval */
+-	for ( 
+-		first = record[ depth - 1 ] + 1; 
+-		ptd->interval[ first ].from < to && first < ptd->nInterval; 
++	for (
++		first = record[ depth - 1 ] + 1;
++		ptd->interval[ first ].from < to && first < ptd->nInterval;
+ 		first++ )
+ 		;
+ 
+@@ -801,10 +801,10 @@ static void RecursiveSave( int depth, in
+ 	record[ depth ] = first;
+ 	RecursiveSave( depth + 1, ptd->interval[ first ].to, record, ptd );
+ 	/* for each interval which intersects first */
+-	for ( 
+-		i= first + 1; 
++	for (
++		i= first + 1;
+ 		PhraseIntervalIntersect(
+-			ptd->interval[ first ], 
++			ptd->interval[ first ],
+ 			ptd->interval[ i ] ) && i < ptd->nInterval;
+ 			i++ ) {
+ 		record[ depth ] = i;
+@@ -816,10 +816,10 @@ static void SaveList( TreeDataType *ptd
+ {
+ 	int record[ MAX_PHONE_SEQ_LEN + 1 ] = { -1 };
+ 
+-	RecursiveSave( 1, 0, record, ptd );	
++	RecursiveSave( 1, 0, record, ptd );
+ }
+ 
+-static void InitPhrasing( TreeDataType *ptd ) 
++static void InitPhrasing( TreeDataType *ptd )
+ {
+ 	memset( ptd, 0, sizeof( TreeDataType ) );
+ }
+@@ -829,9 +829,9 @@ static void SaveDispInterval( PhrasingOu
+ 	int i;
+ 
+ 	for ( i = 0; i < ptd->phList->nInter; i++ ) {
+-		ppo->dispInterval[ i ].from = 
++		ppo->dispInterval[ i ].from =
+ 			ptd->interval[ ptd->phList->arrIndex[ i ] ].from;
+-		ppo->dispInterval[ i ].to = 
++		ppo->dispInterval[ i ].to =
+ 			ptd->interval[ ptd->phList->arrIndex[ i ] ].to;
+ 	}
+ 	ppo->nDispInterval = ptd->phList->nInter;
+@@ -864,11 +864,11 @@ static void CountMatchCnnct( TreeDataTyp
+ 	for ( p = ptd->phList; p; p = p->next ) {
+ 		/* for each record, count its 'nMatchCnnct' */
+ 		for ( sum = 0, i = 1; i < nPhoneSeq; i++ ) {
+-			if ( !bUserArrCnnct[ i ] ) 
++			if ( !bUserArrCnnct[ i ] )
+ 				continue;
+ 			/* check if matching 'cnnct' */
+ 			for ( k = 0; k < p->nInter; k++ ) {
+-				if ( 
++				if (
+ 					ptd->interval[ p->arrIndex[ k ] ].from < i &&
+ 					ptd->interval[ p->arrIndex[ k ] ].to > i ) {
+ 					sum++;
+@@ -891,7 +891,7 @@ static void ShowList( TreeDataType *ptd
+ 		DEBUG_OUT( "  interval : " );
+ 		for ( i = 0; i < p->nInter; i++ ) {
+ 			DEBUG_OUT(
+-				"[%d %d] ", 
++				"[%d %d] ",
+ 				ptd->interval[ p->arrIndex[ i ] ].from,
+ 				ptd->interval[ p->arrIndex[ i ] ].to );
+ 		}
+@@ -937,17 +937,17 @@ static RecordNode* NextCut( TreeDataType
+ }
+ 
+ int Phrasing(
+-		PhrasingOutput *ppo, uint16 phoneSeq[], int nPhoneSeq, 
+-		char selectStr[][ MAX_PHONE_SEQ_LEN * MAX_UTF8_SIZE + 1 ], 
+-		IntervalType selectInterval[], int nSelect, 
+-		int bArrBrkpt[], int bUserArrCnnct[] ) 
++		PhrasingOutput *ppo, uint16 phoneSeq[], int nPhoneSeq,
++		char selectStr[][ MAX_PHONE_SEQ_LEN * MAX_UTF8_SIZE + 1 ],
++		IntervalType selectInterval[], int nSelect,
++		int bArrBrkpt[], int bUserArrCnnct[] )
+ {
+ 	TreeDataType treeData;
+ 
+ 	InitPhrasing( &treeData );
+ 
+-	FindInterval( 
+-		phoneSeq, nPhoneSeq, selectStr, selectInterval, nSelect, 
++	FindInterval(
++		phoneSeq, nPhoneSeq, selectStr, selectInterval, nSelect,
+ 		bArrBrkpt, &treeData );
+ 	SetInfo( nPhoneSeq, &treeData );
+ 	Discard1( &treeData );
+@@ -965,10 +965,10 @@ int Phrasing(
+ 	/* set phrasing output */
+ 	OutputRecordStr(
+ 		ppo->chiBuf, sizeof(ppo->chiBuf),
+-		( treeData.phList )->arrIndex, 
+-		( treeData.phList )->nInter, 
+-		phoneSeq, 
+-		nPhoneSeq, 
++		( treeData.phList )->arrIndex,
++		( treeData.phList )->nInter,
++		phoneSeq,
++		nPhoneSeq,
+ 		selectStr, selectInterval, nSelect, &treeData );
+ 	SaveDispInterval( ppo, &treeData );
+ 
diff --git a/libchewing.spec b/libchewing.spec
index 44dd970..eae921f 100644
--- a/libchewing.spec
+++ b/libchewing.spec
@@ -2,14 +2,14 @@
 %define name_zh_TW %{im_name_zh_TW}函式庫
 Name:           libchewing
 Version:        0.3.3
-Release:        2%{?dist}
+Release:        3%{?dist}
 Summary:        Intelligent phonetic input method library for Traditional Chinese
 Summary(zh_TW): %{name_zh_TW}
 
 Group:          System Environment/Libraries
 License:        LGPLv2+
 URL:            http://chewing.csie.net/
-Source:         http://chewing.csie.net/download/libchewing/%{name}-%{version}.tar.bz2
+Source:         https://github.com/downloads/chewing/libchewing/%{name}-%{version}.tar.bz2
 #Patch0: libchewing-0.3.0-3.bz199353.patch
 #Patch1: libchewing-0.3.0-4.bz206232.patch
 #Patch2: libchewing-0.3.0-5.bz216581a.patch
@@ -26,6 +26,8 @@ Source:         http://chewing.csie.net/download/libchewing/%{name}-%{version}.t
 #Patch13: libchewing-0.3.2.hsu.2.patch
 # Rhbz#625980
 #Patch14: libchewing-0.3.2.align.patch
+# RHBZ$477690
+Patch15: libchewing-0.3.3.multilibConflict.patch
 
 
 %{!?python_sitearch: %define python_sitearch %(%{__python} -c "from distutils.sysconfig import get_python_lib; print get_python_lib(1)")}
@@ -93,6 +95,7 @@ Python binding of libchewing.
 #%patch12 -p0 -b .hsu
 #%patch13 -p0 -b .hsu.2
 #%patch14 -p0 -b .align
+%patch15 -p0 -b .multilibConflict
 
 %build
 export CFLAGS=-DLIBINSTDIR='\"%{_libdir}\" -g'
@@ -138,6 +141,9 @@ touch $RPM_BUILD_ROOT%{libchewing_python_dir}/__init__.py
 
 
 %changelog
+* Thu Jul 19 2012 Fedora Release Engineering <rel-eng at lists.fedoraproject.org> - 0.3.3-3
+- Fixed Bug 477690 - libchewing multilib conflict
+
 * Fri Jan 13 2012 Fedora Release Engineering <rel-eng at lists.fedoraproject.org> - 0.3.3-2
 - Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild
 
@@ -159,17 +165,17 @@ touch $RPM_BUILD_ROOT%{libchewing_python_dir}/__init__.py
   Add padding to wch_t to ensure it's word aligned.
 
 * Wed Mar 04 2010 Ding-Yi Chen <dchen at redhat dot com> - 0.3.2-27
-- Fix Dvorak Hsu 4th tone key (ibus google issue 755 comment 12, 
+- Fix Dvorak Hsu 4th tone key (ibus google issue 755 comment 12,
   chewing google issue 10)
 - Resolves: #555192
 
 * Mon Feb 15 2010 Ding-Yi Chen <dchen at redhat dot com> - 0.3.2-24
-- Fix Hsu and Dvorak Hsu input (ibus google issue 755, 
+- Fix Hsu and Dvorak Hsu input (ibus google issue 755,
   chewing google issue 10)
 - Resolves: #555192
 
 * Mon Feb 15 2010 Ding-Yi Chen <dchen at redhat dot com> - 0.3.2-23
-- Fix Hsu and Dvorak Hsu input (ibus google issue 755, 
+- Fix Hsu and Dvorak Hsu input (ibus google issue 755,
   chewing google issue 10)
 - Resolves: #555192
 
@@ -196,8 +202,8 @@ touch $RPM_BUILD_ROOT%{libchewing_python_dir}/__init__.py
 - Fix for package wrangler.
 
 * Wed Sep 30 2009 Ding-Yi Chen <dchen at redhat dot com> - 0.3.2-16
-- Fix chewing Google issue 352: 
-  zuin_count in chewing_zuin_String( ChewingContext *ctx, int *zuin_count ) 
+- Fix chewing Google issue 352:
+  zuin_count in chewing_zuin_String( ChewingContext *ctx, int *zuin_count )
   does not count correctly.
 
 * Mon Aug 03 2009 Ding-Yi Chen <dchen at redhat dot com> - 0.3.2-15


More information about the scm-commits mailing list