From nobody@FreeBSD.org Wed Apr 28 11:27:06 2010 Return-Path: Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 6DC81106566C for ; Wed, 28 Apr 2010 11:27:06 +0000 (UTC) (envelope-from nobody@FreeBSD.org) Received: from www.freebsd.org (www.freebsd.org [IPv6:2001:4f8:fff6::21]) by mx1.freebsd.org (Postfix) with ESMTP id 5AF618FC0A for ; Wed, 28 Apr 2010 11:27:06 +0000 (UTC) Received: from www.freebsd.org (localhost [127.0.0.1]) by www.freebsd.org (8.14.3/8.14.3) with ESMTP id o3SBR6SA039485 for ; Wed, 28 Apr 2010 11:27:06 GMT (envelope-from nobody@www.freebsd.org) Received: (from nobody@localhost) by www.freebsd.org (8.14.3/8.14.3/Submit) id o3SBR6Vi039474; Wed, 28 Apr 2010 11:27:06 GMT (envelope-from nobody) Message-Id: <201004281127.o3SBR6Vi039474@www.freebsd.org> Date: Wed, 28 Apr 2010 11:27:06 GMT From: Paul To: freebsd-gnats-submit@FreeBSD.org Subject: lang/ruby18 +nopthreads build error with WITHOUT_PTHREADS X-Send-Pr-Version: www-3.1 X-GNATS-Notify: >Number: 146112 >Category: ports >Synopsis: lang/ruby18 +nopthreads build error with WITHOUT_PTHREADS >Confidential: no >Severity: non-critical >Priority: low >Responsible: stas >State: closed >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Wed Apr 28 11:30:02 UTC 2010 >Closed-Date: Wed Apr 28 19:10:50 UTC 2010 >Last-Modified: Wed Apr 28 19:20:00 UTC 2010 >Originator: Paul >Release: FreeBSD 8.0-RELEASE >Organization: >Environment: FreeBSD hostname 8.0-RELEASE-p2 FreeBSD 8.0-RELEASE-p2 #0: Tue Jan 5 16:02:27 UTC 2010 root@i386-builder.daemonology.net:/usr/obj/usr/src/sys/GENERIC i386 >Description: While building port lang/ruby18 without pthreads error occurs: cc -I/usr/include -O2 -pipe -fno-strict-aliasing -fPIC -DRUBY_EXPORT -L. -rpath=/usr/lib:/usr/local/lib -rdynamic main.o libruby18-static.a -lrt -lcrypt -lm -L/usr/lib -rpath=/usr/lib:/usr/local/lib -o miniruby libruby18-static.a(process.o)(.text+0x1f40): In function `proc_exec_v': : undefined reference to `rb_thread_stop_timer_fake' libruby18-static.a(process.o)(.text+0x2a92): In function `rb_proc_exec': : undefined reference to `rb_thread_stop_timer_fake' *** Error code 1 full log in attachment >How-To-Repeat: cd /usr/ports/lang/ruby18 env WITHOUT_PTHREADS=yes make >Fix: Do not set WITHOUT_PTHREADS Patch attached with submission follows: # env WITHOUT_PTHREADS=yes make ===> Vulnerability check disabled, database not found ===> Found saved configuration for ruby-1.8.7.248_1,1 ===> Extracting for ruby+nopthreads-1.8.7.248_1,1 => MD5 Checksum OK for ruby/ruby-1.8.7-p248.tar.bz2. => SHA256 Checksum OK for ruby/ruby-1.8.7-p248.tar.bz2. /bin/mv /usr/ports/lang/ruby18/work/ruby-1.8.7-p248/ext/dl/h2rb /usr/ports/lang/ruby18/work/ruby-1.8.7-p248/bin/ ===> Patching for ruby+nopthreads-1.8.7.248_1,1 ===> Applying FreeBSD patches for ruby+nopthreads-1.8.7.248_1,1 /bin/rm -rf /usr/ports/lang/ruby18/work/ruby-1.8.7-p248/ext/Win32API /bin/rm -rf /usr/ports/lang/ruby18/work/ruby-1.8.7-p248/ext/win32ole /bin/mv /usr/ports/lang/ruby18/work/ruby-1.8.7-p248/ext/gdbm /usr/ports/lang/ruby18/work/ /bin/mv /usr/ports/lang/ruby18/work/ruby-1.8.7-p248/ext/iconv /usr/ports/lang/ruby18/work/ /bin/mv /usr/ports/lang/ruby18/work/ruby-1.8.7-p248/ext/tk /usr/ports/lang/ruby18/work/ ===> ruby+nopthreads-1.8.7.248_1,1 depends on file: /usr/local/bin/automake-1.10 - found ===> ruby+nopthreads-1.8.7.248_1,1 depends on file: /usr/local/bin/autoconf-2.62 - found ===> Configuring for ruby+nopthreads-1.8.7.248_1,1 /usr/bin/touch /usr/ports/lang/ruby18/work/ruby-1.8.7-p248/configure configure.in:239: warning: AC_COMPILE_IFELSE was called before AC_USE_SYSTEM_EXTENSIONS ./../lib/autoconf/specific.m4:385: AC_USE_SYSTEM_EXTENSIONS is expanded from... ./../lib/autoconf/specific.m4:456: AC_MINIX is expanded from... configure.in:239: the top level configure.in:239: warning: AC_RUN_IFELSE was called before AC_USE_SYSTEM_EXTENSIONS configure.in:239: warning: AC_COMPILE_IFELSE was called before AC_USE_SYSTEM_EXTENSIONS ./../lib/autoconf/specific.m4:385: AC_USE_SYSTEM_EXTENSIONS is expanded from... ./../lib/autoconf/specific.m4:456: AC_MINIX is expanded from... configure.in:239: the top level configure.in:239: warning: AC_RUN_IFELSE was called before AC_USE_SYSTEM_EXTENSIONS checking build system type... i386-portbld-freebsd8 checking host system type... i386-portbld-freebsd8 checking target system type... i386-portbld-freebsd8 checking for C compiler default output file name... a.out checking whether the C compiler works... yes checking whether we are cross compiling... no checking for suffix of executables... checking for suffix of object files... o checking whether we are using the GNU C compiler... yes checking whether cc accepts -g... yes checking for cc option to accept ISO C89... none needed checking how to run the C preprocessor... cc -E checking for grep that handles long lines and -e... /usr/bin/grep checking for egrep... /usr/bin/grep -E checking whether cc needs -traditional... no checking whether the linker is GNU ld... yes checking whether cc -E accepts -o... yes checking for bison... bison -y checking for ranlib... ranlib checking for ar... ar checking for as... as checking whether ln -s works... yes checking whether make sets $(MAKE)... yes checking for a BSD-compatible install... /usr/bin/install -c -o root -g wheel checking for ANSI C header files... yes checking for sys/types.h... yes checking for sys/stat.h... yes checking for stdlib.h... yes checking for string.h... yes checking for memory.h... yes checking for strings.h... yes checking for inttypes.h... yes checking for stdint.h... yes checking for unistd.h... yes checking minix/config.h usability... no checking minix/config.h presence... no checking for minix/config.h... no checking whether it is safe to define __EXTENSIONS__... yes checking for minix/config.h... (cached) no checking whether it is safe to define __EXTENSIONS__... (cached) yes checking for special C compiler options needed for large files... no checking for _FILE_OFFSET_BITS value needed for large files... no checking for long long... yes checking for off_t... yes checking size of int... 4 checking size of short... 2 checking size of long... 4 checking size of long long... 8 checking size of __int64... 0 checking size of off_t... 8 checking size of void*... 4 checking size of float... 4 checking size of double... 8 checking size of time_t... 4 checking for pid_t... yes checking for gid_t... yes checking for uid_t... yes checking for prototypes... yes checking token paste string... ansi checking for variable length prototypes and stdarg.h... yes checking for noreturn function attribute... __attribute__ ((noreturn)) x checking for noinline function attribute... __attribute__ ((noinline)) x checking for RUBY_EXTERN... no checking whether sys_nerr is declared... yes checking whether -lxpg4 has to be linked... no checking for crypt in -lcrypt... yes checking for dlopen in -ldl... no checking for shl_load in -ldld... no checking for clock_gettime in -lrt... yes checking for dirent.h that defines DIR... yes checking for library containing opendir... none required checking for ANSI C header files... (cached) yes checking for sys/wait.h that is POSIX.1 compatible... yes checking for stdlib.h... (cached) yes checking for string.h... (cached) yes checking for unistd.h... (cached) yes checking limits.h usability... yes checking limits.h presence... yes checking for limits.h... yes checking sys/file.h usability... yes checking sys/file.h presence... yes checking for sys/file.h... yes checking sys/ioctl.h usability... yes checking sys/ioctl.h presence... yes checking for sys/ioctl.h... yes checking sys/syscall.h usability... yes checking sys/syscall.h presence... yes checking for sys/syscall.h... yes checking fcntl.h usability... yes checking fcntl.h presence... yes checking for fcntl.h... yes checking sys/fcntl.h usability... yes checking sys/fcntl.h presence... yes checking for sys/fcntl.h... yes checking sys/select.h usability... yes checking sys/select.h presence... yes checking for sys/select.h... yes checking sys/time.h usability... yes checking sys/time.h presence... yes checking for sys/time.h... yes checking sys/times.h usability... yes checking sys/times.h presence... yes checking for sys/times.h... yes checking sys/param.h usability... yes checking sys/param.h presence... yes checking for sys/param.h... yes checking syscall.h usability... no checking syscall.h presence... no checking for syscall.h... no checking pwd.h usability... yes checking pwd.h presence... yes checking for pwd.h... yes checking grp.h usability... yes checking grp.h presence... yes checking for grp.h... yes checking a.out.h usability... yes checking a.out.h presence... yes checking for a.out.h... yes checking utime.h usability... yes checking utime.h presence... yes checking for utime.h... yes checking for memory.h... (cached) yes checking direct.h usability... no checking direct.h presence... no checking for direct.h... no checking sys/resource.h usability... yes checking sys/resource.h presence... yes checking for sys/resource.h... yes checking sys/mkdev.h usability... no checking sys/mkdev.h presence... no checking for sys/mkdev.h... no checking sys/utime.h usability... no checking sys/utime.h presence... no checking for sys/utime.h... no checking netinet/in_systm.h usability... yes checking netinet/in_systm.h presence... yes checking for netinet/in_systm.h... yes checking float.h usability... yes checking float.h presence... yes checking for float.h... yes checking ieeefp.h usability... yes checking ieeefp.h presence... yes checking for ieeefp.h... yes checking pthread.h usability... yes checking pthread.h presence... yes checking for pthread.h... yes checking ucontext.h usability... yes checking ucontext.h presence... yes checking for ucontext.h... yes checking intrinsics.h usability... no checking intrinsics.h presence... no checking for intrinsics.h... no checking size of rlim_t... 8 checking for size_t... yes checking for struct stat.st_blksize... yes checking for struct stat.st_blocks... yes checking for struct stat.st_rdev... yes checking for uid_t in sys/types.h... (cached) yes checking type of array argument to getgroups... gid_t checking return type of signal handlers... void checking for working alloca.h... no checking for alloca... yes checking for working memcmp... yes checking for _LARGEFILE_SOURCE value needed for large files... no checking for ftello... yes checking for broken erfc of glibc-2.3.6 on IA64... no checking for dup2... yes checking for memmove... yes checking for strcasecmp... yes checking for strncasecmp... yes checking for strerror... yes checking for strftime... yes checking for strchr... yes checking for strstr... yes checking for strtoul... yes checking for crypt... yes checking for flock... yes checking for vsnprintf... yes checking for isnan... yes checking for finite... yes checking for isinf... yes checking for hypot... yes checking for acosh... yes checking for erf... yes checking for fmod... yes checking for killpg... yes checking for wait4... yes checking for waitpid... yes checking for syscall... yes checking for chroot... yes checking for fsync... yes checking for getcwd... yes checking for eaccess... yes checking for truncate... yes checking for ftruncate... yes checking for chsize... no checking for times... yes checking for utimes... yes checking for fcntl... yes checking for lockf... yes checking for lstat... yes checking for symlink... yes checking for link... yes checking for readlink... yes checking for setitimer... yes checking for setruid... yes checking for seteuid... yes checking for setreuid... yes checking for setresuid... yes checking for setproctitle... yes checking for setrgid... yes checking for setegid... yes checking for setregid... yes checking for setresgid... yes checking for issetugid... yes checking for pause... yes checking for lchown... yes checking for lchmod... yes checking for getpgrp... yes checking for setpgrp... yes checking for getpgid... yes checking for setpgid... yes checking for initgroups... yes checking for getgroups... yes checking for setgroups... yes checking for getpriority... yes checking for getrlimit... yes checking for setrlimit... yes checking for sysconf... yes checking for group_member... no checking for dlopen... yes checking for sigprocmask... yes checking for sigaction... yes checking for sigsetjmp... yes checking for _setjmp... yes checking for _longjmp... yes checking for setsid... yes checking for telldir... yes checking for seekdir... yes checking for fchmod... yes checking for mktime... yes checking for timegm... yes checking for gettimeofday... yes checking for cosh... yes checking for sinh... yes checking for tanh... yes checking for round... yes checking for setuid... yes checking for setgid... yes checking for setenv... yes checking for unsetenv... yes checking for __builtin_setjmp... no checking for setjmp type... _setjmp checking whether struct tm is in sys/time.h or time.h... time.h checking for struct tm.tm_zone... yes checking for struct tm.tm_gmtoff... yes checking for external int daylight... no checking for external timezone... no checking for external altzone... no checking for timezone... yes checking whether timezone requires zero arguments... no checking for negative time_t for gmtime(3)... yes checking whether getpgrp requires zero arguments... yes checking whether setpgrp takes no argument... no checking whether byte ordering is bigendian... no checking for an ANSI C-conforming const... yes checking whether char is unsigned... no checking for inline... inline checking for working volatile... yes checking whether right shift preserve sign bit... yes checking read count field in FILE structures... _r checking read buffer ptr field in FILE structures... _p checking whether need to seek between R/W... yes checking whether st_ino is huge... no checking whether _SC_CLK_TCK is supported... yes checking stack growing direction... (cached) -1 checking whether ELF binaries are produced... yes checking whether OS depend dynamic link works... yes checking for nroff... /usr/bin/nroff creating config.h configure: creating ./config.status config.status: creating Makefile ===> Building for ruby+nopthreads-1.8.7.248_1,1 cc -I/usr/include -O2 -pipe -fno-strict-aliasing -fPIC -DRUBY_EXPORT -I. -I. -I/usr/include -c array.c cc -I/usr/include -O2 -pipe -fno-strict-aliasing -fPIC -DRUBY_EXPORT -I. -I. -I/usr/include -c bignum.c cc -I/usr/include -O2 -pipe -fno-strict-aliasing -fPIC -DRUBY_EXPORT -I. -I. -I/usr/include -c class.c cc -I/usr/include -O2 -pipe -fno-strict-aliasing -fPIC -DRUBY_EXPORT -I. -I. -I/usr/include -c compar.c cc -I/usr/include -O2 -pipe -fno-strict-aliasing -fPIC -DRUBY_EXPORT -I. -I. -I/usr/include -c dir.c cc -I/usr/include -O2 -pipe -fno-strict-aliasing -fPIC -DRUBY_EXPORT -I. -I. -I/usr/include -c dln.c cc -I/usr/include -O2 -pipe -fno-strict-aliasing -fPIC -DRUBY_EXPORT -I. -I. -I/usr/include -c enum.c cc -I/usr/include -O2 -pipe -fno-strict-aliasing -fPIC -DRUBY_EXPORT -I. -I. -I/usr/include -c enumerator.c cc -I/usr/include -O2 -pipe -fno-strict-aliasing -fPIC -DRUBY_EXPORT -I. -I. -I/usr/include -c error.c cc -I/usr/include -O2 -pipe -fno-strict-aliasing -fPIC -DRUBY_EXPORT -I. -I. -I/usr/include -c eval.c eval.c: In function 'rb_eval_string_wrap': eval.c:1744: warning: assignment discards qualifiers from pointer target type eval.c: In function 'rb_eval_cmd': eval.c:1885: warning: assignment discards qualifiers from pointer target type eval.c: In function 'call_trace_func': eval.c:2736: warning: assignment discards qualifiers from pointer target type eval.c: In function 'rb_raise_jump': eval.c:4770: warning: assignment discards qualifiers from pointer target type eval.c: In function 'method_missing': eval.c:5736: warning: assignment discards qualifiers from pointer target type eval.c: In function 'rb_call0': eval.c:5894: warning: assignment discards qualifiers from pointer target type eval.c: In function 'rb_f_eval': eval.c:6696: warning: assignment discards qualifiers from pointer target type eval.c: In function 'exec_under': eval.c:6720: warning: assignment discards qualifiers from pointer target type eval.c: In function 'rb_load': eval.c:7036: warning: assignment discards qualifiers from pointer target type eval.c: In function 'call_end_proc': eval.c:8066: warning: assignment discards qualifiers from pointer target type eval.c: In function 'rb_f_END': eval.c:8079: warning: assignment discards qualifiers from pointer target type eval.c: In function 'mproc': eval.c:9856: warning: assignment discards qualifiers from pointer target type cc -I/usr/include -O2 -pipe -fno-strict-aliasing -fPIC -DRUBY_EXPORT -I. -I. -I/usr/include -c file.c cc -I/usr/include -O2 -pipe -fno-strict-aliasing -fPIC -DRUBY_EXPORT -I. -I. -I/usr/include -c gc.c cc -I/usr/include -O2 -pipe -fno-strict-aliasing -fPIC -DRUBY_EXPORT -I. -I. -I/usr/include -c hash.c cc -I/usr/include -O2 -pipe -fno-strict-aliasing -fPIC -DRUBY_EXPORT -I. -I. -I/usr/include -c inits.c cc -I/usr/include -O2 -pipe -fno-strict-aliasing -fPIC -DRUBY_EXPORT -I. -I. -I/usr/include -c io.c cc -I/usr/include -O2 -pipe -fno-strict-aliasing -fPIC -DRUBY_EXPORT -I. -I. -I/usr/include -c marshal.c cc -I/usr/include -O2 -pipe -fno-strict-aliasing -fPIC -DRUBY_EXPORT -I. -I. -I/usr/include -c math.c cc -I/usr/include -O2 -pipe -fno-strict-aliasing -fPIC -DRUBY_EXPORT -I. -I. -I/usr/include -c numeric.c cc -I/usr/include -O2 -pipe -fno-strict-aliasing -fPIC -DRUBY_EXPORT -I. -I. -I/usr/include -c object.c cc -I/usr/include -O2 -pipe -fno-strict-aliasing -fPIC -DRUBY_EXPORT -I. -I. -I/usr/include -c pack.c cc -I/usr/include -O2 -pipe -fno-strict-aliasing -fPIC -DRUBY_EXPORT -I. -I. -I/usr/include -c parse.c cc -I/usr/include -O2 -pipe -fno-strict-aliasing -fPIC -DRUBY_EXPORT -I. -I. -I/usr/include -c process.c cc -I/usr/include -O2 -pipe -fno-strict-aliasing -fPIC -DRUBY_EXPORT -I. -I. -I/usr/include -c prec.c cc -I/usr/include -O2 -pipe -fno-strict-aliasing -fPIC -DRUBY_EXPORT -I. -I. -I/usr/include -c random.c cc -I/usr/include -O2 -pipe -fno-strict-aliasing -fPIC -DRUBY_EXPORT -I. -I. -I/usr/include -c range.c cc -I/usr/include -O2 -pipe -fno-strict-aliasing -fPIC -DRUBY_EXPORT -I. -I. -I/usr/include -c re.c cc -I/usr/include -O2 -pipe -fno-strict-aliasing -fPIC -DRUBY_EXPORT -I. -I. -I/usr/include -c regex.c cc -I/usr/include -O2 -pipe -fno-strict-aliasing -fPIC -DRUBY_EXPORT -I. -I. -I/usr/include -c ruby.c cc -I/usr/include -O2 -pipe -fno-strict-aliasing -fPIC -DRUBY_EXPORT -I. -I. -I/usr/include -c signal.c cc -I/usr/include -O2 -pipe -fno-strict-aliasing -fPIC -DRUBY_EXPORT -I. -I. -I/usr/include -c sprintf.c cc -I/usr/include -O2 -pipe -fno-strict-aliasing -fPIC -DRUBY_EXPORT -I. -I. -I/usr/include -c st.c cc -I/usr/include -O2 -pipe -fno-strict-aliasing -fPIC -DRUBY_EXPORT -I. -I. -I/usr/include -c string.c cc -I/usr/include -O2 -pipe -fno-strict-aliasing -fPIC -DRUBY_EXPORT -I. -I. -I/usr/include -c struct.c cc -I/usr/include -O2 -pipe -fno-strict-aliasing -fPIC -DRUBY_EXPORT -I. -I. -I/usr/include -c time.c cc -I/usr/include -O2 -pipe -fno-strict-aliasing -fPIC -DRUBY_EXPORT -I. -I. -I/usr/include -c util.c cc -I/usr/include -O2 -pipe -fno-strict-aliasing -fPIC -DRUBY_EXPORT -I. -I. -I/usr/include -c variable.c cc -I/usr/include -O2 -pipe -fno-strict-aliasing -fPIC -DRUBY_EXPORT -I. -I. -I/usr/include -c version.c In file included from version.c:14: version.h:29:41: warning: no newline at end of file cc -I/usr/include -O2 -pipe -fno-strict-aliasing -fPIC -DRUBY_EXPORT -I. -I. -I/usr/include -c dmyext.c ar rcu libruby18-static.a array.o bignum.o class.o compar.o dir.o dln.o enum.o enumerator.o error.o eval.o file.o gc.o hash.o inits.o io.o marshal.o math.o numeric.o object.o pack.o parse.o process.o prec.o random.o range.o re.o regex.o ruby.o signal.o sprintf.o st.o string.o struct.o time.o util.o variable.o version.o dmyext.o cc -I/usr/include -O2 -pipe -fno-strict-aliasing -fPIC -DRUBY_EXPORT -I. -I. -I/usr/include -c main.c cc -I/usr/include -O2 -pipe -fno-strict-aliasing -fPIC -DRUBY_EXPORT -L. -rpath=/usr/lib:/usr/local/lib -rdynamic main.o libruby18-static.a -lrt -lcrypt -lm -L/usr/lib -rpath=/usr/lib:/usr/local/lib -o miniruby libruby18-static.a(process.o)(.text+0x1f40): In function `proc_exec_v': : undefined reference to `rb_thread_stop_timer_fake' libruby18-static.a(process.o)(.text+0x2a92): In function `rb_proc_exec': : undefined reference to `rb_thread_stop_timer_fake' *** Error code 1 Stop in /usr/ports/lang/ruby18/work/ruby-1.8.7-p248. *** Error code 1 Stop in /usr/ports/lang/ruby18. *** Error code 1 Stop in /usr/ports/lang/ruby18. >Release-Note: >Audit-Trail: Responsible-Changed-From-To: freebsd-ports-bugs->stas Responsible-Changed-By: edwin Responsible-Changed-When: Wed Apr 28 11:30:12 UTC 2010 Responsible-Changed-Why: Over to maintainer (via the GNATS Auto Assign Tool) http://www.freebsd.org/cgi/query-pr.cgi?pr=146112 From: Paul Shepel To: bug-followup@FreeBSD.org, Paul.Shepel@gmail.com Cc: Subject: Re: ports/146112: lang/ruby18 nopthreads build error with WITHOUT_PTHREADS Date: Wed, 28 Apr 2010 14:52:47 +0300 Also this error appears in FreeBSD 7.3 and 6.4, but in 6.4 ruby can't be built with pthreads State-Changed-From-To: open->closed State-Changed-By: stas State-Changed-When: Wed Apr 28 19:10:48 UTC 2010 State-Changed-Why: Fixed. http://www.freebsd.org/cgi/query-pr.cgi?pr=146112 From: dfilter@FreeBSD.ORG (dfilter service) To: bug-followup@FreeBSD.org Cc: Subject: Re: ports/146112: commit references a PR Date: Wed, 28 Apr 2010 19:10:36 +0000 (UTC) stas 2010-04-28 19:10:28 UTC FreeBSD ports repository Modified files: lang/ruby18/files patch-process.c Log: - Fix build without pthreads. PR: ports/146112 Reported by: Paul Revision Changes Path 1.4 +7 -4 ports/lang/ruby18/files/patch-process.c _______________________________________________ cvs-all@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/cvs-all To unsubscribe, send any mail to "cvs-all-unsubscribe@freebsd.org" >Unformatted: