Author: rinrab
Date: Thu Jun  4 11:52:55 2026
New Revision: 1934978

Log:
Build libmagic support with cmake.

* CMakeLists.txt
  (#options): Add SVN_ENABLE_LIBMAGIC.
  (external-magic): Process the dependency and setup required options.
  (#configsummary): Log if libmagic is enabled or not.
* build/cmake/FindMAGIC.cmake
  (): New module.
* build/generator/gen_cmake.py
  (Generator::write): Remove magic from list of ignored deps.

Added:
   subversion/trunk/build/cmake/FindMAGIC.cmake
Modified:
   subversion/trunk/CMakeLists.txt
   subversion/trunk/build/generator/gen_cmake.py

Modified: subversion/trunk/CMakeLists.txt
==============================================================================
--- subversion/trunk/CMakeLists.txt     Thu Jun  4 11:22:27 2026        
(r1934977)
+++ subversion/trunk/CMakeLists.txt     Thu Jun  4 11:52:55 2026        
(r1934978)
@@ -92,6 +92,7 @@ option(SVN_ENABLE_TUI "Enable TUI applic
 option(SVN_ENABLE_AUTH_KWALLET "Enable KWallet auth library" OFF)
 option(SVN_ENABLE_AUTH_GNOME_KEYRING "Enable GNOME Keyring for auth 
credentials" OFF)
 option(SVN_ENABLE_SASL "Enable Cyrus SASL v2" OFF)
+option(SVN_ENABLE_LIBMAGIC "Enable libmagic filetype detection library")
 cmake_dependent_option(SVN_ENABLE_AUTH_GPG_AGENT "Enable GPG Agent support" 
OFF "WIN32" ON)
 
 option(SVN_INSTALL_PRIVATE_H "Install private header files." OFF)
@@ -746,6 +747,23 @@ if (SVN_ENABLE_SASL)
   )
 endif()
 
+add_library(external-magic INTERFACE)
+if (SVN_ENABLE_LIBMAGIC)
+  if(SVN_USE_PKG_CONFIG)
+    pkg_check_modules(libmagic REQUIRED IMPORTED_TARGET libmagic)
+    target_link_libraries(external-magic INTERFACE PkgConfig::libmagic)
+    set(SVN_MAGIC_LIBS ${libmagic_LDFLAGS})
+  else()
+    find_package(MAGIC REQUIRED)
+    target_link_libraries(external-magic INTERFACE MAGIC::MAGIC)
+  endif()
+
+  add_private_config_definition(
+    "Defined if libmagic support is enabled"
+    "SVN_HAVE_LIBMAGIC" "1"
+  )
+endif()
+
 if(SVN_ENABLE_SWIG_PERL OR SVN_ENABLE_SWIG_PYTHON OR SVN_ENABLE_SWIG_RUBY)
   file(MAKE_DIRECTORY 
"${CMAKE_CURRENT_BINARY_DIR}/subversion/bindings/swig/proxy")
 
@@ -1116,6 +1134,8 @@ message(STATUS "    Enable KWallet integ
 message(STATUS "    Enable Gnome Keyring .......... : 
${SVN_ENABLE_AUTH_GNOME_KEYRING}")
 message(STATUS "    Enable GPG Agent support ...... : 
${SVN_ENABLE_AUTH_GPG_AGENT}")
 message(STATUS "    Enable Cyrus SASL v2 .......... : ${SVN_ENABLE_SASL}")
+message(STATUS "  Optionsal features:")
+message(STATUS "    Enable libmagic ............... : ${SVN_ENABLE_LIBMAGIC}")
 message(STATUS "  Optional modules and targets:")
 message(STATUS "    Build Apache Modules .......... : 
${SVN_ENABLE_APACHE_MODULES}")
 message(STATUS "    Build programs ................ : ${SVN_ENABLE_PROGRAMS}")

Added: subversion/trunk/build/cmake/FindMAGIC.cmake
==============================================================================
--- /dev/null   00:00:00 1970   (empty, because file is newly added)
+++ subversion/trunk/build/cmake/FindMAGIC.cmake        Thu Jun  4 11:52:55 
2026        (r1934978)
@@ -0,0 +1,64 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+# FindMAGIC.cmake -- Find the libmagic library
+#
+
+find_path(MAGIC_INCLUDE_DIR
+  NAMES magic.h
+  PATH_SUFFIXES
+    include
+)
+
+find_library(MAGIC_LIBRARY
+  NAMES magic
+  PATH_SUFFIXES lib
+)
+
+mark_as_advanced(
+  MAGIC_INCLUDE_DIR
+  MAGIC_LIBRARY
+)
+
+if (MAGIC_INCLUDE_DIR AND EXISTS ${MAGIC_INCLUDE_DIR}/magic.h)
+  file(
+    STRINGS "${MAGIC_INCLUDE_DIR}/magic.h" VERSION_STRINGS
+    REGEX "#define MAGIC_VERSION"
+  )
+  string(REGEX REPLACE ".*MAGIC_VERSION[ \t]+([0-9]+).*" "\\1" MAGIC_VERSION 
${VERSION_STRINGS})
+else()
+  set(MAGIC_VERSION 100)
+endif()
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(
+  MAGIC
+  REQUIRED_VARS
+    MAGIC_LIBRARY
+    MAGIC_INCLUDE_DIR
+  VERSION_VAR
+    MAGIC_VERSION
+)
+
+if (MAGIC_FOUND)
+  add_library(MAGIC::MAGIC IMPORTED STATIC)
+  set_target_properties(MAGIC::MAGIC PROPERTIES
+    IMPORTED_LOCATION ${MAGIC_LIBRARY}
+    INTERFACE_INCLUDE_DIRECTORIES ${MAGIC_INCLUDE_DIR}
+  )
+endif()

Modified: subversion/trunk/build/generator/gen_cmake.py
==============================================================================
--- subversion/trunk/build/generator/gen_cmake.py       Thu Jun  4 11:22:27 
2026        (r1934977)
+++ subversion/trunk/build/generator/gen_cmake.py       Thu Jun  4 11:52:55 
2026        (r1934978)
@@ -167,7 +167,6 @@ class Generator(gen_base.GeneratorBase):
               private_libs.append("fs-libs")
             elif dep.name in ["apriconv",
                               "apr_memcache",
-                              "magic",
                               "macos-plist",
                               "macos-keychain"]:
               # These dependencies are currently ignored

Reply via email to