From b8318480f515c9ca0e7257ca7ca4c73c56a4a080 Mon Sep 17 00:00:00 2001
From: Albrecht Schlosser <albrechts.fltk@online.de>
Date: Sat, 13 Jun 2020 14:22:22 +0200
Subject: [PATCH] CMake: Build static and shared libs side-by-side

Clean up library and variable names.
Remove '_SHARED' suffix from library (output) filenames.

This commit was inspired by David Runge ('dvzrv'), thanks.
See PR #21.

Fixes #21
---
 CMake/macros.cmake  | 28 +++++++++++++++-------------
 src/CMakeLists.txt  | 18 +++++++++---------
 test/CMakeLists.txt |  1 -
 3 files changed, 24 insertions(+), 23 deletions(-)

diff --git a/CMake/macros.cmake b/CMake/macros.cmake
index e54d98455..4d5d4581d 100644
--- a/CMake/macros.cmake
+++ b/CMake/macros.cmake
@@ -53,30 +53,32 @@ endmacro (fl_debug_var)
 macro(FL_ADD_LIBRARY LIBNAME LIBTYPE LIBFILES)
 
     if (${LIBTYPE} STREQUAL "SHARED")
-        set (LIBRARY_NAME ${LIBNAME}_SHARED)
+      set (TARGET_NAME ${LIBNAME}_SHARED)
     else ()
-        set (LIBRARY_NAME ${LIBNAME})
+      set (TARGET_NAME ${LIBNAME})
     endif (${LIBTYPE} STREQUAL "SHARED")
 
     if (MSVC)
-	set (LIBRARY_NAME_DEBUG "${LIBRARY_NAME}d")
+	set (DEBUG_OUTPUT_NAME "${LIBNAME}d")
     else ()
-	set (LIBRARY_NAME_DEBUG "${LIBRARY_NAME}")
+	set (DEBUG_OUTPUT_NAME "${LIBNAME}")
     endif (MSVC)
 
-    add_library(${LIBRARY_NAME} ${LIBTYPE} ${LIBFILES})
+    add_library(${TARGET_NAME} ${LIBTYPE} ${LIBFILES})
 
-    set_target_properties(${LIBRARY_NAME}
+    set_target_properties(${TARGET_NAME}
         PROPERTIES
-        OUTPUT_NAME ${LIBRARY_NAME}
-        DEBUG_OUTPUT_NAME ${LIBRARY_NAME_DEBUG}
+        OUTPUT_NAME ${LIBNAME}
+        DEBUG_OUTPUT_NAME ${DEBUG_OUTPUT_NAME}
         CLEAN_DIRECT_OUTPUT TRUE
         COMPILE_DEFINITIONS "FL_LIBRARY"
 	)
 
     if (${LIBTYPE} STREQUAL "SHARED")
-	set_target_properties(${LIBRARY_NAME}
+	set_target_properties(${TARGET_NAME}
 	    PROPERTIES
+	    OUTPUT_NAME ${LIBNAME}
+	    DEBUG_OUTPUT_NAME ${DEBUG_OUTPUT_NAME}
 	    VERSION ${FLTK_VERSION_FULL}
 	    SOVERSION ${FLTK_VERSION_MAJOR}.${FLTK_VERSION_MINOR}
 	    PREFIX "lib"    # for MSVC static/shared coexistence
@@ -85,28 +87,28 @@ macro(FL_ADD_LIBRARY LIBNAME LIBTYPE LIBFILES)
 
     if (MSVC)
 	if (OPTION_LARGE_FILE)
-	    set_target_properties(${LIBRARY_NAME}
+	    set_target_properties(${TARGET_NAME}
 		PROPERTIES
 		LINK_FLAGS /LARGEADDRESSAWARE
 		)
 	endif (OPTION_LARGE_FILE)
 
 	if (${LIBTYPE} STREQUAL "SHARED")
-	    set_target_properties(${LIBRARY_NAME}
+	    set_target_properties(${TARGET_NAME}
 		PROPERTIES
 		COMPILE_DEFINITIONS "FL_DLL"
 		)
 	endif (${LIBTYPE} STREQUAL "SHARED")
     endif (MSVC)
 
-    install(TARGETS ${LIBRARY_NAME}
+    install(TARGETS ${TARGET_NAME}
         EXPORT FLTK-Targets
         RUNTIME DESTINATION ${FLTK_BINDIR}
         LIBRARY DESTINATION ${FLTK_LIBDIR}
         ARCHIVE DESTINATION ${FLTK_LIBDIR}
 	)
 
-    list(APPEND FLTK_LIBRARIES "${LIBRARY_NAME}")
+    list(APPEND FLTK_LIBRARIES "${TARGET_NAME}")
     set (FLTK_LIBRARIES ${FLTK_LIBRARIES} PARENT_SCOPE)
 
 endmacro(FL_ADD_LIBRARY LIBNAME LIBTYPE LIBFILES)
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 4683c1817..0205cb996 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -578,7 +578,7 @@ endif (OPTION_USE_SYSTEM_LIBPNG)
 
 if (OPENGL_FOUND)
     FL_ADD_LIBRARY(fltk_gl STATIC "${GLCPPFILES};${GL_HEADER_FILES};${GL_DRIVER_HEADER_FILES}")
-   target_link_libraries(fltk_gl fltk ${OPENGL_LIBRARIES})
+    target_link_libraries(fltk_gl fltk ${OPENGL_LIBRARIES})
 endif (OPENGL_FOUND)
 
 #######################################################################
@@ -616,21 +616,21 @@ if (OPTION_BUILD_SHARED_LIBS)
     endif (MSVC)
 
     if (OPTION_USE_SYSTEM_LIBJPEG)
-	target_link_libraries(fltk_images_SHARED ${FLTK_JPEG_LIBRARIES})
+      target_link_libraries(fltk_images_SHARED ${FLTK_JPEG_LIBRARIES})
     else()
-	target_link_libraries(fltk_images_SHARED fltk_jpeg_SHARED)
+      target_link_libraries(fltk_images_SHARED fltk_jpeg_SHARED)
     endif (OPTION_USE_SYSTEM_LIBJPEG)
 
     if (OPTION_USE_SYSTEM_LIBPNG)
-	target_link_libraries(fltk_images_SHARED ${FLTK_PNG_LIBRARIES})
+      target_link_libraries(fltk_images_SHARED ${FLTK_PNG_LIBRARIES})
     else()
-	target_link_libraries(fltk_images_SHARED fltk_png_SHARED)
+      target_link_libraries(fltk_images_SHARED fltk_png_SHARED)
     endif (OPTION_USE_SYSTEM_LIBPNG)
 
     if (OPTION_USE_SYSTEM_ZLIB)
-	target_link_libraries(fltk_images_SHARED ${FLTK_ZLIB_LIBRARIES})
+      target_link_libraries(fltk_images_SHARED ${FLTK_ZLIB_LIBRARIES})
     else()
-	target_link_libraries(fltk_images_SHARED fltk_z_SHARED)
+      target_link_libraries(fltk_images_SHARED fltk_z_SHARED)
     endif (OPTION_USE_SYSTEM_ZLIB)
 
     ###################################################################
@@ -638,9 +638,9 @@ if (OPTION_BUILD_SHARED_LIBS)
     if (OPENGL_FOUND)
       FL_ADD_LIBRARY(fltk_gl SHARED "${GLCPPFILES};${GL_HEADER_FILES};${GL_DRIVER_HEADER_FILES}")
       if (MSVC)
-	target_link_libraries(fltk_gl_SHARED fltk ${OPENGL_LIBRARIES})
+        target_link_libraries(fltk_gl_SHARED fltk ${OPENGL_LIBRARIES})
       else ()
-	target_link_libraries(fltk_gl_SHARED fltk_SHARED ${OPENGL_LIBRARIES})
+        target_link_libraries(fltk_gl_SHARED fltk_SHARED ${OPENGL_LIBRARIES})
       endif (MSVC)
     endif (OPENGL_FOUND)
 
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
index ddf08e935..951195063 100644
--- a/test/CMakeLists.txt
+++ b/test/CMakeLists.txt
@@ -110,7 +110,6 @@ CREATE_EXAMPLE(utf8 utf8.cxx fltk)
 CREATE_EXAMPLE(valuators valuators.fl fltk)
 CREATE_EXAMPLE(unittests unittests.cxx fltk)
 CREATE_EXAMPLE(windowfocus windowfocus.cxx fltk)
-
 CREATE_EXAMPLE(fltk-versions ../examples/fltk-versions.cxx fltk)
 
 # OpenGL demos...
-- 
GitLab