Commit 2d1c7906 authored by Alexandre Julliard's avatar Alexandre Julliard

Moved libwine to libs/ directory.

Some makefile fixes and cleanups.
parent 90b68fc7
...@@ -71,9 +71,9 @@ WRCFLAGS = -m --nostdinc $(EXTRAWRCFLAGS) ...@@ -71,9 +71,9 @@ WRCFLAGS = -m --nostdinc $(EXTRAWRCFLAGS)
LDPATH = @LDPATH@ LDPATH = @LDPATH@
DLLDIR = $(TOPOBJDIR)/dlls DLLDIR = $(TOPOBJDIR)/dlls
LIBPORT = -L$(TOPOBJDIR)/libs/port -lwine_port LIBPORT = -L$(TOPOBJDIR)/libs/port -lwine_port
LIBWINE = -L$(TOPOBJDIR)/library -lwine
LIBUNICODE = -L$(TOPOBJDIR)/libs/unicode -lwine_unicode LIBUNICODE = -L$(TOPOBJDIR)/libs/unicode -lwine_unicode
LIBUUID = -L$(TOPOBJDIR)/libs/uuid -lwine_uuid LIBUUID = -L$(TOPOBJDIR)/libs/uuid -lwine_uuid
LIBWINE = -L$(TOPOBJDIR)/libs/wine -lwine
@SET_MAKE@ @SET_MAKE@
...@@ -235,10 +235,16 @@ clean:: $(SUBDIRS:%=%/__clean__) $(EXTRASUBDIRS:%=%/__clean__) ...@@ -235,10 +235,16 @@ clean:: $(SUBDIRS:%=%/__clean__) $(EXTRASUBDIRS:%=%/__clean__)
# Rules for installing # Rules for installing
$(INSTALLSUBDIRS:%=%/__install__): dummy $(SUBDIRS:%=%/__install__): dummy
cd `dirname $@` && $(MAKE) install cd `dirname $@` && $(MAKE) install
$(INSTALLSUBDIRS:%=%/__uninstall__): dummy $(SUBDIRS:%=%/__install-lib__): dummy
cd `dirname $@` && $(MAKE) install-lib
$(SUBDIRS:%=%/__install-dev__): dummy
cd `dirname $@` && $(MAKE) install-dev
$(SUBDIRS:%=%/__uninstall__): dummy
cd `dirname $@` && $(MAKE) uninstall cd `dirname $@` && $(MAKE) uninstall
install:: $(INSTALLSUBDIRS:%=%/__install__) install:: $(INSTALLSUBDIRS:%=%/__install__)
...@@ -246,7 +252,8 @@ install:: $(INSTALLSUBDIRS:%=%/__install__) ...@@ -246,7 +252,8 @@ install:: $(INSTALLSUBDIRS:%=%/__install__)
uninstall:: $(INSTALLSUBDIRS:%=%/__uninstall__) uninstall:: $(INSTALLSUBDIRS:%=%/__uninstall__)
.PHONY: install install-lib install-dev uninstall \ .PHONY: install install-lib install-dev uninstall \
$(INSTALLSUBDIRS:%=%/__install__) $(INSTALLSUBDIRS:%=%/__uninstall__) $(SUBDIRS:%=%/__install__) $(SUBDIRS:%=%/__uninstall__) \
$(SUBDIRS:%=%/__install-lib__) $(SUBDIRS:%=%/__install-dev__)
# Rules for checking that no imports are missing # Rules for checking that no imports are missing
......
...@@ -31,7 +31,6 @@ SUBDIRS = \ ...@@ -31,7 +31,6 @@ SUBDIRS = \
dlls \ dlls \
documentation \ documentation \
include \ include \
library \
libs \ libs \
miscemu \ miscemu \
programs \ programs \
...@@ -41,7 +40,6 @@ SUBDIRS = \ ...@@ -41,7 +40,6 @@ SUBDIRS = \
# Sub-directories to install for install-lib # Sub-directories to install for install-lib
INSTALLLIBSUBDIRS = \ INSTALLLIBSUBDIRS = \
documentation \ documentation \
library \
miscemu \ miscemu \
programs \ programs \
server server
...@@ -101,36 +99,25 @@ uninstall:: $(INSTALLBOTHSUBDIRS:%=%/__uninstall__) ...@@ -101,36 +99,25 @@ uninstall:: $(INSTALLBOTHSUBDIRS:%=%/__uninstall__)
$(RM) $(datadir)/aclocal/wine.m4 $(RM) $(datadir)/aclocal/wine.m4
-rmdir $(datadir)/aclocal -rmdir $(datadir)/aclocal
$(INSTALLBOTHSUBDIRS:%=%/__install-lib__): dummy .PHONY: install-aclocal
cd `dirname $@` && $(MAKE) install-lib
$(INSTALLBOTHSUBDIRS:%=%/__install-dev__): dummy
cd `dirname $@` && $(MAKE) install-dev
$(INSTALLBOTHSUBDIRS:%=%/__uninstall__): dummy
cd `dirname $@` && $(MAKE) uninstall
.PHONY: install-aclocal $(INSTALLBOTHSUBDIRS:%=%/__install-lib__) $(INSTALLBOTHSUBDIRS:%=%/__install-dev__) $(INSTALLBOTHSUBDIRS:%=%/__uninstall__)
# Dependencies between directories # Dependencies between directories
all: $(SUBDIRS) all: $(SUBDIRS)
dlls: library libs tools dlls: libs tools
server: library libs tools server: libs tools
miscemu programs: dlls library libs tools miscemu programs: dlls libs tools
tools: library libs tools: libs
dlls/__install-lib__ dlls/__install-dev__: library libs tools dlls/__install-lib__ dlls/__install-dev__: libs tools
server/__install__: library libs tools libs/__install-lib__ libs/__install-dev__: libs
miscemu/__install__ programs/__install__: library libs tools dlls/__install-lib__ server/__install__: libs tools
library/__install__: library miscemu/__install__ programs/__install__: libs tools dlls/__install-lib__
libs/__install__: libs
tools/__install__: tools tools/__install__: tools
# Test rules # Test rules
checklink:: $(TESTSUBDIRS:%=%/__checklink__) checklink:: $(TESTSUBDIRS:%=%/__checklink__)
$(CC) -o checklink $(TOPSRCDIR)/library/checklink.c && $(RM) checklink
check test:: wine $(TESTSUBDIRS:%=%/__test__) check test:: wine $(TESTSUBDIRS:%=%/__test__)
......
...@@ -1513,11 +1513,11 @@ dlls/wsock32/Makefile ...@@ -1513,11 +1513,11 @@ dlls/wsock32/Makefile
dlls/x11drv/Makefile dlls/x11drv/Makefile
documentation/Makefile documentation/Makefile
include/Makefile include/Makefile
library/Makefile
libs/Makefile libs/Makefile
libs/port/Makefile libs/port/Makefile
libs/unicode/Makefile libs/unicode/Makefile
libs/uuid/Makefile libs/uuid/Makefile
libs/wine/Makefile
miscemu/Makefile miscemu/Makefile
programs/Makefile programs/Makefile
programs/avitools/Makefile programs/avitools/Makefile
......
...@@ -49,14 +49,14 @@ $(SPEC_DEF): $(WINEBUILD) ...@@ -49,14 +49,14 @@ $(SPEC_DEF): $(WINEBUILD)
# Rules for checking that no imports are missing # Rules for checking that no imports are missing
CHECKLINK_RPATH = dlls library libs/unicode CHECKLINK_RPATH = dlls libs/unicode libs/wine
.PHONY: checklink16 $(WIN16_FILES:%=__checklink16__%) .PHONY: checklink16 $(WIN16_FILES:%=__checklink16__%)
$(WIN16_FILES:%=__checklink16__%): checklink16 $(WIN16_FILES:%=__checklink16__%): checklink16
checklink16:: $(MAINSPEC).o $(OBJS) $(MODULE).dbg.o dummy checklink16:: $(MAINSPEC).o $(OBJS) $(MODULE).dbg.o dummy
$(CC) -o checklink $(CHECKLINK_RPATH:%=-Wl,-rpath,$(TOPOBJDIR)/%) $(TOPSRCDIR)/library/checklink.c $(MAINSPEC).o $(OBJS) $(MODULE).dbg.o -L$(DLLDIR) $(LDIMPORTS:%=-l%) $(ALL_LIBS) && $(RM) checklink $(CC) -o checklink $(CHECKLINK_RPATH:%=-Wl,-rpath,$(TOPOBJDIR)/%) $(TOPSRCDIR)/dlls/checklink.c $(MAINSPEC).o $(OBJS) $(MODULE).dbg.o -L$(DLLDIR) $(LDIMPORTS:%=-l%) $(ALL_LIBS) && $(RM) checklink
checklink:: $(WIN16_FILES:%=__checklink16__%) checklink:: $(WIN16_FILES:%=__checklink16__%)
......
Makefile
libwine.dll
libwine.so.1.0
/*
* Misc. functions for systems that don't have them
*
* Copyright 1996 Alexandre Julliard
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include "config.h"
#include "wine/port.h"
#ifdef __BEOS__
#include <be/kernel/fs_info.h>
#include <be/kernel/OS.h>
#endif
#include <assert.h>
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#ifdef HAVE_UNISTD_H
# include <unistd.h>
#endif
#include <sys/types.h>
#ifdef HAVE_SYS_INTTYPES_H
# include <sys/inttypes.h>
#endif
#ifdef HAVE_SYS_TIME_h
# include <sys/time.h>
#endif
#include <sys/stat.h>
#ifdef HAVE_SYS_IOCTL_H
#include <sys/ioctl.h>
#endif
#include <errno.h>
#include <fcntl.h>
#ifdef HAVE_TERMIOS_H
#include <termios.h>
#endif
#ifdef HAVE_SYS_MMAN_H
#include <sys/mman.h>
#endif
#ifdef HAVE_LIBIO_H
# include <libio.h>
#endif
#ifdef HAVE_SYSCALL_H
# include <syscall.h>
#endif
#ifdef HAVE_STDINT_H
# include <stdint.h>
#endif
/***********************************************************************
* pthread functions
*/
#ifndef HAVE_PTHREAD_GETSPECIFIC
void pthread_getspecific() { assert(0); }
#endif
#ifndef HAVE_PTHREAD_KEY_CREATE
void pthread_key_create() { assert(0); }
#endif
#ifndef HAVE_PTHREAD_MUTEX_LOCK
void pthread_mutex_lock() { assert(0); }
#endif
#ifndef HAVE_PTHREAD_MUTEX_UNLOCK
void pthread_mutex_unlock() { assert(0); }
#endif
#ifndef HAVE_PTHREAD_SETSPECIFIC
void pthread_setspecific() { assert(0); }
#endif
...@@ -7,21 +7,23 @@ MODULE = none ...@@ -7,21 +7,23 @@ MODULE = none
SUBDIRS = \ SUBDIRS = \
port \ port \
unicode \ unicode \
uuid uuid \
wine
# Sub-directories to install for install-lib INSTALLSUBDIRS = \
INSTALLLIBSUBDIRS = unicode unicode \
uuid \
# Sub-directories to install for install-dev wine
INSTALLDEVSUBDIRS = uuid
INSTALLSUBDIRS = $(INSTALLDEVSUBDIRS) $(INSTALLLIBSUBDIRS)
@MAKE_RULES@ @MAKE_RULES@
all: $(SUBDIRS) all: $(SUBDIRS)
install-lib:: $(INSTALLLIBSUBDIRS:%=%/__install__) install-lib:: $(INSTALLSUBDIRS:%=%/__install-lib__)
install-dev:: $(INSTALLDEVSUBDIRS:%=%/__install__) install-dev:: $(INSTALLSUBDIRS:%=%/__install-dev__)
# Inter-dll dependencies
wine wine/__install__ wine/__install-lib__: port
### Dependencies: ### Dependencies:
DEFS = @DLLFLAGS@ -D__WINESRC__ DEFS = @DLLFLAGS@ -D__WINESRC__ -DNO_LIBWINE_PORT
TOPSRCDIR = @top_srcdir@ TOPSRCDIR = @top_srcdir@
TOPOBJDIR = ../.. TOPOBJDIR = ../..
SRCDIR = @srcdir@ SRCDIR = @srcdir@
VPATH = @srcdir@ VPATH = @srcdir@
LIBEXT = @LIBEXT@ LIBEXT = @LIBEXT@
MODULE = none
SOVERSION = 1 SOVERSION = 1
SONAME = libwine_unicode.so.$(SOVERSION) SONAME = libwine_unicode.so.$(SOVERSION)
MODULE = libwine_unicode.$(LIBEXT)
CODEPAGES = \ CODEPAGES = \
037 \ 037 \
...@@ -81,40 +81,42 @@ C_SRCS = \ ...@@ -81,40 +81,42 @@ C_SRCS = \
wctype.c \ wctype.c \
$(CODEPAGES:%=c_%.c) $(CODEPAGES:%=c_%.c)
all: libwine_unicode.$(LIBEXT) all: $(MODULE)
@MAKE_RULES@ @MAKE_RULES@
libwine_unicode.so.$(SOVERSION): $(OBJS) libwine_unicode.so.$(SOVERSION): $(OBJS) Makefile.in
$(LDSHARED) $(OBJS) -o $@ $(LDSHARED) $(OBJS) -o $@
libwine_unicode.so: libwine_unicode.so.$(SOVERSION) libwine_unicode.so: libwine_unicode.so.$(SOVERSION)
$(RM) $@ && $(LN_S) libwine_unicode.so.$(SOVERSION) $@ $(RM) $@ && $(LN_S) libwine_unicode.so.$(SOVERSION) $@
libwine_unicode.a: $(OBJS) libwine_unicode.a: wine_unicode.def
$(RM) $@ $(DLLTOOL) -l $@ -d $(SRCDIR)/wine_unicode.def
$(AR) $@ $(OBJS)
$(RANLIB) $@
libwine_unicode.dll: $(OBJS) wine_unicode.def libwine_unicode.dll: $(OBJS) wine_unicode.def Makefile.in
$(DLLWRAP) --def $(SRCDIR)/wine_unicode.def --implib libwine_unicode.a -o libwine_unicode.dll $(OBJS) $(DLLWRAP) --def $(SRCDIR)/wine_unicode.def -o $@ $(OBJS)
.PHONY: install_so install_a install_dll .PHONY: install-lib-so install-lib-dll install-dev-so install-dev-dll
install_so: libwine_unicode.so.$(SOVERSION) dummy install-lib-so: libwine_unicode.so.$(SOVERSION) dummy
$(MKINSTALLDIRS) $(libdir) $(MKINSTALLDIRS) $(libdir)
$(INSTALL_PROGRAM) libwine_unicode.so.$(SOVERSION) $(libdir)/libwine_unicode.so.$(SOVERSION) $(INSTALL_PROGRAM) libwine_unicode.so.$(SOVERSION) $(libdir)/libwine_unicode.so.$(SOVERSION)
cd $(libdir) && $(RM) libwine_unicode.so && $(LN_S) libwine_unicode.so.$(SOVERSION) libwine_unicode.so
install_a: libwine_unicode.a dummy install-lib-dll: libwine_unicode.dll dummy
$(MKINSTALLDIRS) $(libdir) $(MKINSTALLDIRS) $(libdir)
$(INSTALL_DATA) libwine_unicode.a $(libdir)/libwine_unicode.a $(INSTALL_DATA) libwine_unicode.dll $(libdir)/libwine_unicode.dll
install_dll: libwine_unicode.dll dummy install-dev-so: dummy
$(MKINSTALLDIRS) $(libdir) $(MKINSTALLDIRS) $(libdir)
$(INSTALL_DATA) libwine_unicode.dll $(libdir)/libwine_unicode.dll cd $(libdir) && $(RM) libwine_unicode.so && $(LN_S) libwine_unicode.so.$(SOVERSION) libwine_unicode.so
install-dev-dll: libwine_unicode.a dummy
$(MKINSTALLDIRS) $(libdir)
$(INSTALL_DATA) libwine_unicode.a $(libdir)/libwine_unicode.a
install:: $(LIBEXT:%=install_%) install install-lib:: $(LIBEXT:%=install-lib-%)
install install-dev:: $(LIBEXT:%=install-dev-%)
uninstall:: uninstall::
$(RM) $(libdir)/libwine_unicode.a $(libdir)/libwine_unicode.dll $(libdir)/libwine_unicode.so $(libdir)/libwine_unicode.so.$(SOVERSION) $(RM) $(libdir)/libwine_unicode.a $(libdir)/libwine_unicode.dll $(libdir)/libwine_unicode.so $(libdir)/libwine_unicode.so.$(SOVERSION)
......
...@@ -14,12 +14,12 @@ all: $(MODULE) ...@@ -14,12 +14,12 @@ all: $(MODULE)
@MAKE_RULES@ @MAKE_RULES@
$(MODULE): $(OBJS) $(MODULE): $(OBJS) Makefile.in
$(RM) $@ $(RM) $@
$(AR) $@ $(OBJS) $(AR) $@ $(OBJS)
$(RANLIB) $@ $(RANLIB) $@
install:: libwine_uuid.a install install-dev:: libwine_uuid.a
$(MKINSTALLDIRS) $(libdir) $(MKINSTALLDIRS) $(libdir)
$(INSTALL_DATA) libwine_uuid.a $(libdir)/libwine_uuid.a $(INSTALL_DATA) libwine_uuid.a $(libdir)/libwine_uuid.a
......
Makefile
libwine.so.1
DEFS = @DLLFLAGS@ -D__WINESRC__ -DDLLDIR="\"$(dlldir)\"" DEFS = @DLLFLAGS@ -D__WINESRC__ -DDLLDIR="\"$(dlldir)\""
TOPSRCDIR = @top_srcdir@ TOPSRCDIR = @top_srcdir@
TOPOBJDIR = .. TOPOBJDIR = ../..
SRCDIR = @srcdir@ SRCDIR = @srcdir@
VPATH = @srcdir@ VPATH = @srcdir@
LIBEXT = @LIBEXT@ LIBEXT = @LIBEXT@
MODULE = none SOVERSION = 1
SOVERSION = 1.0 SONAME = libwine.so.$(SOVERSION)
SONAME = libwine.so MODULE = libwine.$(LIBEXT)
EXTRALIBS = @DLLIBS@ @CRTLIBS@ EXTRALIBS = $(LIBPORT) @DLLIBS@ @CRTLIBS@
C_SRCS = \ C_SRCS = \
config.c \ config.c \
debug.c \ debug.c \
errno.c \ errno.c \
ldt.c \ ldt.c \
loader.c \ loader.c
port.c
all: libwine.$(LIBEXT) all: libwine.$(LIBEXT)
@MAKE_RULES@ @MAKE_RULES@
libwine.so.$(SOVERSION): $(OBJS) libwine.so.$(SOVERSION): $(OBJS) Makefile.in
$(LDSHARED) $(OBJS) $(EXTRALIBS) $(LIBS) -o $@ $(LDSHARED) $(OBJS) $(EXTRALIBS) $(LIBS) -o $@
libwine.so: libwine.so.$(SOVERSION) libwine.so: libwine.so.$(SOVERSION)
$(RM) $@ && $(LN_S) libwine.so.$(SOVERSION) $@ $(RM) $@ && $(LN_S) libwine.so.$(SOVERSION) $@
libwine.a: $(OBJS) libwine.dll libwine.a: $(OBJS) Makefile.in
$(RM) $@
$(AR) $@ $(OBJS)
$(RANLIB) $@
libwine.dll: $(OBJS)
$(DLLWRAP) --export-all --implib libwine.a -o libwine.dll $(OBJS) $(EXTRALIBS) $(DLLWRAP) --export-all --implib libwine.a -o libwine.dll $(OBJS) $(EXTRALIBS)
.PHONY: install_so install_a install_dll .PHONY: install-lib-so install-lib-dll install-dev-so install-dev-dll
install_so: libwine.so.$(SOVERSION) dummy install-lib-so: libwine.so.$(SOVERSION) dummy
$(MKINSTALLDIRS) $(libdir) $(MKINSTALLDIRS) $(libdir)
$(INSTALL_PROGRAM) libwine.so.$(SOVERSION) $(libdir)/libwine.so.$(SOVERSION) $(INSTALL_PROGRAM) libwine.so.$(SOVERSION) $(libdir)/libwine.so.$(SOVERSION)
cd $(libdir) && $(RM) libwine.so && $(LN_S) libwine.so.$(SOVERSION) libwine.so
install_a: libwine.a dummy install-lib-dll: libwine.dll dummy
$(MKINSTALLDIRS) $(libdir) $(MKINSTALLDIRS) $(libdir)
$(INSTALL_DATA) libwine.a $(libdir)/libwine.a $(INSTALL_DATA) libwine.dll $(libdir)/libwine.dll
install_dll: libwine.dll dummy install-dev-so: dummy
$(MKINSTALLDIRS) $(libdir) $(MKINSTALLDIRS) $(libdir)
$(INSTALL_DATA) libwine.dll $(libdir)/libwine.dll cd $(libdir) && $(RM) libwine.so && $(LN_S) libwine.so.$(SOVERSION) libwine.so
install-dev-dll: libwine.a dummy
$(MKINSTALLDIRS) $(libdir)
$(INSTALL_DATA) libwine.a $(libdir)/libwine.a
install:: $(LIBEXT:%=install_%) install install-lib:: $(LIBEXT:%=install-lib-%)
install install-dev:: $(LIBEXT:%=install-dev-%)
uninstall:: uninstall::
$(RM) $(libdir)/libwine.a $(libdir)/libwine.dll $(libdir)/libwine.so $(libdir)/libwine.so.$(SOVERSION) $(RM) $(libdir)/libwine.a $(libdir)/libwine.dll $(libdir)/libwine.so $(libdir)/libwine.so.$(SOVERSION)
clean:: clean::
$(RM) libwine.so.$(SOVERSION) $(RM) libwine.so.$(SOVERSION) libwine.dll
### Dependencies: ### Dependencies:
...@@ -20,6 +20,8 @@ ...@@ -20,6 +20,8 @@
#include "config.h" #include "config.h"
#include <assert.h>
/* default errno before threading is initialized */ /* default errno before threading is initialized */
static int *default_errno_location(void) static int *default_errno_location(void)
{ {
...@@ -58,3 +60,26 @@ int *__h_errno_location(void) ...@@ -58,3 +60,26 @@ int *__h_errno_location(void)
{ {
return wine_h_errno_location(); return wine_h_errno_location();
} }
/***********************************************************************
* pthread functions
*/
#ifndef HAVE_PTHREAD_GETSPECIFIC
void pthread_getspecific() { assert(0); }
#endif
#ifndef HAVE_PTHREAD_KEY_CREATE
void pthread_key_create() { assert(0); }
#endif
#ifndef HAVE_PTHREAD_MUTEX_LOCK
void pthread_mutex_lock() { assert(0); }
#endif
#ifndef HAVE_PTHREAD_MUTEX_UNLOCK
void pthread_mutex_unlock() { assert(0); }
#endif
#ifndef HAVE_PTHREAD_SETSPECIFIC
void pthread_setspecific() { assert(0); }
#endif
...@@ -64,9 +64,9 @@ topdir=`cd "$topdir" && pwd` ...@@ -64,9 +64,9 @@ topdir=`cd "$topdir" && pwd`
if [ -n "$LD_LIBRARY_PATH" ] if [ -n "$LD_LIBRARY_PATH" ]
then then
LD_LIBRARY_PATH="$topdir/dlls:$topdir/library:$topdir/libs/unicode:$LD_LIBRARY_PATH" LD_LIBRARY_PATH="$topdir/dlls:$topdir/libs/wine:$topdir/libs/unicode:$LD_LIBRARY_PATH"
else else
LD_LIBRARY_PATH="$topdir/dlls:$topdir/library:$topdir/libs/unicode" LD_LIBRARY_PATH="$topdir/dlls:$topdir/libs/wine:$topdir/libs/unicode"
fi fi
WINEDLLPATH="$topdir/dlls:$topdir/programs" WINEDLLPATH="$topdir/dlls:$topdir/programs"
WINESERVER="$topdir/server/wineserver" WINESERVER="$topdir/server/wineserver"
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment