From: Boyuan Yang <byang@debian.org>
Date: Mon, 6 Jan 2025 15:53:01 -0500
Subject: Build shared library instead

Forwarded: no
---
 CMakeLists.txt                 |  2 ++
 code_generation/CMakeLists.txt | 13 +++++++++++--
 common/CMakeLists.txt          | 12 ++++++++++--
 schema/CMakeLists.txt          | 12 ++++++++++--
 4 files changed, 33 insertions(+), 6 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index a0d33a5..0db550b 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -12,6 +12,8 @@ project(libkode)
 
 option(${PROJECT_NAME}_QT6 "Build against Qt 6" OFF)
 
+include(GNUInstallDirs)
+
 if(${PROJECT_NAME}_QT6)
   find_package(Qt6 6.0.0 CONFIG REQUIRED COMPONENTS Core Network Xml Test)
   set(QT_MAJOR_VERSION 6)
diff --git a/code_generation/CMakeLists.txt b/code_generation/CMakeLists.txt
index ddf1003..c9950f9 100644
--- a/code_generation/CMakeLists.txt
+++ b/code_generation/CMakeLists.txt
@@ -33,7 +33,7 @@ set(CODE_GENERATION_HEADERS
 	variable.h
 )
 
-add_library(kode STATIC
+add_library(kode SHARED
 	${CODE_GENERATION_SOURCES} ${CODE_GENERATION_HEADERS}
 )
 
@@ -45,4 +45,13 @@ target_include_directories(kode PUBLIC
         Qt${QT_MAJOR_VERSION}::Core
 )
 
-set_target_properties(kode PROPERTIES OUTPUT_NAME "kode${kode_LIBRARY_QTID}")
+set_target_properties(kode PROPERTIES OUTPUT_NAME "kode${libkode_LIBRARY_QTID}" SOVERSION 0)
+
+set(CODE_GENERATION_INSTALL_INCLUDEDIR "${CMAKE_INSTALL_INCLUDEDIR}/libkode${libkode_LIBRARY_QTID}/code_generation")
+
+install(TARGETS kode
+    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+    PUBLIC_HEADER DESTINATION ${CODE_GENERATION_INSTALL_INCLUDEDIR}
+)
+
+install(FILES ${CODE_GENERATION_HEADERS} DESTINATION ${CODE_GENERATION_INSTALL_INCLUDEDIR})
diff --git a/common/CMakeLists.txt b/common/CMakeLists.txt
index 5f41c0d..47a9155 100644
--- a/common/CMakeLists.txt
+++ b/common/CMakeLists.txt
@@ -14,7 +14,7 @@ set(COMMON_HEADERS
 	qname.h
 )
 
-add_library(xmlcommon STATIC
+add_library(xmlcommon SHARED
 	${COMMON_SOURCES} ${COMMON_HEADERS}
 )
 
@@ -26,4 +26,12 @@ target_include_directories(xmlcommon PUBLIC
    "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>"
 )
 
-set_target_properties(xmlcommon PROPERTIES OUTPUT_NAME "xmlcommon${kode_LIBRARY_QTID}")
+set_target_properties(xmlcommon PROPERTIES OUTPUT_NAME "kode_xmlcommon${libkode_LIBRARY_QTID}" SOVERSION 0)
+set(XMLCOMMON_INSTALL_INCLUDEDIR "${CMAKE_INSTALL_INCLUDEDIR}/libkode${libkode_LIBRARY_QTID}/common")
+
+install(TARGETS xmlcommon
+    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+    PUBLIC_HEADER DESTINATION ${XMLCOMMON_INSTALL_INCLUDEDIR}
+)
+
+install(FILES ${COMMON_HEADERS} DESTINATION ${XMLCOMMON_INSTALL_INCLUDEDIR})
diff --git a/schema/CMakeLists.txt b/schema/CMakeLists.txt
index 6f81e0b..75b3fbc 100644
--- a/schema/CMakeLists.txt
+++ b/schema/CMakeLists.txt
@@ -29,7 +29,7 @@ set(SCHEMA_HEADERS
 	xsdtype.h
 )
 
-add_library(xmlschema STATIC
+add_library(xmlschema SHARED
 	${SCHEMA_SOURCES} ${SCHEMA_HEADERS}
 )
 
@@ -42,4 +42,12 @@ target_include_directories(xmlschema PUBLIC
    "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>"
 )
 
-set_target_properties(xmlschema PROPERTIES OUTPUT_NAME "xmlschema${kode_LIBRARY_QTID}")
+set_target_properties(xmlschema PROPERTIES OUTPUT_NAME "kode_xmlschema${libkode_LIBRARY_QTID}" SOVERSION 0)
+set(XMLSCHEMA_INSTALL_INCLUDEDIR "${CMAKE_INSTALL_INCLUDEDIR}/libkode${libkode_LIBRARY_QTID}/schema")
+
+install(TARGETS xmlschema
+    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+    PUBLIC_HEADER DESTINATION ${XMLSCHEMA_INSTALL_INCLUDEDIR}
+)
+
+install(FILES ${SCHEMA_HEADERS} DESTINATION ${XMLSCHEMA_INSTALL_INCLUDEDIR})
