Subject: Re: CONFIG_NLS=m resulting in undefined reference to utf16s_to_utf8s causing build failure

From: Jesse Barnes <[email-masked]>
Date: Fri, 14 Jan 2011 09:14:43 -0800

On Thu, 13 Jan 2011 08:03:56 -0800
<[email-masked]> wrote:

> On Thu, Jan 13, 2011 at 09:25:56PM +0530, Jesse Barnes wrote:
> > On Wed, 12 Jan 2011 22:23:55 -0500 (EST)
> > Len Brown <[email-masked]> wrote:
> > > > So there's no other ACPI code that depends on this function?  I'd hate
> > > > to make PCI depend on NLS, so assuming ACPI doesn't need it (in which
> > > > case the select or depend should be there), I guess it should be pulled
> > > > into a common file that will always be included.
> > > 
> > > No, nothing in the ACPI code uses utf16s_to_utf8s.
> > > 
> > > I don't know anything about NLS, but it appears to be
> > > something that file systems (befs, cifs, fat, hfs, isofs, jfs, etc)
> > > use to to support native languages.
> > > 
> > > BTW. I don't understand why pci-label.o appears twice above.
> > > It used to be just the 2nd one, that depends on CONFIG_DMI.
> > 
> > Ok, I'll drop this patch for now then since I haven't seen a fix yet
> > and need to get Linus the rest of the changes.
> 
> Jesse,
> 
> I just compile tested a fix on the following lines without any failure.
> If it is acceptable, i will send a patch in half an hour. It builds
> 
> diff --git a/fs/Makefile b/fs/Makefile
> index db71a5b..2a39275 100644
> --- a/fs/Makefile
> +++ b/fs/Makefile
> @@ -86,7 +86,7 @@ obj-$(CONFIG_NFS_FS)		+= nfs/
>  obj-$(CONFIG_EXPORTFS)		+= exportfs/
>  obj-$(CONFIG_NFSD)		+= nfsd/
>  obj-$(CONFIG_LOCKD)		+= lockd/
> -obj-$(CONFIG_NLS)		+= nls/
> +obj-y				+= nls/
>  obj-$(CONFIG_SYSV_FS)		+= sysv/
>  obj-$(CONFIG_CIFS)		+= cifs/
>  obj-$(CONFIG_NCP_FS)		+= ncpfs/
> diff --git a/fs/nls/Makefile b/fs/nls/Makefile
> index f499dd7..c172fbb 100644
> --- a/fs/nls/Makefile
> +++ b/fs/nls/Makefile
> @@ -2,7 +2,7 @@
>  # Makefile for native language support
>  #
>  
> -obj-$(CONFIG_NLS)		+= nls_base.o
> +obj-y				+= nls_base.o
>  
>  obj-$(CONFIG_NLS_CODEPAGE_437)	+= nls_cp437.o
>  obj-$(CONFIG_NLS_CODEPAGE_737)	+= nls_cp737.o

nls_base.c is pretty small, but I don't want to make it unconditional.
If you don't want to split out the necessary functions into lib/ or
something, then it might be best to make the new code in
pci-label.c conditional on a new config option that describes the
feature, points at the documentation, and either selects or depends on
nls support (documenting it in the help text either way).

Thanks,
-- 
Jesse Barnes, Intel Open Source Technology Center