/share/mk/bsd.prog.mk

https://bitbucket.org/freebsd/freebsd-head/ · Makefile · 232 lines · 182 code · 42 blank · 8 comment · 30 complexity · fee7882cebff6ce8c3c60da7cb660c0f MD5 · raw file

  1. # from: @(#)bsd.prog.mk 5.26 (Berkeley) 6/25/91
  2. # $FreeBSD$
  3. .include <bsd.init.mk>
  4. .SUFFIXES: .out .o .c .cc .cpp .cxx .C .m .y .l .ln .s .S .asm
  5. # XXX The use of COPTS in modern makefiles is discouraged.
  6. .if defined(COPTS)
  7. CFLAGS+=${COPTS}
  8. .endif
  9. .if ${MK_ASSERT_DEBUG} == "no"
  10. CFLAGS+= -DNDEBUG
  11. NO_WERROR=
  12. .endif
  13. .if defined(DEBUG_FLAGS)
  14. CFLAGS+=${DEBUG_FLAGS}
  15. CXXFLAGS+=${DEBUG_FLAGS}
  16. .if ${MK_CTF} != "no" && ${DEBUG_FLAGS:M-g} != ""
  17. CTFFLAGS+= -g
  18. .endif
  19. .endif
  20. .if defined(CRUNCH_CFLAGS)
  21. CFLAGS+=${CRUNCH_CFLAGS}
  22. .endif
  23. .if !defined(DEBUG_FLAGS)
  24. STRIP?= -s
  25. .endif
  26. .if defined(NO_SHARED) && (${NO_SHARED} != "no" && ${NO_SHARED} != "NO")
  27. LDFLAGS+= -static
  28. .endif
  29. .if defined(PROG_CXX)
  30. PROG= ${PROG_CXX}
  31. .endif
  32. .if defined(PROG)
  33. .if defined(SRCS)
  34. OBJS+= ${SRCS:N*.h:R:S/$/.o/g}
  35. .if target(beforelinking)
  36. ${PROG}: ${OBJS} beforelinking
  37. .else
  38. ${PROG}: ${OBJS}
  39. .endif
  40. .if defined(PROG_CXX)
  41. ${CXX} ${CXXFLAGS} ${LDFLAGS} -o ${.TARGET} ${OBJS} ${LDADD}
  42. .else
  43. ${CC} ${CFLAGS} ${LDFLAGS} -o ${.TARGET} ${OBJS} ${LDADD}
  44. .endif
  45. .if ${MK_CTF} != "no"
  46. ${CTFMERGE} ${CTFFLAGS} -o ${.TARGET} ${OBJS}
  47. .endif
  48. .else # !defined(SRCS)
  49. .if !target(${PROG})
  50. .if defined(PROG_CXX)
  51. SRCS= ${PROG}.cc
  52. .else
  53. SRCS= ${PROG}.c
  54. .endif
  55. # Always make an intermediate object file because:
  56. # - it saves time rebuilding when only the library has changed
  57. # - the name of the object gets put into the executable symbol table instead of
  58. # the name of a variable temporary object.
  59. # - it's useful to keep objects around for crunching.
  60. OBJS= ${PROG}.o
  61. .if target(beforelinking)
  62. ${PROG}: ${OBJS} beforelinking
  63. .else
  64. ${PROG}: ${OBJS}
  65. .endif
  66. .if defined(PROG_CXX)
  67. ${CXX} ${CXXFLAGS} ${LDFLAGS} -o ${.TARGET} ${OBJS} ${LDADD}
  68. .else
  69. ${CC} ${CFLAGS} ${LDFLAGS} -o ${.TARGET} ${OBJS} ${LDADD}
  70. .endif
  71. .if ${MK_CTF} != "no"
  72. ${CTFMERGE} ${CTFFLAGS} -o ${.TARGET} ${OBJS}
  73. .endif
  74. .endif
  75. .endif
  76. .if ${MK_MAN} != "no" && !defined(MAN) && \
  77. !defined(MAN1) && !defined(MAN2) && !defined(MAN3) && \
  78. !defined(MAN4) && !defined(MAN5) && !defined(MAN6) && \
  79. !defined(MAN7) && !defined(MAN8) && !defined(MAN9) && \
  80. !defined(MAN1aout)
  81. MAN= ${PROG}.1
  82. MAN1= ${MAN}
  83. .endif
  84. .endif
  85. all: objwarn ${PROG} ${SCRIPTS}
  86. .if ${MK_MAN} != "no"
  87. all: _manpages
  88. .endif
  89. .if defined(PROG)
  90. CLEANFILES+= ${PROG}
  91. .endif
  92. .if defined(OBJS)
  93. CLEANFILES+= ${OBJS}
  94. .endif
  95. .include <bsd.libnames.mk>
  96. .if defined(PROG)
  97. _EXTRADEPEND:
  98. .if defined(LDFLAGS) && !empty(LDFLAGS:M-nostdlib)
  99. .if defined(DPADD) && !empty(DPADD)
  100. echo ${PROG}: ${DPADD} >> ${DEPENDFILE}
  101. .endif
  102. .else
  103. echo ${PROG}: ${LIBC} ${DPADD} >> ${DEPENDFILE}
  104. .if defined(PROG_CXX)
  105. .if !empty(CXXFLAGS:M-stdlib=libc++)
  106. echo ${PROG}: ${LIBCPLUSPLUS} >> ${DEPENDFILE}
  107. .else
  108. echo ${PROG}: ${LIBSTDCPLUSPLUS} >> ${DEPENDFILE}
  109. .endif
  110. .endif
  111. .endif
  112. .endif
  113. .if !target(install)
  114. .if defined(PRECIOUSPROG)
  115. .if !defined(NO_FSCHG)
  116. INSTALLFLAGS+= -fschg
  117. .endif
  118. INSTALLFLAGS+= -S
  119. .endif
  120. _INSTALLFLAGS:= ${INSTALLFLAGS}
  121. .for ie in ${INSTALLFLAGS_EDIT}
  122. _INSTALLFLAGS:= ${_INSTALLFLAGS${ie}}
  123. .endfor
  124. .if !target(realinstall) && !defined(INTERNALPROG)
  125. realinstall: _proginstall
  126. .ORDER: beforeinstall _proginstall
  127. _proginstall:
  128. .if defined(PROG)
  129. .if defined(PROGNAME)
  130. ${INSTALL} ${STRIP} -o ${BINOWN} -g ${BINGRP} -m ${BINMODE} \
  131. ${_INSTALLFLAGS} ${PROG} ${DESTDIR}${BINDIR}/${PROGNAME}
  132. .else
  133. ${INSTALL} ${STRIP} -o ${BINOWN} -g ${BINGRP} -m ${BINMODE} \
  134. ${_INSTALLFLAGS} ${PROG} ${DESTDIR}${BINDIR}
  135. .endif
  136. .endif
  137. .endif # !target(realinstall)
  138. .if defined(SCRIPTS) && !empty(SCRIPTS)
  139. realinstall: _scriptsinstall
  140. .ORDER: beforeinstall _scriptsinstall
  141. SCRIPTSDIR?= ${BINDIR}
  142. SCRIPTSOWN?= ${BINOWN}
  143. SCRIPTSGRP?= ${BINGRP}
  144. SCRIPTSMODE?= ${BINMODE}
  145. .for script in ${SCRIPTS}
  146. .if defined(SCRIPTSNAME)
  147. SCRIPTSNAME_${script:T}?= ${SCRIPTSNAME}
  148. .else
  149. SCRIPTSNAME_${script:T}?= ${script:T:R}
  150. .endif
  151. SCRIPTSDIR_${script:T}?= ${SCRIPTSDIR}
  152. SCRIPTSOWN_${script:T}?= ${SCRIPTSOWN}
  153. SCRIPTSGRP_${script:T}?= ${SCRIPTSGRP}
  154. SCRIPTSMODE_${script:T}?= ${SCRIPTSMODE}
  155. _scriptsinstall: _SCRIPTSINS_${script:T}
  156. _SCRIPTSINS_${script:T}: ${script}
  157. ${INSTALL} -o ${SCRIPTSOWN_${.ALLSRC:T}} \
  158. -g ${SCRIPTSGRP_${.ALLSRC:T}} -m ${SCRIPTSMODE_${.ALLSRC:T}} \
  159. ${.ALLSRC} \
  160. ${DESTDIR}${SCRIPTSDIR_${.ALLSRC:T}}/${SCRIPTSNAME_${.ALLSRC:T}}
  161. .endfor
  162. .endif
  163. NLSNAME?= ${PROG}
  164. .include <bsd.nls.mk>
  165. .include <bsd.files.mk>
  166. .include <bsd.incs.mk>
  167. .include <bsd.links.mk>
  168. .if ${MK_MAN} != "no"
  169. realinstall: _maninstall
  170. .ORDER: beforeinstall _maninstall
  171. .endif
  172. .endif
  173. .if !target(lint)
  174. lint: ${SRCS:M*.c}
  175. .if defined(PROG)
  176. ${LINT} ${LINTFLAGS} ${CFLAGS:M-[DIU]*} ${.ALLSRC}
  177. .endif
  178. .endif
  179. .if ${MK_MAN} != "no"
  180. .include <bsd.man.mk>
  181. .endif
  182. .include <bsd.dep.mk>
  183. .if defined(PROG) && !exists(${.OBJDIR}/${DEPENDFILE})
  184. ${OBJS}: ${SRCS:M*.h}
  185. .endif
  186. .include <bsd.obj.mk>
  187. .include <bsd.sys.mk>
  188. .if defined(PORTNAME)
  189. .include <bsd.pkg.mk>
  190. .endif