ports makefile stuff (bsd.lib.mk)

Jim Stapleton stapleton.41 at gmail.com
Wed Feb 6 20:20:58 UTC 2008


I made a patch to bsd.lib.mk if anyone is interested. It adds a
"BUILDTO_DIR" variable, which sets a directory for the final .a and
.so files to be built to.

Is there any chance of this being integrated into the FreeBSD make system?

(created by "diff -C 5 /usr/share/mk/bsd.lib.mk bsd.lib.mk >
bsd.lib.mk_patch", on a FreeBSD 6.2 system)

=====PATCH START=====
*** /usr/share/mk/bsd.lib.mk	Mon Apr  9 17:30:40 2007
--- bsd.lib.mk	Wed Feb  6 15:03:58 2008
***************
*** 6,15 ****
--- 6,16 ----

  # Set up the variables controlling shared libraries.  After this section,
  # SHLIB_NAME will be defined only if we are to create a shared library.
  # SHLIB_LINK will be defined only if we are to create a link to it.
  # INSTALL_PIC_ARCHIVE will be defined only if we are to create a PIC archive.
+ # BUILDTO_DIR may be defined to change the directory where the
"final" objects are built to and stored
  .if defined(NO_PIC)
  .undef SHLIB_NAME
  .undef INSTALL_PIC_ARCHIVE
  .else
  .if !defined(SHLIB) && defined(LIB)
***************
*** 41,50 ****
--- 42,55 ----
  # prefer .s to a .c, add .po, remove stuff not used in the BSD libraries
  # .So used for PIC object files
  .SUFFIXES:
  .SUFFIXES: .out .o .po .So .S .asm .s .c .cc .cpp .cxx .m .C .f .y .l .ln

+ .if defined(BUILDTO_DIR)
+ .PATH: $(BUILTDO_DIR)
+ .endif
+
  .if !defined(PICFLAG)
  .if ${MACHINE_ARCH} == "sparc64"
  PICFLAG=-fPIC
  .else
  PICFLAG=-fpic
***************
*** 106,131 ****
  .if defined(LIB) && !empty(LIB)
  _LIBS=		lib${LIB}.a

  lib${LIB}.a: ${OBJS} ${STATICOBJS}
  	@${ECHO} building static ${LIB} library
! 	@rm -f ${.TARGET}
! 	@${AR} cq ${.TARGET} `lorder ${OBJS} ${STATICOBJS} | tsort -q` ${ARADD}
! 	${RANLIB} ${.TARGET}
  .endif

  .if !defined(INTERNALLIB)

  .if !defined(NO_PROFILE) && defined(LIB) && !empty(LIB)
  _LIBS+=		lib${LIB}_p.a
  POBJS+=		${OBJS:.o=.po} ${STATICOBJS:.o=.po}

  lib${LIB}_p.a: ${POBJS}
  	@${ECHO} building profiled ${LIB} library
! 	@rm -f ${.TARGET}
! 	@${AR} cq ${.TARGET} `lorder ${POBJS} | tsort -q` ${ARADD}
! 	${RANLIB} ${.TARGET}
  .endif

  .if defined(SHLIB_NAME) || \
      defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB)
  SOBJS+=		${OBJS:.o=.So}
--- 111,136 ----
  .if defined(LIB) && !empty(LIB)
  _LIBS=		lib${LIB}.a

  lib${LIB}.a: ${OBJS} ${STATICOBJS}
  	@${ECHO} building static ${LIB} library
! 	@rm -f ${BUILDTO_DIR}/${.TARGET} 2>&1 2>> /dev/null || $(TRUE)
! 	@${AR} cq ${BUILDTO_DIR}/${.TARGET} `lorder ${OBJS} ${STATICOBJS} |
tsort -q` ${ARADD}
! 	${RANLIB} ${BUILDTO_DIR}/${.TARGET}
  .endif

  .if !defined(INTERNALLIB)

  .if !defined(NO_PROFILE) && defined(LIB) && !empty(LIB)
  _LIBS+=		lib${LIB}_p.a
  POBJS+=		${OBJS:.o=.po} ${STATICOBJS:.o=.po}

  lib${LIB}_p.a: ${POBJS}
  	@${ECHO} building profiled ${LIB} library
! 	@rm -f ${BUILDTO_DIR}/${.TARGET} 2>&1 2>> /dev/null || $(TRUE)
! 	@${AR} cq ${BUILDTO_DIR}/${.TARGET} `lorder ${POBJS} | tsort -q` ${ARADD}
! 	${RANLIB} ${BUILDTO_DIR}/${.TARGET}
  .endif

  .if defined(SHLIB_NAME) || \
      defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB)
  SOBJS+=		${OBJS:.o=.So}
***************
*** 134,160 ****
  .if defined(SHLIB_NAME)
  _LIBS+=		${SHLIB_NAME}

  ${SHLIB_NAME}: ${SOBJS}
  	@${ECHO} building shared library ${SHLIB_NAME}
! 	@rm -f ${.TARGET} ${SHLIB_LINK}
  .if defined(SHLIB_LINK)
! 	@ln -fs ${.TARGET} ${SHLIB_LINK}
  .endif
  	@${CC} ${LDFLAGS} -shared -Wl,-x \
! 	    -o ${.TARGET} -Wl,-soname,${SONAME} \
  	    `lorder ${SOBJS} | tsort -q` ${LDADD}
  .endif

  .if defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB)
  _LIBS+=		lib${LIB}_pic.a

  lib${LIB}_pic.a: ${SOBJS}
  	@${ECHO} building special pic ${LIB} library
! 	@rm -f ${.TARGET}
! 	@${AR} cq ${.TARGET} ${SOBJS} ${ARADD}
! 	${RANLIB} ${.TARGET}
  .endif

  .if defined(WANT_LINT) && !defined(NO_LINT) && defined(LIB) && !empty(LIB)
  LINTLIB=	llib-l${LIB}.ln
  _LIBS+=		${LINTLIB}
--- 139,165 ----
  .if defined(SHLIB_NAME)
  _LIBS+=		${SHLIB_NAME}

  ${SHLIB_NAME}: ${SOBJS}
  	@${ECHO} building shared library ${SHLIB_NAME}
! 	@rm -f ${BUILDTO_DIR}/${.TARGET} ${BUILDTO_DIR}/${SHLIB_LINK} 2>&1
2>> /dev/null || $(TRUE)
  .if defined(SHLIB_LINK)
! 	@ln -fs ${BUILDTO_DIR}/${.TARGET} ${BUILDTO_DIR}/${SHLIB_LINK}
  .endif
  	@${CC} ${LDFLAGS} -shared -Wl,-x \
! 	    -o ${BUILDTO_DIR}/${.TARGET} -Wl,-soname,${SONAME} \
  	    `lorder ${SOBJS} | tsort -q` ${LDADD}
  .endif

  .if defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB)
  _LIBS+=		lib${LIB}_pic.a

  lib${LIB}_pic.a: ${SOBJS}
  	@${ECHO} building special pic ${LIB} library
! 	@rm -f ${BUILDTO_DIR}/${.TARGET} 2>&1 2>> /dev/null || $(TRUE)
! 	@${AR} cq ${BUILDTO_DIR}/${.TARGET} ${SOBJS} ${ARADD}
! 	${RANLIB} ${BUILDTO_DIR}/${.TARGET}
  .endif

  .if defined(WANT_LINT) && !defined(NO_LINT) && defined(LIB) && !empty(LIB)
  LINTLIB=	llib-l${LIB}.ln
  _LIBS+=		${LINTLIB}
***************
*** 207,226 ****
  realinstall: _libinstall
  .ORDER: beforeinstall _libinstall
  _libinstall:
  .if defined(LIB) && !empty(LIB) && !defined(NO_INSTALLLIB)
  	${INSTALL} -C -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
! 	    ${_INSTALLFLAGS} lib${LIB}.a ${DESTDIR}${LIBDIR}
  .endif
  .if !defined(NO_PROFILE) && defined(LIB) && !empty(LIB)
  	${INSTALL} -C -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
! 	    ${_INSTALLFLAGS} lib${LIB}_p.a ${DESTDIR}${LIBDIR}
  .endif
  .if defined(SHLIB_NAME)
  	${INSTALL} ${STRIP} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
  	    ${_INSTALLFLAGS} ${_SHLINSTALLFLAGS} \
! 	    ${SHLIB_NAME} ${DESTDIR}${SHLIBDIR}
  .if defined(SHLIB_LINK)
  .if ${SHLIBDIR} == ${LIBDIR}
  	ln -fs ${SHLIB_NAME} ${DESTDIR}${LIBDIR}/${SHLIB_LINK}
  .else
  	ln -fs ${_SHLIBDIRPREFIX}${SHLIBDIR}/${SHLIB_NAME} \
--- 212,231 ----
  realinstall: _libinstall
  .ORDER: beforeinstall _libinstall
  _libinstall:
  .if defined(LIB) && !empty(LIB) && !defined(NO_INSTALLLIB)
  	${INSTALL} -C -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
! 	    ${_INSTALLFLAGS} ${BUILDTO_DIR}/lib${LIB}.a ${DESTDIR}${LIBDIR}
  .endif
  .if !defined(NO_PROFILE) && defined(LIB) && !empty(LIB)
  	${INSTALL} -C -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
! 	    ${_INSTALLFLAGS} ${BUILDTO_DIR}/lib${LIB}_p.a ${DESTDIR}${LIBDIR}
  .endif
  .if defined(SHLIB_NAME)
  	${INSTALL} ${STRIP} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
  	    ${_INSTALLFLAGS} ${_SHLINSTALLFLAGS} \
! 	    ${BUILDTO_DIR}/${SHLIB_NAME} ${DESTDIR}${SHLIBDIR}
  .if defined(SHLIB_LINK)
  .if ${SHLIBDIR} == ${LIBDIR}
  	ln -fs ${SHLIB_NAME} ${DESTDIR}${LIBDIR}/${SHLIB_LINK}
  .else
  	ln -fs ${_SHLIBDIRPREFIX}${SHLIBDIR}/${SHLIB_NAME} \
***************
*** 232,242 ****
  .endif
  .endif
  .endif
  .if defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB)
  	${INSTALL} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
! 	    ${_INSTALLFLAGS} lib${LIB}_pic.a ${DESTDIR}${LIBDIR}
  .endif
  .if defined(WANT_LINT) && !defined(NO_LINT) && defined(LIB) && !empty(LIB)
  	${INSTALL} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
  	    ${_INSTALLFLAGS} ${LINTLIB} ${DESTDIR}${LINTLIBDIR}
  .endif
--- 237,247 ----
  .endif
  .endif
  .endif
  .if defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB)
  	${INSTALL} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
! 	    ${_INSTALLFLAGS} ${BUILDTO_DIR}/lib${LIB}_pic.a ${DESTDIR}${LIBDIR}
  .endif
  .if defined(WANT_LINT) && !defined(NO_LINT) && defined(LIB) && !empty(LIB)
  	${INSTALL} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
  	    ${_INSTALLFLAGS} ${LINTLIB} ${DESTDIR}${LINTLIBDIR}
  .endif
=====PATCH END=====

Thanks,
-Jim Stapleton


More information about the freebsd-questions mailing list