Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 28 Mar 2018 08:39:09 -0600
From:      Ian Lepore <ian@freebsd.org>
To:        Daniel Braniss <danny@cs.huji.ac.il>
Cc:        freebsd-hackers@freebsd.org
Subject:   Re: how to add local changes to buildworld?
Message-ID:  <1522247949.49673.54.camel@freebsd.org>
In-Reply-To: <539E3F8D-8275-4904-8D19-8FB31C05787C@cs.huji.ac.il>
References:  <D8B09664-B9FF-4539-8D43-99E215D46E3D@cs.huji.ac.il> <1522169225.49673.36.camel@freebsd.org> <539E3F8D-8275-4904-8D19-8FB31C05787C@cs.huji.ac.il>

next in thread | previous in thread | raw e-mail | index | archive | help

--=-HE4N3m0OyjMXI39S+Zrl
Content-Type: text/plain; charset="iso-8859-7"
Content-Transfer-Encoding: 8bit

On Wed, 2018-03-28 at 08:50 +0300, Daniel Braniss wrote:
> 
> > 
> > On 27 Mar 2018, at 19:47, Ian Lepore <ian@freebsd.org> wrote:
> > 
> > On Tue, 2018-03-27 at 19:20 +0300, Daniel Braniss wrote:
> > > 
> > > Hi,
> > > I have some local additions which int the past, after making changes
> > > to some Makefiles, etc, I got them compiled
> > > but somehow, things stopped working after 11, so I¢m now trying to do
> > > a fresh set of patches,
> > > and was wondering if there is some docs around on how to to this
> > > cleanly? trying to figure out the *.mk is becoming a bit complicated.
> > > thanks,
> > > 	danny
> > > 
> > If you're asking what I think (you want to add code of your own into
> > the buildworld), just add LOCAL_DIRS="path/to/dir1 path/to/dir2" to the
> > buildworld command line and it will visit your directories and run the
> > same targets there as for standard freebsd dirs (so your makefiles have
> > to have those targets, mostly easily accomplished by including the
> > usual bsd..mk where foo=prog|lib|subdir|whatever.
> > 
> > The local dir paths in LOCAL_DIRS must be relative to the top-level
> > freebsd source dir, you can't use absolute paths (but you can use
> > relative paths that take you outside the freebsd path, I think, like
> > ../mysources/project1).
> > 
> > -- Ian
> > 
> I guess in my haste I was not clear enough :-)
> my problem is the dependency,
> in particular, it¢s a pam module, that needs a local library. in the past the library was compiled first, and then the module,
> now it still happens, but the module does not find the library, which has been compiled! there is a new piece of mail that
> i¢m missing :-( 
> i¢ll try again with LOCAL_DIRS.
> thanks
> 	danny

Oh yeah, libraries... there is also a LOCAL_LIB_DIRS you can set to
list libraries.  But looking at Makefile.inc1 it builds the local lib
dirs after the other local dirs, which seems completely wrong and
useless.  I think the LOCAL_LIB_DIRS should be built along with the
base system dirs; the attached patch would do that.

-- Ian

--=-HE4N3m0OyjMXI39S+Zrl
Content-Disposition: inline; filename="Makefile.inc1.locallibs_first.diff"
Content-Type: text/x-patch; name="Makefile.inc1.locallibs_first.diff"; charset="ASCII"
Content-Transfer-Encoding: 7bit

Index: Makefile.inc1
===================================================================
--- Makefile.inc1	(revision 331499)
+++ Makefile.inc1	(working copy)
@@ -241,6 +241,17 @@ X${BINUTIL}?=	${${BINUTIL}}
 SUBDIR=	${SUBDIR_OVERRIDE}
 .else
 SUBDIR=	lib libexec
+# Add LOCAL_LIB_DIRS, but only if they will not be picked up as a SUBDIR
+# of a LOCAL_DIRS directory.  This allows LOCAL_DIRS=foo and
+# LOCAL_LIB_DIRS=foo/lib to behave as expected.
+.for _DIR in ${LOCAL_DIRS:M*/} ${LOCAL_DIRS:N*/:S|$|/|}
+_REDUNDANT_LIB_DIRS+=    ${LOCAL_LIB_DIRS:M${_DIR}*}
+.endfor
+.for _DIR in ${LOCAL_LIB_DIRS}
+.if ${_DIR} == ".WAIT" || (empty(_REDUNDANT_LIB_DIRS:M${_DIR}) && exists(${.CURDIR}/${_DIR}/Makefile))
+SUBDIR+=	${_DIR}
+.endif
+.endfor
 .if !defined(NO_ROOT) && (make(installworld) || make(install))
 # Ensure libraries are installed before progressing.
 SUBDIR+=.WAIT
@@ -282,17 +293,6 @@ SUBDIR+=contrib/ofed
 SUBDIR+=	${_DIR}
 .endif
 .endfor
-# Add LOCAL_LIB_DIRS, but only if they will not be picked up as a SUBDIR
-# of a LOCAL_DIRS directory.  This allows LOCAL_DIRS=foo and
-# LOCAL_LIB_DIRS=foo/lib to behave as expected.
-.for _DIR in ${LOCAL_DIRS:M*/} ${LOCAL_DIRS:N*/:S|$|/|}
-_REDUNDANT_LIB_DIRS+=    ${LOCAL_LIB_DIRS:M${_DIR}*}
-.endfor
-.for _DIR in ${LOCAL_LIB_DIRS}
-.if ${_DIR} == ".WAIT" || (empty(_REDUNDANT_LIB_DIRS:M${_DIR}) && exists(${.CURDIR}/${_DIR}/Makefile))
-SUBDIR+=	${_DIR}
-.endif
-.endfor
 
 # We must do etc/ last as it hooks into building the man whatis file
 # by calling 'makedb' in share/man.  This is only relevant for

--=-HE4N3m0OyjMXI39S+Zrl--




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