# HG changeset patch # User Paper # Date 1718877366 14400 # Node ID 77a5ea5e996c31c4d286cbad4960175eadff31ad # Parent 60ded877339b25d775ff9ee3a5bb6a1313734de6 *: 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) diff -r 60ded877339b -r 77a5ea5e996c CMakeLists.txt --- /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}) diff -r 60ded877339b -r 77a5ea5e996c Makefile.am --- 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 diff -r 60ded877339b -r 77a5ea5e996c configure.ac --- 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 diff -r 60ded877339b -r 77a5ea5e996c include/animone/types.h --- 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 /* 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 */ diff -r 60ded877339b -r 77a5ea5e996c src/a11y/win32.cc --- 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 + +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: diff -r 60ded877339b -r 77a5ea5e996c src/fd/win32.cc --- 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) {