From mboxrd@z Thu Jan 1 00:00:00 1970 To: Fans of the OS Plan 9 from Bell Labs <9fans@cse.psu.edu> Subject: Re: [9fans] p9p mk issue In-reply-to: Your message of "Wed, 21 Nov 2007 11:01:10 EST." <20071121160100.1BBBD1E8C22@holo.morphisms.net> From: Bakul Shah Date: Wed, 21 Nov 2007 10:01:07 -0800 Message-Id: <20071121180107.531D55B2E@mail.bitblocks.com> Topicbox-Message-UUID: 07944750-ead3-11e9-9d60-3106f5b1d025 > > >> Don't laugh but I am trying to use identical mkfiles on > > >> FreeBSD & plan9 for some programs and it seems this is > > >> impossible. > > > > For now I just changed default MKSHELL to rc in src/cmd/mk. > > What I was really arguing for was for simplifying MKSHELL > > semantics or getting rid of it altogether since it only > > exists in p9p mk. > > if you want to use rc in both places, then setting MKSHELL=rc is enough. > the plan 9 mk will ignore it. Yeah that is one solution except that pretty much every mkfile will need this line and I hate having to litter mkfiles. > MKSHELL is here to stay. the unix versions of mk have > traditionally used sh not rc, and there are users who > depend on that. > > also, while using sh by default is a little annoying, > it simplifies the plan9port build process considerably, > since rc doesn't have to get bootstrapped just to get > mk running. OK, how about this? If env. var MKSHELL is set to rc, then set the default value of make variable MKSHELL to rc else to sh. You get exactly the same effect as now and I get what I want by setting MKSHELL env. var to rc. I just reran $PLAN9/INSTALL with this change and it works like before (as expected). diff -r 976b3130f4f8 src/cmd/mk/shell.c --- a/src/cmd/mk/shell.c Wed Nov 07 17:30:51 2007 -0500 +++ b/src/cmd/mk/shell.c Wed Nov 21 09:38:50 2007 -0800 @@ -5,7 +5,7 @@ static Shell *shells[] = { &shshell }; -Shell *shelldefault = &shshell; +Shell *shelldefault; Shell *shellt; Word *shellcmd; @@ -41,6 +41,10 @@ void void initshell(void) { + if(shelldefault == nil){ + char* sh = getenv("MKSHELL"); + shelldefault = sh && strcmp(sh, "rc") == 0? &rcshell : &shshell; + } shellcmd = stow(shelldefault->name); shellt = shelldefault; setvar("MKSHELL", shellcmd);