Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

64 bit build failure on Solaris 9 #6902

Closed
p5pRT opened this issue Nov 7, 2003 · 11 comments
Closed

64 bit build failure on Solaris 9 #6902

p5pRT opened this issue Nov 7, 2003 · 11 comments

Comments

@p5pRT
Copy link

p5pRT commented Nov 7, 2003

Migrated from rt.perl.org#24439 (status was 'resolved')

Searchable as RT24439$

@p5pRT
Copy link
Author

p5pRT commented Nov 7, 2003

From djberge@qwest.com

Hi,

I can't seem to get Solaris to build as 64 bit.

uname -a
SunOS sp5wd-b1 5.9 Generic sun4u sparc SUNW,Sun-Blade-100

gcc -v
Reading specs from
/usr/local/lib/gcc-lib/sparc-sun-solaris2.9/3.3.2/specs
Configured with​: ../configure --with-as=/usr/ccs/bin/as
--with-ld=/usr/ccs/bin/ld --disable-nls
Thread model​: posix
gcc version 3.3.2

Sun's ld, as and ar (i.e. /usr/ccs/... is first in my PATH)

Built with sh Configure -Dusethreads -Duse64bitall -Dcc=gcc

I also tried explicitly adding -B/usr/ccs/bin, *just in case*

Configure seems to work smoothly, although I end up with 2 makefiles​:

make​: Warning​: Both `makefile' and `Makefile' exist

Hmm...strange. Anyway, I then performed make. Did fine until I got
here​:

CCCMD = gcc -B/usr/ccs/bin/ -DPERL_CORE -c -D_REENTRANT -mcpu=v9 -m64
-Wa,-xarch=v9 -fno-strict-aliasing -I/usr/local/include
-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -O -Wall
rm -f libperl.a
/usr/ccs/bin/ar rcu libperl.a perl.o gv.o toke.o perly.o op.o pad.o
regcomp.o dump.o util.o mg.o reentr.o hv.o av.o run.o pp_hot.o sv.o pp.o
scope.o pp_ctl.o pp_sys.o doop.o doio.o regexec.o utf8.o taint.o deb.o
universal.o xsutils.o globals.o perlio.o perlapi.o numeric.o locale.o
pp_pack.o pp_sort.o
rm -f opmini.c
cp op.c opmini.c
`sh cflags "optimize='-O'" opmini.o` -DPERL_EXTERNAL_GLOB opmini.c
  CCCMD = gcc -B/usr/ccs/bin/ -DPERL_CORE -c -D_REENTRANT
-mcpu=v9 -m64 -Wa,-xarch=v9 -fno-strict-aliasing -I/usr/local/include
-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -O -Wall
rm -f opmini.c
gcc -B/usr/ccs/bin/ -L/usr/lib/sparcv9 -L/usr/local/lib -o miniperl \
  miniperlmain.o opmini.o libperl.a -lsocket -lnsl -ldl -lm -lpthread
-lc
ld​: fatal​: file miniperlmain.o​: wrong ELF class​: ELFCLASS64
ld​: fatal​: File processing errors. No output written to miniperl
collect2​: ld returned 1 exit status
*** Error code 1
make​: Fatal error​: Command failed for target `miniperl'

I read through the README.solaris, and messed around with the Makefile
some, changing the -L/usr/local/lib to -L/usr/ccs/lib, but that didn't
help.

Any ideas? I've attached a copy of the Makefile as well to help. I
couldn't find a config.log anywhere.

Regards,

Dan

Makefile​:

# Makefile.SH
# This file is derived from Makefile.SH. Any changes made here will
# be lost the next time you run Configure.
# Makefile is used to generate makefile. The only difference
# is that makefile has the dependencies filled in at the end.
#
#
# I now supply perly.c with the kits, so don't remake perly.c without
byacc
BYACC = byacc
CC = gcc -B/usr/ccs/bin/
LD = gcc -B/usr/ccs/bin/

LDFLAGS = -L/usr/lib/sparcv9 -L/usr/ccs/lib
CLDFLAGS = -L/usr/lib/sparcv9 -L/usr/ccs/lib

mallocsrc =
mallocobj =
LNS = /usr/local/bin/ln -s
# NOTE​: some systems don't grok "cp -f". XXX Configure test needed?
CPS = cp
RMS = rm -f
ranlib = :

# The following are mentioned only to make metaconfig include the
# appropriate questions in Configure. If you want to change these,
# edit config.sh instead, or specify --man1dir=/wherever on
# installman commandline.
bin = /usr/local/bin
scriptdir = /usr/local/bin
shrpdir = /usr/local/lib/perl5/5.8.2/sun4-solaris-thread-multi-64/CORE
privlib = /usr/local/lib/perl5/5.8.2
man1dir = /usr/local/man/man1
man1ext = 1
man3dir = /usr/local/man/man3
man3ext = 3

# The following are used to build and install shared libraries for
# dynamic loading.
LDDLFLAGS = -G -L/usr/lib/sparcv9 -L/usr/ccs/lib
SHRPLDFLAGS = $(LDDLFLAGS)
CCDLFLAGS =
DLSUFFIX = .so
PLDLFLAGS =
LIBPERL = libperl.a
LLIBPERL= $(LIBPERL)
SHRPENV =

# Static targets are ordinarily built without CCCDLFLAGS. However,
# if building a shared libperl.so that might later be linked into
# another application, then it might be appropriate to also build static
# extensions (usually just DynaLoader) with relocatable code (e.g. -fPIC
# for GNU cc). This is handled by ext/util/make_ext.
STATIC = static

# The following is used to include the current directory in
# the dynamic loader path you are building a shared libperl.
LDLIBPTH =

dynamic_ext = lib/auto/B/B.so lib/auto/ByteLoader/ByteLoader.so
lib/auto/Cwd/Cwd.so lib/auto/Data/Dumper/Dumper.so
lib/auto/Devel/DProf/DProf.so lib/auto/Devel/PPPort/PPPort.so
lib/auto/Devel/Peek/Peek.so lib/auto/Digest/MD5/MD5.so
lib/auto/Encode/Encode.so lib/auto/Fcntl/Fcntl.so
lib/auto/File/Glob/Glob.so lib/auto/Filter/Util/Call/Call.so
lib/auto/I18N/Langinfo/Langinfo.so lib/auto/IO/IO.so
lib/auto/IPC/SysV/SysV.so lib/auto/List/Util/Util.so
lib/auto/MIME/Base64/Base64.so lib/auto/NDBM_File/NDBM_File.so
lib/auto/ODBM_File/ODBM_File.so lib/auto/Opcode/Opcode.so
lib/auto/POSIX/POSIX.so lib/auto/PerlIO/encoding/encoding.so
lib/auto/PerlIO/scalar/scalar.so lib/auto/PerlIO/via/via.so
lib/auto/SDBM_File/SDBM_File.so lib/auto/Socket/Socket.so
lib/auto/Storable/Storable.so lib/auto/Sys/Hostname/Hostname.so
lib/auto/Sys/Syslog/Syslog.so lib/auto/Time/HiRes/HiRes.so
lib/auto/Unicode/Normalize/Normalize.so lib/auto/XS/APItest/APItest.so
lib/auto/XS/Typemap/Typemap.so lib/auto/attrs/attrs.so lib/auto/re/re.so
lib/auto/threads/threads.so lib/auto/threads/shared/shared.so
static_ext =
nonxs_ext = ext/Errno/pm_to_blib
ext = $(dynamic_ext) $(static_ext) $(nonxs_ext)
DYNALOADER = lib/auto/DynaLoader/DynaLoader$(LIB_EXT)

libs = -lsocket -lnsl -ldl -lm -lpthread -lc

public = perl$(EXE_EXT) utilities translators

shellflags =

# This is set to MAKE=make if your make command doesn't
# do it for you.
#

# Mention gmake here so it gets probed for by Configure.

# These variables may need to be manually set for non-Unix systems.
AR = /usr/ccs/bin/ar
EXE_EXT =
LIB_EXT = .a
OBJ_EXT = .o
PATH_SEP = :

FIRSTMAKEFILE = makefile

# Any special object files needed by this architecture, e.g. os2/os2.obj
ARCHOBJS =

.SUFFIXES​: .c $(OBJ_EXT) .i .s

# grrr
SHELL = /bin/sh

# how to tr(anslate) newlines
TRNL = '\n'

OPTIMIZE = -O

EXTRAS =

INSTALLPREFIXEXP = /usr/local

CCCMD = `sh $(shellflags) cflags "optimize='$(OPTIMIZE)'" $@​`

CCCMDSRC = `sh $(shellflags) cflags "optimize='$(OPTIMIZE)'" $<`

private = preplibrary lib/Config.pm lib/ExtUtils/Miniperl.pm

# Files to be built with variable substitution before miniperl
# is available.
sh = Makefile.SH cflags.SH config_h.SH makeaperl.SH makedepend.SH \
  makedir.SH myconfig.SH writemain.SH pod/Makefile.SH

shextract = Makefile cflags config.h makeaperl makedepend \
  makedir myconfig writemain pod/Makefile

# Files to be built with variable substitution after miniperl is
# available. Dependencies handled manually below (for now).

pl = pod/pod2html.PL pod/pod2latex.PL pod/pod2man.PL pod/pod2text.PL \
  pod/pod2usage.PL pod/podchecker.PL pod/podselect.PL

# lib/lib.pm is not listed here because it has a rule of its own.
plextract = pod/pod2html pod/pod2latex pod/pod2man pod/pod2text \
  pod/pod2usage pod/podchecker pod/podselect

addedbyconf = UU $(shextract) $(plextract) lib/lib.pm pstruct

h1 = EXTERN.h INTERN.h XSUB.h av.h config.h cop.h cv.h dosish.h
h2 = embed.h form.h gv.h handy.h hv.h keywords.h mg.h op.h opcode.h
h3 = pad.h patchlevel.h perl.h perlapi.h perly.h pp.h proto.h regcomp.h
h4 = regexp.h scope.h sv.h unixish.h util.h iperlsys.h thread.h
h5 = utf8.h warnings.h
h = $(h1) $(h2) $(h3) $(h4) $(h5)

c1 = $(mallocsrc) av.c scope.c op.c doop.c doio.c dump.c hv.c mg.c
reentr.c
c2 = perl.c perly.c pp.c pp_hot.c pp_ctl.c pp_sys.c regcomp.c regexec.c
utf8.c
c3 = gv.c sv.c taint.c toke.c util.c deb.c run.c universal.c xsutils.c
pad.c
c4 = globals.c perlio.c perlapi.c numeric.c locale.c pp_pack.c pp_sort.c

c = $(c1) $(c2) $(c3) $(c4) miniperlmain.c perlmain.c

obj1 = $(mallocobj) gv$(OBJ_EXT) toke$(OBJ_EXT) perly$(OBJ_EXT)
op$(OBJ_EXT) pad$(OBJ_EXT) regcomp$(OBJ_EXT) dump$(OBJ_EXT)
util$(OBJ_EXT) mg$(OBJ_EXT) reentr$(OBJ_EXT)
obj2 = hv$(OBJ_EXT) av$(OBJ_EXT) run$(OBJ_EXT) pp_hot$(OBJ_EXT)
sv$(OBJ_EXT) pp$(OBJ_EXT) scope$(OBJ_EXT) pp_ctl$(OBJ_EXT)
pp_sys$(OBJ_EXT)
obj3 = doop$(OBJ_EXT) doio$(OBJ_EXT) regexec$(OBJ_EXT) utf8$(OBJ_EXT)
taint$(OBJ_EXT) deb$(OBJ_EXT) universal$(OBJ_EXT) xsutils$(OBJ_EXT)
globals$(OBJ_EXT) perlio$(OBJ_EXT) perlapi$(OBJ_EXT) numeric$(OBJ_EXT)
locale$(OBJ_EXT) pp_pack$(OBJ_EXT) pp_sort$(OBJ_EXT)

obj = $(obj1) $(obj2) $(obj3) $(ARCHOBJS)

lintflags = -hbvxac

.c$(OBJ_EXT)​:
  $(CCCMD) $(PLDLFLAGS) $*.c

.c.i​:
  $(CCCMDSRC) -E $*.c > $*.i

.c.s​:
  $(CCCMDSRC) -S $*.c

all​: $(FIRSTMAKEFILE) miniperl$(EXE_EXT) extra.pods $(private) $(public)
$(dynamic_ext) $(nonxs_ext) extras.make
  @​echo " ";
  @​echo " Everything is up to date. Type '$(MAKE) test' to run
test suite."

.PHONY​: all compile translators utilities

compile​: all
  echo "testing compilation" > testcompile;
  cd utils; $(MAKE) compile;
  cd x2p; $(MAKE) compile;
  cd pod; $(MAKE) compile;

translators​: miniperl$(EXE_EXT) lib/Config.pm FORCE
  @​echo " "; echo " Making x2p stuff"; cd x2p; $(LDLIBPTH)
$(MAKE) all

utilities​: miniperl$(EXE_EXT) lib/Config.pm $(plextract) lib/lib.pm
FORCE
  @​echo " "; echo " Making utilities"; cd utils; $(LDLIBPTH)
$(MAKE) all

# This is now done by installman only if you actually want the man
pages.
# @​echo " "; echo " Making docs"; cd pod; $(MAKE) all;

# Phony target to force checking subdirectories.
# Apparently some makes require an action for the FORCE target.
.PHONY​: FORCE
FORCE​:
  @​sh -c true

# We do a copy of the op.c instead of a symlink because gcc gets huffy
# if we have a symlink forest to another disk (it complains about too
many
# levels of symbolic links, even if we have only two)

opmini$(OBJ_EXT)​: op.c config.h
  $(RMS) opmini.c
  $(CPS) op.c opmini.c
  $(CCCMD) $(PLDLFLAGS) -DPERL_EXTERNAL_GLOB opmini.c
  $(RMS) opmini.c

miniperlmain$(OBJ_EXT)​: miniperlmain.c patchlevel.h
  $(CCCMD) $(PLDLFLAGS) $*.c

perlmain.c​: miniperlmain.c config.sh $(FIRSTMAKEFILE)
  sh writemain $(DYNALOADER) $(static_ext) > writemain.tmp
  sh mv-if-diff writemain.tmp perlmain.c

perlmain$(OBJ_EXT)​: perlmain.c
  $(CCCMD) $(PLDLFLAGS) $*.c

# The file ext.libs is a list of libraries that must be linked in
# for static extensions, e.g. -lm -lgdbm, etc. The individual
# static extension Makefile's add to it.
ext.libs​: $(static_ext)
  -@​test -f ext.libs || touch ext.libs

$(LIBPERL)​: $&amp; perl$(OBJ_EXT) $(obj) $(LIBPERLEXPORT)
  rm -f $(LIBPERL)
  $(AR) rcu $(LIBPERL) perl$(OBJ_EXT) $(obj)
  @​$(ranlib) $(LIBPERL)

# How to build executables.

# The $& notation tells Sequent machines that it can do a parallel make,
# and is harmless otherwise.
# The miniperl -w -MExporter line is a basic cheap test to catch errors
# before make goes on to run preplibrary and then MakeMaker on
extensions.
# This is very handy because later errors are often caused by miniperl
# build problems but that's not obvious to the novice.
# The Module used here must not depend on Config or any extensions.

miniperl$(EXE_EXT)​: $&amp; miniperlmain$(OBJ_EXT) $(LIBPERL)
opmini$(OBJ_EXT)
  -@​rm -f miniperl.xok
  $(LDLIBPTH) $(CC) $(CLDFLAGS) -o miniperl \
  miniperlmain$(OBJ_EXT) opmini$(OBJ_EXT) $(LLIBPERL) $(libs)
  $(LDLIBPTH) ./miniperl -w -Ilib -MExporter -e '&lt;?&gt;' || $(MAKE)
minitest

perl$(EXE_EXT)​: $&amp; perlmain$(OBJ_EXT) $(LIBPERL) $(DYNALOADER)
$(static_ext) ext.libs $(PERLEXPORT)
  -@​rm -f miniperl.xok
  $(SHRPENV) $(LDLIBPTH) $(CC) -o perl$(PERL_SUFFIX)
$(PERL_PROFILE_LDFLAGS) $(CLDFLAGS) $(CCDLFLAGS) perlmain$(OBJ_EXT)
$(DYNALOADER) $(static_ext) $(LLIBPERL) `cat ext.libs` $(libs)

# Purify/Quantify Perls.

pureperl$(EXE_EXT)​: $&amp; perlmain$(OBJ_EXT) $(LIBPERL) $(DYNALOADER)
$(static_ext) ext.libs $(PERLEXPORT)
  $(SHRPENV) $(LDLIBPTH) purify $(CC) -o pureperl $(CLDFLAGS)
$(CCDLFLAGS) perlmain$(OBJ_EXT) $(DYNALOADER) $(static_ext) $(LLIBPERL)
`cat ext.libs` $(libs)

purecovperl$(EXE_EXT)​: $&amp; perlmain$(OBJ_EXT) $(LIBPERL) $(DYNALOADER)
$(static_ext) ext.libs $(PERLEXPORT)
  $(SHRPENV) $(LDLIBPTH) purecov $(CC) -o purecovperl $(CLDFLAGS)
$(CCDLFLAGS) perlmain$(OBJ_EXT) $(DYNALOADER) $(static_ext) $(LLIBPERL)
`cat ext.libs` $(libs)

quantperl$(EXE_EXT)​: $&amp; perlmain$(OBJ_EXT) $(LIBPERL) $(DYNALOADER)
$(static_ext) ext.libs $(PERLEXPORT)
  $(SHRPENV) $(LDLIBPTH) quantify $(CC) -o quantperl $(CLDFLAGS)
$(CCDLFLAGS) perlmain$(OBJ_EXT) $(DYNALOADER) $(static_ext) $(LLIBPERL)
`cat ext.libs` $(libs)

# Valgrind perl (currently Linux only)

perl.valgrind.config​: config.sh
  @​echo "To build perl.valgrind you must Configure -Doptimize=-g
-Uusemymalloc, checking..."
  @​$(MAKE) perl.config.dashg
  @​echo "Checking usemymalloc='n' in config.sh..."
  @​grep "^usemymalloc=" config.sh
  @​grep "^usemymalloc='n'" config.sh >/dev/null || exit 1
  @​echo "And of course you have to have valgrind..."
  valgrind ./perl -e 1 2>/dev/null || exit 1

# Third Degree Perl (Tru64 only)

perl.config.dashg​:
  @​echo "Checking optimize='-g' in config.sh..."
  @​grep "^optimize=" config.sh
  @​grep "^optimize='-g'" config.sh >/dev/null || exit 1

perl.third.config​: config.sh
  @​echo "To build perl.third you must Configure -Doptimize=-g
-Uusemymalloc, checking..."
  @​$(MAKE) perl.config.dashg
  @​echo "Checking usemymalloc='n' in config.sh..."
  @​grep "^usemymalloc=" config.sh
  @​grep "^usemymalloc='n'" config.sh >/dev/null || exit 1

perl.third​: /usr/bin/atom perl.third.config perl
  atom -tool third -L. -all -gp -toolargs="-invalid -uninit
heap+stack+copy -min 0" perl
  @​echo "Now you may run perl.third and then study perl.3log."

# Pixie Perls (Tru64 and IRIX only)

perl.pixie.config​: config.sh
  @​echo "To build perl.pixie you must Configure -Doptimize=-g,
checking..."
  @​$(MAKE) perl.config.dashg

perl.pixie.atom​: /usr/bin/atom perl
  atom -tool pixie -L. -all -toolargs="-quiet" perl

perl.pixie.irix​: perl
  pixie perl

perl.pixie​: /usr/bin/pixie perl.pixie.config perl
  if test -x /usr/bin/atom; then \
  $(MAKE) perl.pixie.atom; \
  else \
  $(MAKE) perl.pixie.irix; \
  fi
  @​echo "Now you may run perl.pixie and then run pixie."

# Gprof Perl

perl.config.dashpg​:
  @​echo "Checking optimize='-pg' in config.sh..."
  @​grep "^optimize=" config.sh
  @​grep "^optimize='.*-pg.*'" config.sh >/dev/null || exit 1

perl.gprof.config​: config.sh
  @​echo "To build perl.gprof you must Configure -Doptimize=-pg,
checking..."
  @​$(MAKE) perl.config.dashpg

perl.gprof​: /usr/bin/gprof perl.gprof.config
  @​-rm -f perl
  $(MAKE) PERL_SUFFIX=.gprof PERL_PROFILE_LDFLAGS=-pg perl
  @​echo "Now you may run perl.gprof and then run gprof
perl.gprof."

# Gcov Perl

perl.config.gcov​:
  @​echo "To build perl.gcov you must use gcc 3.0 or newer,
checking..."
  @​echo "Checking gccversion in config.sh..."
  @​grep "^gccversion=" config.sh
  @​grep "^gccversion='[3-9]\." config.sh >/dev/null || exit 1
  @​echo "To build perl.gcov you must Configure
-Dccflags=-fprofile-arcs -ftest-coverage, checking..."
  @​echo "Checking ccflags='-fprofile-arcs -ftest-coverage' in
config.sh..."
  @​grep "^ccflags=" config.sh
  @​grep "^ccflags='.*-fprofile-arcs -ftest-coverage.*'" config.sh

/dev/null || exit 1

perl.gcov​: perl.config.gcov
  @​-rm -f perl
  $(MAKE) PERL_SUFFIX=.gcov PERL_PROFILE_LDFLAGS='' perl
  @​echo "Now you may run perl.gcov and then run gcov some.c."

# Microperl. This is just a convenience thing if one happens to
# build also the full Perl and therefore the real big Makefile​:
# usually one should manually explicitly issue the below command.

.PHONY​: microperl
microperl​:
  $(MAKE) -f Makefile.micro

# This version, if specified in Configure, does ONLY those scripts which
need
# set-id emulation. Suidperl must be setuid root. It contains the
"taint"
# checks as well as the special code to validate that the script in
question
# has been invoked correctly.

suidperl$(EXE_EXT)​: $&amp; sperl$(OBJ_EXT) perlmain$(OBJ_EXT) $(LIBPERL)
$(DYNALOADER) $(static_ext) ext.libs $(PERLEXPORT)
  $(SHRPENV) $(LDLIBPTH) $(CC) -o suidperl $(CLDFLAGS)
$(CCDLFLAGS) perlmain$(OBJ_EXT) sperl$(OBJ_EXT) $(DYNALOADER)
$(static_ext) $(LLIBPERL) `cat ext.libs` $(libs)

sperl$(OBJ_EXT)​: perl.c $(h)
  $(RMS) sperl.c
  $(LNS) perl.c sperl.c
  $(CCCMD) -DIAMSUID sperl.c
  $(RMS) sperl.c

# We have to call our ./makedir because Ultrix 4.3 make can't handle the
line
# test -d lib/auto || mkdir lib/auto
# We need to autosplit in two steps because VOS can't handle so many
args
#
.PHONY​: preplibrary
preplibrary​: miniperl$(EXE_EXT) lib/Config.pm lib/lib.pm
$(PREPLIBRARY_LIBPERL)
  @​sh ./makedir lib/auto
  @​echo " AutoSplitting perl library"
  $(LDLIBPTH) ./miniperl -Ilib -e 'use AutoSplit; \
  autosplit_lib_modules(@​ARGV)' lib/*.pm
  $(LDLIBPTH) ./miniperl -Ilib -e 'use AutoSplit; \
  autosplit_lib_modules(@​ARGV)' lib/*/*.pm
  $(MAKE) lib/re.pm

# Take care to avoid modifying lib/Config.pm without reason
# (If trying to create a new port and having problems with the configpm
script,
# try 'make minitest' and/or commenting out the tests at the end of
configpm.)
lib/Config.pm​: config.sh miniperl$(EXE_EXT) configpm Porting/Glossary
  $(LDLIBPTH) ./miniperl -Ilib configpm configpm.tmp
  sh mv-if-diff configpm.tmp $@​

lib/ExtUtils/Miniperl.pm​: miniperlmain.c miniperl$(EXE_EXT) minimod.pl
lib/Config.pm
  $(LDLIBPTH) ./miniperl minimod.pl > minimod.tmp
  sh mv-if-diff minimod.tmp $@​
  -touch lib/ExtUtils/Miniperl.pm

lib/re.pm​: ext/re/re.pm
  cp ext/re/re.pm ext/re/re.tmp && sh mv-if-diff ext/re/re.tmp
lib/re.pm

$(plextract)​: miniperl$(EXE_EXT) lib/Config.pm x2p/s2p
  @​-rm -f $@​
  $(LDLIBPTH) ./miniperl -Ilib $@​.PL

x2p/s2p​: miniperl$(EXE_EXT) lib/Config.pm x2p/s2p.PL
  cd x2p; $(LDLIBPTH) $(MAKE) s2p

lib/lib.pm​: miniperl$(EXE_EXT) lib/Config.pm
  @​-rm -f $@​
  $(LDLIBPTH) ./miniperl -Ilib lib/lib_pm.PL

extra.pods​: miniperl$(EXE_EXT)
  -@​test -f extra.pods && rm -f `cat extra.pods`
  -@​rm -f extra.pods
  -@​for x in `grep -l '^=[a-z]' README.* | grep -v README.vms` ;
do \
  nx=`echo $$x | sed -e "s/README\.//"`; \
  cd pod ; $(LNS) ../$$x "perl"$$nx".pod" ; cd .. ; \
  echo "pod/perl"$$nx".pod" >> extra.pods ; \
  done
  -@​rm -f pod/perlvms.pod
  -@​test -f vms/perlvms.pod && cd pod && $(LNS) ../vms/perlvms.pod
perlvms.pod && cd .. && echo "pod/perlvms.pod" >> extra.pods

extras.make​: perl$(EXE_EXT)
  -@​test -s extras.lst && PATH=`pwd`​:${PATH} PERL5LIB=`pwd`/lib
$(LDLIBPTH) ./perl -Ilib -MCPAN -e '@​ARGV&&make(@​ARGV)' `cat extras.lst`

extras.test​: perl$(EXE_EXT)
  -@​test -s extras.lst && PATH=`pwd`​:${PATH} PERL5LIB=`pwd`/lib
$(LDLIBPTH) ./perl -Ilib -MCPAN -e '@​ARGV&&test(@​ARGV)' `cat extras.lst`

extras.install​: perl$(EXE_EXT)
  -@​test -s extras.lst && PATH=`pwd`​:${PATH} PERL5LIB=`pwd`/lib
$(LDLIBPTH) ./perl -Ilib -MCPAN -e '@​ARGV&&install(@​ARGV)' `cat
extras.lst`

.PHONY​: install install-strip install-all install-verbose install-silent
\
  no-install install.perl install.man install.html

META.yml​: Porting/makemeta Porting/Maintainers.pl
Porting/Maintainers.pm
  $(LDLIBPTH) ./miniperl -Ilib Porting/makemeta

install-strip​:
  $(MAKE) STRIPFLAGS=-s install

install install-all​:
  $(MAKE) install.perl install.man STRIPFLAGS=$(STRIPFLAGS)

install-verbose​:
  $(MAKE) install.perl install.man STRIPFLAGS=$(STRIPFLAGS)
INSTALLFLAGS=-V

install-silent​:
  $(MAKE) install.perl install.man STRIPFLAGS=$(STRIPFLAGS)
INSTALLFLAGS=-S

no-install​:
  $(MAKE) install.perl install.man STRIPFLAGS=$(STRIPFLAGS)
INSTALLFLAGS=-n

install.perl​: all installperl
  if [ -n "$(COMPILE)" ]; \
  then \
  cd utils; $(MAKE) compile; \
  cd ../x2p; $(MAKE) compile; \
  cd ../pod; $(MAKE) compile; \
  else :; \
  fi
  $(LDLIBPTH) ./perl installperl --destdir=$(DESTDIR)
$(INSTALLFLAGS) $(STRIPFLAGS)
  $(MAKE) extras.install

install.man​: all installman
  $(LDLIBPTH) ./perl installman --destdir=$(DESTDIR)
$(INSTALLFLAGS)

# XXX Experimental. Hardwired values, but useful for testing.
# Eventually Configure could ask for some of these values.
install.html​: all installhtml
  -@​test -f README.vms && cd vms && $(LNS) ../README.vms
README_vms.pod && cd ..
  $(LDLIBPTH) ./perl installhtml \
  --podroot=. --podpath=. --recurse \
  --htmldir=$(privlib)/html \
  --htmlroot=$(privlib)/html \
  --splithead=pod/perlipc \
  --splititem=pod/perlfunc \
  --libpods=perlfunc​:perlguts​:perlvar​:perlrun​:perlop \
  --verbose

# I now supply perly.c with the kits, so the following section is
# used only if you force byacc to run by saying
# make run_byacc
# Since we patch up the byacc output, the perly.fixer script needs
# to run with precisely the same version of byacc as I use. You
# normally shouldn't remake perly.[ch].

.PHONY​: check_byacc run_byacc

check_byacc​:
  @​$(BYACC) -V 2>&1 | grep 'version 1\.8\.2'

run_byacc​: FORCE check_byacc
  $(BYACC) -d perly.y
  -chmod 664 perly.c perly.h
  sh $(shellflags) ./perly.fixer y.tab.c perly.c
  sed -e 's/fprintf *( *stderr *,/PerlIO_printf(Perl_debug_log,/g'
\
  -e 's/y\.tab/perly/g' perly.c >perly.tmp && mv perly.tmp
perly.c
  sed -e '/^extern YYSTYPE yy/D' y.tab.h >yh.tmp && mv yh.tmp
y.tab.h
  cmp -s y.tab.h perly.h && rm -f y.tab.h || mv y.tab.h perly.h
  perl -i.old perlyline.pl perly.c
  chmod 664 vms/perly_c.vms vms/perly_h.vms
  perl vms/vms_yfix.pl perly.c perly.h vms/perly_c.vms
vms/perly_h.vms

# We don't want to regenerate perly.c and perly.h, but they might
# appear out-of-date after a patch is applied or a new distribution is
# made.
perly.c​: perly.y
  -@​sh -c true

perly.h​: perly.y
  -@​sh -c true

PERLYVMS = vms/perly_c.vms vms/perly_h.vms

$(PERLYVMS)​: perly.c perly.h vms/vms_yfix.pl
  perl vms/vms_yfix.pl perly.c perly.h vms/perly_c.vms
vms/perly_h.vms

# No compat3.sym here since and including the 5.004_50.
# No interp.sym since 5.005_03.
SYM = global.sym globvar.sym perlio.sym pp.sym

SYMH = perlvars.h intrpvar.h thrdvar.h

CHMOD_W = chmod +w

# The following files are generated automatically
# autodoc.pl​: pod/perlapi.pod pod/perlintern.pod
# bytecode.pl​: ext/ByteLoader/byterun.h
ext/ByteLoader/byterun.c
# ext/B/B/Asmdata.pm
# embed.pl​: proto.h embed.h embedvar.h global.sym
# perlapi.h perlapi.c
# [* embed.pl needs pp.sym generated by opcode.pl! *]
# keywords.pl​: keywords.h
# opcode.pl​: opcode.h opnames.h pp_proto.h pp.sym
# regcomp.pl​: regnodes.h
# warnings.pl​: warnings.h lib/warnings.pm
# The correct versions should be already supplied with the perl kit,
# in case you don't have perl available.
# To force them to be regenerated, run
# perl regen.pl
# with your existing copy of perl
# (make regen_headers is kept for backwards compatibility)

AUTOGEN_FILES = keywords.h opcode.h opnames.h pp_proto.h pp.sym proto.h
\
  embed.h embedvar.h global.sym \
  pod/perlintern.pod pod/perlapi.pod \
  perlapi.h perlapi.c ext/ByteLoader/byterun.h \
  ext/ByteLoader/byterun.c ext/B/B/Asmdata.pm regnodes.h \
  warnings.h lib/warnings.pm

.PHONY​: regen_headers regen_pods regen_all

regen regen_headers​: FORCE
  -perl regen.pl

regen_pods​: FORCE
  -cd pod; $(LDLIBPTH) $(MAKE) regen_pods

regen_all​: $(PERLYVMS) regen regen_pods

.PHONY​: manisort manicheck

manisort​: FORCE
  LC_ALL=C sort -fdc MANIFEST || (echo "WARNING​: re-sorting
MANIFEST"; \
  LC_ALL=C sort -fdo MANIFEST MANIFEST)

manicheck​: FORCE
  perl Porting/manicheck

# Extensions​:
# Names added to $(dynamic_ext) or $(static_ext) or $(nonxs_ext) will
# automatically get built. There should ordinarily be no need to change
# any of this part of makefile.
#
# The dummy dependency is a place holder in case $(dynamic_ext) or
# $(static_ext) is empty.
#
# DynaLoader may be needed for extensions that use Makefile.PL.

$(DYNALOADER)​: miniperl$(EXE_EXT) preplibrary FORCE
  @​$(LDLIBPTH) sh ext/util/make_ext $(STATIC) $@​ MAKE=$(MAKE)
LIBPERL_A=$(LIBPERL)

d_dummy $(dynamic_ext)​: miniperl$(EXE_EXT) preplibrary $(DYNALOADER)
FORCE
  @​$(LDLIBPTH) sh ext/util/make_ext dynamic $@​ MAKE=$(MAKE)
LIBPERL_A=$(LIBPERL)

s_dummy $(static_ext)​: miniperl$(EXE_EXT) preplibrary $(DYNALOADER)
FORCE
  @​$(LDLIBPTH) sh ext/util/make_ext $(STATIC) $@​ MAKE=$(MAKE)
LIBPERL_A=$(LIBPERL)

n_dummy $(nonxs_ext)​: miniperl$(EXE_EXT) preplibrary $(DYNALOADER)
FORCE
  @​$(LDLIBPTH) sh ext/util/make_ext nonxs $@​ MAKE=$(MAKE)
LIBPERL_A=$(LIBPERL)

.PHONY​: clean _tidy _mopup _cleaner1 _cleaner2 \
  realclean _realcleaner clobber _clobber \
  distclean veryclean _verycleaner

clean​: _tidy _mopup

realclean​: _realcleaner _mopup
  @​echo "Note that '$(MAKE) realclean' does not delete config.sh
or Policy.sh"

_clobber​:
  -@​rm -f Cross/run-* Cross/to-* Cross/from-*
  rm -f config.sh cppstdin Policy.sh extras.lst

clobber​: _realcleaner _mopup _clobber

distclean​: clobber

# Like distclean but also removes emacs backups and *.orig.
veryclean​: _verycleaner _mopup _clobber
  -@​rm -f Obsolete Wanted

# Do not 'make _mopup' directly.
_mopup​:
  rm -f *$(OBJ_EXT) *$(LIB_EXT) all perlmain.c
  -rmdir .depending
  -@​test -f extra.pods && rm -f `cat extra.pods`
  -@​test -f vms/README_vms.pod && rm -f vms/README_vms.pod
  -rm -f perl.exp ext.libs extra.pods opmini.o
  -rm -f perl.export perl.dll perl.libexp perl.map perl.def
  -rm -f perl.loadmap miniperl.loadmap perl.prelmap
miniperl.prelmap
  -rm -f perl.third lib*.so.perl.third perl.3log t/perl.third
t/perl.3log
  -rm -f perl.pixie lib*.so.perl.pixie lib*.so.Addrs
  -rm -f perl.Addrs perl.Counts t/perl.Addrs t/perl.Counts
*perl.xok
  -rm -f perlld cygwin.c ld2 libperl*.def libperl*.dll
cygperl*.dll *.exe.stackdump
  -rm -f perl$(EXE_EXT) suidperl$(EXE_EXT) miniperl$(EXE_EXT)
$(LIBPERL) libperl.* microperl
  -rm -f opcode.h-old opnames.h-old pp.sym-old pp_proto.h-old

# Do not 'make _tidy' directly.
_tidy​:
  -cd pod; $(LDLIBPTH) $(MAKE) clean
  -cd utils; $(LDLIBPTH) $(MAKE) clean
  -cd x2p; $(LDLIBPTH) $(MAKE) clean
  -@​for x in $(DYNALOADER) $(dynamic_ext) $(static_ext)
$(nonxs_ext) ; do \
  $(LDLIBPTH) sh ext/util/make_ext clean $$x MAKE=$(MAKE) ; \
  done
  rm -f testcompile compilelog

_cleaner1​:
  -cd os2; rm -f Makefile
  -cd pod; $(LDLIBPTH) $(MAKE) $(CLEAN)
  -cd utils; $(LDLIBPTH) $(MAKE) $(CLEAN)
  -cd x2p; $(LDLIBPTH) $(MAKE) $(CLEAN)
  -@​for x in $(DYNALOADER) $(dynamic_ext) $(static_ext)
$(nonxs_ext) ; do \
  $(LDLIBPTH) sh ext/util/make_ext $(CLEAN) $$x MAKE=$(MAKE) ; \
  done

# Some systems do not support "?", so keep these files separate.
_cleaner2​:
  -rm -f core.*perl.*.? t/core.perl.*.? .?*.c
  rm -f core *perl.core t/core t/*perl.core
  rm -f t/misctmp* t/forktmp* t/tmp* t/c t/perl$(EXE_EXT)
t/rantests
  rm -f so_locations $(LIBPERL_NONSHR) $(MINIPERL_NONSHR)
  rm -rf $(addedbyconf)
  rm -f $(FIRSTMAKEFILE) $(FIRSTMAKEFILE).old makefile.old
  rm -f $(private) lib/Config.pod
  rm -rf lib/auto
  rm -f lib/.exists lib/*/.exists lib/*/*/.exists
  rm -f h2ph.man pstruct
  rm -rf .config
  rm -f preload
  rm -f testcompile compilelog
  -rmdir lib/B lib/Data lib/Digest
  rm -rf lib/Encode
  -rmdir lib/Filter/Util lib/IO/Socket lib/IO
  -rmdir lib/List lib/MIME lib/Scalar lib/Sys
  -rmdir lib/threads lib/XS

_realcleaner​:
  @​$(LDLIBPTH) $(MAKE) _cleaner1 CLEAN=realclean
  @​$(LDLIBPTH) $(MAKE) _cleaner2

_verycleaner​:
  @​$(LDLIBPTH) $(MAKE) _cleaner1 CLEAN=veryclean
  @​$(LDLIBPTH) $(MAKE) _cleaner2
  -rm -f *~ *.orig */*~ */*.orig */*/*~ */*/*.orig

# The following lint has practically everything turned on.
Unfortunately,
# you have to wade through a lot of mumbo jumbo that can't be
suppressed.
# If the source file has a /*NOSTRICT*/ somewhere, ignore the lint
message
# for that spot.

.PHONY​: lint
lint​: $(c)
  lint $(lintflags) $(defs) perly.c $(c) > perl.fuzz

# Need to unset during recursion to go out of loop.
# The README below ensures that the dependency list is never empty and
# that when MAKEDEPEND is empty $(FIRSTMAKEFILE) doesn't need
rebuilding.

MAKEDEPEND = Makefile makedepend

$(FIRSTMAKEFILE)​: README $(MAKEDEPEND)
  $(MAKE) depend MAKEDEPEND=

config.h​: config_h.SH config.sh
  $(SHELL) config_h.SH

# When done, touch perlmain.c so that it doesn't get remade each time.
.PHONY​: depend
depend​: makedepend
  sh ./makedepend MAKE=$(MAKE)
  - test -s perlmain.c && touch perlmain.c
  cd x2p; $(MAKE) depend

# Cannot postpone this until $firstmakefile is ready ;-)
makedepend​: makedepend.SH config.sh
  sh ./makedepend.SH

.PHONY​: test check test_prep test_prep_nodll test_prep_pre _test_prep \
  test_tty test-tty _test_tty test_notty test-notty _test_notty \
  utest ucheck test.utf8 check.utf8 test.torture torturetest \
  test.third check.third utest.third ucheck.third test_notty.third
\
  test.deparse test_notty.deparse test_harness test_harness_notty
\
  test.bytecompile minitest coretest test.taintwarn

# Cannot delegate rebuilding of t/perl to make
# to allow interlaced test and minitest

TESTFILE=TEST

_test_prep​:
  cd t && (rm -f $(PERL)$(EXE_EXT); $(LNS) ../$(PERL)$(EXE_EXT)
$(PERL)$(EXE_EXT))

# Architecture-neutral stuff​:

test_prep_pre​: preplibrary utilities $(nonxs_ext)

test_prep​: test_prep_pre miniperl$(EXE_EXT) perl$(EXE_EXT)
$(dynamic_ext) $(TEST_PERL_DLL)
  PERL=./perl $(MAKE) _test_prep

_test_tty​:
  cd t && $(PERL_DEBUG) $(LDLIBPTH) $(PERL) $(TESTFILE)
$(TEST_ARGS) </dev/tty

_test_notty​:
  cd t && $(PERL_DEBUG) PERL_SKIP_TTY_TEST=1 $(LDLIBPTH) $(PERL)
$(TESTFILE) $(TEST_ARGS)

# The second branch is for testing without a tty or controlling
terminal,
# see t/op/stat.t
_test​:
  if (true </dev/tty) >/dev/null 2>&1; then \
  $(MAKE) TEST_ARGS=$(TEST_ARGS) TESTFILE=$(TESTFILE) _test_tty
; \
  else \
  $(MAKE) TEST_ARGS=$(TEST_ARGS) TESTFILE=$(TESTFILE)
_test_notty ; \
  fi
  @​echo "Ran tests" > t/rantests

test check​: test_prep
  PERL=./perl $(MAKE) _test

test_tty​: test_prep
  PERL=./perl $(MAKE) _test_tty

test_notty​: test_prep
  PERL=./perl $(MAKE) _test_notty

utest ucheck test.utf8 check.utf8​: test_prep
  PERL=./perl TEST_ARGS=-utf8 $(MAKE) _test

coretest​: test_prep
  PERL=./perl TEST_ARGS=-core $(MAKE) _test

test-prep​: test_prep

test-tty​: test_tty

test-notty​: test_notty

# Torture testing

test.torture torturetest​: test_prep
  PERL=./perl TEST_ARGS=-torture $(MAKE) _test

# Targets for valgrind testing​:

test_prep.valgrind​: test_prep perl.valgrind
  PERL=./perl $(MAKE) _test_prep

test.valgrind check.valgrind​: test_prep perl.valgrind.config
  PERL=./perl PERL_DEBUG=PERL_VALGRIND=1 $(MAKE) _test

utest.valgrind ucheck.valgrind​: test_prep.valgrind perl.valgrind
  PERL=./perl PERL_DEBUG=PERL_VALGRIND=1 TEST_ARGS=-utf8 $(MAKE)
_test

test_notty.valgrind​: test_prep.valgrind perl.valgrind
  PERL=./perl $(MAKE) PERL_DEBUG=PERL_VALGRIND=1 _test_notty

# Targets for Third Degree testing.

test_prep.third​: test_prep perl.third
  PERL=./perl.third $(MAKE) _test_prep

test.third check.third​: test_prep.third perl.third
  PERL=./perl.third PERL_DEBUG=PERL_3LOG=1 $(MAKE) _test

utest.third ucheck.third​: test_prep.third perl.third
  PERL=./perl.third PERL_DEBUG=PERL_3LOG=1 TEST_ARGS=-utf8 $(MAKE)
_test

test_notty.third​: test_prep.third perl.third
  PERL=./perl.third $(MAKE) PERL_DEBUG=PERL_3LOG=1 _test_notty

# Targets for Bytecode/ByteLoader testing.

test.bytecompile​: test_prep
  PERL=./perl TEST_ARGS=-bytecompile $(MAKE) _test

# Targets for Deparse testing.

test.deparse​: test_prep
  PERL=./perl TEST_ARGS=-deparse $(MAKE) _test

test_notty.deparse​: test_prep
  PERL=./perl TEST_ARGS=-deparse $(MAKE) _test_notty

# Targets to run the test suite with -t

test.taintwarn​: test_prep
  PERL=./perl TEST_ARGS=-taintwarn $(MAKE) _test

# Can't depend on lib/Config.pm because that might be where miniperl
# is crashing.
minitest​: miniperl$(EXE_EXT) lib/re.pm
  -@​test -f lib/lib.pm && test -f lib/Config.pm || \
  $(MAKE) lib/Config.pm lib/lib.pm
  @​echo " "
  @​echo "You may see some irrelevant test failures if you have
been unable"
  @​echo "to build lib/Config.pm or lib/lib.pm."
  @​echo " "
  - cd t && (rm -f perl$(EXE_EXT); $(LNS) ../miniperl$(EXE_EXT)
perl$(EXE_EXT)) \
  && $(LDLIBPTH) ./perl TEST base/*.t comp/*.t cmd/*.t
run/*.t io/*.t op/*.t uni/*.t </dev/tty

# Test via harness

test_harness​: test_prep
  PERL=./perl $(MAKE) TESTFILE=harness _test

test_harness_notty​: test_prep
  PERL=./perl HARNESS_NOTTY=1 $(MAKE) TESTFILE=harness _test

# Handy way to run perlbug -ok without having to install and run the
# installed perlbug. We don't re-run the tests here - we trust the user.
# Please *don't* use this unless all tests pass.
# If you want to report test failures, use "make nok" instead.

.PHONY​: ok okfile oknack okfilenack nok nokfile noknack nokfilenack

ok​: utilities
  $(LDLIBPTH) ./perl -Ilib utils/perlbug -ok -s '(UNINSTALLED)'

okfile​: utilities
  $(LDLIBPTH) ./perl -Ilib utils/perlbug -ok -s '(UNINSTALLED)' -F
perl.ok

oknack​: utilities
  $(LDLIBPTH) ./perl -Ilib utils/perlbug -ok -s '(UNINSTALLED)' -A

okfilenack​: utilities
  $(LDLIBPTH) ./perl -Ilib utils/perlbug -ok -s '(UNINSTALLED)' -F
perl.ok -A

nok​: utilities
  $(LDLIBPTH) ./perl -Ilib utils/perlbug -nok -s '(UNINSTALLED)'

nokfile​: utilities
  $(LDLIBPTH) ./perl -Ilib utils/perlbug -nok -s '(UNINSTALLED)'
-F perl.nok

noknack​: utilities
  $(LDLIBPTH) ./perl -Ilib utils/perlbug -nok -s '(UNINSTALLED)'
-A

nokfilenack​: utilities
  $(LDLIBPTH) ./perl -Ilib utils/perlbug -nok -s '(UNINSTALLED)'
-F perl.nok -A

.PHONY​: clist hlist shlist pllist

clist​: $(c)
  echo $(c) | tr ' ' $(TRNL) >.clist

hlist​: $(h)
  echo $(h) | tr ' ' $(TRNL) >.hlist

shlist​: $(sh)
  echo $(sh) | tr ' ' $(TRNL) >.shlist

pllist​: $(pl)
  echo $(pl) | tr ' ' $(TRNL) >.pllist

Makefile​: Makefile.SH ./config.sh
  $(SHELL) Makefile.SH

.PHONY​: distcheck
distcheck​: FORCE
  perl '-MExtUtils​::Manifest=&fullcheck' -e 'fullcheck()'

.PHONY​: elc
elc​: emacs/cperl-mode.elc

emacs/cperl-mode.elc​: emacs/cperl-mode.el
  -cd emacs; emacs -batch -q -no-site-file -f batch-byte-compile
cperl-mode.el

.PHONY​: etags ctags tags

etags​: TAGS

TAGS​: emacs/cperl-mode.elc
  sh emacs/ptags

ctags​: tags

# Let's hope make will not go into an infinite loop on case-unsensitive
systems
# This may also fail if . is in the head of the path, since perl will
# require -Ilib
tags​: TAGS
  perl emacs/e2ctags.pl TAGS > tags

# AUTOMATICALLY GENERATED MAKE DEPENDENCIES--PUT NOTHING BELOW THIS LINE
# If this runs make out of memory, delete /usr/include lines.

@p5pRT
Copy link
Author

p5pRT commented Nov 10, 2003

From @AlanBurlison

Berger, Daniel (via RT) wrote​:

ld​: fatal​: file miniperlmain.o​: wrong ELF class​: ELFCLASS64
ld​: fatal​: File processing errors. No output written to miniperl
collect2​: ld returned 1 exit status
*** Error code 1
make​: Fatal error​: Command failed for target `miniperl'

I don't use gcc, but from looking at the gcc flags and the linker error
mrssage it appears that you are building libperl as LP64 (64-bit) but
building miniperlmain as LP32 (32 bit). This has nothing to do with the -L
flags, but I have no clear idea of why it is happening. Have you tries a
'make clean; make'? Perhaps you have an old 32-bit miniperlmain.o lying
around from a previous LP32 build?

--
Alan Burlison
--

@p5pRT
Copy link
Author

p5pRT commented Nov 20, 2003

From djberge@qwest.com

-----Original Message-----
From​: Alan Burlison [mailto​:perlbug-followup@​perl.org]
Sent​: Monday, November 10, 2003 3​:54 AM
To​: djberge@​qwest.com
Subject​: Re​: [perl #24439] 64 bit build failure on Solaris 9

Berger, Daniel (via RT) wrote​:

ld​: fatal​: file miniperlmain.o​: wrong ELF class​: ELFCLASS64
ld​: fatal​: File processing errors. No output written to miniperl
collect2​: ld returned 1 exit status
*** Error code 1
make​: Fatal error​: Command failed for target `miniperl'

I don't use gcc, but from looking at the gcc flags and the
linker error
mrssage it appears that you are building libperl as LP64 (64-bit) but
building miniperlmain as LP32 (32 bit). This has nothing to
do with the -L
flags, but I have no clear idea of why it is happening. Have
you tries a
'make clean; make'? Perhaps you have an old 32-bit
miniperlmain.o lying
around from a previous LP32 build?

--
Alan Burlison
--

No, it's definitely a clean build. Could the default Perl installation
(in /usr/bin) be causing the problem?

Regards,

Dan

@p5pRT
Copy link
Author

p5pRT commented Nov 20, 2003

From @AlanBurlison

Berger, Daniel wrote​:

No, it's definitely a clean build. Could the default Perl installation
(in /usr/bin) be causing the problem?

I very much doubt it.

What does 'file *.o' say when run in the build directory?

--
Alan Burlison
--

@p5pRT
Copy link
Author

p5pRT commented Nov 20, 2003

From @doughera88

On Mon, 10 Nov 2003, Alan Burlison wrote​:

Berger, Daniel (via RT) wrote​:

ld​: fatal​: file miniperlmain.o​: wrong ELF class​: ELFCLASS64
ld​: fatal​: File processing errors. No output written to miniperl
collect2​: ld returned 1 exit status
*** Error code 1
make​: Fatal error​: Command failed for target `miniperl'

I don't use gcc, but from looking at the gcc flags and the linker error
mrssage it appears that you are building libperl as LP64 (64-bit) but
building miniperlmain as LP32 (32 bit).

Yes, I think that's almost it. Looking closely at the command line
issued

  gcc -o miniperl miniperlmain.o opmini.o libperl.a [ . . .]

miniperlmain.o is the first object file mentioned. By the time ld
gets to it, ld complains

  ld​: fatal​: file miniperlmain.o​: wrong ELF class​: ELFCLASS64

That means that ld has seen something earlier that was LP32. I'll
bet it was a gcc-specific crt1.o or crtbegin.o. If I recall correctly,
gcc adds those start-up files to the ld command line. If they are
32-bit, then you'll get the error message above.

If I'm right, the culprit is this bit in the current hints/solaris_2.sh
file​:
  # no changes to ld flags, as (according to man ld)​:
  #
  # There is no specific option that tells ld to link 64-bit
  # objects; the class of the first object that gets processed
  # by ld determines whether it is to perform a 32-bit or a

The problem is that $ldflags are sent to $ld, which is actually $cc on
Solaris (as well as on most modern Unix systems). (It really was ld on
SunOS 4.1.3, where this part of Configure was designed, and the name
has stuck.)

In brief, although /usr/ccs/bin/ld doesn't need any specific flags, gcc
does need to know which set of start-up files to send to
/usr/ccs/bin/ld, so gcc *does* need a flag.

I don't have gcc-3.3 to test (my Solaris gcc installation is still
2.8.1), but I think the following patch should fix it​:

Inline Patch
--- perl-5.8.2/hints/solaris_2.sh	Mon Oct 27 12:27:29 2003
+++ perl-5.8.2-andy/hints/solaris_2.sh	Thu Nov 20 09:24:38 2003
@@ -516,14 +516,13 @@
 	        loclibpth="/usr/lib/sparcv9 $loclibpth"
 		ccflags="$ccflags -mcpu=v9 -m64"
 		if test X`getconf XBS5_LP64_OFF64_CFLAGS 2>/dev/null` != X; then
+		    # This adds in -Wa,-xarch=v9.  I suspect that's superfluous,
+		    # since the -m64 above should do that already.  Someone
+		    # with gcc-3.x.x, please test with gcc -v.   A.D. 20-Nov-2003
 		    ccflags="$ccflags -Wa,`getconf XBS5_LP64_OFF64_CFLAGS 2>/dev/null`"
 		fi
-		# no changes to ld flags, as (according to man ld):
-		#
-   		# There is no specific option that tells ld to link 64-bit
-		# objects; the class of the first object that gets processed
-		# by ld determines whether it is to perform a 32-bit or a
-		# 64-bit link edit.
+		ldflags="$ldflags -m64"
+		lddlflags="$lddlflags -m64"
 		;;
 	    *)
 		ccflags="$ccflags `getconf XBS5_LP64_OFF64_CFLAGS 2>/dev/null`"


Hope this helps,

--
  Andy Dougherty doughera@​lafayette.edu

@p5pRT
Copy link
Author

p5pRT commented Nov 20, 2003

From @AlanBurlison

Andy Dougherty wrote​:

That means that ld has seen something earlier that was LP32. I'll
bet it was a gcc-specific crt1.o or crtbegin.o. If I recall correctly,
gcc adds those start-up files to the ld command line. If they are
32-bit, then you'll get the error message above.

Makes sense. Nice catch :-)

--
Alan Burlison
--

@p5pRT
Copy link
Author

p5pRT commented Nov 21, 2003

From djberge@qwest.com

-----Original Message-----
From​: Andy Dougherty [mailto​:perlbug-followup@​perl.org]
Sent​: Thursday, November 20, 2003 7​:38 AM
To​: djberge@​qwest.com
Subject​: Re​: [perl #24439] 64 bit build failure on Solaris 9

On Mon, 10 Nov 2003, Alan Burlison wrote​:

Berger, Daniel (via RT) wrote​:

ld​: fatal​: file miniperlmain.o​: wrong ELF class​: ELFCLASS64
ld​: fatal​: File processing errors. No output written to miniperl
collect2​: ld returned 1 exit status
*** Error code 1
make​: Fatal error​: Command failed for target `miniperl'

I don't use gcc, but from looking at the gcc flags and the linker
error mrssage it appears that you are building libperl as LP64
(64-bit) but building miniperlmain as LP32 (32 bit).

Yes, I think that's almost it. Looking closely at the
command line issued

gcc \-o miniperl miniperlmain\.o opmini\.o libperl\.a \[ \. \. \.\]

miniperlmain.o is the first object file mentioned. By the
time ld gets to it, ld complains

ld&#8203;: fatal&#8203;: file miniperlmain\.o&#8203;: wrong ELF class&#8203;: ELFCLASS64

That means that ld has seen something earlier that was LP32.
I'll bet it was a gcc-specific crt1.o or crtbegin.o. If I
recall correctly, gcc adds those start-up files to the ld
command line. If they are 32-bit, then you'll get the error
message above.

If I'm right, the culprit is this bit in the current
hints/solaris_2.sh
file​:
# no changes to ld flags, as (according to man ld)​:
#
# There is no specific option that tells ld to
link 64-bit
# objects; the class of the first object that
gets processed
# by ld determines whether it is to perform a
32-bit or a

The problem is that $ldflags are sent to $ld, which is
actually $cc on Solaris (as well as on most modern Unix
systems). (It really was ld on SunOS 4.1.3, where this part
of Configure was designed, and the name has stuck.)

In brief, although /usr/ccs/bin/ld doesn't need any specific
flags, gcc does need to know which set of start-up files to
send to /usr/ccs/bin/ld, so gcc *does* need a flag.

I don't have gcc-3.3 to test (my Solaris gcc installation is
still 2.8.1), but I think the following patch should fix it​:

--- perl-5.8.2/hints/solaris_2.sh Mon Oct 27 12​:27​:29 2003
+++ perl-5.8.2-andy/hints/solaris_2.sh Thu Nov 20 09​:24​:38 2003
@​@​ -516,14 +516,13 @​@​
loclibpth="/usr/lib/sparcv9 $loclibpth"
ccflags="$ccflags -mcpu=v9 -m64"
if test X`getconf XBS5_LP64_OFF64_CFLAGS
2>/dev/null` != X; then
+ # This adds in -Wa,-xarch=v9. I suspect
that's superfluous,
+ # since the -m64 above should do that
already. Someone
+ # with gcc-3.x.x, please test with gcc -v.
A.D. 20-Nov-2003
ccflags="$ccflags -Wa,`getconf
XBS5_LP64_OFF64_CFLAGS 2>/dev/null`"
fi
- # no changes to ld flags, as (according to man ld)​:
- #
- # There is no specific option that tells ld to
link 64-bit
- # objects; the class of the first object that
gets processed
- # by ld determines whether it is to perform a
32-bit or a
- # 64-bit link edit.
+ ldflags="$ldflags -m64"
+ lddlflags="$lddlflags -m64"
;;
*)
ccflags="$ccflags `getconf
XBS5_LP64_OFF64_CFLAGS 2>/dev/null`"

Hope this helps,

--
Andy Dougherty doughera@​lafayette.edu

Thanks Andy. I made the changes you suggested. We're getting further,
but now it's choking on 'B'​:

  Making B (dynamic)
Writing Makefile for B​::C
Writing Makefile for B
cp B/Stash.pm ../../lib/B/Stash.pm
cp B/Asmdata.pm ../../lib/B/Asmdata.pm
cp B/C.pm ../../lib/B/C.pm
cp B/Deparse.pm ../../lib/B/Deparse.pm
cp B/Debug.pm ../../lib/B/Debug.pm
cp B/cc_harness ../../lib/B/cc_harness
cp B.pm ../../lib/B.pm
cp B/Bblock.pm ../../lib/B/Bblock.pm
cp B/Assembler.pm ../../lib/B/Assembler.pm
cp B/Terse.pm ../../lib/B/Terse.pm
cp B/CC.pm ../../lib/B/CC.pm
cp O.pm ../../lib/O.pm
cp B/Concise.pm ../../lib/B/Concise.pm
cp B/Lint.pm ../../lib/B/Lint.pm
cp B/Showlex.pm ../../lib/B/Showlex.pm
cp B/Bytecode.pm ../../lib/B/Bytecode.pm
cp B/Disassembler.pm ../../lib/B/Disassembler.pm
cp B/assemble ../../lib/B/assemble
cp B/Xref.pm ../../lib/B/Xref.pm
cp B/Stackobj.pm ../../lib/B/Stackobj.pm
cp B/disassemble ../../lib/B/disassemble
cp B/makeliblinks ../../lib/B/makeliblinks
../../../miniperl "-I../../../lib" "-I../../../lib"
/usr/local/src/perl-5.8.2/lib/ExtUtils/xsubpp -typemap
../../../lib/ExtUtils/typemap C.xs > C.xsc && mv C.xsc C.c
gcc -c -D_REENTRANT -mcpu=v9 -m64 -fno-strict-aliasing
-I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -O
-DVERSION=\"1.02\" -DXS_VERSION=\"1.02\" -fPIC "-I../../.." C.c
Running Mkbootstrap for B​::C ()
chmod 644 C.bs
rm -f ../../../lib/auto/B/C/C.so
LD_RUN_PATH="" gcc -m64 -L/usr/lib/sparcv9 -L/usr/local/lib C.o -o
../../../lib/auto/B/C/C.so
Undefined first referenced
symbol in file
Perl_safesysmalloc C.o
Perl_Tmarkstack_ptr_ptr C.o
Perl_Tstack_sp_ptr C.o
Perl_sv_free C.o
Perl_hv_store_ent C.o
Perl_get_sv C.o
Perl_sv_setiv C.o
Perl_Isig_pending_ptr C.o
Perl_sv_setref_iv C.o
Perl_despatch_signals C.o
Perl_Tstack_base_ptr C.o
Perl_Irunops_ptr C.o
Perl_sv_2pv_flags C.o
Perl_Ttainted_ptr C.o
Perl_get_hv C.o
Perl_newSViv C.o
Perl_Iregex_pad_ptr C.o
main
/usr/local/lib/gcc-lib/sparc-sun-solaris2.9/3.3.2/sparcv9/crt1.o
Perl_Top_ptr C.o
Perl_Gthr_key_ptr C.o
Perl_croak C.o
Perl_Isv_yes_ptr C.o
Perl_form C.o
ld​: fatal​: Symbol referencing errors. No output written to
../../../lib/auto/B/C/C.so
collect2​: ld returned 1 exit status
*** Error code 1
make​: Fatal error​: Command failed for target
`../../../lib/auto/B/C/C.so' Current working directory
/usr/local/src/perl-5.8.2/ext/B/C
*** Error code 1
make​: Fatal error​: Command failed for target `subdirs'
Current working directory /usr/local/src/perl-5.8.2/ext/B
*** Error code 1
make​: Fatal error​: Command failed for target `lib/auto/B/B.so'

The only warning I saw during the build that I thought might be
significant was this one​:

gcc -m64 -L/usr/lib/sparcv9 -L/usr/local/lib -o miniperl \
  miniperlmain.o opmini.o libperl.a -lsocket -lnsl -ldl -lm -lpthread
-lc ./miniperl -w -Ilib -MExporter -e '<?>' || make minitest
*** Error code 1 (ignored)

I also tried commenting out the -Wa, -xarch stuff in the solaris hint
file, but that (unsurprisingly) didn't matter.

Any ideas? Something about crt1.o again?

Regards,

Dan

(Sorry if this is a repeat - mail problems here)

@p5pRT
Copy link
Author

p5pRT commented Nov 21, 2003

From @doughera88

On Thu, 20 Nov 2003, Daniel Berger wrote​:

From​: Andy Dougherty [mailto​:perlbug-followup@​perl.org]

I don't have gcc-3.3 to test (my Solaris gcc installation is
still 2.8.1), but I think the following patch should fix it​:

--- perl-5.8.2/hints/solaris_2.sh Mon Oct 27 12​:27​:29 2003
+++ perl-5.8.2-andy/hints/solaris_2.sh Thu Nov 20 09​:24​:38 2003
@​@​ -516,14 +516,13 @​@​
loclibpth="/usr/lib/sparcv9 $loclibpth"
ccflags="$ccflags -mcpu=v9 -m64"
if test X`getconf XBS5_LP64_OFF64_CFLAGS
2>/dev/null` != X; then
+ # This adds in -Wa,-xarch=v9. I suspect
that's superfluous,
+ # since the -m64 above should do that
already. Someone
+ # with gcc-3.x.x, please test with gcc -v.
A.D. 20-Nov-2003
ccflags="$ccflags -Wa,`getconf
XBS5_LP64_OFF64_CFLAGS 2>/dev/null`"
fi
- # no changes to ld flags, as (according to man ld)​:
- #
- # There is no specific option that tells ld to
link 64-bit
- # objects; the class of the first object that
gets processed
- # by ld determines whether it is to perform a
32-bit or a
- # 64-bit link edit.
+ ldflags="$ldflags -m64"
+ lddlflags="$lddlflags -m64"
;;
*)
ccflags="$ccflags `getconf
XBS5_LP64_OFF64_CFLAGS 2>/dev/null`"

Hope this helps,

--
Andy Dougherty doughera@​lafayette.edu

Thanks Andy. I made the changes you suggested. We're getting further,
but now it's choking on 'B'​:

LD_RUN_PATH="" gcc -m64 -L/usr/lib/sparcv9 -L/usr/local/lib C.o -o
../../../lib/auto/B/C/C.so
Undefined first referenced
symbol in file
Perl_safesysmalloc C.o
Perl_Tmarkstack_ptr_ptr C.o

Oh. This one's my fault. Try changing the line

+ lddlflags="$lddlflags -m64"

in hints/solaris_2.sh to

+ lddlflags="$lddlflags -G -m64"

(I think that's the right flag for gcc on Solaris using Sun's ld.)

  Andy Dougherty doughera@​lafayette.edu

@p5pRT
Copy link
Author

p5pRT commented Nov 23, 2003

From djberge@qwest.com

-----Original Message-----
From​: Andy Dougherty [mailto​:doughera@​lafayette.edu]
Sent​: Friday, November 21, 2003 7​:36 AM
To​: Daniel Berger
Cc​: perlbug-followup@​perl.org
Subject​: RE​: [perl #24439] 64 bit build failure on Solaris 9

<snip>

LD_RUN_PATH="" gcc -m64 -L/usr/lib/sparcv9
-L/usr/local/lib C.o -o
../../../lib/auto/B/C/C.so
Undefined first referenced
symbol in file
Perl_safesysmalloc C.o
Perl_Tmarkstack_ptr_ptr C.o

Oh. This one's my fault. Try changing the line

+ lddlflags="$lddlflags -m64"

in hints/solaris_2.sh to

+ lddlflags="$lddlflags -G -m64"

(I think that's the right flag for gcc on Solaris using Sun's ld.)

Andy Dougherty        doughera@&#8203;lafayette\.edu

That worked! Thanks!!!

Regards,

Dan

@p5pRT
Copy link
Author

p5pRT commented Nov 23, 2003

From @rgs

Andy Dougherty wrote​:

Oh. This one's my fault. Try changing the line

+ lddlflags="$lddlflags -m64"

in hints/solaris_2.sh to

+ lddlflags="$lddlflags -G -m64"

(I think that's the right flag for gcc on Solaris using Sun's ld.)

Thanks, applied as #21780 to bleadperl.

@p5pRT p5pRT closed this as completed Nov 23, 2003
@p5pRT
Copy link
Author

p5pRT commented Nov 23, 2003

@rgs - Status changed from 'new' to 'resolved'

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant