? wip Index: cross/libtool-base/Makefile =================================================================== RCS file: /cvsroot/pkgsrc/cross/libtool-base/Makefile,v retrieving revision 1.1 diff -p -u -r1.1 Makefile --- cross/libtool-base/Makefile 9 May 2013 23:32:02 -0000 1.1 +++ cross/libtool-base/Makefile 13 May 2013 16:14:58 -0000 @@ -30,7 +30,7 @@ # XXX Tweaked for cross-compilation. #PKGNAME= ${DISTNAME:S/-/-base-/} -PKGNAME= ${DISTNAME:S/^libtool-/cross-libtool-base-${MACHINE_ARCH}-/} +PKGNAME= ${DISTNAME:S/^libtool-/cross-libtool-base-${MACHINE_PLATFORM}-/} PKGREVISION= 1 SVR4_PKGNAME= ltoob Index: mk/bsd.pkg.use.mk =================================================================== RCS file: /cvsroot/pkgsrc/mk/bsd.pkg.use.mk,v retrieving revision 1.54 diff -p -u -r1.54 bsd.pkg.use.mk --- mk/bsd.pkg.use.mk 10 May 2013 09:07:37 -0000 1.54 +++ mk/bsd.pkg.use.mk 13 May 2013 16:15:04 -0000 @@ -118,7 +118,7 @@ SHLIBTOOL?= ${PKG_SHLIBTOOL} .if defined(USE_LIBTOOL) LIBTOOL_REQD?= 2.2.6bnb3 .if !empty(USE_CROSS_COMPILE:M[yY][eE][sS]) -TOOL_DEPENDS+= cross-libtool-base-${MACHINE_ARCH}>=${_OPSYS_LIBTOOL_REQD:U${LIBTOOL_REQD}}:../../cross/libtool-base +TOOL_DEPENDS+= cross-libtool-base-${MACHINE_PLATFORM}>=${_OPSYS_LIBTOOL_REQD:U${LIBTOOL_REQD}}:../../cross/libtool-base .else TOOL_DEPENDS+= libtool-base>=${_OPSYS_LIBTOOL_REQD:U${LIBTOOL_REQD}}:../../devel/libtool-base .endif Index: mk/bsd.prefs.mk =================================================================== RCS file: /cvsroot/pkgsrc/mk/bsd.prefs.mk,v retrieving revision 1.336 diff -p -u -r1.336 bsd.prefs.mk --- mk/bsd.prefs.mk 28 Apr 2013 13:21:47 -0000 1.336 +++ mk/bsd.prefs.mk 13 May 2013 16:15:04 -0000 @@ -22,6 +22,12 @@ # the same as ${MACHINE_PLATFORM}, but can be different when # cross-building packages. # +# TARGET_MACHINE_PLATFORM +# The platform for which cross-build tools are configured. This +# is usually the same as ${MACHINE_PLATFORM}, but it can be +# different when building tool dependencies for cross-built +# packages. +# # PKGPATH # The path of the package, relative to the pkgsrc top-level # directory. Typical values look like editors/emacs or @@ -69,23 +75,23 @@ UNAME=/bin/uname UNAME=echo Unknown .endif -.if !defined(OPSYS) -OPSYS:= ${:!${UNAME} -s!:S/-//g:S/\///g:C/^CYGWIN_.*$/Cygwin/} -MAKEFLAGS+= OPSYS=${OPSYS:Q} +.if !defined(NATIVE_OPSYS) +NATIVE_OPSYS:= ${:!${UNAME} -s!:S/-//g:S/\///g:C/^CYGWIN_.*$/Cygwin/} +MAKEFLAGS+= NATIVE_OPSYS=${NATIVE_OPSYS:Q} .endif # OS_VARIANT is used to differentiate operating systems which have a common # basis but offer contrasting environments, for example Linux distributions # or illumos forks. -OS_VARIANT?= # empty +NATIVE_OS_VARIANT?= # empty # The _CMD indirection allows code below to modify these values # without executing the commands at all. Later, recursed make # invocations will skip these blocks entirely thanks to MAKEFLAGS. -.if !defined(OS_VERSION) -_OS_VERSION_CMD= ${UNAME} -r -OS_VERSION= ${_OS_VERSION_CMD:sh} -MAKEFLAGS+= OS_VERSION=${OS_VERSION:Q} +.if !defined(NATIVE_OS_VERSION) +_NATIVE_OS_VERSION_CMD= ${UNAME} -r +NATIVE_OS_VERSION= ${_NATIVE_OS_VERSION_CMD:sh} +MAKEFLAGS+= NATIVE_OS_VERSION=${NATIVE_OS_VERSION:Q} .endif # Preload these for architectures not in all variations of bsd.own.mk, @@ -104,43 +110,45 @@ MACHINE_GNU_ARCH?= ${GNU_ARCH.${MACHINE ## If changes are made to how OS_VERSION is set below please keep ## "pkgsrc/pkgtools/osabi/INSTALL" in-sync. -.if ${OPSYS} == "NetBSD" -LOWER_OPSYS?= netbsd +.if ${NATIVE_OPSYS} == "NetBSD" +NATIVE_LOWER_OPSYS?= netbsd -.elif ${OPSYS} == "AIX" -LOWER_ARCH!= _cpuid=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $$1 }'`; \ +.elif ${NATIVE_OPSYS} == "AIX" +NATIVE_LOWER_ARCH!= _cpuid=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $$1 }'`; \ if /usr/sbin/lsattr -El $$_cpuid | grep ' POWER' >/dev/null 2>&1; then \ echo rs6000; \ else \ echo powerpc; \ fi -MACHINE_ARCH?= ${LOWER_ARCH} +NATIVE_MACHINE_ARCH?= ${NATIVE_LOWER_ARCH} . if exists(/usr/bin/oslevel) -_OS_VERSION!= /usr/bin/oslevel +_NATIVE_OS_VERSION!= /usr/bin/oslevel . else -_OS_VERSION!= echo `${UNAME} -v`.`${UNAME} -r` +_NATIVE_OS_VERSION!= echo `${UNAME} -v`.`${UNAME} -r` . endif -OS_VERSION= ${_OS_VERSION:C/([0-9]*\.[0-9]*).*/\1/} -LOWER_OPSYS_VERSUFFIX= ${_OS_VERSION} -LOWER_OPSYS?= aix -LOWER_VENDOR?= ibm - -.elif ${OPSYS} == "BSDOS" -LOWER_OPSYS?= bsdi - -.elif ${OPSYS} == "Cygwin" -LOWER_OPSYS?= cygwin -LOWER_VENDOR?= pc -. if !defined(LOWER_ARCH) -LOWER_ARCH!= ${UNAME} -m | sed -e 's/i.86/i386/' -. endif # !defined(LOWER_ARCH) -_OS_VERSION!= ${UNAME} -r -OS_VERSION= ${_OS_VERSION:C/\(.*\)//} -OS_VARIANT!= ${UNAME} -s - -.elif ${OPSYS} == "Darwin" -LOWER_OPSYS?= darwin -.if empty(OS_VERSION:M[1-9].*.*) +NATIVE_OS_VERSION= ${_NATIVE_OS_VERSION:C/([0-9]*\.[0-9]*).*/\1/} +NATIVE_LOWER_OPSYS_VERSUFFIX= ${_NATIVE_OS_VERSION} +NATIVE_LOWER_OPSYS?= aix +NATIVE_LOWER_VENDOR?= ibm + +.elif ${NATIVE_OPSYS} == "BSDOS" +NATIVE_LOWER_OPSYS?= bsdi + +.elif ${NATIVE_OPSYS} == "Cygwin" +NATIVE_LOWER_OPSYS?= cygwin +NATIVE_LOWER_VENDOR?= pc +. if !defined(NATIVE_LOWER_ARCH) +NATIVE_LOWER_ARCH!= ${UNAME} -m | sed -e 's/i.86/i386/' +. endif # !defined(NATIVE_LOWER_ARCH) +_NATIVE_OS_VERSION!= ${UNAME} -r +NATIVE_OS_VERSION= ${_NATIVE_OS_VERSION:C/\(.*\)//} +NATIVE_OS_VARIANT!= ${UNAME} -s + +.elif ${NATIVE_OPSYS} == "Darwin" +NATIVE_LOWER_OPSYS?= darwin +# XXX Checking NATIVE_OS_VERSION is wrong here for cross-compilation. +# This should be moved below to where we can check OS_VERSION. +.if empty(NATIVE_OS_VERSION:M[1-9].*.*) # Automatically select the ABI under Mac OS X Snow Leopard. We don't # use this at the moment because too many third party programs don't # work with it. @@ -151,176 +159,204 @@ LOWER_OPSYS?= darwin # .else # ABI= 32 #. endif +# +# XXX This has to change for cross-compilation! ABI= 32 LOWER_ARCH.32= i386 LOWER_ARCH.64= x86_64 -LOWER_ARCH= ${LOWER_ARCH.${ABI}} +NATIVE_LOWER_ARCH= ${LOWER_ARCH.${ABI}} .else -LOWER_ARCH!= ${UNAME} -p +NATIVE_LOWER_ARCH!= ${UNAME} -p .endif -MACHINE_ARCH= ${LOWER_ARCH} -MAKEFLAGS+= LOWER_ARCH=${LOWER_ARCH:Q} -LOWER_OPSYS_VERSUFFIX= ${LOWER_OS_VERSION:C/([0-9]*).*/\1/} -LOWER_VENDOR?= apple +NATIVE_MACHINE_ARCH= ${NATIVE_LOWER_ARCH} +MAKEFLAGS+= NATIVE_LOWER_ARCH=${NATIVE_LOWER_ARCH:Q} +NATIVE_LOWER_OPSYS_VERSUFFIX= ${NATIVE_LOWER_OS_VERSION:C/([0-9]*).*/\1/} +NATIVE_LOWER_VENDOR?= apple + +.elif ${NATIVE_OPSYS} == "DragonFly" +NATIVE_OS_VERSION:= ${NATIVE_OS_VERSION:C/-.*$//} +NATIVE_LOWER_OPSYS?= dragonfly +NATIVE_LOWER_ARCH!= ${UNAME} -p +. if ${NATIVE_LOWER_ARCH} == "amd64" +NATIVE_MACHINE_ARCH= x86_64 +. else +NATIVE_MACHINE_ARCH= ${NATIVE_LOWER_ARCH} +. endif +MAKEFLAGS+= NATIVE_LOWER_ARCH=${NATIVE_LOWER_ARCH:Q} +NATIVE_LOWER_VENDOR?= pc -.elif ${OPSYS} == "DragonFly" -OS_VERSION:= ${OS_VERSION:C/-.*$//} -LOWER_OPSYS?= dragonfly -LOWER_ARCH!= ${UNAME} -p -. if ${LOWER_ARCH} == "amd64" -MACHINE_ARCH= x86_64 -. else -MACHINE_ARCH= ${LOWER_ARCH} -. endif -MAKEFLAGS+= LOWER_ARCH=${LOWER_ARCH:Q} -LOWER_VENDOR?= pc - -.elif ${OPSYS} == "FreeBSD" -OS_VERSION:= ${OS_VERSION:C/-.*$//} -LOWER_OPSYS?= freebsd -LOWER_ARCH!= ${UNAME} -p -. if ${LOWER_ARCH} == "amd64" -MACHINE_ARCH= x86_64 -. else -MACHINE_ARCH= ${LOWER_ARCH} -. endif -MAKEFLAGS+= LOWER_ARCH=${LOWER_ARCH:Q} -LOWER_OPSYS_VERSUFFIX= ${LOWER_OS_VERSION:C/([0-9]*).*/\1/} -. if ${LOWER_ARCH} == "i386" -LOWER_VENDOR?= pc -. endif -LOWER_VENDOR?= unknown - -.elif ${OPSYS} == "Haiku" -LOWER_OPSYS?= haiku -. if ${MACHINE_ARCH} == "i386" -LOWER_VENDOR?= pc -. endif - -.elif ${OPSYS} == "Interix" -LOWER_OPSYS?= interix -LOWER_VENDOR?= pc +.elif ${NATIVE_OPSYS} == "FreeBSD" +NATIVE_OS_VERSION:= ${NATIVE_OS_VERSION:C/-.*$//} +NATIVE_LOWER_OPSYS?= freebsd +NATIVE_LOWER_ARCH!= ${UNAME} -p +. if ${NATIVE_LOWER_ARCH} == "amd64" +NATIVE_MACHINE_ARCH= x86_64 +. else +NATIVE_MACHINE_ARCH= ${NATIVE_LOWER_ARCH} +. endif +MAKEFLAGS+= NATIVE_LOWER_ARCH=${NATIVE_LOWER_ARCH:Q} +NATIVE_LOWER_OPSYS_VERSUFFIX= ${NATIVE_LOWER_OS_VERSION:C/([0-9]*).*/\1/} +. if ${NATIVE_LOWER_ARCH} == "i386" +NATIVE_LOWER_VENDOR?= pc +. endif +NATIVE_LOWER_VENDOR?= unknown + +.elif ${NATIVE_OPSYS} == "Haiku" +NATIVE_LOWER_OPSYS?= haiku +. if ${NATIVE_MACHINE_ARCH} == "i386" +NATIVE_LOWER_VENDOR?= pc +. endif + +.elif ${NATIVE_OPSYS} == "Interix" +NATIVE_LOWER_OPSYS?= interix +NATIVE_LOWER_VENDOR?= pc . if exists(/usr/lib/libc.so.5.2) || exists(/usr/lib/x86/libc.so.5.2) -LOWER_OPSYS_VERSUFFIX= ${LOWER_OS_VERSION:C/([0-9]*).*/\1/} +NATIVE_LOWER_OPSYS_VERSUFFIX= ${NATIVE_LOWER_OS_VERSION:C/([0-9]*).*/\1/} . else -LOWER_OPSYS_VERSUFFIX?= 3 +NATIVE_LOWER_OPSYS_VERSUFFIX?= 3 . if exists(/usr/lib/libc.so.3.5) -OS_VERSION= 3.5 +NATIVE_OS_VERSION= 3.5 . elif exists(/usr/lib/libc.so.3.1) -OS_VERSION= 3.1 +NATIVE_OS_VERSION= 3.1 . else -OS_VERSION= 3.0 +NATIVE_OS_VERSION= 3.0 . endif . endif -.elif ${OPSYS} == "MirBSD" -LOWER_OPSYS?= mirbsd -LOWER_OS_VERSION= ${OS_VERSION} -LOWER_OPSYS_VERSUFFIX= ${OS_VERSION} -LOWER_ARCH!= arch -s -LOWER_VENDOR?= unknown -MACHINE_ARCH= ${LOWER_ARCH} -MAKEFLAGS+= LOWER_ARCH=${LOWER_ARCH:Q} - -.elif !empty(OPSYS:MIRIX*) -LOWER_ARCH!= ${UNAME} -p -LOWER_OPSYS?= irix -LOWER_OPSYS_VERSUFFIX?= ${OS_VERSION} -LOWER_VENDOR?= sgi - -.elif ${OPSYS} == "Linux" -OS_VERSION:= ${OS_VERSION:C/-.*$//} -LOWER_OPSYS?= linux -. if !defined(LOWER_ARCH) -LOWER_ARCH!= ${UNAME} -m | sed -e 's/i.86/i386/' -e 's/ppc/powerpc/' -. endif # !defined(LOWER_ARCH) -MACHINE_ARCH= ${LOWER_ARCH} -MAKEFLAGS+= LOWER_ARCH=${LOWER_ARCH:Q} +.elif ${NATIVE_OPSYS} == "MirBSD" +NATIVE_LOWER_OPSYS?= mirbsd +NATIVE_LOWER_OS_VERSION=${NATIVE_OS_VERSION} +NATIVE_LOWER_OPSYS_VERSUFFIX= ${NATIVE_OS_VERSION} +NATIVE_LOWER_ARCH!= arch -s +NATIVE_LOWER_VENDOR?= unknown +NATIVE_MACHINE_ARCH= ${NATIVE_LOWER_ARCH} +MAKEFLAGS+= NATIVE_LOWER_ARCH=${NATIVE_LOWER_ARCH:Q} + +.elif !empty(NATIVE_OPSYS:MIRIX*) +NATIVE_LOWER_ARCH!= ${UNAME} -p +NATIVE_LOWER_OPSYS?= irix +NATIVE_LOWER_OPSYS_VERSUFFIX?= ${NATIVE_OS_VERSION} +NATIVE_LOWER_VENDOR?= sgi + +.elif ${NATIVE_OPSYS} == "Linux" +NATIVE_OS_VERSION:= ${NATIVE_OS_VERSION:C/-.*$//} +NATIVE_LOWER_OPSYS?= linux +. if !defined(NATIVE_LOWER_ARCH) +NATIVE_LOWER_ARCH!= ${UNAME} -m | sed -e 's/i.86/i386/' -e 's/ppc/powerpc/' +. endif # !defined(NATIVE_LOWER_ARCH) +NATIVE_MACHINE_ARCH= ${NATIVE_LOWER_ARCH} +MAKEFLAGS+= NATIVE_LOWER_ARCH=${NATIVE_LOWER_ARCH:Q} . if exists(/etc/debian_version) -LOWER_VENDOR?= debian +NATIVE_LOWER_VENDOR?= debian . elif exists(/etc/mandrake-release) -LOWER_VENDOR?= mandrake +NATIVE_LOWER_VENDOR?= mandrake . elif exists(/etc/redhat-version) -LOWER_VENDOR?= redhat +NATIVE_LOWER_VENDOR?= redhat . elif exists(/etc/slackware-version) -LOWER_VENDOR?= slackware +NATIVE_LOWER_VENDOR?= slackware . elif exists(/etc/ssdlinux_version) -LOWER_VENDOR?= ssd -. elif ${LOWER_ARCH} == "i386" -LOWER_VENDOR?= pc -. endif -LOWER_VENDOR?= unknown - -.elif ${OPSYS} == "OSF1" -LOWER_ARCH!= ${UNAME} -p -MAKEFLAGS+= LOWER_ARCH=${LOWER_ARCH:Q} -MACHINE_ARCH?= ${LOWER_ARCH} -OS_VERSION:= ${OS_VERSION:C/^V//} -LOWER_OPSYS?= osf1 -LOWER_OPSYS_VERSUFFIX?= ${OS_VERSION} -LOWER_VENDOR?= dec - -.elif ${OPSYS} == "HPUX" -OS_VERSION:= ${OS_VERSION:C/^B.//} -.if ${MACHINE_ARCH} == "9000" -MACHINE_ARCH= hppa -.endif -LOWER_OPSYS?= hpux -LOWER_OPSYS_VERSUFFIX?= ${OS_VERSION} -LOWER_VENDOR?= hp - -.elif ${OPSYS} == "SunOS" +NATIVE_LOWER_VENDOR?= ssd +. elif ${NATIVE_LOWER_ARCH} == "i386" +NATIVE_LOWER_VENDOR?= pc +. endif +NATIVE_LOWER_VENDOR?= unknown + +.elif ${NATIVE_OPSYS} == "OSF1" +NATIVE_LOWER_ARCH!= ${UNAME} -p +MAKEFLAGS+= NATIVE_LOWER_ARCH=${NATIVE_LOWER_ARCH:Q} +NATIVE_MACHINE_ARCH?= ${NATIVE_LOWER_ARCH} +NATIVE_OS_VERSION:= ${NATIVE_OS_VERSION:C/^V//} +NATIVE_LOWER_OPSYS?= osf1 +NATIVE_LOWER_OPSYS_VERSUFFIX?= ${NATIVE_OS_VERSION} +NATIVE_LOWER_VENDOR?= dec + +.elif ${NATIVE_OPSYS} == "HPUX" +NATIVE_OS_VERSION:= ${NATIVE_OS_VERSION:C/^B.//} +.if ${NATIVE_MACHINE_ARCH} == "9000" +NATIVE_MACHINE_ARCH= hppa +.endif +NATIVE_LOWER_OPSYS?= hpux +NATIVE_LOWER_OPSYS_VERSUFFIX?= ${NATIVE_OS_VERSION} +NATIVE_LOWER_VENDOR?= hp + +.elif ${NATIVE_OPSYS} == "SunOS" +# XXX This ABI stuff is wrong for cross-compilation. Depends on +# OPSYS, not NATIVE_OPSYS. ABI?= 32 -. if ${MACHINE_ARCH} == "sparc" +. if ${NATIVE_MACHINE_ARCH} == "sparc" +# XXX This SPARC_TARGET_ARCH stuff looks sketchy for +# cross-compilation. SPARC_TARGET_ARCH?= sparcv7 -. elif ${MACHINE_ARCH} == "sun4" -MACHINE_ARCH= sparc +. elif ${NATIVE_MACHINE_ARCH} == "sun4" +NATIVE_MACHINE_ARCH= sparc SPARC_TARGET_ARCH?= sparcv7 -. elif ${MACHINE_ARCH} == "i86pc" || ${MACHINE_ARCH} == "i86xpv" || ${MACHINE_ARCH} == "i386" -LOWER_ARCH.32= i386 -LOWER_ARCH.64= x86_64 -LOWER_ARCH= ${LOWER_ARCH.${ABI}} -MACHINE_ARCH= ${LOWER_ARCH} -. elif ${MACHINE_ARCH} == "unknown" -. if !defined(LOWER_ARCH) -LOWER_ARCH!= ${UNAME} -p -. endif # !defined(LOWER_ARCH) -MAKEFLAGS+= LOWER_ARCH=${LOWER_ARCH:Q} -. endif -LOWER_VENDOR?= sun -LOWER_OPSYS?= solaris -LOWER_OPSYS_VERSUFFIX= 2.${OS_VERSION:C/5.//} +. elif ${NATIVE_MACHINE_ARCH} == "i86pc" || ${NATIVE_MACHINE_ARCH} == "i86xpv" || ${NATIVE_MACHINE_ARCH} == "i386" +NATIVE_LOWER_ARCH.32= i386 +NATIVE_LOWER_ARCH.64= x86_64 +NATIVE_LOWER_ARCH= ${NATIVE_LOWER_ARCH.${ABI}} +NATIVE_MACHINE_ARCH= ${NATIVE_LOWER_ARCH} +. elif ${NATIVE_MACHINE_ARCH} == "unknown" +. if !defined(NATIVE_LOWER_ARCH) +NATIVE_LOWER_ARCH!= ${UNAME} -p +. endif # !defined(NATIVE_LOWER_ARCH) +MAKEFLAGS+= NATIVE_LOWER_ARCH=${NATIVE_LOWER_ARCH:Q} +. endif +NATIVE_LOWER_VENDOR?= sun +NATIVE_LOWER_OPSYS?= solaris +NATIVE_LOWER_OPSYS_VERSUFFIX= 2.${NATIVE_OS_VERSION:C/5.//} _UNAME_V!= ${UNAME} -v . if !empty(_UNAME_V:Mjoyent_*) -OS_VARIANT= SmartOS +NATIVE_OS_VARIANT= SmartOS . endif -.elif ${OPSYS} == "Minix" -LOWER_VENDOR?= pc -LOWER_OPSYS:= ${OPSYS:tl} +.elif ${NATIVE_OPSYS} == "Minix" +NATIVE_LOWER_VENDOR?= pc +NATIVE_LOWER_OPSYS:= ${NATIVE_OPSYS:tl} + +# XXX This LDFLAGS stuff is wrong for cross-compilation. Depends on +# OPSYS, not NATIVE_OPSYS. LDFLAGS+= -lcompat_minix -lminlib -.elif !defined(LOWER_OPSYS) -LOWER_OPSYS:= ${OPSYS:tl} +.elif !defined(NATIVE_LOWER_OPSYS) +NATIVE_LOWER_OPSYS:= ${NATIVE_OPSYS:tl} .endif -# Now commit the [LOWER_]OS_VERSION values computed above, eliding the :sh -OS_VERSION:= ${OS_VERSION} -LOWER_OS_VERSION:= ${OS_VERSION:tl} - -MAKEFLAGS+= LOWER_OPSYS=${LOWER_OPSYS:Q} - -LOWER_VENDOR?= # empty ("arch--opsys") -LOWER_ARCH?= ${MACHINE_GNU_ARCH} -# Expand now as MACHINE_ARCH can be overriden in mk.conf and -# LOWER_ARCH is typically derived from it. -NATIVE_LOWER_ARCH:= ${LOWER_ARCH} -NATIVE_MACHINE_ARCH:= ${MACHINE_ARCH} - -NATIVE_MACHINE_PLATFORM?= ${OPSYS}-${OS_VERSION}-${NATIVE_MACHINE_ARCH} -MACHINE_PLATFORM?= ${OPSYS}-${OS_VERSION}-${MACHINE_ARCH} -NATIVE_MACHINE_GNU_PLATFORM?= ${NATIVE_MACHINE_GNU_ARCH}-${LOWER_VENDOR}-${LOWER_OPSYS:C/[0-9]//g}${APPEND_ELF}${LOWER_OPSYS_VERSUFFIX} -MACHINE_GNU_PLATFORM?= ${MACHINE_GNU_ARCH}-${LOWER_VENDOR}-${LOWER_OPSYS:C/[0-9]//g}${APPEND_ELF}${LOWER_OPSYS_VERSUFFIX} +# Now commit the NATIVE_[LOWER_]OS_VERSION values computed above, +# eliding the :sh +NATIVE_OS_VERSION:= ${NATIVE_OS_VERSION} +NATIVE_LOWER_OS_VERSION:= ${NATIVE_OS_VERSION:tl} + +MAKEFLAGS+= NATIVE_LOWER_OPSYS=${NATIVE_LOWER_OPSYS:Q} + +# If not provided by the above conditionals, take these from whatever +# was compiled into make. +NATIVE_MACHINE_ARCH?= ${MACHINE_ARCH} +NATIVE_MACHINE?= ${MACHINE} + +NATIVE_LOWER_VENDOR?= # empty ("arch--opsys") +NATIVE_LOWER_ARCH?= ${NATIVE_MACHINE_GNU_ARCH} +# Expand now as MACHINE_PLATFORM can be overriden in mk.conf to change +# these for cross-compilation.. +NATIVE_LOWER_ARCH:= ${NATIVE_LOWER_ARCH} +NATIVE_MACHINE_ARCH:= ${NATIVE_MACHINE_ARCH} +NATIVE_MACHINE:= ${NATIVE_MACHINE} + +# XXX I am not sure there is any reason for any of these to be set +# with `?=', except for MACHINE_PLATFORM, which can be configured in +# mk.conf or on the command line for cross-compilation. +NATIVE_MACHINE_PLATFORM?= \ + ${NATIVE_OPSYS}-${NATIVE_OS_VERSION}-${NATIVE_MACHINE_ARCH} + +# Provisionally set this to ${NATIVE_MACHINE_PLATFORM}. Either this +# is correct, for native compilation, or you need to set it yourself, +# for cross-compilation. +MACHINE_PLATFORM?= ${NATIVE_MACHINE_PLATFORM} + +# XXX Need to distinguish NATIVE_APPEND_ELF vs APPEND_ELF...ugh... +NATIVE_MACHINE_GNU_PLATFORM?= \ + ${NATIVE_MACHINE_GNU_ARCH}-${NATIVE_LOWER_VENDOR}-${NATIVE_LOWER_OPSYS:C/[0-9]//g}${APPEND_ELF}${NATIVE_LOWER_OPSYS_VERSUFFIX} +MACHINE_GNU_PLATFORM?= \ + ${MACHINE_GNU_ARCH}-${LOWER_VENDOR}-${LOWER_OPSYS:C/[0-9]//g}${APPEND_ELF}${LOWER_OPSYS_VERSUFFIX} # Needed to prevent an "install:" target from being created in bsd.own.mk. NEED_OWN_INSTALL_TARGET=no @@ -331,7 +367,12 @@ USETOOLS= no MAKE_ENV+= USETOOLS=no # Set this before does, since it doesn't know about Darwin -.if ${OPSYS} == "Darwin" +# +# XXX This is wrong for cross-compilation -- we need NATIVE_OBJECT_FMT +# and OBJECT_FMT both. Can't use ${OPSYS} yet because it's not +# defined until we know what ${MACHINE_PLATFORM} is, which we don't +# learn until after including mk.conf by including bsd.own.mk. +.if ${NATIVE_OPSYS} == "Darwin" OBJECT_FMT?= Mach-O .endif @@ -343,6 +384,57 @@ PKGPATH?= ${.CURDIR:C|.*/([^/]*/[^/]*)$ # Load the settings from MAKECONF, which is /etc/mk.conf by default. .include +# Now that we have the requested MACHINE_PLATFORM set, derive various +# platform variables from it. +.if empty(USE_CROSS_COMPILE:M[yY][eE][sS]) + +. if ${MACHINE_PLATFORM} != ${NATIVE_MACHINE_PLATFORM} +.BEGIN: + @${ECHO_MSG} "Machine platform "${MACHINE_PLATFORM:Q} + @${ECHO_MSG} "is not the native machine platform "${NATIVE_MACHINE_PLATFORM:Q}, + @${ECHO_MSG} "but cross-compilation was not requested." + @${ECHO_MSG} "If you want to cross-compile, set USE_CROSS_COMPILE=yes." + @${FALSE} +. endif + +# The easy case -- native compilation. +LOWER_ARCH= ${NATIVE_LOWER_ARCH} +LOWER_OPSYS= ${NATIVE_LOWER_OPSYS} +LOWER_OPSYS_VERSUFFIX= ${NATIVE_LOWER_OPSYS_VERSUFFIX} +LOWER_OS_VERSION= ${NATIVE_LOWER_OS_VERSION} +LOWER_VENDOR= ${NATIVE_LOWER_VENDOR} +MACHINE= ${NATIVE_MACHINE} +MACHINE_ARCH= ${NATIVE_MACHINE_ARCH} +OPSYS= ${NATIVE_OPSYS} +OS_VARIANT= ${NATIVE_OS_VARIANT} +OS_VERSION= ${NATIVE_OS_VERSION} + +.else + +# The trickier case -- cross-compilation. +OPSYS= ${MACHINE_PLATFORM:C/-.*$//1} +OS_VERSION= ${MACHINE_PLATFORM:C/^[^-]*-//1:C/-[^-]*$//1} +MACHINE_ARCH= ${MACHINE_PLATFORM:C/^.*-//1} + +. if ${OPSYS} == "NetBSD" +LOWER_ARCH= ${MACHINE_GNU_ARCH} # XXX Why not ${MACHINE_ARCH:tl}? +LOWER_OPSYS= ${OPSYS:tl} +LOWER_OPSYS_VERSUFFIX= # empty +LOWER_OS_VERSION= ${OS_VERSION:tl} +# XXX This MACHINE-from-MACHINE_ARCH business is probably wrong, but +# does pkgsrc care about distinctions on MACHINE that are not +# reflected by distinctions on MACHINE_ARCH? I suspect it would be a +# mistake for pkgsrc to use ${MACHINE} at all. +MACHINE.x86_64= amd64 +MACHINE= ${MACHINE.${MACHINE_ARCH}:U${MACHINE_ARCH}} +OS_VARIANT= # empty +. else +.BEGIN: + @${ECHO_MSG} "Cross-compilation to "${MACHINE_PLATFORM:Q}" is not supported." + @${FALSE} +. endif +.endif + # /usr/share/mk/bsd.own.mk on NetBSD 1.3 does not define OBJECT_FMT .if !empty(MACHINE_PLATFORM:MNetBSD-1.3*) . if ${MACHINE_ARCH} == "alpha" || \ @@ -498,27 +590,24 @@ _MAKE_PACKAGE_AS_ROOT?= yes # When cross-compilation support is requested, the following options # must be specified as well or guessable: -# - MACHINE_ARCH is set to TARGET_ARCH if set. # - CROSS_DESTDIR is guessed from MAKEOBJDIR and MACHINE_ARCH. -# - PKG_DBDIR is expanded and prefixed with CROSS_DESTDIR -# - DESTDIR support is required +# - PKG_DBDIR is expanded and prefixed with CROSS_DESTDIR (XXX um, no?) +# - DESTDIR support is required (XXX how checked?) # # _CROSS_DESTDIR is set for internal use to avoid conditionalising # the use. .if !empty(USE_CROSS_COMPILE:M[yY][eE][sS]) -. if defined(TARGET_ARCH) -MACHINE_ARCH= ${TARGET_ARCH} -. endif -CROSS_DESTDIR?= ${MAKEOBJDIR}/destdir.${MACHINE_ARCH} +CROSS_DESTDIR?= ${MAKEOBJDIR}/destdir.${MACHINE_PLATFORM} . if !exists(${CROSS_DESTDIR}/usr/include/stddef.h) -PKG_FAIL_REASON+= "The cross-compiling root ${CROSS_DESTDIR:Q} is incomplete" +PKG_FAIL_REASON+= "The cross-compiling root "${CROSS_DESTDIR:Q}" is incomplete" . else _CROSS_DESTDIR= ${CROSS_DESTDIR} . endif .endif # Depends on MACHINE_ARCH override above +# XXX Need to distinguish NATIVE_APPEND_ELF vs APPEND_ELF...ugh... .if ${OPSYS} == "NetBSD" . if ${OBJECT_FMT} == "ELF" && \ (${MACHINE_GNU_ARCH} == "arm" || \ @@ -564,6 +653,8 @@ IPV6_READY= NO LOCALBASE?= /usr/pkg X11_TYPE?= modular .if !empty(X11_TYPE:Mnative) +# XXX Do these absolute pathnames need ${CROSS_DESTDIR} prefixed? At +# least the existence tests do. . if ${OPSYS} == "SunOS" # On Solaris, we default to using OpenWindows for X11. X11BASE?= /usr/openwin @@ -583,6 +674,7 @@ X11BASE?= /usr/X11R7 X11BASE?= /usr/X11R6 . endif .endif +# XXX This should mention ${TARGET_MACHINE_PLATFORM}. CROSSBASE?= ${LOCALBASE}/cross .if defined(FIX_SYSTEM_HEADERS) && ${FIX_SYSTEM_HEADERS} == "yes" && \ @@ -695,6 +787,7 @@ BUILD_DIR!= cd ${.CURDIR} && ${PWD_CMD} # If OBJHOSTNAME is set, use first component of hostname in directory name. # If OBJMACHINE is set, use ${MACHINE_ARCH} in the working directory name. +# XXX Provide an option for MACHINE_PLATFORM for cross-OS builds. # .if defined(OBJHOSTNAME) . if !defined(_HOSTNAME) Index: mk/buildlink3/find-files.mk =================================================================== RCS file: /cvsroot/pkgsrc/mk/buildlink3/find-files.mk,v retrieving revision 1.8 diff -p -u -r1.8 find-files.mk --- mk/buildlink3/find-files.mk 3 May 2010 06:58:27 -0000 1.8 +++ mk/buildlink3/find-files.mk 13 May 2013 16:15:04 -0000 @@ -83,12 +83,13 @@ USE_TOOLS+= grep . if !defined(${_var_}) ${_var_}= __nonexistent__ . for _file_ in ${BUILTIN_FIND_FILES.${_var_}} -. if !empty(${_var_}:M__nonexistent__) && exists(${_file_}) +. if !empty(${_var_}:M__nonexistent__) && exists(${CROSS_DESTDIR}${_file_}) . if !defined(BUILTIN_FIND_GREP.${_var_}) ${_var_}= ${_file_} . else ${_var_}!= \ - if ${GREP} -q ${BUILTIN_FIND_GREP.${_var_}:Q} ${_file_:Q}; then \ + if ${GREP} -q ${BUILTIN_FIND_GREP.${_var_}:Q} \ + ${CROSS_DESTDIR:Q}${_file_:Q}; then \ ${ECHO} ${_file_:Q}; \ else \ ${ECHO} __nonexistent__; \ Index: mk/buildlink3/find-libs.mk =================================================================== RCS file: /cvsroot/pkgsrc/mk/buildlink3/find-libs.mk,v retrieving revision 1.11 diff -p -u -r1.11 find-libs.mk --- mk/buildlink3/find-libs.mk 28 Apr 2013 13:39:09 -0000 1.11 +++ mk/buildlink3/find-libs.mk 13 May 2013 16:15:04 -0000 @@ -65,7 +65,8 @@ BUILTIN_LIB_FOUND.${_lib_}= no . for _path_ in ${COMPILER_LIB_DIRS} . if ${BUILTIN_LIB_FOUND.${_lib_}} == "no" BUILTIN_LIB_FOUND.${_lib_}!= \ - if ${TEST} "`${ECHO} ${_path_}/lib${_lib_}.*`" != "${_path_}/lib${_lib_}.*"; then \ + if ${TEST} "`${ECHO} ${CROSS_DESTDIR:Q}${_path_}/lib${_lib_}.*`" \ + != "${CROSS_DESTDIR:Q}${_path_}/lib${_lib_}.*"; then \ ${ECHO} yes; \ else \ ${ECHO} no; \ Index: mk/pkgformat/pkg/depends.mk =================================================================== RCS file: /cvsroot/pkgsrc/mk/pkgformat/pkg/depends.mk,v retrieving revision 1.3 diff -p -u -r1.3 depends.mk --- mk/pkgformat/pkg/depends.mk 9 May 2013 23:37:26 -0000 1.3 +++ mk/pkgformat/pkg/depends.mk 13 May 2013 16:15:04 -0000 @@ -100,13 +100,13 @@ _DEPENDS_INSTALL_CMD= \ extradep=" ${PKGNAME}"; \ fi; \ cross=no; \ - archopt=TARGET_ARCH=${MACHINE_ARCH}; \ + platform=TARGET_MACHINE_PLATFORM=${MACHINE_PLATFORM}; \ pkg=`${_HOST_PKG_BEST_EXISTS} "$$pattern" || ${TRUE}`; \ ;; \ build|full) \ extradep=" ${PKGNAME}"; \ cross=${USE_CROSS_COMPILE:Uno}; \ - archopt=; \ + platform=; \ pkg=`${_PKG_BEST_EXISTS} "$$pattern" || ${TRUE}`; \ ;; \ esac; \ @@ -121,7 +121,7 @@ _DEPENDS_INSTALL_CMD= \ _PKGSRC_DEPS="$$extradep${_PKGSRC_DEPS}" \ PKGNAME_REQD="$$pattern" \ USE_CROSS_COMPILE=$$cross \ - $$archopt \ + $$platform \ ${MAKE} ${MAKEFLAGS} _AUTOMATIC=yes $$target; \ case $$type in \ bootstrap|tool) \ Index: mk/pkgformat/pkg/package.mk =================================================================== RCS file: /cvsroot/pkgsrc/mk/pkgformat/pkg/package.mk,v retrieving revision 1.1 diff -p -u -r1.1 package.mk --- mk/pkgformat/pkg/package.mk 15 Oct 2011 00:23:09 -0000 1.1 +++ mk/pkgformat/pkg/package.mk 13 May 2013 16:15:04 -0000 @@ -147,7 +147,7 @@ su-real-package-install: @${PHASE_MSG} "Install binary package of "${PKGNAME:Q} .if !empty(USE_CROSS_COMPILE:M[yY][eE][sS]) @${MKDIR} ${_CROSS_DESTDIR}${PREFIX} - ${PKG_ADD} -m ${MACHINE_ARCH} -I -p ${_CROSS_DESTDIR}${PREFIX} ${PKGFILE} + ${PKG_ADD} -m ${MACHINE_PLATFORM} -I -p ${_CROSS_DESTDIR}${PREFIX} ${PKGFILE} @${ECHO} "Fixing recorded cwd..." @${SED} -e 's|@cwd ${_CROSS_DESTDIR}|@cwd |' ${_PKG_DBDIR}/${PKGNAME:Q}/+CONTENTS > ${_PKG_DBDIR}/${PKGNAME:Q}/+CONTENTS.tmp @${MV} ${_PKG_DBDIR}/${PKGNAME:Q}/+CONTENTS.tmp ${_PKG_DBDIR}/${PKGNAME:Q}/+CONTENTS Index: mk/pkgformat/pkg/replace.mk =================================================================== RCS file: /cvsroot/pkgsrc/mk/pkgformat/pkg/replace.mk,v retrieving revision 1.1 diff -p -u -r1.1 replace.mk --- mk/pkgformat/pkg/replace.mk 15 Oct 2011 00:23:09 -0000 1.1 +++ mk/pkgformat/pkg/replace.mk 13 May 2013 16:15:04 -0000 @@ -207,7 +207,7 @@ replace-destdir: .PHONY @${PHASE_MSG} "Updating using binary package of "${PKGNAME:Q} .if !empty(USE_CROSS_COMPILE:M[yY][eE][sS]) @${MKDIR} ${_CROSS_DESTDIR}${PREFIX} - ${PKG_ADD} -U -D -m ${MACHINE_ARCH} -I -p ${_CROSS_DESTDIR}${PREFIX} ${PKGFILE} + ${PKG_ADD} -U -D -m ${MACHINE_PLATFORM} -I -p ${_CROSS_DESTDIR}${PREFIX} ${PKGFILE} @${ECHO} "Fixing recorded cwd..." @${SED} -e 's|@cwd ${_CROSS_DESTDIR}|@cwd |' ${_PKG_DBDIR}/${PKGNAME:Q}/+CONTENTS > ${_PKG_DBDIR}/${PKGNAME:Q}/+CONTENTS.tmp @${MV} ${_PKG_DBDIR}/${PKGNAME:Q}/+CONTENTS.tmp ${_PKG_DBDIR}/${PKGNAME:Q}/+CONTENTS Index: pkgtools/pkg_install/Makefile =================================================================== RCS file: /cvsroot/pkgsrc/pkgtools/pkg_install/Makefile,v retrieving revision 1.195 diff -p -u -r1.195 Makefile --- pkgtools/pkg_install/Makefile 10 May 2013 00:49:00 -0000 1.195 +++ pkgtools/pkg_install/Makefile 13 May 2013 16:15:08 -0000 @@ -53,6 +53,8 @@ CHECK_PERMS= no # be rethought. USE_NATIVE_GCC= yes +.include "../../mk/bsd.prefs.mk" + .if defined(_PKGSRC_BARRIER) && empty(USE_CROSS_COMPILE:M[yY][eE][sS]) PKG_ADD_CMD= ${WRKSRC}/add/pkg_add PKG_CREATE_CMD= ${WRKSRC}/create/pkg_create @@ -88,8 +90,6 @@ MESSAGE_SUBST+= PKGVULNDIR=${PKG_DBDIR: MAKE_FLAGS+= ACTIVE_CC=clang .endif -.include "../../mk/bsd.prefs.mk" - VERSION!= ${AWK} '/PKGTOOLS_VERSION/ {print $$3}' \ ${FILESDIR}/lib/version.h Index: pkgtools/pkg_install/files/add/add.h =================================================================== RCS file: /cvsroot/pkgsrc/pkgtools/pkg_install/files/add/add.h,v retrieving revision 1.19 diff -p -u -r1.19 add.h --- pkgtools/pkg_install/files/add/add.h 14 Sep 2010 22:26:18 -0000 1.19 +++ pkgtools/pkg_install/files/add/add.h 13 May 2013 16:15:08 -0000 @@ -26,7 +26,7 @@ #define _INST_ADD_H_INCLUDE extern char *Destdir; -extern char *OverrideMachine; +extern char *OverrideMachinePlatform; extern char *Prefix; extern char *View; extern char *Viewbase; Index: pkgtools/pkg_install/files/add/main.c =================================================================== RCS file: /cvsroot/pkgsrc/pkgtools/pkg_install/files/add/main.c,v retrieving revision 1.27 diff -p -u -r1.27 main.c --- pkgtools/pkg_install/files/add/main.c 14 Sep 2010 22:26:18 -0000 1.27 +++ pkgtools/pkg_install/files/add/main.c 13 May 2013 16:15:08 -0000 @@ -42,7 +42,7 @@ __RCSID("$NetBSD: main.c,v 1.27 2010/09/ static char Options[] = "AC:DIK:LP:RVW:fhm:np:t:Uuvw:"; char *Destdir = NULL; -char *OverrideMachine = NULL; +char *OverrideMachinePlatform = NULL; char *Prefix = NULL; char *View = NULL; char *Viewbase = NULL; @@ -67,7 +67,7 @@ usage(void) { (void) fprintf(stderr, "%s\n%s\n%s\n%s\n", "usage: pkg_add [-AfhILnRuVv] [-C config] [-P destdir] [-K pkg_dbdir]", - " [-m machine] [-p prefix] [-s verification-type", + " [-m platform] [-p prefix] [-s verification-type", " [-W viewbase] [-w view]\n", " [[ftp|http]://[user[:password]@]host[:port]][/path/]pkg-name ..."); exit(1); @@ -121,7 +121,7 @@ main(int argc, char **argv) break; case 'm': - OverrideMachine = optarg; + OverrideMachinePlatform = optarg; break; case 'n': Index: pkgtools/pkg_install/files/add/perform.c =================================================================== RCS file: /cvsroot/pkgsrc/pkgtools/pkg_install/files/add/perform.c,v retrieving revision 1.103 diff -p -u -r1.103 perform.c --- pkgtools/pkg_install/files/add/perform.c 31 Jan 2013 10:25:30 -0000 1.103 +++ pkgtools/pkg_install/files/add/perform.c 13 May 2013 16:15:08 -0000 @@ -894,35 +894,61 @@ static int check_platform(struct pkg_task *pkg) { struct utsname host_uname; - const char *effective_arch; - int fatal; - - if (uname(&host_uname) < 0) { - if (Force) { - warnx("uname() failed, continuing."); - return 0; - } else { - warnx("uname() failed, aborting."); - return -1; + const char *opsys, *os_version, *machine_arch; + char *platform_temp = NULL, *p; + int fatal, result; + + if (OverrideMachinePlatform != NULL) { + platform_temp = xstrdup(OverrideMachinePlatform); + + p = platform_temp; + opsys = p; + + p = strchr(p, '-'); + if (p == NULL) { + warnx("invalid `-m' (machine platform): %s", + OverrideMachinePlatform); + result = -1; + goto out; + } + *p++ = '\0'; + os_version = p; + + p = strchr(p, '-'); + if (p == NULL) { + warnx("invalid `-m' (machine platform): %s", + OverrideMachinePlatform); + result = -1; + goto out; + } + *p++ = '\0'; + machine_arch = p; + } else { + if (uname(&host_uname) < 0) { + if (Force) { + warnx("uname() failed, continuing."); + return 0; + } else { + warnx("uname() failed, aborting."); + return -1; + } } - } - - normalise_platform(&host_uname); - if (OverrideMachine != NULL) - effective_arch = OverrideMachine; - else - effective_arch = MACHINE_ARCH; + normalise_platform(&host_uname); + opsys = OPSYS_NAME; + os_version = host_uname.release; + machine_arch = MACHINE_ARCH; + } /* If either the OS or arch are different, bomb */ - if (strcmp(OPSYS_NAME, pkg->buildinfo[BI_OPSYS]) || - strcmp(effective_arch, pkg->buildinfo[BI_MACHINE_ARCH]) != 0) + if (strcmp(opsys, pkg->buildinfo[BI_OPSYS]) || + strcmp(machine_arch, pkg->buildinfo[BI_MACHINE_ARCH]) != 0) fatal = 1; else fatal = 0; if (fatal || - compatible_platform(OPSYS_NAME, host_uname.release, + compatible_platform(opsys, os_version, pkg->buildinfo[BI_OS_VERSION]) != 1) { warnx("Warning: package `%s' was built for a platform:", pkg->pkgname); @@ -930,13 +956,19 @@ check_platform(struct pkg_task *pkg) pkg->buildinfo[BI_OPSYS], pkg->buildinfo[BI_MACHINE_ARCH], pkg->buildinfo[BI_OS_VERSION], - OPSYS_NAME, - effective_arch, - host_uname.release); - if (!Force && fatal) - return -1; + opsys, + machine_arch, + os_version); + if (!Force && fatal) { + result = -1; + goto out; + } } - return 0; + result = 0; + +out: if (platform_temp != NULL) + free(platform_temp); + return result; } static int