summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlbrecht Schlosser <albrechts.fltk@online.de>2016-08-09 14:11:42 +0000
committerAlbrecht Schlosser <albrechts.fltk@online.de>2016-08-09 14:11:42 +0000
commit78d853891c145776e19e412b4956fed87a33bf60 (patch)
tree208be0977778d912bb06d6ef99953bca49556989
parente5e7fa9b1ee64a1f6d3688930ce162668093a3c1 (diff)
[CMake] Fix Windows dll build with Visual Studio generator.
Now you can set OPTION_BUILD_SHARED_LIBS:BOOL=ON to build FLTK dll's with Visual Studio. Tested and works (Visual Studio 2010 + 2015). Note: Linux fixes included, tested and works (Ubuntu). Todo: dll names and target directories may need some changes. We really need to get rid of that "_SHARED" suffix in .so names. git-svn-id: file:///fltk/svn/fltk/branches/branch-1.3-porting@11867 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
-rw-r--r--CMake/macros.cmake12
-rw-r--r--CMake/resources.cmake9
-rw-r--r--FL/Fl_Graphics_Driver.H8
-rw-r--r--FL/Fl_Image_Surface.H8
-rw-r--r--FL/win32.H2
-rw-r--r--src/CMakeLists.txt30
6 files changed, 48 insertions, 21 deletions
diff --git a/CMake/macros.cmake b/CMake/macros.cmake
index 242153c3a..d6f4fa5a5 100644
--- a/CMake/macros.cmake
+++ b/CMake/macros.cmake
@@ -1,7 +1,7 @@
#
# "$Id$"
#
-# macros.cmake defines macros used by the build system
+# macros.cmake defines macros used by the CMake build system
# Written by Michael Surette
#
# Copyright 1998-2016 by Bill Spitzak and others.
@@ -29,17 +29,17 @@ macro(FL_ADD_LIBRARY LIBNAME LIBTYPE LIBFILES)
endif (${LIBTYPE} STREQUAL "SHARED")
if (MSVC)
- set (LIBNAME_DEBUG "${LIBNAME}d")
+ set (LIBRARY_NAME_DEBUG "${LIBRARY_NAME}d")
else ()
- set (LIBNAME_DEBUG "${LIBNAME}")
+ set (LIBRARY_NAME_DEBUG "${LIBRARY_NAME}")
endif (MSVC)
add_library(${LIBRARY_NAME} ${LIBTYPE} ${LIBFILES})
set_target_properties(${LIBRARY_NAME}
PROPERTIES
- OUTPUT_NAME ${LIBNAME}
- DEBUG_OUTPUT_NAME "${LIBNAME_DEBUG}"
+ OUTPUT_NAME ${LIBRARY_NAME}
+ DEBUG_OUTPUT_NAME ${LIBRARY_NAME_DEBUG}
CLEAN_DIRECT_OUTPUT TRUE
COMPILE_DEFINITIONS "FL_LIBRARY"
)
@@ -55,7 +55,7 @@ macro(FL_ADD_LIBRARY LIBNAME LIBTYPE LIBFILES)
if (MSVC)
if (OPTION_LARGE_FILE)
- set_target_properties(${LIBNAME}
+ set_target_properties(${LIBRARYNAME}
PROPERTIES
LINK_FLAGS /LARGEADDRESSAWARE
)
diff --git a/CMake/resources.cmake b/CMake/resources.cmake
index 8af7ca2cd..37c0c08ef 100644
--- a/CMake/resources.cmake
+++ b/CMake/resources.cmake
@@ -38,6 +38,15 @@ find_file(HAVE_SYS_STDTYPES_H sys/stdtypes.h)
find_file(HAVE_X11_XREGION_H X11/Xregion.h)
find_path(HAVE_XDBE_H Xdbe.h PATH_SUFFIXES X11/extensions extensions)
+if (MSVC)
+ message(STATUS "Note: The following three headers should all be found!")
+ message(STATUS "HAVE_GL_GL_H = '${HAVE_GL_GL_H}'")
+ message(STATUS "HAVE_GL_GLU_H = '${HAVE_GL_GLU_H}'")
+ message(STATUS "HAVE_LOCALE_H = '${HAVE_LOCALE_H}'")
+ message(STATUS "If one of these headers was not found, run cmake-gui ...")
+ message(STATUS "... again from a Visual Studio developer command prompt!")
+endif (MSVC)
+
# Simulate the behavior of autoconf macro AC_HEADER_DIRENT, see:
# https://www.gnu.org/software/autoconf/manual/autoconf-2.69/html_node/Particular-Headers.html
# "Check for the following header files. For the first one that is found
diff --git a/FL/Fl_Graphics_Driver.H b/FL/Fl_Graphics_Driver.H
index 2f93ef132..0a7282eee 100644
--- a/FL/Fl_Graphics_Driver.H
+++ b/FL/Fl_Graphics_Driver.H
@@ -74,10 +74,10 @@ class FL_EXPORT Fl_Graphics_Driver {
friend class Fl_Pixmap;
friend class Fl_Bitmap;
friend class Fl_RGB_Image;
- friend int fl_draw_pixmap(const char*const* cdata, int x, int y, Fl_Color bg);
- friend void gl_start();
- friend Fl_Bitmask fl_create_bitmask(int w, int h, const uchar *array);
- friend void fl_delete_bitmask(Fl_Bitmask);
+ friend FL_EXPORT int fl_draw_pixmap(const char*const* cdata, int x, int y, Fl_Color bg);
+ friend FL_EXPORT void gl_start();
+ friend FL_EXPORT Fl_Bitmask fl_create_bitmask(int w, int h, const uchar *array);
+ friend FL_EXPORT void fl_delete_bitmask(Fl_Bitmask);
public:
// The following functions create the various graphics drivers that are required
// for core operations. They must be implemented as members of Fl_Graphics_Driver,
diff --git a/FL/Fl_Image_Surface.H b/FL/Fl_Image_Surface.H
index 26da75643..887f86ac8 100644
--- a/FL/Fl_Image_Surface.H
+++ b/FL/Fl_Image_Surface.H
@@ -64,10 +64,10 @@
\endcode
*/
class FL_EXPORT Fl_Image_Surface : public Fl_Widget_Surface {
- friend Fl_Offscreen fl_create_offscreen(int w, int h);
- friend void fl_begin_offscreen(Fl_Offscreen ctx);
- friend void fl_end_offscreen(void);
- friend void fl_delete_offscreen(Fl_Offscreen ctx);
+ friend FL_EXPORT Fl_Offscreen fl_create_offscreen(int w, int h);
+ friend FL_EXPORT void fl_begin_offscreen(Fl_Offscreen ctx);
+ friend FL_EXPORT void fl_end_offscreen(void);
+ friend FL_EXPORT void fl_delete_offscreen(Fl_Offscreen ctx);
private:
class Fl_Image_Surface_Driver *platform_surface;
protected:
diff --git a/FL/win32.H b/FL/win32.H
index 1983cc0cf..3a9b74c32 100644
--- a/FL/win32.H
+++ b/FL/win32.H
@@ -45,7 +45,7 @@ extern FL_EXPORT UINT fl_wake_msg;
extern FL_EXPORT char fl_override_redirect; // hack into Fl_Window::make_xid()
extern FL_EXPORT int fl_background_pixel; // hack into Fl_Window::make_xid()
extern FL_EXPORT HPALETTE fl_palette; // non-zero only on 8-bit displays!
-extern FL_EXPORT void fl_release_dc(HWND w, HDC dc);
+extern void fl_release_dc(HWND w, HDC dc);
extern FL_EXPORT void fl_save_dc( HWND w, HDC dc);
#endif // FL_LIBRARY || FL_INTERNALS
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 3801a7d8a..03ea19cf4 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -492,8 +492,7 @@ target_link_libraries(fltk_forms fltk)
#######################################################################
FL_ADD_LIBRARY(fltk_images STATIC "${IMGCPPFILES}")
-target_link_libraries(fltk_images fltk ${FLTK_PNG_LIBRARIES}
- ${FLTK_JPEG_LIBRARIES} ${FLTK_ZLIB_LIBRARIES})
+target_link_libraries(fltk_images fltk)
if (OPTION_USE_SYSTEM_LIBJPEG)
target_link_libraries(fltk_images ${FLTK_JPEG_LIBRARIES})
@@ -524,6 +523,13 @@ endif (OPENGL_FOUND)
# Build shared libraries (optional)
#######################################################################
+# Note to devs: As of 08 Aug 2016 we can build shared libs (dlls)
+# under Windows with Visual Studio (MSVC) but we can't link for instance
+# fltk_images_SHARED with fltk_SHARED - we have to use fltk, i.e. the
+# "static" object library instead. I don't know how to fix this, but
+# at least we can build shared libraries (dlls) with Visual Studio.
+# AlbrechtS
+
if (OPTION_BUILD_SHARED_LIBS)
FL_ADD_LIBRARY(fltk SHARED "${SHARED_FILES}")
@@ -532,12 +538,20 @@ if (OPTION_BUILD_SHARED_LIBS)
###################################################################
FL_ADD_LIBRARY(fltk_forms SHARED "${FLCPPFILES}")
- target_link_libraries(fltk_forms_SHARED fltk_SHARED)
+ if (MSVC)
+ target_link_libraries(fltk_forms_SHARED fltk)
+ else ()
+ target_link_libraries(fltk_forms_SHARED fltk_SHARED)
+ endif (MSVC)
###################################################################
FL_ADD_LIBRARY(fltk_images SHARED "${IMGCPPFILES}")
- target_link_libraries(fltk_images_SHARED fltk_SHARED)
+ if (MSVC)
+ target_link_libraries(fltk_images_SHARED fltk)
+ else ()
+ target_link_libraries(fltk_images_SHARED fltk_SHARED)
+ endif (MSVC)
if (OPTION_USE_SYSTEM_LIBJPEG)
target_link_libraries(fltk_images_SHARED ${FLTK_JPEG_LIBRARIES})
@@ -560,8 +574,12 @@ if (OPTION_BUILD_SHARED_LIBS)
###################################################################
if (OPENGL_FOUND)
- FL_ADD_LIBRARY(fltk_gl SHARED "${GLCPPFILES};${GL_HEADER_FILES};${GL_DRIVER_HEADER_FILES}")
- target_link_libraries(fltk_gl_SHARED fltk_SHARED ${OPENGL_LIBRARIES})
+ 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})
+ else ()
+ target_link_libraries(fltk_gl_SHARED fltk_SHARED ${OPENGL_LIBRARIES})
+ endif (MSVC)
endif (OPENGL_FOUND)
endif (OPTION_BUILD_SHARED_LIBS)