http://qs321.pair.com?node_id=658656


in reply to Re: Declaring a dependency on syscall.ph (and getting it generated)
in thread Declaring a dependency on syscall.ph (and getting it generated)

Perhaps you didn't understand the question. I know of many ways to generate things during module-building. What I don't know about is if there is an existing package which already handles .ph file dependencies. If not, what I don't know about is how to generate this sanely myself. I have a guess but I quickly run directly into shell quoting issues and guessing about what compiler options mean. It gets ugly rather quickly. Or... well... maybe it's possible to write a Module::Build plugin which could handle getting the compiler to find the syscall.h file.


Makefile.PL

WriteMakefile( ... CC => "$^X bin/fake-cc", # shell quoting matters here! );

bin/fake-cc

#!perl for ( map extract_paths( $_ ), @ARGV ) { # stash this somewhere, I guess. } # etc.

⠤⠤ ⠙⠊⠕⠞⠁⠇⠑⠧⠊

Replies are listed 'Best First'.
Re^3: Declaring a dependency on syscall.ph (and getting it generated)
by eserte (Deacon) on Dec 22, 2007 at 19:24 UTC
    I am not aware of an existing mechanism to detect the .ph files and build them. A simple way could be to add something like this in then Makefile.PL:
    if (!eval { require "sys/syscall.ph"; 1 }) { my $save_pwd = cwd; chdir "/usr/include" or die $!; system("h2ph", "sys/syscall.ph"); chdir $save_pwd or die $!; }

    Of course, this should be only run on Unix systems. But not all Unix systems have include files installed, so one has to be protected from this fact. Also, Makefile.PL is often not run under root permissions, so the above would fail. It's also possible that even "make install" is not run as root, so maybe it should also be possible to install the .ph into some other directory.

    Or maybe it would be safer to not use .ph files at all and move the required stuff into an XS module?