Bug 208076 - libc on 10.3 beta2 does not compile on 10.2-stable
Summary: libc on 10.3 beta2 does not compile on 10.2-stable
Status: Closed Not A Bug
Alias: None
Product: Base System
Classification: Unclassified
Component: bin (show other bugs)
Version: 10.3-BETA2
Hardware: amd64 Any
: --- Affects Some People
Assignee: freebsd-bugs (Nobody)
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2016-03-17 00:48 UTC by Kevin Thompson
Modified: 2016-08-01 23:39 UTC (History)
2 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Kevin Thompson 2016-03-17 00:48:51 UTC
Attempting to compile stable/10 from svn rev 296969:

> angst(/usr/src) # svn info
> Path: .
> Working Copy Root Path: /usr/src
> URL: http://svn0.us-east.freebsd.org/base/stable/10
> Revision: 296969
> Last Changed Rev: 296969
> Last Changed Date: 2016-03-16 20:32:29 -0400 (Wed, 16 Mar 2016)
>
> angst(/usr/src) # uname -a
> FreeBSD angst.csh.rit.edu 10.2-STABLE FreeBSD 10.2-STABLE #3 r290239: Sun Nov  1 19:42:14 EST 2015     antiduh@angst.csh.rit.edu:/space/obj/space/src/sys/ANGST64  amd64


`make buildworld` fails while compiling libc:

> --- acl_support_nfs4.po ---
> cc -pg  -O2 -pipe   -I/usr/src/lib/libc/include -I/usr/src/lib/libc/../../include -I/usr/src/lib/libc/amd64 -DNLS  -D__DBINTERFACE_PRIVATE -I/usr/src/lib/libc/../../contrib/gdtoa -I/usr/src/lib/libc/../../contrib/libc-vis -DINET6 -I/usr/obj/usr/src/lib/libc -I/usr/src/lib/libc/resolv  -D_ACL_PRIVATE -DPOSIX_MISTAKE -I/usr/src/lib/libc/../libmd -I/usr/src/lib/libc/../../contrib/jemalloc/include -I/usr/src/lib/libc/../../contrib/tzcode/stdtime -I/usr/src/lib/libc/stdtime  -I/usr/src/lib/libc/locale -DBROKEN_DES -DPORTMAP -DDES_BUILTIN -I/usr/src/lib/libc/rpc -DYP -DNS_CACHING -DSYMBOL_VERSIONING -DSYSCALL_COMPAT -std=gnu99 -Qunused-arguments  -fstack-protector -Wsystem-headers -Werror -Wall -Wno-format-y2k -Wno-uninitialized -Wno-pointer-sign -Wno-empty-body -Wno-string-plus-int -Wno-unused-const-variable -Wno-tautological-compare -Wno-unused-value -Wno-parentheses-equality -Wno-unused-function -Wno-enum-conversion -Wno-switch -Wno-switch-enum -Wno-knr-promoted-parameter -c /usr/src/lib/libc/posix1e/acl_to_text_nfs4.c -o acl_to_text_nfs4.po
> 
> --- acl_support_nfs4.po ---
> /usr/src/lib/libc/posix1e/acl_support_nfs4.c:51:8: error: use of undeclared identifier 'ACL_ENTRY_INHERITED'
>      { ACL_ENTRY_INHERITED, "inherited", 'I' }


`ACL_ENTRY_INHERITED` is defined in /usr/src/sys/sys/acl.h, which acl_support_nfs4.c attempts to include:

> #include <stdio.h>
> #include <stdlib.h>
> #include <string.h>
> #include <assert.h>
> #include <err.h>
> #include <sys/acl.h>
> #include "acl_support.h"


The problem is that the compilation flags don't have the right include flags. Here are the ones that are present:


> -I/usr/obj/usr/src/lib/libc 
> -I/usr/src/lib/libc/../../contrib/gdtoa 
> -I/usr/src/lib/libc/../../contrib/jemalloc/include 
> -I/usr/src/lib/libc/../../contrib/libc-vis
> -I/usr/src/lib/libc/../../contrib/tzcode/stdtime 
> -I/usr/src/lib/libc/../../include 
> -I/usr/src/lib/libc/../libmd 
> -I/usr/src/lib/libc/amd64
> -I/usr/src/lib/libc/include 
> -I/usr/src/lib/libc/locale
> -I/usr/src/lib/libc/resolv
> -I/usr/src/lib/libc/rpc 
> -I/usr/src/lib/libc/stdtime  

Missing from that list: `-I/usr/src/sys/`.

The following patch fixes the problem:

> angst(/usr/src/lib/libc) # svn diff
> Index: Makefile
> ===================================================================
> --- Makefile    (revision 296968)
> +++ Makefile    (working copy)
> @@ -27,6 +27,7 @@
>  WARNS?=        2
>  CFLAGS+=-I${.CURDIR}/include -I${.CURDIR}/../../include
>  CFLAGS+=-I${.CURDIR}/${LIBC_ARCH}
> +CFLAGS+=-I${.CURDIR}/../../sys
>  .if ${MK_NLS} != "no"
>  CFLAGS+=-DNLS
>  .endif


This issue was noticed here: https://lists.freebsd.org/pipermail/freebsd-stable/2016-February/084205.html

The poster seems to have fixed the problem by compiling 10.3 beta 2 while already on 10.3 beta 2. Perhaps the fact that I'm compiling on 10.2-stable is relevant?
Comment 1 John Baldwin freebsd_committer freebsd_triage 2016-08-01 23:39:14 UTC
That would not be correct, no.  The buildworld process creates a new /usr/include tree that is populated with headers from the source tree.  The implicit -I /usr/include added by the C compiler is redirected to that path which is why you don't see it via -I.  Something else must have been out of whack in your environment.  You can try blowing /usr/obj away entirely.