add lib to ordinary build process, rename lib output to libmicrohttpd2.so, do not link libmicrohttpd2.so against gnutls/libgcrypt

This commit is contained in:
Christian Grothoff
2018-02-18 13:00:11 +01:00
parent aa12189a4b
commit 21ee7de991
6 changed files with 77 additions and 126 deletions
+22 -17
View File
@@ -1692,7 +1692,7 @@ AS_IF([test "x$have_gnutls" != "xyes" && test "x$with_gnutls" = "xyes"], [AC_MSG
gnutls_free(data.data);
]])], [[have_gnutls_sni=yes]], [[have_gnutls_sni=no]])
AC_MSG_RESULT([[$have_gnutls_sni]])
AC_CACHE_CHECK([[whether GnuTLS require libgcrypt initialisaion]], [mhd_cv_grypt_required],
AC_CACHE_CHECK([[whether GnuTLS require libgcrypt initialisaion]], [mhd_cv_gcrypt_required],
[
AC_COMPILE_IFELSE(
[
@@ -1708,7 +1708,7 @@ choke me now
]
)
],
[[mhd_cv_grypt_required='no']], [[mhd_cv_grypt_required='yes']]
[[mhd_cv_gcrypt_required='no']], [[mhd_cv_gcrypt_required='yes']]
)
]
)
@@ -1723,7 +1723,7 @@ choke me now
]
)
AS_IF([[test "x$mhd_cv_grypt_required" = "xyes" && test "x$have_gcrypt" = "xunknown"]],
AS_IF([[test "x$mhd_cv_gcrypt_required" = "xyes" && test "x$have_gcrypt" = "xunknown"]],
[
AM_PATH_LIBGCRYPT([1.2.2], [have_gcrypt=yes], [have_gcrypt=no])
AS_IF([[test "x$have_gcrypt" = "xyes"]],
@@ -1744,7 +1744,7 @@ choke me now
AS_UNSET([[crypt_missing]])
AS_IF([[test "x$have_gnutls" = "xyes"]],
[
AS_IF([[test "x$mhd_cv_grypt_required" = "xyes" && test "x$have_gcrypt" != "xyes"]],
AS_IF([[test "x$mhd_cv_gcrypt_required" = "xyes" && test "x$have_gcrypt" != "xyes"]],
[
crypt_missing="required libgcrypt"
AS_IF([[test "x$enable_https" = "xyes" ]], [AC_MSG_ERROR([[HTTPS support cannot be enabled without $crypt_missing.]])])
@@ -1760,35 +1760,35 @@ choke me now
[
AC_DEFINE([[HTTPS_SUPPORT]],[[1]],[Define to 1 if libmicrohttpd is compiled with HTTPS support.])
enable_https=yes
AS_IF([[test "x$mhd_cv_grypt_required" = "xyes"]],
AS_IF([[test "x$mhd_cv_gcrypt_required" = "xyes"]],
[
MSG_HTTPS="yes (using libgnutls and libgcrypt)"
MHD_LIB_CPPFLAGS="$MHD_LIB_CPPFLAGS $LIBGCRYPT_CFLAGS $GNUTLS_CPPFLAGS"
MHD_LIB_CFLAGS="$MHD_LIB_CFLAGS $LIBGCRYPT_CFLAGS $GNUTLS_CFLAGS"
MHD_LIB_LDFLAGS="$MHD_LIB_LDFLAGS $GNUTLS_LDFLAGS"
MHD_LIBDEPS="$GNUTLS_LIBS $LIBGCRYPT_LIBS $MHD_LIBDEPS"
AC_DEFINE([[MHD_HTTPS_REQUIRE_GRYPT]], [[1]], [Define to `1' if HTTPS require initialisation of libgcrypt])
MHD_TLS_LIB_CPPFLAGS="$LIBGCRYPT_CFLAGS $GNUTLS_CPPFLAGS"
MHD_TLS_LIB_CFLAGS="$LIBGCRYPT_CFLAGS $GNUTLS_CFLAGS"
MHD_TLS_LIB_LDFLAGS="$GNUTLS_LDFLAGS"
MHD_TLS_LIBDEPS="$GNUTLS_LIBS $LIBGCRYPT_LIBS"
AC_DEFINE([[MHD_HTTPS_REQUIRE_GCRYPT]], [[1]], [Define to `1' if HTTPS require initialisation of libgcrypt])
],
[
MSG_HTTPS="yes (using libgnutls)"
AS_UNSET([LIBGCRYPT_CFLAGS])
AS_UNSET([LIBGCRYPT_LIBS])
MHD_LIB_CPPFLAGS="$MHD_LIB_CPPFLAGS $GNUTLS_CPPFLAGS"
MHD_LIB_CFLAGS="$MHD_LIB_CFLAGS $GNUTLS_CFLAGS"
MHD_LIB_LDFLAGS="$MHD_LIB_LDFLAGS $GNUTLS_LDFLAGS"
MHD_LIBDEPS="$GNUTLS_LIBS $MHD_LIBDEPS"
MHD_TLS_LIB_CPPFLAGS="$GNUTLS_CPPFLAGS"
MHD_TLS_LIB_CFLAGS="$GNUTLS_CFLAGS"
MHD_TLS_LIB_LDFLAGS="$GNUTLS_LDFLAGS"
MHD_TLS_LIBDEPS="$GNUTLS_LIBS"
]
)
AS_IF([[ test "x$have_gnutls_pkgcfg" = "xyes" ]],
[ # remove GnuTLS from private libs in .pc file as it defined in Requires.private
MHD_REQ_PRIVATE='gnutls'
AS_IF([[test "x$mhd_cv_grypt_required" = "xyes"]],
AS_IF([[test "x$mhd_cv_gcrypt_required" = "xyes"]],
[[MHD_LIBDEPS_PKGCFG="$LIBGCRYPT_LIBS $MHD_LIBDEPS_PKGCFG"]]
)
],
[
MHD_REQ_PRIVATE=''
AS_IF([[test "x$mhd_cv_grypt_required" = "xyes"]],
AS_IF([[test "x$mhd_cv_gcrypt_required" = "xyes"]],
[[MHD_LIBDEPS_PKGCFG="$LIBGCRYPT_LIBS $MHD_LIBDEPS_PKGCFG"]]
)
MHD_LIBDEPS_PKGCFG="$GNUTLS_LIBS $MHD_LIBDEPS_PKGCFG"
@@ -1818,7 +1818,7 @@ AC_MSG_RESULT([$MSG_HTTPS])
AM_CONDITIONAL([HAVE_GNUTLS], [[test "x$have_gnutls" = "xyes"]])
AM_CONDITIONAL([HAVE_GNUTLS_SNI], [[test "x$have_gnutls_sni" = "xyes"]])
AM_CONDITIONAL([ENABLE_HTTPS], [test "x$enable_https" = "xyes"])
AM_CONDITIONAL([HTTPS_REQUIRE_GRYPT], [[test "x$enable_https" = "xyes" && test "x$mhd_cv_grypt_required" = "xyes"]])
AM_CONDITIONAL([HTTPS_REQUIRE_GCRYPT], [[test "x$enable_https" = "xyes" && test "x$mhd_cv_gcrypt_required" = "xyes"]])
AC_SUBST([GNUTLS_CPPFLAGS])
AC_SUBST([GNUTLS_CFLAGS])
AC_SUBST([GNUTLS_LDFLAGS])
@@ -1990,6 +1990,10 @@ AC_SUBST(MHD_LIB_CPPFLAGS)
AC_SUBST(MHD_LIB_CFLAGS)
AC_SUBST(MHD_LIB_LDFLAGS)
AC_SUBST(MHD_LIBDEPS)
AC_SUBST(MHD_TLS_LIB_CPPFLAGS)
AC_SUBST(MHD_TLS_LIB_CFLAGS)
AC_SUBST(MHD_TLS_LIB_LDFLAGS)
AC_SUBST(MHD_TLS_LIBDEPS)
# for pkg-config
AC_SUBST([MHD_REQ_PRIVATE])
@@ -2022,6 +2026,7 @@ doc/examples/Makefile
m4/Makefile
src/Makefile
src/include/Makefile
src/lib/Makefile
src/microhttpd/Makefile
src/examples/Makefile
src/testcurl/Makefile
+3
View File
@@ -14,6 +14,9 @@ if BUILD_EXAMPLES
SUBDIRS += examples
endif
# Finally (last!) also build experimental lib...
SUBDIRS += lib
EXTRA_DIST = \
datadir/cert-and-key.pem \
datadir/cert-and-key-for-wireshark.pem
+8 -65
View File
@@ -18,12 +18,9 @@
*/
/**
* @file lib/init.c
* @brief initialization routines
* @file gnutls/init.c
* @brief gnutls-specific initialization routines
* @author Christian Grothoff
*
* TODO: most of this is only required for gcrypt/GNUtls,
* should probably be moved to TLS plugin!
*/
#include "internal.h"
#include "init.h"
@@ -35,6 +32,7 @@
GCRY_THREAD_OPTION_PTHREAD_IMPL;
#elif defined(MHD_W32_MUTEX_)
static int
gcry_w32_mutex_init (void **ppmtx)
{
@@ -42,13 +40,12 @@ gcry_w32_mutex_init (void **ppmtx)
if (NULL == *ppmtx)
return ENOMEM;
if (!MHD_mutex_init_ ((MHD_mutex_*)*ppmtx))
if (! MHD_mutex_init_ ((MHD_mutex_*)*ppmtx))
{
free (*ppmtx);
*ppmtx = NULL;
return EPERM;
}
return 0;
}
@@ -108,7 +105,7 @@ MHD_MUTEX_STATIC_DEFN_INIT_(global_init_mutex_);
* and call initialiser if necessary.
*/
void
MHD_check_global_init_ (void)
MHD_TLS_check_global_init_ (void)
{
#ifdef MHD_MUTEX_STATIC_DEFN_INIT_
MHD_mutex_lock_chk_(&global_init_mutex_);
@@ -121,58 +118,16 @@ MHD_check_global_init_ (void)
}
/**
* Default implementation of the panic function,
* prints an error message and aborts.
*
* @param cls unused
* @param file name of the file with the problem
* @param line line number with the problem
* @param reason error message with details
*/
static void
mhd_panic_std (void *cls,
const char *file,
unsigned int line,
const char *reason)
{
(void)cls; /* Mute compiler warning. */
#ifdef HAVE_MESSAGES
fprintf (stderr,
_("Fatal error in GNU libmicrohttpd %s:%u: %s\n"),
file,
line,
reason);
#else /* ! HAVE_MESSAGES */
(void)file; /* Mute compiler warning. */
(void)line; /* Mute compiler warning. */
(void)reason; /* Mute compiler warning. */
#endif
abort ();
}
/**
* Initialize do setup work.
*/
void
MHD_init(void)
MHD_TLS_init (void)
{
#if defined(_WIN32) && ! defined(__CYGWIN__)
WSADATA wsd;
#endif /* _WIN32 && ! __CYGWIN__ */
if (NULL == mhd_panic)
mhd_panic = &mhd_panic_std;
#if defined(_WIN32) && ! defined(__CYGWIN__)
if (0 != WSAStartup(MAKEWORD(2, 2), &wsd))
MHD_PANIC (_("Failed to initialize winsock\n"));
mhd_winsock_inited_ = 1;
if (2 != LOBYTE(wsd.wVersion) && 2 != HIBYTE(wsd.wVersion))
MHD_PANIC (_("Winsock version 2.2 is not available\n"));
#endif
#ifdef HTTPS_SUPPORT
#ifdef MHD_HTTPS_REQUIRE_GRYPT
#if GCRYPT_VERSION_NUMBER < 0x010600
#if defined(MHD_USE_POSIX_THREADS)
@@ -191,27 +146,15 @@ MHD_init(void)
#endif
#endif /* MHD_HTTPS_REQUIRE_GRYPT */
gnutls_global_init ();
#endif /* HTTPS_SUPPORT */
MHD_monotonic_sec_counter_init();
#ifdef HAVE_FREEBSD_SENDFILE
MHD_conn_init_static_ ();
#endif /* HAVE_FREEBSD_SENDFILE */
}
void
MHD_fini(void)
MHD_TLS_fini(void)
{
#ifdef HTTPS_SUPPORT
gnutls_global_deinit ();
#endif /* HTTPS_SUPPORT */
#if defined(_WIN32) && ! defined(__CYGWIN__)
if (mhd_winsock_inited_)
WSACleanup();
#endif
MHD_monotonic_sec_counter_finish();
}
#ifdef _AUTOINIT_FUNCS_ARE_SUPPORTED
_SET_INIT_AND_DEINIT_FUNCS(MHD_init, MHD_fini);
_SET_INIT_AND_DEINIT_FUNCS(MHD_TLS_init, MHD_TLS_fini);
#endif /* _AUTOINIT_FUNCS_ARE_SUPPORTED */
+3 -3
View File
@@ -17,7 +17,7 @@
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
/**
* @file lib/init.h
* @file gnutls/init.h
* @brief functions to initialize library
* @author Christian Grothoff
*/
@@ -31,14 +31,14 @@
* Do nothing - global initialisation is
* performed by library constructor.
*/
#define MHD_check_global_init_() (void)0
#define MHD_TLS_check_global_init_() (void)0
#else /* ! _AUTOINIT_FUNCS_ARE_SUPPORTED */
/**
* Check whether global initialisation was performed
* and call initialiser if necessary.
*/
void
MHD_check_global_init_ (void);
MHD_TLS_check_global_init_ (void);
#endif /* ! _AUTOINIT_FUNCS_ARE_SUPPORTED */
+37 -37
View File
@@ -5,54 +5,56 @@ AM_CPPFLAGS = \
AM_CFLAGS = $(HIDDEN_VISIBILITY_CFLAGS)
lib_LTLIBRARIES = \
libmicrohttpd.la
# Call "libmicrohttpd2" for now, but only while under
# development. Once we have 'compat' working, this should be changed!
noinst_LTLIBRARIES = \
libmicrohttpd2.la
noinst_DATA =
MOSTLYCLEANFILES =
if W32_SHARED_LIB_EXP
W32_MHD_LIB_LDFLAGS = -Wl,--output-def,$(lt_cv_objdir)/libmicrohttpd.def -XCClinker -static-libgcc
noinst_DATA += $(lt_cv_objdir)/libmicrohttpd.lib $(lt_cv_objdir)/libmicrohttpd.def $(lt_cv_objdir)/libmicrohttpd.exp
MOSTLYCLEANFILES += $(lt_cv_objdir)/libmicrohttpd.lib $(lt_cv_objdir)/libmicrohttpd.def $(lt_cv_objdir)/libmicrohttpd.exp
W32_MHD_LIB_LDFLAGS = -Wl,--output-def,$(lt_cv_objdir)/libmicrohttpd2.def -XCClinker -static-libgcc
noinst_DATA += $(lt_cv_objdir)/libmicrohttpd2.lib $(lt_cv_objdir)/libmicrohttpd2.def $(lt_cv_objdir)/libmicrohttpd2.exp
MOSTLYCLEANFILES += $(lt_cv_objdir)/libmicrohttpd2.lib $(lt_cv_objdir)/libmicrohttpd2.def $(lt_cv_objdir)/libmicrohttpd2.exp
$(lt_cv_objdir)/libmicrohttpd.def: libmicrohttpd.la
$(lt_cv_objdir)/libmicrohttpd2.def: libmicrohttpd2.la
$(lt_cv_objdir)/libmicrohttpd.exp: $(lt_cv_objdir)/libmicrohttpd.lib
$(lt_cv_objdir)/libmicrohttpd2.exp: $(lt_cv_objdir)/libmicrohttpd2.lib
$(lt_cv_objdir)/libmicrohttpd.lib: $(lt_cv_objdir)/libmicrohttpd.def libmicrohttpd.la $(libmicrohttpd_la_OBJECTS)
$(lt_cv_objdir)/libmicrohttpd2.lib: $(lt_cv_objdir)/libmicrohttpd2.def libmicrohttpd2.la $(libmicrohttpd2_la_OBJECTS)
if USE_MS_LIB_TOOL
@echo Creating $@ and libmicrohttpd.exp by $(MS_LIB_TOOL)... && \
dll_name=`$(EGREP) -o dlname=\'.+\' libmicrohttpd.la` && \
@echo Creating $@ and libmicrohttpd2.exp by $(MS_LIB_TOOL)... && \
dll_name=`$(EGREP) -o dlname=\'.+\' libmicrohttpd2.la` && \
dll_name=$${dll_name#*\'} && dll_name=$${dll_name%\'} && test -n "$$dll_name" && \
echo Creating $$dll_name by $(MS_LIB_TOOL).. && cd "$(lt_cv_objdir)" && \
$(MS_LIB_TOOL) -def:libmicrohttpd.def -name:$$dll_name -out:libmicrohttpd.lib $(libmicrohttpd_la_OBJECTS:.lo=.o) && cd ..
$(MS_LIB_TOOL) -def:libmicrohttpd2.def -name:$$dll_name -out:libmicrohttpd2.lib $(libmicrohttpd2_la_OBJECTS:.lo=.o) && cd ..
else
@echo Creating $@ and libmicrohttpd.exp by $(DLLTOOL)... && \
dll_name=`$(EGREP) -o dlname=\'.+\' libmicrohttpd.la` && \
@echo Creating $@ and libmicrohttpd2.exp by $(DLLTOOL)... && \
dll_name=`$(EGREP) -o dlname=\'.+\' libmicrohttpd2.la` && \
dll_name=$${dll_name#*\'} && dll_name=$${dll_name%\'} && test -n "$$dll_name" && \
echo Creating $$dll_name by $(DLLTOOL).. && cd "$(lt_cv_objdir)" && \
$(DLLTOOL) -d ./libmicrohttpd.def -D $$dll_name -l libmicrohttpd.lib $(libmicrohttpd_la_OBJECTS:.lo=.o) -e ./libmicrohttpd.exp && cd .. &&\
echo Created libmicrohttpd.exp and libmicrohttpd.lib.
$(DLLTOOL) -d ./libmicrohttpd2.def -D $$dll_name -l libmicrohttpd2.lib $(libmicrohttpd2_la_OBJECTS:.lo=.o) -e ./libmicrohttpd2.exp && cd .. &&\
echo Created libmicrohttpd2.exp and libmicrohttpd2.lib.
endif
else
W32_MHD_LIB_LDFLAGS =
endif
if W32_STATIC_LIB
noinst_DATA += $(lt_cv_objdir)/libmicrohttpd-static.lib
MOSTLYCLEANFILES += $(lt_cv_objdir)/libmicrohttpd-static.lib
noinst_DATA += $(lt_cv_objdir)/libmicrohttpd2-static.lib
MOSTLYCLEANFILES += $(lt_cv_objdir)/libmicrohttpd2-static.lib
$(lt_cv_objdir)/libmicrohttpd-static.lib: libmicrohttpd.la $(libmicrohttpd_la_OBJECTS)
$(lt_cv_objdir)/libmicrohttpd2-static.lib: libmicrohttpd2.la $(libmicrohttpd2_la_OBJECTS)
if USE_MS_LIB_TOOL
$(MS_LIB_TOOL) -out:$@ $(libmicrohttpd_la_OBJECTS:.lo=.o)
$(MS_LIB_TOOL) -out:$@ $(libmicrohttpd2_la_OBJECTS:.lo=.o)
else
cp $(lt_cv_objdir)/libmicrohttpd.a $@
cp $(lt_cv_objdir)/libmicrohttpd2.a $@
endif
endif
libmicrohttpd_la_SOURCES = \
libmicrohttpd2_la_SOURCES = \
action_continue.c \
action_from_response.c \
action_parse_post.c \
@@ -107,26 +109,24 @@ libmicrohttpd_la_SOURCES = \
panic.c \
version.c
libmicrohttpd_la_CPPFLAGS = \
libmicrohttpd2_la_CPPFLAGS = \
$(AM_CPPFLAGS) $(MHD_LIB_CPPFLAGS) \
-DBUILDING_MHD_LIB=1
libmicrohttpd_la_CFLAGS = \
libmicrohttpd2_la_CFLAGS = \
$(AM_CFLAGS) $(MHD_LIB_CFLAGS)
libmicrohttpd_la_LDFLAGS = \
$(MHD_LIB_LDFLAGS) \
libmicrohttpd2_la_LDFLAGS = \
$(MHD_LIB_LDFLAGS) -ldl \
$(W32_MHD_LIB_LDFLAGS) \
-version-info 666:0:0 # FIXME: fix once closer to release...
libmicrohttpd_la_LIBADD = \
-version-info 0:0:0 # FIXME: fix once closer to release...
libmicrohttpd2_la_LIBADD = \
$(MHD_LIBDEPS) # FIXME: should separate out GNUTLS_LIBS/GCRYPT here!
if HAVE_W32
MHD_DLL_RES_SRC = microhttpd_dll_res.rc
MHD_DLL_RES_LO = libmicrohttpd_la-$(MHD_DLL_RES_SRC:.rc=.lo)
MHD_DLL_RES_LO = libmicrohttpd2_la-$(MHD_DLL_RES_SRC:.rc=.lo)
EXTRA_libmicrohttpd_la_DEPENDENCIES = $(MHD_DLL_RES_LO)
libmicrohttpd_la_LIBADD += $(MHD_DLL_RES_LO)
EXTRA_libmicrohttpd2_la_DEPENDENCIES = $(MHD_DLL_RES_LO)
libmicrohttpd2_la_LIBADD += $(MHD_DLL_RES_LO)
# General rule is not required, but keep it just in case
.rc.lo:
@@ -141,7 +141,7 @@ libmicrohttpd_la_LIBADD += $(MHD_DLL_RES_LO)
# Note: windres does not understand '-isystem' flag, so all
# possible '-isystem' flags are replaced by simple '-I' flags.
$(MHD_DLL_RES_LO): $(MHD_DLL_RES_SRC)
RC_CPP_FLAGS=" $(DEFAULT_INCLUDES) $(INCLUDES) $(libmicrohttpd_la_CPPFLAGS) $(CPPFLAGS) " && \
RC_CPP_FLAGS=" $(DEFAULT_INCLUDES) $(INCLUDES) $(libmicrohttpd2_la_CPPFLAGS) $(CPPFLAGS) " && \
$(LIBTOOL) $(AM_V_lt) --tag=RC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(RC) $(RCFLAGS) $(DEFS) $${RC_CPP_FLAGS// -isystem / -I } $< -o $@ && \
echo > $@-empty.c && $(CC) $(AM_CFLAGS) $(CFLAGS) -c $@-empty.c -o $(@:.lo=.o) && rm -f $@-empty.c
endif
@@ -151,26 +151,26 @@ if USE_COVERAGE
endif
if !MHD_HAVE_TSEARCH
libmicrohttpd_la_SOURCES += \
libmicrohttpd2_la_SOURCES += \
tsearch.c tsearch.h
endif
# TBD!
if HAVE_POSTPROCESSOR
#libmicrohttpd_la_SOURCES += \
#libmicrohttpd2_la_SOURCES += \
# postprocessor.c
endif
# TBD!
if ENABLE_DAUTH
#libmicrohttpd_la_SOURCES += \
#libmicrohttpd2_la_SOURCES += \
# digestauth.c \
# md5.c md5.h
endif
# TBD!
if ENABLE_BAUTH
#libmicrohttpd_la_SOURCES += \
#libmicrohttpd2_la_SOURCES += \
# basicauth.c \
# base64.c base64.h
endif
+4 -4
View File
@@ -70,16 +70,16 @@ libmicrohttpd_la_SOURCES = \
response.c response.h
libmicrohttpd_la_CPPFLAGS = \
$(AM_CPPFLAGS) $(MHD_LIB_CPPFLAGS) \
$(AM_CPPFLAGS) $(MHD_LIB_CPPFLAGS) $(MHD_TLS_LIB_CPPFLAGS) \
-DBUILDING_MHD_LIB=1
libmicrohttpd_la_CFLAGS = \
$(AM_CFLAGS) $(MHD_LIB_CFLAGS)
$(AM_CFLAGS) $(MHD_LIB_CFLAGS) $(MHD_TLS_LIB_CFLAGS)
libmicrohttpd_la_LDFLAGS = \
$(MHD_LIB_LDFLAGS) \
$(MHD_LIB_LDFLAGS) $(MHD_TLS_LIB_LDFLAGS) \
$(W32_MHD_LIB_LDFLAGS) \
-version-info @LIB_VERSION_CURRENT@:@LIB_VERSION_REVISION@:@LIB_VERSION_AGE@
libmicrohttpd_la_LIBADD = \
$(MHD_LIBDEPS)
$(MHD_LIBDEPS) $(MHD_TLS_LIBDEPS)
if HAVE_W32
MHD_DLL_RES_SRC = microhttpd_dll_res.rc