develooper Front page | perl.perl5.porters | Postings from June 2019

[perl #134218] dtrace build of perl-5.30.0 uses undefined $(ECHO)

Thread Previous
June 21, 2019 19:56
[perl #134218] dtrace build of perl-5.30.0 uses undefined $(ECHO)
Message ID:
# New Ticket Created by 
# Please include the string:  [perl #134218]
# in the subject line of all future correspondence about this issue. 
# <URL: >

This is a bug report for perl from,
generated with the help of perlbug 1.40 running under perl 5.22.4.

[Please describe your issue here]


I'm using perlbug from 5.22.4, but I'm attempting to build perl 5.30.0
on OpenIndiana, one of the Illumos (formerly OpenSolaris) distributions.

The build fails in the dtrace Makefile logic (which was improved at 5.26.2),
with the following output:


LD_LIBRARY_PATH=/export/home/mooney/oi-userland/components/perl/perl-530/build/amd64 ./miniperl -Ilib -MExtUtils::Miniperl -e 'writemain(\"perlmain.c", @ARGV)' DynaLoader 
/usr/gcc/6/bin/gcc -m64 -c -DPERL_CORE -D_REENTRANT -m64 -fwrapv -fno-strict-aliasing -pipe -fstack-protector-strong -D_LARGEFILE64_SOURCE -D_FORTIFY_SOURCE=2 -DPERL_USE_SAFE_PUTENV -O -Wall -Werror=declaration-after-statement -Werror=pointer-arith -Wextra -Wc++-compat -Wwrite-strings -fPIC perlmain.c
rm -rf maindtrace
mkdir maindtrace
cp perlmain.o maindtrace/
/usr/sbin/dtrace -xnolibs -G -s perldtrace.d -o dtrace_main.o     maindtrace/perlmain.o ||        \
  (  "No probes in perlmain.o, generating a dummy dtrace_main.o    " && \
     >dtrace_main.c &&                                \
    `sh  cflags "optimize='-O'" dtrace_main.o` -fPIC dtrace_main.c &&                         \
     rm -f dtrace_main.c )
dtrace: failed to link script perldtrace.d: No probe sites found for declared provider
/bin/sh[2]: No probes in perlmain.o, generating a dummy dtrace_main.o    : not found [No such file or directory]
make[1]: *** [makefile:368: dtrace_main.o] Error 127


If you examine that output closely, you'll see that there's no echo or
printf before the "No probes in perlmain.o..." string.

Tracing this back to the "Makefile", it's coming from this section of
code in the generated Makefile:


$(DTRACE_MAIN_O): perldtrace.d perlmain$(OBJ_EXT)
        -rm -rf maindtrace
        mkdir maindtrace
        cp perlmain$(OBJ_EXT) maindtrace/
        $(DTRACE) -G -s perldtrace.d -o $(DTRACE_MAIN_O) $(perlmain_dtrace_objs) ||           \
          ( $(ECHO) "No probes in perlmain$(OBJ_EXT), generating a dummy $(DTRACE_MAIN_O)" && \
            $(ECHO) >dtrace_main.c &&                                                         \
            `$(CCCMD)` $(PLDLFLAGS) dtrace_main.c &&                                          \
             rm -f dtrace_main.c )


As you can see, the Makefile has $(ECHO) in a couple of places, but it's
not actually defined anywhere in the generated Makefile, so it's coming
up empty when the Makefile is run, and triggering the issue.

The fix is straightforward.  In Makefile.SH, in the section where other
settings like CC, LD, CPS, RMS, etc. are set, we just need a

ECHO = $echo

$echo *is* being set by Configure and added to, it's just that
Makefile.SH and hence Makefile are using $(ECHO) in one and only one place: the dtrace probes.

If you agree this is the right fix, I can submit the trivial patch to fix it.



[Please do not change anything below this line]
Site configuration information for perl 5.22.4:

Configured by perl-bugs at Thu May 24 21:32:52 UTC 2018.

Summary of my perl5 (revision 5 version 22 subversion 4) configuration:
    osname=solaris, osvers=2.11, archname=i86pc-solaris-64int
    uname='sunos 5.11 illumos-017c366d7c i86pc i386 i86pc '
    config_args='-de -Dmksymlinks -Ulocincpth= -Uloclibpth= -Dbin=/usr/perl5/5.22/bin -Dcc=/usr/gcc/6/bin/gcc -m32 -Dccflags=-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -Dcf_by=perl-bugs -Dmyhostname=localhost -Dprefix=/usr/perl5/5.22 -Dprivlib=/usr/perl5/5.22/lib -Dsitelib=/usr/perl5/site_perl/5.22 -Dsiteprefix=/usr/perl5/5.22 -Dvendorlib=/usr/perl5/vendor_perl/5.22 -Dvendorprefix=/usr/perl5/5.22 -Duse64bitint -Duseshrplib -Dusedtrace -Uuselargefiles'
    hint=recommended, useposix=true, d_sigaction=define
    useithreads=undef, usemultiplicity=undef
    use64bitint=define, use64bitall=undef, uselongdouble=undef
    usemymalloc=n, bincompat5005=undef
    cc='/usr/gcc/6/bin/gcc -m32', ccflags ='-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DPTR_IS_LONG -fwrapv -fno-strict-aliasing -pipe -fstack-protector-strong -DPERL_USE_SAFE_PUTENV',
    cppflags='-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DPTR_IS_LONG -fwrapv -fno-strict-aliasing -pipe -fstack-protector-strong'
    ccversion='', gccversion='6.4.0', gccosandvers=''
    intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=12345678, doublekind=3
    d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=12, longdblkind=3
    ivtype='long long', ivsize=8, nvtype='double', nvsize=8, Off_t='off_t', lseeksize=8
    alignbytes=4, prototype=define
  Linker and Libraries:
    ld='/usr/gcc/6/bin/gcc -m32', ldflags =' -fstack-protector-strong'
    libpth=/usr/gcc/6/lib /usr/lib /usr/ccs/lib
    libs=-lpthread -lsocket -lnsl -lgdbm -ldb -ldl -lm -lc
    perllibs=-lpthread -lsocket -lnsl -ldl -lm -lc
    libc=/lib/, so=so, useshrplib=true,
  Dynamic Linking:
    dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='  -R /usr/perl5/5.22/lib/i86pc-solaris-64int/CORE'
    cccdlflags='-fPIC -DPIC', lddlflags='-shared -fstack-protector -fstack-protector-strong'

@INC for perl 5.22.4:

Environment for perl 5.22.4:
    LANGUAGE (unset)
    LD_LIBRARY_PATH (unset)
    LOGDIR (unset)
    PERL_BADLANG (unset)

Thread Previous Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at | Group listing | About