develooper Front page | perl.perl5.porters | Postings from July 2012

[perl #113940] make ignores XS version changes

Thread Next
Father Chrysostomos
July 1, 2012 14:40
[perl #113940] make ignores XS version changes
Message ID:
# New Ticket Created by  Father Chrysostomos 
# Please include the string:  [perl #113940]
# in the subject line of all future correspondence about this issue. 
# <URL: >

Every time an XS module’s version number changes, one has to do a complete clean to get things to build properly again.  Otherwise we get that nasty error message about the XS version number not matching the module number.  Actually, through experimentation, I found that deleting the Makefile and re-running make is sufficient.

Since version numbers are changing all the time, this is tedious.  ‘make’ should be able to detect that something changed and update things accordingly.  That’s what it’s for, right?

Since Makefile.PL gets the version number from the .pm file and writes it to the Makefile, strictly speaking the Makefile should depend on the .pm file.

ExtUtils::MakeMaker says this in its documentation:

    The file named in VERSION_FROM is not added as a dependency to
    Makefile. This is not really correct, but it would be a major pain
    during development to have to rewrite the Makefile for any smallish
    change in that file. If you want to make sure that the Makefile
    contains the correct VERSION macro after any change of the file, you
    would have to do something like
        depend => { Makefile => '$(VERSION_FROM)' }

So it violates pedantic correctness for the sake of avoiding a ‘major pain’.  But for the perl core it causes a major pain.

What is the best way to fix this?

1. Should ExtUtils::MakeMaker do things differently when PERL_CORE is defined?

2. Should add an explicit dependency to its generated Makefiles.PL?  Makefiles.PL that are not generated would have to be modified.

3. Or should detect a version change and regenerate the Makefile?

The last option is a bit of a hack, but I think it would be the simplest solution.  It would also follow the spirit of what ExtUtils::MakeMaker does, avoiding a regeneration of the Makefile due to a smallish (non-version-related) change in the .pm file.
Site configuration information for perl 5.17.2:

Configured by sprout at Mon Jun 25 13:28:03 PDT 2012.

Summary of my perl5 (revision 5 version 17 subversion 2) configuration:
  Snapshot of: 49f4c4e423fa15e3da8c813a7526bb78740f9018
    osname=darwin, osvers=10.5.0, archname=darwin-2level
    uname='darwin pint.local 10.5.0 darwin kernel version 10.5.0: fri nov 5 23:20:39 pdt 2010; root:xnu-1504.9.17~1release_i386 i386 '
    config_args='-de -DDEBUGGING -Dusedevel'
    hint=recommended, useposix=true, d_sigaction=define
    useithreads=undef, usemultiplicity=undef
    useperlio=define, d_sfio=undef, uselargefiles=define, usesocks=undef
    use64bitint=undef, use64bitall=undef, uselongdouble=undef
    usemymalloc=n, bincompat5005=undef
    cc='cc', ccflags ='-fno-common -DPERL_DARWIN -DDEBUGGING -fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include',
    optimize='-O3 -g',
    cppflags='-fno-common -DPERL_DARWIN -DDEBUGGING -fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include'
    ccversion='', gccversion='4.2.1 (Apple Inc. build 5664)', gccosandvers=''
    intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=1234
    d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=16
    ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='off_t', lseeksize=8
    alignbytes=8, prototype=define
  Linker and Libraries:
    ld='env MACOSX_DEPLOYMENT_TARGET=10.3 cc', ldflags =' -fstack-protector -L/usr/local/lib'
    libpth=/usr/local/lib /usr/lib
    libs=-ldbm -ldl -lm -lutil -lc
    perllibs=-ldl -lm -lutil -lc
    libc=, so=dylib, useshrplib=false, libperl=libperl.a
  Dynamic Linking:
    dlsrc=dl_dlopen.xs, dlext=bundle, d_dlsymun=undef, ccdlflags=' '
    cccdlflags=' ', lddlflags=' -bundle -undefined dynamic_lookup -L/usr/local/lib -fstack-protector'

Locally applied patches:

@INC for perl 5.17.2:

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

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