I'm building a small (~70MB) Gentoo Linux setup using uclibc for my Nagasaki MS-2100, a miniature PC (once used as a wifi AP by a local ISP) with a Geode GX1 processor. To my surprise, the thing turns out to be capable of frequency scaling using the gx-suspmod driver. However, unfortunately cpufrequtils fails to build in my uclibc development environment. I'm suspecting it's because it tries to use internationalization code even though the nls flag is (forced) off. Reproducible: Always Steps to Reproduce: 1. chroot into uclibc build environment (made using stage3-x86-uclibc-2006.1) 2. emerge cpufrequtils Actual Results: The ebuild fails as follows: * Messages for package sys-power/cpufrequtils-002-r3: * * ERROR: sys-power/cpufrequtils-002-r3 failed. * Call stack: * ebuild.sh, line 1701: Called dyn_compile * ebuild.sh, line 1039: Called qa_call 'src_compile' * ebuild.sh, line 44: Called src_compile * cpufrequtils-002-r3.ebuild, line 32: Called die * The specific snippet of code: * emake V=true DEBUG=${debug} NLS=${nls} \ * CC=$(tc-getCC) LD=$(tc-getCC) AR=$(tc-getAR) STRIP=echo RANLIB=$(tc-getRANLIB) \ * || die "emake failed" * The die message: * emake failed * * If you need support, post the topmost build error, and the call stack if relevant. * A complete build log is located at '/var/tmp/portage/sys-power/cpufrequtils-002-r3/temp/build.log'. * Looking further in the log, I see the following. It looks to me like it expects libintl to be there, but it isn't because I use uclibc with no internationalization code. utils/info.c:13:21: error: libintl.h: No such file or directory utils/set.c:15:21: error: libintl.h: No such file or directory utils/info.c: In function 'count_cpus': utils/info.c:36: warning: implicit declaration of function 'gettext' utils/info.c:36: warning: incompatible implicit declaration of built-in function 'gettext' utils/set.c: In function 'print_header': utils/set.c:30: warning: implicit declaration of function 'gettext' utils/set.c:30: warning: incompatible implicit declaration of built-in function 'gettext' utils/set.c: In function 'print_help': utils/set.c:34: warning: incompatible implicit declaration of built-in function 'gettext' utils/info.c: In function 'proc_cpufreq_output': utils/info.c:67: warning: incompatible implicit declaration of built-in function 'gettext' utils/set.c: In function 'print_unknown_arg': utils/set.c:79: warning: incompatible implicit declaration of built-in function 'gettext' utils/info.c: In function 'debug_output_one': utils/info.c:125: warning: incompatible implicit declaration of built-in function 'gettext' (And so on, there are ton of warnings about gettext like these.) Expected Results: Cpufrequtils should have compiled normally. Portage 2.1.3.19 (uclibc/x86/2005.1, gcc-4.1.2, uclibc-0.9.28.3-r0, 2.6.23-gentoo-r3 i686) ================================================================= System uname: 2.6.23-gentoo-r3 i686 unknown Timestamp of tree: Sun, 13 Jan 2008 01:16:01 +0000 app-shells/bash: 3.2_p17-r1 dev-lang/python: 2.4.4-r6 dev-python/pycrypto: 2.0.1-r6 sys-apps/baselayout: 1.12.10-r5 sys-apps/sandbox: 1.2.18.1-r2 sys-devel/autoconf: 2.61-r1 sys-devel/automake: 1.4_p6, 1.10 sys-devel/binutils: 2.18-r1 sys-devel/gcc-config: 1.4.0-r4 sys-devel/libtool: 1.5.24 virtual/os-headers: 2.6.23-r3 ACCEPT_KEYWORDS="x86" CBUILD="i586-pc-linux-uclibc" CFLAGS="-Os -march=pentium-mmx -fomit-frame-pointer -pipe" CHOST="i586-pc-linux-uclibc" CONFIG_PROTECT="/etc" CONFIG_PROTECT_MASK="/etc/env.d /etc/gconf /etc/revdep-rebuild /etc/terminfo /etc/udev/rules.d" CXXFLAGS="-Os -march=pentium-mmx -fomit-frame-pointer -pipe" DISTDIR="/usr/portage/distfiles" FEATURES="autoconfig buildpkg distlocks metadata-transfer nodoc noinfo noman sandbox sfperms strict unmerge-orphans userfetch userpriv" GENTOO_MIRRORS="http://ftp.snt.utwente.nl/pub/linux/gentoo http://distfiles.gentoo.org" MAKEOPTS="-j3" PKGDIR="/usr/portage/packages" PORTAGE_RSYNC_OPTS="--recursive --links --safe-links --perms --times --compress --force --whole-file --delete --delete-after --stats --timeout=180 --exclude=/distfiles --exclude=/local --exclude=/packages --filter=H_**/files/digest-*" PORTAGE_TMPDIR="/var/tmp" PORTDIR="/usr/portage" SYNC="rsync://rsync.pearlgates.net/gentoo-portage" USE="bitmap-fonts cli cracklib dri midi minimal mmx mudflap ncurses openmp pcre readline reflection session spl truetype-fonts type1-fonts uclibc x86 xorg zlib" ALSA_CARDS="none" ALSA_PCM_PLUGINS="adpcm alaw asym copy dmix dshare dsnoop empty extplug file hooks iec958 ioplug ladspa lfloat linear meter mulaw multi null plug rate route share shm softvol" APACHE2_MODULES="actions alias auth_basic authn_alias authn_anon authn_dbm authn_default authn_file authz_dbm authz_default authz_groupfile authz_host authz_owner authz_user autoindex cache dav dav_fs dav_lock deflate dir disk_cache env expires ext_filter file_cache filter headers include info log_config logio mem_cache mime mime_magic negotiation rewrite setenvif speling status unique_id userdir usertrack vhost_alias" ELIBC="uclibc" INPUT_DEVICES="none" KERNEL="linux" LCD_DEVICES="bayrad cfontz cfontz633 glk hd44780 lb216 lcdm001 mtxorb ncurses text" USERLAND="GNU" VIDEO_CARDS="none" Unset: CPPFLAGS, CTARGET, EMERGE_DEFAULT_OPTS, INSTALL_MASK, LANG, LC_ALL, LDFLAGS, LINGUAS, PORTAGE_COMPRESS, PORTAGE_COMPRESS_FLAGS, PORTAGE_RSYNC_EXTRA_OPTS, PORTDIR_OVERLAY
try this. uClibc foobar # cat /usr/include/libintl.h #ifndef _LIBINTL_H #define _LIBINTL_H 1 #include <features.h> /* Stubs for gettext/locale bullshit... */ #undef gettext #undef dgettext #undef dcgettext #undef ngettext #undef dngettext #undef dcngettext #undef textdomain #undef bindtextdomain #undef bind_textdomain_codeset /* this fucker seems to be installed in /usr/include/locale.h */ /* #undef setlocale */ #undef _ #undef N_ #define gettext(String) (String) #define dgettext(Domain, String) (String) #define dcgettext(Domain, String, Type) (String) #define ngettext(msgid1, msgid2, n) (msgid1) #define dngettext(Domain, msgid1, msgid2, n) (Domain) #define dcngettext(Domain, msgid1, msgid2, n, Category) (Domain) #define dgettext(Domain, String) (String) #define dcgettext(Domain, String, Type) (String) #ifndef _LOCALE_H /* #define setlocale(Category, Locale) ((char *)NULL) */ #endif #define bindtextdomain(Domain, Directory) (Domain) #define bind_textdomain_codeset(Domain, Codeset) #define textdomain(String) #define _(String) (String) #define N_(String) (String) #endif
That seems to have done the trick, although it causes some weird warnings when compiling the kernel. But at least cpufrequtils compiles now.
Move the file out of the way when not needed. It will cause false detection of nls related things. Those stub functions are suited to become something that an eclass takes care of some day.
Created attachment 145993 [details, diff] Realy disable NLS Patch add: 1. Definition NLS to CFLAGS 2. Wrappers on gettext which do nothing if NLS not defined.
Created attachment 146273 [details, diff] Without garbage Sorry for garbage in previous patch
ive merged your fix in 005-r1 ... thanks!
This patch listed incorrect authorship in portage. I've fixed that and I also sent the patch upstream for inclusion into cpufrequtils. Thanks again.