Beefy Boxes and Bandwidth Generously Provided by pair Networks
Syntactic Confectionery Delight

Re^3: Defining an XS symbol in the Makefile.PL (quoting)

by Anonymous Monk
on Aug 19, 2019 at 08:41 UTC ( #11104680=note: print w/replies, xml ) Need Help??

in reply to Re^2: Defining an XS symbol in the Makefile.PL (quoting)
in thread Defining an XS symbol in the Makefile.PL what did mycode show?
  • Comment on Re^3: Defining an XS symbol in the Makefile.PL (quoting)

Replies are listed 'Best First'.
Re^4: Defining an XS symbol in the Makefile.PL (quoting)
by syphilis (Bishop) on Aug 19, 2019 at 09:02 UTC
    Um ... what code ?

      Heh, whats going on?

      #!/usr/bin/perl -- use strict; use warnings; use Config; use Inline C => Config => USING => 'ParseRegExp', CCFLAGSEX => q["-DMY_FORMAT=\"%.17e\""], BUILD_NOISY => 1, CLEAN_AFTER_BUILD => 0, ; use Inline C =><<'EOC'; void* foo(void) { printf("***%s***\n", MY_FORMAT); printf(MY_FORMAT, sqrt(2.0)); printf("\n%.17e\n", sqrt(2.0)); } EOC foo(); __END__ $ perl validate Stage Starting Build Preprocess Stage get_maps Stage Finished Build Preprocess Stage Starting Build Parse Stage Finished Build Parse Stage Starting Build Glue 1 Stage Finished Build Glue 1 Stage Starting Build Glue 2 Stage Finished Build Glue 2 Stage Starting Build Glue 3 Stage Finished Build Glue 3 Stage Starting Build Compile Stage Starting "perl Makefile.PL" Stage Generating a dmake-style Makefile Writing Makefile for inline_eumm_define_sprintf_11104628_pl_5316 Writing MYMETA.yml and MYMETA.json Finished "perl Makefile.PL" Stage Starting "make" Stage Running Mkbootstrap for inline_eumm_define_sprintf_11104628_pl_5316 () "D:\perl\bin\perl.exe" -MExtUtils::Command -e chmod -- 644 "inline_eum" "D:\perl\bin\perl.exe" -MExtUtils::Command::MM -e cp_nonempty -- inlin +e_eumm_define_sprintf_11104628_pl_5316. bs blib\arch\auto\inline_eumm_define_sprintf_11104628_pl_5316\inline_e 644 "D:\perl\bin\perl.exe" "D:\perl\site\lib\ExtUtils\xsubpp" -typemap "D +:\perl\lib\ExtUti ls\typemap" inline_eumm_define_sprintf_11104628_pl_5316.xs > inline_e +umm_define_sprintf_11104628_pl_5316.xsc "D:\perl\bin\perl.exe" -MExtUtils::Command -e mv -- inline_eumm_define +_sprintf_11104628_pl_5316.xsc inline_eu mm_define_sprintf_11104628_pl_5316.c gcc -c -s -O2 -DWIN32 -DPERL_RELOCATABLE_INCPUSH -DPERL_TEX +TMODE_SCRIPTS -DUSE_SITECUSTOMIZE - DPERL_IMPLICIT_CONTEXT -DPERL_IMPLICIT_SYS -fno-strict-aliasing -mms-b +itfields -D_USE_32BIT_TIME_T "-DMY_FORMAT=\"%.17e\ "" -s -O2 -DVERSION=\"0.00\" -DXS_VERSION=\"0.00\" "-ID:\p +erl\lib\CORE" inline_eumm_define_spri ntf_11104628_pl_5316.c "D:\perl\bin\perl.exe" -MExtUtils::Mksymlists \ -e "Mksymlists('NAME'=>\"inline_eumm_define_sprintf_11104628_pl_5 +316\", 'DLBASE' => 'inline_eumm_define_sprintf_111 04628_pl_5316', 'DL_FUNCS' => { }, 'FUNCLIST' => [], 'IMPORTS' => { +}, 'DL_VARS' => []);" g++ inline_eumm_define_sprintf_11104628_pl_5316.def -o blib\arch\auto\ +inline_eumm_define_sprintf_11104628_pl_5316\inline _eumm_define_sprintf_11104628_pl_5316.dll -mdll -D_USE_32BIT_TIME_T -s + -L"D:\perl\lib\CORE" -L"D:\perl\mingw\mingw32\i686-w64-mingw32\lib" +inline_eumm_define_sprintf_11104628_pl_5316.o "D:\perl\lib\CORE\li bperl516.a" -lmoldname -lkernel32 -luser32 -lgdi32 -lwinspool -lcomdlg +32 -ladvapi32 -lshell32 -lole32 -loleaut32 -lnetap i32 -luuid -lws2_32 -lmpr -lwinmm -lversion -lodbc32 -lodbccp32 -lcomc +tl32 -Wl,--enable-auto-image-base "D:\perl\bin\perl.exe" -MExtUtils::Command -e chmod -- 755 blib\arch\a +uto\inline_eumm_define_sprintf_11104628 _pl_5316\inline_eumm_define_sprintf_11104628_pl_5316.dll Finished "make" Stage Starting "make install" Stage "D:\perl\bin\perl.exe" -MExtUtils::Command::MM -e cp_nonempty -- inlin +e_eumm_define_sprintf_11104628_pl_5316. bs blib\arch\auto\inline_eumm_define_sprintf_11104628_pl_5316\inline_e 644 Files found in blib\arch: installing files in blib\lib into architectu +re dependent library tree Installing _Inline\lib\auto\inline_eumm_define_sprintf_11104628_pl_531 +6\inline_eumm_define_sprintf_11104628_ pl_5316.dll Finished "make install" Stage Starting Cleaning Up Stage Finished Cleaning Up Stage Finished Build Compile Stage ***%.17e*** 1.41421356237309510e+000 1.41421356237309510e+000
        Heh, whats going on?

        Good question ... I don't have an answer to that ;-)

        Your code still results in the same error for me: fatal error: EXTERN.h: No such file or directory.
        Looks like the "-iquote" that my Inline-C-0.81 invokes is stuffing things up.

        UPDATE: No, it has nothing to do with "-iquote". Turns out that when I switched to I-C-0.76 I also switched to EU-MM-7.04, and the problem I'm facing is due solely to a change that occurs in EU::MM some time between 7.0401 (which is fine) and 7.1001 (which breaks Inline::C). I'll investigate further when I get a chance and file a bug report if warranted.

        What version of Inline::C are you running ? When I switch to Inline-C-0.76, your script works fine - as does mine if I replace the incorrect SV * foo(... with void foo(....

        But now I'm puzzled as to the output we get for printf("***%s***\n", MY_FORMAT);
        The quotes either side of %.17e are apparently missing from MY_FORMAT. So how does printf(MY_FORMAT, sqrt(2.0)) even compile ?
        Can you explain that ?

        BTW, seems that my problem with finding a correct rendition for the DEFINE in the Makefile.PL is dependent upon the version of EU::MM.
        With EU-MM-7.04, this is fine:
        DEFINE => q["-DMY_FORMAT=\\"%.17\\""];
        But with EU-MM-7.34 (which is what I've been using) the crucial percentage symbol is still being omitted.


Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://11104680]
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others examining the Monastery: (8)
As of 2019-10-18 07:35 GMT
Find Nodes?
    Voting Booth?