summaryrefslogtreecommitdiff
path: root/win32/win32.h
diff options
context:
space:
mode:
authorDaniel Dragan <bulk88@hotmail.com>2015-09-30 05:36:51 -0400
committerTony Cook <tony@develop-help.com>2015-10-12 09:13:51 +1100
commit6937817d58b1688d689072cd112ed95fe62db2a7 (patch)
tree9cd25f9a00cbb51500ea6c6311314415c7e80cc3 /win32/win32.h
parent0517ed3816767f5896256870b8cca4b856e4088a (diff)
downloadperl-6937817d58b1688d689072cd112ed95fe62db2a7.tar.gz
add Win32 USE_NO_REGISTRY build option
-the first arg of win32_get_privlib is not used if the registry is not queried, create a macro to allow the arg to drop out on WIN32_NO_REGISTRY builds for efficiency and not to have unused C litteral strings in the binary -This patch changes the ABI of PerlEnv_lib_path/PerlEnvLibPath/win32_get_privlib between USE_NO_REGISTRY and no USE_NO_REGISTRY. Since win32_get_privlib is not exported from perl523.dll, assume it and PerlEnv_lib_path are not public API, note technically PerlEnv_lib_path will be callable only on PERL_IMPLICIT_SYS builds, on no PERL_IMPLICIT_SYS builds it will fail at link time since win32_get_privlib isnt exported. Therefore place it in non-[affecting]-binary compatibility even though it does affect binary compatibility. -delay load advapi32.dll to save startup time (loading the DLL and the DLL calling its initializers in DllMain) and one 4 KB memory page for advapi32's .data section (doing "perl -E"sleep 100" on WinXP shows advapi32 has a 20KB long .data section, first 4 KB are unique to the process, the remaining 16KB are COW shared between processes according to vmmap tool), putting a DebugBreak() in pp_getlogin and doing a "nmake all" shows miniperl never calls getlogin during the build process. An nmake test shows only ext/POSIX/t/wrappers.t and lib/warnings.t execute pp_getlogin. Keeping advapi32.dll out of the perl process requires removing comctl32.dll, since comctrl32.dll loads advapi32.dll, from perl which I always do as a custom patch. filed as [perl #123658] XXXXXXXXXXXXXXXXXXXXXXX
Diffstat (limited to 'win32/win32.h')
-rw-r--r--win32/win32.h12
1 files changed, 11 insertions, 1 deletions
diff --git a/win32/win32.h b/win32/win32.h
index 3b35b6c2a4..e997651c15 100644
--- a/win32/win32.h
+++ b/win32/win32.h
@@ -24,6 +24,9 @@
/* less I/O calls during each require */
# define PERL_DISABLE_PMC
+/* unnecessery for miniperl to lookup anything from an "installed" perl */
+# define WIN32_NO_REGISTRY
+
/* allow minitest to work */
# define PERL_TEXTMODE_SCRIPTS
#endif
@@ -206,6 +209,13 @@ struct utsname {
# define PERL_SOCK_SYSWRITE_IS_SEND
#endif
+#ifdef WIN32_NO_REGISTRY
+/* the last _ in WIN32_NO_REGISTRY_M_ is like the _ in aTHX_ */
+# define WIN32_NO_REGISTRY_M_(x)
+#else
+# define WIN32_NO_REGISTRY_M_(x) x,
+#endif
+
#define PERL_NO_FORCE_LINK /* no need for PL_force_link_funcs */
#define ENV_IS_CASELESS
@@ -394,7 +404,7 @@ DllExport HWND win32_create_message_window(void);
DllExport int win32_async_check(pTHX);
extern int my_fclose(FILE *);
-extern char * win32_get_privlib(const char *pl, STRLEN *const len);
+extern char * win32_get_privlib(WIN32_NO_REGISTRY_M_(const char *pl) STRLEN *const len);
extern char * win32_get_sitelib(const char *pl, STRLEN *const len);
extern char * win32_get_vendorlib(const char *pl, STRLEN *const len);