bsd.after-import.mk revision 241146
1210284Sjmallett# $Id: bsd.after-import.mk,v 1.7 2012/07/06 03:03:44 sjg Exp $ 2215990Sjmallett 3215990Sjmallett# This makefile is for use when integrating bmake into a BSD build 4210284Sjmallett# system. Use this makefile after importing bmake. 5210284Sjmallett# It will bootstrap the new version, 6215990Sjmallett# capture the generated files we need, and add an after-import 7215990Sjmallett# target to allow the process to be easily repeated. 8215990Sjmallett 9210284Sjmallett# The goal is to allow the benefits of autoconf without 10215990Sjmallett# the overhead of running configure. 11215990Sjmallett 12210284Sjmallettall: _makefile 13215990Sjmallettall: after-import 14215990Sjmallett 15215990Sjmallett# we rely on bmake 16215990Sjmallett.if !defined(.PARSEDIR) 17215990Sjmallett.error this makefile requires bmake 18215990Sjmallett.endif 19215990Sjmallett 20215990Sjmallett_this := ${MAKEFILE:tA} 21215990SjmallettBMAKE_SRC := ${.PARSEDIR} 22215990Sjmallett 23215990Sjmallett# it helps to know where the top of the tree is. 24215990Sjmallett.if !defined(SRCTOP) 25215990Sjmallettsrctop := ${.MAKE.MAKEFILES:M*src/share/mk/sys.mk:H:H:H} 26215990Sjmallett.if empty(srctop) 27215990Sjmallett# likely locations? 28215990Sjmallett.for d in contrib/bmake external/bsd/bmake/dist 29215990Sjmallett.if ${BMAKE_SRC:M*/$d} != "" 30215990Sjmallettsrctop := ${BMAKE_SRC:tA:S,/$d,,} 31215990Sjmallett.endif 32215990Sjmallett.endfor 33215990Sjmallett.endif 34215990Sjmallett.if !empty(srctop) 35215990SjmallettSRCTOP := ${srctop} 36215990Sjmallett.endif 37215990Sjmallett.endif 38210284Sjmallett 39210284Sjmallett# This lets us match what boot-strap does 40210284Sjmallett.if !defined(HOST_OS) 41215990SjmallettHOST_OS!= uname 42210284Sjmallett.endif 43210284Sjmallett 44210284Sjmallett# .../share/mk will find ${SRCTOP}/share/mk 45210284Sjmallett# if we are within ${SRCTOP} 46210284SjmallettDEFAULT_SYS_PATH= .../share/mk:/usr/share/mk 47210284Sjmallett 48215990SjmallettBOOTSTRAP_ARGS = \ 49210284Sjmallett --with-default-sys-path='${DEFAULT_SYS_PATH}' \ 50210284Sjmallett --prefix /usr \ 51210284Sjmallett --share /usr/share \ 52210284Sjmallett --mksrc none 53210284Sjmallett 54210284Sjmallett# run boot-strap with minimal influence 55210284Sjmallettbootstrap: ${BMAKE_SRC}/boot-strap ${MAKEFILE} 56210284Sjmallett HOME=/ ${BMAKE_SRC}/boot-strap ${BOOTSTRAP_ARGS} ${BOOTSTRAP_XTRAS} 57210284Sjmallett touch ${.TARGET} 58210284Sjmallett 59210284Sjmallett# Makefiles need a little more tweaking than say config.h 60210284SjmallettMAKEFILE_SED = sed -e '/^MACHINE/d' \ 61210284Sjmallett -e '/^PROG/s,bmake,${.CURDIR:T},' \ 62210284Sjmallett -e 's,^.-include,.sinclude,' \ 63210284Sjmallett -e 's,${SRCTOP},$${SRCTOP},g' 64210284Sjmallett 65210284Sjmallett# These are the simple files we want to capture 66210284Sjmallettconfigured_files= config.h unit-tests/Makefile 67210284Sjmallett 68210284Sjmallettafter-import: bootstrap ${MAKEFILE} 69210284Sjmallett.for f in ${configured_files:N*Makefile} 70210284Sjmallett @echo Capturing $f 71210284Sjmallett @mkdir -p ${${.CURDIR}/$f:L:H} 72210284Sjmallett @cmp -s ${.CURDIR}/$f ${HOST_OS}/$f || \ 73210284Sjmallett cp ${HOST_OS}/$f ${.CURDIR}/$f 74210284Sjmallett.endfor 75210284Sjmallett.for f in ${configured_files:M*Makefile} 76210284Sjmallett @echo Capturing $f 77210284Sjmallett @mkdir -p ${${.CURDIR}/$f:L:H} 78210284Sjmallett @(echo '# This is a generated file, do NOT edit!'; \ 79210284Sjmallett echo '# See ${_this:S,${SRCTOP}/,,}'; \ 80210284Sjmallett echo '#'; echo '# $$${OS}$$'; echo; \ 81210284Sjmallett echo 'SRCTOP?= $${.CURDIR:${${.CURDIR}/$f:L:H:S,${SRCTOP}/,,:C,[^/]+,H,g:S,/,:,g}}'; echo; \ 82215990Sjmallett ${MAKEFILE_SED} ${HOST_OS}/$f ) > ${.CURDIR}/$f 83210284Sjmallett.endfor 84215990Sjmallett 85210284Sjmallett# this needs the most work 86210284Sjmallett_makefile: bootstrap ${MAKEFILE} 87210284Sjmallett @echo Generating ${.CURDIR}/Makefile 88210284Sjmallett @(echo '# This is a generated file, do NOT edit!'; \ 89210284Sjmallett echo '# See ${_this:S,${SRCTOP}/,,}'; \ 90210284Sjmallett echo '#'; echo '# $$${OS}$$'; echo; \ 91210284Sjmallett echo 'SRCTOP?= $${.CURDIR:${.CURDIR:S,${SRCTOP}/,,:C,[^/]+,H,g:S,/,:,g}}'; echo; \ 92210284Sjmallett echo; echo '# look here first for config.h'; \ 93210284Sjmallett echo 'CFLAGS+= -I$${.CURDIR}'; echo; \ 94210284Sjmallett ${MAKEFILE_SED} ${HOST_OS}/Makefile; \ 95 echo; echo '# override some simple things'; \ 96 echo 'BINDIR= /usr/bin'; \ 97 echo 'MANDIR= /usr/share/man'; \ 98 echo; echo '# make sure we get this'; \ 99 echo 'CFLAGS+= $${COPTS.$${.IMPSRC:T}}'; \ 100 echo 'CLEANFILES+= bootstrap'; \ 101 echo; echo 'after-import: ${_this:S,${SRCTOP},\${SRCTOP},}'; \ 102 echo ' cd $${.CURDIR} && $${.MAKE} -f ${_this:S,${SRCTOP},\${SRCTOP},}'; \ 103 echo; echo '.sinclude "Makefile.inc"'; \ 104 echo ) > ${.TARGET} 105 @cmp -s ${.TARGET} ${.CURDIR}/Makefile || \ 106 mv ${.TARGET} ${.CURDIR}/Makefile 107 108.include <bsd.obj.mk> 109 110