Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl-Sensitive Sunglasses
 
PerlMonks  

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

by syphilis (Bishop)
on Aug 19, 2019 at 06:14 UTC ( #11104677=note: print w/replies, xml ) Need Help??


in reply to Re: Defining an XS symbol in the Makefile.PL (quoting)
in thread Defining an XS symbol in the Makefile.PL

I don't quite follow, but I did try your suggestion of DEFINE => q{"-DMY_FORMAT=\"%.17\""} in the Makefile.PL.
Note that I've altered the .16e to .17, as that's what's needed by the module I'm actually testing.
That does allow the compilation to succeed and I do see this output during the build:
gcc -c -s -O2 -DWIN32 -DWIN64 -DCONSERVATIVE -DPERL_TEXTMODE_SCRIPTS + -DPERL_IMPLICIT_CONTEXT -DPERL_IMPLICIT_SYS -DUSE_PERLIO -D__USE_MIN +GW_ANSI_STDIO -fwrapv -fno-strict-aliasing -mms-bitfields -s -O2 -D +VERSION=\"1.52\" -DXS_VERSION=\"1.52\" "-IC:\_64\perl530_810\lib\COR +E" -DPERL_EXT -DUSE_PPPORT_H "-DMY_FORMAT=\"%.17\"" ListUtil.c
which, I think, looks right.
However, the XS code that relies on MY_FORMAT being set correctly still fails.
I therefore stuck the following in the XS code to see exactly what MY_FORMAT looks like:
printf("\n**%s**\n", MY_FORMAT);
And that prints out **.17**, showing quite clearly that the quotes && the percentage sign have been lost.

This Inline::C script also fails to build:
use strict; use warnings; use Config; use Inline C => Config => USING => 'ParseRegExp', CCFLAGSEX => q["-DMY_FORMAT=\"%.16e\""], BUILD_NOISY => 1, ; use Inline C =><<'EOC'; SV * foo(void) { printf(MY_FORMAT, sqrt(2.0)); printf("\n"); } EOC foo();
During the build I get:
gcc -c -iquote"C:/_32/C" -s -O2 -DWIN32 -DWIN64 -DCONSERVATIVE -DPER +L_TEXTMODE_SCRIPTS -DPERL_IMPLICIT_CONTEXT -DPERL_IMPLICIT_SYS -DUSE_ +PERLIO -D__USE_MINGW_ANSI_STDIO -fwrapv -fno-strict-aliasing -mms-bit +fields "-DMY_FORMAT=\"%.16e\"" -s -O2 -DVERSION=\"0.00\" -DXS_VERSI +ON=\"0.00\" "-IC:\_64\perl530_810\lib\CORE" try_pl_d937.c <command-line>: warning: missing terminating " character try_pl_d937.xs:1:10: fatal error: EXTERN.h: No such file or directory #include "EXTERN.h" ^~~~~~~~~~ compilation terminated.

I am still quite open to testing other suggestions ... though I'm well and truly over trying to work it out for myself.

Cheers,
Rob

Replies are listed 'Best First'.
Re^3: Defining an XS symbol in the Makefile.PL (quoting)
by Anonymous Monk on Aug 19, 2019 at 08:41 UTC
    Um...so what did mycode show?
      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 inline-eumm-define-sprintf-11104628.pl 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 +m_define_sprintf_11104628_pl_5316.bs" "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 +umm_define_sprintf_11104628_pl_5316.bs 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 +umm_define_sprintf_11104628_pl_5316.bs 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

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others romping around the Monastery: (5)
As of 2019-10-18 07:13 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    Notices?