From c2d20bedad498d2bf5cda3907503947cbece550a Mon Sep 17 00:00:00 2001 From: jlam Date: Thu, 5 Feb 2004 03:35:20 +0000 Subject: Allow bsd.compiler.mk to be included by both bsd.prefs.mk and bsd.pkg.mk. Any additions to DEPENDS/BUILD_DEPENDS or inclusions of buildlink[23].mk files are deferred till bsd.compiler.mk is included by bsd.pkg.mk. We allow bsd.compiler.mk to be included by bsd.prefs.mk solely for the purpose of setting CC_VERSION properly for use by package Makefiles. There is the surprising behaviour that CC_VERSION won't necessarily have the correct value at all times until after "make extract" has been completed (dependencies are installed before "make extract"), so package Makefile writers should keep that in mind. Just to note that this is _existing_ behaviour that's preserved by these changes. --- mk/compiler/gcc.mk | 252 ++++++++++++++++++++++++++++------------------------- 1 file changed, 133 insertions(+), 119 deletions(-) (limited to 'mk/compiler/gcc.mk') diff --git a/mk/compiler/gcc.mk b/mk/compiler/gcc.mk index 78c58023755..aa1bd5aebd1 100644 --- a/mk/compiler/gcc.mk +++ b/mk/compiler/gcc.mk @@ -1,7 +1,7 @@ -# $NetBSD: gcc.mk,v 1.35 2004/02/05 01:57:38 jlam Exp $ +# $NetBSD: gcc.mk,v 1.36 2004/02/05 03:35:20 jlam Exp $ .if !defined(COMPILER_GCC_MK) -COMPILER_GCC_MK= defined +COMPILER_GCC_MK= one GCC_REQD?= 2.8.0 @@ -19,157 +19,157 @@ _GCC3_PATTERNS= 2.95.[4-9]* 2.95.[1-9][0-9]* 2.9[6-9] 2.9[6-9].* \ 2.[1-9][0-9][0-9]* 3.* [4-9]* _CC:= ${CC:C/^/_asdf_/1:M_asdf_*:S/^_asdf_//} -.for _dir_ in ${PATH:C/\:/ /g} -. if empty(_CC:M/*) -. if exists(${_dir_}/${CC:C/^/_asdf_/1:M_asdf_*:S/^_asdf_//}) +. for _dir_ in ${PATH:C/\:/ /g} +. if empty(_CC:M/*) +. if exists(${_dir_}/${CC:C/^/_asdf_/1:M_asdf_*:S/^_asdf_//}) _CC:= ${_dir_}/${CC:C/^/_asdf_/1:M_asdf_*:S/^_asdf_//} +. endif . endif -. endif -.endfor +. endfor -.if !defined(_GCC_VERSION) +. if !defined(_GCC_VERSION) _GCC_VERSION_STRING!= \ ( ${_CC} -v 2>&1 | ${GREP} 'gcc version' ) 2>/dev/null || ${ECHO} 0 -. if !empty(_GCC_VERSION_STRING:Megcs*) +. if !empty(_GCC_VERSION_STRING:Megcs*) _GCC_VERSION= 2.8.1 # egcs is considered to be gcc-2.8.1. -. elif !empty(_GCC_VERSION_STRING:Mgcc*) +. elif !empty(_GCC_VERSION_STRING:Mgcc*) _GCC_VERSION!= ${_CC} -dumpversion -. else +. else _GCC_VERSION= 0 +. endif . endif -.endif _GCC_PKG= gcc-${_GCC_VERSION} -.if !empty(_CC:M${LOCALBASE}/*) +. if !empty(_CC:M${LOCALBASE}/*) _IS_BUILTIN_GCC= NO GCC_REQD+= ${_GCC_VERSION} -.else -. if !empty(_CC:M/*) +. else +. if !empty(_CC:M/*) # # GCC in older versions of Darwin report "Apple Computer ... based on gcc # version ...", so we can't just grep for "^gcc". # -. if ${_GCC_VERSION} != "0" +. if ${_GCC_VERSION} != "0" _IS_BUILTIN_GCC= YES +. else +_IS_BUILTIN_GCC= NO +. endif . else _IS_BUILTIN_GCC= NO . endif -. else -_IS_BUILTIN_GCC= NO . endif -.endif # Distill the GCC_REQD list into a single _GCC_REQD value that is the # highest version of GCC required. # _GCC_STRICTEST_REQD?= none -.for _version_ in ${GCC_REQD} -. for _pkg_ in gcc-${_version_} -. if ${_GCC_STRICTEST_REQD} == "none" +. for _version_ in ${GCC_REQD} +. for _pkg_ in gcc-${_version_} +. if ${_GCC_STRICTEST_REQD} == "none" _GCC_PKG_SATISFIES_DEP= YES -. for _vers_ in ${GCC_REQD} -. if !empty(_GCC_PKG_SATISFIES_DEP:M[yY][eE][sS]) +. for _vers_ in ${GCC_REQD} +. if !empty(_GCC_PKG_SATISFIES_DEP:M[yY][eE][sS]) _GCC_PKG_SATISFIES_DEP!= \ if ${PKG_ADMIN} pmatch 'gcc>=${_vers_}' ${_pkg_}; then \ ${ECHO} "YES"; \ else \ ${ECHO} "NO"; \ fi -. endif -. endfor -. if !empty(_GCC_PKG_SATISFIES_DEP:M[yY][eE][sS]) +. endif +. endfor +. if !empty(_GCC_PKG_SATISFIES_DEP:M[yY][eE][sS]) _GCC_STRICTEST_REQD= ${_version_} +. endif . endif -. endif +. endfor . endfor -.endfor _GCC_REQD= ${_GCC_STRICTEST_REQD} # Determine whether we require GCC-2.x or GCC-3.x by examining _GCC_REQD. _NEED_GCC2?= no -.for _pattern_ in ${_GCC2_PATTERNS} -. if !empty(_GCC_REQD:M${_pattern_}) +. for _pattern_ in ${_GCC2_PATTERNS} +. if !empty(_GCC_REQD:M${_pattern_}) _NEED_GCC2= yes -. endif -.endfor +. endif +. endfor _NEED_GCC3?= no -.for _pattern_ in ${_GCC3_PATTERNS} -. if !empty(_GCC_REQD:M${_pattern_}) +. for _pattern_ in ${_GCC3_PATTERNS} +. if !empty(_GCC_REQD:M${_pattern_}) _NEED_GCC3= yes -. endif -.endfor +. endif +. endfor -.if !empty(_NEED_GCC2:M[yY][eE][sS]) +. if !empty(_NEED_GCC2:M[yY][eE][sS]) # # We require gcc-2.x in the lang/gcc directory. # _GCC_PKGBASE= gcc LANGUAGES.gcc= c c++ fortran objc _LANGUAGES.gcc= # empty -. for _lang_ in ${USE_LANGUAGES} +. for _lang_ in ${USE_LANGUAGES} _LANGUAGES.gcc+= ${LANGUAGES.gcc:M${_lang_}} -. endfor -. if !empty(PKGPATH:Mlang/gcc) +. endfor +. if !empty(PKGPATH:Mlang/gcc) _IGNORE_GCC= yes MAKEFLAGS+= _IGNORE_GCC=yes -. endif -. if !defined(_IGNORE_GCC) && !empty(_LANGUAGES.gcc) +. endif +. if !defined(_IGNORE_GCC) && !empty(_LANGUAGES.gcc) _GCC_PKGSRCDIR= ../../lang/gcc _GCC_DEPENDENCY= gcc>=${_GCC_REQD}:../../lang/gcc -. if !empty(_LANGUAGES.gcc:Mc++) +. if !empty(_LANGUAGES.gcc:Mc++) USE_GCC_SHLIB?= yes +. endif . endif -. endif -.elif !empty(_NEED_GCC3:M[yY][eE][sS]) +. elif !empty(_NEED_GCC3:M[yY][eE][sS]) # # We require gcc-3.x in the lang/gcc3-* directories. # _GCC_PKGBASE= gcc3-c LANGUAGES.gcc= c c++ fortran java objc _LANGUAGES.gcc= # empty -. for _lang_ in ${USE_LANGUAGES} +. for _lang_ in ${USE_LANGUAGES} _LANGUAGES.gcc+= ${LANGUAGES.gcc:M${_lang_}} -. endfor -. if !empty(PKGPATH:Mlang/gcc3-c) +. endfor +. if !empty(PKGPATH:Mlang/gcc3-c) _IGNORE_GCC= yes MAKEFLAGS+= _IGNORE_GCC=yes -. endif -. if !defined(_IGNORE_GCC) && !empty(_LANGUAGES.gcc:Mc) +. endif +. if !defined(_IGNORE_GCC) && !empty(_LANGUAGES.gcc:Mc) _GCC_PKGSRCDIR= ../../lang/gcc3-c _GCC_DEPENDENCY= gcc3-c>=${_GCC_REQD}:../../lang/gcc3-c +. endif . endif -.endif _GCC_DEPENDS= ${_GCC_PKGBASE}>=${_GCC_REQD} -.if defined(_NEED_GCC3) -. if !empty(PKGPATH:Mlang/gcc3-c++) +. if defined(_NEED_GCC3) +. if !empty(PKGPATH:Mlang/gcc3-c++) _IGNORE_GCC3CXX= yes MAKEFLAGS+= _IGNORE_GCC3CXX=yes -. endif -. if !defined(_IGNORE_GCC3CXX) && !empty(_LANGUAGES.gcc:Mc++) +. endif +. if !defined(_IGNORE_GCC3CXX) && !empty(_LANGUAGES.gcc:Mc++) _GCC_PKGSRCDIR+= ../../lang/gcc3-c++ _GCC_DEPENDENCY+= gcc3-c++>=${_GCC_REQD}:../../lang/gcc3-c++ USE_GCC_SHLIB?= yes -. endif -. if !empty(PKGPATH:Mlang/gcc3-f77) +. endif +. if !empty(PKGPATH:Mlang/gcc3-f77) _IGNORE_GCC3F77= yes MAKEFLAGS+= _IGNORE_GCC3F77=yes -. endif -. if !defined(_IGNORE_GCC3F77) && !empty(_LANGUAGES.gcc:Mfortran) +. endif +. if !defined(_IGNORE_GCC3F77) && !empty(_LANGUAGES.gcc:Mfortran) _GCC_PKGSRCDIR+= ../../lang/gcc3-f77 _GCC_DEPENDENCY+= gcc3-f77>=${_GCC_REQD}:../../lang/gcc3-f77 USE_GCC_SHLIB?= yes +. endif . endif -.endif -.if defined(_IGNORE_GCC) +. if defined(_IGNORE_GCC) _USE_PKGSRC_GCC= NO -.endif +. endif -.if !defined(_USE_PKGSRC_GCC) -. if !empty(_IS_BUILTIN_GCC:M[nN][oO]) +. if !defined(_USE_PKGSRC_GCC) +. if !empty(_IS_BUILTIN_GCC:M[nN][oO]) _USE_PKGSRC_GCC= YES -. else +. else _GCC_TEST_DEPENDS= gcc>=${_GCC_REQD} _USE_PKGSRC_GCC!= \ if ${PKG_ADMIN} pmatch '${_GCC_TEST_DEPENDS}' ${_GCC_PKG}; then \ @@ -177,13 +177,13 @@ _USE_PKGSRC_GCC!= \ else \ ${ECHO} "YES"; \ fi +. endif . endif -.endif # Check if any of the versions of GCC in pkgsrc can satisfy the _GCC_REQD # requirement. # -.if !defined(_NEED_NEWER_GCC) +. if !defined(_NEED_NEWER_GCC) _PKGSRC_GCC_VERSION= ${_GCC_PKGBASE}-${_GCC_DIST_VERSION} _NEED_NEWER_GCC!= \ if ${PKG_ADMIN} pmatch '${_GCC_DEPENDS}' ${_PKGSRC_GCC_VERSION}; then \ @@ -192,13 +192,13 @@ _NEED_NEWER_GCC!= \ ${ECHO} "YES"; \ fi MAKEFLAGS+= _NEED_NEWER_GCC="${_NEED_NEWER_GCC}" -.endif -.if !empty(_USE_PKGSRC_GCC:M[yY][eE][sS]) && \ +. endif +. if !empty(_USE_PKGSRC_GCC:M[yY][eE][sS]) && \ !empty(_NEED_NEWER_GCC:M[yY][eE][sS]) PKG_SKIP_REASON= "Unable to satisfy dependency: ${_GCC_DEPENDS}" -.endif +. endif -.if !empty(_USE_PKGSRC_GCC:M[yY][eE][sS]) +. if !empty(_USE_PKGSRC_GCC:M[yY][eE][sS]) # # Ensure that the correct rpath is passed to the linker if we need to # link against gcc shared libs. @@ -229,83 +229,97 @@ _GCC_ARCHDIR!= \ else \ ${ECHO} "_GCC_ARCHDIR_not_found"; \ fi -. if empty(_GCC_ARCHDIR:M*not_found*) +. if empty(_GCC_ARCHDIR:M*not_found*) _GCC_PREFIX:= ${_GCC_ARCHDIR:H:H:H:H}/ _GCC_SUBPREFIX:= ${_GCC_ARCHDIR:H:H:H:H:T}/ -. endif +. endif _GCC_LIBDIRS= ${_GCC_ARCHDIR} ${_GCC_PREFIX}lib _GCC_LDFLAGS= # empty -. for _dir_ in ${_GCC_LIBDIRS:N*not_found*} +. for _dir_ in ${_GCC_LIBDIRS:N*not_found*} _GCC_LDFLAGS+= -L${_dir_} ${_COMPILER_LD_FLAG}${RPATH_FLAG}${_dir_} -. endfor -LDFLAGS+= ${_GCC_LDFLAGS} - -# Add the dependency on GCC. -. if empty(USE_BUILDLINK2:M[nN][oO]) -. for _dir_ in ${_GCC_PKGSRCDIR} -. include "${_dir_}/buildlink2.mk" -. endfor -. elif !empty(USE_BUILDLINK3:M[yY][eE][sS]) -. for _dir_ in ${_GCC_PKGSRCDIR} -. include "${_dir_}/buildlink3.mk" . endfor -. else -. if defined(USE_GCC_SHLIB) -DEPENDS+= ${_GCC_DEPENDENCY} -. else -BUILD_DEPENDS+= ${_GCC_DEPENDENCY} -. endif +LDFLAGS+= ${_GCC_LDFLAGS} . endif -.endif # Point the variables that specify the compiler to the installed # GCC executables. # -.if !empty(_USE_PKGSRC_GCC:M[yY][eE][sS]) -. if exists(${_GCC_PREFIX}bin/gcc) && !empty(_LANGUAGES.gcc) -PATH:= ${_GCC_PREFIX}bin:${PATH} -. endif -. if exists(${_GCC_PREFIX}bin/gcc) && !empty(_LANGUAGES.gcc:Mc) +. if !empty(_USE_PKGSRC_GCC:M[yY][eE][sS]) +. if exists(${_GCC_PREFIX}bin/gcc) && !empty(_LANGUAGES.gcc:Mc) CC= ${_GCC_PREFIX}bin/gcc -. endif -. if exists(${_GCC_PREFIX}bin/cpp) && !empty(_LANGUAGES.gcc:Mc) +. endif +. if exists(${_GCC_PREFIX}bin/cpp) && !empty(_LANGUAGES.gcc:Mc) CPP= ${_GCC_PREFIX}bin/cpp -. endif -. if exists(${_GCC_PREFIX}bin/g++) && !empty(_LANGUAGES.gcc:Mc++) +. endif +. if exists(${_GCC_PREFIX}bin/g++) && !empty(_LANGUAGES.gcc:Mc++) CXX= ${_GCC_PREFIX}bin/g++ -. endif -. if exists(${_GCC_PREFIX}bin/g77) && !empty(_LANGUAGES.gcc:Mfortran) +. endif +. if exists(${_GCC_PREFIX}bin/g77) && !empty(_LANGUAGES.gcc:Mfortran) F77= ${_GCC_PREFIX}bin/g77 PKG_FC:= ${F77} -. endif -.else -. if !empty(_IS_BUILTIN_GCC:M[yY][eE][sS]) -. if !empty(_CC:M/*) -PATH:= ${_CC:H}:${PATH} . endif . endif -.endif # GCC passes flags to the linker using "-Wl,". _COMPILER_LD_FLAG= -Wl, # Pass the required flags to imake to tell it we're using gcc on Solaris. -.if ${OPSYS} == "SunOS" +. if ${OPSYS} == "SunOS" IMAKEOPTS+= -DHasGcc2=YES -DHasGcc2ForCplusplus=YES -.endif +. endif -.if !empty(_USE_PKGSRC_GCC:M[yY][eE][sS]) -. if exists(${CC}) +. if !empty(_USE_PKGSRC_GCC:M[yY][eE][sS]) +. if exists(${CC}) CC_VERSION!= if ${CC} -dumpversion > /dev/null 2>&1; then \ ${ECHO} "gcc-`${CC} -dumpversion`"; \ else \ ${ECHO} "gcc-${_GCC_REQD}"; \ fi -. else +. else CC_VERSION= gcc-${_GCC_REQD} -. endif -.else +. endif +. else CC_VERSION= ${_GCC_PKG} -.endif - +. endif .endif # COMPILER_GCC_MK + +# The following section is included only if we're not being included by +# bsd.prefs.mk. +# +.if empty(BSD_PREFS_MK) +. if empty(COMPILER_GCC_MK:Mtwo) +COMPILER_GCC_MK+= two + +# Prepend the path to the compiler to the PATH. +. if !empty(_USE_PKGSRC_GCC:M[yY][eE][sS]) +. if exists(${_GCC_PREFIX}bin/gcc) && !empty(_LANGUAGES.gcc) +PATH:= ${_GCC_PREFIX}bin:${PATH} +. endif +. else +. if !empty(_IS_BUILTIN_GCC:M[yY][eE][sS]) +. if !empty(_CC:M/*) +PATH:= ${_CC:H}:${PATH} +. endif +. endif +. endif + +# Add the dependency on GCC. +. if !empty(_USE_PKGSRC_GCC:M[yY][eE][sS]) +. if empty(USE_BUILDLINK2:M[nN][oO]) +. for _dir_ in ${_GCC_PKGSRCDIR} +. include "${_dir_}/buildlink2.mk" +. endfor +. elif !empty(USE_BUILDLINK3:M[yY][eE][sS]) +. for _dir_ in ${_GCC_PKGSRCDIR} +. include "${_dir_}/buildlink3.mk" +. endfor +. else +. if defined(USE_GCC_SHLIB) +DEPENDS+= ${_GCC_DEPENDENCY} +. else +BUILD_DEPENDS+= ${_GCC_DEPENDENCY} +. endif +. endif +. endif +. endif # COMPILER_GCC_MK +.endif # BSD_PREFS_MK -- cgit v1.2.3