Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 29 Oct 2020 01:29:39 +0100
From:      "Julian H. Stacey" <jhs@berklix.com>
To:        Stefan Esser <se@freebsd.org>
Cc:        Greg Balfour <greg.bal4@gmail.com>
Subject:   Re: calendar (1) - patch to correct error description
Message-ID:  <202010290029.09T0Td4m004819@fire.js.berklix.net>
In-Reply-To: Your message "Wed, 28 Oct 2020 14:18:48 %2B0100." <3ec7872e-c264-e05f-cc3b-bbd2f421a97f@freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
Hi Stefan
> Am 28.10.20 um 13:02 schrieb Julian H. Stacey:
> > man calendar states:
> >    "The calendar internal cpp does not correctly do #ifndef and will discard
> >    the rest of the file if a #ifndef is triggered."
> > That is wrong, as proved by test file:
> > ---
> > // Test data for ~/.calendar/calendar
> > *	bla0
> > #ifdef DEBUG1
> > * 28	bla1
> > #endif
> > #ifdef DEBUG2
> > * 28	bla2
> > #endif
> > #ifndef DEBUG3
> > * 28	bla3
> > #endif
> > #define DEBUG4 TRUE
> > #ifndef DEBUG4
> > * 28	bla4
> > #endif
> > * 28	bla5
> > ---
> > Produces:
> > ---
> > Oct 28 	bla5
> > Oct 28 	bla4
> > Oct 28 	bla3
> > Oct 28 	bla2
> > Oct 28 	bla1
> > ---
> > Correction:
> >    The calendar internal cpp ignores directives #ifdef , #ifndef and #endif ,
> >    and simply including intervening text regardless.
> 
> Hi Julian,
> 
> no, the calendar program worked as documented, see the BUGS section of
> the man-page:
> 
> .Sh BUGS
> The
> .Nm
> internal cpp does not correctly do #ifndef and will discard the rest-of 
> the file if a #ifndef is triggered.-It also has a maximum of 50 include 
> file and/or 100 #defines and only recognises #include, #define and
> #ifndef.

Ah OK, here's 2 test cases
---Ex 1
* 29	bla1
#ifndef RAINEY
* 29	bla4
#endif
* 29	bla5
--- Ex 2
* 29	bla1
#define RAINEY YES
#ifndef RAINEY
* 29	bla4
#endif
* 29	bla5
---

They both produce:
---
Oct 29  bla5
Oct 29  bla4
Oct 29  bla1
---
Where manual misleads with:
	"internal cpp ... will discard the rest-of the file if a
	#ifndef is triggered"
Triggered or not, that #ifndef to cpp seems not discard rest of file.


> There is no mention of #ifdef being supported ...

OK, I just assumed that would be supported if #ifndef was.


> And your "#ifndef DEBUG4" did not trigger, since the whole line after
> #define is used as the identifier, in your case "DEBUG4 TRUE".

There lies the problem, Thanks !
Nasty, I dont recall anything called cpp aka C Pre Processor ever being
that limited, back to 1983 on a C compiler that ran on CP/M,
where masses of other C things were broken.  Best that calendar
not call it cpp at all, as name misleads.

OK, tested with
---
* 29	bla1
#define RAINEY
#ifndef RAINEY
* 29	bla4
#endif
* 29	bla5
---
& got
---
Oct 29  bla5
Oct 29  bla1
---
& finaly in this special case current manual correctly reports a bug.


> This is not obvious from reading the man-page and it might be more
> intuitive, if the identifier was only the word up to the first blank,

Yes

> but the code in the calendar program does just strip off leading and 
> trailing white-space. It might be too late to change this behavior.

Hopefully not too late. 
Either way, Ameliorations:
- Do a global edit in manual from "cpp" to "pre-processor"
  to remove expectation of similarity to cpp.
- Define in manual exactly how the pre-processor handles defines.


> I have updated the code in -CURRENT to support #ifdef (MFC in 3 days)

Nice 


> and I plan to add supported for nested conditions in -CURRENT 

Nice


> (not
> sure whether that should be merged to -STABLE, though).

Probably yes ?


> I could change the #define and #if/ifndef to only consider the first
> following word, but do not plan to do that at this time.

Would be good if you did, silently swallowing space seperated text
as extended name of a define instead of value of define, is not
intuitive, At least document if you have no time to change it please ?

Fixing documenting & extanding a pp in calendar could become like
re-inventing the wheel ?  As a cpp is in src/ & not ports, can't
calendar use popen(/usr/bin/cpp) & save work ?  Looks like there's
enough work to do in main calendar without extra work of a custom
pre processor ?

Thanks for copy of your reply to Greg Balfour's off list mail, ref
	https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=205580
which notes:
	"This patch is against 11.4-RELEASE.  Note that it requires
	the installation of the devel/tradcpp port/package."

I agree your policy point, FreeBSD can't use a port as dependency
to build calendar, while calendar is still build by src/ world.  (&
not just for Free, but Net & Open BSD etc will have similiar views
I presume)

I don't know which cpp's from where might have been looked at in the past,

> Regards, STefan

Thanks !

Cheers,
-- 
Julian Stacey, Consultant Sys. Eng. BSD Linux Unix, http://berklix.com/jhs/cv/
Crash Brexit profits financial speculators in cabinet damaging Britain.
UK stole 3.7 million votes from Brits abroad 700 K in EU http://stolenvotes.uk



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202010290029.09T0Td4m004819>