Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 1 Sep 1996 07:06:47 +1000
From:      Bruce Evans <bde@zeta.org.au>
To:        bde@freefall.freebsd.org, jkh@time.cdrom.com
Cc:        cvs-all@freefall.freebsd.org, CVS-committers@freefall.freebsd.org, cvs-usrbin@freefall.freebsd.org
Subject:   Re: cvs commit: src/usr.bin/make make.1
Message-ID:  <199608312106.HAA06437@godzilla.zeta.org.au>

next in thread | raw e-mail | index | archive | help
>>   except in main.c.  I will be changing MAKEOBJDIR back to its old
>>   behaviour so that the comment in main.c actually applies.

>Just don't destroy the read-only source tree behavior please as I'll
>be actually using that in a project shortly and if you bring back obj
>links then you're going to see dueling CVS commits in the tree and a
>pair of very unhappy people.  In other words, please feel free to
>replace it with something better, just don't eliminate the feature
>itself.

Thanks for volunteering to test it ;-).

Sources will be built in the current directory, or possibly in the obj
subdirectory or link, unless this is overridden by setting MAKEOBJDIR
or MAKEOBJTREE.  Setting MAKEOBJTREE=/usr/obj will give the current
behaviour except possibly for support for MACHINE.  This already
works except for stuff involving .TARGETOBJ.  Setting MAKEOBJTREE=obj
will give the old default behaviour so I'll probably remove the
hard-coded default.

Problems:

1. It's not easy to support setting MAKEOBJDIR or MAKEOBJTREE early enough 
   in a makefile.  The have to be environment variables now.  It's not
   easy to support substition in these variables early enough.  I would
   have preferred to use

      MAKEOBJDIR	?=	${.CURDIR:S;^;${MAKEOBJTREE};}

   The current method is essentially this with the `^' pattern hard-coded.

2. Appending `.${MACHINE}' to the object path is probably incompatible
   with .TARGETOBJ (because .TARGETOBJ has to be canonical and there's
   no point in having a tree full of xxx.i386's and xxx.alpha's - the
   trees may as well be separate under /usr/obj.i386 and /usr/obj.alpha.
   MAKEOBJTREE can handle this easily).

3. The cleanobj rule in -current is too dangerous.  I think it removes
   the current directory if MAKEOBJDIR is "".

Bruce

*** pathnames.h~	Sat Jul 13 18:38:10 1996
--- pathnames.h	Sat Aug 31 15:33:02 1996
***************
*** 35,39 ****
   */
  
! #define	_PATH_OBJDIR		"/usr/obj"
  #define	_PATH_DEFSHELLDIR	"/bin"
  #define	_PATH_DEFSYSMK		"/usr/share/mk/sys.mk"
--- 35,39 ----
   */
  
! #define	_PATH_OBJDIR		"obj"
  #define	_PATH_DEFSHELLDIR	"/bin"
  #define	_PATH_DEFSYSMK		"/usr/share/mk/sys.mk"
*** main.c~	Thu Jul 18 10:14:59 1996
--- main.c	Sat Aug 31 21:09:37 1996
***************
*** 383,388 ****
  	char mdpath[MAXPATHLEN + 1];
  	char obpath[MAXPATHLEN + 1];
  	char cdpath[MAXPATHLEN + 1];
- 	char *realobjdir;	/* Where we'd like to go */
  	struct utsname utsname;
      	char *machine = getenv("MACHINE");
--- 383,388 ----
  	char mdpath[MAXPATHLEN + 1];
  	char obpath[MAXPATHLEN + 1];
+ 	char obtreepath[MAXPATHLEN + 1];
  	char cdpath[MAXPATHLEN + 1];
  	struct utsname utsname;
      	char *machine = getenv("MACHINE");
***************
*** 434,441 ****
  	 * current directory is also placed as a variable for make scripts.
  	 */
! 	if (!(path = getenv("MAKEOBJDIR")))
! 		path = _PATH_OBJDIR;
! 	(void) snprintf(mdpath, MAXPATHLEN, "%s%s", path, curdir);
! 	realobjdir = mdpath;	/* This is where we'd _like_ to be, anyway */
  
  	if (stat(mdpath, &sb) == 0 && S_ISDIR(sb.st_mode)) {
--- 434,451 ----
  	 * current directory is also placed as a variable for make scripts.
  	 */
! 	if (!(path = getenv("MAKEOBJDIR"))) {
! 		if (!(path = getenv("MAKEOBJTREE")))
! 			path = _PATH_OBJDIR;
! 		else {
! 			(void) sprintf(obtreepath, "%s%s", path, curdir);
! 			path = obtreepath;
! 		}
! 		(void) sprintf(mdpath, "%s.%s", path, machine);
! 	}
! 	else
! 		(void) strncpy(mdpath, path, MAXPATHLEN + 1);
! #if 0
! printf("path=%s, mdpath=%s\n", path, mdpath);
! #endif
  
  	if (stat(mdpath, &sb) == 0 && S_ISDIR(sb.st_mode)) {
***************
*** 455,460 ****
  		}
  	}
! 	else
! 		objdir = curdir;
  
  	setenv("PWD", objdir, 1);
--- 465,489 ----
  		}
  	}
! 	else {
! 		if (stat(path, &sb) == 0 && S_ISDIR(sb.st_mode)) {
! 
! 			if (chdir(path)) {
! 				(void)fprintf(stderr, "make warning: %s: %s.\n",
! 					      path, strerror(errno));
! 				objdir = curdir;
! 			}
! 			else {
! 				if (path[0] != '/') {
! 					(void) sprintf(obpath, "%s/%s", curdir,
! 						       path);
! 					objdir = obpath;
! 				}
! 				else
! 					objdir = path;
! 			}
! 		}
! 		else
! 			objdir = curdir;
! 	}
  
  	setenv("PWD", objdir, 1);
***************
*** 500,504 ****
  		Dir_AddDir(dirSearchPath, curdir);
  	Var_Set(".CURDIR", curdir, VAR_GLOBAL);
- 	Var_Set(".TARGETOBJDIR", realobjdir, VAR_GLOBAL);
  	Var_Set(".OBJDIR", objdir, VAR_GLOBAL);
  
--- 529,532 ----
*** bsd.obj.mk~	Mon Jul 15 14:48:44 1996
--- bsd.obj.mk	Sat Aug 31 16:38:50 1996
***************
*** 77,89 ****
  .if !target(whereobj)
  whereobj:
! .if defined(NOOBJ)
! 	@echo ${.CURDIR}
! .else
! 	@if ! test -d ${.TARGETOBJDIR}; then \
! 	    echo ${.CURDIR}; \
! 	else \
! 	    echo ${.TARGETOBJDIR}; \
! 	fi
! .endif
  .endif
  
--- 77,81 ----
  .if !target(whereobj)
  whereobj:
! 	@cd ${.CURDIR}; ${MAKE} -V .OBJDIR
  .endif
  
***************
*** 92,100 ****
  #
  cleanobj:
! 	@if [ -d ${.TARGETOBJDIR} ]; then \
! 		rm -rf ${.TARGETOBJDIR}; \
! 	else \
! 		cd ${.CURDIR} && ${MAKE} clean cleandepend; \
! 	fi
  .if defined(OBJLINK)
  	@if [ -h ${.CURDIR}/obj ]; then rm -f ${.CURDIR}/obj; fi
--- 84,88 ----
  #
  cleanobj:
! 	@if [ -d ${.CURDIR}/obj ]; then rm -rf ${.CURDIR}/obj; fi
  .if defined(OBJLINK)
  	@if [ -h ${.CURDIR}/obj ]; then rm -f ${.CURDIR}/obj; fi



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