add support for building shared libraries

Fri, 06 Jun 2025 12:31:09 +0200

author
Olaf Wintermann <olaf.wintermann@gmail.com>
date
Fri, 06 Jun 2025 12:31:09 +0200
changeset 607
cfcc3fb12d7d
parent 606
72f8b89d3e04
child 608
046c7c4cb411

add support for building shared libraries

application/Makefile file | annotate | diff | comparison | revisions
configure file | annotate | diff | comparison | revisions
make/cc.mk file | annotate | diff | comparison | revisions
make/clang.mk file | annotate | diff | comparison | revisions
make/configure.vm file | annotate | diff | comparison | revisions
make/gcc.mk file | annotate | diff | comparison | revisions
make/project.xml file | annotate | diff | comparison | revisions
make/suncc.mk file | annotate | diff | comparison | revisions
make/toolchain.sh file | annotate | diff | comparison | revisions
ucx/Makefile file | annotate | diff | comparison | revisions
ui/Makefile file | annotate | diff | comparison | revisions
ui/cocoa/Makefile file | annotate | diff | comparison | revisions
ui/common/objs.mk file | annotate | diff | comparison | revisions
ui/gtk/Makefile file | annotate | diff | comparison | revisions
ui/motif/Makefile file | annotate | diff | comparison | revisions
--- a/application/Makefile	Thu Jun 05 19:29:04 2025 +0200
+++ b/application/Makefile	Fri Jun 06 12:31:09 2025 +0200
@@ -38,7 +38,7 @@
 all: ../build/bin/mk12
 
 ../build/bin/mk12: $(OBJ) $(BUILD_ROOT)/build/lib/$(LIB_PREFIX)uitk$(LIB_EXT)
-	$(LD) -o ../build/bin/mk12$(APP_EXT) $(OBJ) -L$(BUILD_ROOT)/build/lib -luitk -lucx $(LDFLAGS) $(TK_LDFLAGS)
+	$(LD) -o ../build/bin/mk12$(APP_EXT) $(OBJ) $(BUILD_ROOT)/build/lib/$(LIB_PREFIX)uitk$(LIB_EXT) $(BUILD_ROOT)/build/lib/$(LIB_PREFIX)ucx$(LIB_EXT) $(LDFLAGS) $(TK_LDFLAGS)
 
 ../build/application/%$(OBJ_EXT): %.c
 	$(CC) $(CFLAGS) $(TK_CFLAGS) -o $@ -c $<
--- a/configure	Thu Jun 05 19:29:04 2025 +0200
+++ b/configure	Fri Jun 06 12:31:09 2025 +0200
@@ -58,6 +58,7 @@
 # $PLATFORM is used for platform dependent dependency selection
 OS=`uname -s`
 OS_VERSION=`uname -r`
+ARCH=`uname -m`
 printf "detect platform... "
 if [ "$OS" = "SunOS" ]; then
     PLATFORM="solaris sunos unix svr4"
@@ -202,6 +203,22 @@
 : ${mandir:='${datarootdir}/man'}
 : ${localedir:='${datarootdir}/locale'}
 
+# remember the above values and compare them later
+orig_bindir="$bindir"
+orig_sbindir="$sbindir"
+orig_libdir="$libdir"
+orig_libexecdir="$libexecdir"
+orig_datarootdir="$datarootdir"
+orig_datadir="$datadir"
+orig_sysconfdir="$sysconfdir"
+orig_sharedstatedir="$sharedstatedir"
+orig_localstatedir="$localstatedir"
+orig_runstatedir="$runstatedir"
+orig_includedir="$includedir"
+orig_infodir="$infodir"
+orig_mandir="$mandir"
+orig_localedir="$localedir"
+
 # check if a config.site exists and load it
 if [ -n "$CONFIG_SITE" ]; then
     # CONFIG_SITE may contain space separated file names
@@ -218,6 +235,28 @@
     printf "loading site defaults... "
     . "$prefix/etc/config.site"
     echo ok
+else
+    # try to detect the correct libdir on our own, except it was changed by the user
+    if test "$libdir" = '${exec_prefix}/lib'; then
+        if [ "$OS" = "SunOS" ]; then
+            test -d "${exec_prefix}/lib/amd64" && libdir='${exec_prefix}/lib/amd64'
+        else
+            # check if the standard libdir even exists
+            if test -d "${exec_prefix}/lib" ; then
+                :
+            else
+                # if it does not, maybe a lib32 exists
+                test -d "${exec_prefix}/lib32" && libdir='${exec_prefix}/lib32'
+            fi
+            # now check if there is a special 64bit libdir that we should use
+            for i in x86_64 ppc64 s390x aarch64 aarch64_be arm64 ; do
+                if [ $ARCH = $i ]; then
+                    test -d "${exec_prefix}/lib64" && libdir='${exec_prefix}/lib64'
+                    break
+                fi
+            done
+        fi
+    fi
 fi
 
 
@@ -645,6 +684,7 @@
         cat >> "$TEMP_DIR/make.mk" << __EOF__
 OBJ_EXT = .o
 LIB_EXT = .a
+SHLIB_EXT = .dylib
 LIB_PREFIX = lib
 PACKAGE_SCRIPT = package_osx.sh
 __EOF__
@@ -666,6 +706,7 @@
         cat >> "$TEMP_DIR/make.mk" << __EOF__
 OBJ_EXT = .o
 LIB_EXT = .a
+SHLIB_EXT = .so
 LIB_PREFIX = lib
 PACKAGE_SCRIPT = package_unix.sh
 __EOF__
@@ -690,12 +731,12 @@
 
 # build type
 if [ "$BUILD_TYPE" = "debug" ]; then
-    TEMP_CFLAGS="\${DEBUG_CFLAGS}$TEMP_CFLAGS"
-    TEMP_CXXFLAGS="\${DEBUG_CXXFLAGS}$TEMP_CXXFLAGS"
+    TEMP_CFLAGS="\${DEBUG_CFLAGS} $TEMP_CFLAGS"
+    TEMP_CXXFLAGS="\${DEBUG_CXXFLAGS} $TEMP_CXXFLAGS"
 fi
 if [ "$BUILD_TYPE" = "release" ]; then
-    TEMP_CFLAGS="\${RELEASE_CFLAGS}$TEMP_CFLAGS"
-    TEMP_CXXFLAGS="\${RELEASE_CXXFLAGS}$TEMP_CXXFLAGS"
+    TEMP_CFLAGS="\${RELEASE_CFLAGS} $TEMP_CFLAGS"
+    TEMP_CXXFLAGS="\${RELEASE_CXXFLAGS} $TEMP_CXXFLAGS"
 fi
 
 # add general dependency flags to flags.mk
@@ -1030,9 +1071,67 @@
 
 echo "configure finished"
 echo
+echo "Toolchain"
+echo "  name:           $TOOLCHAIN_NAME"
+if [ -n "$TOOLCHAIN_CC" ]; then
+    echo "  cc:             $TOOLCHAIN_CC"
+fi
+if [ -n "$TOOLCHAIN_CXX" ]; then
+    echo "  cxx:            $TOOLCHAIN_CXX"
+fi
+if [ -n "$TOOLCHAIN_WSIZE" ]; then
+    echo "  word size:      $TOOLCHAIN_WSIZE bit"
+fi
+if [ -n "$TOOLCHAIN_CSTD" ]; then
+    echo "  default C std:  $TOOLCHAIN_CSTD"
+fi
+echo
 echo "Build Config:"
-echo "  PREFIX:      $prefix"
-echo "  TOOLCHAIN:   $TOOLCHAIN_NAME"
+echo "  prefix:         $prefix"
+echo "  exec_prefix:    $exec_prefix"
+if [ "$orig_bindir" != "$bindir" ]; then
+    echo "  bindir:      $bindir"
+fi
+if [ "$orig_sbindir" != "$sbindir" ]; then
+    echo "  sbindir:     $sbindir"
+fi
+if [ "$orig_libdir" != "$libdir" ]; then
+    echo "  libdir:         $libdir"
+fi
+if [ "$orig_libexecdir" != "$libexecdir" ]; then
+    echo "  libexecdir:     $libexecdir"
+fi
+if [ "$orig_datarootdir" != "$datarootdir" ]; then
+    echo "  datarootdir:    $datarootdir"
+fi
+if [ "$orig_datadir" != "$datadir" ]; then
+    echo "  datadir:        $datadir"
+fi
+if [ "$orig_sysconfdir" != "$sysconfdir" ]; then
+    echo "  sysconfdir:     $sysconfdir"
+fi
+if [ "$orig_sharedstatedir" != "$sharedstatedir" ]; then
+    echo "  sharedstatedir: $sharedstatedir"
+fi
+if [ "$orig_localstatedir" != "$localstatedir" ]; then
+    echo "  localstatedir:  $localstatedir"
+fi
+if [ "$orig_runstatedir" != "$runstatedir" ]; then
+    echo "  runstatedir:    $runstatedir"
+fi
+if [ "$orig_includedir" != "$includedir" ]; then
+    echo "  includedir:     $includedir"
+fi
+if [ "$orig_infodir" != "$infodir" ]; then
+    echo "  infodir:        $infodir"
+fi
+if [ "$orig_mandir" != "$mandir" ]; then
+    echo "  mandir:         $mandir"
+fi
+if [ "$orig_localedir" != "$localedir" ]; then
+    echo "  localedir:      $localedir"
+fi
+echo
 echo "Options:"
 cat "$TEMP_DIR/options"
 echo
--- a/make/cc.mk	Thu Jun 05 19:29:04 2025 +0200
+++ b/make/cc.mk	Fri Jun 06 12:31:09 2025 +0200
@@ -4,11 +4,11 @@
 
 CFLAGS =
 CXXFLAGS =
-DEBUG_CC_FLAGS = -g
-DEBUG_CXX_FLAGS = -g
-RELEASE_CC_FLAGS = -O3 -DNDEBUG
-RELEASE_CXX_FLAGS = -O3 -DNDEBUG
+DEBUG_CFLAGS = -g
+DEBUG_CXXFLAGS = -g
+RELEASE_CFLAGS = -O3 -DNDEBUG
+RELEASE_CXXFLAGS = -O3 -DNDEBUG
 LDFLAGS =
 
 SHLIB_CFLAGS = -fPIC
-SHLIB_LDFLAGS = -shared
\ No newline at end of file
+SHLIB_LDFLAGS = -shared
--- a/make/clang.mk	Thu Jun 05 19:29:04 2025 +0200
+++ b/make/clang.mk	Fri Jun 06 12:31:09 2025 +0200
@@ -4,10 +4,10 @@
 
 CFLAGS =
 CXXFLAGS =
-DEBUG_CC_FLAGS = -g
-DEBUG_CXX_FLAGS = -g
-RELEASE_CC_FLAGS = -O3 -DNDEBUG
-RELEASE_CXX_FLAGS = -O3 -DNDEBUG
+DEBUG_CFLAGS = -g
+DEBUG_CXXFLAGS = -g
+RELEASE_CFLAGS = -O3 -DNDEBUG
+RELEASE_CXXFLAGS = -O3 -DNDEBUG
 LDFLAGS =
 
 SHLIB_CFLAGS = -fPIC
--- a/make/configure.vm	Thu Jun 05 19:29:04 2025 +0200
+++ b/make/configure.vm	Fri Jun 06 12:31:09 2025 +0200
@@ -59,6 +59,7 @@
 # $PLATFORM is used for platform dependent dependency selection
 OS=`uname -s`
 OS_VERSION=`uname -r`
+ARCH=`uname -m`
 printf "detect platform... "
 if [ "$OS" = "SunOS" ]; then
     PLATFORM="solaris sunos unix svr4"
@@ -244,6 +245,22 @@
 : ${mandir:='${datarootdir}/man'}
 : ${localedir:='${datarootdir}/locale'}
 
+# remember the above values and compare them later
+orig_bindir="$bindir"
+orig_sbindir="$sbindir"
+orig_libdir="$libdir"
+orig_libexecdir="$libexecdir"
+orig_datarootdir="$datarootdir"
+orig_datadir="$datadir"
+orig_sysconfdir="$sysconfdir"
+orig_sharedstatedir="$sharedstatedir"
+orig_localstatedir="$localstatedir"
+orig_runstatedir="$runstatedir"
+orig_includedir="$includedir"
+orig_infodir="$infodir"
+orig_mandir="$mandir"
+orig_localedir="$localedir"
+
 # check if a config.site exists and load it
 if [ -n "$CONFIG_SITE" ]; then
     # CONFIG_SITE may contain space separated file names
@@ -260,6 +277,28 @@
     printf "loading site defaults... "
     . "$prefix/etc/config.site"
     echo ok
+else
+    # try to detect the correct libdir on our own, except it was changed by the user
+    if test "$libdir" = '${exec_prefix}/lib'; then
+        if [ "$OS" = "SunOS" ]; then
+            test -d "${exec_prefix}/lib/amd64" && libdir='${exec_prefix}/lib/amd64'
+        else
+            # check if the standard libdir even exists
+            if test -d "${exec_prefix}/lib" ; then
+                :
+            else
+                # if it does not, maybe a lib32 exists
+                test -d "${exec_prefix}/lib32" && libdir='${exec_prefix}/lib32'
+            fi
+            # now check if there is a special 64bit libdir that we should use
+            for i in x86_64 ppc64 s390x aarch64 aarch64_be arm64 ; do
+                if [ $ARCH = $i ]; then
+                    test -d "${exec_prefix}/lib64" && libdir='${exec_prefix}/lib64'
+                    break
+                fi
+            done
+        fi
+    fi
 fi
 ]]#
 ## End of unparsed content **
@@ -487,12 +526,12 @@
 
 # build type
 if [ "$BUILD_TYPE" = "debug" ]; then
-    TEMP_CFLAGS="\${DEBUG_CFLAGS}$TEMP_CFLAGS"
-    TEMP_CXXFLAGS="\${DEBUG_CXXFLAGS}$TEMP_CXXFLAGS"
+    TEMP_CFLAGS="\${DEBUG_CFLAGS} $TEMP_CFLAGS"
+    TEMP_CXXFLAGS="\${DEBUG_CXXFLAGS} $TEMP_CXXFLAGS"
 fi
 if [ "$BUILD_TYPE" = "release" ]; then
-    TEMP_CFLAGS="\${RELEASE_CFLAGS}$TEMP_CFLAGS"
-    TEMP_CXXFLAGS="\${RELEASE_CXXFLAGS}$TEMP_CXXFLAGS"
+    TEMP_CFLAGS="\${RELEASE_CFLAGS} $TEMP_CFLAGS"
+    TEMP_CXXFLAGS="\${RELEASE_CXXFLAGS} $TEMP_CXXFLAGS"
 fi
 
 # add general dependency flags to flags.mk
@@ -687,14 +726,73 @@
 
 echo "configure finished"
 echo
+echo "Toolchain"
+echo "  name:           $TOOLCHAIN_NAME"
+if [ -n "$TOOLCHAIN_CC" ]; then
+    echo "  cc:             $TOOLCHAIN_CC"
+fi
+if [ -n "$TOOLCHAIN_CXX" ]; then
+    echo "  cxx:            $TOOLCHAIN_CXX"
+fi
+if [ -n "$TOOLCHAIN_WSIZE" ]; then
+    echo "  word size:      $TOOLCHAIN_WSIZE bit"
+fi
+if [ -n "$TOOLCHAIN_CSTD" ]; then
+    echo "  default C std:  $TOOLCHAIN_CSTD"
+fi
+echo
 echo "Build Config:"
-echo "  PREFIX:      $prefix"
-echo "  TOOLCHAIN:   $TOOLCHAIN_NAME"
+echo "  prefix:         $prefix"
+echo "  exec_prefix:    $exec_prefix"
+if [ "$orig_bindir" != "$bindir" ]; then
+    echo "  bindir:      $bindir"
+fi
+if [ "$orig_sbindir" != "$sbindir" ]; then
+    echo "  sbindir:     $sbindir"
+fi
+if [ "$orig_libdir" != "$libdir" ]; then
+    echo "  libdir:         $libdir"
+fi
+if [ "$orig_libexecdir" != "$libexecdir" ]; then
+    echo "  libexecdir:     $libexecdir"
+fi
+if [ "$orig_datarootdir" != "$datarootdir" ]; then
+    echo "  datarootdir:    $datarootdir"
+fi
+if [ "$orig_datadir" != "$datadir" ]; then
+    echo "  datadir:        $datadir"
+fi
+if [ "$orig_sysconfdir" != "$sysconfdir" ]; then
+    echo "  sysconfdir:     $sysconfdir"
+fi
+if [ "$orig_sharedstatedir" != "$sharedstatedir" ]; then
+    echo "  sharedstatedir: $sharedstatedir"
+fi
+if [ "$orig_localstatedir" != "$localstatedir" ]; then
+    echo "  localstatedir:  $localstatedir"
+fi
+if [ "$orig_runstatedir" != "$runstatedir" ]; then
+    echo "  runstatedir:    $runstatedir"
+fi
+if [ "$orig_includedir" != "$includedir" ]; then
+    echo "  includedir:     $includedir"
+fi
+if [ "$orig_infodir" != "$infodir" ]; then
+    echo "  infodir:        $infodir"
+fi
+if [ "$orig_mandir" != "$mandir" ]; then
+    echo "  mandir:         $mandir"
+fi
+if [ "$orig_localedir" != "$localedir" ]; then
+    echo "  localedir:      $localedir"
+fi
 #if ( $options.size() > 0 )
+echo
 echo "Options:"
 cat "$TEMP_DIR/options"
 #end
 #if ( $features.size() > 0 )
+echo
 echo "Features:"
 #foreach( $feature in $features )
 if [ -n "${D}${feature.varName}" ]; then
--- a/make/gcc.mk	Thu Jun 05 19:29:04 2025 +0200
+++ b/make/gcc.mk	Fri Jun 06 12:31:09 2025 +0200
@@ -4,10 +4,10 @@
 
 CFLAGS =
 CXXFLAGS =
-DEBUG_CC_FLAGS = -g
-DEBUG_CXX_FLAGS = -g
-RELEASE_CC_FLAGS = -O3 -DNDEBUG
-RELEASE_CXX_FLAGS = -O3 -DNDEBUG
+DEBUG_CFLAGS = -g
+DEBUG_CXXFLAGS = -g
+RELEASE_CFLAGS = -O3 -DNDEBUG
+RELEASE_CXXFLAGS = -O3 -DNDEBUG
 LDFLAGS =
 
 SHLIB_CFLAGS = -fPIC
--- a/make/project.xml	Thu Jun 05 19:29:04 2025 +0200
+++ b/make/project.xml	Fri Jun 06 12:31:09 2025 +0200
@@ -92,12 +92,14 @@
 	<dependency platform="macos">
 		<make>OBJ_EXT = .o</make>
 		<make>LIB_EXT = .a</make>
+		<make>SHLIB_EXT = .dylib</make>
 		<make>LIB_PREFIX = lib</make>
 		<make>PACKAGE_SCRIPT = package_osx.sh</make>
 	</dependency>
 	<dependency platform="unix" not="macos">
 		<make>OBJ_EXT = .o</make>
 		<make>LIB_EXT = .a</make>
+		<make>SHLIB_EXT = .so</make>
 		<make>LIB_PREFIX = lib</make>
 		<make>PACKAGE_SCRIPT = package_unix.sh</make>
 	</dependency>
--- a/make/suncc.mk	Thu Jun 05 19:29:04 2025 +0200
+++ b/make/suncc.mk	Fri Jun 06 12:31:09 2025 +0200
@@ -4,10 +4,10 @@
 
 CFLAGS =
 CXXFLAGS =
-DEBUG_CC_FLAGS = -g
-DEBUG_CXX_FLAGS = -g
-RELEASE_CC_FLAGS = -O3 -DNDEBUG
-RELEASE_CXX_FLAGS = -O3 -DNDEBUG
+DEBUG_CFLAGS = -g
+DEBUG_CXXFLAGS = -g
+RELEASE_CFLAGS = -O3 -DNDEBUG
+RELEASE_CXXFLAGS = -O3 -DNDEBUG
 LDFLAGS =
 
 SHLIB_CFLAGS = -Kpic
--- a/make/toolchain.sh	Thu Jun 05 19:29:04 2025 +0200
+++ b/make/toolchain.sh	Fri Jun 06 12:31:09 2025 +0200
@@ -126,6 +126,14 @@
   fi
 }
 
+parse_toolchain_properties()
+{
+  info_file="$1"
+  TOOLCHAIN=`grep '^toolchain:' "$info_file" | tail -c +11`
+  TOOLCHAIN_NAME=`echo "$TOOLCHAIN" | cut -f1 -d' ' -`
+  TOOLCHAIN_WSIZE=`grep '^wsize:' "$info_file" | tail -c +7`
+}
+
 detect_c_compiler()
 {
   if [ -n "$TOOLCHAIN_CC" ]; then
@@ -136,9 +144,7 @@
     if check_c_compiler "$CC"; then
       TOOLCHAIN_CC=$CC
       "$TEMP_DIR/checkcc" > "$TEMP_DIR/checkcc_out"
-      TOOLCHAIN=`grep '^toolchain:' "$TEMP_DIR/checkcc_out" | tail -c +11`
-      TOOLCHAIN_NAME=`echo "$TOOLCHAIN" | cut -f1 -d' ' -`
-      TOOLCHAIN_WSIZE=`grep '^wsize:' "$TEMP_DIR/checkcc_out" | tail -c +7`
+      parse_toolchain_properties "$TEMP_DIR/checkcc_out"
       TOOLCHAIN_CSTD=`grep '^stdcversion:' "$TEMP_DIR/checkcc_out" | tail -c +13`
       echo "$CC"
       return 0
@@ -152,9 +158,7 @@
       if check_c_compiler "$COMP"; then
         TOOLCHAIN_CC=$COMP
         "$TEMP_DIR/checkcc" > "$TEMP_DIR/checkcc_out"
-        TOOLCHAIN=`grep '^toolchain:' "$TEMP_DIR/checkcc_out" | tail -c +11`
-        TOOLCHAIN_NAME=`echo "$TOOLCHAIN" | cut -f1 -d' ' -`
-        TOOLCHAIN_WSIZE=`grep '^wsize:' "$TEMP_DIR/checkcc_out" | tail -c +7`
+        parse_toolchain_properties "$TEMP_DIR/checkcc_out"
         TOOLCHAIN_CSTD=`grep '^stdcversion:' "$TEMP_DIR/checkcc_out" | tail -c +13`
         echo "$COMP"
         return 0
@@ -176,8 +180,7 @@
     if check_cpp_compiler "$CXX"; then
       TOOLCHAIN_CXX=$CXX
       "$TEMP_DIR/checkcc" > "$TEMP_DIR/checkcc_out"
-      TOOLCHAIN=`grep '^toolchain:' "$TEMP_DIR/checkcc_out" | tail -c +11`
-      TOOLCHAIN_NAME=`echo "$TOOLCHAIN" | cut -f1 -d' ' -`
+      parse_toolchain_properties "$TEMP_DIR/checkcc_out"
       echo "$CXX"
       return 0
     else
@@ -190,8 +193,7 @@
       if check_cpp_compiler "$COMP"; then
         TOOLCHAIN_CXX=$COMP
         "$TEMP_DIR/checkcc" > "$TEMP_DIR/checkcc_out"
-        TOOLCHAIN=`grep '^toolchain:' "$TEMP_DIR/checkcc_out" | tail -c +11`
-        TOOLCHAIN_NAME=`echo "$TOOLCHAIN" | cut -f1 -d' ' -`
+        parse_toolchain_properties "$TEMP_DIR/checkcc_out"
         echo "$COMP"
         return 0
       fi
--- a/ucx/Makefile	Thu Jun 05 19:29:04 2025 +0200
+++ b/ucx/Makefile	Fri Jun 06 12:31:09 2025 +0200
@@ -50,15 +50,19 @@
 OBJ   = $(SRC:%.c=../build/ucx/%$(OBJ_EXT))
 
 UCX_LIB = ../build/lib/$(LIB_PREFIX)ucx$(LIB_EXT)
+UCX_SHLIB = ../build/lib/$(LIB_PREFIX)ucx$(SHLIB_EXT)
 
-all: ../build/ucx $(UCX_LIB)
+all: $(UCX_LIB) $(UCX_SHLIB)
 
 $(UCX_LIB): $(OBJ)
-	$(AR) $(ARFLAGS) $(UCX_LIB) $(OBJ)
+	$(AR) $(ARFLAGS) $@ $(OBJ)
+
+$(UCX_SHLIB): $(OBJ)
+	$(CC) -o $@ $(LDFLAGS) $(SHLIB_LDFLAGS) $(OBJ)
 
 ../build/ucx:
 	mkdir -p ../build/ucx
 
 ../build/ucx/%$(OBJ_EXT): %.c
-	$(CC) $(CFLAGS) -o $@ -c $<
+	$(CC) $(CFLAGS) $(SHLIB_CFLAGS) -o $@ -c $<
 
--- a/ui/Makefile	Thu Jun 05 19:29:04 2025 +0200
+++ b/ui/Makefile	Fri Jun 06 12:31:09 2025 +0200
@@ -34,14 +34,15 @@
 include common/objs.mk
 
 UI_LIB = ../build/lib/$(LIB_PREFIX)uitk$(LIB_EXT)
+UI_SHLIB = ../build/lib/$(LIB_PREFIX)uitk$(SHLIB_EXT)
 
 include $(TOOLKIT)/objs.mk
 OBJ = $(TOOLKITOBJS) $(COMMONOBJS)
 
-all: $(UI_LIB)
+all: $(UI_LIB) $(UI_SHLIB)
 
 include $(TOOLKIT)/Makefile
 
 $(COMMON_OBJPRE)uic_%$(OBJ_EXT): common/%.c
-	$(CC) -o $@ -c -I../ucx/ $(CFLAGS) $(TK_CFLAGS) $<
+	$(CC) -o $@ -c -I../ucx/ $(CFLAGS) $(SHLIB_CFLAGS) $(TK_CFLAGS) $<
 
--- a/ui/cocoa/Makefile	Thu Jun 05 19:29:04 2025 +0200
+++ b/ui/cocoa/Makefile	Fri Jun 06 12:31:09 2025 +0200
@@ -27,8 +27,10 @@
 #
 
 $(COCOA_OBJPRE)%.o: cocoa/%.m
-	$(CC) -o $@ -c -I../ucx -fobjc-arc $(CFLAGS) $(TK_CFLAGS) $<
+	$(CC) -o $@ -c -I../ucx -fobjc-arc $(CFLAGS) $(SHLIB_CFLAGS) $(TK_CFLAGS) $<
 
 $(UI_LIB): $(OBJ)
 	$(AR) $(ARFLAGS) $(UI_LIB) $(OBJ)
 
+$(UI_SHLIB): $(OBJ)
+	$(CC) -o $(UI_SHLIB) $(LDFLAGS) $(SHLIB_LDFLAGS) $(TK_LDFLAGS) $(OBJ) -L../build/lib -lucx
--- a/ui/common/objs.mk	Thu Jun 05 19:29:04 2025 +0200
+++ b/ui/common/objs.mk	Fri Jun 06 12:31:09 2025 +0200
@@ -33,7 +33,6 @@
 COMMON_OBJ += document$(OBJ_EXT)
 COMMON_OBJ += object$(OBJ_EXT)
 COMMON_OBJ += types$(OBJ_EXT)
-COMMON_OBJ += menu$(OBJ_EXT)
 COMMON_OBJ += properties$(OBJ_EXT)
 COMMON_OBJ += menu$(OBJ_EXT)
 COMMON_OBJ += toolbar$(OBJ_EXT)
--- a/ui/gtk/Makefile	Thu Jun 05 19:29:04 2025 +0200
+++ b/ui/gtk/Makefile	Fri Jun 06 12:31:09 2025 +0200
@@ -27,8 +27,10 @@
 #
 
 $(GTK_OBJPRE)%.o: gtk/%.c
-	$(CC) -o $@ -c -I../ucx $(CFLAGS) $(TK_CFLAGS) $<
+	$(CC) -o $@ -c -I../ucx $(CFLAGS) $(SHLIB_CFLAGS) $(TK_CFLAGS) $<
 	
 $(UI_LIB): $(OBJ)
 	$(AR) $(ARFLAGS) $(UI_LIB) $(OBJ)	
-	
+
+$(UI_SHLIB): $(OBJ)
+	$(CC) -o $(UI_SHLIB) $(LDFLAGS) $(SHLIB_LDFLAGS) $(TK_LDFLAGS) $(OBJ) -L../build/lib -lucx
--- a/ui/motif/Makefile	Thu Jun 05 19:29:04 2025 +0200
+++ b/ui/motif/Makefile	Fri Jun 06 12:31:09 2025 +0200
@@ -27,7 +27,10 @@
 #
 
 $(MOTIF_OBJPRE)%.o: motif/%.c
-	$(CC) -o $@ -c -I../ucx $(CFLAGS) $(TK_CFLAGS) $<
+	$(CC) -o $@ -c -I../ucx $(CFLAGS) $(SHLIB_CFLAGS) $(TK_CFLAGS) $<
 
 $(UI_LIB): $(OBJ)
 	$(AR) $(ARFLAGS) $(UI_LIB) $(OBJ)	
+
+$(UI_SHLIB): $(OBJ)
+	$(CC) -o $(UI_SHLIB) $(LDFLAGS) $(SHLIB_LDFLAGS) $(TK_LDFLAGS) $(OBJ) -L../build/lib -lucx

mercurial