Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 28 Mar 2018 19:05:03 +0300
From:      Daniel Braniss <danny@cs.huji.ac.il>
To:        Ian Lepore <ian@freebsd.org>
Cc:        freebsd-hackers@freebsd.org
Subject:   Re: how to add local changes to buildworld?
Message-ID:  <F6C16FA2-8E75-4C57-B764-1E2029ACDBD1@cs.huji.ac.il>
In-Reply-To: <1522247949.49673.54.camel@freebsd.org>
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> <1522247949.49673.54.camel@freebsd.org>

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


> On 28 Mar 2018, at 17:39, Ian Lepore <ian@freebsd.org> wrote:
>=20
> On Wed, 2018-03-28 at 08:50 +0300, Daniel Braniss wrote:
>>=20
>>>=20
>>> On 27 Mar 2018, at 19:47, Ian Lepore <ian@freebsd.org> wrote:
>>>=20
>>> On Tue, 2018-03-27 at 19:20 +0300, Daniel Braniss wrote:
>>>>=20
>>>> 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=E2=80=99m 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
>>>>=20
>>> If you're asking what I think (you want to add code of your own into
>>> the buildworld), just add LOCAL_DIRS=3D"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=3Dprog|lib|subdir|whatever.
>>>=20
>>> 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).
>>>=20
>>> -- Ian
>>>=20
>> I guess in my haste I was not clear enough :-)
>> my problem is the dependency,
>> in particular, it=E2=80=99s 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=E2=80=99m missing :-(=20
>> i=E2=80=99ll try again with LOCAL_DIRS.
>> thanks
>> 	danny
>=20
> 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.
>=20
> -- Ian
> Index: Makefile.inc1
> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
> --- Makefile.inc1	(revision 331499)
> +++ Makefile.inc1	(working copy)
> @@ -241,6 +241,17 @@ X${BINUTIL}?=3D	${${BINUTIL}}
> SUBDIR=3D	${SUBDIR_OVERRIDE}
> .else
> SUBDIR=3D	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=3Dfoo and
> +# LOCAL_LIB_DIRS=3Dfoo/lib to behave as expected.
> +.for _DIR in ${LOCAL_DIRS:M*/} ${LOCAL_DIRS:N*/:S|$|/|}
> +_REDUNDANT_LIB_DIRS+=3D    ${LOCAL_LIB_DIRS:M${_DIR}*}
> +.endfor
> +.for _DIR in ${LOCAL_LIB_DIRS}
> +.if ${_DIR} =3D=3D ".WAIT" || (empty(_REDUNDANT_LIB_DIRS:M${_DIR}) && =
exists(${.CURDIR}/${_DIR}/Makefile))
> +SUBDIR+=3D	${_DIR}
> +.endif
> +.endfor
> .if !defined(NO_ROOT) && (make(installworld) || make(install))
> # Ensure libraries are installed before progressing.
> SUBDIR+=3D.WAIT
> @@ -282,17 +293,6 @@ SUBDIR+=3Dcontrib/ofed
> SUBDIR+=3D	${_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=3Dfoo and
> -# LOCAL_LIB_DIRS=3Dfoo/lib to behave as expected.
> -.for _DIR in ${LOCAL_DIRS:M*/} ${LOCAL_DIRS:N*/:S|$|/|}
> -_REDUNDANT_LIB_DIRS+=3D    ${LOCAL_LIB_DIRS:M${_DIR}*}
> -.endfor
> -.for _DIR in ${LOCAL_LIB_DIRS}
> -.if ${_DIR} =3D=3D ".WAIT" || (empty(_REDUNDANT_LIB_DIRS:M${_DIR}) && =
exists(${.CURDIR}/${_DIR}/Makefile))
> -SUBDIR+=3D	${_DIR}
> -.endif
> -.endfor
>=20
> # 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


i also found LOCAL_LIB_DIRS, and the library was built, but then when I =
tried to use it with
LIBADD +=3D idng
it complained it didn=E2=80=99t know what I was talking, so I had to add =
it to bsd.libnames.mk and bsd.own.mk
which is sort of messy.
BTW, the order of the libs in my case was not important, as long as they =
got compiled before the pam module!

anyways, now I have changed my old method (dates back to 4!) and =
switched to use mercurial + svn, and
hopefully will be able to track my local changes better - though I=E2=80=99=
m still figuring out how to do this :-)

thanks,
	danny




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?F6C16FA2-8E75-4C57-B764-1E2029ACDBD1>