aboutsummaryrefslogtreecommitdiff
path: root/vcpkg/ports/aubio/CMakeLists.txt
blob: 790a04685ebccf5c054dbdd474d051b3f4f25679 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
cmake_minimum_required(VERSION 3.8)
project(aubio C)

option(WITH_DEPENDENCIES "Adds extra dependencies" ON)
option(BUILD_TOOLS "Build and install tools" ON)

add_definitions(
    -DHAVE_STDLIB_H=1
    -DHAVE_STDIO_H=1
    -DHAVE_MATH_H=1
    -DHAVE_STRING_H=1
    -DHAVE_LIMITS_H=1
    -DHAVE_STDARG_H=1
    -DHAVE_ERRNO_H=1
    -DHAVE_C99_VARARGS_MACROS=1
    -D_CRT_SECURE_NO_WARNINGS=1
)

if(WITH_DEPENDENCIES)
    add_definitions(
        -DHAVE_SNDFILE=1
        -DHAVE_WAVWRITE=1
        -DHAVE_WAVREAD=1
        -DHAVE_LIBAV=1
        -DHAVE_SWRESAMPLE=1
    )
endif()

set(TOOLS_INSTALLDIR "bin" CACHE STRING "Target directory for installed tools")

if(WITH_DEPENDENCIES)
    find_package(FFMPEG COMPONENTS avcodec avutil avformat swresample REQUIRED)
    find_package(BZip2 REQUIRED)
    find_package(LibLZMA REQUIRED)
    find_package(SndFile REQUIRED)

    include_directories(${LIBLZMA_INCLUDE_DIRS})
endif()

include_directories(src)

file(GLOB_RECURSE SOURCES src/*.c)

if(WIN32 AND NOT MINGW)
    set_source_files_properties(src/io/sink_wavwrite.c PROPERTIES COMPILE_FLAGS /FIWinsock2.h)
endif()

add_library(aubio ${SOURCES})
if(WITH_DEPENDENCIES)
    target_link_libraries(aubio PUBLIC
        SndFile::sndfile
        ${FFMPEG_LIBRARIES}
        BZip2::BZip2
        ${LIBLZMA_LIBRARIES}
    )
endif()

if(WIN32)
    target_compile_definitions(aubio PRIVATE -DHAVE_WIN_HACKS=1)
    target_link_libraries(aubio PUBLIC ws2_32)
endif()

if(BUILD_TOOLS AND WITH_DEPENDENCIES)
    set(EXAMPLE_EXECS aubiomfcc aubionotes aubioonset aubiopitch aubioquiet aubiotrack)
    foreach(EXAMPLE_EXEC ${EXAMPLE_EXECS})
        add_executable(${EXAMPLE_EXEC} examples/${EXAMPLE_EXEC}.c examples/utils.c examples/jackio.c)
        target_link_libraries(${EXAMPLE_EXEC} PRIVATE aubio)
        if(WIN32)
            target_compile_definitions(${EXAMPLE_EXEC} PRIVATE -DHAVE_WIN_HACKS=1)
            target_link_libraries(${EXAMPLE_EXEC} PUBLIC ws2_32)
        else()
            target_compile_definitions(${EXAMPLE_EXEC} PRIVATE -DHAVE_UNISTD_H=1)
        endif()
    endforeach()
    # Create and add fake config.h to avoid build errors (file is generated for
    # cross-platform requirements in waf build-system)
    file(WRITE "${CMAKE_BINARY_DIR}/config.h" "")
    include_directories(${CMAKE_BINARY_DIR})

    install(
        TARGETS ${EXAMPLE_EXECS}
        RUNTIME DESTINATION ${TOOLS_INSTALLDIR}
    )
endif()

install(
    TARGETS aubio EXPORT AubioTargets
    INCLUDES DESTINATION include
    RUNTIME DESTINATION bin
    LIBRARY DESTINATION lib
    ARCHIVE DESTINATION lib
)

install(EXPORT AubioTargets NAMESPACE Aubio:: DESTINATION share/aubio)

install(
    DIRECTORY src/
    DESTINATION include/aubio
    FILES_MATCHING
    PATTERN "*.h"
    PATTERN "*_priv.h" EXCLUDE
    PATTERN "config.h" EXCLUDE
)

# Create CMake configuration export file.
file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/AubioConfig.cmake.in "@PACKAGE_INIT@\n")
if(WITH_DEPENDENCIES)
file(APPEND ${CMAKE_CURRENT_BINARY_DIR}/AubioConfig.cmake.in "
    include(CMakeFindDependencyMacro)
    find_dependency(FFMPEG COMPONENTS avcodec avutil avformat swresample REQUIRED)
    find_dependency(BZip2 REQUIRED)
    find_dependency(LibLZMA REQUIRED)
    find_dependency(SndFile REQUIRED)
    ")
endif()
file(APPEND ${CMAKE_CURRENT_BINARY_DIR}/AubioConfig.cmake.in "include(\${CMAKE_CURRENT_LIST_DIR}/AubioTargets.cmake)")

# Install CMake configuration export file.
include(CMakePackageConfigHelpers)
configure_package_config_file(
  ${CMAKE_CURRENT_BINARY_DIR}/AubioConfig.cmake.in
  ${CMAKE_CURRENT_BINARY_DIR}/AubioConfig.cmake
  INSTALL_DESTINATION share/aubio
)
install(
  FILES
    ${CMAKE_BINARY_DIR}/AubioConfig.cmake
  DESTINATION
    share/aubio
)