changeset 26:77a5ea5e996c

*: transfer back to cmake from autotools autotools just made lots of things more complicated than they should have and many things broke (i.e. translations)
author Paper <paper@paper.us.eu.org>
date Thu, 20 Jun 2024 05:56:06 -0400
parents 60ded877339b
children 13b647714159
files CMakeLists.txt Makefile.am configure.ac include/animone/types.h src/a11y/win32.cc src/fd/win32.cc
diffstat 6 files changed, 116 insertions(+), 179 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/CMakeLists.txt	Thu Jun 20 05:56:06 2024 -0400
@@ -0,0 +1,100 @@
+cmake_minimum_required(VERSION 3.16)
+project(animone LANGUAGES CXX)
+set(SRC_FILES
+	# any non-platform-specific files go here
+	src/animone.cc
+	src/player.cc
+	src/util.cc
+	src/strategist.cc
+	src/fd.cc
+	src/a11y.cc
+	src/win.cc
+)
+
+set(LIBRARIES)
+set(INCLUDE_DIRS)
+set(DEFINES)
+
+list(APPEND DEFINES DLL_EXPORT)
+
+if(APPLE)
+	list(APPEND DEFINES USE_MACOSX)
+	list(APPEND SRC_FILES
+		# xnu stuff
+		src/fd/xnu.cc
+		src/win/quartz.cc
+	)
+
+	# ...
+	find_library(OBJC_LIBRARY objc REQUIRED)
+	find_library(FOUNDATION_LIBRARY Foundation REQUIRED)
+	find_library(COREGRAPHICS_LIBRARY CoreGraphics REQUIRED)
+	find_library(APPLICATIONSERVICES_LIBRARY ApplicationServices REQUIRED)
+	list(APPEND LIBRARIES ${FOUNDATION_LIBRARY} ${COREGRAPHICS_LIBRARY} ${APPLICATIONSERVICES_LIBRARY} ${OBJC_LIBRARY})
+elseif(WIN32)
+	list(APPEND DEFINES USE_WIN32)
+	list(APPEND SRC_FILES
+		# win32
+		src/a11y/win32.cc
+		src/fd/win32.cc
+		src/win/win32.cc
+		src/util/win32.cc
+	)
+
+	find_library(OLE32_LIB ole32 REQUIRED)
+	find_library(OLEAUT32_LIB oleaut32 REQUIRED)
+	list(APPEND LIBRARIES ${OLE32_LIB} ${OLEAUT32_LIB})
+else() # NOT WIN32 AND NOT APPLE
+	find_library(LIBUTIL_LIB util)
+	find_library(LIBKVM_LIB kvm)
+
+	if(LINUX)
+		list(APPEND DEFINES USE_LINUX)
+		list(APPEND SRC_FILES src/fd/proc.cc)
+	elseif(LIBUTIL_LIBRARY) # FreeBSD
+		# stupid hackarounds
+		get_filename_component(LIBUTIL_DIR ${LIBUTIL_LIBRARY} DIRECTORY)
+
+		include(CheckLibraryExists)
+		check_library_exists(util kinfo_getfile ${LIBUTIL_DIR} LIBUTIL_GOOD)
+
+		if(LIBUTIL_GOOD)
+			list(APPEND DEFINES USE_FREEBSD)
+			list(APPEND LIBRARIES ${LIBUTIL_LIBRARY})
+			list(APPEND SRC_FILES src/fd/freebsd.cc)
+		endif() # LIBUTIL_GOOD
+	elseif(LIBKVM_LIBRARY) # OpenBSD
+		get_filename_component(LIBKVM_DIR ${LIBKVM_LIBRARY} DIRECTORY)
+
+		include(CheckLibraryExists)
+		check_library_exists(kvm kvm_getfiles ${LIBKVM_DIR} LIBKVM_HAS_GETFILES)
+
+		if(LIBKVM_HAS_GETFILES)
+			list(APPEND DEFINES USE_OPENBSD)
+			list(APPEND LIBRARIES ${LIBKVM_LIBRARY})
+			list(APPEND SRC_FILES src/fd/openbsd.cc)
+		endif() # LIBKVM_HAS_GETFILES
+	endif() # LINUX
+endif() # WIN32 AND APPLE
+
+# X11
+find_package(PkgConfig)
+if(PKG_CONFIG_FOUND)
+	pkg_check_modules(XCB xcb xcb-res)
+	if (XCB_FOUND)
+		list(APPEND DEFINES USE_X11)
+		list(APPEND LIBRARIES ${XCB_LINK_LIBRARIES})
+		list(APPEND INCLUDE_DIRS ${XCB_INCLUDE_DIRS})
+		list(APPEND SRC_FILES src/win/x11.cc)
+	endif() # XCB_FOUND
+endif() # PKG_CONFIG_FOUND
+
+add_library(animia SHARED ${SRC_FILES})
+set_target_properties(animia PROPERTIES
+	PUBLIC_HEADER include/animia.h
+	CXX_STANDARD 17
+)
+
+target_compile_definitions(animia PRIVATE ${DEFINES})
+target_include_directories(animia PUBLIC include PRIVATE ${INCLUDE_DIRS})
+target_link_libraries(animia PUBLIC ${LIBRARIES})
--- a/Makefile.am	Thu Jun 20 03:03:05 2024 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,90 +0,0 @@
-lib_LTLIBRARIES = libanimone.la
-
-include_HEADERS = \
-	include/animone.h
-
-animiadir = $(includedir)/animone
-nobase_animia_HEADERS = \
-	include/animone/media.h \
-	include/animone/player.h \
-	include/animone/types.h
-
-noinst_HEADERS = \
-	include/animone/a11y/win32.h \
-	include/animone/fd/freebsd.h \
-	include/animone/fd/openbsd.h \
-	include/animone/fd/netbsd.h \
-	include/animone/fd/proc.h \
-	include/animone/fd/win32.h \
-	include/animone/fd/xnu.h \
-	include/animone/util/win32.h \
-	include/animone/win/quartz.h \
-	include/animone/win/win32.h \
-	include/animone/win/x11.h \
-	include/animone/a11y.h \
-	include/animone/fd.h \
-	include/animone/strategies.h \
-	include/animone/util.h \
-	include/animone/win.h
-
-if BUILD_WIN
-files_win = src/a11y/win32.cc src/fd/win32.cc src/win/win32.cc src/util/win32.cc
-libs_win = -lole32 -loleaut32 -luuid
-endif
-
-if BUILD_OSX
-files_osx = src/fd/xnu.cc src/win/quartz.cc
-libs_osx = -lobjc
-ldflags_osx = -framework Foundation -framework CoreGraphics -framework ApplicationServices
-endif
-
-if BUILD_LINUX
-files_linux = src/fd/proc.cc
-endif
-
-if BUILD_FREEBSD
-
-files_freebsd = src/fd/freebsd.cc
-libs_freebsd = -lutil
-
-endif
-
-if BUILD_OPENBSD
-
-files_openbsd = src/fd/openbsd.cc
-libs_openbsd = -lkvm
-
-endif
-
-if BUILD_XCB
-files_x11 = src/win/x11.cc
-cflags_x11 = $(XCB_CFLAGS)
-libs_x11 = $(XCB_LIBS)
-endif
-
-EXTRA_DIST = \
-	$(top_srcdir)/data/players.anisthesia
-
-libanimone_la_SOURCES = \
-	src/animone.cc \
-	src/a11y.cc \
-	src/fd.cc \
-	src/player.cc \
-	src/strategist.cc \
-	src/util.cc \
-	src/win.cc \
-	$(files_win) \
-	$(files_osx) \
-	$(files_linux) \
-	$(files_freebsd) \
-	$(files_openbsd) \
-	$(files_x11)
-
-libanimone_la_CPPFLAGS = -I$(top_srcdir)/include $(DEFS)
-
-libanimone_la_CXXFLAGS = -std=c++17 $(cflags_osx) $(cflags_x11) $(cflags_wayland)
-libanimone_la_LDFLAGS = -no-undefined -version-info 0:0:0 $(ldflags_osx)
-
-libanimone_la_LIBADD = $(libs_win) $(libs_wayland) $(libs_x11) $(libs_osx) $(libs_freebsd) $(libs_openbsd)
-
-ACLOCAL_AMFLAGS = -I m4
--- a/configure.ac	Thu Jun 20 03:03:05 2024 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,77 +0,0 @@
-AC_INIT([animone], [0.2.0])
-
-AC_CANONICAL_HOST
-
-AC_CONFIG_SRCDIR([src/animone.cc])
-AC_CONFIG_AUX_DIR([build-aux])
-AC_CONFIG_MACRO_DIRS([m4])
-
-AM_INIT_AUTOMAKE([-Wall -Werror foreign subdir-objects])
-
-# Do we have a C++17 compiler
-AC_PROG_CXX
-
-AM_PROG_AR
-LT_INIT([win32-dll])
-
-build_win32=no
-build_osx=no
-build_linux=no
-build_libutil=no
-build_kvm=no
-build_bsd=no
-
-build_x11=no
-
-case "${host_os}" in
-	cygwin*|mingw*)
-		# Windows
-		build_windows=yes
-		AC_CHECK_TOOL([WINDRES], [windres])
-		AC_SUBST(WINDRES)
-		AC_DEFINE([USE_WIN32])
-		;;
-	darwin*)
-		# Mac OS X
-		build_osx=yes
-		AC_DEFINE([USE_MACOSX])
-		;;
-	linux*)
-		build_linux=yes
-		AC_DEFINE([USE_LINUX])
-		;;
-	*)
-		dnl BSDs
-		saved_LIBS="$LIBS"
-		AC_CHECK_LIB([util], [kinfo_getfile], [build_libutil=yes], [build_libutil=no])
-		AC_CHECK_LIB([kvm], [kvm_getfiles], [build_kvm=yes], [build_kvm=no])
-		LIBS="$saved_LIBS"
-
-		if test "x$build_kvm" = "xyes"; then
-			AC_DEFINE([USE_OPENBSD])
-		elif test "x$build_libutil" = "xyes"; then
-			AC_DEFINE([USE_FREEBSD])
-		fi
-		;;
-esac
-
-dnl todo: configure flag for this
-if test "x$build_osx" != "xyes" && test "x$build_windows" != "xyes"; then
-	PKG_CHECK_MODULES(XCB, [xcb xcb-res], [build_x11=yes], [build_x11=no])
-	if test "x$build_x11" = "xyes"; then
-		AC_DEFINE([USE_X11])
-		AC_SUBST([XCB_LIBS])
-		AC_SUBST([XCB_CFLAGS])
-	fi
-fi
-
-AM_CONDITIONAL([BUILD_WIN], [test "x$build_windows" = "xyes"])
-AM_CONDITIONAL([BUILD_OSX], [test "x$build_osx" = "xyes"])
-AM_CONDITIONAL([BUILD_LINUX], [test "x$build_linux" = "xyes"])
-AM_CONDITIONAL([BUILD_FREEBSD], [test "x$build_libutil" = "xyes"])
-AM_CONDITIONAL([BUILD_OPENBSD], [test "x$build_kvm" = "xyes"])
-
-AM_CONDITIONAL([BUILD_XCB], [test "x$build_x11" = "xyes"])
-
-AC_CONFIG_FILES([Makefile])
-AC_OUTPUT
--- a/include/animone/types.h	Thu Jun 20 03:03:05 2024 -0400
+++ b/include/animone/types.h	Thu Jun 20 05:56:06 2024 -0400
@@ -4,18 +4,14 @@
 #include <cstdint>
 
 /* windows is so annoying */
-#ifdef ANIMONE_STATIC
-# define ANIMONE_API
+#ifdef _WIN32
+# ifdef DLL_EXPORT
+#  define ANIMONE_API __declspec(dllexport)
+# else
+#  define ANIMONE_API __declspec(dllimport)
+# endif
 #else
-# ifdef _WIN32
-#  ifdef DLL_EXPORT
-#   define ANIMONE_API __declspec(dllexport)
-#  else
-#   define ANIMONE_API __declspec(dllimport)
-#  endif
-# else
-#  define ANIMONE_API
-# endif
+# define ANIMONE_API
 #endif
 
 /* FIXME configure this in autoconf */
--- a/src/a11y/win32.cc	Thu Jun 20 03:03:05 2024 -0400
+++ b/src/a11y/win32.cc	Thu Jun 20 05:56:06 2024 -0400
@@ -10,6 +10,12 @@
 #include "animone/a11y/win32.h"
 #include "animone/util/win32.h"
 
+/* need to define these separately because libtool is dysfunctional */
+#include <initguid.h>
+
+DEFINE_GUID(IID_IUIAutomation, 0x30cbe57d,0xd9d0,0x452a,0xab,0x13,0x7a,0xc5,0xac,0x48,0x25,0xee);
+DEFINE_GUID(CLSID_CUIAutomation, 0xff48dba4,0x60ef,0x4201,0xaa,0x87,0x54,0x10,0x3e,0xef,0x59,0x4e);
+
 namespace animone::internal::win32 {
 
 // Windows Accessibility API reference:
--- a/src/fd/win32.cc	Thu Jun 20 03:03:05 2024 -0400
+++ b/src/fd/win32.cc	Thu Jun 20 05:56:06 2024 -0400
@@ -143,9 +143,11 @@
 /* ------------------------------------------------------------------- */
 
 static bool GetSystemDirectory(std::wstring& str) {
+	/* libtool can't link with -luuid properly. */
+	constexpr uint32_t WindowsDir = 0x24;
 	str.assign(MAX_PATH, '\0');
 
-	return SUCCEEDED(::SHGetFolderPathW(NULL, CSIDL_WINDOWS, NULL, SHGFP_TYPE_CURRENT, &str.front()));
+	return SUCCEEDED(::SHGetFolderPathW(NULL, WindowsDir, NULL, SHGFP_TYPE_CURRENT, &str.front()));
 }
 
 static bool IsSystemDirectory(std::wstring path) {