Index: tdebase/ksysguard/ksysguardd/CMakeLists.txt
===================================================================
--- tdebase.orig/ksysguard/ksysguardd/CMakeLists.txt
+++ tdebase/ksysguard/ksysguardd/CMakeLists.txt
@@ -19,6 +19,8 @@ elseif( ${CMAKE_SYSTEM_NAME} MATCHES "Op
   set( OS_SPECIFIC_DIR OpenBSD )
 elseif( ${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD" )
   set( OS_SPECIFIC_DIR FreeBSD )
+elseif( ${CMAKE_SYSTEM_NAME} MATCHES "SunOS" )
+  set( OS_SPECIFIC_DIR Solaris )
 elseif( ${CMAKE_SYSTEM_NAME} MATCHES "NetBSD" )
   set( OS_SPECIFIC_DIR NetBSD )
 else()
@@ -30,7 +32,7 @@ add_subdirectory( ${OS_SPECIFIC_DIR} )
 
 add_definitions(
   -DKSYSGUARDDRCFILE=\"${SYSCONF_INSTALL_DIR}/ksysguarddrc\"
-  -DOSTYPE_${CMAKE_SYSTEM_NAME}
+  -DOSTYPE_${OS_SPECIFIC_DIR}
 )
 
 
@@ -46,6 +48,6 @@ include_directories(
 tde_add_executable( ksysguardd AUTOMOC
   SOURCES Command.c conf.c ksysguardd.c PWUIDCache.c
   LINK ccont-static ksysguardd-static ${TDE_LIB_DIR}/libtdefakes_nonpic.a
-    ${SENSORS_LIBRARIES}
+    ${SENSORS_LIBRARIES} socket nsl
   DESTINATION ${BIN_INSTALL_DIR}
 )
Index: tdebase/ksysguard/ksysguardd/Solaris/CMakeLists.txt
===================================================================
--- /dev/null
+++ tdebase/ksysguard/ksysguardd/Solaris/CMakeLists.txt
@@ -0,0 +1,29 @@
+#################################################
+#
+#  (C) 2019 DilOS Team
+#  denis (at) dilos (dot) org
+#
+#  Improvements and feedback are welcome
+#
+#  This file is released under GPL >= 2
+#
+#################################################
+
+
+include_directories(
+  ${CMAKE_BINARY_DIR}
+  ${CMAKE_SOURCE_DIR}/ksysguard/CContLib
+  ${CMAKE_SOURCE_DIR}/ksysguard/ksysguardd
+)
+
+add_definitions(
+       -DHAVE_KSTAT
+)
+
+##### ksysguardd (static) #######################
+
+tde_add_library( ksysguardd STATIC
+  SOURCES
+    LoadAvg.c Memory.c NetDev.c ProcessList.c
+  LINK kstat
+)
Index: tdebase/tdm/backend/CMakeLists.txt
===================================================================
--- tdebase.orig/tdm/backend/CMakeLists.txt
+++ tdebase/tdm/backend/CMakeLists.txt
@@ -44,6 +44,6 @@ tde_add_executable( tdm
     process.c protodpy.c reset.c resource.c rpcauth.c
     server.c session.c sessreg.c socket.c streams.c
     util.c xdmauth.c xdmcp.c
-  LINK X11 ${XAU_LIBRARIES} ${DBUS_LIBRARIES} ${CRYPT_LIBRARY} ${PAM_LIBRARY} ${UTIL_LIBRARY} ${XDMCP_LIBRARIES}
+  LINK socket nsl X11 ${XAU_LIBRARIES} ${DBUS_LIBRARIES} ${CRYPT_LIBRARY} ${PAM_LIBRARY} ${XDMCP_LIBRARIES}
   DESTINATION ${BIN_INSTALL_DIR}
 )
Index: tdebase/kcontrol/info/CMakeLists.txt
===================================================================
--- tdebase.orig/kcontrol/info/CMakeLists.txt
+++ tdebase/kcontrol/info/CMakeLists.txt
@@ -41,6 +41,6 @@ install( FILES
 
 tde_add_kpart( kcm_info AUTOMOC
   SOURCES main.cpp memory.cpp ${OPENGL_SOURCES}
-  LINK tdeui-shared ${GL_LIBRARIES} ${GLU_LIBRARIES}
+  LINK tdeui-shared ${GL_LIBRARIES} ${GLU_LIBRARIES} kstat
   DESTINATION ${PLUGIN_INSTALL_DIR}
 )
Index: tdebase/kcontrol/ebrowsing/plugins/localdomain/CMakeLists.txt
===================================================================
--- tdebase.orig/kcontrol/ebrowsing/plugins/localdomain/CMakeLists.txt
+++ tdebase/kcontrol/ebrowsing/plugins/localdomain/CMakeLists.txt
@@ -38,6 +38,6 @@ tde_add_kpart( liblocaldomainurifilter A
 
 tde_add_executable( klocaldomainurifilterhelper
   SOURCES klocaldomainurifilterhelper.c
-  LINK
+  LINK socket nsl
   DESTINATION ${BIN_INSTALL_DIR}
 )
Index: tdebase/kcontrol/nics/nic.cpp
===================================================================
--- tdebase.orig/kcontrol/nics/nic.cpp
+++ tdebase/kcontrol/nics/nic.cpp
@@ -222,7 +222,11 @@ NICList* findNICs()
          result=ioctl(sockfd,SIOCGIFHWADDR,&ifcopy);
          if (result==0)
          {
+#ifdef	__dilos__
+            char *n = ifcopy.ifr_enaddr;
+#else	/* !__dilos__*/
             char *n = &ifcopy.ifr_ifru.ifru_hwaddr.sa_data[0];
+#endif	/* __dilos__ */
             tmp->HWaddr = HWaddr2String(n);
          }
 #elif defined SIOCGENADDR
Index: tdebase/twin/compton-tde/compton.c
===================================================================
--- tdebase.orig/twin/compton-tde/compton.c
+++ tdebase/twin/compton-tde/compton.c
@@ -11,6 +11,9 @@
 
 #include "compton.h"
 #include <ctype.h>
+#ifdef	__dilos__
+#include <math.h>
+#endif	/* __dilos__ */
 
 // === Global constants ===
 
Index: tdebase/cmake/modules/TDEMacros.cmake
===================================================================
--- tdebase.orig/cmake/modules/TDEMacros.cmake
+++ tdebase/cmake/modules/TDEMacros.cmake
@@ -2182,11 +2182,11 @@ macro( tde_setup_architecture_flags )
     set( LINKER_IMMEDIATE_BINDING_FLAGS "" CACHE INTERNAL "" FORCE )
   endif( )
 
-  check_cxx_compiler_flag( -fPIE HAVE_PIE_SUPPORT )
-  if( HAVE_PIE_SUPPORT )
-    set( TDE_PIE_CFLAGS -fPIE )
-    set( TDE_PIE_LDFLAGS -pie )
-  endif( HAVE_PIE_SUPPORT )
+#  check_cxx_compiler_flag( -fPIE HAVE_PIE_SUPPORT )
+#  if( HAVE_PIE_SUPPORT )
+#    set( TDE_PIE_CFLAGS -fPIE )
+#    set( TDE_PIE_LDFLAGS -pie )
+#  endif( HAVE_PIE_SUPPORT )
 endmacro( )
 
 
Index: tdebase/tdeioslave/media/medianotifier/medianotifier.cpp
===================================================================
--- tdebase.orig/tdeioslave/media/medianotifier/medianotifier.cpp
+++ tdebase/tdeioslave/media/medianotifier/medianotifier.cpp
@@ -372,12 +372,20 @@ extern "C"
 
 void MediaNotifier::checkFreeDiskSpace()
 {
+#ifdef	__dilos__
+    struct statvfs sfs;
+#else	/* !__dilos__ */
     struct statfs sfs;
+#endif	/* __dilos__ */
     long total, avail;
     if ( m_freeDialog )
         return;
 
+#ifdef	__dilos__
+    if ( statvfs( TQFile::encodeName( TQDir::homeDirPath() ), &sfs ) == 0 )
+#else	/* !__dilos__ */
     if ( statfs( TQFile::encodeName( TQDir::homeDirPath() ), &sfs ) == 0 )
+#endif	/* __dilos__ */
     {
         total = sfs.f_blocks;
         avail = ( getuid() ? sfs.f_bavail : sfs.f_bfree );
Index: tdebase/kicker/kicker/ui/k_new_mnu.cpp
===================================================================
--- tdebase.orig/kicker/kicker/ui/k_new_mnu.cpp
+++ tdebase/kicker/kicker/ui/k_new_mnu.cpp
@@ -3618,8 +3618,13 @@ void KMenu::updateMedia()
         {
             descr = mountPoint;
             // calc the free/total space
+#ifdef	__dilos__
+            struct statvfs sfs;
+            if ( statvfs( TQFile::encodeName( mountPoint ), &sfs ) == 0 )
+#else	/* !__dilos__ */
             struct statfs sfs;
             if ( statfs( TQFile::encodeName( mountPoint ), &sfs ) == 0 )
+#endif	/* __dilos__ */
             {
                 uint64_t total = ( uint64_t )sfs.f_blocks * sfs.f_bsize;
                 uint64_t avail = ( uint64_t )( getuid() ? sfs.f_bavail : sfs.f_bfree ) * sfs.f_bsize;
Index: tdebase/kicker/extensions/kasbar/kasloaditem.cpp
===================================================================
--- tdebase.orig/kicker/extensions/kasbar/kasloaditem.cpp
+++ tdebase/kicker/extensions/kasbar/kasloaditem.cpp
@@ -2,7 +2,7 @@
 #include <stdlib.h>
 
 #include <config.h>
-#ifdef HAVE_SYS_LOADAVG_H
+#if	defined(HAVE_SYS_LOADAVG_H) || defined(__dilos__)
 #include <sys/loadavg.h> // e.g. Solaris
 #endif
 
Index: tdebase/tdesu/tdesud/tdesud.cpp
===================================================================
--- tdebase.orig/tdesu/tdesud/tdesud.cpp
+++ tdebase/tdesu/tdesud/tdesud.cpp
@@ -45,7 +45,7 @@
 #include <pwd.h>
 #include <errno.h>
 
-#if !defined(__OpenBSD__) && !defined(__FreeBSD__) && !defined(__NetBSD__)
+#if !defined(__OpenBSD__) && !defined(__FreeBSD__) && !defined(__NetBSD__) && !defined(__dilos__)
 #include <sys/prctl.h>
 #endif
 #include <sys/time.h>
@@ -251,7 +251,7 @@ int create_socket()
 
 int main(int argc, char *argv[])
 {
-#if !defined(__OpenBSD__) && !defined(__FreeBSD__) && !defined(__NetBSD__)
+#if !defined(__OpenBSD__) && !defined(__FreeBSD__) && !defined(__NetBSD__) && !defined(__dilos__)
     prctl(PR_SET_DUMPABLE, 0);
 #endif
 
Index: tdebase/tdm/backend/getfd.c
===================================================================
--- tdebase.orig/tdm/backend/getfd.c
+++ tdebase/tdm/backend/getfd.c
@@ -22,7 +22,7 @@ is_a_console(int fd) {
 	char arg;
 
 	arg = 0;
-#if defined(__OpenBSD__) || defined(__FreeBSD__) || defined(__NetBSD__)
+#if defined(__OpenBSD__) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__dilos__)
 	return arg;
 #else
 	return (ioctl(fd, KDGKBTYPE, &arg) == 0
Index: tdebase/tdm/kfrontend/CMakeLists.txt
===================================================================
--- tdebase.orig/tdm/kfrontend/CMakeLists.txt
+++ tdebase/tdm/kfrontend/CMakeLists.txt
@@ -55,7 +55,7 @@ set_property( SOURCE tdm_config.c tdm_gr
 
 tde_add_executable( tdm_config
   SOURCES tdm_config.c
-  LINK
+  LINK socket nsl
   DESTINATION ${BIN_INSTALL_DIR}
 )
 
@@ -100,6 +100,6 @@ tde_add_executable( gentdmconf AUTOMOC
 
 tde_add_executable( tdmctl
   SOURCES tdmctl.c
-  LINK
+  LINK socket nsl
   DESTINATION ${BIN_INSTALL_DIR}
 )
Index: tdebase/kcontrol/nics/CMakeLists.txt
===================================================================
--- tdebase.orig/kcontrol/nics/CMakeLists.txt
+++ tdebase/kcontrol/nics/CMakeLists.txt
@@ -12,7 +12,9 @@
 include( CheckFunctionExists )
 
 check_include_file( "sys/sockio.h" HAVE_SYS_SOCKIO_H )
+tde_save_and_set( CMAKE_REQUIRED_LIBRARIES socket nsl )
 check_function_exists( getnameinfo HAVE_GETNAMEINFO )
+tde_restore( CMAKE_REQUIRED_LIBRARIES )
 check_struct_has_member( "struct sockaddr" sa_len "sys/types.h;sys/socket.h" HAVE_STRUCT_SOCKADDR_SA_LEN )
 
 
Index: tdebase/tdekbdledsync/getfd.c
===================================================================
--- tdebase.orig/tdekbdledsync/getfd.c
+++ tdebase/tdekbdledsync/getfd.c
@@ -4,7 +4,9 @@
 #include <fcntl.h>
 #include <errno.h>
 #include <sys/ioctl.h>
+#ifdef	__linux__
 #include <linux/kd.h>
+#endif	/* __linux__ */
 #include "getfd.h"
 
 /*
@@ -17,11 +19,15 @@
 
 static int
 is_a_console(int fd) {
+#ifdef	__linux__
 	char arg;
 
 	arg = 0;
 	return (ioctl(fd, KDGKBTYPE, &arg) == 0
 		&& ((arg == KB_101) || (arg == KB_84)));
+#else	/* !__linux__ */
+	return (0);
+#endif	/* __linux__ */
 }
 
 static int
Index: tdebase/tdekbdledsync/main.cpp
===================================================================
--- tdebase.orig/tdekbdledsync/main.cpp
+++ tdebase/tdekbdledsync/main.cpp
@@ -30,9 +30,11 @@ License along with tdekbdledsync. If not
 #include <fcntl.h>
 #include <limits.h>
 #include <dirent.h>
+#ifdef	__linux__
 #include <linux/vt.h>
 #include <linux/input.h>
 #include <linux/uinput.h>
+#endif	/* __linux__ */
 #include <sys/file.h>
 #include <sys/types.h>
 #include <sys/stat.h>
@@ -42,7 +44,9 @@ License along with tdekbdledsync. If not
 #include <signal.h>
 #include <stdint.h>
 extern "C" {
+#ifdef	__linux__
 #include <libudev.h>
+#endif	/* __linux__ */
 #include "getfd.h"
 }
 #include <libgen.h>
@@ -64,6 +68,10 @@ using namespace std;
 
 typedef unsigned char byte;
 
+#ifndef	__linux__
+#define	KEY_MAX	0
+#endif	/* __linux__ */
+
 char filename[32];
 char key_bitmask[(KEY_MAX + 7) / 8];
 
@@ -262,11 +270,14 @@ int find_keyboards() {
 
 		fd = open(filename, O_RDWR|O_SYNC);
 		if (fd >= 0) {
+#ifdef	__linux__
 			ioctl(fd, EVIOCGBIT(EV_KEY, sizeof(key_bitmask)), key_bitmask);
 
 			// Ensure that we do not detect tsak faked keyboards
 			ioctl (fd, EVIOCGNAME(sizeof(name)), name);
+#endif	/* __linux__ */
 			if (str_ends_with(name, "+tsak") == 0) {
+#ifdef	__linux__
 				struct input_id input_info;
 				ioctl (fd, EVIOCGID, &input_info);
 				if ((input_info.vendor != 0) && (input_info.product != 0)) {
@@ -278,6 +289,7 @@ int find_keyboards() {
 						}
 					}
 				}
+#endif	/* __linux__ */
 			}
 	
 			if (keyboard_fds[keyboard_fd_num] == 0) {
@@ -302,8 +314,10 @@ int main() {
 	int current_keyboard;
 	char name[256] = "Unknown";
 	unsigned int states;
+#ifdef	__linux__
 	struct input_event ev;
 	struct vt_stat vtstat;
+#endif	/* __linux__ */
 	int vt_fd;
 	int x11_vt_num = -1;
 //	XEvent xev;
@@ -364,6 +378,7 @@ int main() {
 	struct udev_monitor *mon;
 	struct timeval tv;
 
+#ifdef	__linux__
 	// Create the udev object
 	udev = udev_new();
 	if (!udev) {
@@ -376,6 +391,7 @@ int main() {
 	mon = udev_monitor_new_from_netlink(udev, "udev");
 	udev_monitor_filter_add_match_subsystem_devtype(mon, "input", NULL);
 	udev_monitor_enable_receiving(mon);
+#endif	/* __linux__ */
 
 	while (1) {
 		// Get masks
@@ -395,12 +411,15 @@ int main() {
 
 			for (current_keyboard=0;current_keyboard<keyboard_fd_num;current_keyboard++) {
 				// Print device name
+#ifdef	__linux__
 				ioctl(keyboard_fds[current_keyboard], EVIOCGNAME (sizeof (name)), name);
+#endif	/* __linux__ */
 				fprintf(stderr, "[tdekbdledsync] Syncing keyboard: (%s)\n", name);
 			}
 
 			while (1) {
 				// Get current active VT
+#ifdef	__linux__
 				if (ioctl(vt_fd, VT_GETSTATE, &vtstat)) {
 					fprintf(stderr, "[tdekbdledsync] Unable to get current VT!\n");
 					releaseLock(lockfd, lockFileName);
@@ -443,7 +462,9 @@ int main() {
 						}
 					}
 				}
-				else {
+				else
+#endif	/* __linux__ */
+				{
 					// Ensure the X server is still alive
 					// If the X server has terminated, this will fail and the program will terminate
 					XSync(display, False);
@@ -452,9 +473,12 @@ int main() {
 				// Check the hotplug monitoring process to see if any keyboards were added or removed
 				fd_set readfds;
 				FD_ZERO(&readfds);
+#ifdef	__linux__
 				FD_SET(udev_monitor_get_fd(mon), &readfds);
+#endif	/* __linux__ */
 				tv.tv_sec = 0;
 				tv.tv_usec = 0;
+#ifdef	__linux__
 				int fdcount = select(udev_monitor_get_fd(mon)+1, &readfds, NULL, NULL, &tv);
 				if (fdcount < 0) {
 					if (errno == EINTR) {
@@ -481,6 +505,7 @@ int main() {
 						}
 					}
 				}
+#endif	/* __linux__ */
 
 				// Poll
 				usleep(250*1000);
@@ -511,7 +536,9 @@ int main() {
 	}
 
 	releaseLock(lockfd, lockFileName);
+#ifdef	__linux__
 	udev_monitor_unref(mon);
 	udev_unref(udev);
+#endif	/* __linux__ */
 	return 0;
 }
Index: tdebase/tdekbdledsync/CMakeLists.txt
===================================================================
--- tdebase.orig/tdekbdledsync/CMakeLists.txt
+++ tdebase/tdekbdledsync/CMakeLists.txt
@@ -23,7 +23,7 @@ link_directories(
 
 tde_add_executable( tdekbdledsync
   SOURCES getfd.c main.cpp
-  LINK udev X11
+  LINK X11
   DESTINATION ${BIN_INSTALL_DIR}
   SETUID
 )
Index: tdebase/CMakeLists.txt
===================================================================
--- tdebase.orig/CMakeLists.txt
+++ tdebase/CMakeLists.txt
@@ -51,7 +51,7 @@ tde_setup_paths( )
 ##### add apidox targets ############
 
 add_custom_target(apidox
-  COMMAND "./generate_apidox" "${CMAKE_SOURCE_DIR}" "${CMAKE_BINARY_DIR}" "${HTML_INSTALL_DIR}" "/usr/share/qt3/doc/html"
+  COMMAND "./generate_apidox" "${CMAKE_SOURCE_DIR}" "${CMAKE_BINARY_DIR}" "${HTML_INSTALL_DIR}" "/usr/share/tqt3/doc/html"
   WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}/cmake/")
 
 add_custom_target(install-apidox
Index: tdebase/tdm/config.def
===================================================================
--- tdebase.orig/tdm/config.def
+++ tdebase/tdm/config.def
@@ -42,6 +42,9 @@
 #elif defined(__SVR4)
 # define HALT_CMD	"/usr/sbin/halt"
 # define REBOOT_CMD	"/usr/sbin/reboot"
+#elif defined(__dilos__)
+# define HALT_CMD	"/usr/sbin/poweroff"
+# define REBOOT_CMD	"/usr/sbin/reboot"
 #else
 # define HALT_CMD	"/sbin/poweroff"
 # define REBOOT_CMD	"/sbin/reboot"
@@ -50,6 +53,9 @@
 #if defined(BSD) || defined(__linux__)
 # define DEF_USER_PATH "/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:/usr/games"
 # define DEF_SYSTEM_PATH "/usr/local/sbin:/usr/local/bin:/opt/trinity/sbin:/usr/sbin:/opt/trinity/bin:/usr/bin:/sbin:/bin:/usr/X11R6/bin"
+#elif defined(__dilos__)
+# define DEF_USER_PATH "/usr/bin:/bin"
+# define DEF_SYSTEM_PATH "/usr/bin:/usr/sbin:/sbin"
 #else
 # define DEF_USER_PATH "/usr/local/bin:/usr/bin:/bin:/usr/games:/usr/ucb"
 # define DEF_SYSTEM_PATH "/usr/local/sbin:/usr/local/bin:/opt/trinity/sbin:/usr/sbin:/opt/trinity/bin:/usr/bin:/sbin:/bin:/etc:/usr/ucb"
@@ -63,7 +69,7 @@
 
 #ifdef __linux__
 # define HAVE_VTS
-#elif defined(__sun__)
+#elif defined(__sun__) || defined(__dilos__)
 # define DEF_SERVER_TTY "console"
 #elif defined(_AIX)
 # define DEF_SERVER_TTY "lft0"