/[svn]/libgig/trunk/CMakeLists.txt
ViewVC logotype

Contents of /libgig/trunk/CMakeLists.txt

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3476 - (show annotations) (download)
Wed Feb 20 19:12:49 2019 UTC (5 years, 1 month ago) by schoenebeck
File MIME type: text/plain
File size: 4548 byte(s)
* Added MSVC build support
  (anonymous patch from mailing list).
* Introduced CMake build support (yet constrained for building with MSVC)
  (anonymous patch from mailing list).
* Bumped version (4.1.0.svn12).

1 cmake_minimum_required(VERSION 3.0)
2 project(libgig)
3
4 if(NOT MSVC)
5 message(FATAL_ERROR "Please use configure and make, this cmake file is currently only to generate msvc solution files")
6 endif()
7
8
9 #configuration options
10 set(LIBGIG_BUILD_TOOLS ON CACHE BOOL "Build the extra tools")
11 set(LIBGIG_ENABLE_TESTING ON CACHE BOOL "Build the test cases")
12 set(LIBGIG_BUILD_SHARED ${BUILD_SHARED_LIBS} CACHE BOOL "build dynamic libraries")
13
14 set(BUILD_SHARED_LIBS ${LIBGIG_BUILD_SHARED})
15
16 if(LIBGIG_ENABLE_TESTING)
17 enable_testing()
18 endif()
19
20 set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
21 set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
22 set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
23
24 #TODO: this is written for vcpkg cppunit install
25 #if you're adding other platform and package managers it's probably better to put everything in FindCppUnit.cmake
26 #and replace everything here with a simple find_package(CppUnit)
27 if(WIN32)
28 find_path(CPPUNIT_INCLUDE_DIRS cppunit/TestFixture.h)
29 find_library(CPPUNIT_LIBRARIES_DEBUG cppunitd_dll)
30 find_library(CPPUNIT_LIBRARIES_RELEASE cppunit_dll)
31 mark_as_advanced(CPPUNIT_INCLUDE_DIRS CPPUNIT_LIBRARIES_DEBUG CPPUNIT_LIBRARIES_RELEASE)
32
33 if(CPPUNIT_LIBRARIES_DEBUG AND CPPUNIT_LIBRARIES_RELEASE AND CPPUNIT_INCLUDE_DIRS)
34 set(CPPUNIT_FOUND TRUE)
35 set(CPPUNIT_LIBRARIES
36 $<$<CONFIG:Debug>:${CPPUNIT_LIBRARIES_DEBUG}>
37 $<$<CONFIG:RelWithDebInfo>:${CPPUNIT_LIBRARIES_RELEASE}>
38 $<$<CONFIG:Release>:${CPPUNIT_LIBRARIES_RELEASE}>
39 $<$<CONFIG:MinSizeRel>:${CPPUNIT_LIBRARIES_RELEASE}>)
40 else()
41 message("cppunit not found. Testcases will not be built.")
42 endif()
43 endif(WIN32)
44
45 if(LIBGIG_BUILD_TOOLS)
46 find_package(LibSndFile)
47 endif()
48
49 #get version from configure.ac
50 #have to make a slight detour since I cannot get the cmake regex subgroup to work with file
51 file(STRINGS configure.ac VERSION_STRINGS REGEX "^m4_define\\(libgig_release.*\\)$")
52
53 string(REGEX MATCH "libgig_release_major, ([^)]*)\\)" TEMP ${VERSION_STRINGS})
54 set(VERSION_MAJOR ${CMAKE_MATCH_1})
55 string(REGEX MATCH "libgig_release_minor, ([^)]*)\\)" TEMP ${VERSION_STRINGS})
56 set(VERSION_MINOR ${CMAKE_MATCH_1})
57 string(REGEX MATCH "libgig_release_build, ([^)]*)\\)" TEMP ${VERSION_STRINGS})
58 set(VERSION_BUILD ${CMAKE_MATCH_1})
59
60 set(PACKAGE_NAME "libgig")
61
62 set(LIBGIG_HEADERS
63 src/DLS.h
64 src/gig.h
65 src/RIFF.h
66 src/SF.h
67 src/Korg.h
68 src/Serialization.h)
69
70 #libgig core library
71 add_library(libgig
72 src/DLS.cpp
73 src/gig.cpp
74 src/helper.cpp
75 src/Korg.cpp
76 src/RIFF.cpp
77 src/Serialization.cpp
78 src/SF.cpp
79 src/typeinfo.cpp)
80 if(WIN32)
81 target_sources(libgig PRIVATE win32/dllmain.cpp)
82 endif()
83
84 set_target_properties(libgig PROPERTIES PUBLIC_HEADER "${LIBGIG_HEADERS}")
85 target_compile_definitions(libgig PRIVATE PACKAGE="${PACKAGE_NAME}" VERSION="${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_BUILD}")
86 target_include_directories(libgig PUBLIC $<INSTALL_INTERFACE:include>)
87 if(MSVC)
88 target_compile_definitions(libgig PRIVATE NOMINMAX)
89 endif()
90 if(WIN32)
91 target_link_libraries(libgig Rpcrt4.lib dbghelp.lib)
92 endif()
93 if(BUILD_SHARED_LIBS AND MSVC)
94 set_target_properties(libgig PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS TRUE)
95 endif()
96
97 #libakai library
98 add_library(libakai src/Akai.cpp)
99 if(WIN32)
100 target_sources(libakai PRIVATE win32/dllmain.cpp)
101 endif()
102 set_target_properties(libakai PROPERTIES PUBLIC_HEADER src/Akai.h)
103 target_include_directories(libakai PUBLIC $<INSTALL_INTERFACE:include>)
104 target_compile_definitions(libakai PRIVATE PACKAGE="${PACKAGE_NAME}" VERSION="${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_BUILD}")
105
106 if(MSVC)
107 target_compile_definitions(libakai PRIVATE NOMINMAX)
108 endif()
109 if(BUILD_SHARED_LIBS AND MSVC)
110 set_target_properties(libakai PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS TRUE)
111 endif()
112 if(WIN32)
113 target_link_libraries(libakai Rpcrt4.lib )
114 endif()
115
116 if(CPPUNIT_FOUND AND LIBGIG_ENABLE_TESTING)
117 add_subdirectory(src/testcases)
118 endif()
119
120 if(LIBGIG_BUILD_TOOLS)
121 add_subdirectory(src/tools)
122 endif(LIBGIG_BUILD_TOOLS)
123
124 #installation
125 #It also creates a *-config.cmake files so other cmake users can include it more easily into their projects
126 install(TARGETS libgig EXPORT libgig-config
127 LIBRARY DESTINATION lib
128 ARCHIVE DESTINATION lib
129 RUNTIME DESTINATION bin
130 PUBLIC_HEADER DESTINATION include/libgig)
131 install(EXPORT libgig-config NAMESPACE libgig:: DESTINATION share/libgig)
132
133 install(TARGETS libakai EXPORT libakai-config
134 LIBRARY DESTINATION lib
135 ARCHIVE DESTINATION lib
136 RUNTIME DESTINATION bin
137 PUBLIC_HEADER DESTINATION include/libgig)
138 install(EXPORT libakai-config NAMESPACE libgig:: DESTINATION share/libgig)
139

  ViewVC Help
Powered by ViewVC