diff --git a/src/libprojectM/CMakeLists.txt b/src/libprojectM/CMakeLists.txt index 41eb10823..75d968fe0 100644 --- a/src/libprojectM/CMakeLists.txt +++ b/src/libprojectM/CMakeLists.txt @@ -41,7 +41,6 @@ add_library(projectM_main OBJECT Common.hpp ConfigFile.cpp ConfigFile.h - dlldefs.h event.h fatal.h fftsg.cpp @@ -70,11 +69,8 @@ add_library(projectM_main OBJECT PresetLoader.cpp PresetLoader.hpp projectM.cpp - projectM.h projectM.hpp projectM-opengl.h - ProjectMCWrapper.cpp - ProjectMCWrapper.hpp RandomNumberGenerators.hpp resource.h sdltoprojectM.h @@ -90,7 +86,6 @@ add_library(projectM_main OBJECT target_include_directories(projectM_main PRIVATE - "${CMAKE_CURRENT_BINARY_DIR}/include/libprojectM" "${CMAKE_SOURCE_DIR}/src" "${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}/Renderer" @@ -107,11 +102,6 @@ target_link_libraries(projectM_main ${PROJECTM_OPENGL_LIBRARIES} ) -target_compile_options(projectM_main - PRIVATE - -DprojectM_main_EXPORTS - ) - include(GenerateExportHeader) generate_export_header(projectM_main @@ -120,147 +110,11 @@ generate_export_header(projectM_main ) if (ENABLE_STATIC_LIB) - add_library(projectM_static STATIC - # Xcode needs at least one source file, otherwise it won't create the static library. - StaticLibDummy.cpp - - $ - $ - $ - $ - $ - $ - $<$:$> - ) - - set_target_properties(projectM_static PROPERTIES - OUTPUT_NAME projectM - EXPORT_NAME static - FOLDER libprojectM - ) - - target_include_directories(projectM_static - PUBLIC - "$" - "$" - "$" - "$" - "$" - "$" - "$" - "$" - ) - - target_link_libraries(projectM_static - PRIVATE - GLM::GLM - PUBLIC - ${PROJECTM_OPENGL_LIBRARIES} - ) - - if(ENABLE_THREADING) - target_link_libraries(projectM_static - PUBLIC - Threads::Threads - ) - endif() - - if(ENABLE_LLVM) - target_link_libraries(projectM_static - PUBLIC - LLVM::LLVM - ) - endif() - - if(CMAKE_SYSTEM_NAME STREQUAL "Darwin") - target_link_libraries(projectM_static - PUBLIC - "-framework CoreFoundation" - ) - endif() - - install(TARGETS projectM_static - EXPORT libprojectMTargets - LIBRARY DESTINATION "${PROJECTM_LIB_DIR}" - RUNTIME DESTINATION "${PROJECTM_LIB_DIR}" - ARCHIVE DESTINATION "${PROJECTM_LIB_DIR}" - COMPONENT Runtime - ) - - set(EXPORT_SHARED_LIB_TARGET projectM_static) + include(libprojectM_static.cmake) endif() if(ENABLE_SHARED_LIB) - add_library(projectM_shared SHARED - $ - $ - $ - $ - $ - $ - $<$:$> - ) - - set_target_properties(projectM_shared PROPERTIES - OUTPUT_NAME projectM - VERSION "${PROJECTM_LIB_VERSION}" - SOVERSION "${PROJECTM_SO_VERSION}" - EXPORT_NAME shared - FOLDER libprojectM - ) - - target_include_directories(projectM_shared - PUBLIC - "$" - "$" - "$" - "$" - "$" - "$" - "$" - "$" - ) - - target_link_libraries(projectM_shared - PRIVATE - GLM::GLM - PUBLIC - ${PROJECTM_OPENGL_LIBRARIES} - ${CMAKE_DL_LIBS} - ) - - if(ENABLE_THREADING) - target_link_libraries(projectM_shared - PUBLIC - Threads::Threads - ) - endif() - - if(ENABLE_LLVM) - target_link_libraries(projectM_shared - PUBLIC - LLVM::LLVM - ) - endif() - - if(CMAKE_SYSTEM_NAME STREQUAL "Darwin") - target_link_libraries(projectM_shared - PUBLIC - "-framework CoreFoundation" - ) - endif() - - enable_target_linker_flags_if_supported(projectM_shared PRIVATE --no-undefined) - - install(TARGETS projectM_shared - EXPORT libprojectMTargets - LIBRARY DESTINATION "${PROJECTM_LIB_DIR}" - RUNTIME DESTINATION "${PROJECTM_LIB_DIR}" - ARCHIVE DESTINATION "${PROJECTM_LIB_DIR}" - COMPONENT Runtime - ) - - set(EXPORT_SHARED_LIB_TARGET projectM_shared) + include(libprojectM_shared.cmake) endif() if(ENABLE_SHARED_LINKING) @@ -270,18 +124,23 @@ else() endif() install(FILES - Common.hpp - PCM.hpp - dlldefs.h event.h - fatal.h projectM.h - projectM.hpp "${CMAKE_CURRENT_BINARY_DIR}/include/libprojectM/projectM_export.h" DESTINATION "${PROJECTM_INCLUDE_DIR}/libprojectM" COMPONENT Devel ) +if(ENABLE_CXX_INTERFACE) + install(FILES + Common.hpp + PCM.hpp + fatal.h + projectM.hpp + DESTINATION "${PROJECTM_INCLUDE_DIR}/libprojectM" + COMPONENT Devel + ) +endif() # CMake target exports @@ -333,29 +192,6 @@ install(EXPORT libprojectMTargets ) - -# pkgconfig export -macro(set_pkg_config_path varname path) - if(IS_ABSOLUTE "${path}") - set(${varname} "${path}") - else() - set(${varname} "\${prefix}/${path}") - endif() -endmacro() - -set(PKGCONFIG_PREFIX "${CMAKE_INSTALL_PREFIX}") -set_pkg_config_path(PKGCONFIG_LIB_DIR "${PROJECTM_LIB_DIR}") -set_pkg_config_path(PKGCONFIG_INCLUDE_DIR "${PROJECTM_INCLUDE_DIR}") -set_pkg_config_path(PKGCONFIG_DATADIR_PATH "${PROJECTM_DATADIR_PATH}") - -configure_file(libprojectM.pc.cmake.in "${CMAKE_BINARY_DIR}/libprojectM.pc" @ONLY) -install(FILES "${CMAKE_BINARY_DIR}/libprojectM.pc" - DESTINATION "${PROJECTM_LIB_DIR}/pkgconfig" - COMPONENT Devel - ) - - - # If the path is not absolute, need to add the prefix path (and hope the result is absolute). if(NOT IS_ABSOLUTE PROJECTM_DATADIR_PATH) set(PROJECTM_DATADIR_PATH_ABSOLUTE "${CMAKE_INSTALL_PREFIX}/${PROJECTM_DATADIR_PATH}") diff --git a/src/libprojectM/Common.hpp b/src/libprojectM/Common.hpp index bc66031d4..0817d71f3 100755 --- a/src/libprojectM/Common.hpp +++ b/src/libprojectM/Common.hpp @@ -53,8 +53,6 @@ extern FILE *fmemopen(void *buf, size_t len, const char *pMode); #endif /** MACOS */ -#include "dlldefs.h" - #define DEFAULT_FONT_PATH "/home/carm/fonts/courier1.glf" #define MAX_TOKEN_SIZE 512 #define MAX_PATH_SIZE 4096 diff --git a/src/libprojectM/MilkdropPresetFactory/Eval.hpp b/src/libprojectM/MilkdropPresetFactory/Eval.hpp index f1a4fa9db..979f8f45a 100755 --- a/src/libprojectM/MilkdropPresetFactory/Eval.hpp +++ b/src/libprojectM/MilkdropPresetFactory/Eval.hpp @@ -43,7 +43,7 @@ #define INFIX_OR 5 #define INFIX_AND 6 -class DLLEXPORT InfixOp; +class InfixOp; class Eval { public: diff --git a/src/libprojectM/MilkdropPresetFactory/Expr.hpp b/src/libprojectM/MilkdropPresetFactory/Expr.hpp index 2757289ca..2e2f7eda0 100755 --- a/src/libprojectM/MilkdropPresetFactory/Expr.hpp +++ b/src/libprojectM/MilkdropPresetFactory/Expr.hpp @@ -30,7 +30,6 @@ #define _EXPR_H #include "config.h" -#include "dlldefs.h" #include "CValue.hpp" #include "Func.hpp" #include diff --git a/src/libprojectM/MilkdropPresetFactory/Func.hpp b/src/libprojectM/MilkdropPresetFactory/Func.hpp index 20460714f..1e5da1148 100755 --- a/src/libprojectM/MilkdropPresetFactory/Func.hpp +++ b/src/libprojectM/MilkdropPresetFactory/Func.hpp @@ -33,7 +33,7 @@ #include /* Function Type */ -class DLLEXPORT Func { +class Func { public: /// Create a new function wrapper object diff --git a/src/libprojectM/MilkdropPresetFactory/MilkdropPresetFactory.hpp b/src/libprojectM/MilkdropPresetFactory/MilkdropPresetFactory.hpp index 885cf59a0..c00dba8cd 100644 --- a/src/libprojectM/MilkdropPresetFactory/MilkdropPresetFactory.hpp +++ b/src/libprojectM/MilkdropPresetFactory/MilkdropPresetFactory.hpp @@ -15,9 +15,9 @@ #include #include "../PresetFactory.hpp" -class DLLEXPORT PresetOutputs; +class PresetOutputs; -class DLLEXPORT PresetInputs; +class PresetInputs; class MilkdropPresetFactory : public PresetFactory { diff --git a/src/libprojectM/PCM.hpp b/src/libprojectM/PCM.hpp index 14c944e6e..3d651e297 100755 --- a/src/libprojectM/PCM.hpp +++ b/src/libprojectM/PCM.hpp @@ -30,7 +30,6 @@ #define _PCM_H #include -#include "dlldefs.h" // FFT_LENGTH is number of magnitude values available from getSpectrum(). @@ -47,11 +46,7 @@ enum CHANNEL CHANNEL_1 = 1 }; -class -#ifdef WIN32 -DLLEXPORT -#endif -PCM +class PCM { public: /* maximum number of sound samples that are actually stored. */ diff --git a/src/libprojectM/Renderer/BeatDetect.hpp b/src/libprojectM/Renderer/BeatDetect.hpp index 01d16483e..448e21ac0 100755 --- a/src/libprojectM/Renderer/BeatDetect.hpp +++ b/src/libprojectM/Renderer/BeatDetect.hpp @@ -32,7 +32,6 @@ #define _BEAT_DETECT_H #include "../PCM.hpp" -#include "../dlldefs.h" #include #include @@ -41,7 +40,7 @@ // the actual time represented in the history depends on FPS #define BEAT_HISTORY_LENGTH 80 -class DLLEXPORT BeatDetect +class BeatDetect { public: // Does this really belong here? maybe belongs on projectM.Settings? diff --git a/src/libprojectM/dlldefs.h b/src/libprojectM/dlldefs.h deleted file mode 100755 index b944fe730..000000000 --- a/src/libprojectM/dlldefs.h +++ /dev/null @@ -1,40 +0,0 @@ -/** - * projectM -- Milkdrop-esque visualisation SDK - * Copyright (C)2003-2007 projectM Team - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * See 'LICENSE.txt' included within this release - * - */ -/** - * $Id$ - * - * DLL definitions for exporting symbols on various platforms - * - * $Log$ - */ - -#ifndef _DLLDEFS_H -#define _DLLDEFS_H - -#ifndef DLLEXPORT -#ifdef WIN32 -#define DLLEXPORT __declspec(dllexport) -#else /** !WIN32 */ -#define DLLEXPORT -#endif /** WIN32 */ -#endif /** !DLLEXPORT */ - -#endif /** !_DLLDEFS_H */ diff --git a/src/libprojectM/event.h b/src/libprojectM/event.h index af72c6914..f82451c7f 100755 --- a/src/libprojectM/event.h +++ b/src/libprojectM/event.h @@ -27,8 +27,7 @@ * $Log: event.h,v $ */ -#ifndef _PROJECTM_EVENT_H -#define _PROJECTM_EVENT_H +#pragma once typedef enum { /** Event types */ @@ -152,6 +151,3 @@ typedef enum { PROJECTM_KMOD_LCTRL, PROJECTM_KMOD_RCTRL, } projectMModifier; - -#endif /** !_PROJECTM_EVENT_H */ - diff --git a/src/libprojectM/libprojectM.pc.cmake.in b/src/libprojectM/libprojectM.pc.cmake.in index 81084991d..9183c536d 100644 --- a/src/libprojectM/libprojectM.pc.cmake.in +++ b/src/libprojectM/libprojectM.pc.cmake.in @@ -9,5 +9,5 @@ Name: libprojectM Version: @PROJECT_VERSION@ Description: projectM - OpenGL Milkdrop Requires: -Libs: -L${libdir} -lprojectM -Cflags: -I${includedir} +Libs: -L${libdir} -l:projectM.a +Cflags: -I${includedir} -DPROJECTM_STATIC_DEFINE diff --git a/src/libprojectM/libprojectM_shared.cmake b/src/libprojectM/libprojectM_shared.cmake new file mode 100644 index 000000000..7f6cea498 --- /dev/null +++ b/src/libprojectM/libprojectM_shared.cmake @@ -0,0 +1,79 @@ +add_library(projectM_shared SHARED + projectM.h + ProjectMCWrapper.cpp + ProjectMCWrapper.hpp + + $ + $ + $ + $ + $ + $ + $<$:$> + ) + +target_compile_options(projectM_shared + PRIVATE + -DprojectM_main_EXPORTS + ) + +set_target_properties(projectM_shared PROPERTIES + OUTPUT_NAME projectM + VERSION "${PROJECTM_LIB_VERSION}" + SOVERSION "${PROJECTM_SO_VERSION}" + EXPORT_NAME shared + FOLDER libprojectM + ) + +target_include_directories(projectM_shared + PUBLIC + "$" + "$" + "$" + "$" + "$" + "$" + "$" + "$" + ) + +target_link_libraries(projectM_shared + PRIVATE + GLM::GLM + PUBLIC + ${PROJECTM_OPENGL_LIBRARIES} + ${CMAKE_DL_LIBS} + ) + +if(ENABLE_THREADING) + target_link_libraries(projectM_shared + PUBLIC + Threads::Threads + ) +endif() + +if(ENABLE_LLVM) + target_link_libraries(projectM_shared + PUBLIC + LLVM::LLVM + ) +endif() + +if(CMAKE_SYSTEM_NAME STREQUAL "Darwin") + target_link_libraries(projectM_shared + PUBLIC + "-framework CoreFoundation" + ) +endif() + +enable_target_linker_flags_if_supported(projectM_shared PRIVATE --no-undefined) + +install(TARGETS projectM_shared + EXPORT libprojectMTargets + LIBRARY DESTINATION "${PROJECTM_LIB_DIR}" + RUNTIME DESTINATION "${PROJECTM_LIB_DIR}" + ARCHIVE DESTINATION "${PROJECTM_LIB_DIR}" + COMPONENT Runtime + ) + +set(EXPORT_SHARED_LIB_TARGET projectM_shared) \ No newline at end of file diff --git a/src/libprojectM/libprojectM_static.cmake b/src/libprojectM/libprojectM_static.cmake new file mode 100644 index 000000000..e297bba48 --- /dev/null +++ b/src/libprojectM/libprojectM_static.cmake @@ -0,0 +1,97 @@ +add_library(projectM_static STATIC + projectM.h + ProjectMCWrapper.cpp + ProjectMCWrapper.hpp + + $ + $ + $ + $ + $ + $ + $<$:$> + ) + +target_compile_options(projectM_static + PUBLIC + -DPROJECTM_STATIC_DEFINE + ) + +set_target_properties(projectM_static PROPERTIES + OUTPUT_NAME projectM + EXPORT_NAME static + FOLDER libprojectM + ) + +target_include_directories(projectM_static + PUBLIC + "$" + "$" + "$" + "$" + "$" + "$" + "$" + "$" + ) + +target_link_libraries(projectM_static + PRIVATE + GLM::GLM + PUBLIC + ${PROJECTM_OPENGL_LIBRARIES} + ) + +if(ENABLE_THREADING) + target_link_libraries(projectM_static + PUBLIC + Threads::Threads + ) +endif() + +if(ENABLE_LLVM) + target_link_libraries(projectM_static + PUBLIC + LLVM::LLVM + ) +endif() + +if(CMAKE_SYSTEM_NAME STREQUAL "Darwin") + target_link_libraries(projectM_static + PUBLIC + "-framework CoreFoundation" + ) +endif() + +install(TARGETS projectM_static + EXPORT libprojectMTargets + LIBRARY DESTINATION "${PROJECTM_LIB_DIR}" + RUNTIME DESTINATION "${PROJECTM_LIB_DIR}" + ARCHIVE DESTINATION "${PROJECTM_LIB_DIR}" + COMPONENT Runtime + ) + +set(EXPORT_SHARED_LIB_TARGET projectM_static) + + +# pkg-config export, only supports static library on UNIX systems. +if(UNIX) + macro(set_pkg_config_path varname path) + if(IS_ABSOLUTE "${path}") + set(${varname} "${path}") + else() + set(${varname} "\${prefix}/${path}") + endif() + endmacro() + + set(PKGCONFIG_PREFIX "${CMAKE_INSTALL_PREFIX}") + set_pkg_config_path(PKGCONFIG_LIB_DIR "${PROJECTM_LIB_DIR}") + set_pkg_config_path(PKGCONFIG_INCLUDE_DIR "${PROJECTM_INCLUDE_DIR}") + set_pkg_config_path(PKGCONFIG_DATADIR_PATH "${PROJECTM_DATADIR_PATH}") + + configure_file(libprojectM.pc.cmake.in "${CMAKE_BINARY_DIR}/libprojectM.pc" @ONLY) + install(FILES "${CMAKE_BINARY_DIR}/libprojectM.pc" + DESTINATION "${PROJECTM_LIB_DIR}/pkgconfig" + COMPONENT Devel + ) +endif() diff --git a/src/libprojectM/projectM.hpp b/src/libprojectM/projectM.hpp index dca5af913..89f2b5fe1 100644 --- a/src/libprojectM/projectM.hpp +++ b/src/libprojectM/projectM.hpp @@ -60,7 +60,6 @@ #pragma comment(lib, "kernel32.lib") #endif /** WIN32 */ -#include "dlldefs.h" #include "event.h" #include "fatal.h" #include @@ -116,7 +115,7 @@ class RandomizerFunctor { const PresetChooser & m_chooser; }; -class DLLEXPORT projectM +class projectM { public: static const int FLAG_NONE = 0;