Re: /usr/share/mk/sys.mk for main [so: 15]: .if defined(%POSIX) and CC ?= c89 and CFLAGS ?= -O [still appropriate?]
Date: Thu, 28 Nov 2024 21:19:50 UTC
On Nov 28, 2024, at 13:05, Warner Losh <imp@bsdimp.com> wrote: >> On Thu, Nov 28, 2024, 1:58 PM Mark Millard <marklmi@yahoo.com> wrote: >> With the recent POSIX 2024 activity I'm wondering if sys.mk having: >> >> .if defined(%POSIX) >> CC ?= c89 >> CFLAGS ?= -O >> .else >> >> may be outdated for main [so: 15 as stands] and may have >> been so for some time. >> >> >> https://pubs.opengroup.org/onlinepubs/9799919799/ (Issue 8) >> reports a base document set including: >> >> ISO/IEC 9899:2018, Programming Languages — C (C17) >> >> Also: c17 — compile standard C programs >> (FreeBSD does not have c17 as a command yet.) >> >> >> https://pubs.opengroup.org/onlinepubs/9699919799.orig/ (Issue 7) >> reports a base document set including: >> >> ISO/IEC 9899:1999, Programming Languages - C >> ISO/IEC 9899:1999/Cor.1:2001(E) >> ISO/IEC 9899:1999/Cor.2:2004(E) >> ISO/IEC 9899:1999/Cor.3 >> >> also: c99 - compile standard C programs >> >> (FreeBSD has c99 .) > > What does the section on make specify? I suspect that issue 7 says c99 here. We are no where close to adding all or even most of the issue 8 features, though. Issue 7 reports for make: MACROS MAKE=make AR=ar ARFLAGS=-rv YACC=yacc YFLAGS= LEX=lex LFLAGS= LDFLAGS= CC=c99 CFLAGS=-O 1 FC=fort77 FFLAGS=-O 1 [XSI] GET=get GFLAGS= SCCSFLAGS= SCCSGETFLAGS=-s and: The default rules are based on System V. The default CC= value is c99 instead of cc because this volume of POSIX.1-2017 does not standardize the utility named cc. Thus, every conforming application would be required to define CC= c99 to expect to run. There is no advantage conferred by the hope that the makefile might hit the "preferred" compiler because this cannot be guaranteed to work. Also, since the portable makescript can only use the c99 options, no advantage is conferred in terms of what the script can do. It is a quality-of-implementation issue as to whether c99 is as valuable as cc. (I've omitted examples that just use c99 text explicitly.) Analogously, Issue 8 for make: MACROS AR=ar ARFLAGS=-rv YACC=yacc YFLAGS= LEX=lex LFLAGS= LDFLAGS= CC=c17 CFLAGS=-O 1 [XSI] GET=get GFLAGS= SCCSFLAGS= SCCSGETFLAGS=-s and: The default rules are based on System V. The default CC= value is c17 instead of cc because this volume of POSIX.1-2024 does not standardize the utility named cc. Thus, every conforming application would be required to define CC=c17 to expect to run. There is no advantage conferred by the hope that the makefile might hit the "preferred" compiler because this cannot be guaranteed to work. Also, since the portable makescript can only use the c17 options, no advantage is conferred in terms of what the script can do. It is a quality-of-implementation issue as to whether c17 is as valuable as cc. (I've omitted examples that just use c17 text explicitly.) === Mark Millard marklmi at yahoo.com