diff --git a/CMakeLists.txt b/CMakeLists.txt index 6c6aa3e0c..2124df53a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,35 +1,264 @@ -#directory audacity top level -# 3.8 so we can use source_group -# cotire only needs 2.8.12 -cmake_minimum_required (VERSION 3.8) -cmake_policy(SET CMP0043 NEW) # just hide an annoying warning in 3.0.2 +# If you want built-in precompiled header support +# then make sure you have cmake 3.16 or higher. +cmake_minimum_required( VERSION 3.14 ) -# Renaming. Could just use the official name throughout. -set( top_dir ${CMAKE_SOURCE_DIR} ) +# Don't allow in-source builds...no real reason, just +# keeping those source trees nice and tidy. :-) +# (This can be removed if it becomes an issue.) +if( EXISTS "lib-src" ) + message( FATAL_ERROR + "In-source builds not allowed.\n" + "Create a new directory and run cmake from there, i.e.:\n" + " mkdir build\n" + " cd build\n" + " cmake ..\n" + "You will need to delete CMakeCache.txt and CMakeFiles from this directory to clean up." + ) +endif() -# Path for cotire.cmake, and later for our wxwidgets.cmake. +# Ignore COMPILE_DEFINITIONS_ properties +cmake_policy( SET CMP0043 NEW ) + +# ``INTERPROCEDURAL_OPTIMIZATION`` is enforced when enabled. +cmake_policy( SET CMP0069 NEW ) + +# ``FindOpenGL`` prefers GLVND by default when available. +cmake_policy( SET CMP0072 NEW ) + +# Include file check macros honor ``CMAKE_REQUIRED_LIBRARIES``. +cmake_policy( SET CMP0075 NEW ) + +if( WIN32 ) + + # The NuGet packages that the Windows build requires + # (Only here for visibility) + set( GETTEXT_NAME "Gettext.Tools" ) + set( GETTEXT_VERSION "0.20.1.1" ) + set( PYTHON_NAME "python2" ) + set( PYTHON_VERSION "2.7.17" ) + + # Define the SDK version we require + set( CMAKE_SYSTEM_VERSION "10.0.17763.0" CACHE INTERNAL "" ) + +elseif( APPLE ) + + # Define the OSX compatibility parameters + set( CMAKE_OSX_ARCHITECTURES x86_64 CACHE INTERNAL "" ) + set( CMAKE_OSX_DEPLOYMENT_TARGET 10.7 CACHE INTERNAL "" ) + set( CMAKE_OSX_SYSROOT macosx CACHE INTERNAL "" ) + + # A bit of a no-no, but couldn't figure out a better way to make it GLOBAL + set( CMAKE_CXX_FLAGS "-stdlib=libc++ -std=gnu++11" ) + +endif() + +# Add our module path set( CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake-proxies/cmake-modules) -include(cotire) -# These stop the results being mixed in with our source tree. -set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) -set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) -set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) +# This "is a good thing" but greatly increases link time on Linux +#set( CMAKE_INTERPROCEDURAL_OPTIMIZATION ON ) +#set( CMAKE_INTERPROCEDURAL_OPTIMIZATION_DEBUG OFF ) +#set( CMAKE_INTERPROCEDURAL_OPTIMIZATION_Debug OFF ) -# On Windows, WXWIN needs to be set to wxWidgets directory, for wxWidgets to -# be found automatically OR you need to have wxWidgets installed in the -# standard location on drive C: (or D:). -# If you are using wxWidgets 3.1 or later, you will need to update -# cmake's FindwxWidgets.cmake file, since 3.1.1 is not listed. +# Our very own project +project( Audacity ) -# These aren't needed, provided you took heed of the above. -#set( wxWidgets_ROOT_DIR "C:/wxWidgets-3.1.1" ) -#set( wxWidgets_LIB_DIR "C:/wxWidgets-3.1.1/lib/vc_lib" ) -#set( wxWidgets_CONFIGURATION "mswud" ) +# Pull all the modules we'll need +include( CheckCXXCompilerFlag ) +include( CheckIncludeFile ) +include( CheckIncludeFiles ) +include( CheckLibraryExists ) +include( CheckSymbolExists ) +include( CheckTypeSize ) +include( CMakeDetermineASM_NASMCompiler ) +include( CMakePushCheckState ) +include( GNUInstallDirs ) +include( TestBigEndian ) +# Organize subdirectories/targets into folders for the IDEs +set_property( GLOBAL PROPERTY USE_FOLDERS ON ) -#add_subdirectory( "lib-src" ) #All lib building happens via the proxies. +# Make sure Audacity is the startup project on Windows +if( CMAKE_GENERATOR MATCHES "Visual Studio" ) + set_directory_properties( + PROPERTIES + VS_STARTUP_PROJECT "${CMAKE_PROJECT_NAME}" + ) +endif() + +# Where the final product is stored +set( CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}/audacity ) +set( CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}/audacity ) +set( CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin ) + +# Set up RPATH handling +set( CMAKE_SKIP_BUILD_RPATH FALSE ) +set( CMAKE_BUILD_WITH_INSTALL_RPATH FALSE ) +set( CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_FULL_LIBDIR}/audacity" ) +set( CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE ) +set( CMAKE_MACOSX_RPATH FALSE ) + +# the RPATH to be used when installing, but only if it's not a system directory +#list( FIND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES "${CMAKE_INSTALL_FULL_LIBDIR}" isSystemDir) +#IF("${isSystemDir}" STREQUAL "-1") +# SET(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib") +#ENDIF("${isSystemDir}" STREQUAL "-1") + +# Just a couple of convenience variables +set( topdir "${CMAKE_SOURCE_DIR}" ) +set( libsrc "${topdir}/lib-src" ) + +# Add the math library (if found) to the list of required libraries +check_library_exists( m pow "" HAVE_LIBM ) +if( HAVE_LIBM ) + list( APPEND CMAKE_REQUIRED_LIBRARIES -lm ) +endif() + +# Add the dynamic linker library (if found) to the list of required libraries +check_library_exists( dl dlopen "" HAVE_LIBDL ) +if( HAVE_LIBDL ) + list( APPEND CMAKE_REQUIRED_LIBRARIES -ldl ) +endif() + +# Make sure they're used during the link steps +set( CMAKE_LINK_INTERFACE_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} ) + +# Various common checks whose results are used by the various targets +test_big_endian( WORDS_BIGENDIAN ) + +check_include_files( "float.h;stdarg.h;stdlib.h;string.h" STDC_HEADERS ) + +check_include_file( "byteswap.h" HAVE_BYTESWAP_H ) +check_include_file( "assert.h" HAVE_ASSERT_H ) +check_include_file( "errno.h" HAVE_ERRNO_H ) +check_include_file( "fcntl.h" HAVE_FCNTL_H ) +check_include_file( "fenv.h" HAVE_FENV_H ) +check_include_file( "inttypes.h" HAVE_INTTYPES_H ) +check_include_file( "limits.h" HAVE_LIMITS_H ) +check_include_file( "malloc.h" HAVE_MALLOC_H ) +check_include_file( "memory.h" HAVE_MEMORY_H ) +check_include_file( "stdbool.h" HAVE_STDBOOL_H ) +check_include_file( "stdint.h" HAVE_STDINT_H ) +check_include_file( "stdlib.h" HAVE_STDLIB_H ) +check_include_file( "string.h" HAVE_STRING_H ) +check_include_file( "strings.h" HAVE_STRINGS_H ) +check_include_file( "unistd.h" HAVE_UNISTD_H ) +check_include_file( "xmmintrin.h" HAVE_XMMINTRIN_H ) +check_include_file( "sys/param.h" HAVE_SYS_PARAM_H ) +check_include_file( "sys/stat.h" HAVE_SYS_STAT_H ) +check_include_file( "sys/types.h" HAVE_SYS_TYPES_H ) + +check_symbol_exists( fileno "stdio.h" HAVE_FILENO ) +check_symbol_exists( flock "sys/file.h" HAVE_FLOCK ) +check_symbol_exists( fork "unistd.h" HAVE_FORK ) +check_symbol_exists( fsync "unistd.h" HAVE_FSYNC ) +check_symbol_exists( ftruncate "unistd.h" HAVE_FTRUNCATE ) +check_symbol_exists( gettimeofday "sys/time.h" HAVE_GETTIMEOFDAY ) +check_symbol_exists( gmtime "time.h" HAVE_GMTIME ) +check_symbol_exists( gmtime_r "time.h" HAVE_GMTIME_R ) +check_symbol_exists( lrint "math.h" HAVE_LRINT ) +check_symbol_exists( lrintf "math.h" HAVE_LRINTF ) +check_symbol_exists( lround "math.h" HAVE_LROUND ) +check_symbol_exists( lstat "sys/stat.h" HAVE_LSTAT ) +check_symbol_exists( memcpy "string.h" HAVE_MEMCPY ) +check_symbol_exists( pipe "unistd.h" HAVE_PIPE ) +check_symbol_exists( posix_fadvise "fcntl.h" HAVE_POSIX_FADVISE ) +check_symbol_exists( posix_memalign "stdlib.h" HAVE_POSIX_MEMALIGN ) +check_symbol_exists( strchr "string.h" HAVE_STRCHR ) +check_symbol_exists( waitpid "sys/wait.h" HAVE_WAITPID ) + +check_type_size( "int8_t" SIZEOF_INT8 LANGUAGE C ) +check_type_size( "int16_t" SIZEOF_INT16 LANGUAGE C ) +check_type_size( "uint16_t" SIZEOF_UINT16 LANGUAGE C ) +check_type_size( "u_int16_t" SIZEOF_U_INT16 LANGUAGE C ) +check_type_size( "int32_t" SIZEOF_INT32 LANGUAGE C ) +check_type_size( "uint32_t" SIZEOF_UINT32 LANGUAGE C ) +check_type_size( "u_int32_t" SIZEOF_U_INT32 LANGUAGE C ) +check_type_size( "int64_t" SIZEOF_INT64 LANGUAGE C ) +check_type_size( "short" SIZEOF_SHORT LANGUAGE C ) +check_type_size( "unsigned short" SIZEOF_UNSIGNED_SHORT LANGUAGE C ) +check_type_size( "int" SIZEOF_INT LANGUAGE C ) +check_type_size( "unsigned int" SIZEOF_UNSIGNED_INT LANGUAGE C ) +check_type_size( "long" SIZEOF_LONG LANGUAGE C ) +check_type_size( "unsigned long" SIZEOF_UNSIGNED_LONG LANGUAGE C ) +check_type_size( "long long" SIZEOF_LONG_LONG LANGUAGE C ) +check_type_size( "unsigned long long" SIZEOF_UNSIGNED_LONG_LONG LANGUAGE C ) +check_type_size( "float" SIZEOF_FLOAT LANGUAGE C ) +check_type_size( "double" SIZEOF_DOUBLE LANGUAGE C ) +check_type_size( "long double" SIZEOF_LONG_DOUBLE LANGUAGE C ) +check_type_size( "loff_t" SIZEOF_LOFF LANGUAGE C ) +check_type_size( "off_t" SIZEOF_OFF LANGUAGE C ) +check_type_size( "off64_t" SIZEOF_OFF64 LANGUAGE C ) +check_type_size( "size_t" SIZEOF_SIZE LANGUAGE C ) +check_type_size( "wchar_t" SIZEOF_WCHAR LANGUAGE C ) +check_type_size( "void*" SIZEOF_POINTER LANGUAGE C ) + +find_package( PkgConfig ) +find_package( OpenGL ) + +# When called will define several useful directory paths for the +# current context. +macro( def_vars ) + set( _SRCDIR "${CMAKE_CURRENT_SOURCE_DIR}" ) + set( _INTDIR "${CMAKE_CURRENT_BINARY_DIR}" ) + set( _PRVDIR "${CMAKE_CURRENT_BINARY_DIR}/private" ) + set( _PUBDIR "${CMAKE_CURRENT_BINARY_DIR}/public" ) +endmacro() + +# And define the non-context dependent paths +set( _EXEDIR "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${CMAKE_CFG_INTDIR}" ) +# These aren't really context dependent, but... +if( CMAKE_SYSTEM_NAME MATCHES "Darwin" ) + set( _EXEDIR "${_EXEDIR}/Audacity.app/Contents" ) +endif() +set( _MODDIR "${_EXEDIR}/modules" ) +set( _RPATH "\$ORIGIN/../${CMAKE_INSTALL_LIBDIR}/audacity" ) + +# Helper to organize sources into folder for the IDEs +macro( organize_source root prefix sources ) + set( cleaned ) + foreach(source ${sources}) + # Remove generator expressions + string( REGEX REPLACE ".*>:(.*)>" "\\1" source "${source}" ) + + # Remove keywords + string( REGEX REPLACE "^[A-Z]+$" "" source "${source}" ) + + # Add to cleaned + list( APPEND cleaned "${source}" ) + endforeach() + + # Define source groups + if( "${prefix}" STREQUAL "" ) + source_group( TREE "${root}" FILES ${cleaned} ) + else() + source_group( TREE "${root}" PREFIX ${prefix} FILES ${cleaned} ) + endif() +endmacro() + +# Given a directory, recurse to all defined subdirectories and assign +# the given folder name to all of the targets found. +function( set_dir_folder dir folder) + get_property( subdirs DIRECTORY "${dir}" PROPERTY SUBDIRECTORIES ) + foreach( sub ${subdirs} ) + set_dir_folder( "${sub}" "${folder}" ) + endforeach() + + get_property( targets DIRECTORY "${dir}" PROPERTY BUILDSYSTEM_TARGETS ) + foreach( target ${targets} ) + get_target_property( type "${target}" TYPE ) + if( NOT "${type}" STREQUAL "INTERFACE_LIBRARY" ) + set_target_properties( ${target} PROPERTIES FOLDER ${folder} ) + endif() + endforeach() +endfunction() + +# Add our children add_subdirectory( "cmake-proxies" ) +add_subdirectory( "help" ) +add_subdirectory( "locale" ) +add_subdirectory( "nyquist" ) +add_subdirectory( "plug-ins" ) add_subdirectory( "src" ) # Uncomment what follows for symbol values. @@ -38,5 +267,5 @@ get_cmake_property(_variableNames VARIABLES) foreach (_variableName ${_variableNames}) message(STATUS "${_variableName}=${${_variableName}}") endforeach() -]]# +#]] diff --git a/cmake-proxies/CMakeLists.txt b/cmake-proxies/CMakeLists.txt index e62a9aae0..f8dd534c1 100644 --- a/cmake-proxies/CMakeLists.txt +++ b/cmake-proxies/CMakeLists.txt @@ -1,5 +1,3 @@ -#directory cmake-proxies -set( LIB_SRC_DIRECTORY ${top_dir}/lib-src/ ) #These are done in their actual directories, no need for a proxy. @@ -10,34 +8,93 @@ set( LIB_SRC_DIRECTORY ${top_dir}/lib-src/ ) #These are all headers, nothing to build. #add_subdirectory( "ffmpeg" ) -#add_subdirectory( "lame" ) +function( addlib dir name symbol required version ) + message( STATUS "========== Configuring ${name} ==========" ) -# libexpat -set( BUILD_shared OFF CACHE INTERNAL "" FORCE ) -add_subdirectory( "${LIB_SRC_DIRECTORY}expat" "${CMAKE_CURRENT_BINARY_DIR}/expat" EXCLUDE_FROM_ALL ) -set_target_properties(expat PROPERTIES OSX_ARCHITECTURES "") + set( TARGET ${dir} ) + + set( enable enable_${name} ) + if( NOT ${required} ) + option( ${enable} "Enable ${name} library" ON ) + else() + set( ${enable} ON ) + endif() + + set( use_system use_system_${name} ) + if( PkgConfig_FOUND AND version ) + option( ${use_system} "Prefer ${name} system library if available" OFF ) + else() + set( ${use_system} OFF ) + endif() + + if( NOT ${${enable}} ) + return() + endif() + + set( USE_${symbol} ON CACHE INTERNAL USE_${symbol} ) + + if( ${${use_system}} ) + pkg_check_modules( ${name} ${version} ) + if( ${${name}_FOUND} ) + message( STATUS "Using SYSTEM '${name}' package" ) + + add_library( ${TARGET} INTERFACE IMPORTED GLOBAL ) + + target_compile_options( ${TARGET} INTERFACE ${${name}_CFLAGS_OTHER} ) + target_include_directories( ${TARGET} INTERFACE ${${name}_INCLUDE_DIRS} ) + target_link_libraries( ${TARGET} INTERFACE ${${name}_LIBRARIES} ) + + return() + endif() + endif() + + message( STATUS "Using LOCAL '${name}' package" ) + set( TARGET_ROOT ${libsrc}/${dir} ) + add_subdirectory( ${dir} EXCLUDE_FROM_ALL ) + + get_property( targets DIRECTORY "${dir}" PROPERTY BUILDSYSTEM_TARGETS ) + foreach( target ${targets} ) + get_target_property( type "${target}" TYPE ) + if( NOT "${type}" STREQUAL "INTERFACE_LIBRARY" ) + # Add "global" defines + set( DEFINES + NDEBUG + ) + target_compile_definitions( ${TARGET} PRIVATE ${DEFINES} ) + + set_target_properties( ${target} PROPERTIES FOLDER "lib-src" ) + endif() + endforeach() +endfunction() + +# Required libraries +# +# directory option symbol req version +addlib( wxwidgets wxWidgets WXWIDGETS YES "" ) +addlib( FileDialog FileDialog FILEDIALOG YES "" ) +addlib( expat expat EXPAT YES "" ) +addlib( lame lame LAME YES "lame >= 3.100" ) +addlib( lib-widget-extra libextra WIDGET YES "" ) +addlib( libsndfile sndfile SNDFILE YES "sndfile >= 1.0.24" ) +addlib( libsoxr soxr SOXR YES "soxr >= 0.1.1" ) +addlib( portaudio-v19 portaudio PORTAUDIO YES "" ) + +# Optional libraries +# +# directory option symbol req version +addlib( lv2 lv2 LV2 NO "lilv-0 >= 0.24.6 lv2 >= 1.16.0 serd-0 >= 0.30.2 sord-0 >= 0.16.4 sratom-0 >= 0.6.4" ) +addlib( libid3tag id3tag LIBID3TAG NO "id3tag >= 0.15.1b" ) +addlib( libmad mad LIBMAD NO "mad >= 2.3" ) +addlib( libnyquist nyquist NYQUIST NO "" ) +addlib( libvamp vamp VAMP NO "vamp >= 2.5" ) +addlib( libogg ogg LIBOGG NO "ogg >= 1.3.1" ) +addlib( libvorbis vorbis LIBVORBIS NO "vorbis >= 1.3.3" ) +addlib( libflac flac LIBFLAC NO "flac >= 1.3.1" ) +addlib( portmidi midi PORTMIDI NO "portmidi >= 0.1" ) +addlib( portmixer portmixer PORTMIXER NO "" ) +addlib( portsmf portsmf PORTSMF NO "portsmf >= 0.1" ) +addlib( sbsms sbsms SBSMS NO "sbsms >= 2.0.2" ) +addlib( soundtouch soundtouch SOUNDTOUCH NO "soundtouch >= 1.7.1" ) +addlib( twolame twolame LIBTWOLAME NO "twolame >= 0.3.13" ) -add_subdirectory( "FileDialog" ) -#add_subdirectory( "help" ) -add_subdirectory( "libogg" ) -add_subdirectory( "libflac" ) -add_subdirectory( "libid3tag" ) -add_subdirectory( "libmad" ) -add_subdirectory( "libnyquist" ) -add_subdirectory( "libscorealign" ) -add_subdirectory( "libsndfile" ) -add_subdirectory( "libsoxr" ) -add_subdirectory( "libvamp" ) -add_subdirectory( "libvorbis" ) -#add_subdirectory( "locale" ) -add_subdirectory( "lv2" ) -add_subdirectory( "mod-script-pipe" ) -add_subdirectory( "portaudio-v19" ) -add_subdirectory( "portmidi" ) -add_subdirectory( "portmixer" ) -#add_subdirectory( "portburn" ) # not built -add_subdirectory( "portsmf" ) -add_subdirectory( "sbsms" ) -add_subdirectory( "soundtouch" ) -add_subdirectory( "twolame" ) diff --git a/cmake-proxies/FileDialog/CMakeLists.txt b/cmake-proxies/FileDialog/CMakeLists.txt index 19def6ff5..43d017fb6 100644 --- a/cmake-proxies/FileDialog/CMakeLists.txt +++ b/cmake-proxies/FileDialog/CMakeLists.txt @@ -1,49 +1,48 @@ -#directory lib-src/FileDialog -set(TARGET FileDialog) -set(TARGET_SOURCE ${LIB_SRC_DIRECTORY}${TARGET}) -project(${TARGET}) -add_library(${TARGET} STATIC ${LIB_SRC_DIRECTORY}FileDialog/FileDialog.cpp) -target_include_directories(${TARGET} PRIVATE ${TARGET_SOURCE}) -set_target_properties(${TARGET} PROPERTIES - CXX_STANDARD 11 - OSX_ARCHITECTURES "") +add_library( ${TARGET} STATIC ) -find_package(wxWidgets REQUIRED COMPONENTS net core base) -include(${wxWidgets_USE_FILE}) -target_compile_definitions(${TARGET} PRIVATE ${wxWidgets_DEFINITIONS}) -target_compile_options(${TARGET} PRIVATE ${wxWidgets_CXX_FLAGS}) -target_link_libraries(${TARGET} PRIVATE ${wxWidgets_LIBRARIES}) +list( APPEND SOURCES + PRIVATE + ${TARGET_ROOT}/FileDialog.cpp + $<$:${TARGET_ROOT}/win/FileDialogPrivate.cpp> + $<$:${TARGET_ROOT}/mac/FileDialogPrivate.mm> + $<$:${TARGET_ROOT}/gtk/FileDialogPrivate.cpp> +) -if(WIN32) - target_sources(${TARGET} PRIVATE ${LIB_SRC_DIRECTORY}FileDialog/win/FileDialogPrivate.cpp) - target_compile_definitions(${TARGET} PRIVATE __WIN32__) - target_include_directories(${TARGET} PRIVATE ${TARGET_SOURCE}/win) -elseif(APPLE) - target_sources(${TARGET} PRIVATE ${LIB_SRC_DIRECTORY}FileDialog/mac/FileDialogPrivate.mm) - target_compile_options(${TARGET} PRIVATE -Wno-deprecated-declarations) - target_include_directories(${TARGET} PRIVATE ${TARGET_SOURCE}/mac) -else() - target_sources(${TARGET} PRIVATE ${LIB_SRC_DIRECTORY}FileDialog/gtk/FileDialogPrivate.cpp) +list( APPEND INCLUDES + PUBLIC + ${TARGET_ROOT} +) - find_program(wxWidgets_CONFIG_EXECUTABLE - NAMES wx-config wx-config-3.1 wx-config-3.0 wx-config-2.9 wx-config-2.8 - ONLY_CMAKE_FIND_ROOT_PATH) - execute_process( - COMMAND sh "${wxWidgets_CONFIG_EXECUTABLE}" --query-toolkit - OUTPUT_VARIABLE WXGTK - RESULT_VARIABLE RET - ERROR_QUIET) - string(STRIP "${WXGTK}" WXGTK) - if(RET EQUAL 0 AND WXGTK STREQUAL "gtk3") - set(GTK_PACKAGE gtk+-3.0) - else() - set(GTK_PACKAGE gtk+-2.0) - endif() +list( APPEND DEFINES + PRIVATE + $<$:__WIN32__> +) + +list( APPEND OPTIONS + PRIVATE + $<$:/permissive-> + $<$:-Wno-deprecated-declarations> + $<$:-Wno-deprecated-declarations> +) + +list( APPEND FEATURES + PRIVATE + cxx_std_11 +) + +list( APPEND LIBRARIES + PRIVATE + wxwidgets + PUBLIC + $<$:PkgConfig::GTK> +) + +organize_source( "${TARGET_ROOT}" "" "${SOURCES}" ) +target_sources( ${TARGET} PRIVATE ${SOURCES} ) +target_compile_definitions( ${TARGET} PRIVATE ${DEFINES} ) +target_compile_options( ${TARGET} PRIVATE ${OPTIONS} ) +target_compile_features( ${TARGET} PRIVATE ${FEATURES} ) +target_include_directories( ${TARGET} PRIVATE ${INCLUDES} ) +target_link_libraries( ${TARGET} PRIVATE ${LIBRARIES} ) - find_package(PkgConfig REQUIRED) - pkg_check_modules(GTK REQUIRED ${GTK_PACKAGE}) - target_compile_options(${TARGET} PRIVATE -Wno-deprecated-declarations ${GTK_CFLAGS}) - target_include_directories(${TARGET} PRIVATE ${TARGET_SOURCE}/gtk ${GTK_INCLUDE_DIRS}) - target_link_libraries(${TARGET} PUBLIC ${GTK_LIBRARIES}) -endif() diff --git a/cmake-proxies/cmake-modules/MacOSXBundleInfo.plist.in b/cmake-proxies/cmake-modules/MacOSXBundleInfo.plist.in new file mode 100644 index 000000000..451d5b9b2 --- /dev/null +++ b/cmake-proxies/cmake-modules/MacOSXBundleInfo.plist.in @@ -0,0 +1,240 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleDocumentTypes + + + CFBundleTypeExtensions + + aup + + CFBundleTypeIconFile + AudacityProject.icns + CFBundleTypeMIMETypes + + application/x-audacity-project + + CFBundleTypeName + Audacity Project + CFBundleTypeOSTypes + + auDp + + CFBundleTypeRole + Editor + LSIsAppleDefaultForType + + + + CFBundleTypeExtensions + + wav + wave + + CFBundleTypeIconFile + AudacityWAV.icns + CFBundleTypeMIMETypes + + audio/wav + audio/x-wav + + CFBundleTypeName + WAV Audio File + CFBundleTypeOSTypes + + WAV + wav + WAVE + wave + + CFBundleTypeRole + Editor + + + CFBundleTypeExtensions + + aif + aiff + aifc + + CFBundleTypeIconFile + AudacityAIFF.icns + CFBundleTypeMIMETypes + + audio/aiff + audio/x-aiff + + CFBundleTypeName + AIFF Audio File + CFBundleTypeOSTypes + + AIFF + AIFC + + CFBundleTypeRole + Editor + + + CFBundleTypeExtensions + + au + + CFBundleTypeIconFile + AudacityAU.icns + CFBundleTypeMIMETypes + + audio/au + + CFBundleTypeName + AU Audio File + CFBundleTypeOSTypes + + AU + au + snd + + CFBundleTypeRole + Editor + + + CFBundleTypeExtensions + + mp3 + + CFBundleTypeIconFile + AudacityMP3.icns + CFBundleTypeMIMETypes + + audio/mpeg + audio/x-mpeg + audio/mpeg3 + audio/x-mpeg3 + audio/mpg + audio/x-mpg + audio/mp3 + audio/x-mp3 + + CFBundleTypeName + MP3 Audio File + CFBundleTypeOSTypes + + mp3! + MP3! + MPG3 + mpg3 + Mp3 + MP3 + + CFBundleTypeRole + Editor + + + CFBundleTypeExtensions + + ogg + + CFBundleTypeIconFile + AudacityOGG.icns + CFBundleTypeMIMETypes + + audio/ogg + audio/x-ogg + audio/vorbis + audio/x-vorbis + audio/vorbisogg + audio/x-vorbisogg + audio/ogg-vorbis + audio/x-ogg-vorbis + + CFBundleTypeName + Ogg Vorbis Audio File + CFBundleTypeOSTypes + + Ogg + OGG + OggS + OGGS + + CFBundleTypeRole + Editor + + + CFBundleTypeExtensions + + flac + + CFBundleTypeIconFile + AudacityFLAC.icns + CFBundleTypeMIMETypes + + audio/flac + audio/x-flac + + CFBundleTypeName + FLAC Audio File + CFBundleTypeOSTypes + + flac + + CFBundleTypeRole + Editor + + + CFBundleTypeExtensions + + m4a + + CFBundleTypeMIMETypes + + audio/m4a + audio/x-m4a + + CFBundleTypeName + MPEG-4 Audio File + CFBundleTypeOSTypes + + M4A + + CFBundleTypeRole + Editor + + + CFBundleExecutable + Audacity + CFBundleGetInfoString + Audacity version ${AUDACITY_INFO_VERSION} + CFBundleIconFile + Audacity.icns + CFBundleIdentifier + org.audacityteam.audacity + CFBundleInfoDictionaryVersion + 6.0 + CFBundleLongVersionString + Version ${AUDACITY_INFO_VERSION} + CFBundleName + Audacity + CFBundlePackageType + APPL + CFBundleShortVersionString + ${AUDACITY_INFO_VERSION} + CFBundleSignature + auDy + CFBundleVersion + ${AUDACITY_INFO_VERSION} + LSApplicationCategoryType + public.app-category.music + NSHighResolutionCapable + + NSRequiresAquaSystemAppearance + + NSHumanReadableCopyright + Audacity version ${AUDACITY_INFO_VERSION} + NSMicrophoneUsageDescription + Audacity requires access to the microphone only if you intend to record from it. + NSPrincipalClass + NSApplication + + diff --git a/cmake-proxies/cmake-modules/cotire.cmake b/cmake-proxies/cmake-modules/cotire.cmake deleted file mode 100644 index 9a4982d4f..000000000 --- a/cmake-proxies/cmake-modules/cotire.cmake +++ /dev/null @@ -1,4190 +0,0 @@ -# - cotire (compile time reducer) -# -# See the cotire manual for usage hints. -# -#============================================================================= -# Copyright 2012-2018 Sascha Kratky -# -# Permission is hereby granted, free of charge, to any person -# obtaining a copy of this software and associated documentation -# files (the "Software"), to deal in the Software without -# restriction, including without limitation the rights to use, -# copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the -# Software is furnished to do so, subject to the following -# conditions: -# -# The above copyright notice and this permission notice shall be -# included in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -# OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -# OTHER DEALINGS IN THE SOFTWARE. -#============================================================================= - -if(__COTIRE_INCLUDED) - return() -endif() -set(__COTIRE_INCLUDED TRUE) - -# call cmake_minimum_required, but prevent modification of the CMake policy stack in include mode -# cmake_minimum_required also sets the policy version as a side effect, which we have to avoid -if (NOT CMAKE_SCRIPT_MODE_FILE) - cmake_policy(PUSH) -endif() -cmake_minimum_required(VERSION 2.8.12) -if (NOT CMAKE_SCRIPT_MODE_FILE) - cmake_policy(POP) -endif() - -set (COTIRE_CMAKE_MODULE_FILE "${CMAKE_CURRENT_LIST_FILE}") -set (COTIRE_CMAKE_MODULE_VERSION "1.8.0") - -# activate select policies -if (POLICY CMP0025) - # Compiler id for Apple Clang is now AppleClang - cmake_policy(SET CMP0025 NEW) -endif() - -if (POLICY CMP0026) - # disallow use of the LOCATION target property - cmake_policy(SET CMP0026 NEW) -endif() - -if (POLICY CMP0038) - # targets may not link directly to themselves - cmake_policy(SET CMP0038 NEW) -endif() - -if (POLICY CMP0039) - # utility targets may not have link dependencies - cmake_policy(SET CMP0039 NEW) -endif() - -if (POLICY CMP0040) - # target in the TARGET signature of add_custom_command() must exist - cmake_policy(SET CMP0040 NEW) -endif() - -if (POLICY CMP0045) - # error on non-existent target in get_target_property - cmake_policy(SET CMP0045 NEW) -endif() - -if (POLICY CMP0046) - # error on non-existent dependency in add_dependencies - cmake_policy(SET CMP0046 NEW) -endif() - -if (POLICY CMP0049) - # do not expand variables in target source entries - cmake_policy(SET CMP0049 NEW) -endif() - -if (POLICY CMP0050) - # disallow add_custom_command SOURCE signatures - cmake_policy(SET CMP0050 NEW) -endif() - -if (POLICY CMP0051) - # include TARGET_OBJECTS expressions in a target's SOURCES property - cmake_policy(SET CMP0051 NEW) -endif() - -if (POLICY CMP0053) - # simplify variable reference and escape sequence evaluation - cmake_policy(SET CMP0053 NEW) -endif() - -if (POLICY CMP0054) - # only interpret if() arguments as variables or keywords when unquoted - cmake_policy(SET CMP0054 NEW) -endif() - -if (POLICY CMP0055) - # strict checking for break() command - cmake_policy(SET CMP0055 NEW) -endif() - -include(CMakeParseArguments) -include(ProcessorCount) - -function (cotire_get_configuration_types _configsVar) - set (_configs "") - if (CMAKE_CONFIGURATION_TYPES) - list (APPEND _configs ${CMAKE_CONFIGURATION_TYPES}) - endif() - if (CMAKE_BUILD_TYPE) - list (APPEND _configs "${CMAKE_BUILD_TYPE}") - endif() - if (_configs) - list (REMOVE_DUPLICATES _configs) - set (${_configsVar} ${_configs} PARENT_SCOPE) - else() - set (${_configsVar} "None" PARENT_SCOPE) - endif() -endfunction() - -function (cotire_get_source_file_extension _sourceFile _extVar) - # get_filename_component returns extension from first occurrence of . in file name - # this function computes the extension from last occurrence of . in file name - string (FIND "${_sourceFile}" "." _index REVERSE) - if (_index GREATER -1) - math (EXPR _index "${_index} + 1") - string (SUBSTRING "${_sourceFile}" ${_index} -1 _sourceExt) - else() - set (_sourceExt "") - endif() - set (${_extVar} "${_sourceExt}" PARENT_SCOPE) -endfunction() - -macro (cotire_check_is_path_relative_to _path _isRelativeVar) - set (${_isRelativeVar} FALSE) - if (IS_ABSOLUTE "${_path}") - foreach (_dir ${ARGN}) - file (RELATIVE_PATH _relPath "${_dir}" "${_path}") - if (NOT _relPath OR (NOT IS_ABSOLUTE "${_relPath}" AND NOT "${_relPath}" MATCHES "^\\.\\.")) - set (${_isRelativeVar} TRUE) - break() - endif() - endforeach() - endif() -endmacro() - -function (cotire_filter_language_source_files _language _target _sourceFilesVar _excludedSourceFilesVar _cotiredSourceFilesVar) - if (CMAKE_${_language}_SOURCE_FILE_EXTENSIONS) - set (_languageExtensions "${CMAKE_${_language}_SOURCE_FILE_EXTENSIONS}") - else() - set (_languageExtensions "") - endif() - if (CMAKE_${_language}_IGNORE_EXTENSIONS) - set (_ignoreExtensions "${CMAKE_${_language}_IGNORE_EXTENSIONS}") - else() - set (_ignoreExtensions "") - endif() - if (COTIRE_UNITY_SOURCE_EXCLUDE_EXTENSIONS) - set (_excludeExtensions "${COTIRE_UNITY_SOURCE_EXCLUDE_EXTENSIONS}") - else() - set (_excludeExtensions "") - endif() - if (COTIRE_DEBUG AND _languageExtensions) - message (STATUS "${_language} source file extensions: ${_languageExtensions}") - endif() - if (COTIRE_DEBUG AND _ignoreExtensions) - message (STATUS "${_language} ignore extensions: ${_ignoreExtensions}") - endif() - if (COTIRE_DEBUG AND _excludeExtensions) - message (STATUS "${_language} exclude extensions: ${_excludeExtensions}") - endif() - if (CMAKE_VERSION VERSION_LESS "3.1.0") - set (_allSourceFiles ${ARGN}) - else() - # as of CMake 3.1 target sources may contain generator expressions - # since we cannot obtain required property information about source files added - # through generator expressions at configure time, we filter them out - string (GENEX_STRIP "${ARGN}" _allSourceFiles) - endif() - set (_filteredSourceFiles "") - set (_excludedSourceFiles "") - foreach (_sourceFile ${_allSourceFiles}) - get_source_file_property(_sourceIsHeaderOnly "${_sourceFile}" HEADER_FILE_ONLY) - get_source_file_property(_sourceIsExternal "${_sourceFile}" EXTERNAL_OBJECT) - get_source_file_property(_sourceIsSymbolic "${_sourceFile}" SYMBOLIC) - if (NOT _sourceIsHeaderOnly AND NOT _sourceIsExternal AND NOT _sourceIsSymbolic) - cotire_get_source_file_extension("${_sourceFile}" _sourceExt) - if (_sourceExt) - list (FIND _ignoreExtensions "${_sourceExt}" _ignoreIndex) - if (_ignoreIndex LESS 0) - list (FIND _excludeExtensions "${_sourceExt}" _excludeIndex) - if (_excludeIndex GREATER -1) - list (APPEND _excludedSourceFiles "${_sourceFile}") - else() - list (FIND _languageExtensions "${_sourceExt}" _sourceIndex) - if (_sourceIndex GREATER -1) - # consider source file unless it is excluded explicitly - get_source_file_property(_sourceIsExcluded "${_sourceFile}" COTIRE_EXCLUDED) - if (_sourceIsExcluded) - list (APPEND _excludedSourceFiles "${_sourceFile}") - else() - list (APPEND _filteredSourceFiles "${_sourceFile}") - endif() - else() - get_source_file_property(_sourceLanguage "${_sourceFile}" LANGUAGE) - if ("${_sourceLanguage}" STREQUAL "${_language}") - # add to excluded sources, if file is not ignored and has correct language without having the correct extension - list (APPEND _excludedSourceFiles "${_sourceFile}") - endif() - endif() - endif() - endif() - endif() - endif() - endforeach() - # separate filtered source files from already cotired ones - # the COTIRE_TARGET property of a source file may be set while a target is being processed by cotire - set (_sourceFiles "") - set (_cotiredSourceFiles "") - foreach (_sourceFile ${_filteredSourceFiles}) - get_source_file_property(_sourceIsCotired "${_sourceFile}" COTIRE_TARGET) - if (_sourceIsCotired) - list (APPEND _cotiredSourceFiles "${_sourceFile}") - else() - get_source_file_property(_sourceCompileFlags "${_sourceFile}" COMPILE_FLAGS) - if (_sourceCompileFlags) - # add to excluded sources, if file has custom compile flags - list (APPEND _excludedSourceFiles "${_sourceFile}") - else() - get_source_file_property(_sourceCompileOptions "${_sourceFile}" COMPILE_OPTIONS) - if (_sourceCompileOptions) - # add to excluded sources, if file has list of custom compile options - list (APPEND _excludedSourceFiles "${_sourceFile}") - else() - list (APPEND _sourceFiles "${_sourceFile}") - endif() - endif() - endif() - endforeach() - if (COTIRE_DEBUG) - if (_sourceFiles) - message (STATUS "Filtered ${_target} ${_language} sources: ${_sourceFiles}") - endif() - if (_excludedSourceFiles) - message (STATUS "Excluded ${_target} ${_language} sources: ${_excludedSourceFiles}") - endif() - if (_cotiredSourceFiles) - message (STATUS "Cotired ${_target} ${_language} sources: ${_cotiredSourceFiles}") - endif() - endif() - set (${_sourceFilesVar} ${_sourceFiles} PARENT_SCOPE) - set (${_excludedSourceFilesVar} ${_excludedSourceFiles} PARENT_SCOPE) - set (${_cotiredSourceFilesVar} ${_cotiredSourceFiles} PARENT_SCOPE) -endfunction() - -function (cotire_get_objects_with_property_on _filteredObjectsVar _property _type) - set (_filteredObjects "") - foreach (_object ${ARGN}) - get_property(_isSet ${_type} "${_object}" PROPERTY ${_property} SET) - if (_isSet) - get_property(_propertyValue ${_type} "${_object}" PROPERTY ${_property}) - if (_propertyValue) - list (APPEND _filteredObjects "${_object}") - endif() - endif() - endforeach() - set (${_filteredObjectsVar} ${_filteredObjects} PARENT_SCOPE) -endfunction() - -function (cotire_get_objects_with_property_off _filteredObjectsVar _property _type) - set (_filteredObjects "") - foreach (_object ${ARGN}) - get_property(_isSet ${_type} "${_object}" PROPERTY ${_property} SET) - if (_isSet) - get_property(_propertyValue ${_type} "${_object}" PROPERTY ${_property}) - if (NOT _propertyValue) - list (APPEND _filteredObjects "${_object}") - endif() - endif() - endforeach() - set (${_filteredObjectsVar} ${_filteredObjects} PARENT_SCOPE) -endfunction() - -function (cotire_get_source_file_property_values _valuesVar _property) - set (_values "") - foreach (_sourceFile ${ARGN}) - get_source_file_property(_propertyValue "${_sourceFile}" ${_property}) - if (_propertyValue) - list (APPEND _values "${_propertyValue}") - endif() - endforeach() - set (${_valuesVar} ${_values} PARENT_SCOPE) -endfunction() - -function (cotire_resolve_config_properties _configurations _propertiesVar) - set (_properties "") - foreach (_property ${ARGN}) - if ("${_property}" MATCHES "") - foreach (_config ${_configurations}) - string (TOUPPER "${_config}" _upperConfig) - string (REPLACE "" "${_upperConfig}" _configProperty "${_property}") - list (APPEND _properties ${_configProperty}) - endforeach() - else() - list (APPEND _properties ${_property}) - endif() - endforeach() - set (${_propertiesVar} ${_properties} PARENT_SCOPE) -endfunction() - -function (cotire_copy_set_properties _configurations _type _source _target) - cotire_resolve_config_properties("${_configurations}" _properties ${ARGN}) - foreach (_property ${_properties}) - get_property(_isSet ${_type} ${_source} PROPERTY ${_property} SET) - if (_isSet) - get_property(_propertyValue ${_type} ${_source} PROPERTY ${_property}) - set_property(${_type} ${_target} PROPERTY ${_property} "${_propertyValue}") - endif() - endforeach() -endfunction() - -function (cotire_get_target_usage_requirements _target _config _targetRequirementsVar) - set (_targetRequirements "") - get_target_property(_librariesToProcess ${_target} LINK_LIBRARIES) - while (_librariesToProcess) - # remove from head - list (GET _librariesToProcess 0 _library) - list (REMOVE_AT _librariesToProcess 0) - if (_library MATCHES "^\\$<\\$:([A-Za-z0-9_:-]+)>$") - set (_library "${CMAKE_MATCH_1}") - elseif (_config STREQUAL "None" AND _library MATCHES "^\\$<\\$:([A-Za-z0-9_:-]+)>$") - set (_library "${CMAKE_MATCH_1}") - endif() - if (TARGET ${_library}) - list (FIND _targetRequirements ${_library} _index) - if (_index LESS 0) - list (APPEND _targetRequirements ${_library}) - # BFS traversal of transitive libraries - get_target_property(_libraries ${_library} INTERFACE_LINK_LIBRARIES) - if (_libraries) - list (APPEND _librariesToProcess ${_libraries}) - list (REMOVE_DUPLICATES _librariesToProcess) - endif() - endif() - endif() - endwhile() - set (${_targetRequirementsVar} ${_targetRequirements} PARENT_SCOPE) -endfunction() - -function (cotire_filter_compile_flags _language _flagFilter _matchedOptionsVar _unmatchedOptionsVar) - if (WIN32 AND CMAKE_${_language}_COMPILER_ID MATCHES "MSVC|Intel") - set (_flagPrefix "[/-]") - else() - set (_flagPrefix "--?") - endif() - set (_optionFlag "") - set (_matchedOptions "") - set (_unmatchedOptions "") - foreach (_compileFlag ${ARGN}) - if (_compileFlag) - if (_optionFlag AND NOT "${_compileFlag}" MATCHES "^${_flagPrefix}") - # option with separate argument - list (APPEND _matchedOptions "${_compileFlag}") - set (_optionFlag "") - elseif ("${_compileFlag}" MATCHES "^(${_flagPrefix})(${_flagFilter})$") - # remember option - set (_optionFlag "${CMAKE_MATCH_2}") - elseif ("${_compileFlag}" MATCHES "^(${_flagPrefix})(${_flagFilter})(.+)$") - # option with joined argument - list (APPEND _matchedOptions "${CMAKE_MATCH_3}") - set (_optionFlag "") - else() - # flush remembered option - if (_optionFlag) - list (APPEND _matchedOptions "${_optionFlag}") - set (_optionFlag "") - endif() - # add to unfiltered options - list (APPEND _unmatchedOptions "${_compileFlag}") - endif() - endif() - endforeach() - if (_optionFlag) - list (APPEND _matchedOptions "${_optionFlag}") - endif() - if (COTIRE_DEBUG AND _matchedOptions) - message (STATUS "Filter ${_flagFilter} matched: ${_matchedOptions}") - endif() - if (COTIRE_DEBUG AND _unmatchedOptions) - message (STATUS "Filter ${_flagFilter} unmatched: ${_unmatchedOptions}") - endif() - set (${_matchedOptionsVar} ${_matchedOptions} PARENT_SCOPE) - set (${_unmatchedOptionsVar} ${_unmatchedOptions} PARENT_SCOPE) -endfunction() - -function (cotire_is_target_supported _target _isSupportedVar) - if (NOT TARGET "${_target}") - set (${_isSupportedVar} FALSE PARENT_SCOPE) - return() - endif() - get_target_property(_imported ${_target} IMPORTED) - if (_imported) - set (${_isSupportedVar} FALSE PARENT_SCOPE) - return() - endif() - get_target_property(_targetType ${_target} TYPE) - if (NOT _targetType MATCHES "EXECUTABLE|(STATIC|SHARED|MODULE|OBJECT)_LIBRARY") - set (${_isSupportedVar} FALSE PARENT_SCOPE) - return() - endif() - set (${_isSupportedVar} TRUE PARENT_SCOPE) -endfunction() - -function (cotire_get_target_compile_flags _config _language _target _flagsVar) - string (TOUPPER "${_config}" _upperConfig) - # collect options from CMake language variables - set (_compileFlags "") - if (CMAKE_${_language}_FLAGS) - set (_compileFlags "${_compileFlags} ${CMAKE_${_language}_FLAGS}") - endif() - if (CMAKE_${_language}_FLAGS_${_upperConfig}) - set (_compileFlags "${_compileFlags} ${CMAKE_${_language}_FLAGS_${_upperConfig}}") - endif() - if (_target) - # add target compile flags - get_target_property(_targetflags ${_target} COMPILE_FLAGS) - if (_targetflags) - set (_compileFlags "${_compileFlags} ${_targetflags}") - endif() - endif() - if (UNIX) - separate_arguments(_compileFlags UNIX_COMMAND "${_compileFlags}") - elseif(WIN32) - separate_arguments(_compileFlags WINDOWS_COMMAND "${_compileFlags}") - else() - separate_arguments(_compileFlags) - endif() - # target compile options - if (_target) - get_target_property(_targetOptions ${_target} COMPILE_OPTIONS) - if (_targetOptions) - list (APPEND _compileFlags ${_targetOptions}) - endif() - endif() - # interface compile options from linked library targets - if (_target) - set (_linkedTargets "") - cotire_get_target_usage_requirements(${_target} ${_config} _linkedTargets) - foreach (_linkedTarget ${_linkedTargets}) - get_target_property(_targetOptions ${_linkedTarget} INTERFACE_COMPILE_OPTIONS) - if (_targetOptions) - list (APPEND _compileFlags ${_targetOptions}) - endif() - endforeach() - endif() - # handle language standard properties - if (CMAKE_${_language}_STANDARD_DEFAULT) - # used compiler supports language standard levels - if (_target) - get_target_property(_targetLanguageStandard ${_target} ${_language}_STANDARD) - if (_targetLanguageStandard) - set (_type "EXTENSION") - get_property(_isSet TARGET ${_target} PROPERTY ${_language}_EXTENSIONS SET) - if (_isSet) - get_target_property(_targetUseLanguageExtensions ${_target} ${_language}_EXTENSIONS) - if (NOT _targetUseLanguageExtensions) - set (_type "STANDARD") - endif() - endif() - if (CMAKE_${_language}${_targetLanguageStandard}_${_type}_COMPILE_OPTION) - list (APPEND _compileFlags "${CMAKE_${_language}${_targetLanguageStandard}_${_type}_COMPILE_OPTION}") - endif() - endif() - endif() - endif() - # handle the POSITION_INDEPENDENT_CODE target property - if (_target) - get_target_property(_targetPIC ${_target} POSITION_INDEPENDENT_CODE) - if (_targetPIC) - get_target_property(_targetType ${_target} TYPE) - if (_targetType STREQUAL "EXECUTABLE" AND CMAKE_${_language}_COMPILE_OPTIONS_PIE) - list (APPEND _compileFlags "${CMAKE_${_language}_COMPILE_OPTIONS_PIE}") - elseif (CMAKE_${_language}_COMPILE_OPTIONS_PIC) - list (APPEND _compileFlags "${CMAKE_${_language}_COMPILE_OPTIONS_PIC}") - endif() - endif() - endif() - # handle visibility target properties - if (_target) - get_target_property(_targetVisibility ${_target} ${_language}_VISIBILITY_PRESET) - if (_targetVisibility AND CMAKE_${_language}_COMPILE_OPTIONS_VISIBILITY) - list (APPEND _compileFlags "${CMAKE_${_language}_COMPILE_OPTIONS_VISIBILITY}${_targetVisibility}") - endif() - get_target_property(_targetVisibilityInlines ${_target} VISIBILITY_INLINES_HIDDEN) - if (_targetVisibilityInlines AND CMAKE_${_language}_COMPILE_OPTIONS_VISIBILITY_INLINES_HIDDEN) - list (APPEND _compileFlags "${CMAKE_${_language}_COMPILE_OPTIONS_VISIBILITY_INLINES_HIDDEN}") - endif() - endif() - # platform specific flags - if (APPLE) - get_target_property(_architectures ${_target} OSX_ARCHITECTURES_${_upperConfig}) - if (NOT _architectures) - get_target_property(_architectures ${_target} OSX_ARCHITECTURES) - endif() - if (_architectures) - foreach (_arch ${_architectures}) - list (APPEND _compileFlags "-arch" "${_arch}") - endforeach() - endif() - if (CMAKE_OSX_SYSROOT) - if (CMAKE_${_language}_SYSROOT_FLAG) - list (APPEND _compileFlags "${CMAKE_${_language}_SYSROOT_FLAG}" "${CMAKE_OSX_SYSROOT}") - else() - list (APPEND _compileFlags "-isysroot" "${CMAKE_OSX_SYSROOT}") - endif() - endif() - if (CMAKE_OSX_DEPLOYMENT_TARGET) - if (CMAKE_${_language}_OSX_DEPLOYMENT_TARGET_FLAG) - list (APPEND _compileFlags "${CMAKE_${_language}_OSX_DEPLOYMENT_TARGET_FLAG}${CMAKE_OSX_DEPLOYMENT_TARGET}") - else() - list (APPEND _compileFlags "-mmacosx-version-min=${CMAKE_OSX_DEPLOYMENT_TARGET}") - endif() - endif() - endif() - if (COTIRE_DEBUG AND _compileFlags) - message (STATUS "Target ${_target} compile flags: ${_compileFlags}") - endif() - set (${_flagsVar} ${_compileFlags} PARENT_SCOPE) -endfunction() - -function (cotire_get_target_include_directories _config _language _target _includeDirsVar _systemIncludeDirsVar) - set (_includeDirs "") - set (_systemIncludeDirs "") - # default include dirs - if (CMAKE_INCLUDE_CURRENT_DIR) - list (APPEND _includeDirs "${CMAKE_CURRENT_BINARY_DIR}") - list (APPEND _includeDirs "${CMAKE_CURRENT_SOURCE_DIR}") - endif() - set (_targetFlags "") - cotire_get_target_compile_flags("${_config}" "${_language}" "${_target}" _targetFlags) - # parse additional include directories from target compile flags - if (CMAKE_INCLUDE_FLAG_${_language}) - string (STRIP "${CMAKE_INCLUDE_FLAG_${_language}}" _includeFlag) - string (REGEX REPLACE "^[-/]+" "" _includeFlag "${_includeFlag}") - if (_includeFlag) - set (_dirs "") - cotire_filter_compile_flags("${_language}" "${_includeFlag}" _dirs _ignore ${_targetFlags}) - if (_dirs) - list (APPEND _includeDirs ${_dirs}) - endif() - endif() - endif() - # parse additional system include directories from target compile flags - if (CMAKE_INCLUDE_SYSTEM_FLAG_${_language}) - string (STRIP "${CMAKE_INCLUDE_SYSTEM_FLAG_${_language}}" _includeFlag) - string (REGEX REPLACE "^[-/]+" "" _includeFlag "${_includeFlag}") - if (_includeFlag) - set (_dirs "") - cotire_filter_compile_flags("${_language}" "${_includeFlag}" _dirs _ignore ${_targetFlags}) - if (_dirs) - list (APPEND _systemIncludeDirs ${_dirs}) - endif() - endif() - endif() - # target include directories - get_directory_property(_dirs DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" INCLUDE_DIRECTORIES) - if (_target) - get_target_property(_targetDirs ${_target} INCLUDE_DIRECTORIES) - if (_targetDirs) - list (APPEND _dirs ${_targetDirs}) - endif() - get_target_property(_targetDirs ${_target} INTERFACE_SYSTEM_INCLUDE_DIRECTORIES) - if (_targetDirs) - list (APPEND _systemIncludeDirs ${_targetDirs}) - endif() - endif() - # interface include directories from linked library targets - if (_target) - set (_linkedTargets "") - cotire_get_target_usage_requirements(${_target} ${_config} _linkedTargets) - foreach (_linkedTarget ${_linkedTargets}) - get_target_property(_linkedTargetType ${_linkedTarget} TYPE) - if (CMAKE_INCLUDE_CURRENT_DIR_IN_INTERFACE AND NOT CMAKE_VERSION VERSION_LESS "3.4.0" AND - _linkedTargetType MATCHES "(STATIC|SHARED|MODULE|OBJECT)_LIBRARY") - # CMAKE_INCLUDE_CURRENT_DIR_IN_INTERFACE refers to CMAKE_CURRENT_BINARY_DIR and CMAKE_CURRENT_SOURCE_DIR - # at the time, when the target was created. These correspond to the target properties BINARY_DIR and SOURCE_DIR - # which are only available with CMake 3.4 or later. - get_target_property(_targetDirs ${_linkedTarget} BINARY_DIR) - if (_targetDirs) - list (APPEND _dirs ${_targetDirs}) - endif() - get_target_property(_targetDirs ${_linkedTarget} SOURCE_DIR) - if (_targetDirs) - list (APPEND _dirs ${_targetDirs}) - endif() - endif() - get_target_property(_targetDirs ${_linkedTarget} INTERFACE_INCLUDE_DIRECTORIES) - if (_targetDirs) - list (APPEND _dirs ${_targetDirs}) - endif() - get_target_property(_targetDirs ${_linkedTarget} INTERFACE_SYSTEM_INCLUDE_DIRECTORIES) - if (_targetDirs) - list (APPEND _systemIncludeDirs ${_targetDirs}) - endif() - endforeach() - endif() - if (dirs) - list (REMOVE_DUPLICATES _dirs) - endif() - list (LENGTH _includeDirs _projectInsertIndex) - foreach (_dir ${_dirs}) - if (CMAKE_INCLUDE_DIRECTORIES_PROJECT_BEFORE) - cotire_check_is_path_relative_to("${_dir}" _isRelative "${CMAKE_SOURCE_DIR}" "${CMAKE_BINARY_DIR}") - if (_isRelative) - list (LENGTH _includeDirs _len) - if (_len EQUAL _projectInsertIndex) - list (APPEND _includeDirs "${_dir}") - else() - list (INSERT _includeDirs _projectInsertIndex "${_dir}") - endif() - math (EXPR _projectInsertIndex "${_projectInsertIndex} + 1") - else() - list (APPEND _includeDirs "${_dir}") - endif() - else() - list (APPEND _includeDirs "${_dir}") - endif() - endforeach() - list (REMOVE_DUPLICATES _includeDirs) - list (REMOVE_DUPLICATES _systemIncludeDirs) - if (CMAKE_${_language}_IMPLICIT_INCLUDE_DIRECTORIES) - list (REMOVE_ITEM _includeDirs ${CMAKE_${_language}_IMPLICIT_INCLUDE_DIRECTORIES}) - endif() - if (WIN32 AND NOT MINGW) - # convert Windows paths in include directories to CMake paths - if (_includeDirs) - set (_paths "") - foreach (_dir ${_includeDirs}) - file (TO_CMAKE_PATH "${_dir}" _path) - list (APPEND _paths "${_path}") - endforeach() - set (_includeDirs ${_paths}) - endif() - if (_systemIncludeDirs) - set (_paths "") - foreach (_dir ${_systemIncludeDirs}) - file (TO_CMAKE_PATH "${_dir}" _path) - list (APPEND _paths "${_path}") - endforeach() - set (_systemIncludeDirs ${_paths}) - endif() - endif() - if (COTIRE_DEBUG AND _includeDirs) - message (STATUS "Target ${_target} include dirs: ${_includeDirs}") - endif() - set (${_includeDirsVar} ${_includeDirs} PARENT_SCOPE) - if (COTIRE_DEBUG AND _systemIncludeDirs) - message (STATUS "Target ${_target} system include dirs: ${_systemIncludeDirs}") - endif() - set (${_systemIncludeDirsVar} ${_systemIncludeDirs} PARENT_SCOPE) -endfunction() - -function (cotire_get_target_export_symbol _target _exportSymbolVar) - set (_exportSymbol "") - get_target_property(_targetType ${_target} TYPE) - get_target_property(_enableExports ${_target} ENABLE_EXPORTS) - if (_targetType MATCHES "(SHARED|MODULE)_LIBRARY" OR - (_targetType STREQUAL "EXECUTABLE" AND _enableExports)) - get_target_property(_exportSymbol ${_target} DEFINE_SYMBOL) - if (NOT _exportSymbol) - set (_exportSymbol "${_target}_EXPORTS") - endif() - string (MAKE_C_IDENTIFIER "${_exportSymbol}" _exportSymbol) - endif() - set (${_exportSymbolVar} ${_exportSymbol} PARENT_SCOPE) -endfunction() - -function (cotire_get_target_compile_definitions _config _language _target _definitionsVar) - string (TOUPPER "${_config}" _upperConfig) - set (_configDefinitions "") - # CMAKE_INTDIR for multi-configuration build systems - if (NOT "${CMAKE_CFG_INTDIR}" STREQUAL ".") - list (APPEND _configDefinitions "CMAKE_INTDIR=\"${_config}\"") - endif() - # target export define symbol - cotire_get_target_export_symbol("${_target}" _defineSymbol) - if (_defineSymbol) - list (APPEND _configDefinitions "${_defineSymbol}") - endif() - # directory compile definitions - get_directory_property(_definitions DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" COMPILE_DEFINITIONS) - if (_definitions) - list (APPEND _configDefinitions ${_definitions}) - endif() - get_directory_property(_definitions DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" COMPILE_DEFINITIONS_${_upperConfig}) - if (_definitions) - list (APPEND _configDefinitions ${_definitions}) - endif() - # target compile definitions - get_target_property(_definitions ${_target} COMPILE_DEFINITIONS) - if (_definitions) - list (APPEND _configDefinitions ${_definitions}) - endif() - get_target_property(_definitions ${_target} COMPILE_DEFINITIONS_${_upperConfig}) - if (_definitions) - list (APPEND _configDefinitions ${_definitions}) - endif() - # interface compile definitions from linked library targets - set (_linkedTargets "") - cotire_get_target_usage_requirements(${_target} ${_config} _linkedTargets) - foreach (_linkedTarget ${_linkedTargets}) - get_target_property(_definitions ${_linkedTarget} INTERFACE_COMPILE_DEFINITIONS) - if (_definitions) - list (APPEND _configDefinitions ${_definitions}) - endif() - endforeach() - # parse additional compile definitions from target compile flags - # and do not look at directory compile definitions, which we already handled - set (_targetFlags "") - cotire_get_target_compile_flags("${_config}" "${_language}" "${_target}" _targetFlags) - cotire_filter_compile_flags("${_language}" "D" _definitions _ignore ${_targetFlags}) - if (_definitions) - list (APPEND _configDefinitions ${_definitions}) - endif() - list (REMOVE_DUPLICATES _configDefinitions) - if (COTIRE_DEBUG AND _configDefinitions) - message (STATUS "Target ${_target} compile definitions: ${_configDefinitions}") - endif() - set (${_definitionsVar} ${_configDefinitions} PARENT_SCOPE) -endfunction() - -function (cotire_get_target_compiler_flags _config _language _target _compilerFlagsVar) - # parse target compile flags omitting compile definitions and include directives - set (_targetFlags "") - cotire_get_target_compile_flags("${_config}" "${_language}" "${_target}" _targetFlags) - set (_flagFilter "D") - if (CMAKE_INCLUDE_FLAG_${_language}) - string (STRIP "${CMAKE_INCLUDE_FLAG_${_language}}" _includeFlag) - string (REGEX REPLACE "^[-/]+" "" _includeFlag "${_includeFlag}") - if (_includeFlag) - set (_flagFilter "${_flagFilter}|${_includeFlag}") - endif() - endif() - if (CMAKE_INCLUDE_SYSTEM_FLAG_${_language}) - string (STRIP "${CMAKE_INCLUDE_SYSTEM_FLAG_${_language}}" _includeFlag) - string (REGEX REPLACE "^[-/]+" "" _includeFlag "${_includeFlag}") - if (_includeFlag) - set (_flagFilter "${_flagFilter}|${_includeFlag}") - endif() - endif() - set (_compilerFlags "") - cotire_filter_compile_flags("${_language}" "${_flagFilter}" _ignore _compilerFlags ${_targetFlags}) - if (COTIRE_DEBUG AND _compilerFlags) - message (STATUS "Target ${_target} compiler flags: ${_compilerFlags}") - endif() - set (${_compilerFlagsVar} ${_compilerFlags} PARENT_SCOPE) -endfunction() - -function (cotire_add_sys_root_paths _pathsVar) - if (APPLE) - if (CMAKE_OSX_SYSROOT AND CMAKE_${_language}_HAS_ISYSROOT) - foreach (_path IN LISTS ${_pathsVar}) - if (IS_ABSOLUTE "${_path}") - get_filename_component(_path "${CMAKE_OSX_SYSROOT}/${_path}" ABSOLUTE) - if (EXISTS "${_path}") - list (APPEND ${_pathsVar} "${_path}") - endif() - endif() - endforeach() - endif() - endif() - set (${_pathsVar} ${${_pathsVar}} PARENT_SCOPE) -endfunction() - -function (cotire_get_source_extra_properties _sourceFile _pattern _resultVar) - set (_extraProperties ${ARGN}) - set (_result "") - if (_extraProperties) - list (FIND _extraProperties "${_sourceFile}" _index) - if (_index GREATER -1) - math (EXPR _index "${_index} + 1") - list (LENGTH _extraProperties _len) - math (EXPR _len "${_len} - 1") - foreach (_index RANGE ${_index} ${_len}) - list (GET _extraProperties ${_index} _value) - if (_value MATCHES "${_pattern}") - list (APPEND _result "${_value}") - else() - break() - endif() - endforeach() - endif() - endif() - set (${_resultVar} ${_result} PARENT_SCOPE) -endfunction() - -function (cotire_get_source_compile_definitions _config _language _sourceFile _definitionsVar) - set (_compileDefinitions "") - if (NOT CMAKE_SCRIPT_MODE_FILE) - string (TOUPPER "${_config}" _upperConfig) - get_source_file_property(_definitions "${_sourceFile}" COMPILE_DEFINITIONS) - if (_definitions) - list (APPEND _compileDefinitions ${_definitions}) - endif() - get_source_file_property(_definitions "${_sourceFile}" COMPILE_DEFINITIONS_${_upperConfig}) - if (_definitions) - list (APPEND _compileDefinitions ${_definitions}) - endif() - endif() - cotire_get_source_extra_properties("${_sourceFile}" "^[a-zA-Z0-9_]+(=.*)?$" _definitions ${ARGN}) - if (_definitions) - list (APPEND _compileDefinitions ${_definitions}) - endif() - if (COTIRE_DEBUG AND _compileDefinitions) - message (STATUS "Source ${_sourceFile} compile definitions: ${_compileDefinitions}") - endif() - set (${_definitionsVar} ${_compileDefinitions} PARENT_SCOPE) -endfunction() - -function (cotire_get_source_files_compile_definitions _config _language _definitionsVar) - set (_configDefinitions "") - foreach (_sourceFile ${ARGN}) - cotire_get_source_compile_definitions("${_config}" "${_language}" "${_sourceFile}" _sourceDefinitions) - if (_sourceDefinitions) - list (APPEND _configDefinitions "${_sourceFile}" ${_sourceDefinitions} "-") - endif() - endforeach() - set (${_definitionsVar} ${_configDefinitions} PARENT_SCOPE) -endfunction() - -function (cotire_get_source_undefs _sourceFile _property _sourceUndefsVar) - set (_sourceUndefs "") - if (NOT CMAKE_SCRIPT_MODE_FILE) - get_source_file_property(_undefs "${_sourceFile}" ${_property}) - if (_undefs) - list (APPEND _sourceUndefs ${_undefs}) - endif() - endif() - cotire_get_source_extra_properties("${_sourceFile}" "^[a-zA-Z0-9_]+$" _undefs ${ARGN}) - if (_undefs) - list (APPEND _sourceUndefs ${_undefs}) - endif() - if (COTIRE_DEBUG AND _sourceUndefs) - message (STATUS "Source ${_sourceFile} ${_property} undefs: ${_sourceUndefs}") - endif() - set (${_sourceUndefsVar} ${_sourceUndefs} PARENT_SCOPE) -endfunction() - -function (cotire_get_source_files_undefs _property _sourceUndefsVar) - set (_sourceUndefs "") - foreach (_sourceFile ${ARGN}) - cotire_get_source_undefs("${_sourceFile}" ${_property} _undefs) - if (_undefs) - list (APPEND _sourceUndefs "${_sourceFile}" ${_undefs} "-") - endif() - endforeach() - set (${_sourceUndefsVar} ${_sourceUndefs} PARENT_SCOPE) -endfunction() - -macro (cotire_set_cmd_to_prologue _cmdVar) - set (${_cmdVar} "${CMAKE_COMMAND}") - if (COTIRE_DEBUG) - list (APPEND ${_cmdVar} "--warn-uninitialized") - endif() - list (APPEND ${_cmdVar} "-DCOTIRE_BUILD_TYPE:STRING=$") - if (XCODE) - list (APPEND ${_cmdVar} "-DXCODE:BOOL=TRUE") - endif() - if (COTIRE_VERBOSE) - list (APPEND ${_cmdVar} "-DCOTIRE_VERBOSE:BOOL=ON") - elseif("${CMAKE_GENERATOR}" MATCHES "Makefiles") - list (APPEND ${_cmdVar} "-DCOTIRE_VERBOSE:BOOL=$(VERBOSE)") - endif() -endmacro() - -function (cotire_init_compile_cmd _cmdVar _language _compilerLauncher _compilerExe _compilerArg1) - if (NOT _compilerLauncher) - set (_compilerLauncher ${CMAKE_${_language}_COMPILER_LAUNCHER}) - endif() - if (NOT _compilerExe) - set (_compilerExe "${CMAKE_${_language}_COMPILER}") - endif() - if (NOT _compilerArg1) - set (_compilerArg1 ${CMAKE_${_language}_COMPILER_ARG1}) - endif() - if (WIN32) - file (TO_NATIVE_PATH "${_compilerExe}" _compilerExe) - endif() - string (STRIP "${_compilerArg1}" _compilerArg1) - if ("${CMAKE_GENERATOR}" MATCHES "Make|Ninja") - # compiler launcher is only supported for Makefile and Ninja - set (${_cmdVar} ${_compilerLauncher} "${_compilerExe}" ${_compilerArg1} PARENT_SCOPE) - else() - set (${_cmdVar} "${_compilerExe}" ${_compilerArg1} PARENT_SCOPE) - endif() -endfunction() - -macro (cotire_add_definitions_to_cmd _cmdVar _language) - foreach (_definition ${ARGN}) - if (WIN32 AND CMAKE_${_language}_COMPILER_ID MATCHES "MSVC|Intel") - list (APPEND ${_cmdVar} "/D${_definition}") - else() - list (APPEND ${_cmdVar} "-D${_definition}") - endif() - endforeach() -endmacro() - -function (cotire_add_includes_to_cmd _cmdVar _language _includesVar _systemIncludesVar) - set (_includeDirs ${${_includesVar}} ${${_systemIncludesVar}}) - if (_includeDirs) - list (REMOVE_DUPLICATES _includeDirs) - foreach (_include ${_includeDirs}) - if (WIN32 AND CMAKE_${_language}_COMPILER_ID MATCHES "MSVC|Intel") - file (TO_NATIVE_PATH "${_include}" _include) - list (APPEND ${_cmdVar} "${CMAKE_INCLUDE_FLAG_${_language}}${CMAKE_INCLUDE_FLAG_SEP_${_language}}${_include}") - else() - set (_index -1) - if ("${CMAKE_INCLUDE_SYSTEM_FLAG_${_language}}" MATCHES ".+") - list (FIND ${_systemIncludesVar} "${_include}" _index) - endif() - if (_index GREATER -1) - list (APPEND ${_cmdVar} "${CMAKE_INCLUDE_SYSTEM_FLAG_${_language}}${CMAKE_INCLUDE_FLAG_SEP_${_language}}${_include}") - else() - list (APPEND ${_cmdVar} "${CMAKE_INCLUDE_FLAG_${_language}}${CMAKE_INCLUDE_FLAG_SEP_${_language}}${_include}") - endif() - endif() - endforeach() - endif() - set (${_cmdVar} ${${_cmdVar}} PARENT_SCOPE) -endfunction() - -function (cotire_add_frameworks_to_cmd _cmdVar _language _includesVar _systemIncludesVar) - if (APPLE) - set (_frameworkDirs "") - foreach (_include ${${_includesVar}}) - if (IS_ABSOLUTE "${_include}" AND _include MATCHES "\\.framework$") - get_filename_component(_frameworkDir "${_include}" DIRECTORY) - list (APPEND _frameworkDirs "${_frameworkDir}") - endif() - endforeach() - set (_systemFrameworkDirs "") - foreach (_include ${${_systemIncludesVar}}) - if (IS_ABSOLUTE "${_include}" AND _include MATCHES "\\.framework$") - get_filename_component(_frameworkDir "${_include}" DIRECTORY) - list (APPEND _systemFrameworkDirs "${_frameworkDir}") - endif() - endforeach() - if (_systemFrameworkDirs) - list (APPEND _frameworkDirs ${_systemFrameworkDirs}) - endif() - if (_frameworkDirs) - list (REMOVE_DUPLICATES _frameworkDirs) - foreach (_frameworkDir ${_frameworkDirs}) - set (_index -1) - if ("${CMAKE_${_language}_SYSTEM_FRAMEWORK_SEARCH_FLAG}" MATCHES ".+") - list (FIND _systemFrameworkDirs "${_frameworkDir}" _index) - endif() - if (_index GREATER -1) - list (APPEND ${_cmdVar} "${CMAKE_${_language}_SYSTEM_FRAMEWORK_SEARCH_FLAG}${_frameworkDir}") - else() - list (APPEND ${_cmdVar} "${CMAKE_${_language}_FRAMEWORK_SEARCH_FLAG}${_frameworkDir}") - endif() - endforeach() - endif() - endif() - set (${_cmdVar} ${${_cmdVar}} PARENT_SCOPE) -endfunction() - -macro (cotire_add_compile_flags_to_cmd _cmdVar) - foreach (_flag ${ARGN}) - list (APPEND ${_cmdVar} "${_flag}") - endforeach() -endmacro() - -function (cotire_check_file_up_to_date _fileIsUpToDateVar _file) - if (EXISTS "${_file}") - set (_triggerFile "") - foreach (_dependencyFile ${ARGN}) - if (EXISTS "${_dependencyFile}") - # IS_NEWER_THAN returns TRUE if both files have the same timestamp - # thus we do the comparison in both directions to exclude ties - if ("${_dependencyFile}" IS_NEWER_THAN "${_file}" AND - NOT "${_file}" IS_NEWER_THAN "${_dependencyFile}") - set (_triggerFile "${_dependencyFile}") - break() - endif() - endif() - endforeach() - if (_triggerFile) - if (COTIRE_VERBOSE) - get_filename_component(_fileName "${_file}" NAME) - message (STATUS "${_fileName} update triggered by ${_triggerFile} change.") - endif() - set (${_fileIsUpToDateVar} FALSE PARENT_SCOPE) - else() - if (COTIRE_VERBOSE) - get_filename_component(_fileName "${_file}" NAME) - message (STATUS "${_fileName} is up-to-date.") - endif() - set (${_fileIsUpToDateVar} TRUE PARENT_SCOPE) - endif() - else() - if (COTIRE_VERBOSE) - get_filename_component(_fileName "${_file}" NAME) - message (STATUS "${_fileName} does not exist yet.") - endif() - set (${_fileIsUpToDateVar} FALSE PARENT_SCOPE) - endif() -endfunction() - -macro (cotire_find_closest_relative_path _headerFile _includeDirs _relPathVar) - set (${_relPathVar} "") - foreach (_includeDir ${_includeDirs}) - if (IS_DIRECTORY "${_includeDir}") - file (RELATIVE_PATH _relPath "${_includeDir}" "${_headerFile}") - if (NOT IS_ABSOLUTE "${_relPath}" AND NOT "${_relPath}" MATCHES "^\\.\\.") - string (LENGTH "${${_relPathVar}}" _closestLen) - string (LENGTH "${_relPath}" _relLen) - if (_closestLen EQUAL 0 OR _relLen LESS _closestLen) - set (${_relPathVar} "${_relPath}") - endif() - endif() - elseif ("${_includeDir}" STREQUAL "${_headerFile}") - # if path matches exactly, return short non-empty string - set (${_relPathVar} "1") - break() - endif() - endforeach() -endmacro() - -macro (cotire_check_header_file_location _headerFile _insideIncludeDirs _outsideIncludeDirs _headerIsInside) - # check header path against ignored and honored include directories - cotire_find_closest_relative_path("${_headerFile}" "${_insideIncludeDirs}" _insideRelPath) - if (_insideRelPath) - # header is inside, but could be become outside if there is a shorter outside match - cotire_find_closest_relative_path("${_headerFile}" "${_outsideIncludeDirs}" _outsideRelPath) - if (_outsideRelPath) - string (LENGTH "${_insideRelPath}" _insideRelPathLen) - string (LENGTH "${_outsideRelPath}" _outsideRelPathLen) - if (_outsideRelPathLen LESS _insideRelPathLen) - set (${_headerIsInside} FALSE) - else() - set (${_headerIsInside} TRUE) - endif() - else() - set (${_headerIsInside} TRUE) - endif() - else() - # header is outside - set (${_headerIsInside} FALSE) - endif() -endmacro() - -macro (cotire_check_ignore_header_file_path _headerFile _headerIsIgnoredVar) - if (NOT EXISTS "${_headerFile}") - set (${_headerIsIgnoredVar} TRUE) - elseif (IS_DIRECTORY "${_headerFile}") - set (${_headerIsIgnoredVar} TRUE) - elseif ("${_headerFile}" MATCHES "\\.\\.|[_-]fixed" AND "${_headerFile}" MATCHES "\\.h$") - # heuristic: ignore C headers with embedded parent directory references or "-fixed" or "_fixed" in path - # these often stem from using GCC #include_next tricks, which may break the precompiled header compilation - # with the error message "error: no include path in which to search for header.h" - set (${_headerIsIgnoredVar} TRUE) - else() - set (${_headerIsIgnoredVar} FALSE) - endif() -endmacro() - -macro (cotire_check_ignore_header_file_ext _headerFile _ignoreExtensionsVar _headerIsIgnoredVar) - # check header file extension - cotire_get_source_file_extension("${_headerFile}" _headerFileExt) - set (${_headerIsIgnoredVar} FALSE) - if (_headerFileExt) - list (FIND ${_ignoreExtensionsVar} "${_headerFileExt}" _index) - if (_index GREATER -1) - set (${_headerIsIgnoredVar} TRUE) - endif() - endif() -endmacro() - -macro (cotire_parse_line _line _headerFileVar _headerDepthVar) - if (MSVC) - # cl.exe /showIncludes produces different output, depending on the language pack used, e.g.: - # English: "Note: including file: C:\directory\file" - # German: "Hinweis: Einlesen der Datei: C:\directory\file" - # We use a very general regular expression, relying on the presence of the : characters - if (_line MATCHES "( +)([a-zA-Z]:[^:]+)$") - string (LENGTH "${CMAKE_MATCH_1}" ${_headerDepthVar}) - get_filename_component(${_headerFileVar} "${CMAKE_MATCH_2}" ABSOLUTE) - else() - set (${_headerFileVar} "") - set (${_headerDepthVar} 0) - endif() - else() - if (_line MATCHES "^(\\.+) (.*)$") - # GCC like output - string (LENGTH "${CMAKE_MATCH_1}" ${_headerDepthVar}) - if (IS_ABSOLUTE "${CMAKE_MATCH_2}") - set (${_headerFileVar} "${CMAKE_MATCH_2}") - else() - get_filename_component(${_headerFileVar} "${CMAKE_MATCH_2}" REALPATH) - endif() - else() - set (${_headerFileVar} "") - set (${_headerDepthVar} 0) - endif() - endif() -endmacro() - -function (cotire_parse_includes _language _scanOutput _ignoredIncludeDirs _honoredIncludeDirs _ignoredExtensions _selectedIncludesVar _unparsedLinesVar) - if (WIN32) - # prevent CMake macro invocation errors due to backslash characters in Windows paths - string (REPLACE "\\" "/" _scanOutput "${_scanOutput}") - endif() - # canonize slashes - string (REPLACE "//" "/" _scanOutput "${_scanOutput}") - # prevent semicolon from being interpreted as a line separator - string (REPLACE ";" "\\;" _scanOutput "${_scanOutput}") - # then separate lines - string (REGEX REPLACE "\n" ";" _scanOutput "${_scanOutput}") - list (LENGTH _scanOutput _len) - # remove duplicate lines to speed up parsing - list (REMOVE_DUPLICATES _scanOutput) - list (LENGTH _scanOutput _uniqueLen) - if (COTIRE_VERBOSE OR COTIRE_DEBUG) - message (STATUS "Scanning ${_uniqueLen} unique lines of ${_len} for includes") - if (_ignoredExtensions) - message (STATUS "Ignored extensions: ${_ignoredExtensions}") - endif() - if (_ignoredIncludeDirs) - message (STATUS "Ignored paths: ${_ignoredIncludeDirs}") - endif() - if (_honoredIncludeDirs) - message (STATUS "Included paths: ${_honoredIncludeDirs}") - endif() - endif() - set (_sourceFiles ${ARGN}) - set (_selectedIncludes "") - set (_unparsedLines "") - # stack keeps track of inside/outside project status of processed header files - set (_headerIsInsideStack "") - foreach (_line IN LISTS _scanOutput) - if (_line) - cotire_parse_line("${_line}" _headerFile _headerDepth) - if (_headerFile) - cotire_check_header_file_location("${_headerFile}" "${_ignoredIncludeDirs}" "${_honoredIncludeDirs}" _headerIsInside) - if (COTIRE_DEBUG) - message (STATUS "${_headerDepth}: ${_headerFile} ${_headerIsInside}") - endif() - # update stack - list (LENGTH _headerIsInsideStack _stackLen) - if (_headerDepth GREATER _stackLen) - math (EXPR _stackLen "${_stackLen} + 1") - foreach (_index RANGE ${_stackLen} ${_headerDepth}) - list (APPEND _headerIsInsideStack ${_headerIsInside}) - endforeach() - else() - foreach (_index RANGE ${_headerDepth} ${_stackLen}) - list (REMOVE_AT _headerIsInsideStack -1) - endforeach() - list (APPEND _headerIsInsideStack ${_headerIsInside}) - endif() - if (COTIRE_DEBUG) - message (STATUS "${_headerIsInsideStack}") - endif() - # header is a candidate if it is outside project - if (NOT _headerIsInside) - # get parent header file's inside/outside status - if (_headerDepth GREATER 1) - math (EXPR _index "${_headerDepth} - 2") - list (GET _headerIsInsideStack ${_index} _parentHeaderIsInside) - else() - set (_parentHeaderIsInside TRUE) - endif() - # select header file if parent header file is inside project - # (e.g., a project header file that includes a standard header file) - if (_parentHeaderIsInside) - cotire_check_ignore_header_file_path("${_headerFile}" _headerIsIgnored) - if (NOT _headerIsIgnored) - cotire_check_ignore_header_file_ext("${_headerFile}" _ignoredExtensions _headerIsIgnored) - if (NOT _headerIsIgnored) - list (APPEND _selectedIncludes "${_headerFile}") - else() - # fix header's inside status on stack, it is ignored by extension now - list (REMOVE_AT _headerIsInsideStack -1) - list (APPEND _headerIsInsideStack TRUE) - endif() - endif() - if (COTIRE_DEBUG) - message (STATUS "${_headerFile} ${_ignoredExtensions} ${_headerIsIgnored}") - endif() - endif() - endif() - else() - if (MSVC) - # for cl.exe do not keep unparsed lines which solely consist of a source file name - string (FIND "${_sourceFiles}" "${_line}" _index) - if (_index LESS 0) - list (APPEND _unparsedLines "${_line}") - endif() - else() - list (APPEND _unparsedLines "${_line}") - endif() - endif() - endif() - endforeach() - list (REMOVE_DUPLICATES _selectedIncludes) - set (${_selectedIncludesVar} ${_selectedIncludes} PARENT_SCOPE) - set (${_unparsedLinesVar} ${_unparsedLines} PARENT_SCOPE) -endfunction() - -function (cotire_scan_includes _includesVar) - set(_options "") - set(_oneValueArgs COMPILER_ID COMPILER_EXECUTABLE COMPILER_ARG1 COMPILER_VERSION LANGUAGE UNPARSED_LINES SCAN_RESULT) - set(_multiValueArgs COMPILE_DEFINITIONS COMPILE_FLAGS INCLUDE_DIRECTORIES SYSTEM_INCLUDE_DIRECTORIES - IGNORE_PATH INCLUDE_PATH IGNORE_EXTENSIONS INCLUDE_PRIORITY_PATH COMPILER_LAUNCHER) - cmake_parse_arguments(_option "${_options}" "${_oneValueArgs}" "${_multiValueArgs}" ${ARGN}) - set (_sourceFiles ${_option_UNPARSED_ARGUMENTS}) - if (NOT _option_LANGUAGE) - set (_option_LANGUAGE "CXX") - endif() - if (NOT _option_COMPILER_ID) - set (_option_COMPILER_ID "${CMAKE_${_option_LANGUAGE}_ID}") - endif() - if (NOT _option_COMPILER_VERSION) - set (_option_COMPILER_VERSION "${CMAKE_${_option_LANGUAGE}_COMPILER_VERSION}") - endif() - cotire_init_compile_cmd(_cmd "${_option_LANGUAGE}" "${_option_COMPILER_LAUNCHER}" "${_option_COMPILER_EXECUTABLE}" "${_option_COMPILER_ARG1}") - cotire_add_definitions_to_cmd(_cmd "${_option_LANGUAGE}" ${_option_COMPILE_DEFINITIONS}) - cotire_add_compile_flags_to_cmd(_cmd ${_option_COMPILE_FLAGS}) - cotire_add_includes_to_cmd(_cmd "${_option_LANGUAGE}" _option_INCLUDE_DIRECTORIES _option_SYSTEM_INCLUDE_DIRECTORIES) - cotire_add_frameworks_to_cmd(_cmd "${_option_LANGUAGE}" _option_INCLUDE_DIRECTORIES _option_SYSTEM_INCLUDE_DIRECTORIES) - cotire_add_makedep_flags("${_option_LANGUAGE}" "${_option_COMPILER_ID}" "${_option_COMPILER_VERSION}" _cmd) - # only consider existing source files for scanning - set (_existingSourceFiles "") - foreach (_sourceFile ${_sourceFiles}) - if (EXISTS "${_sourceFile}") - list (APPEND _existingSourceFiles "${_sourceFile}") - endif() - endforeach() - if (NOT _existingSourceFiles) - set (${_includesVar} "" PARENT_SCOPE) - return() - endif() - # add source files to be scanned - if (WIN32) - foreach (_sourceFile ${_existingSourceFiles}) - file (TO_NATIVE_PATH "${_sourceFile}" _sourceFileNative) - list (APPEND _cmd "${_sourceFileNative}") - endforeach() - else() - list (APPEND _cmd ${_existingSourceFiles}) - endif() - if (COTIRE_VERBOSE) - message (STATUS "execute_process: ${_cmd}") - endif() - if (MSVC_IDE OR _option_COMPILER_ID MATCHES "MSVC") - # cl.exe messes with the output streams unless the environment variable VS_UNICODE_OUTPUT is cleared - unset (ENV{VS_UNICODE_OUTPUT}) - endif() - execute_process( - COMMAND ${_cmd} - WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" - RESULT_VARIABLE _result - OUTPUT_QUIET - ERROR_VARIABLE _output) - if (_result) - message (STATUS "Result ${_result} scanning includes of ${_existingSourceFiles}.") - endif() - cotire_parse_includes( - "${_option_LANGUAGE}" "${_output}" - "${_option_IGNORE_PATH}" "${_option_INCLUDE_PATH}" - "${_option_IGNORE_EXTENSIONS}" - _includes _unparsedLines - ${_sourceFiles}) - if (_option_INCLUDE_PRIORITY_PATH) - set (_sortedIncludes "") - foreach (_priorityPath ${_option_INCLUDE_PRIORITY_PATH}) - foreach (_include ${_includes}) - string (FIND ${_include} ${_priorityPath} _position) - if (_position GREATER -1) - list (APPEND _sortedIncludes ${_include}) - endif() - endforeach() - endforeach() - if (_sortedIncludes) - list (INSERT _includes 0 ${_sortedIncludes}) - list (REMOVE_DUPLICATES _includes) - endif() - endif() - set (${_includesVar} ${_includes} PARENT_SCOPE) - if (_option_UNPARSED_LINES) - set (${_option_UNPARSED_LINES} ${_unparsedLines} PARENT_SCOPE) - endif() - if (_option_SCAN_RESULT) - set (${_option_SCAN_RESULT} ${_result} PARENT_SCOPE) - endif() -endfunction() - -macro (cotire_append_undefs _contentsVar) - set (_undefs ${ARGN}) - if (_undefs) - list (REMOVE_DUPLICATES _undefs) - foreach (_definition ${_undefs}) - list (APPEND ${_contentsVar} "#undef ${_definition}") - endforeach() - endif() -endmacro() - -macro (cotire_comment_str _language _commentText _commentVar) - if ("${_language}" STREQUAL "CMAKE") - set (${_commentVar} "# ${_commentText}") - else() - set (${_commentVar} "/* ${_commentText} */") - endif() -endmacro() - -function (cotire_write_file _language _file _contents _force) - get_filename_component(_moduleName "${COTIRE_CMAKE_MODULE_FILE}" NAME) - cotire_comment_str("${_language}" "${_moduleName} ${COTIRE_CMAKE_MODULE_VERSION} generated file" _header1) - cotire_comment_str("${_language}" "${_file}" _header2) - set (_contents "${_header1}\n${_header2}\n${_contents}") - if (COTIRE_DEBUG) - message (STATUS "${_contents}") - endif() - if (_force OR NOT EXISTS "${_file}") - file (WRITE "${_file}" "${_contents}") - else() - file (READ "${_file}" _oldContents) - if (NOT "${_oldContents}" STREQUAL "${_contents}") - file (WRITE "${_file}" "${_contents}") - else() - if (COTIRE_DEBUG) - message (STATUS "${_file} unchanged") - endif() - endif() - endif() -endfunction() - -function (cotire_generate_unity_source _unityFile) - set(_options "") - set(_oneValueArgs LANGUAGE) - set(_multiValueArgs - DEPENDS SOURCES_COMPILE_DEFINITIONS - PRE_UNDEFS SOURCES_PRE_UNDEFS POST_UNDEFS SOURCES_POST_UNDEFS PROLOGUE EPILOGUE) - cmake_parse_arguments(_option "${_options}" "${_oneValueArgs}" "${_multiValueArgs}" ${ARGN}) - if (_option_DEPENDS) - cotire_check_file_up_to_date(_unityFileIsUpToDate "${_unityFile}" ${_option_DEPENDS}) - if (_unityFileIsUpToDate) - return() - endif() - endif() - set (_sourceFiles ${_option_UNPARSED_ARGUMENTS}) - if (NOT _option_PRE_UNDEFS) - set (_option_PRE_UNDEFS "") - endif() - if (NOT _option_SOURCES_PRE_UNDEFS) - set (_option_SOURCES_PRE_UNDEFS "") - endif() - if (NOT _option_POST_UNDEFS) - set (_option_POST_UNDEFS "") - endif() - if (NOT _option_SOURCES_POST_UNDEFS) - set (_option_SOURCES_POST_UNDEFS "") - endif() - set (_contents "") - if (_option_PROLOGUE) - list (APPEND _contents ${_option_PROLOGUE}) - endif() - if (_option_LANGUAGE AND _sourceFiles) - if ("${_option_LANGUAGE}" STREQUAL "CXX") - list (APPEND _contents "#ifdef __cplusplus") - elseif ("${_option_LANGUAGE}" STREQUAL "C") - list (APPEND _contents "#ifndef __cplusplus") - endif() - endif() - set (_compileUndefinitions "") - foreach (_sourceFile ${_sourceFiles}) - cotire_get_source_compile_definitions( - "${_option_CONFIGURATION}" "${_option_LANGUAGE}" "${_sourceFile}" _compileDefinitions - ${_option_SOURCES_COMPILE_DEFINITIONS}) - cotire_get_source_undefs("${_sourceFile}" COTIRE_UNITY_SOURCE_PRE_UNDEFS _sourcePreUndefs ${_option_SOURCES_PRE_UNDEFS}) - cotire_get_source_undefs("${_sourceFile}" COTIRE_UNITY_SOURCE_POST_UNDEFS _sourcePostUndefs ${_option_SOURCES_POST_UNDEFS}) - if (_option_PRE_UNDEFS) - list (APPEND _compileUndefinitions ${_option_PRE_UNDEFS}) - endif() - if (_sourcePreUndefs) - list (APPEND _compileUndefinitions ${_sourcePreUndefs}) - endif() - if (_compileUndefinitions) - cotire_append_undefs(_contents ${_compileUndefinitions}) - set (_compileUndefinitions "") - endif() - if (_sourcePostUndefs) - list (APPEND _compileUndefinitions ${_sourcePostUndefs}) - endif() - if (_option_POST_UNDEFS) - list (APPEND _compileUndefinitions ${_option_POST_UNDEFS}) - endif() - foreach (_definition ${_compileDefinitions}) - if (_definition MATCHES "^([a-zA-Z0-9_]+)=(.+)$") - list (APPEND _contents "#define ${CMAKE_MATCH_1} ${CMAKE_MATCH_2}") - list (INSERT _compileUndefinitions 0 "${CMAKE_MATCH_1}") - else() - list (APPEND _contents "#define ${_definition}") - list (INSERT _compileUndefinitions 0 "${_definition}") - endif() - endforeach() - # use absolute path as source file location - get_filename_component(_sourceFileLocation "${_sourceFile}" ABSOLUTE) - if (WIN32) - file (TO_NATIVE_PATH "${_sourceFileLocation}" _sourceFileLocation) - endif() - list (APPEND _contents "#include \"${_sourceFileLocation}\"") - endforeach() - if (_compileUndefinitions) - cotire_append_undefs(_contents ${_compileUndefinitions}) - set (_compileUndefinitions "") - endif() - if (_option_LANGUAGE AND _sourceFiles) - list (APPEND _contents "#endif") - endif() - if (_option_EPILOGUE) - list (APPEND _contents ${_option_EPILOGUE}) - endif() - list (APPEND _contents "") - string (REPLACE ";" "\n" _contents "${_contents}") - if (COTIRE_VERBOSE) - message ("${_contents}") - endif() - cotire_write_file("${_option_LANGUAGE}" "${_unityFile}" "${_contents}" TRUE) -endfunction() - -function (cotire_generate_prefix_header _prefixFile) - set(_options "") - set(_oneValueArgs LANGUAGE COMPILER_EXECUTABLE COMPILER_ARG1 COMPILER_ID COMPILER_VERSION) - set(_multiValueArgs DEPENDS COMPILE_DEFINITIONS COMPILE_FLAGS - INCLUDE_DIRECTORIES SYSTEM_INCLUDE_DIRECTORIES IGNORE_PATH INCLUDE_PATH - IGNORE_EXTENSIONS INCLUDE_PRIORITY_PATH COMPILER_LAUNCHER) - cmake_parse_arguments(_option "${_options}" "${_oneValueArgs}" "${_multiValueArgs}" ${ARGN}) - if (NOT _option_COMPILER_ID) - set (_option_COMPILER_ID "${CMAKE_${_option_LANGUAGE}_ID}") - endif() - if (NOT _option_COMPILER_VERSION) - set (_option_COMPILER_VERSION "${CMAKE_${_option_LANGUAGE}_COMPILER_VERSION}") - endif() - if (_option_DEPENDS) - cotire_check_file_up_to_date(_prefixFileIsUpToDate "${_prefixFile}" ${_option_DEPENDS}) - if (_prefixFileIsUpToDate) - # create empty log file - set (_unparsedLinesFile "${_prefixFile}.log") - file (WRITE "${_unparsedLinesFile}" "") - return() - endif() - endif() - set (_prologue "") - set (_epilogue "") - if (_option_COMPILER_ID MATCHES "Clang") - set (_prologue "#pragma clang system_header") - elseif (_option_COMPILER_ID MATCHES "GNU") - set (_prologue "#pragma GCC system_header") - elseif (_option_COMPILER_ID MATCHES "MSVC") - set (_prologue "#pragma warning(push, 0)") - set (_epilogue "#pragma warning(pop)") - elseif (_option_COMPILER_ID MATCHES "Intel") - # Intel compiler requires hdrstop pragma to stop generating PCH file - set (_epilogue "#pragma hdrstop") - endif() - set (_sourceFiles ${_option_UNPARSED_ARGUMENTS}) - cotire_scan_includes(_selectedHeaders ${_sourceFiles} - LANGUAGE "${_option_LANGUAGE}" - COMPILER_LAUNCHER "${_option_COMPILER_LAUNCHER}" - COMPILER_EXECUTABLE "${_option_COMPILER_EXECUTABLE}" - COMPILER_ARG1 "${_option_COMPILER_ARG1}" - COMPILER_ID "${_option_COMPILER_ID}" - COMPILER_VERSION "${_option_COMPILER_VERSION}" - COMPILE_DEFINITIONS ${_option_COMPILE_DEFINITIONS} - COMPILE_FLAGS ${_option_COMPILE_FLAGS} - INCLUDE_DIRECTORIES ${_option_INCLUDE_DIRECTORIES} - SYSTEM_INCLUDE_DIRECTORIES ${_option_SYSTEM_INCLUDE_DIRECTORIES} - IGNORE_PATH ${_option_IGNORE_PATH} - INCLUDE_PATH ${_option_INCLUDE_PATH} - IGNORE_EXTENSIONS ${_option_IGNORE_EXTENSIONS} - INCLUDE_PRIORITY_PATH ${_option_INCLUDE_PRIORITY_PATH} - UNPARSED_LINES _unparsedLines - SCAN_RESULT _scanResult) - cotire_generate_unity_source("${_prefixFile}" - PROLOGUE ${_prologue} EPILOGUE ${_epilogue} LANGUAGE "${_option_LANGUAGE}" ${_selectedHeaders}) - set (_unparsedLinesFile "${_prefixFile}.log") - if (_unparsedLines) - if (COTIRE_VERBOSE OR _scanResult OR NOT _selectedHeaders) - list (LENGTH _unparsedLines _skippedLineCount) - if (WIN32) - file (TO_NATIVE_PATH "${_unparsedLinesFile}" _unparsedLinesLogPath) - else() - set (_unparsedLinesLogPath "${_unparsedLinesFile}") - endif() - message (STATUS "${_skippedLineCount} line(s) skipped, see ${_unparsedLinesLogPath}") - endif() - string (REPLACE ";" "\n" _unparsedLines "${_unparsedLines}") - endif() - file (WRITE "${_unparsedLinesFile}" "${_unparsedLines}\n") -endfunction() - -function (cotire_add_makedep_flags _language _compilerID _compilerVersion _flagsVar) - set (_flags ${${_flagsVar}}) - if (_compilerID MATCHES "MSVC") - # cl.exe options used - # /nologo suppresses display of sign-on banner - # /TC treat all files named on the command line as C source files - # /TP treat all files named on the command line as C++ source files - # /EP preprocess to stdout without #line directives - # /showIncludes list include files - set (_sourceFileTypeC "/TC") - set (_sourceFileTypeCXX "/TP") - if (_flags) - # append to list - list (APPEND _flags /nologo "${_sourceFileType${_language}}" /EP /showIncludes) - else() - # return as a flag string - set (_flags "${_sourceFileType${_language}} /EP /showIncludes") - endif() - elseif (_compilerID MATCHES "GNU") - # GCC options used - # -H print the name of each header file used - # -E invoke preprocessor - # -fdirectives-only do not expand macros, requires GCC >= 4.3 - if (_flags) - # append to list - list (APPEND _flags -H -E) - if (NOT "${_compilerVersion}" VERSION_LESS "4.3.0") - list (APPEND _flags -fdirectives-only) - endif() - else() - # return as a flag string - set (_flags "-H -E") - if (NOT "${_compilerVersion}" VERSION_LESS "4.3.0") - set (_flags "${_flags} -fdirectives-only") - endif() - endif() - elseif (_compilerID MATCHES "Clang") - if (UNIX) - # Clang options used - # -H print the name of each header file used - # -E invoke preprocessor - # -fno-color-diagnostics do not print diagnostics in color - # -Eonly just run preprocessor, no output - if (_flags) - # append to list - list (APPEND _flags -H -E -fno-color-diagnostics -Xclang -Eonly) - else() - # return as a flag string - set (_flags "-H -E -fno-color-diagnostics -Xclang -Eonly") - endif() - elseif (WIN32) - # Clang-cl.exe options used - # /TC treat all files named on the command line as C source files - # /TP treat all files named on the command line as C++ source files - # /EP preprocess to stdout without #line directives - # -H print the name of each header file used - # -fno-color-diagnostics do not print diagnostics in color - # -Eonly just run preprocessor, no output - set (_sourceFileTypeC "/TC") - set (_sourceFileTypeCXX "/TP") - if (_flags) - # append to list - list (APPEND _flags "${_sourceFileType${_language}}" /EP -fno-color-diagnostics -Xclang -H -Xclang -Eonly) - else() - # return as a flag string - set (_flags "${_sourceFileType${_language}} /EP -fno-color-diagnostics -Xclang -H -Xclang -Eonly") - endif() - endif() - elseif (_compilerID MATCHES "Intel") - if (WIN32) - # Windows Intel options used - # /nologo do not display compiler version information - # /QH display the include file order - # /EP preprocess to stdout, omitting #line directives - # /TC process all source or unrecognized file types as C source files - # /TP process all source or unrecognized file types as C++ source files - set (_sourceFileTypeC "/TC") - set (_sourceFileTypeCXX "/TP") - if (_flags) - # append to list - list (APPEND _flags /nologo "${_sourceFileType${_language}}" /EP /QH) - else() - # return as a flag string - set (_flags "${_sourceFileType${_language}} /EP /QH") - endif() - else() - # Linux / Mac OS X Intel options used - # -H print the name of each header file used - # -EP preprocess to stdout, omitting #line directives - # -Kc++ process all source or unrecognized file types as C++ source files - if (_flags) - # append to list - if ("${_language}" STREQUAL "CXX") - list (APPEND _flags -Kc++) - endif() - list (APPEND _flags -H -EP) - else() - # return as a flag string - if ("${_language}" STREQUAL "CXX") - set (_flags "-Kc++ ") - endif() - set (_flags "${_flags}-H -EP") - endif() - endif() - else() - message (FATAL_ERROR "cotire: unsupported ${_language} compiler ${_compilerID} version ${_compilerVersion}.") - endif() - set (${_flagsVar} ${_flags} PARENT_SCOPE) -endfunction() - -function (cotire_add_pch_compilation_flags _language _compilerID _compilerVersion _prefixFile _pchFile _hostFile _flagsVar) - set (_flags ${${_flagsVar}}) - if (_compilerID MATCHES "MSVC") - file (TO_NATIVE_PATH "${_prefixFile}" _prefixFileNative) - file (TO_NATIVE_PATH "${_pchFile}" _pchFileNative) - file (TO_NATIVE_PATH "${_hostFile}" _hostFileNative) - # cl.exe options used - # /Yc creates a precompiled header file - # /Fp specifies precompiled header binary file name - # /FI forces inclusion of file - # /TC treat all files named on the command line as C source files - # /TP treat all files named on the command line as C++ source files - # /Zs syntax check only - # /Zm precompiled header memory allocation scaling factor - set (_sourceFileTypeC "/TC") - set (_sourceFileTypeCXX "/TP") - if (_flags) - # append to list - list (APPEND _flags /nologo "${_sourceFileType${_language}}" - "/Yc${_prefixFileNative}" "/Fp${_pchFileNative}" "/FI${_prefixFileNative}" /Zs "${_hostFileNative}") - if (COTIRE_PCH_MEMORY_SCALING_FACTOR) - list (APPEND _flags "/Zm${COTIRE_PCH_MEMORY_SCALING_FACTOR}") - endif() - else() - # return as a flag string - set (_flags "/Yc\"${_prefixFileNative}\" /Fp\"${_pchFileNative}\" /FI\"${_prefixFileNative}\"") - if (COTIRE_PCH_MEMORY_SCALING_FACTOR) - set (_flags "${_flags} /Zm${COTIRE_PCH_MEMORY_SCALING_FACTOR}") - endif() - endif() - elseif (_compilerID MATCHES "GNU") - # GCC options used - # -x specify the source language - # -c compile but do not link - # -o place output in file - # note that we cannot use -w to suppress all warnings upon pre-compiling, because turning off a warning may - # alter compile flags as a side effect (e.g., -Wwrite-string implies -fconst-strings) - set (_xLanguage_C "c-header") - set (_xLanguage_CXX "c++-header") - if (_flags) - # append to list - list (APPEND _flags -x "${_xLanguage_${_language}}" -c "${_prefixFile}" -o "${_pchFile}") - else() - # return as a flag string - set (_flags "-x ${_xLanguage_${_language}} -c \"${_prefixFile}\" -o \"${_pchFile}\"") - endif() - elseif (_compilerID MATCHES "Clang") - if (UNIX) - # Clang options used - # -x specify the source language - # -c compile but do not link - # -o place output in file - # -fno-pch-timestamp disable inclusion of timestamp in precompiled headers (clang 4.0.0+) - set (_xLanguage_C "c-header") - set (_xLanguage_CXX "c++-header") - if (_flags) - # append to list - list (APPEND _flags -x "${_xLanguage_${_language}}" -c "${_prefixFile}" -o "${_pchFile}") - if (NOT "${_compilerVersion}" VERSION_LESS "4.0.0") - list (APPEND _flags -Xclang -fno-pch-timestamp) - endif() - else() - # return as a flag string - set (_flags "-x ${_xLanguage_${_language}} -c \"${_prefixFile}\" -o \"${_pchFile}\"") - if (NOT "${_compilerVersion}" VERSION_LESS "4.0.0") - set (_flags "${_flags} -Xclang -fno-pch-timestamp") - endif() - endif() - elseif (WIN32) - # Clang-cl.exe options used - # /Yc creates a precompiled header file - # /Fp specifies precompiled header binary file name - # /FI forces inclusion of file - # /Zs syntax check only - # /TC treat all files named on the command line as C source files - # /TP treat all files named on the command line as C++ source files - set (_sourceFileTypeC "/TC") - set (_sourceFileTypeCXX "/TP") - if (_flags) - # append to list - list (APPEND _flags "${_sourceFileType${_language}}" - "/Yc${_prefixFile}" "/Fp${_pchFile}" "/FI${_prefixFile}" /Zs "${_hostFile}") - else() - # return as a flag string - set (_flags "/Yc\"${_prefixFile}\" /Fp\"${_pchFile}\" /FI\"${_prefixFile}\"") - endif() - endif() - elseif (_compilerID MATCHES "Intel") - if (WIN32) - file (TO_NATIVE_PATH "${_prefixFile}" _prefixFileNative) - file (TO_NATIVE_PATH "${_pchFile}" _pchFileNative) - file (TO_NATIVE_PATH "${_hostFile}" _hostFileNative) - # Windows Intel options used - # /nologo do not display compiler version information - # /Yc create a precompiled header (PCH) file - # /Fp specify a path or file name for precompiled header files - # /FI tells the preprocessor to include a specified file name as the header file - # /TC process all source or unrecognized file types as C source files - # /TP process all source or unrecognized file types as C++ source files - # /Zs syntax check only - # /Wpch-messages enable diagnostics related to pre-compiled headers (requires Intel XE 2013 Update 2) - set (_sourceFileTypeC "/TC") - set (_sourceFileTypeCXX "/TP") - if (_flags) - # append to list - list (APPEND _flags /nologo "${_sourceFileType${_language}}" - "/Yc" "/Fp${_pchFileNative}" "/FI${_prefixFileNative}" /Zs "${_hostFileNative}") - if (NOT "${_compilerVersion}" VERSION_LESS "13.1.0") - list (APPEND _flags "/Wpch-messages") - endif() - else() - # return as a flag string - set (_flags "/Yc /Fp\"${_pchFileNative}\" /FI\"${_prefixFileNative}\"") - if (NOT "${_compilerVersion}" VERSION_LESS "13.1.0") - set (_flags "${_flags} /Wpch-messages") - endif() - endif() - else() - # Linux / Mac OS X Intel options used - # -pch-dir location for precompiled header files - # -pch-create name of the precompiled header (PCH) to create - # -Kc++ process all source or unrecognized file types as C++ source files - # -fsyntax-only check only for correct syntax - # -Wpch-messages enable diagnostics related to pre-compiled headers (requires Intel XE 2013 Update 2) - get_filename_component(_pchDir "${_pchFile}" DIRECTORY) - get_filename_component(_pchName "${_pchFile}" NAME) - set (_xLanguage_C "c-header") - set (_xLanguage_CXX "c++-header") - set (_pchSuppressMessages FALSE) - if ("${CMAKE_${_language}_FLAGS}" MATCHES ".*-Wno-pch-messages.*") - set(_pchSuppressMessages TRUE) - endif() - if (_flags) - # append to list - if ("${_language}" STREQUAL "CXX") - list (APPEND _flags -Kc++) - endif() - list (APPEND _flags -include "${_prefixFile}" -pch-dir "${_pchDir}" -pch-create "${_pchName}" -fsyntax-only "${_hostFile}") - if (NOT "${_compilerVersion}" VERSION_LESS "13.1.0") - if (NOT _pchSuppressMessages) - list (APPEND _flags -Wpch-messages) - endif() - endif() - else() - # return as a flag string - set (_flags "-include \"${_prefixFile}\" -pch-dir \"${_pchDir}\" -pch-create \"${_pchName}\"") - if (NOT "${_compilerVersion}" VERSION_LESS "13.1.0") - if (NOT _pchSuppressMessages) - set (_flags "${_flags} -Wpch-messages") - endif() - endif() - endif() - endif() - else() - message (FATAL_ERROR "cotire: unsupported ${_language} compiler ${_compilerID} version ${_compilerVersion}.") - endif() - set (${_flagsVar} ${_flags} PARENT_SCOPE) -endfunction() - -function (cotire_add_prefix_pch_inclusion_flags _language _compilerID _compilerVersion _prefixFile _pchFile _flagsVar) - set (_flags ${${_flagsVar}}) - if (_compilerID MATCHES "MSVC") - file (TO_NATIVE_PATH "${_prefixFile}" _prefixFileNative) - # cl.exe options used - # /Yu uses a precompiled header file during build - # /Fp specifies precompiled header binary file name - # /FI forces inclusion of file - # /Zm precompiled header memory allocation scaling factor - if (_pchFile) - file (TO_NATIVE_PATH "${_pchFile}" _pchFileNative) - if (_flags) - # append to list - list (APPEND _flags "/Yu${_prefixFileNative}" "/Fp${_pchFileNative}" "/FI${_prefixFileNative}") - if (COTIRE_PCH_MEMORY_SCALING_FACTOR) - list (APPEND _flags "/Zm${COTIRE_PCH_MEMORY_SCALING_FACTOR}") - endif() - else() - # return as a flag string - set (_flags "/Yu\"${_prefixFileNative}\" /Fp\"${_pchFileNative}\" /FI\"${_prefixFileNative}\"") - if (COTIRE_PCH_MEMORY_SCALING_FACTOR) - set (_flags "${_flags} /Zm${COTIRE_PCH_MEMORY_SCALING_FACTOR}") - endif() - endif() - else() - # no precompiled header, force inclusion of prefix header - if (_flags) - # append to list - list (APPEND _flags "/FI${_prefixFileNative}") - else() - # return as a flag string - set (_flags "/FI\"${_prefixFileNative}\"") - endif() - endif() - elseif (_compilerID MATCHES "GNU") - # GCC options used - # -include process include file as the first line of the primary source file - # -Winvalid-pch warns if precompiled header is found but cannot be used - # note: ccache requires the -include flag to be used in order to process precompiled header correctly - if (_flags) - # append to list - list (APPEND _flags -Winvalid-pch -include "${_prefixFile}") - else() - # return as a flag string - set (_flags "-Winvalid-pch -include \"${_prefixFile}\"") - endif() - elseif (_compilerID MATCHES "Clang") - if (UNIX) - # Clang options used - # -include process include file as the first line of the primary source file - # note: ccache requires the -include flag to be used in order to process precompiled header correctly - if (_flags) - # append to list - list (APPEND _flags -include "${_prefixFile}") - else() - # return as a flag string - set (_flags "-include \"${_prefixFile}\"") - endif() - elseif (WIN32) - # Clang-cl.exe options used - # /Yu uses a precompiled header file during build - # /Fp specifies precompiled header binary file name - # /FI forces inclusion of file - if (_pchFile) - if (_flags) - # append to list - list (APPEND _flags "/Yu${_prefixFile}" "/Fp${_pchFile}" "/FI${_prefixFile}") - else() - # return as a flag string - set (_flags "/Yu\"${_prefixFile}\" /Fp\"${_pchFile}\" /FI\"${_prefixFile}\"") - endif() - else() - # no precompiled header, force inclusion of prefix header - if (_flags) - # append to list - list (APPEND _flags "/FI${_prefixFile}") - else() - # return as a flag string - set (_flags "/FI\"${_prefixFile}\"") - endif() - endif() - endif() - elseif (_compilerID MATCHES "Intel") - if (WIN32) - file (TO_NATIVE_PATH "${_prefixFile}" _prefixFileNative) - # Windows Intel options used - # /Yu use a precompiled header (PCH) file - # /Fp specify a path or file name for precompiled header files - # /FI tells the preprocessor to include a specified file name as the header file - # /Wpch-messages enable diagnostics related to pre-compiled headers (requires Intel XE 2013 Update 2) - if (_pchFile) - file (TO_NATIVE_PATH "${_pchFile}" _pchFileNative) - if (_flags) - # append to list - list (APPEND _flags "/Yu" "/Fp${_pchFileNative}" "/FI${_prefixFileNative}") - if (NOT "${_compilerVersion}" VERSION_LESS "13.1.0") - list (APPEND _flags "/Wpch-messages") - endif() - else() - # return as a flag string - set (_flags "/Yu /Fp\"${_pchFileNative}\" /FI\"${_prefixFileNative}\"") - if (NOT "${_compilerVersion}" VERSION_LESS "13.1.0") - set (_flags "${_flags} /Wpch-messages") - endif() - endif() - else() - # no precompiled header, force inclusion of prefix header - if (_flags) - # append to list - list (APPEND _flags "/FI${_prefixFileNative}") - else() - # return as a flag string - set (_flags "/FI\"${_prefixFileNative}\"") - endif() - endif() - else() - # Linux / Mac OS X Intel options used - # -pch-dir location for precompiled header files - # -pch-use name of the precompiled header (PCH) to use - # -include process include file as the first line of the primary source file - # -Wpch-messages enable diagnostics related to pre-compiled headers (requires Intel XE 2013 Update 2) - if (_pchFile) - get_filename_component(_pchDir "${_pchFile}" DIRECTORY) - get_filename_component(_pchName "${_pchFile}" NAME) - set (_pchSuppressMessages FALSE) - if ("${CMAKE_${_language}_FLAGS}" MATCHES ".*-Wno-pch-messages.*") - set(_pchSuppressMessages TRUE) - endif() - if (_flags) - # append to list - list (APPEND _flags -include "${_prefixFile}" -pch-dir "${_pchDir}" -pch-use "${_pchName}") - if (NOT "${_compilerVersion}" VERSION_LESS "13.1.0") - if (NOT _pchSuppressMessages) - list (APPEND _flags -Wpch-messages) - endif() - endif() - else() - # return as a flag string - set (_flags "-include \"${_prefixFile}\" -pch-dir \"${_pchDir}\" -pch-use \"${_pchName}\"") - if (NOT "${_compilerVersion}" VERSION_LESS "13.1.0") - if (NOT _pchSuppressMessages) - set (_flags "${_flags} -Wpch-messages") - endif() - endif() - endif() - else() - # no precompiled header, force inclusion of prefix header - if (_flags) - # append to list - list (APPEND _flags -include "${_prefixFile}") - else() - # return as a flag string - set (_flags "-include \"${_prefixFile}\"") - endif() - endif() - endif() - else() - message (FATAL_ERROR "cotire: unsupported ${_language} compiler ${_compilerID} version ${_compilerVersion}.") - endif() - set (${_flagsVar} ${_flags} PARENT_SCOPE) -endfunction() - -function (cotire_precompile_prefix_header _prefixFile _pchFile _hostFile) - set(_options "") - set(_oneValueArgs COMPILER_EXECUTABLE COMPILER_ARG1 COMPILER_ID COMPILER_VERSION LANGUAGE) - set(_multiValueArgs COMPILE_DEFINITIONS COMPILE_FLAGS INCLUDE_DIRECTORIES SYSTEM_INCLUDE_DIRECTORIES SYS COMPILER_LAUNCHER) - cmake_parse_arguments(_option "${_options}" "${_oneValueArgs}" "${_multiValueArgs}" ${ARGN}) - if (NOT _option_LANGUAGE) - set (_option_LANGUAGE "CXX") - endif() - if (NOT _option_COMPILER_ID) - set (_option_COMPILER_ID "${CMAKE_${_option_LANGUAGE}_ID}") - endif() - if (NOT _option_COMPILER_VERSION) - set (_option_COMPILER_VERSION "${CMAKE_${_option_LANGUAGE}_COMPILER_VERSION}") - endif() - cotire_init_compile_cmd(_cmd "${_option_LANGUAGE}" "${_option_COMPILER_LAUNCHER}" "${_option_COMPILER_EXECUTABLE}" "${_option_COMPILER_ARG1}") - cotire_add_definitions_to_cmd(_cmd "${_option_LANGUAGE}" ${_option_COMPILE_DEFINITIONS}) - cotire_add_compile_flags_to_cmd(_cmd ${_option_COMPILE_FLAGS}) - cotire_add_includes_to_cmd(_cmd "${_option_LANGUAGE}" _option_INCLUDE_DIRECTORIES _option_SYSTEM_INCLUDE_DIRECTORIES) - cotire_add_frameworks_to_cmd(_cmd "${_option_LANGUAGE}" _option_INCLUDE_DIRECTORIES _option_SYSTEM_INCLUDE_DIRECTORIES) - cotire_add_pch_compilation_flags( - "${_option_LANGUAGE}" "${_option_COMPILER_ID}" "${_option_COMPILER_VERSION}" - "${_prefixFile}" "${_pchFile}" "${_hostFile}" _cmd) - if (COTIRE_VERBOSE) - message (STATUS "execute_process: ${_cmd}") - endif() - if (MSVC_IDE OR _option_COMPILER_ID MATCHES "MSVC") - # cl.exe messes with the output streams unless the environment variable VS_UNICODE_OUTPUT is cleared - unset (ENV{VS_UNICODE_OUTPUT}) - elseif (_option_COMPILER_ID MATCHES "Clang" AND _option_COMPILER_VERSION VERSION_LESS "4.0.0") - if (_option_COMPILER_LAUNCHER MATCHES "ccache" OR - _option_COMPILER_EXECUTABLE MATCHES "ccache") - # Newer versions of Clang embed a compilation timestamp into the precompiled header binary, - # which results in "file has been modified since the precompiled header was built" errors if ccache is used. - # We work around the problem by disabling ccache upon pre-compiling the prefix header. - set (ENV{CCACHE_DISABLE} "true") - endif() - endif() - execute_process( - COMMAND ${_cmd} - WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" - RESULT_VARIABLE _result) - if (_result) - message (FATAL_ERROR "cotire: error ${_result} precompiling ${_prefixFile}.") - endif() -endfunction() - -function (cotire_check_precompiled_header_support _language _target _msgVar) - set (_unsupportedCompiler - "Precompiled headers not supported for ${_language} compiler ${CMAKE_${_language}_COMPILER_ID}") - if (CMAKE_${_language}_COMPILER_ID MATCHES "MSVC") - # PCH supported since Visual Studio C++ 6.0 - # and CMake does not support an earlier version - set (${_msgVar} "" PARENT_SCOPE) - elseif (CMAKE_${_language}_COMPILER_ID MATCHES "GNU") - # GCC PCH support requires version >= 3.4 - if ("${CMAKE_${_language}_COMPILER_VERSION}" VERSION_LESS "3.4.0") - set (${_msgVar} "${_unsupportedCompiler} version ${CMAKE_${_language}_COMPILER_VERSION}." PARENT_SCOPE) - else() - set (${_msgVar} "" PARENT_SCOPE) - endif() - elseif (CMAKE_${_language}_COMPILER_ID MATCHES "Clang") - if (UNIX) - # all Unix Clang versions have PCH support - set (${_msgVar} "" PARENT_SCOPE) - elseif (WIN32) - # only clang-cl is supported under Windows - get_filename_component(_compilerName "${CMAKE_${_language}_COMPILER}" NAME_WE) - if (NOT _compilerName MATCHES "cl$") - set (${_msgVar} "${_unsupportedCompiler} version ${CMAKE_${_language}_COMPILER_VERSION}. Use clang-cl instead." PARENT_SCOPE) - endif() - endif() - elseif (CMAKE_${_language}_COMPILER_ID MATCHES "Intel") - # Intel PCH support requires version >= 8.0.0 - if ("${CMAKE_${_language}_COMPILER_VERSION}" VERSION_LESS "8.0.0") - set (${_msgVar} "${_unsupportedCompiler} version ${CMAKE_${_language}_COMPILER_VERSION}." PARENT_SCOPE) - else() - set (${_msgVar} "" PARENT_SCOPE) - endif() - else() - set (${_msgVar} "${_unsupportedCompiler}." PARENT_SCOPE) - endif() - # check if ccache is used as a compiler launcher - get_target_property(_launcher ${_target} ${_language}_COMPILER_LAUNCHER) - get_filename_component(_realCompilerExe "${CMAKE_${_language}_COMPILER}" REALPATH) - if (_realCompilerExe MATCHES "ccache" OR _launcher MATCHES "ccache") - # verify that ccache configuration is compatible with precompiled headers - # always check environment variable CCACHE_SLOPPINESS, because earlier versions of ccache - # do not report the "sloppiness" setting correctly upon printing ccache configuration - if (DEFINED ENV{CCACHE_SLOPPINESS}) - if (NOT "$ENV{CCACHE_SLOPPINESS}" MATCHES "pch_defines" OR - NOT "$ENV{CCACHE_SLOPPINESS}" MATCHES "time_macros") - set (${_msgVar} - "ccache requires the environment variable CCACHE_SLOPPINESS to be set to \"pch_defines,time_macros\"." - PARENT_SCOPE) - endif() - else() - if (_realCompilerExe MATCHES "ccache") - set (_ccacheExe "${_realCompilerExe}") - else() - set (_ccacheExe "${_launcher}") - endif() - execute_process( - COMMAND "${_ccacheExe}" "--print-config" - WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}" - RESULT_VARIABLE _result - OUTPUT_VARIABLE _ccacheConfig OUTPUT_STRIP_TRAILING_WHITESPACE - ERROR_QUIET) - if (_result) - set (${_msgVar} "ccache configuration cannot be determined." PARENT_SCOPE) - elseif (NOT _ccacheConfig MATCHES "sloppiness.*=.*time_macros" OR - NOT _ccacheConfig MATCHES "sloppiness.*=.*pch_defines") - set (${_msgVar} - "ccache requires configuration setting \"sloppiness\" to be set to \"pch_defines,time_macros\"." - PARENT_SCOPE) - endif() - endif() - endif() - if (APPLE) - # PCH compilation not supported by GCC / Clang for multi-architecture builds (e.g., i386, x86_64) - cotire_get_configuration_types(_configs) - foreach (_config ${_configs}) - set (_targetFlags "") - cotire_get_target_compile_flags("${_config}" "${_language}" "${_target}" _targetFlags) - cotire_filter_compile_flags("${_language}" "arch" _architectures _ignore ${_targetFlags}) - list (LENGTH _architectures _numberOfArchitectures) - if (_numberOfArchitectures GREATER 1) - string (REPLACE ";" ", " _architectureStr "${_architectures}") - set (${_msgVar} - "Precompiled headers not supported on Darwin for multi-architecture builds (${_architectureStr})." - PARENT_SCOPE) - break() - endif() - endforeach() - endif() -endfunction() - -macro (cotire_get_intermediate_dir _cotireDir) - # ${CMAKE_CFG_INTDIR} may reference a build-time variable when using a generator which supports configuration types - get_filename_component(${_cotireDir} "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/${COTIRE_INTDIR}" ABSOLUTE) -endmacro() - -macro (cotire_setup_file_extension_variables) - set (_unityFileExt_C ".c") - set (_unityFileExt_CXX ".cxx") - set (_prefixFileExt_C ".h") - set (_prefixFileExt_CXX ".hxx") - set (_prefixSourceFileExt_C ".c") - set (_prefixSourceFileExt_CXX ".cxx") -endmacro() - -function (cotire_make_single_unity_source_file_path _language _target _unityFileVar) - cotire_setup_file_extension_variables() - if (NOT DEFINED _unityFileExt_${_language}) - set (${_unityFileVar} "" PARENT_SCOPE) - return() - endif() - set (_unityFileBaseName "${_target}_${_language}${COTIRE_UNITY_SOURCE_FILENAME_SUFFIX}") - set (_unityFileName "${_unityFileBaseName}${_unityFileExt_${_language}}") - cotire_get_intermediate_dir(_baseDir) - set (_unityFile "${_baseDir}/${_unityFileName}") - set (${_unityFileVar} "${_unityFile}" PARENT_SCOPE) -endfunction() - -function (cotire_make_unity_source_file_paths _language _target _maxIncludes _unityFilesVar) - cotire_setup_file_extension_variables() - if (NOT DEFINED _unityFileExt_${_language}) - set (${_unityFileVar} "" PARENT_SCOPE) - return() - endif() - set (_unityFileBaseName "${_target}_${_language}${COTIRE_UNITY_SOURCE_FILENAME_SUFFIX}") - cotire_get_intermediate_dir(_baseDir) - set (_startIndex 0) - set (_index 0) - set (_unityFiles "") - set (_sourceFiles ${ARGN}) - foreach (_sourceFile ${_sourceFiles}) - get_source_file_property(_startNew "${_sourceFile}" COTIRE_START_NEW_UNITY_SOURCE) - math (EXPR _unityFileCount "${_index} - ${_startIndex}") - if (_startNew OR (_maxIncludes GREATER 0 AND NOT _unityFileCount LESS _maxIncludes)) - if (_index GREATER 0) - # start new unity file segment - math (EXPR _endIndex "${_index} - 1") - set (_unityFileName "${_unityFileBaseName}_${_startIndex}_${_endIndex}${_unityFileExt_${_language}}") - list (APPEND _unityFiles "${_baseDir}/${_unityFileName}") - endif() - set (_startIndex ${_index}) - endif() - math (EXPR _index "${_index} + 1") - endforeach() - list (LENGTH _sourceFiles _numberOfSources) - if (_startIndex EQUAL 0) - # there is only a single unity file - cotire_make_single_unity_source_file_path(${_language} ${_target} _unityFiles) - elseif (_startIndex LESS _numberOfSources) - # end with final unity file segment - math (EXPR _endIndex "${_index} - 1") - set (_unityFileName "${_unityFileBaseName}_${_startIndex}_${_endIndex}${_unityFileExt_${_language}}") - list (APPEND _unityFiles "${_baseDir}/${_unityFileName}") - endif() - set (${_unityFilesVar} ${_unityFiles} PARENT_SCOPE) - if (COTIRE_DEBUG AND _unityFiles) - message (STATUS "unity files: ${_unityFiles}") - endif() -endfunction() - -function (cotire_unity_to_prefix_file_path _language _target _unityFile _prefixFileVar) - cotire_setup_file_extension_variables() - if (NOT DEFINED _unityFileExt_${_language}) - set (${_prefixFileVar} "" PARENT_SCOPE) - return() - endif() - set (_unityFileBaseName "${_target}_${_language}${COTIRE_UNITY_SOURCE_FILENAME_SUFFIX}") - set (_prefixFileBaseName "${_target}_${_language}${COTIRE_PREFIX_HEADER_FILENAME_SUFFIX}") - string (REPLACE "${_unityFileBaseName}" "${_prefixFileBaseName}" _prefixFile "${_unityFile}") - string (REGEX REPLACE "${_unityFileExt_${_language}}$" "${_prefixFileExt_${_language}}" _prefixFile "${_prefixFile}") - set (${_prefixFileVar} "${_prefixFile}" PARENT_SCOPE) -endfunction() - -function (cotire_prefix_header_to_source_file_path _language _prefixHeaderFile _prefixSourceFileVar) - cotire_setup_file_extension_variables() - if (NOT DEFINED _prefixSourceFileExt_${_language}) - set (${_prefixSourceFileVar} "" PARENT_SCOPE) - return() - endif() - string (REGEX REPLACE "${_prefixFileExt_${_language}}$" "${_prefixSourceFileExt_${_language}}" _prefixSourceFile "${_prefixHeaderFile}") - set (${_prefixSourceFileVar} "${_prefixSourceFile}" PARENT_SCOPE) -endfunction() - -function (cotire_make_prefix_file_name _language _target _prefixFileBaseNameVar _prefixFileNameVar) - cotire_setup_file_extension_variables() - if (NOT _language) - set (_prefixFileBaseName "${_target}${COTIRE_PREFIX_HEADER_FILENAME_SUFFIX}") - set (_prefixFileName "${_prefixFileBaseName}${_prefixFileExt_C}") - elseif (DEFINED _prefixFileExt_${_language}) - set (_prefixFileBaseName "${_target}_${_language}${COTIRE_PREFIX_HEADER_FILENAME_SUFFIX}") - set (_prefixFileName "${_prefixFileBaseName}${_prefixFileExt_${_language}}") - else() - set (_prefixFileBaseName "") - set (_prefixFileName "") - endif() - set (${_prefixFileBaseNameVar} "${_prefixFileBaseName}" PARENT_SCOPE) - set (${_prefixFileNameVar} "${_prefixFileName}" PARENT_SCOPE) -endfunction() - -function (cotire_make_prefix_file_path _language _target _prefixFileVar) - cotire_make_prefix_file_name("${_language}" "${_target}" _prefixFileBaseName _prefixFileName) - set (${_prefixFileVar} "" PARENT_SCOPE) - if (_prefixFileName) - if (NOT _language) - set (_language "C") - endif() - if (CMAKE_${_language}_COMPILER_ID MATCHES "GNU|Clang|Intel|MSVC") - cotire_get_intermediate_dir(_baseDir) - set (${_prefixFileVar} "${_baseDir}/${_prefixFileName}" PARENT_SCOPE) - endif() - endif() -endfunction() - -function (cotire_make_pch_file_path _language _target _pchFileVar) - cotire_make_prefix_file_name("${_language}" "${_target}" _prefixFileBaseName _prefixFileName) - set (${_pchFileVar} "" PARENT_SCOPE) - if (_prefixFileBaseName AND _prefixFileName) - cotire_check_precompiled_header_support("${_language}" "${_target}" _msg) - if (NOT _msg) - if (XCODE) - # For Xcode, we completely hand off the compilation of the prefix header to the IDE - return() - endif() - cotire_get_intermediate_dir(_baseDir) - if (CMAKE_${_language}_COMPILER_ID MATCHES "MSVC") - # MSVC uses the extension .pch added to the prefix header base name - set (${_pchFileVar} "${_baseDir}/${_prefixFileBaseName}.pch" PARENT_SCOPE) - elseif (CMAKE_${_language}_COMPILER_ID MATCHES "Clang") - # Clang looks for a precompiled header corresponding to the prefix header with the extension .pch appended - set (${_pchFileVar} "${_baseDir}/${_prefixFileName}.pch" PARENT_SCOPE) - elseif (CMAKE_${_language}_COMPILER_ID MATCHES "GNU") - # GCC looks for a precompiled header corresponding to the prefix header with the extension .gch appended - set (${_pchFileVar} "${_baseDir}/${_prefixFileName}.gch" PARENT_SCOPE) - elseif (CMAKE_${_language}_COMPILER_ID MATCHES "Intel") - # Intel uses the extension .pchi added to the prefix header base name - set (${_pchFileVar} "${_baseDir}/${_prefixFileBaseName}.pchi" PARENT_SCOPE) - endif() - endif() - endif() -endfunction() - -function (cotire_select_unity_source_files _unityFile _sourcesVar) - set (_sourceFiles ${ARGN}) - if (_sourceFiles AND "${_unityFile}" MATCHES "${COTIRE_UNITY_SOURCE_FILENAME_SUFFIX}_([0-9]+)_([0-9]+)") - set (_startIndex ${CMAKE_MATCH_1}) - set (_endIndex ${CMAKE_MATCH_2}) - list (LENGTH _sourceFiles _numberOfSources) - if (NOT _startIndex LESS _numberOfSources) - math (EXPR _startIndex "${_numberOfSources} - 1") - endif() - if (NOT _endIndex LESS _numberOfSources) - math (EXPR _endIndex "${_numberOfSources} - 1") - endif() - set (_files "") - foreach (_index RANGE ${_startIndex} ${_endIndex}) - list (GET _sourceFiles ${_index} _file) - list (APPEND _files "${_file}") - endforeach() - else() - set (_files ${_sourceFiles}) - endif() - set (${_sourcesVar} ${_files} PARENT_SCOPE) -endfunction() - -function (cotire_get_unity_source_dependencies _language _target _dependencySourcesVar) - set (_dependencySources "") - # depend on target's generated source files - get_target_property(_targetSourceFiles ${_target} SOURCES) - cotire_get_objects_with_property_on(_generatedSources GENERATED SOURCE ${_targetSourceFiles}) - if (_generatedSources) - # but omit all generated source files that have the COTIRE_EXCLUDED property set to true - cotire_get_objects_with_property_on(_excludedGeneratedSources COTIRE_EXCLUDED SOURCE ${_generatedSources}) - if (_excludedGeneratedSources) - list (REMOVE_ITEM _generatedSources ${_excludedGeneratedSources}) - endif() - # and omit all generated source files that have the COTIRE_DEPENDENCY property set to false explicitly - cotire_get_objects_with_property_off(_excludedNonDependencySources COTIRE_DEPENDENCY SOURCE ${_generatedSources}) - if (_excludedNonDependencySources) - list (REMOVE_ITEM _generatedSources ${_excludedNonDependencySources}) - endif() - if (_generatedSources) - list (APPEND _dependencySources ${_generatedSources}) - endif() - endif() - if (COTIRE_DEBUG AND _dependencySources) - message (STATUS "${_language} ${_target} unity source dependencies: ${_dependencySources}") - endif() - set (${_dependencySourcesVar} ${_dependencySources} PARENT_SCOPE) -endfunction() - -function (cotire_get_prefix_header_dependencies _language _target _dependencySourcesVar) - set (_dependencySources "") - # depend on target source files marked with custom COTIRE_DEPENDENCY property - get_target_property(_targetSourceFiles ${_target} SOURCES) - cotire_get_objects_with_property_on(_dependencySources COTIRE_DEPENDENCY SOURCE ${_targetSourceFiles}) - if (COTIRE_DEBUG AND _dependencySources) - message (STATUS "${_language} ${_target} prefix header dependencies: ${_dependencySources}") - endif() - set (${_dependencySourcesVar} ${_dependencySources} PARENT_SCOPE) -endfunction() - -function (cotire_generate_target_script _language _configurations _target _targetScriptVar _targetConfigScriptVar) - set (_targetSources ${ARGN}) - cotire_get_prefix_header_dependencies(${_language} ${_target} COTIRE_TARGET_PREFIX_DEPENDS ${_targetSources}) - cotire_get_unity_source_dependencies(${_language} ${_target} COTIRE_TARGET_UNITY_DEPENDS ${_targetSources}) - # set up variables to be configured - set (COTIRE_TARGET_LANGUAGE "${_language}") - get_target_property(COTIRE_TARGET_IGNORE_PATH ${_target} COTIRE_PREFIX_HEADER_IGNORE_PATH) - cotire_add_sys_root_paths(COTIRE_TARGET_IGNORE_PATH) - get_target_property(COTIRE_TARGET_INCLUDE_PATH ${_target} COTIRE_PREFIX_HEADER_INCLUDE_PATH) - cotire_add_sys_root_paths(COTIRE_TARGET_INCLUDE_PATH) - get_target_property(COTIRE_TARGET_PRE_UNDEFS ${_target} COTIRE_UNITY_SOURCE_PRE_UNDEFS) - get_target_property(COTIRE_TARGET_POST_UNDEFS ${_target} COTIRE_UNITY_SOURCE_POST_UNDEFS) - get_target_property(COTIRE_TARGET_MAXIMUM_NUMBER_OF_INCLUDES ${_target} COTIRE_UNITY_SOURCE_MAXIMUM_NUMBER_OF_INCLUDES) - get_target_property(COTIRE_TARGET_INCLUDE_PRIORITY_PATH ${_target} COTIRE_PREFIX_HEADER_INCLUDE_PRIORITY_PATH) - cotire_get_source_files_undefs(COTIRE_UNITY_SOURCE_PRE_UNDEFS COTIRE_TARGET_SOURCES_PRE_UNDEFS ${_targetSources}) - cotire_get_source_files_undefs(COTIRE_UNITY_SOURCE_POST_UNDEFS COTIRE_TARGET_SOURCES_POST_UNDEFS ${_targetSources}) - set (COTIRE_TARGET_CONFIGURATION_TYPES "${_configurations}") - foreach (_config ${_configurations}) - string (TOUPPER "${_config}" _upperConfig) - cotire_get_target_include_directories( - "${_config}" "${_language}" "${_target}" COTIRE_TARGET_INCLUDE_DIRECTORIES_${_upperConfig} COTIRE_TARGET_SYSTEM_INCLUDE_DIRECTORIES_${_upperConfig}) - cotire_get_target_compile_definitions( - "${_config}" "${_language}" "${_target}" COTIRE_TARGET_COMPILE_DEFINITIONS_${_upperConfig}) - cotire_get_target_compiler_flags( - "${_config}" "${_language}" "${_target}" COTIRE_TARGET_COMPILE_FLAGS_${_upperConfig}) - cotire_get_source_files_compile_definitions( - "${_config}" "${_language}" COTIRE_TARGET_SOURCES_COMPILE_DEFINITIONS_${_upperConfig} ${_targetSources}) - endforeach() - get_target_property(COTIRE_TARGET_${_language}_COMPILER_LAUNCHER ${_target} ${_language}_COMPILER_LAUNCHER) - # set up COTIRE_TARGET_SOURCES - set (COTIRE_TARGET_SOURCES "") - foreach (_sourceFile ${_targetSources}) - get_source_file_property(_generated "${_sourceFile}" GENERATED) - if (_generated) - # use absolute paths for generated files only, retrieving the LOCATION property is an expensive operation - get_source_file_property(_sourceLocation "${_sourceFile}" LOCATION) - list (APPEND COTIRE_TARGET_SOURCES "${_sourceLocation}") - else() - list (APPEND COTIRE_TARGET_SOURCES "${_sourceFile}") - endif() - endforeach() - # copy variable definitions to cotire target script - get_cmake_property(_vars VARIABLES) - string (REGEX MATCHALL "COTIRE_[A-Za-z0-9_]+" _matchVars "${_vars}") - # omit COTIRE_*_INIT variables - string (REGEX MATCHALL "COTIRE_[A-Za-z0-9_]+_INIT" _initVars "${_matchVars}") - if (_initVars) - list (REMOVE_ITEM _matchVars ${_initVars}) - endif() - # omit COTIRE_VERBOSE which is passed as a CMake define on command line - list (REMOVE_ITEM _matchVars COTIRE_VERBOSE) - set (_contents "") - set (_contentsHasGeneratorExpressions FALSE) - foreach (_var IN LISTS _matchVars ITEMS - XCODE MSVC CMAKE_GENERATOR CMAKE_BUILD_TYPE CMAKE_CONFIGURATION_TYPES - CMAKE_${_language}_COMPILER_ID CMAKE_${_language}_COMPILER_VERSION - CMAKE_${_language}_COMPILER_LAUNCHER CMAKE_${_language}_COMPILER CMAKE_${_language}_COMPILER_ARG1 - CMAKE_INCLUDE_FLAG_${_language} CMAKE_INCLUDE_FLAG_SEP_${_language} - CMAKE_INCLUDE_SYSTEM_FLAG_${_language} - CMAKE_${_language}_FRAMEWORK_SEARCH_FLAG - CMAKE_${_language}_SYSTEM_FRAMEWORK_SEARCH_FLAG - CMAKE_${_language}_SOURCE_FILE_EXTENSIONS) - if (DEFINED ${_var}) - string (REPLACE "\"" "\\\"" _value "${${_var}}") - set (_contents "${_contents}set (${_var} \"${_value}\")\n") - if (NOT _contentsHasGeneratorExpressions) - if ("${_value}" MATCHES "\\$<.*>") - set (_contentsHasGeneratorExpressions TRUE) - endif() - endif() - endif() - endforeach() - # generate target script file - get_filename_component(_moduleName "${COTIRE_CMAKE_MODULE_FILE}" NAME) - set (_targetCotireScript "${CMAKE_CURRENT_BINARY_DIR}/${_target}_${_language}_${_moduleName}") - cotire_write_file("CMAKE" "${_targetCotireScript}" "${_contents}" FALSE) - if (_contentsHasGeneratorExpressions) - # use file(GENERATE ...) to expand generator expressions in the target script at CMake generate-time - set (_configNameOrNoneGeneratorExpression "$<$:None>$<$>:$>") - set (_targetCotireConfigScript "${CMAKE_CURRENT_BINARY_DIR}/${_target}_${_language}_${_configNameOrNoneGeneratorExpression}_${_moduleName}") - file (GENERATE OUTPUT "${_targetCotireConfigScript}" INPUT "${_targetCotireScript}") - else() - set (_targetCotireConfigScript "${_targetCotireScript}") - endif() - set (${_targetScriptVar} "${_targetCotireScript}" PARENT_SCOPE) - set (${_targetConfigScriptVar} "${_targetCotireConfigScript}" PARENT_SCOPE) -endfunction() - -function (cotire_setup_pch_file_compilation _language _target _targetScript _prefixFile _pchFile _hostFile) - set (_sourceFiles ${ARGN}) - if (CMAKE_${_language}_COMPILER_ID MATCHES "MSVC|Intel" OR - (WIN32 AND CMAKE_${_language}_COMPILER_ID MATCHES "Clang")) - # for MSVC, Intel and Clang-cl, we attach the precompiled header compilation to the host file - # the remaining files include the precompiled header, see cotire_setup_pch_file_inclusion - if (_sourceFiles) - set (_flags "") - cotire_add_pch_compilation_flags( - "${_language}" "${CMAKE_${_language}_COMPILER_ID}" "${CMAKE_${_language}_COMPILER_VERSION}" - "${_prefixFile}" "${_pchFile}" "${_hostFile}" _flags) - set_property (SOURCE ${_hostFile} APPEND_STRING PROPERTY COMPILE_FLAGS " ${_flags} ") - set_property (SOURCE ${_hostFile} APPEND PROPERTY OBJECT_OUTPUTS "${_pchFile}") - # make object file generated from host file depend on prefix header - set_property (SOURCE ${_hostFile} APPEND PROPERTY OBJECT_DEPENDS "${_prefixFile}") - # mark host file as cotired to prevent it from being used in another cotired target - set_property (SOURCE ${_hostFile} PROPERTY COTIRE_TARGET "${_target}") - endif() - elseif ("${CMAKE_GENERATOR}" MATCHES "Make|Ninja") - # for makefile based generator, we add a custom command to precompile the prefix header - if (_targetScript) - cotire_set_cmd_to_prologue(_cmds) - list (APPEND _cmds -P "${COTIRE_CMAKE_MODULE_FILE}" "precompile" "${_targetScript}" "${_prefixFile}" "${_pchFile}" "${_hostFile}") - if (MSVC_IDE) - file (TO_NATIVE_PATH "${_pchFile}" _pchFileLogPath) - else() - file (RELATIVE_PATH _pchFileLogPath "${CMAKE_BINARY_DIR}" "${_pchFile}") - endif() - # make precompiled header compilation depend on the actual compiler executable used to force - # re-compilation when the compiler executable is updated. This prevents "created by a different GCC executable" - # warnings when the precompiled header is included. - get_filename_component(_realCompilerExe "${CMAKE_${_language}_COMPILER}" ABSOLUTE) - if (COTIRE_DEBUG) - message (STATUS "add_custom_command: OUTPUT ${_pchFile} ${_cmds} DEPENDS ${_prefixFile} ${_realCompilerExe} IMPLICIT_DEPENDS ${_language} ${_prefixFile}") - endif() - set_property (SOURCE "${_pchFile}" PROPERTY GENERATED TRUE) - add_custom_command( - OUTPUT "${_pchFile}" - COMMAND ${_cmds} - DEPENDS "${_prefixFile}" "${_realCompilerExe}" - IMPLICIT_DEPENDS ${_language} "${_prefixFile}" - WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" - COMMENT "Building ${_language} precompiled header ${_pchFileLogPath}" - VERBATIM) - endif() - endif() -endfunction() - -function (cotire_setup_pch_file_inclusion _language _target _wholeTarget _prefixFile _pchFile _hostFile) - if (CMAKE_${_language}_COMPILER_ID MATCHES "MSVC|Intel" OR - (WIN32 AND CMAKE_${_language}_COMPILER_ID MATCHES "Clang")) - # for MSVC, Intel and clang-cl, we include the precompiled header in all but the host file - # the host file does the precompiled header compilation, see cotire_setup_pch_file_compilation - set (_sourceFiles ${ARGN}) - list (LENGTH _sourceFiles _numberOfSourceFiles) - if (_numberOfSourceFiles GREATER 0) - # mark sources as cotired to prevent them from being used in another cotired target - set_source_files_properties(${_sourceFiles} PROPERTIES COTIRE_TARGET "${_target}") - set (_flags "") - cotire_add_prefix_pch_inclusion_flags( - "${_language}" "${CMAKE_${_language}_COMPILER_ID}" "${CMAKE_${_language}_COMPILER_VERSION}" - "${_prefixFile}" "${_pchFile}" _flags) - set_property (SOURCE ${_sourceFiles} APPEND_STRING PROPERTY COMPILE_FLAGS " ${_flags} ") - # make object files generated from source files depend on precompiled header - set_property (SOURCE ${_sourceFiles} APPEND PROPERTY OBJECT_DEPENDS "${_pchFile}") - endif() - elseif ("${CMAKE_GENERATOR}" MATCHES "Make|Ninja") - set (_sourceFiles ${_hostFile} ${ARGN}) - if (NOT _wholeTarget) - # for makefile based generator, we force the inclusion of the prefix header for a subset - # of the source files, if this is a multi-language target or has excluded files - set (_flags "") - cotire_add_prefix_pch_inclusion_flags( - "${_language}" "${CMAKE_${_language}_COMPILER_ID}" "${CMAKE_${_language}_COMPILER_VERSION}" - "${_prefixFile}" "${_pchFile}" _flags) - set_property (SOURCE ${_sourceFiles} APPEND_STRING PROPERTY COMPILE_FLAGS " ${_flags} ") - # mark sources as cotired to prevent them from being used in another cotired target - set_source_files_properties(${_sourceFiles} PROPERTIES COTIRE_TARGET "${_target}") - endif() - # make object files generated from source files depend on precompiled header - set_property (SOURCE ${_sourceFiles} APPEND PROPERTY OBJECT_DEPENDS "${_pchFile}") - endif() -endfunction() - -function (cotire_setup_prefix_file_inclusion _language _target _prefixFile) - set (_sourceFiles ${ARGN}) - # force the inclusion of the prefix header for the given source files - set (_flags "") - set (_pchFile "") - cotire_add_prefix_pch_inclusion_flags( - "${_language}" "${CMAKE_${_language}_COMPILER_ID}" "${CMAKE_${_language}_COMPILER_VERSION}" - "${_prefixFile}" "${_pchFile}" _flags) - set_property (SOURCE ${_sourceFiles} APPEND_STRING PROPERTY COMPILE_FLAGS " ${_flags} ") - # mark sources as cotired to prevent them from being used in another cotired target - set_source_files_properties(${_sourceFiles} PROPERTIES COTIRE_TARGET "${_target}") - # make object files generated from source files depend on prefix header - set_property (SOURCE ${_sourceFiles} APPEND PROPERTY OBJECT_DEPENDS "${_prefixFile}") -endfunction() - -function (cotire_get_first_set_property_value _propertyValueVar _type _object) - set (_properties ${ARGN}) - foreach (_property ${_properties}) - get_property(_propertyValue ${_type} "${_object}" PROPERTY ${_property}) - if (_propertyValue) - set (${_propertyValueVar} ${_propertyValue} PARENT_SCOPE) - return() - endif() - endforeach() - set (${_propertyValueVar} "" PARENT_SCOPE) -endfunction() - -function (cotire_setup_combine_command _language _targetScript _joinedFile _cmdsVar) - set (_files ${ARGN}) - set (_filesPaths "") - foreach (_file ${_files}) - get_filename_component(_filePath "${_file}" ABSOLUTE) - list (APPEND _filesPaths "${_filePath}") - endforeach() - cotire_set_cmd_to_prologue(_prefixCmd) - list (APPEND _prefixCmd -P "${COTIRE_CMAKE_MODULE_FILE}" "combine") - if (_targetScript) - list (APPEND _prefixCmd "${_targetScript}") - endif() - list (APPEND _prefixCmd "${_joinedFile}" ${_filesPaths}) - if (COTIRE_DEBUG) - message (STATUS "add_custom_command: OUTPUT ${_joinedFile} COMMAND ${_prefixCmd} DEPENDS ${_files}") - endif() - set_property (SOURCE "${_joinedFile}" PROPERTY GENERATED TRUE) - if (MSVC_IDE) - file (TO_NATIVE_PATH "${_joinedFile}" _joinedFileLogPath) - else() - file (RELATIVE_PATH _joinedFileLogPath "${CMAKE_BINARY_DIR}" "${_joinedFile}") - endif() - get_filename_component(_joinedFileBaseName "${_joinedFile}" NAME_WE) - get_filename_component(_joinedFileExt "${_joinedFile}" EXT) - if (_language AND _joinedFileBaseName MATCHES "${COTIRE_UNITY_SOURCE_FILENAME_SUFFIX}$") - set (_comment "Generating ${_language} unity source ${_joinedFileLogPath}") - elseif (_language AND _joinedFileBaseName MATCHES "${COTIRE_PREFIX_HEADER_FILENAME_SUFFIX}$") - if (_joinedFileExt MATCHES "^\\.c") - set (_comment "Generating ${_language} prefix source ${_joinedFileLogPath}") - else() - set (_comment "Generating ${_language} prefix header ${_joinedFileLogPath}") - endif() - else() - set (_comment "Generating ${_joinedFileLogPath}") - endif() - add_custom_command( - OUTPUT "${_joinedFile}" - COMMAND ${_prefixCmd} - DEPENDS ${_files} - COMMENT "${_comment}" - WORKING_DIRECTORY "${CMAKE_BINARY_DIR}" - VERBATIM) - list (APPEND ${_cmdsVar} COMMAND ${_prefixCmd}) - set (${_cmdsVar} ${${_cmdsVar}} PARENT_SCOPE) -endfunction() - -function (cotire_setup_target_pch_usage _languages _target _wholeTarget) - if (XCODE) - # for Xcode, we attach a pre-build action to generate the unity sources and prefix headers - set (_prefixFiles "") - foreach (_language ${_languages}) - get_property(_prefixFile TARGET ${_target} PROPERTY COTIRE_${_language}_PREFIX_HEADER) - if (_prefixFile) - list (APPEND _prefixFiles "${_prefixFile}") - endif() - endforeach() - set (_cmds ${ARGN}) - list (LENGTH _prefixFiles _numberOfPrefixFiles) - if (_numberOfPrefixFiles GREATER 1) - # we also generate a generic, single prefix header which includes all language specific prefix headers - set (_language "") - set (_targetScript "") - cotire_make_prefix_file_path("${_language}" ${_target} _prefixHeader) - cotire_setup_combine_command("${_language}" "${_targetScript}" "${_prefixHeader}" _cmds ${_prefixFiles}) - else() - set (_prefixHeader "${_prefixFiles}") - endif() - if (COTIRE_DEBUG) - message (STATUS "add_custom_command: TARGET ${_target} PRE_BUILD ${_cmds}") - endif() - # because CMake PRE_BUILD command does not support dependencies, - # we check dependencies explicity in cotire script mode when the pre-build action is run - add_custom_command( - TARGET "${_target}" - PRE_BUILD ${_cmds} - WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" - COMMENT "Updating target ${_target} prefix headers" - VERBATIM) - # make Xcode precompile the generated prefix header with ProcessPCH and ProcessPCH++ - set_target_properties(${_target} PROPERTIES XCODE_ATTRIBUTE_GCC_PRECOMPILE_PREFIX_HEADER "YES") - set_target_properties(${_target} PROPERTIES XCODE_ATTRIBUTE_GCC_PREFIX_HEADER "${_prefixHeader}") - elseif ("${CMAKE_GENERATOR}" MATCHES "Make|Ninja") - # for makefile based generator, we force inclusion of the prefix header for all target source files - # if this is a single-language target without any excluded files - if (_wholeTarget) - set (_language "${_languages}") - # for MSVC, Intel and clang-cl, precompiled header inclusion is always done on the source file level - # see cotire_setup_pch_file_inclusion - if (NOT CMAKE_${_language}_COMPILER_ID MATCHES "MSVC|Intel" AND NOT - (WIN32 AND CMAKE_${_language}_COMPILER_ID MATCHES "Clang")) - get_property(_prefixFile TARGET ${_target} PROPERTY COTIRE_${_language}_PREFIX_HEADER) - if (_prefixFile) - get_property(_pchFile TARGET ${_target} PROPERTY COTIRE_${_language}_PRECOMPILED_HEADER) - set (_options COMPILE_OPTIONS) - cotire_add_prefix_pch_inclusion_flags( - "${_language}" "${CMAKE_${_language}_COMPILER_ID}" "${CMAKE_${_language}_COMPILER_VERSION}" - "${_prefixFile}" "${_pchFile}" _options) - set_property(TARGET ${_target} APPEND PROPERTY ${_options}) - endif() - endif() - endif() - endif() -endfunction() - -function (cotire_setup_unity_generation_commands _language _target _targetScript _targetConfigScript _unityFiles _cmdsVar) - set (_dependencySources "") - cotire_get_unity_source_dependencies(${_language} ${_target} _dependencySources ${ARGN}) - foreach (_unityFile ${_unityFiles}) - set_property (SOURCE "${_unityFile}" PROPERTY GENERATED TRUE) - # set up compiled unity source dependencies via OBJECT_DEPENDS - # this ensures that missing source files are generated before the unity file is compiled - if (COTIRE_DEBUG AND _dependencySources) - message (STATUS "${_unityFile} OBJECT_DEPENDS ${_dependencySources}") - endif() - if (_dependencySources) - # the OBJECT_DEPENDS property requires a list of full paths - set (_objectDependsPaths "") - foreach (_sourceFile ${_dependencySources}) - get_source_file_property(_sourceLocation "${_sourceFile}" LOCATION) - list (APPEND _objectDependsPaths "${_sourceLocation}") - endforeach() - set_property (SOURCE "${_unityFile}" PROPERTY OBJECT_DEPENDS ${_objectDependsPaths}) - endif() - if (WIN32 AND CMAKE_${_language}_COMPILER_ID MATCHES "MSVC|Intel") - # unity file compilation results in potentially huge object file, - # thus use /bigobj by default unter cl.exe and Windows Intel - set_property (SOURCE "${_unityFile}" APPEND_STRING PROPERTY COMPILE_FLAGS "/bigobj") - endif() - cotire_set_cmd_to_prologue(_unityCmd) - list (APPEND _unityCmd -P "${COTIRE_CMAKE_MODULE_FILE}" "unity" "${_targetConfigScript}" "${_unityFile}") - if (CMAKE_VERSION VERSION_LESS "3.1.0") - set (_unityCmdDepends "${_targetScript}") - else() - # CMake 3.1.0 supports generator expressions in arguments to DEPENDS - set (_unityCmdDepends "${_targetConfigScript}") - endif() - if (MSVC_IDE) - file (TO_NATIVE_PATH "${_unityFile}" _unityFileLogPath) - else() - file (RELATIVE_PATH _unityFileLogPath "${CMAKE_BINARY_DIR}" "${_unityFile}") - endif() - if (COTIRE_DEBUG) - message (STATUS "add_custom_command: OUTPUT ${_unityFile} COMMAND ${_unityCmd} DEPENDS ${_unityCmdDepends}") - endif() - add_custom_command( - OUTPUT "${_unityFile}" - COMMAND ${_unityCmd} - DEPENDS ${_unityCmdDepends} - COMMENT "Generating ${_language} unity source ${_unityFileLogPath}" - WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" - VERBATIM) - list (APPEND ${_cmdsVar} COMMAND ${_unityCmd}) - endforeach() - set (${_cmdsVar} ${${_cmdsVar}} PARENT_SCOPE) -endfunction() - -function (cotire_setup_prefix_generation_command _language _target _targetScript _prefixFile _unityFiles _cmdsVar) - set (_sourceFiles ${ARGN}) - set (_dependencySources "") - cotire_get_prefix_header_dependencies(${_language} ${_target} _dependencySources ${_sourceFiles}) - cotire_set_cmd_to_prologue(_prefixCmd) - list (APPEND _prefixCmd -P "${COTIRE_CMAKE_MODULE_FILE}" "prefix" "${_targetScript}" "${_prefixFile}" ${_unityFiles}) - set_property (SOURCE "${_prefixFile}" PROPERTY GENERATED TRUE) - # make prefix header generation depend on the actual compiler executable used to force - # re-generation when the compiler executable is updated. This prevents "file not found" - # errors for compiler version specific system header files. - get_filename_component(_realCompilerExe "${CMAKE_${_language}_COMPILER}" ABSOLUTE) - if (COTIRE_DEBUG) - message (STATUS "add_custom_command: OUTPUT ${_prefixFile} COMMAND ${_prefixCmd} DEPENDS ${_unityFile} ${_dependencySources} ${_realCompilerExe}") - endif() - if (MSVC_IDE) - file (TO_NATIVE_PATH "${_prefixFile}" _prefixFileLogPath) - else() - file (RELATIVE_PATH _prefixFileLogPath "${CMAKE_BINARY_DIR}" "${_prefixFile}") - endif() - get_filename_component(_prefixFileExt "${_prefixFile}" EXT) - if (_prefixFileExt MATCHES "^\\.c") - set (_comment "Generating ${_language} prefix source ${_prefixFileLogPath}") - else() - set (_comment "Generating ${_language} prefix header ${_prefixFileLogPath}") - endif() - # prevent pre-processing errors upon generating the prefix header when a target's generated include file does not yet exist - # we do not add a file-level dependency for the target's generated files though, because we only want to depend on their existence - # thus we make the prefix header generation depend on a custom helper target which triggers the generation of the files - set (_preTargetName "${_target}${COTIRE_PCH_TARGET_SUFFIX}_pre") - if (TARGET ${_preTargetName}) - # custom helper target has already been generated while processing a different language - list (APPEND _dependencySources ${_preTargetName}) - else() - get_target_property(_targetSourceFiles ${_target} SOURCES) - cotire_get_objects_with_property_on(_generatedSources GENERATED SOURCE ${_targetSourceFiles}) - if (_generatedSources) - add_custom_target("${_preTargetName}" DEPENDS ${_generatedSources}) - cotire_init_target("${_preTargetName}") - list (APPEND _dependencySources ${_preTargetName}) - endif() - endif() - add_custom_command( - OUTPUT "${_prefixFile}" "${_prefixFile}.log" - COMMAND ${_prefixCmd} - DEPENDS ${_unityFiles} ${_dependencySources} "${_realCompilerExe}" - COMMENT "${_comment}" - WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" - VERBATIM) - list (APPEND ${_cmdsVar} COMMAND ${_prefixCmd}) - set (${_cmdsVar} ${${_cmdsVar}} PARENT_SCOPE) -endfunction() - -function (cotire_setup_prefix_generation_from_unity_command _language _target _targetScript _prefixFile _unityFiles _cmdsVar) - set (_sourceFiles ${ARGN}) - if (CMAKE_${_language}_COMPILER_ID MATCHES "GNU|Clang") - # GNU and Clang require indirect compilation of the prefix header to make them honor the system_header pragma - cotire_prefix_header_to_source_file_path(${_language} "${_prefixFile}" _prefixSourceFile) - else() - set (_prefixSourceFile "${_prefixFile}") - endif() - cotire_setup_prefix_generation_command( - ${_language} ${_target} "${_targetScript}" - "${_prefixSourceFile}" "${_unityFiles}" ${_cmdsVar} ${_sourceFiles}) - if (CMAKE_${_language}_COMPILER_ID MATCHES "GNU|Clang") - # set up generation of a prefix source file which includes the prefix header - cotire_setup_combine_command(${_language} "${_targetScript}" "${_prefixFile}" _cmds ${_prefixSourceFile}) - endif() - set (${_cmdsVar} ${${_cmdsVar}} PARENT_SCOPE) -endfunction() - -function (cotire_setup_prefix_generation_from_provided_command _language _target _targetScript _prefixFile _cmdsVar) - set (_prefixHeaderFiles ${ARGN}) - if (CMAKE_${_language}_COMPILER_ID MATCHES "GNU|Clang") - # GNU and Clang require indirect compilation of the prefix header to make them honor the system_header pragma - cotire_prefix_header_to_source_file_path(${_language} "${_prefixFile}" _prefixSourceFile) - else() - set (_prefixSourceFile "${_prefixFile}") - endif() - cotire_setup_combine_command(${_language} "${_targetScript}" "${_prefixSourceFile}" _cmds ${_prefixHeaderFiles}) - if (CMAKE_${_language}_COMPILER_ID MATCHES "GNU|Clang") - # set up generation of a prefix source file which includes the prefix header - cotire_setup_combine_command(${_language} "${_targetScript}" "${_prefixFile}" _cmds ${_prefixSourceFile}) - endif() - set (${_cmdsVar} ${${_cmdsVar}} PARENT_SCOPE) -endfunction() - -function (cotire_init_cotire_target_properties _target) - get_property(_isSet TARGET ${_target} PROPERTY COTIRE_ENABLE_PRECOMPILED_HEADER SET) - if (NOT _isSet) - set_property(TARGET ${_target} PROPERTY COTIRE_ENABLE_PRECOMPILED_HEADER TRUE) - endif() - get_property(_isSet TARGET ${_target} PROPERTY COTIRE_ADD_UNITY_BUILD SET) - if (NOT _isSet) - set_property(TARGET ${_target} PROPERTY COTIRE_ADD_UNITY_BUILD TRUE) - endif() - get_property(_isSet TARGET ${_target} PROPERTY COTIRE_ADD_CLEAN SET) - if (NOT _isSet) - set_property(TARGET ${_target} PROPERTY COTIRE_ADD_CLEAN FALSE) - endif() - get_property(_isSet TARGET ${_target} PROPERTY COTIRE_PREFIX_HEADER_IGNORE_PATH SET) - if (NOT _isSet) - set_property(TARGET ${_target} PROPERTY COTIRE_PREFIX_HEADER_IGNORE_PATH "${CMAKE_SOURCE_DIR}") - cotire_check_is_path_relative_to("${CMAKE_BINARY_DIR}" _isRelative "${CMAKE_SOURCE_DIR}") - if (NOT _isRelative) - set_property(TARGET ${_target} APPEND PROPERTY COTIRE_PREFIX_HEADER_IGNORE_PATH "${CMAKE_BINARY_DIR}") - endif() - endif() - get_property(_isSet TARGET ${_target} PROPERTY COTIRE_PREFIX_HEADER_INCLUDE_PATH SET) - if (NOT _isSet) - set_property(TARGET ${_target} PROPERTY COTIRE_PREFIX_HEADER_INCLUDE_PATH "") - endif() - get_property(_isSet TARGET ${_target} PROPERTY COTIRE_PREFIX_HEADER_INCLUDE_PRIORITY_PATH SET) - if (NOT _isSet) - set_property(TARGET ${_target} PROPERTY COTIRE_PREFIX_HEADER_INCLUDE_PRIORITY_PATH "") - endif() - get_property(_isSet TARGET ${_target} PROPERTY COTIRE_UNITY_SOURCE_PRE_UNDEFS SET) - if (NOT _isSet) - set_property(TARGET ${_target} PROPERTY COTIRE_UNITY_SOURCE_PRE_UNDEFS "") - endif() - get_property(_isSet TARGET ${_target} PROPERTY COTIRE_UNITY_SOURCE_POST_UNDEFS SET) - if (NOT _isSet) - set_property(TARGET ${_target} PROPERTY COTIRE_UNITY_SOURCE_POST_UNDEFS "") - endif() - get_property(_isSet TARGET ${_target} PROPERTY COTIRE_UNITY_LINK_LIBRARIES_INIT SET) - if (NOT _isSet) - set_property(TARGET ${_target} PROPERTY COTIRE_UNITY_LINK_LIBRARIES_INIT "COPY_UNITY") - endif() - get_property(_isSet TARGET ${_target} PROPERTY COTIRE_UNITY_SOURCE_MAXIMUM_NUMBER_OF_INCLUDES SET) - if (NOT _isSet) - if (COTIRE_MAXIMUM_NUMBER_OF_UNITY_INCLUDES) - set_property(TARGET ${_target} PROPERTY COTIRE_UNITY_SOURCE_MAXIMUM_NUMBER_OF_INCLUDES "${COTIRE_MAXIMUM_NUMBER_OF_UNITY_INCLUDES}") - else() - set_property(TARGET ${_target} PROPERTY COTIRE_UNITY_SOURCE_MAXIMUM_NUMBER_OF_INCLUDES "") - endif() - endif() -endfunction() - -function (cotire_make_target_message _target _languages _disableMsg _targetMsgVar) - get_target_property(_targetUsePCH ${_target} COTIRE_ENABLE_PRECOMPILED_HEADER) - get_target_property(_targetAddSCU ${_target} COTIRE_ADD_UNITY_BUILD) - string (REPLACE ";" " " _languagesStr "${_languages}") - math (EXPR _numberOfExcludedFiles "${ARGC} - 4") - if (_numberOfExcludedFiles EQUAL 0) - set (_excludedStr "") - elseif (COTIRE_VERBOSE OR _numberOfExcludedFiles LESS 4) - string (REPLACE ";" ", " _excludedStr "excluding ${ARGN}") - else() - set (_excludedStr "excluding ${_numberOfExcludedFiles} files") - endif() - set (_targetMsg "") - if (NOT _languages) - set (_targetMsg "Target ${_target} cannot be cotired.") - if (_disableMsg) - set (_targetMsg "${_targetMsg} ${_disableMsg}") - endif() - elseif (NOT _targetUsePCH AND NOT _targetAddSCU) - set (_targetMsg "${_languagesStr} target ${_target} cotired without unity build and precompiled header.") - if (_disableMsg) - set (_targetMsg "${_targetMsg} ${_disableMsg}") - endif() - elseif (NOT _targetUsePCH) - if (_excludedStr) - set (_targetMsg "${_languagesStr} target ${_target} cotired without precompiled header ${_excludedStr}.") - else() - set (_targetMsg "${_languagesStr} target ${_target} cotired without precompiled header.") - endif() - if (_disableMsg) - set (_targetMsg "${_targetMsg} ${_disableMsg}") - endif() - elseif (NOT _targetAddSCU) - if (_excludedStr) - set (_targetMsg "${_languagesStr} target ${_target} cotired without unity build ${_excludedStr}.") - else() - set (_targetMsg "${_languagesStr} target ${_target} cotired without unity build.") - endif() - if (_disableMsg) - set (_targetMsg "${_targetMsg} ${_disableMsg}") - endif() - else() - if (_excludedStr) - set (_targetMsg "${_languagesStr} target ${_target} cotired ${_excludedStr}.") - else() - set (_targetMsg "${_languagesStr} target ${_target} cotired.") - endif() - endif() - set (${_targetMsgVar} "${_targetMsg}" PARENT_SCOPE) -endfunction() - -function (cotire_choose_target_languages _target _targetLanguagesVar _wholeTargetVar) - set (_languages ${ARGN}) - set (_allSourceFiles "") - set (_allExcludedSourceFiles "") - set (_allCotiredSourceFiles "") - set (_targetLanguages "") - set (_pchEligibleTargetLanguages "") - get_target_property(_targetType ${_target} TYPE) - get_target_property(_targetSourceFiles ${_target} SOURCES) - get_target_property(_targetUsePCH ${_target} COTIRE_ENABLE_PRECOMPILED_HEADER) - get_target_property(_targetAddSCU ${_target} COTIRE_ADD_UNITY_BUILD) - set (_disableMsg "") - foreach (_language ${_languages}) - get_target_property(_prefixHeader ${_target} COTIRE_${_language}_PREFIX_HEADER) - get_target_property(_unityBuildFile ${_target} COTIRE_${_language}_UNITY_SOURCE) - if (_prefixHeader OR _unityBuildFile) - message (STATUS "cotire: target ${_target} has already been cotired.") - set (${_targetLanguagesVar} "" PARENT_SCOPE) - return() - endif() - if (_targetUsePCH AND "${_language}" MATCHES "^C|CXX$" AND DEFINED CMAKE_${_language}_COMPILER_ID) - if (CMAKE_${_language}_COMPILER_ID) - cotire_check_precompiled_header_support("${_language}" "${_target}" _disableMsg) - if (_disableMsg) - set (_targetUsePCH FALSE) - endif() - endif() - endif() - set (_sourceFiles "") - set (_excludedSources "") - set (_cotiredSources "") - cotire_filter_language_source_files(${_language} ${_target} _sourceFiles _excludedSources _cotiredSources ${_targetSourceFiles}) - if (_sourceFiles OR _excludedSources OR _cotiredSources) - list (APPEND _targetLanguages ${_language}) - endif() - if (_sourceFiles) - list (APPEND _allSourceFiles ${_sourceFiles}) - endif() - list (LENGTH _sourceFiles _numberOfSources) - if (NOT _numberOfSources LESS ${COTIRE_MINIMUM_NUMBER_OF_TARGET_SOURCES}) - list (APPEND _pchEligibleTargetLanguages ${_language}) - endif() - if (_excludedSources) - list (APPEND _allExcludedSourceFiles ${_excludedSources}) - endif() - if (_cotiredSources) - list (APPEND _allCotiredSourceFiles ${_cotiredSources}) - endif() - endforeach() - set (_targetMsgLevel STATUS) - if (NOT _targetLanguages) - string (REPLACE ";" " or " _languagesStr "${_languages}") - set (_disableMsg "No ${_languagesStr} source files.") - set (_targetUsePCH FALSE) - set (_targetAddSCU FALSE) - endif() - if (_targetUsePCH) - if (_allCotiredSourceFiles) - cotire_get_source_file_property_values(_cotireTargets COTIRE_TARGET ${_allCotiredSourceFiles}) - list (REMOVE_DUPLICATES _cotireTargets) - string (REPLACE ";" ", " _cotireTargetsStr "${_cotireTargets}") - set (_disableMsg "Target sources already include a precompiled header for target(s) ${_cotireTargets}.") - set (_disableMsg "${_disableMsg} Set target property COTIRE_ENABLE_PRECOMPILED_HEADER to FALSE for targets ${_target},") - set (_disableMsg "${_disableMsg} ${_cotireTargetsStr} to get a workable build system.") - set (_targetMsgLevel SEND_ERROR) - set (_targetUsePCH FALSE) - elseif (NOT _pchEligibleTargetLanguages) - set (_disableMsg "Too few applicable sources.") - set (_targetUsePCH FALSE) - elseif (XCODE AND _allExcludedSourceFiles) - # for Xcode, we cannot apply the precompiled header to individual sources, only to the whole target - set (_disableMsg "Exclusion of source files not supported for generator Xcode.") - set (_targetUsePCH FALSE) - elseif (XCODE AND "${_targetType}" STREQUAL "OBJECT_LIBRARY") - # for Xcode, we cannot apply the required PRE_BUILD action to generate the prefix header to an OBJECT_LIBRARY target - set (_disableMsg "Required PRE_BUILD action not supported for OBJECT_LIBRARY targets for generator Xcode.") - set (_targetUsePCH FALSE) - endif() - endif() - if (_targetAddSCU) - # disable unity builds if automatic Qt processing is used - get_target_property(_targetAutoMoc ${_target} AUTOMOC) - get_target_property(_targetAutoUic ${_target} AUTOUIC) - get_target_property(_targetAutoRcc ${_target} AUTORCC) - if (_targetAutoMoc OR _targetAutoUic OR _targetAutoRcc) - if (_disableMsg) - set (_disableMsg "${_disableMsg} Target uses automatic CMake Qt processing.") - else() - set (_disableMsg "Target uses automatic CMake Qt processing.") - endif() - set (_targetAddSCU FALSE) - endif() - endif() - set_property(TARGET ${_target} PROPERTY COTIRE_ENABLE_PRECOMPILED_HEADER ${_targetUsePCH}) - set_property(TARGET ${_target} PROPERTY COTIRE_ADD_UNITY_BUILD ${_targetAddSCU}) - cotire_make_target_message(${_target} "${_targetLanguages}" "${_disableMsg}" _targetMsg ${_allExcludedSourceFiles}) - if (_targetMsg) - if (NOT DEFINED COTIREMSG_${_target}) - set (COTIREMSG_${_target} "") - endif() - if (COTIRE_VERBOSE OR NOT "${_targetMsgLevel}" STREQUAL "STATUS" OR - NOT "${COTIREMSG_${_target}}" STREQUAL "${_targetMsg}") - # cache message to avoid redundant messages on re-configure - set (COTIREMSG_${_target} "${_targetMsg}" CACHE INTERNAL "${_target} cotire message.") - message (${_targetMsgLevel} "${_targetMsg}") - endif() - endif() - list (LENGTH _targetLanguages _numberOfLanguages) - if (_numberOfLanguages GREATER 1 OR _allExcludedSourceFiles) - set (${_wholeTargetVar} FALSE PARENT_SCOPE) - else() - set (${_wholeTargetVar} TRUE PARENT_SCOPE) - endif() - set (${_targetLanguagesVar} ${_targetLanguages} PARENT_SCOPE) -endfunction() - -function (cotire_compute_unity_max_number_of_includes _target _maxIncludesVar) - set (_sourceFiles ${ARGN}) - get_target_property(_maxIncludes ${_target} COTIRE_UNITY_SOURCE_MAXIMUM_NUMBER_OF_INCLUDES) - if (_maxIncludes MATCHES "(-j|--parallel|--jobs) ?([0-9]*)") - if (DEFINED CMAKE_MATCH_2) - set (_numberOfThreads "${CMAKE_MATCH_2}") - else() - set (_numberOfThreads "") - endif() - if (NOT _numberOfThreads) - # use all available cores - ProcessorCount(_numberOfThreads) - endif() - list (LENGTH _sourceFiles _numberOfSources) - math (EXPR _maxIncludes "(${_numberOfSources} + ${_numberOfThreads} - 1) / ${_numberOfThreads}") - elseif (NOT _maxIncludes MATCHES "[0-9]+") - set (_maxIncludes 0) - endif() - if (COTIRE_DEBUG) - message (STATUS "${_target} unity source max includes: ${_maxIncludes}") - endif() - set (${_maxIncludesVar} ${_maxIncludes} PARENT_SCOPE) -endfunction() - -function (cotire_process_target_language _language _configurations _target _wholeTarget _cmdsVar) - set (${_cmdsVar} "" PARENT_SCOPE) - get_target_property(_targetSourceFiles ${_target} SOURCES) - set (_sourceFiles "") - set (_excludedSources "") - set (_cotiredSources "") - cotire_filter_language_source_files(${_language} ${_target} _sourceFiles _excludedSources _cotiredSources ${_targetSourceFiles}) - if (NOT _sourceFiles AND NOT _cotiredSources) - return() - endif() - set (_cmds "") - # check for user provided unity source file list - get_property(_unitySourceFiles TARGET ${_target} PROPERTY COTIRE_${_language}_UNITY_SOURCE_INIT) - if (NOT _unitySourceFiles) - set (_unitySourceFiles ${_sourceFiles} ${_cotiredSources}) - endif() - cotire_generate_target_script( - ${_language} "${_configurations}" ${_target} _targetScript _targetConfigScript ${_unitySourceFiles}) - # set up unity files for parallel compilation - cotire_compute_unity_max_number_of_includes(${_target} _maxIncludes ${_unitySourceFiles}) - cotire_make_unity_source_file_paths(${_language} ${_target} ${_maxIncludes} _unityFiles ${_unitySourceFiles}) - list (LENGTH _unityFiles _numberOfUnityFiles) - if (_numberOfUnityFiles EQUAL 0) - return() - elseif (_numberOfUnityFiles GREATER 1) - cotire_setup_unity_generation_commands( - ${_language} ${_target} "${_targetScript}" "${_targetConfigScript}" "${_unityFiles}" _cmds ${_unitySourceFiles}) - endif() - # set up single unity file for prefix header generation - cotire_make_single_unity_source_file_path(${_language} ${_target} _unityFile) - cotire_setup_unity_generation_commands( - ${_language} ${_target} "${_targetScript}" "${_targetConfigScript}" "${_unityFile}" _cmds ${_unitySourceFiles}) - cotire_make_prefix_file_path(${_language} ${_target} _prefixFile) - # set up prefix header - if (_prefixFile) - # check for user provided prefix header files - get_property(_prefixHeaderFiles TARGET ${_target} PROPERTY COTIRE_${_language}_PREFIX_HEADER_INIT) - if (_prefixHeaderFiles) - cotire_setup_prefix_generation_from_provided_command( - ${_language} ${_target} "${_targetConfigScript}" "${_prefixFile}" _cmds ${_prefixHeaderFiles}) - else() - cotire_setup_prefix_generation_from_unity_command( - ${_language} ${_target} "${_targetConfigScript}" "${_prefixFile}" "${_unityFile}" _cmds ${_unitySourceFiles}) - endif() - # check if selected language has enough sources at all - list (LENGTH _sourceFiles _numberOfSources) - if (_numberOfSources LESS ${COTIRE_MINIMUM_NUMBER_OF_TARGET_SOURCES}) - set (_targetUsePCH FALSE) - else() - get_target_property(_targetUsePCH ${_target} COTIRE_ENABLE_PRECOMPILED_HEADER) - endif() - if (_targetUsePCH) - cotire_make_pch_file_path(${_language} ${_target} _pchFile) - if (_pchFile) - # first file in _sourceFiles is passed as the host file - cotire_setup_pch_file_compilation( - ${_language} ${_target} "${_targetConfigScript}" "${_prefixFile}" "${_pchFile}" ${_sourceFiles}) - cotire_setup_pch_file_inclusion( - ${_language} ${_target} ${_wholeTarget} "${_prefixFile}" "${_pchFile}" ${_sourceFiles}) - endif() - elseif (_prefixHeaderFiles) - # user provided prefix header must be included unconditionally - cotire_setup_prefix_file_inclusion(${_language} ${_target} "${_prefixFile}" ${_sourceFiles}) - endif() - endif() - # mark target as cotired for language - set_property(TARGET ${_target} PROPERTY COTIRE_${_language}_UNITY_SOURCE "${_unityFiles}") - if (_prefixFile) - set_property(TARGET ${_target} PROPERTY COTIRE_${_language}_PREFIX_HEADER "${_prefixFile}") - if (_targetUsePCH AND _pchFile) - set_property(TARGET ${_target} PROPERTY COTIRE_${_language}_PRECOMPILED_HEADER "${_pchFile}") - endif() - endif() - set (${_cmdsVar} ${_cmds} PARENT_SCOPE) -endfunction() - -function (cotire_setup_clean_target _target) - set (_cleanTargetName "${_target}${COTIRE_CLEAN_TARGET_SUFFIX}") - if (NOT TARGET "${_cleanTargetName}") - cotire_set_cmd_to_prologue(_cmds) - get_filename_component(_outputDir "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}" ABSOLUTE) - list (APPEND _cmds -P "${COTIRE_CMAKE_MODULE_FILE}" "cleanup" "${_outputDir}" "${COTIRE_INTDIR}" "${_target}") - add_custom_target(${_cleanTargetName} - COMMAND ${_cmds} - WORKING_DIRECTORY "${CMAKE_BINARY_DIR}" - COMMENT "Cleaning up target ${_target} cotire generated files" - VERBATIM) - cotire_init_target("${_cleanTargetName}") - endif() -endfunction() - -function (cotire_setup_pch_target _languages _configurations _target) - if ("${CMAKE_GENERATOR}" MATCHES "Make|Ninja") - # for makefile based generators, we add a custom target to trigger the generation of the cotire related files - set (_dependsFiles "") - foreach (_language ${_languages}) - set (_props COTIRE_${_language}_PREFIX_HEADER COTIRE_${_language}_UNITY_SOURCE) - if (NOT CMAKE_${_language}_COMPILER_ID MATCHES "MSVC|Intel" AND NOT - (WIN32 AND CMAKE_${_language}_COMPILER_ID MATCHES "Clang")) - # MSVC, Intel and clang-cl only create precompiled header as a side effect - list (INSERT _props 0 COTIRE_${_language}_PRECOMPILED_HEADER) - endif() - cotire_get_first_set_property_value(_dependsFile TARGET ${_target} ${_props}) - if (_dependsFile) - list (APPEND _dependsFiles "${_dependsFile}") - endif() - endforeach() - if (_dependsFiles) - set (_pchTargetName "${_target}${COTIRE_PCH_TARGET_SUFFIX}") - add_custom_target("${_pchTargetName}" DEPENDS ${_dependsFiles}) - cotire_init_target("${_pchTargetName}") - cotire_add_to_pch_all_target(${_pchTargetName}) - endif() - else() - # for other generators, we add the "clean all" target to clean up the precompiled header - cotire_setup_clean_all_target() - endif() -endfunction() - -function (cotire_filter_object_libraries _target _objectLibrariesVar) - set (_objectLibraries "") - foreach (_source ${ARGN}) - if (_source MATCHES "^\\$$") - list (APPEND _objectLibraries "${_source}") - endif() - endforeach() - set (${_objectLibrariesVar} ${_objectLibraries} PARENT_SCOPE) -endfunction() - -function (cotire_collect_unity_target_sources _target _languages _unityTargetSourcesVar) - get_target_property(_targetSourceFiles ${_target} SOURCES) - set (_unityTargetSources ${_targetSourceFiles}) - foreach (_language ${_languages}) - get_property(_unityFiles TARGET ${_target} PROPERTY COTIRE_${_language}_UNITY_SOURCE) - if (_unityFiles) - # remove source files that are included in the unity source - set (_sourceFiles "") - set (_excludedSources "") - set (_cotiredSources "") - cotire_filter_language_source_files(${_language} ${_target} _sourceFiles _excludedSources _cotiredSources ${_targetSourceFiles}) - if (_sourceFiles OR _cotiredSources) - list (REMOVE_ITEM _unityTargetSources ${_sourceFiles} ${_cotiredSources}) - endif() - # add unity source files instead - list (APPEND _unityTargetSources ${_unityFiles}) - endif() - endforeach() - # handle object libraries which are part of the target's sources - get_target_property(_linkLibrariesStrategy ${_target} COTIRE_UNITY_LINK_LIBRARIES_INIT) - if ("${_linkLibrariesStrategy}" MATCHES "^COPY_UNITY$") - cotire_filter_object_libraries(${_target} _objectLibraries ${_targetSourceFiles}) - if (_objectLibraries) - cotire_map_libraries("${_linkLibrariesStrategy}" _unityObjectLibraries ${_objectLibraries}) - list (REMOVE_ITEM _unityTargetSources ${_objectLibraries}) - list (APPEND _unityTargetSources ${_unityObjectLibraries}) - endif() - endif() - set (${_unityTargetSourcesVar} ${_unityTargetSources} PARENT_SCOPE) -endfunction() - -function (cotire_setup_unity_target_pch_usage _languages _target) - foreach (_language ${_languages}) - get_property(_unityFiles TARGET ${_target} PROPERTY COTIRE_${_language}_UNITY_SOURCE) - if (_unityFiles) - get_property(_userPrefixFile TARGET ${_target} PROPERTY COTIRE_${_language}_PREFIX_HEADER_INIT) - get_property(_prefixFile TARGET ${_target} PROPERTY COTIRE_${_language}_PREFIX_HEADER) - if (_userPrefixFile AND _prefixFile) - # user provided prefix header must be included unconditionally by unity sources - cotire_setup_prefix_file_inclusion(${_language} ${_target} "${_prefixFile}" ${_unityFiles}) - endif() - endif() - endforeach() -endfunction() - -function (cotire_setup_unity_build_target _languages _configurations _target) - get_target_property(_unityTargetName ${_target} COTIRE_UNITY_TARGET_NAME) - if (NOT _unityTargetName) - set (_unityTargetName "${_target}${COTIRE_UNITY_BUILD_TARGET_SUFFIX}") - endif() - # determine unity target sub type - get_target_property(_targetType ${_target} TYPE) - if ("${_targetType}" STREQUAL "EXECUTABLE") - set (_unityTargetSubType "") - elseif (_targetType MATCHES "(STATIC|SHARED|MODULE|OBJECT)_LIBRARY") - set (_unityTargetSubType "${CMAKE_MATCH_1}") - else() - message (WARNING "cotire: target ${_target} has unknown target type ${_targetType}.") - return() - endif() - # determine unity target sources - set (_unityTargetSources "") - cotire_collect_unity_target_sources(${_target} "${_languages}" _unityTargetSources) - # prevent AUTOMOC, AUTOUIC and AUTORCC properties from being set when the unity target is created - set (CMAKE_AUTOMOC OFF) - set (CMAKE_AUTOUIC OFF) - set (CMAKE_AUTORCC OFF) - if (COTIRE_DEBUG) - message (STATUS "add target ${_targetType} ${_unityTargetName} ${_unityTargetSubType} EXCLUDE_FROM_ALL ${_unityTargetSources}") - endif() - # generate unity target - if ("${_targetType}" STREQUAL "EXECUTABLE") - add_executable(${_unityTargetName} ${_unityTargetSubType} EXCLUDE_FROM_ALL ${_unityTargetSources}) - else() - add_library(${_unityTargetName} ${_unityTargetSubType} EXCLUDE_FROM_ALL ${_unityTargetSources}) - endif() - # copy output location properties - set (_outputDirProperties - ARCHIVE_OUTPUT_DIRECTORY ARCHIVE_OUTPUT_DIRECTORY_ - LIBRARY_OUTPUT_DIRECTORY LIBRARY_OUTPUT_DIRECTORY_ - RUNTIME_OUTPUT_DIRECTORY RUNTIME_OUTPUT_DIRECTORY_) - if (COTIRE_UNITY_OUTPUT_DIRECTORY) - set (_setDefaultOutputDir TRUE) - if (IS_ABSOLUTE "${COTIRE_UNITY_OUTPUT_DIRECTORY}") - set (_outputDir "${COTIRE_UNITY_OUTPUT_DIRECTORY}") - else() - # append relative COTIRE_UNITY_OUTPUT_DIRECTORY to target's actual output directory - cotire_copy_set_properties("${_configurations}" TARGET ${_target} ${_unityTargetName} ${_outputDirProperties}) - cotire_resolve_config_properties("${_configurations}" _properties ${_outputDirProperties}) - foreach (_property ${_properties}) - get_property(_outputDir TARGET ${_target} PROPERTY ${_property}) - if (_outputDir) - get_filename_component(_outputDir "${_outputDir}/${COTIRE_UNITY_OUTPUT_DIRECTORY}" ABSOLUTE) - set_property(TARGET ${_unityTargetName} PROPERTY ${_property} "${_outputDir}") - set (_setDefaultOutputDir FALSE) - endif() - endforeach() - if (_setDefaultOutputDir) - get_filename_component(_outputDir "${CMAKE_CURRENT_BINARY_DIR}/${COTIRE_UNITY_OUTPUT_DIRECTORY}" ABSOLUTE) - endif() - endif() - if (_setDefaultOutputDir) - set_target_properties(${_unityTargetName} PROPERTIES - ARCHIVE_OUTPUT_DIRECTORY "${_outputDir}" - LIBRARY_OUTPUT_DIRECTORY "${_outputDir}" - RUNTIME_OUTPUT_DIRECTORY "${_outputDir}") - endif() - else() - cotire_copy_set_properties("${_configurations}" TARGET ${_target} ${_unityTargetName} - ${_outputDirProperties}) - endif() - # copy output name - cotire_copy_set_properties("${_configurations}" TARGET ${_target} ${_unityTargetName} - ARCHIVE_OUTPUT_NAME ARCHIVE_OUTPUT_NAME_ - LIBRARY_OUTPUT_NAME LIBRARY_OUTPUT_NAME_ - OUTPUT_NAME OUTPUT_NAME_ - RUNTIME_OUTPUT_NAME RUNTIME_OUTPUT_NAME_ - PREFIX _POSTFIX SUFFIX - IMPORT_PREFIX IMPORT_SUFFIX) - # copy compile stuff - cotire_copy_set_properties("${_configurations}" TARGET ${_target} ${_unityTargetName} - COMPILE_DEFINITIONS COMPILE_DEFINITIONS_ - COMPILE_FLAGS COMPILE_OPTIONS - Fortran_FORMAT Fortran_MODULE_DIRECTORY - INCLUDE_DIRECTORIES - INTERPROCEDURAL_OPTIMIZATION INTERPROCEDURAL_OPTIMIZATION_ - POSITION_INDEPENDENT_CODE - C_COMPILER_LAUNCHER CXX_COMPILER_LAUNCHER - C_INCLUDE_WHAT_YOU_USE CXX_INCLUDE_WHAT_YOU_USE - C_VISIBILITY_PRESET CXX_VISIBILITY_PRESET VISIBILITY_INLINES_HIDDEN - C_CLANG_TIDY CXX_CLANG_TIDY) - # copy compile features - cotire_copy_set_properties("${_configurations}" TARGET ${_target} ${_unityTargetName} - C_EXTENSIONS C_STANDARD C_STANDARD_REQUIRED - CXX_EXTENSIONS CXX_STANDARD CXX_STANDARD_REQUIRED - COMPILE_FEATURES) - # copy interface stuff - cotire_copy_set_properties("${_configurations}" TARGET ${_target} ${_unityTargetName} - COMPATIBLE_INTERFACE_BOOL COMPATIBLE_INTERFACE_NUMBER_MAX COMPATIBLE_INTERFACE_NUMBER_MIN - COMPATIBLE_INTERFACE_STRING - INTERFACE_COMPILE_DEFINITIONS INTERFACE_COMPILE_FEATURES INTERFACE_COMPILE_OPTIONS - INTERFACE_INCLUDE_DIRECTORIES INTERFACE_SOURCES - INTERFACE_POSITION_INDEPENDENT_CODE INTERFACE_SYSTEM_INCLUDE_DIRECTORIES - INTERFACE_AUTOUIC_OPTIONS NO_SYSTEM_FROM_IMPORTED) - # copy link stuff - cotire_copy_set_properties("${_configurations}" TARGET ${_target} ${_unityTargetName} - BUILD_WITH_INSTALL_RPATH BUILD_WITH_INSTALL_NAME_DIR - INSTALL_RPATH INSTALL_RPATH_USE_LINK_PATH SKIP_BUILD_RPATH - LINKER_LANGUAGE LINK_DEPENDS LINK_DEPENDS_NO_SHARED - LINK_FLAGS LINK_FLAGS_ - LINK_INTERFACE_LIBRARIES LINK_INTERFACE_LIBRARIES_ - LINK_INTERFACE_MULTIPLICITY LINK_INTERFACE_MULTIPLICITY_ - LINK_SEARCH_START_STATIC LINK_SEARCH_END_STATIC - STATIC_LIBRARY_FLAGS STATIC_LIBRARY_FLAGS_ - NO_SONAME SOVERSION VERSION - LINK_WHAT_YOU_USE BUILD_RPATH) - # copy cmake stuff - cotire_copy_set_properties("${_configurations}" TARGET ${_target} ${_unityTargetName} - IMPLICIT_DEPENDS_INCLUDE_TRANSFORM RULE_LAUNCH_COMPILE RULE_LAUNCH_CUSTOM RULE_LAUNCH_LINK) - # copy Apple platform specific stuff - cotire_copy_set_properties("${_configurations}" TARGET ${_target} ${_unityTargetName} - BUNDLE BUNDLE_EXTENSION FRAMEWORK FRAMEWORK_VERSION INSTALL_NAME_DIR - MACOSX_BUNDLE MACOSX_BUNDLE_INFO_PLIST MACOSX_FRAMEWORK_INFO_PLIST MACOSX_RPATH - OSX_ARCHITECTURES OSX_ARCHITECTURES_ PRIVATE_HEADER PUBLIC_HEADER RESOURCE XCTEST - IOS_INSTALL_COMBINED XCODE_EXPLICIT_FILE_TYPE XCODE_PRODUCT_TYPE) - # copy Windows platform specific stuff - cotire_copy_set_properties("${_configurations}" TARGET ${_target} ${_unityTargetName} - GNUtoMS - COMPILE_PDB_NAME COMPILE_PDB_NAME_ - COMPILE_PDB_OUTPUT_DIRECTORY COMPILE_PDB_OUTPUT_DIRECTORY_ - PDB_NAME PDB_NAME_ PDB_OUTPUT_DIRECTORY PDB_OUTPUT_DIRECTORY_ - VS_DESKTOP_EXTENSIONS_VERSION VS_DOTNET_REFERENCES VS_DOTNET_TARGET_FRAMEWORK_VERSION - VS_GLOBAL_KEYWORD VS_GLOBAL_PROJECT_TYPES VS_GLOBAL_ROOTNAMESPACE - VS_IOT_EXTENSIONS_VERSION VS_IOT_STARTUP_TASK - VS_KEYWORD VS_MOBILE_EXTENSIONS_VERSION - VS_SCC_AUXPATH VS_SCC_LOCALPATH VS_SCC_PROJECTNAME VS_SCC_PROVIDER - VS_WINDOWS_TARGET_PLATFORM_MIN_VERSION - VS_WINRT_COMPONENT VS_WINRT_EXTENSIONS VS_WINRT_REFERENCES - WIN32_EXECUTABLE WINDOWS_EXPORT_ALL_SYMBOLS - DEPLOYMENT_REMOTE_DIRECTORY VS_CONFIGURATION_TYPE - VS_SDK_REFERENCES VS_USER_PROPS VS_DEBUGGER_WORKING_DIRECTORY) - # copy Android platform specific stuff - cotire_copy_set_properties("${_configurations}" TARGET ${_target} ${_unityTargetName} - ANDROID_API ANDROID_API_MIN ANDROID_GUI - ANDROID_ANT_ADDITIONAL_OPTIONS ANDROID_ARCH ANDROID_ASSETS_DIRECTORIES - ANDROID_JAR_DEPENDENCIES ANDROID_JAR_DIRECTORIES ANDROID_JAVA_SOURCE_DIR - ANDROID_NATIVE_LIB_DEPENDENCIES ANDROID_NATIVE_LIB_DIRECTORIES - ANDROID_PROCESS_MAX ANDROID_PROGUARD ANDROID_PROGUARD_CONFIG_PATH - ANDROID_SECURE_PROPS_PATH ANDROID_SKIP_ANT_STEP ANDROID_STL_TYPE) - # copy CUDA platform specific stuff - cotire_copy_set_properties("${_configurations}" TARGET ${_target} ${_unityTargetName} - CUDA_PTX_COMPILATION CUDA_SEPARABLE_COMPILATION CUDA_RESOLVE_DEVICE_SYMBOLS - CUDA_EXTENSIONS CUDA_STANDARD CUDA_STANDARD_REQUIRED) - # use output name from original target - get_target_property(_targetOutputName ${_unityTargetName} OUTPUT_NAME) - if (NOT _targetOutputName) - set_property(TARGET ${_unityTargetName} PROPERTY OUTPUT_NAME "${_target}") - endif() - # use export symbol from original target - cotire_get_target_export_symbol("${_target}" _defineSymbol) - if (_defineSymbol) - set_property(TARGET ${_unityTargetName} PROPERTY DEFINE_SYMBOL "${_defineSymbol}") - if ("${_targetType}" STREQUAL "EXECUTABLE") - set_property(TARGET ${_unityTargetName} PROPERTY ENABLE_EXPORTS TRUE) - endif() - endif() - # enable parallel compilation for MSVC - if (MSVC AND "${CMAKE_GENERATOR}" MATCHES "Visual Studio") - list (LENGTH _unityTargetSources _numberOfUnityTargetSources) - if (_numberOfUnityTargetSources GREATER 1) - set_property(TARGET ${_unityTargetName} APPEND PROPERTY COMPILE_OPTIONS "/MP") - endif() - endif() - cotire_init_target(${_unityTargetName}) - cotire_add_to_unity_all_target(${_unityTargetName}) - set_property(TARGET ${_target} PROPERTY COTIRE_UNITY_TARGET_NAME "${_unityTargetName}") -endfunction(cotire_setup_unity_build_target) - -function (cotire_target _target) - set(_options "") - set(_oneValueArgs "") - set(_multiValueArgs LANGUAGES CONFIGURATIONS) - cmake_parse_arguments(_option "${_options}" "${_oneValueArgs}" "${_multiValueArgs}" ${ARGN}) - if (NOT _option_LANGUAGES) - get_property (_option_LANGUAGES GLOBAL PROPERTY ENABLED_LANGUAGES) - endif() - if (NOT _option_CONFIGURATIONS) - cotire_get_configuration_types(_option_CONFIGURATIONS) - endif() - # check if cotire can be applied to target at all - cotire_is_target_supported(${_target} _isSupported) - if (NOT _isSupported) - get_target_property(_imported ${_target} IMPORTED) - get_target_property(_targetType ${_target} TYPE) - if (_imported) - message (WARNING "cotire: imported ${_targetType} target ${_target} cannot be cotired.") - else() - message (STATUS "cotire: ${_targetType} target ${_target} cannot be cotired.") - endif() - return() - endif() - # resolve alias - get_target_property(_aliasName ${_target} ALIASED_TARGET) - if (_aliasName) - if (COTIRE_DEBUG) - message (STATUS "${_target} is an alias. Applying cotire to aliased target ${_aliasName} instead.") - endif() - set (_target ${_aliasName}) - endif() - # check if target needs to be cotired for build type - # when using configuration types, the test is performed at build time - cotire_init_cotire_target_properties(${_target}) - if (NOT CMAKE_CONFIGURATION_TYPES) - if (CMAKE_BUILD_TYPE) - list (FIND _option_CONFIGURATIONS "${CMAKE_BUILD_TYPE}" _index) - else() - list (FIND _option_CONFIGURATIONS "None" _index) - endif() - if (_index EQUAL -1) - if (COTIRE_DEBUG) - message (STATUS "CMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} not cotired (${_option_CONFIGURATIONS})") - endif() - return() - endif() - endif() - # when not using configuration types, immediately create cotire intermediate dir - if (NOT CMAKE_CONFIGURATION_TYPES) - cotire_get_intermediate_dir(_baseDir) - file (MAKE_DIRECTORY "${_baseDir}") - endif() - # choose languages that apply to the target - cotire_choose_target_languages("${_target}" _targetLanguages _wholeTarget ${_option_LANGUAGES}) - if (NOT _targetLanguages) - return() - endif() - set (_cmds "") - foreach (_language ${_targetLanguages}) - cotire_process_target_language("${_language}" "${_option_CONFIGURATIONS}" ${_target} ${_wholeTarget} _cmd) - if (_cmd) - list (APPEND _cmds ${_cmd}) - endif() - endforeach() - get_target_property(_targetAddSCU ${_target} COTIRE_ADD_UNITY_BUILD) - if (_targetAddSCU) - cotire_setup_unity_build_target("${_targetLanguages}" "${_option_CONFIGURATIONS}" ${_target}) - endif() - get_target_property(_targetUsePCH ${_target} COTIRE_ENABLE_PRECOMPILED_HEADER) - if (_targetUsePCH) - cotire_setup_target_pch_usage("${_targetLanguages}" ${_target} ${_wholeTarget} ${_cmds}) - cotire_setup_pch_target("${_targetLanguages}" "${_option_CONFIGURATIONS}" ${_target}) - if (_targetAddSCU) - cotire_setup_unity_target_pch_usage("${_targetLanguages}" ${_target}) - endif() - endif() - get_target_property(_targetAddCleanTarget ${_target} COTIRE_ADD_CLEAN) - if (_targetAddCleanTarget) - cotire_setup_clean_target(${_target}) - endif() -endfunction(cotire_target) - -function (cotire_map_libraries _strategy _mappedLibrariesVar) - set (_mappedLibraries "") - foreach (_library ${ARGN}) - if (_library MATCHES "^\\$$") - set (_libraryName "${CMAKE_MATCH_1}") - set (_linkOnly TRUE) - set (_objectLibrary FALSE) - elseif (_library MATCHES "^\\$$") - set (_libraryName "${CMAKE_MATCH_1}") - set (_linkOnly FALSE) - set (_objectLibrary TRUE) - else() - set (_libraryName "${_library}") - set (_linkOnly FALSE) - set (_objectLibrary FALSE) - endif() - if ("${_strategy}" MATCHES "COPY_UNITY") - cotire_is_target_supported(${_libraryName} _isSupported) - if (_isSupported) - # use target's corresponding unity target, if available - get_target_property(_libraryUnityTargetName ${_libraryName} COTIRE_UNITY_TARGET_NAME) - if (TARGET "${_libraryUnityTargetName}") - if (_linkOnly) - list (APPEND _mappedLibraries "$") - elseif (_objectLibrary) - list (APPEND _mappedLibraries "$") - else() - list (APPEND _mappedLibraries "${_libraryUnityTargetName}") - endif() - else() - list (APPEND _mappedLibraries "${_library}") - endif() - else() - list (APPEND _mappedLibraries "${_library}") - endif() - else() - list (APPEND _mappedLibraries "${_library}") - endif() - endforeach() - list (REMOVE_DUPLICATES _mappedLibraries) - set (${_mappedLibrariesVar} ${_mappedLibraries} PARENT_SCOPE) -endfunction() - -function (cotire_target_link_libraries _target) - cotire_is_target_supported(${_target} _isSupported) - if (NOT _isSupported) - return() - endif() - get_target_property(_unityTargetName ${_target} COTIRE_UNITY_TARGET_NAME) - if (TARGET "${_unityTargetName}") - get_target_property(_linkLibrariesStrategy ${_target} COTIRE_UNITY_LINK_LIBRARIES_INIT) - if (COTIRE_DEBUG) - message (STATUS "unity target ${_unityTargetName} link strategy: ${_linkLibrariesStrategy}") - endif() - if ("${_linkLibrariesStrategy}" MATCHES "^(COPY|COPY_UNITY)$") - get_target_property(_linkLibraries ${_target} LINK_LIBRARIES) - if (_linkLibraries) - cotire_map_libraries("${_linkLibrariesStrategy}" _unityLinkLibraries ${_linkLibraries}) - set_target_properties(${_unityTargetName} PROPERTIES LINK_LIBRARIES "${_unityLinkLibraries}") - if (COTIRE_DEBUG) - message (STATUS "unity target ${_unityTargetName} link libraries: ${_unityLinkLibraries}") - endif() - endif() - get_target_property(_interfaceLinkLibraries ${_target} INTERFACE_LINK_LIBRARIES) - if (_interfaceLinkLibraries) - cotire_map_libraries("${_linkLibrariesStrategy}" _unityLinkInterfaceLibraries ${_interfaceLinkLibraries}) - set_target_properties(${_unityTargetName} PROPERTIES INTERFACE_LINK_LIBRARIES "${_unityLinkInterfaceLibraries}") - if (COTIRE_DEBUG) - message (STATUS "unity target ${_unityTargetName} interface link libraries: ${_unityLinkInterfaceLibraries}") - endif() - endif() - get_target_property(_manualDependencies ${_target} MANUALLY_ADDED_DEPENDENCIES) - if (_manualDependencies) - cotire_map_libraries("${_linkLibrariesStrategy}" _unityManualDependencies ${_manualDependencies}) - if (_unityManualDependencies) - add_dependencies("${_unityTargetName}" ${_unityManualDependencies}) - endif() - endif() - endif() - endif() -endfunction(cotire_target_link_libraries) - -function (cotire_cleanup _binaryDir _cotireIntermediateDirName _targetName) - if (_targetName) - file (GLOB_RECURSE _cotireFiles "${_binaryDir}/${_targetName}*.*") - else() - file (GLOB_RECURSE _cotireFiles "${_binaryDir}/*.*") - endif() - # filter files in intermediate directory - set (_filesToRemove "") - foreach (_file ${_cotireFiles}) - get_filename_component(_dir "${_file}" DIRECTORY) - get_filename_component(_dirName "${_dir}" NAME) - if ("${_dirName}" STREQUAL "${_cotireIntermediateDirName}") - list (APPEND _filesToRemove "${_file}") - endif() - endforeach() - if (_filesToRemove) - if (COTIRE_VERBOSE) - message (STATUS "cleaning up ${_filesToRemove}") - endif() - file (REMOVE ${_filesToRemove}) - endif() -endfunction() - -function (cotire_init_target _targetName) - if (COTIRE_TARGETS_FOLDER) - set_target_properties(${_targetName} PROPERTIES FOLDER "${COTIRE_TARGETS_FOLDER}") - endif() - set_target_properties(${_targetName} PROPERTIES EXCLUDE_FROM_ALL TRUE) - if (MSVC_IDE) - set_target_properties(${_targetName} PROPERTIES EXCLUDE_FROM_DEFAULT_BUILD TRUE) - endif() -endfunction() - -function (cotire_add_to_pch_all_target _pchTargetName) - set (_targetName "${COTIRE_PCH_ALL_TARGET_NAME}") - if (NOT TARGET "${_targetName}") - add_custom_target("${_targetName}" - WORKING_DIRECTORY "${CMAKE_BINARY_DIR}" - VERBATIM) - cotire_init_target("${_targetName}") - endif() - cotire_setup_clean_all_target() - add_dependencies(${_targetName} ${_pchTargetName}) -endfunction() - -function (cotire_add_to_unity_all_target _unityTargetName) - set (_targetName "${COTIRE_UNITY_BUILD_ALL_TARGET_NAME}") - if (NOT TARGET "${_targetName}") - add_custom_target("${_targetName}" - WORKING_DIRECTORY "${CMAKE_BINARY_DIR}" - VERBATIM) - cotire_init_target("${_targetName}") - endif() - cotire_setup_clean_all_target() - add_dependencies(${_targetName} ${_unityTargetName}) -endfunction() - -function (cotire_setup_clean_all_target) - set (_targetName "${COTIRE_CLEAN_ALL_TARGET_NAME}") - if (NOT TARGET "${_targetName}") - cotire_set_cmd_to_prologue(_cmds) - list (APPEND _cmds -P "${COTIRE_CMAKE_MODULE_FILE}" "cleanup" "${CMAKE_BINARY_DIR}" "${COTIRE_INTDIR}") - add_custom_target(${_targetName} - COMMAND ${_cmds} - WORKING_DIRECTORY "${CMAKE_BINARY_DIR}" - COMMENT "Cleaning up all cotire generated files" - VERBATIM) - cotire_init_target("${_targetName}") - endif() -endfunction() - -function (cotire) - set(_options "") - set(_oneValueArgs "") - set(_multiValueArgs LANGUAGES CONFIGURATIONS) - cmake_parse_arguments(_option "${_options}" "${_oneValueArgs}" "${_multiValueArgs}" ${ARGN}) - set (_targets ${_option_UNPARSED_ARGUMENTS}) - foreach (_target ${_targets}) - if (TARGET ${_target}) - cotire_target(${_target} LANGUAGES ${_option_LANGUAGES} CONFIGURATIONS ${_option_CONFIGURATIONS}) - else() - message (WARNING "cotire: ${_target} is not a target.") - endif() - endforeach() - foreach (_target ${_targets}) - if (TARGET ${_target}) - cotire_target_link_libraries(${_target}) - endif() - endforeach() -endfunction() - -if (CMAKE_SCRIPT_MODE_FILE) - - # cotire is being run in script mode - # locate -P on command args - set (COTIRE_ARGC -1) - foreach (_index RANGE ${CMAKE_ARGC}) - if (COTIRE_ARGC GREATER -1) - set (COTIRE_ARGV${COTIRE_ARGC} "${CMAKE_ARGV${_index}}") - math (EXPR COTIRE_ARGC "${COTIRE_ARGC} + 1") - elseif ("${CMAKE_ARGV${_index}}" STREQUAL "-P") - set (COTIRE_ARGC 0) - endif() - endforeach() - - # include target script if available - if ("${COTIRE_ARGV2}" MATCHES "\\.cmake$") - # the included target scripts sets up additional variables relating to the target (e.g., COTIRE_TARGET_SOURCES) - include("${COTIRE_ARGV2}") - endif() - - if (COTIRE_DEBUG) - message (STATUS "${COTIRE_ARGV0} ${COTIRE_ARGV1} ${COTIRE_ARGV2} ${COTIRE_ARGV3} ${COTIRE_ARGV4} ${COTIRE_ARGV5}") - endif() - - if (NOT COTIRE_BUILD_TYPE) - set (COTIRE_BUILD_TYPE "None") - endif() - string (TOUPPER "${COTIRE_BUILD_TYPE}" _upperConfig) - set (_includeDirs ${COTIRE_TARGET_INCLUDE_DIRECTORIES_${_upperConfig}}) - set (_systemIncludeDirs ${COTIRE_TARGET_SYSTEM_INCLUDE_DIRECTORIES_${_upperConfig}}) - set (_compileDefinitions ${COTIRE_TARGET_COMPILE_DEFINITIONS_${_upperConfig}}) - set (_compileFlags ${COTIRE_TARGET_COMPILE_FLAGS_${_upperConfig}}) - # check if target has been cotired for actual build type COTIRE_BUILD_TYPE - list (FIND COTIRE_TARGET_CONFIGURATION_TYPES "${COTIRE_BUILD_TYPE}" _index) - if (_index GREATER -1) - set (_sources ${COTIRE_TARGET_SOURCES}) - set (_sourcesDefinitions ${COTIRE_TARGET_SOURCES_COMPILE_DEFINITIONS_${_upperConfig}}) - else() - if (COTIRE_DEBUG) - message (STATUS "COTIRE_BUILD_TYPE=${COTIRE_BUILD_TYPE} not cotired (${COTIRE_TARGET_CONFIGURATION_TYPES})") - endif() - set (_sources "") - set (_sourcesDefinitions "") - endif() - set (_targetPreUndefs ${COTIRE_TARGET_PRE_UNDEFS}) - set (_targetPostUndefs ${COTIRE_TARGET_POST_UNDEFS}) - set (_sourcesPreUndefs ${COTIRE_TARGET_SOURCES_PRE_UNDEFS}) - set (_sourcesPostUndefs ${COTIRE_TARGET_SOURCES_POST_UNDEFS}) - - if ("${COTIRE_ARGV1}" STREQUAL "unity") - - if (XCODE) - # executing pre-build action under Xcode, check dependency on target script - set (_dependsOption DEPENDS "${COTIRE_ARGV2}") - else() - # executing custom command, no need to re-check for dependencies - set (_dependsOption "") - endif() - - cotire_select_unity_source_files("${COTIRE_ARGV3}" _sources ${_sources}) - - cotire_generate_unity_source( - "${COTIRE_ARGV3}" ${_sources} - LANGUAGE "${COTIRE_TARGET_LANGUAGE}" - SOURCES_COMPILE_DEFINITIONS ${_sourcesDefinitions} - PRE_UNDEFS ${_targetPreUndefs} - POST_UNDEFS ${_targetPostUndefs} - SOURCES_PRE_UNDEFS ${_sourcesPreUndefs} - SOURCES_POST_UNDEFS ${_sourcesPostUndefs} - ${_dependsOption}) - - elseif ("${COTIRE_ARGV1}" STREQUAL "prefix") - - if (XCODE) - # executing pre-build action under Xcode, check dependency on unity file and prefix dependencies - set (_dependsOption DEPENDS "${COTIRE_ARGV4}" ${COTIRE_TARGET_PREFIX_DEPENDS}) - else() - # executing custom command, no need to re-check for dependencies - set (_dependsOption "") - endif() - - set (_files "") - foreach (_index RANGE 4 ${COTIRE_ARGC}) - if (COTIRE_ARGV${_index}) - list (APPEND _files "${COTIRE_ARGV${_index}}") - endif() - endforeach() - - cotire_generate_prefix_header( - "${COTIRE_ARGV3}" ${_files} - COMPILER_LAUNCHER "${COTIRE_TARGET_${COTIRE_TARGET_LANGUAGE}_COMPILER_LAUNCHER}" - COMPILER_EXECUTABLE "${CMAKE_${COTIRE_TARGET_LANGUAGE}_COMPILER}" - COMPILER_ARG1 ${CMAKE_${COTIRE_TARGET_LANGUAGE}_COMPILER_ARG1} - COMPILER_ID "${CMAKE_${COTIRE_TARGET_LANGUAGE}_COMPILER_ID}" - COMPILER_VERSION "${CMAKE_${COTIRE_TARGET_LANGUAGE}_COMPILER_VERSION}" - LANGUAGE "${COTIRE_TARGET_LANGUAGE}" - IGNORE_PATH "${COTIRE_TARGET_IGNORE_PATH};${COTIRE_ADDITIONAL_PREFIX_HEADER_IGNORE_PATH}" - INCLUDE_PATH ${COTIRE_TARGET_INCLUDE_PATH} - IGNORE_EXTENSIONS "${CMAKE_${COTIRE_TARGET_LANGUAGE}_SOURCE_FILE_EXTENSIONS};${COTIRE_ADDITIONAL_PREFIX_HEADER_IGNORE_EXTENSIONS}" - INCLUDE_PRIORITY_PATH ${COTIRE_TARGET_INCLUDE_PRIORITY_PATH} - INCLUDE_DIRECTORIES ${_includeDirs} - SYSTEM_INCLUDE_DIRECTORIES ${_systemIncludeDirs} - COMPILE_DEFINITIONS ${_compileDefinitions} - COMPILE_FLAGS ${_compileFlags} - ${_dependsOption}) - - elseif ("${COTIRE_ARGV1}" STREQUAL "precompile") - - set (_files "") - foreach (_index RANGE 5 ${COTIRE_ARGC}) - if (COTIRE_ARGV${_index}) - list (APPEND _files "${COTIRE_ARGV${_index}}") - endif() - endforeach() - - cotire_precompile_prefix_header( - "${COTIRE_ARGV3}" "${COTIRE_ARGV4}" "${COTIRE_ARGV5}" - COMPILER_LAUNCHER "${COTIRE_TARGET_${COTIRE_TARGET_LANGUAGE}_COMPILER_LAUNCHER}" - COMPILER_EXECUTABLE "${CMAKE_${COTIRE_TARGET_LANGUAGE}_COMPILER}" - COMPILER_ARG1 ${CMAKE_${COTIRE_TARGET_LANGUAGE}_COMPILER_ARG1} - COMPILER_ID "${CMAKE_${COTIRE_TARGET_LANGUAGE}_COMPILER_ID}" - COMPILER_VERSION "${CMAKE_${COTIRE_TARGET_LANGUAGE}_COMPILER_VERSION}" - LANGUAGE "${COTIRE_TARGET_LANGUAGE}" - INCLUDE_DIRECTORIES ${_includeDirs} - SYSTEM_INCLUDE_DIRECTORIES ${_systemIncludeDirs} - COMPILE_DEFINITIONS ${_compileDefinitions} - COMPILE_FLAGS ${_compileFlags}) - - elseif ("${COTIRE_ARGV1}" STREQUAL "combine") - - if (COTIRE_TARGET_LANGUAGE) - set (_combinedFile "${COTIRE_ARGV3}") - set (_startIndex 4) - else() - set (_combinedFile "${COTIRE_ARGV2}") - set (_startIndex 3) - endif() - set (_files "") - foreach (_index RANGE ${_startIndex} ${COTIRE_ARGC}) - if (COTIRE_ARGV${_index}) - list (APPEND _files "${COTIRE_ARGV${_index}}") - endif() - endforeach() - - if (XCODE) - # executing pre-build action under Xcode, check dependency on files to be combined - set (_dependsOption DEPENDS ${_files}) - else() - # executing custom command, no need to re-check for dependencies - set (_dependsOption "") - endif() - - if (COTIRE_TARGET_LANGUAGE) - cotire_generate_unity_source( - "${_combinedFile}" ${_files} - LANGUAGE "${COTIRE_TARGET_LANGUAGE}" - ${_dependsOption}) - else() - cotire_generate_unity_source("${_combinedFile}" ${_files} ${_dependsOption}) - endif() - - elseif ("${COTIRE_ARGV1}" STREQUAL "cleanup") - - cotire_cleanup("${COTIRE_ARGV2}" "${COTIRE_ARGV3}" "${COTIRE_ARGV4}") - - else() - message (FATAL_ERROR "cotire: unknown command \"${COTIRE_ARGV1}\".") - endif() - -else() - - # cotire is being run in include mode - # set up all variable and property definitions - - if (NOT DEFINED COTIRE_DEBUG_INIT) - if (DEFINED COTIRE_DEBUG) - set (COTIRE_DEBUG_INIT ${COTIRE_DEBUG}) - else() - set (COTIRE_DEBUG_INIT FALSE) - endif() - endif() - option (COTIRE_DEBUG "Enable cotire debugging output?" ${COTIRE_DEBUG_INIT}) - - if (NOT DEFINED COTIRE_VERBOSE_INIT) - if (DEFINED COTIRE_VERBOSE) - set (COTIRE_VERBOSE_INIT ${COTIRE_VERBOSE}) - else() - set (COTIRE_VERBOSE_INIT FALSE) - endif() - endif() - option (COTIRE_VERBOSE "Enable cotire verbose output?" ${COTIRE_VERBOSE_INIT}) - - set (COTIRE_ADDITIONAL_PREFIX_HEADER_IGNORE_EXTENSIONS "inc;inl;ipp" CACHE STRING - "Ignore headers with the listed file extensions from the generated prefix header.") - - set (COTIRE_ADDITIONAL_PREFIX_HEADER_IGNORE_PATH "" CACHE STRING - "Ignore headers from these directories when generating the prefix header.") - - set (COTIRE_UNITY_SOURCE_EXCLUDE_EXTENSIONS "m;mm" CACHE STRING - "Ignore sources with the listed file extensions from the generated unity source.") - - set (COTIRE_MINIMUM_NUMBER_OF_TARGET_SOURCES "2" CACHE STRING - "Minimum number of sources in target required to enable use of precompiled header.") - - if (NOT DEFINED COTIRE_MAXIMUM_NUMBER_OF_UNITY_INCLUDES_INIT) - if (DEFINED COTIRE_MAXIMUM_NUMBER_OF_UNITY_INCLUDES) - set (COTIRE_MAXIMUM_NUMBER_OF_UNITY_INCLUDES_INIT ${COTIRE_MAXIMUM_NUMBER_OF_UNITY_INCLUDES}) - elseif ("${CMAKE_GENERATOR}" MATCHES "JOM|Ninja|Visual Studio") - # enable parallelization for generators that run multiple jobs by default - set (COTIRE_MAXIMUM_NUMBER_OF_UNITY_INCLUDES_INIT "-j") - else() - set (COTIRE_MAXIMUM_NUMBER_OF_UNITY_INCLUDES_INIT "0") - endif() - endif() - set (COTIRE_MAXIMUM_NUMBER_OF_UNITY_INCLUDES "${COTIRE_MAXIMUM_NUMBER_OF_UNITY_INCLUDES_INIT}" CACHE STRING - "Maximum number of source files to include in a single unity source file.") - - if (NOT COTIRE_PREFIX_HEADER_FILENAME_SUFFIX) - set (COTIRE_PREFIX_HEADER_FILENAME_SUFFIX "_prefix") - endif() - if (NOT COTIRE_UNITY_SOURCE_FILENAME_SUFFIX) - set (COTIRE_UNITY_SOURCE_FILENAME_SUFFIX "_unity") - endif() - if (NOT COTIRE_INTDIR) - set (COTIRE_INTDIR "cotire") - endif() - if (NOT COTIRE_PCH_ALL_TARGET_NAME) - set (COTIRE_PCH_ALL_TARGET_NAME "all_pch") - endif() - if (NOT COTIRE_UNITY_BUILD_ALL_TARGET_NAME) - set (COTIRE_UNITY_BUILD_ALL_TARGET_NAME "all_unity") - endif() - if (NOT COTIRE_CLEAN_ALL_TARGET_NAME) - set (COTIRE_CLEAN_ALL_TARGET_NAME "clean_cotire") - endif() - if (NOT COTIRE_CLEAN_TARGET_SUFFIX) - set (COTIRE_CLEAN_TARGET_SUFFIX "_clean_cotire") - endif() - if (NOT COTIRE_PCH_TARGET_SUFFIX) - set (COTIRE_PCH_TARGET_SUFFIX "_pch") - endif() - if (MSVC) - # MSVC default PCH memory scaling factor of 100 percent (75 MB) is too small for template heavy C++ code - # use a bigger default factor of 170 percent (128 MB) - if (NOT DEFINED COTIRE_PCH_MEMORY_SCALING_FACTOR) - set (COTIRE_PCH_MEMORY_SCALING_FACTOR "170") - endif() - endif() - if (NOT COTIRE_UNITY_BUILD_TARGET_SUFFIX) - set (COTIRE_UNITY_BUILD_TARGET_SUFFIX "_unity") - endif() - if (NOT DEFINED COTIRE_TARGETS_FOLDER) - set (COTIRE_TARGETS_FOLDER "cotire") - endif() - if (NOT DEFINED COTIRE_UNITY_OUTPUT_DIRECTORY) - if ("${CMAKE_GENERATOR}" MATCHES "Ninja") - # generated Ninja build files do not work if the unity target produces the same output file as the cotired target - set (COTIRE_UNITY_OUTPUT_DIRECTORY "unity") - else() - set (COTIRE_UNITY_OUTPUT_DIRECTORY "") - endif() - endif() - - # define cotire cache variables - - define_property( - CACHED_VARIABLE PROPERTY "COTIRE_ADDITIONAL_PREFIX_HEADER_IGNORE_PATH" - BRIEF_DOCS "Ignore headers from these directories when generating the prefix header." - FULL_DOCS - "The variable can be set to a semicolon separated list of include directories." - "If a header file is found in one of these directories or sub-directories, it will be excluded from the generated prefix header." - "If not defined, defaults to empty list." - ) - - define_property( - CACHED_VARIABLE PROPERTY "COTIRE_ADDITIONAL_PREFIX_HEADER_IGNORE_EXTENSIONS" - BRIEF_DOCS "Ignore includes with the listed file extensions from the generated prefix header." - FULL_DOCS - "The variable can be set to a semicolon separated list of file extensions." - "If a header file extension matches one in the list, it will be excluded from the generated prefix header." - "Includes with an extension in CMAKE__SOURCE_FILE_EXTENSIONS are always ignored." - "If not defined, defaults to inc;inl;ipp." - ) - - define_property( - CACHED_VARIABLE PROPERTY "COTIRE_UNITY_SOURCE_EXCLUDE_EXTENSIONS" - BRIEF_DOCS "Exclude sources with the listed file extensions from the generated unity source." - FULL_DOCS - "The variable can be set to a semicolon separated list of file extensions." - "If a source file extension matches one in the list, it will be excluded from the generated unity source file." - "Source files with an extension in CMAKE__IGNORE_EXTENSIONS are always excluded." - "If not defined, defaults to m;mm." - ) - - define_property( - CACHED_VARIABLE PROPERTY "COTIRE_MINIMUM_NUMBER_OF_TARGET_SOURCES" - BRIEF_DOCS "Minimum number of sources in target required to enable use of precompiled header." - FULL_DOCS - "The variable can be set to an integer > 0." - "If a target contains less than that number of source files, cotire will not enable the use of the precompiled header for the target." - "If not defined, defaults to 2." - ) - - define_property( - CACHED_VARIABLE PROPERTY "COTIRE_MAXIMUM_NUMBER_OF_UNITY_INCLUDES" - BRIEF_DOCS "Maximum number of source files to include in a single unity source file." - FULL_DOCS - "This may be set to an integer >= 0." - "If 0, cotire will only create a single unity source file." - "If a target contains more than that number of source files, cotire will create multiple unity source files for it." - "Can be set to \"-j\" to optimize the count of unity source files for the number of available processor cores." - "Can be set to \"-j jobs\" to optimize the number of unity source files for the given number of simultaneous jobs." - "Is used to initialize the target property COTIRE_UNITY_SOURCE_MAXIMUM_NUMBER_OF_INCLUDES." - "Defaults to \"-j\" for the generators Visual Studio, JOM or Ninja. Defaults to 0 otherwise." - ) - - # define cotire directory properties - - define_property( - DIRECTORY PROPERTY "COTIRE_ENABLE_PRECOMPILED_HEADER" - BRIEF_DOCS "Modify build command of cotired targets added in this directory to make use of the generated precompiled header." - FULL_DOCS - "See target property COTIRE_ENABLE_PRECOMPILED_HEADER." - ) - - define_property( - DIRECTORY PROPERTY "COTIRE_ADD_UNITY_BUILD" - BRIEF_DOCS "Add a new target that performs a unity build for cotired targets added in this directory." - FULL_DOCS - "See target property COTIRE_ADD_UNITY_BUILD." - ) - - define_property( - DIRECTORY PROPERTY "COTIRE_ADD_CLEAN" - BRIEF_DOCS "Add a new target that cleans all cotire generated files for cotired targets added in this directory." - FULL_DOCS - "See target property COTIRE_ADD_CLEAN." - ) - - define_property( - DIRECTORY PROPERTY "COTIRE_PREFIX_HEADER_IGNORE_PATH" - BRIEF_DOCS "Ignore headers from these directories when generating the prefix header." - FULL_DOCS - "See target property COTIRE_PREFIX_HEADER_IGNORE_PATH." - ) - - define_property( - DIRECTORY PROPERTY "COTIRE_PREFIX_HEADER_INCLUDE_PATH" - BRIEF_DOCS "Honor headers from these directories when generating the prefix header." - FULL_DOCS - "See target property COTIRE_PREFIX_HEADER_INCLUDE_PATH." - ) - - define_property( - DIRECTORY PROPERTY "COTIRE_PREFIX_HEADER_INCLUDE_PRIORITY_PATH" - BRIEF_DOCS "Header paths matching one of these directories are put at the top of the prefix header." - FULL_DOCS - "See target property COTIRE_PREFIX_HEADER_INCLUDE_PRIORITY_PATH." - ) - - define_property( - DIRECTORY PROPERTY "COTIRE_UNITY_SOURCE_PRE_UNDEFS" - BRIEF_DOCS "Preprocessor undefs to place in the generated unity source file before the inclusion of each source file." - FULL_DOCS - "See target property COTIRE_UNITY_SOURCE_PRE_UNDEFS." - ) - - define_property( - DIRECTORY PROPERTY "COTIRE_UNITY_SOURCE_POST_UNDEFS" - BRIEF_DOCS "Preprocessor undefs to place in the generated unity source file after the inclusion of each source file." - FULL_DOCS - "See target property COTIRE_UNITY_SOURCE_POST_UNDEFS." - ) - - define_property( - DIRECTORY PROPERTY "COTIRE_UNITY_SOURCE_MAXIMUM_NUMBER_OF_INCLUDES" - BRIEF_DOCS "Maximum number of source files to include in a single unity source file." - FULL_DOCS - "See target property COTIRE_UNITY_SOURCE_MAXIMUM_NUMBER_OF_INCLUDES." - ) - - define_property( - DIRECTORY PROPERTY "COTIRE_UNITY_LINK_LIBRARIES_INIT" - BRIEF_DOCS "Define strategy for setting up the unity target's link libraries." - FULL_DOCS - "See target property COTIRE_UNITY_LINK_LIBRARIES_INIT." - ) - - # define cotire target properties - - define_property( - TARGET PROPERTY "COTIRE_ENABLE_PRECOMPILED_HEADER" INHERITED - BRIEF_DOCS "Modify this target's build command to make use of the generated precompiled header." - FULL_DOCS - "If this property is set to TRUE, cotire will modify the build command to make use of the generated precompiled header." - "Irrespective of the value of this property, cotire will setup custom commands to generate the unity source and prefix header for the target." - "For makefile based generators cotire will also set up a custom target to manually invoke the generation of the precompiled header." - "The target name will be set to this target's name with the suffix _pch appended." - "Inherited from directory." - "Defaults to TRUE." - ) - - define_property( - TARGET PROPERTY "COTIRE_ADD_UNITY_BUILD" INHERITED - BRIEF_DOCS "Add a new target that performs a unity build for this target." - FULL_DOCS - "If this property is set to TRUE, cotire creates a new target of the same type that uses the generated unity source file instead of the target sources." - "Most of the relevant target properties will be copied from this target to the new unity build target." - "Target dependencies and linked libraries have to be manually set up for the new unity build target." - "The unity target name will be set to this target's name with the suffix _unity appended." - "Inherited from directory." - "Defaults to TRUE." - ) - - define_property( - TARGET PROPERTY "COTIRE_ADD_CLEAN" INHERITED - BRIEF_DOCS "Add a new target that cleans all cotire generated files for this target." - FULL_DOCS - "If this property is set to TRUE, cotire creates a new target that clean all files (unity source, prefix header, precompiled header)." - "The clean target name will be set to this target's name with the suffix _clean_cotire appended." - "Inherited from directory." - "Defaults to FALSE." - ) - - define_property( - TARGET PROPERTY "COTIRE_PREFIX_HEADER_IGNORE_PATH" INHERITED - BRIEF_DOCS "Ignore headers from these directories when generating the prefix header." - FULL_DOCS - "The property can be set to a list of directories." - "If a header file is found in one of these directories or sub-directories, it will be excluded from the generated prefix header." - "Inherited from directory." - "If not set, this property is initialized to \${CMAKE_SOURCE_DIR};\${CMAKE_BINARY_DIR}." - ) - - define_property( - TARGET PROPERTY "COTIRE_PREFIX_HEADER_INCLUDE_PATH" INHERITED - BRIEF_DOCS "Honor headers from these directories when generating the prefix header." - FULL_DOCS - "The property can be set to a list of directories." - "If a header file is found in one of these directories or sub-directories, it will be included in the generated prefix header." - "If a header file is both selected by COTIRE_PREFIX_HEADER_IGNORE_PATH and COTIRE_PREFIX_HEADER_INCLUDE_PATH," - "the option which yields the closer relative path match wins." - "Inherited from directory." - "If not set, this property is initialized to the empty list." - ) - - define_property( - TARGET PROPERTY "COTIRE_PREFIX_HEADER_INCLUDE_PRIORITY_PATH" INHERITED - BRIEF_DOCS "Header paths matching one of these directories are put at the top of prefix header." - FULL_DOCS - "The property can be set to a list of directories." - "Header file paths matching one of these directories will be inserted at the beginning of the generated prefix header." - "Header files are sorted according to the order of the directories in the property." - "If not set, this property is initialized to the empty list." - ) - - define_property( - TARGET PROPERTY "COTIRE_UNITY_SOURCE_PRE_UNDEFS" INHERITED - BRIEF_DOCS "Preprocessor undefs to place in the generated unity source file before the inclusion of each target source file." - FULL_DOCS - "This may be set to a semicolon-separated list of preprocessor symbols." - "cotire will add corresponding #undef directives to the generated unit source file before each target source file." - "Inherited from directory." - "Defaults to empty string." - ) - - define_property( - TARGET PROPERTY "COTIRE_UNITY_SOURCE_POST_UNDEFS" INHERITED - BRIEF_DOCS "Preprocessor undefs to place in the generated unity source file after the inclusion of each target source file." - FULL_DOCS - "This may be set to a semicolon-separated list of preprocessor symbols." - "cotire will add corresponding #undef directives to the generated unit source file after each target source file." - "Inherited from directory." - "Defaults to empty string." - ) - - define_property( - TARGET PROPERTY "COTIRE_UNITY_SOURCE_MAXIMUM_NUMBER_OF_INCLUDES" INHERITED - BRIEF_DOCS "Maximum number of source files to include in a single unity source file." - FULL_DOCS - "This may be set to an integer > 0." - "If a target contains more than that number of source files, cotire will create multiple unity build files for it." - "If not set, cotire will only create a single unity source file." - "Inherited from directory." - "Defaults to empty." - ) - - define_property( - TARGET PROPERTY "COTIRE__UNITY_SOURCE_INIT" - BRIEF_DOCS "User provided unity source file to be used instead of the automatically generated one." - FULL_DOCS - "If set, cotire will only add the given file(s) to the generated unity source file." - "If not set, cotire will add all the target source files to the generated unity source file." - "The property can be set to a user provided unity source file." - "Defaults to empty." - ) - - define_property( - TARGET PROPERTY "COTIRE__PREFIX_HEADER_INIT" - BRIEF_DOCS "User provided prefix header file to be used instead of the automatically generated one." - FULL_DOCS - "If set, cotire will add the given header file(s) to the generated prefix header file." - "If not set, cotire will generate a prefix header by tracking the header files included by the unity source file." - "The property can be set to a user provided prefix header file (e.g., stdafx.h)." - "Defaults to empty." - ) - - define_property( - TARGET PROPERTY "COTIRE_UNITY_LINK_LIBRARIES_INIT" INHERITED - BRIEF_DOCS "Define strategy for setting up unity target's link libraries." - FULL_DOCS - "If this property is empty or set to NONE, the generated unity target's link libraries have to be set up manually." - "If this property is set to COPY, the unity target's link libraries will be copied from this target." - "If this property is set to COPY_UNITY, the unity target's link libraries will be copied from this target with considering existing unity targets." - "Inherited from directory." - "Defaults to empty." - ) - - define_property( - TARGET PROPERTY "COTIRE__UNITY_SOURCE" - BRIEF_DOCS "Read-only property. The generated unity source file(s)." - FULL_DOCS - "cotire sets this property to the path of the generated single computation unit source file for the target." - "Defaults to empty string." - ) - - define_property( - TARGET PROPERTY "COTIRE__PREFIX_HEADER" - BRIEF_DOCS "Read-only property. The generated prefix header file." - FULL_DOCS - "cotire sets this property to the full path of the generated language prefix header for the target." - "Defaults to empty string." - ) - - define_property( - TARGET PROPERTY "COTIRE__PRECOMPILED_HEADER" - BRIEF_DOCS "Read-only property. The generated precompiled header file." - FULL_DOCS - "cotire sets this property to the full path of the generated language precompiled header binary for the target." - "Defaults to empty string." - ) - - define_property( - TARGET PROPERTY "COTIRE_UNITY_TARGET_NAME" - BRIEF_DOCS "The name of the generated unity build target corresponding to this target." - FULL_DOCS - "This property can be set to the desired name of the unity target that will be created by cotire." - "If not set, the unity target name will be set to this target's name with the suffix _unity appended." - "After this target has been processed by cotire, the property is set to the actual name of the generated unity target." - "Defaults to empty string." - ) - - # define cotire source properties - - define_property( - SOURCE PROPERTY "COTIRE_EXCLUDED" - BRIEF_DOCS "Do not modify source file's build command." - FULL_DOCS - "If this property is set to TRUE, the source file's build command will not be modified to make use of the precompiled header." - "The source file will also be excluded from the generated unity source file." - "Source files that have their COMPILE_FLAGS property set will be excluded by default." - "Defaults to FALSE." - ) - - define_property( - SOURCE PROPERTY "COTIRE_DEPENDENCY" - BRIEF_DOCS "Add this source file to dependencies of the automatically generated prefix header file." - FULL_DOCS - "If this property is set to TRUE, the source file is added to dependencies of the generated prefix header file." - "If the file is modified, cotire will re-generate the prefix header source upon build." - "Defaults to FALSE." - ) - - define_property( - SOURCE PROPERTY "COTIRE_UNITY_SOURCE_PRE_UNDEFS" - BRIEF_DOCS "Preprocessor undefs to place in the generated unity source file before the inclusion of this source file." - FULL_DOCS - "This may be set to a semicolon-separated list of preprocessor symbols." - "cotire will add corresponding #undef directives to the generated unit source file before this file is included." - "Defaults to empty string." - ) - - define_property( - SOURCE PROPERTY "COTIRE_UNITY_SOURCE_POST_UNDEFS" - BRIEF_DOCS "Preprocessor undefs to place in the generated unity source file after the inclusion of this source file." - FULL_DOCS - "This may be set to a semicolon-separated list of preprocessor symbols." - "cotire will add corresponding #undef directives to the generated unit source file after this file is included." - "Defaults to empty string." - ) - - define_property( - SOURCE PROPERTY "COTIRE_START_NEW_UNITY_SOURCE" - BRIEF_DOCS "Start a new unity source file which includes this source file as the first one." - FULL_DOCS - "If this property is set to TRUE, cotire will complete the current unity file and start a new one." - "The new unity source file will include this source file as the first one." - "This property essentially works as a separator for unity source files." - "Defaults to FALSE." - ) - - define_property( - SOURCE PROPERTY "COTIRE_TARGET" - BRIEF_DOCS "Read-only property. Mark this source file as cotired for the given target." - FULL_DOCS - "cotire sets this property to the name of target, that the source file's build command has been altered for." - "Defaults to empty string." - ) - - message (STATUS "cotire ${COTIRE_CMAKE_MODULE_VERSION} loaded.") - -endif() \ No newline at end of file diff --git a/cmake-proxies/expat/CMakeLists.txt b/cmake-proxies/expat/CMakeLists.txt new file mode 100644 index 000000000..f3eca15c7 --- /dev/null +++ b/cmake-proxies/expat/CMakeLists.txt @@ -0,0 +1,47 @@ + +add_library( ${TARGET} STATIC ) + +list( APPEND SOURCES + PRIVATE + ${TARGET_ROOT}/lib/xmlparse.c + ${TARGET_ROOT}/lib/xmlrole.c + ${TARGET_ROOT}/lib/xmltok.c + ${TARGET_ROOT}/lib/xmltok_impl.c + ${TARGET_ROOT}/lib/xmltok_ns.c +) + +list( APPEND INCLUDES + PRIVATE + ${CMAKE_CURRENT_BINARY_DIR}/private + PUBLIC + ${TARGET_ROOT}/lib +) + +list( APPEND DEFINES + PRIVATE + HAVE_EXPAT_CONFIG_H +) + +check_symbol_exists( "getpagesize" "unistd.h" HAVE_GETPAGESIZE ) +check_symbol_exists( "bcopy" "strings.h" HAVE_BCOPY ) +check_symbol_exists( "memmove" "string.h" HAVE_MEMMOVE ) + +if( WORDS_BIGENDIAN ) + set( BYTEORDER 4321 ) +else( WORDS_BIGENDIAN ) + set( BYTEORDER 1234 ) +endif() + +set( XML_DTD OFF ) +set( XML_NS OFF ) + +configure_file( ${TARGET_ROOT}/expat_config.h.cmake private/expat_config.h ) + +organize_source( "${TARGET_ROOT}" "" "${SOURCES}" ) +target_sources( ${TARGET} PRIVATE ${SOURCES} ) +target_compile_definitions( ${TARGET} PRIVATE ${DEFINES} ) +target_compile_features( ${TARGET} PRIVATE ${FEATURES} ) +target_compile_options( ${TARGET} PRIVATE ${OPTIONS} ) +target_include_directories( ${TARGET} PRIVATE ${INCLUDES} ) +target_link_libraries( ${TARGET} PRIVATE ${LIBRARIES} ) + diff --git a/cmake-proxies/lame/CMakeLists.txt b/cmake-proxies/lame/CMakeLists.txt index 58d200a10..2ef3f3401 100644 --- a/cmake-proxies/lame/CMakeLists.txt +++ b/cmake-proxies/lame/CMakeLists.txt @@ -1,20 +1,96 @@ -#directory cmake-proxies/lame -#UNUSED -set( TARGET lame ) -set( TARGET_SOURCE ${LIB_SRC_DIRECTORY}${TARGET} ) -project( ${TARGET} ) -set( SOURCES -${TARGET_SOURCE}/lib/xmlparse.c -#${LIB_SRC_DIRECTORY}FileDialog/gtk/FileDialogPrivate.cpp #not on windows. -#${LIB_SRC_DIRECTORY}${TARGET}/win/FileDialogPrivate.cpp -) -# This defines the #define on both Windows and Linux. -add_definitions( ) -add_library( ${TARGET} MODULE ${SOURCES}) +add_library( ${TARGET} STATIC ) -target_include_directories( ${TARGET} PRIVATE +list( APPEND SOURCES + PRIVATE + # libmp3lame + ${TARGET_ROOT}/../libmp3lame/bitstream.c + ${TARGET_ROOT}/../libmp3lame/encoder.c + ${TARGET_ROOT}/../libmp3lame/fft.c + ${TARGET_ROOT}/../libmp3lame/gain_analysis.c + ${TARGET_ROOT}/../libmp3lame/id3tag.c + ${TARGET_ROOT}/../libmp3lame/lame.c + ${TARGET_ROOT}/../libmp3lame/mpglib_interface.c + ${TARGET_ROOT}/../libmp3lame/newmdct.c + ${TARGET_ROOT}/../libmp3lame/presets.c + ${TARGET_ROOT}/../libmp3lame/psymodel.c + ${TARGET_ROOT}/../libmp3lame/quantize.c + ${TARGET_ROOT}/../libmp3lame/quantize_pvt.c + ${TARGET_ROOT}/../libmp3lame/reservoir.c + ${TARGET_ROOT}/../libmp3lame/set_get.c + ${TARGET_ROOT}/../libmp3lame/tables.c + ${TARGET_ROOT}/../libmp3lame/takehiro.c + ${TARGET_ROOT}/../libmp3lame/util.c + ${TARGET_ROOT}/../libmp3lame/vbrquantize.c + ${TARGET_ROOT}/../libmp3lame/VbrTag.c + ${TARGET_ROOT}/../libmp3lame/version.c + ${TARGET_ROOT}/../libmp3lame/vector/xmm_quantize_sub.c + # mpglib + ${TARGET_ROOT}/../mpglib/common.c + ${TARGET_ROOT}/../mpglib/dct64_i386.c + ${TARGET_ROOT}/../mpglib/decode_i386.c + ${TARGET_ROOT}/../mpglib/interface.c + ${TARGET_ROOT}/../mpglib/layer1.c + ${TARGET_ROOT}/../mpglib/layer2.c + ${TARGET_ROOT}/../mpglib/layer3.c + ${TARGET_ROOT}/../mpglib/tabinit.c ) -target_link_libraries( ${TARGET} ) \ No newline at end of file +list( APPEND INCLUDES + PRIVATE + ${CMAKE_CURRENT_BINARY_DIR}/private + ${TARGET_ROOT}/../libmp3lame + ${TARGET_ROOT}/../mpglib + PUBLIC + ${CMAKE_CURRENT_BINARY_DIR}/public +) + +list( APPEND DEFINES + PRIVATE + HAVE_CONFIG_H +) + +set( HAVE_INT8_T SIZEOF_INT8_T ) +set( HAVE_INT16_T SIZEOF_INT16_T ) +set( HAVE_INT32_T SIZEOF_INT32_T ) +set( HAVE_INT64_T SIZEOF_INT64_T ) +set( HAVE_UINT16_T SIZEOF_UINT16_T ) +set( HAVE_UINT32_T SIZEOF_UINT32_T ) +set( HAVE_UINT64_T SIZEOF_UINT64_T ) + +if( SIZEOF_SHORT EQUAL 4 ) + set( A_INT32_T int ) +elseif( SIZEOF_INT EQUAL 4 ) + set( A_INT32_T int ) +elseif( SIZEOF_LONG EQUAL 4 ) + set( A_INT32_T long ) +endif() + +if( SIZEOF_INT EQUAL 8 ) + set( A_INT64_T int ) +elseif( SIZEOF_LONG EQUAL 8 ) + set( A_INT64_T long ) +elseif( SIZEOF_LONG_LONG EQUAL 8 ) + set( A_INT64_T long long ) +endif() + +set( DECODE_ON_THE_FLY 1 ) +set( HAVE_MPGLIB 1 ) +set( TAKEHIRO_IEEE754_HACK 1 ) +set( USE_FAST_LOG 1 ) +if( ${CMakeDetermineASM_NASMCompiler} ) + set( HAVE_NASM 1 ) +endif() + +configure_file( config.h.in private/config.h ) +configure_file( lame.h.in public/lame/lame.h ) + +#organize_source( "${TARGET_ROOT}" "" "${SOURCES}" ) +target_sources( ${TARGET} PRIVATE ${SOURCES} ) +target_compile_definitions( ${TARGET} PRIVATE ${DEFINES} ) +target_compile_features( ${TARGET} PRIVATE ${FEATURES} ) +target_compile_options( ${TARGET} PRIVATE ${OPTIONS} ) +target_include_directories( ${TARGET} PRIVATE ${INCLUDES} ) +target_link_libraries( ${TARGET} PRIVATE ${LIBRARIES} ) + diff --git a/cmake-proxies/lame/config.h.in b/cmake-proxies/lame/config.h.in new file mode 100644 index 000000000..fac60deee --- /dev/null +++ b/cmake-proxies/lame/config.h.in @@ -0,0 +1,371 @@ +/* config.h.in. Generated from configure.in by autoheader. */ + + +#ifndef LAME_CONFIG_H +#define LAME_CONFIG_H 1 + + +/* debug define */ +#cmakedefine ABORTFP 1 + +/* Define if building universal (internal helper macro) */ +#cmakedefine AC_APPLE_UNIVERSAL_BUILD 1 + +/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP + systems. This function is required for `alloca.c' support on those systems. + */ +#cmakedefine CRAY_STACKSEG_END @CRAY_STACKSEG_END@ + +/* Define to 1 if using `alloca.c'. */ +#cmakedefine C_ALLOCA 1 + +/* alot of debug output */ +#cmakedefine DEBUG 1 + +/* allow to compute a more accurate replaygain value */ +#cmakedefine DECODE_ON_THE_FLY 1 + +/* double is faster than float on Alpha */ +#cmakedefine FLOAT @FLOAT@ + +/* Define to 1 if you have `alloca', as a function or macro. */ +#cmakedefine HAVE_ALLOCA 1 + +/* Define to 1 if you have and it should be used (not on Ultrix). + */ +#cmakedefine HAVE_ALLOCA_H 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_DLFCN_H 1 + +/* we link against libefence */ +#cmakedefine HAVE_EFENCE 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_ERRNO_H 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_FCNTL_H 1 + +/* Define to 1 if you have the `gettimeofday' function. */ +#cmakedefine HAVE_GETTIMEOFDAY 1 + +/* Define if you have the iconv() function and it works. */ +#cmakedefine HAVE_ICONV 1 + +/* add ieee754_float32_t type */ +#cmakedefine HAVE_IEEE754_FLOAT32_T 1 +#ifndef HAVE_IEEE754_FLOAT32_T + typedef float ieee754_float32_t; +#endif + +/* add ieee754_float64_t type */ +#cmakedefine HAVE_IEEE754_FLOAT64_T 1 +#ifndef HAVE_IEEE754_FLOAT64_T + typedef double ieee754_float64_t; +#endif + +/* system has 80 bit floats */ +#cmakedefine HAVE_IEEE854_FLOAT80 1 + +/* add ieee854_float80_t type */ +#cmakedefine HAVE_IEEE854_FLOAT80_T 1 +#ifndef HAVE_IEEE854_FLOAT80_T + typedef long double ieee854_float80_t; +#endif + +/* add int16_t type */ +#cmakedefine HAVE_INT16_T 1 +#ifndef HAVE_INT16_T + typedef short int16_t; +#endif + +/* add int32_t type */ +#cmakedefine HAVE_INT32_T 1 +#ifndef HAVE_INT32_T +#define A_INT32_T @A_INT32_T@ + typedef A_INT32_T int32_t; +#endif + +/* add int64_t type */ +#cmakedefine HAVE_INT64_T 1 +#ifndef HAVE_INT64_T +#define A_INT64_T @A_INT64_T@ + typedef A_INT64_T int64_t; +#endif + +/* add int8_t type */ +#cmakedefine HAVE_INT8_T 1 +#ifndef HAVE_INT8_T + typedef char int8_t; +#endif + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_INTTYPES_H 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_LIMITS_H 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_LINUX_SOUNDCARD_H 1 + +/* Define to 1 if the type `long double' works and has more range or precision + than `double'. */ +#cmakedefine HAVE_LONG_DOUBLE 1 + +/* Define to 1 if the type `long double' works and has more range or precision + than `double'. */ +#cmakedefine HAVE_LONG_DOUBLE_WIDER 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_MEMORY_H 1 + +/* build with mpglib support */ +#cmakedefine HAVE_MPGLIB 1 + +/* have nasm */ +#cmakedefine HAVE_NASM 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_NCURSES_TERMCAP_H 1 + +/* Define to 1 if you have the `socket' function. */ +#cmakedefine HAVE_SOCKET 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_STDINT_H 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_STDLIB_H 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_STRINGS_H 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_STRING_H 1 + +/* Define to 1 if you have the `strtol' function. */ +#cmakedefine HAVE_STRTOL 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_SYS_SOUNDCARD_H 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_SYS_STAT_H 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_SYS_TIME_H 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_SYS_TYPES_H 1 + +/* have termcap */ +#cmakedefine HAVE_TERMCAP 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_TERMCAP_H 1 + +/* add uint16_t type */ +#cmakedefine HAVE_UINT16_T 1 +#ifndef HAVE_UINT16_T + typedef unsigned short uint16_t; +#endif + +/* add uint32_t type */ +#cmakedefine HAVE_UINT32_T 1 +#ifndef HAVE_UINT32_T +#define A_UINT32_T @A_UINT32_T@ + typedef A_UINT32_T uint32_t; +#endif + +/* add uint64_t type */ +#cmakedefine HAVE_UINT64_T 1 +#ifndef HAVE_UINT64_T +#define A_UINT64_T @A_UINT64_T@ + typedef A_UINT64_T uint64_t; +#endif + +/* add uint8_t type */ +#cmakedefine HAVE_UINT8_T 1 +#ifndef HAVE_UINT8_T + typedef unsigned char uint8_t; +#endif + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_UNISTD_H 1 + +/* Define if SSE intrinsics work. */ +#cmakedefine HAVE_XMMINTRIN_H 1 + +/* Define as const if the declaration of iconv() needs const. */ +#define ICONV_CONST @ICONV_CONST@ + +/* requested by Frank, seems to be temporary needed for a smooth transition */ +#cmakedefine LAME_LIBRARY_BUILD 1 + +/* set to 1 if you have libsndfile */ +#cmakedefine LIBSNDFILE 1 + +/* Define to the sub-directory where libtool stores uninstalled libraries. */ +#cmakedefine LT_OBJDIR @LT_OBJDIR@ + +/* use MMX version of choose_table */ +#cmakedefine MMX_choose_table 1 + +/* build without hooks for analyzer */ +#cmakedefine NOANALYSIS 1 + +/* Name of package */ +#cmakedefine PACKAGE "@PACKAGE@" + +/* Define to the address where bug reports for this package should be sent. */ +#cmakedefine PACKAGE_BUGREPORT "@PACKAGE_BUGREPORT@" + +/* Define to the full name of this package. */ +#cmakedefine PACKAGE_NAME "@PACKAGE_NAME@" + +/* Define to the full name and version of this package. */ +#cmakedefine PACKAGE_STRING "@PACKAGE_STRING@" + +/* Define to the one symbol short name of this package. */ +#cmakedefine PACKAGE_TARNAME "@PACKAGE_TARNAME@" + +/* Define to the home page for this package. */ +#cmakedefine PACKAGE_URL "@PACKAGE_URL@" + +/* Define to the version of this package. */ +#cmakedefine PACKAGE_VERSION "@PACKAGE_VERSION@" + +/* The size of `double', as computed by sizeof. */ +#define SIZEOF_DOUBLE @SIZEOF_DOUBLE@ + +/* The size of `float', as computed by sizeof. */ +#define SIZEOF_FLOAT @SIZEOF_FLOAT@ + +/* The size of `int', as computed by sizeof. */ +#define SIZEOF_INT @SIZEOF_INT@ + +/* The size of `long', as computed by sizeof. */ +#define SIZEOF_LONG @SIZEOF_LONG@ + +/* The size of `long double', as computed by sizeof. */ +#define SIZEOF_LONG_DOUBLE @SIZEOF_LONG_DOUBLE@ + +/* The size of `long long', as computed by sizeof. */ +#define SIZEOF_LONG_LONG @SIZEOF_LONG_LONG@ + +/* The size of `short', as computed by sizeof. */ +#define SIZEOF_SHORT @SIZEOF_SHORT@ + +/* The size of `unsigned int', as computed by sizeof. */ +#define SIZEOF_UNSIGNED_INT @SIZEOF_UNSIGNED_INT@ + +/* The size of `unsigned long', as computed by sizeof. */ +#define SIZEOF_UNSIGNED_LONG @SIZEOF_UNSIGNED_LONG@ + +/* The size of `unsigned long long', as computed by sizeof. */ +#define SIZEOF_UNSIGNED_LONG_LONG @SIZEOF_UNSIGNED_LONG_LONG@ + +/* The size of `unsigned short', as computed by sizeof. */ +#define SIZEOF_UNSIGNED_SHORT @SIZEOF_UNSIGNED_SHORT@ + +/* If using the C implementation of alloca, define if you know the + direction of stack growth for your system; otherwise it will be + automatically deduced at runtime. + STACK_DIRECTION > 0 => grows toward higher addresses + STACK_DIRECTION < 0 => grows toward lower addresses + STACK_DIRECTION = 0 => direction of growth unknown */ +#cmakedefine STACK_DIRECTION @STACK_DIRECTION@ + +/* Define to 1 if you have the ANSI C header files. */ +#cmakedefine STDC_HEADERS 1 + +/* IEEE754 compatible machine */ +#cmakedefine TAKEHIRO_IEEE754_HACK 1 + +/* Define to 1 if you can safely include both and . */ +#cmakedefine TIME_WITH_SYS_TIME 1 + +/* faster log implementation with less but enough precission */ +#cmakedefine USE_FAST_LOG 1 + +/* Enable extensions on AIX 3, Interix. */ +#ifndef _ALL_SOURCE +#cmakedefine _ALL_SOURCE 1 +#endif +/* Enable GNU extensions on systems that have them. */ +#ifndef _GNU_SOURCE +#cmakedefine _GNU_SOURCE 1 +#endif +/* Enable threading extensions on Solaris. */ +#ifndef _POSIX_PTHREAD_SEMANTICS +#cmakedefine _POSIX_PTHREAD_SEMANTICS 1 +#endif +/* Enable extensions on HP NonStop. */ +#ifndef _TANDEM_SOURCE +#cmakedefine _TANDEM_SOURCE 1 +#endif +/* Enable general extensions on Solaris. */ +#ifndef __EXTENSIONS__ +#cmakedefine __EXTENSIONS__ 1 +#endif + + +/* Version number of package */ +#cmakedefine VERSION "@VERSION@" + +/* Define if using the dmalloc debugging malloc package */ +#cmakedefine WITH_DMALLOC 1 + +/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most + significant byte first (like Motorola and SPARC, unlike Intel). */ +#if defined AC_APPLE_UNIVERSAL_BUILD +# if defined __BIG_ENDIAN__ +# define WORDS_BIGENDIAN 1 +# endif +#else +# ifndef WORDS_BIGENDIAN +#cmakedefine WORDS_BIGENDIAN 1 +# endif +#endif + +/* Enable large inode numbers on Mac OS X 10.5. */ +#ifndef _DARWIN_USE_64_BIT_INODE +# define _DARWIN_USE_64_BIT_INODE 1 +#endif + +/* Number of bits in a file offset, on hosts where this is settable. */ +#cmakedefine _FILE_OFFSET_BITS @_FILE_OFFSET_BITS@ + +/* Define for large files, on AIX-style hosts. */ +#cmakedefine _LARGE_FILES @_LARGE_FILES@ + +/* Define to 1 if on MINIX. */ +#cmakedefine _MINIX 1 + +/* Define to 2 if the system does not provide POSIX.1 features except with + this defined. */ +#cmakedefine _POSIX_1_SOURCE @_POSIX_1_SOURCE@ + +/* Define to 1 if you need to in order for `stat' and other things to work. */ +#cmakedefine _POSIX_SOURCE 1 + +/* we're on DEC Alpha */ +#cmakedefine __DECALPHA__ 1 + +/* work around a glibc bug */ +#cmakedefine __NO_MATH_INLINES 1 + +/* Define to empty if `const' does not conform to ANSI C. */ +#cmakedefine const @const@ + +/* Define to `__inline__' or `__inline' if that's what the C compiler + calls it, or to nothing if 'inline' is not supported under any name. */ +#ifndef __cplusplus +#cmakedefine inline @inline@ +#endif + +/* Define to `unsigned int' if does not define. */ +#cmakedefine size_t @size_t@ + +#endif /* LAME_CONFIG_H */ diff --git a/cmake-proxies/lame/lame.h.in b/cmake-proxies/lame/lame.h.in new file mode 100755 index 000000000..d5cd7292d --- /dev/null +++ b/cmake-proxies/lame/lame.h.in @@ -0,0 +1,1342 @@ +/* + * Interface to MP3 LAME encoding engine + * + * Copyright (c) 1999 Mark Taylor + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 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 + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library 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. + */ + +/* $Id: lame.h,v 1.192 2017/08/31 14:14:46 robert Exp $ */ + +#ifndef LAME_LAME_H +#define LAME_LAME_H + +/* for size_t typedef */ +#include +/* for va_list typedef */ +#include +/* for FILE typedef, TODO: remove when removing lame_mp3_tags_fid */ +#include + +#if defined(__cplusplus) +extern "C" { +#endif + +typedef void (*lame_report_function)(const char *format, va_list ap); + +#if defined(WIN32) || defined(_WIN32) +#undef CDECL +#define CDECL __cdecl +#else +#define CDECL +#endif + +//#define DEPRECATED_OR_OBSOLETE_CODE_REMOVED 1 + +typedef enum vbr_mode_e { + vbr_off=0, + vbr_mt, /* obsolete, same as vbr_mtrh */ + vbr_rh, + vbr_abr, + vbr_mtrh, + vbr_max_indicator, /* Don't use this! It's used for sanity checks. */ + vbr_default=vbr_mtrh /* change this to change the default VBR mode of LAME */ +} vbr_mode; + + +/* MPEG modes */ +typedef enum MPEG_mode_e { + STEREO = 0, + JOINT_STEREO, + DUAL_CHANNEL, /* LAME doesn't supports this! */ + MONO, + NOT_SET, + MAX_INDICATOR /* Don't use this! It's used for sanity checks. */ +} MPEG_mode; + +/* Padding types */ +typedef enum Padding_type_e { + PAD_NO = 0, + PAD_ALL, + PAD_ADJUST, + PAD_MAX_INDICATOR /* Don't use this! It's used for sanity checks. */ +} Padding_type; + + + +/*presets*/ +typedef enum preset_mode_e { + /*values from 8 to 320 should be reserved for abr bitrates*/ + /*for abr I'd suggest to directly use the targeted bitrate as a value*/ + ABR_8 = 8, + ABR_320 = 320, + + V9 = 410, /*Vx to match Lame and VBR_xx to match FhG*/ + VBR_10 = 410, + V8 = 420, + VBR_20 = 420, + V7 = 430, + VBR_30 = 430, + V6 = 440, + VBR_40 = 440, + V5 = 450, + VBR_50 = 450, + V4 = 460, + VBR_60 = 460, + V3 = 470, + VBR_70 = 470, + V2 = 480, + VBR_80 = 480, + V1 = 490, + VBR_90 = 490, + V0 = 500, + VBR_100 = 500, + + + + /*still there for compatibility*/ + R3MIX = 1000, + STANDARD = 1001, + EXTREME = 1002, + INSANE = 1003, + STANDARD_FAST = 1004, + EXTREME_FAST = 1005, + MEDIUM = 1006, + MEDIUM_FAST = 1007 +} preset_mode; + + +/*asm optimizations*/ +typedef enum asm_optimizations_e { + MMX = 1, + AMD_3DNOW = 2, + SSE = 3 +} asm_optimizations; + + +/* psychoacoustic model */ +typedef enum Psy_model_e { + PSY_GPSYCHO = 1, + PSY_NSPSYTUNE = 2 +} Psy_model; + + +/* buffer considerations */ +typedef enum buffer_constraint_e { + MDB_DEFAULT=0, + MDB_STRICT_ISO=1, + MDB_MAXIMUM=2 +} buffer_constraint; + + +struct lame_global_struct; +typedef struct lame_global_struct lame_global_flags; +typedef lame_global_flags *lame_t; + + + + +/*********************************************************************** + * + * The LAME API + * These functions should be called, in this order, for each + * MP3 file to be encoded. See the file "API" for more documentation + * + ***********************************************************************/ + + +/* + * REQUIRED: + * initialize the encoder. sets default for all encoder parameters, + * returns NULL if some malloc()'s failed + * otherwise returns pointer to structure needed for all future + * API calls. + */ +lame_global_flags * CDECL lame_init(void); +#if DEPRECATED_OR_OBSOLETE_CODE_REMOVED +#else +/* obsolete version */ +int CDECL lame_init_old(lame_global_flags *); +#endif + +/* + * OPTIONAL: + * set as needed to override defaults + */ + +/******************************************************************** + * input stream description + ***********************************************************************/ +/* number of samples. default = 2^32-1 */ +int CDECL lame_set_num_samples(lame_global_flags *, unsigned long); +unsigned long CDECL lame_get_num_samples(const lame_global_flags *); + +/* input sample rate in Hz. default = 44100hz */ +int CDECL lame_set_in_samplerate(lame_global_flags *, int); +int CDECL lame_get_in_samplerate(const lame_global_flags *); + +/* number of channels in input stream. default=2 */ +int CDECL lame_set_num_channels(lame_global_flags *, int); +int CDECL lame_get_num_channels(const lame_global_flags *); + +/* + scale the input by this amount before encoding. default=1 + (not used by decoding routines) +*/ +int CDECL lame_set_scale(lame_global_flags *, float); +float CDECL lame_get_scale(const lame_global_flags *); + +/* + scale the channel 0 (left) input by this amount before encoding. default=1 + (not used by decoding routines) +*/ +int CDECL lame_set_scale_left(lame_global_flags *, float); +float CDECL lame_get_scale_left(const lame_global_flags *); + +/* + scale the channel 1 (right) input by this amount before encoding. default=1 + (not used by decoding routines) +*/ +int CDECL lame_set_scale_right(lame_global_flags *, float); +float CDECL lame_get_scale_right(const lame_global_flags *); + +/* + output sample rate in Hz. default = 0, which means LAME picks best value + based on the amount of compression. MPEG only allows: + MPEG1 32, 44.1, 48khz + MPEG2 16, 22.05, 24 + MPEG2.5 8, 11.025, 12 + (not used by decoding routines) +*/ +int CDECL lame_set_out_samplerate(lame_global_flags *, int); +int CDECL lame_get_out_samplerate(const lame_global_flags *); + + +/******************************************************************** + * general control parameters + ***********************************************************************/ +/* 1=cause LAME to collect data for an MP3 frame analyzer. default=0 */ +int CDECL lame_set_analysis(lame_global_flags *, int); +int CDECL lame_get_analysis(const lame_global_flags *); + +/* + 1 = write a Xing VBR header frame. + default = 1 + this variable must have been added by a Hungarian notation Windows programmer :-) +*/ +int CDECL lame_set_bWriteVbrTag(lame_global_flags *, int); +int CDECL lame_get_bWriteVbrTag(const lame_global_flags *); + +/* 1=decode only. use lame/mpglib to convert mp3/ogg to wav. default=0 */ +int CDECL lame_set_decode_only(lame_global_flags *, int); +int CDECL lame_get_decode_only(const lame_global_flags *); + +#if DEPRECATED_OR_OBSOLETE_CODE_REMOVED +#else +/* 1=encode a Vorbis .ogg file. default=0 */ +/* DEPRECATED */ +int CDECL lame_set_ogg(lame_global_flags *, int); +int CDECL lame_get_ogg(const lame_global_flags *); +#endif + +/* + internal algorithm selection. True quality is determined by the bitrate + but this variable will effect quality by selecting expensive or cheap algorithms. + quality=0..9. 0=best (very slow). 9=worst. + recommended: 2 near-best quality, not too slow + 5 good quality, fast + 7 ok quality, really fast +*/ +int CDECL lame_set_quality(lame_global_flags *, int); +int CDECL lame_get_quality(const lame_global_flags *); + +/* + mode = 0,1,2,3 = stereo, jstereo, dual channel (not supported), mono + default: lame picks based on compression ration and input channels +*/ +int CDECL lame_set_mode(lame_global_flags *, MPEG_mode); +MPEG_mode CDECL lame_get_mode(const lame_global_flags *); + +#if DEPRECATED_OR_OBSOLETE_CODE_REMOVED +#else +/* + mode_automs. Use a M/S mode with a switching threshold based on + compression ratio + DEPRECATED +*/ +int CDECL lame_set_mode_automs(lame_global_flags *, int); +int CDECL lame_get_mode_automs(const lame_global_flags *); +#endif + +/* + force_ms. Force M/S for all frames. For testing only. + default = 0 (disabled) +*/ +int CDECL lame_set_force_ms(lame_global_flags *, int); +int CDECL lame_get_force_ms(const lame_global_flags *); + +/* use free_format? default = 0 (disabled) */ +int CDECL lame_set_free_format(lame_global_flags *, int); +int CDECL lame_get_free_format(const lame_global_flags *); + +/* perform ReplayGain analysis? default = 0 (disabled) */ +int CDECL lame_set_findReplayGain(lame_global_flags *, int); +int CDECL lame_get_findReplayGain(const lame_global_flags *); + +/* decode on the fly. Search for the peak sample. If the ReplayGain + * analysis is enabled then perform the analysis on the decoded data + * stream. default = 0 (disabled) + * NOTE: if this option is set the build-in decoder should not be used */ +int CDECL lame_set_decode_on_the_fly(lame_global_flags *, int); +int CDECL lame_get_decode_on_the_fly(const lame_global_flags *); + +#if DEPRECATED_OR_OBSOLETE_CODE_REMOVED +#else +/* DEPRECATED: now does the same as lame_set_findReplayGain() + default = 0 (disabled) */ +int CDECL lame_set_ReplayGain_input(lame_global_flags *, int); +int CDECL lame_get_ReplayGain_input(const lame_global_flags *); + +/* DEPRECATED: now does the same as + lame_set_decode_on_the_fly() && lame_set_findReplayGain() + default = 0 (disabled) */ +int CDECL lame_set_ReplayGain_decode(lame_global_flags *, int); +int CDECL lame_get_ReplayGain_decode(const lame_global_flags *); + +/* DEPRECATED: now does the same as lame_set_decode_on_the_fly() + default = 0 (disabled) */ +int CDECL lame_set_findPeakSample(lame_global_flags *, int); +int CDECL lame_get_findPeakSample(const lame_global_flags *); +#endif + +/* counters for gapless encoding */ +int CDECL lame_set_nogap_total(lame_global_flags*, int); +int CDECL lame_get_nogap_total(const lame_global_flags*); + +int CDECL lame_set_nogap_currentindex(lame_global_flags* , int); +int CDECL lame_get_nogap_currentindex(const lame_global_flags*); + + +/* + * OPTIONAL: + * Set printf like error/debug/message reporting functions. + * The second argument has to be a pointer to a function which looks like + * void my_debugf(const char *format, va_list ap) + * { + * (void) vfprintf(stdout, format, ap); + * } + * If you use NULL as the value of the pointer in the set function, the + * lame buildin function will be used (prints to stderr). + * To quiet any output you have to replace the body of the example function + * with just "return;" and use it in the set function. + */ +int CDECL lame_set_errorf(lame_global_flags *, lame_report_function); +int CDECL lame_set_debugf(lame_global_flags *, lame_report_function); +int CDECL lame_set_msgf (lame_global_flags *, lame_report_function); + + + +/* set one of brate compression ratio. default is compression ratio of 11. */ +int CDECL lame_set_brate(lame_global_flags *, int); +int CDECL lame_get_brate(const lame_global_flags *); +int CDECL lame_set_compression_ratio(lame_global_flags *, float); +float CDECL lame_get_compression_ratio(const lame_global_flags *); + + +int CDECL lame_set_preset( lame_global_flags* gfp, int ); +int CDECL lame_set_asm_optimizations( lame_global_flags* gfp, int, int ); + + + +/******************************************************************** + * frame params + ***********************************************************************/ +/* mark as copyright. default=0 */ +int CDECL lame_set_copyright(lame_global_flags *, int); +int CDECL lame_get_copyright(const lame_global_flags *); + +/* mark as original. default=1 */ +int CDECL lame_set_original(lame_global_flags *, int); +int CDECL lame_get_original(const lame_global_flags *); + +/* error_protection. Use 2 bytes from each frame for CRC checksum. default=0 */ +int CDECL lame_set_error_protection(lame_global_flags *, int); +int CDECL lame_get_error_protection(const lame_global_flags *); + +#if DEPRECATED_OR_OBSOLETE_CODE_REMOVED +#else +/* padding_type. 0=pad no frames 1=pad all frames 2=adjust padding(default) */ +int CDECL lame_set_padding_type(lame_global_flags *, Padding_type); +Padding_type CDECL lame_get_padding_type(const lame_global_flags *); +#endif + +/* MP3 'private extension' bit Meaningless. default=0 */ +int CDECL lame_set_extension(lame_global_flags *, int); +int CDECL lame_get_extension(const lame_global_flags *); + +/* enforce strict ISO compliance. default=0 */ +int CDECL lame_set_strict_ISO(lame_global_flags *, int); +int CDECL lame_get_strict_ISO(const lame_global_flags *); + + +/******************************************************************** + * quantization/noise shaping + ***********************************************************************/ + +/* disable the bit reservoir. For testing only. default=0 */ +int CDECL lame_set_disable_reservoir(lame_global_flags *, int); +int CDECL lame_get_disable_reservoir(const lame_global_flags *); + +/* select a different "best quantization" function. default=0 */ +int CDECL lame_set_quant_comp(lame_global_flags *, int); +int CDECL lame_get_quant_comp(const lame_global_flags *); +int CDECL lame_set_quant_comp_short(lame_global_flags *, int); +int CDECL lame_get_quant_comp_short(const lame_global_flags *); + +int CDECL lame_set_experimentalX(lame_global_flags *, int); /* compatibility*/ +int CDECL lame_get_experimentalX(const lame_global_flags *); + +/* another experimental option. for testing only */ +int CDECL lame_set_experimentalY(lame_global_flags *, int); +int CDECL lame_get_experimentalY(const lame_global_flags *); + +/* another experimental option. for testing only */ +int CDECL lame_set_experimentalZ(lame_global_flags *, int); +int CDECL lame_get_experimentalZ(const lame_global_flags *); + +/* Naoki's psycho acoustic model. default=0 */ +int CDECL lame_set_exp_nspsytune(lame_global_flags *, int); +int CDECL lame_get_exp_nspsytune(const lame_global_flags *); + +void CDECL lame_set_msfix(lame_global_flags *, double); +float CDECL lame_get_msfix(const lame_global_flags *); + + +/******************************************************************** + * VBR control + ***********************************************************************/ +/* Types of VBR. default = vbr_off = CBR */ +int CDECL lame_set_VBR(lame_global_flags *, vbr_mode); +vbr_mode CDECL lame_get_VBR(const lame_global_flags *); + +/* VBR quality level. 0=highest 9=lowest */ +int CDECL lame_set_VBR_q(lame_global_flags *, int); +int CDECL lame_get_VBR_q(const lame_global_flags *); + +/* VBR quality level. 0=highest 9=lowest, Range [0,...,10[ */ +int CDECL lame_set_VBR_quality(lame_global_flags *, float); +float CDECL lame_get_VBR_quality(const lame_global_flags *); + +/* Ignored except for VBR=vbr_abr (ABR mode) */ +int CDECL lame_set_VBR_mean_bitrate_kbps(lame_global_flags *, int); +int CDECL lame_get_VBR_mean_bitrate_kbps(const lame_global_flags *); + +int CDECL lame_set_VBR_min_bitrate_kbps(lame_global_flags *, int); +int CDECL lame_get_VBR_min_bitrate_kbps(const lame_global_flags *); + +int CDECL lame_set_VBR_max_bitrate_kbps(lame_global_flags *, int); +int CDECL lame_get_VBR_max_bitrate_kbps(const lame_global_flags *); + +/* + 1=strictly enforce VBR_min_bitrate. Normally it will be violated for + analog silence +*/ +int CDECL lame_set_VBR_hard_min(lame_global_flags *, int); +int CDECL lame_get_VBR_hard_min(const lame_global_flags *); + +/* for preset */ +#if DEPRECATED_OR_OBSOLETE_CODE_REMOVED +#else +int CDECL lame_set_preset_expopts(lame_global_flags *, int); +#endif + +/******************************************************************** + * Filtering control + ***********************************************************************/ +/* freq in Hz to apply lowpass. Default = 0 = lame chooses. -1 = disabled */ +int CDECL lame_set_lowpassfreq(lame_global_flags *, int); +int CDECL lame_get_lowpassfreq(const lame_global_flags *); +/* width of transition band, in Hz. Default = one polyphase filter band */ +int CDECL lame_set_lowpasswidth(lame_global_flags *, int); +int CDECL lame_get_lowpasswidth(const lame_global_flags *); + +/* freq in Hz to apply highpass. Default = 0 = lame chooses. -1 = disabled */ +int CDECL lame_set_highpassfreq(lame_global_flags *, int); +int CDECL lame_get_highpassfreq(const lame_global_flags *); +/* width of transition band, in Hz. Default = one polyphase filter band */ +int CDECL lame_set_highpasswidth(lame_global_flags *, int); +int CDECL lame_get_highpasswidth(const lame_global_flags *); + + +/******************************************************************** + * psycho acoustics and other arguments which you should not change + * unless you know what you are doing + ***********************************************************************/ + +/* only use ATH for masking */ +int CDECL lame_set_ATHonly(lame_global_flags *, int); +int CDECL lame_get_ATHonly(const lame_global_flags *); + +/* only use ATH for short blocks */ +int CDECL lame_set_ATHshort(lame_global_flags *, int); +int CDECL lame_get_ATHshort(const lame_global_flags *); + +/* disable ATH */ +int CDECL lame_set_noATH(lame_global_flags *, int); +int CDECL lame_get_noATH(const lame_global_flags *); + +/* select ATH formula */ +int CDECL lame_set_ATHtype(lame_global_flags *, int); +int CDECL lame_get_ATHtype(const lame_global_flags *); + +/* lower ATH by this many db */ +int CDECL lame_set_ATHlower(lame_global_flags *, float); +float CDECL lame_get_ATHlower(const lame_global_flags *); + +/* select ATH adaptive adjustment type */ +int CDECL lame_set_athaa_type( lame_global_flags *, int); +int CDECL lame_get_athaa_type( const lame_global_flags *); + +#if DEPRECATED_OR_OBSOLETE_CODE_REMOVED +#else +/* select the loudness approximation used by the ATH adaptive auto-leveling */ +int CDECL lame_set_athaa_loudapprox( lame_global_flags *, int); +int CDECL lame_get_athaa_loudapprox( const lame_global_flags *); +#endif + +/* adjust (in dB) the point below which adaptive ATH level adjustment occurs */ +int CDECL lame_set_athaa_sensitivity( lame_global_flags *, float); +float CDECL lame_get_athaa_sensitivity( const lame_global_flags* ); + +#if DEPRECATED_OR_OBSOLETE_CODE_REMOVED +#else +/* OBSOLETE: predictability limit (ISO tonality formula) */ +int CDECL lame_set_cwlimit(lame_global_flags *, int); +int CDECL lame_get_cwlimit(const lame_global_flags *); +#endif + +/* + allow blocktypes to differ between channels? + default: 0 for jstereo, 1 for stereo +*/ +int CDECL lame_set_allow_diff_short(lame_global_flags *, int); +int CDECL lame_get_allow_diff_short(const lame_global_flags *); + +/* use temporal masking effect (default = 1) */ +int CDECL lame_set_useTemporal(lame_global_flags *, int); +int CDECL lame_get_useTemporal(const lame_global_flags *); + +/* use temporal masking effect (default = 1) */ +int CDECL lame_set_interChRatio(lame_global_flags *, float); +float CDECL lame_get_interChRatio(const lame_global_flags *); + +/* disable short blocks */ +int CDECL lame_set_no_short_blocks(lame_global_flags *, int); +int CDECL lame_get_no_short_blocks(const lame_global_flags *); + +/* force short blocks */ +int CDECL lame_set_force_short_blocks(lame_global_flags *, int); +int CDECL lame_get_force_short_blocks(const lame_global_flags *); + +/* Input PCM is emphased PCM (for instance from one of the rarely + emphased CDs), it is STRONGLY not recommended to use this, because + psycho does not take it into account, and last but not least many decoders + ignore these bits */ +int CDECL lame_set_emphasis(lame_global_flags *, int); +int CDECL lame_get_emphasis(const lame_global_flags *); + + + +/************************************************************************/ +/* internal variables, cannot be set... */ +/* provided because they may be of use to calling application */ +/************************************************************************/ +/* version 0=MPEG-2 1=MPEG-1 (2=MPEG-2.5) */ +int CDECL lame_get_version(const lame_global_flags *); + +/* encoder delay */ +int CDECL lame_get_encoder_delay(const lame_global_flags *); + +/* + padding appended to the input to make sure decoder can fully decode + all input. Note that this value can only be calculated during the + call to lame_encoder_flush(). Before lame_encoder_flush() has + been called, the value of encoder_padding = 0. +*/ +int CDECL lame_get_encoder_padding(const lame_global_flags *); + +/* size of MPEG frame */ +int CDECL lame_get_framesize(const lame_global_flags *); + +/* number of PCM samples buffered, but not yet encoded to mp3 data. */ +int CDECL lame_get_mf_samples_to_encode( const lame_global_flags* gfp ); + +/* + size (bytes) of mp3 data buffered, but not yet encoded. + this is the number of bytes which would be output by a call to + lame_encode_flush_nogap. NOTE: lame_encode_flush() will return + more bytes than this because it will encode the reamining buffered + PCM samples before flushing the mp3 buffers. +*/ +int CDECL lame_get_size_mp3buffer( const lame_global_flags* gfp ); + +/* number of frames encoded so far */ +int CDECL lame_get_frameNum(const lame_global_flags *); + +/* + lame's estimate of the total number of frames to be encoded + only valid if calling program set num_samples +*/ +int CDECL lame_get_totalframes(const lame_global_flags *); + +/* RadioGain value. Multiplied by 10 and rounded to the nearest. */ +int CDECL lame_get_RadioGain(const lame_global_flags *); + +/* AudiophileGain value. Multipled by 10 and rounded to the nearest. */ +int CDECL lame_get_AudiophileGain(const lame_global_flags *); + +/* the peak sample */ +float CDECL lame_get_PeakSample(const lame_global_flags *); + +/* Gain change required for preventing clipping. The value is correct only if + peak sample searching was enabled. If negative then the waveform + already does not clip. The value is multiplied by 10 and rounded up. */ +int CDECL lame_get_noclipGainChange(const lame_global_flags *); + +/* user-specified scale factor required for preventing clipping. Value is + correct only if peak sample searching was enabled and no user-specified + scaling was performed. If negative then either the waveform already does + not clip or the value cannot be determined */ +float CDECL lame_get_noclipScale(const lame_global_flags *); + +/* returns the limit of PCM samples, which one can pass in an encode call + under the constrain of a provided buffer of size buffer_size */ +int CDECL lame_get_maximum_number_of_samples(lame_t gfp, size_t buffer_size); + + + + +/* + * REQUIRED: + * sets more internal configuration based on data provided above. + * returns -1 if something failed. + */ +int CDECL lame_init_params(lame_global_flags *); + + +/* + * OPTIONAL: + * get the version number, in a string. of the form: + * "3.63 (beta)" or just "3.63". + */ +const char* CDECL get_lame_version ( void ); +const char* CDECL get_lame_short_version ( void ); +const char* CDECL get_lame_very_short_version ( void ); +const char* CDECL get_psy_version ( void ); +const char* CDECL get_lame_url ( void ); +const char* CDECL get_lame_os_bitness ( void ); + +/* + * OPTIONAL: + * get the version numbers in numerical form. + */ +typedef struct { + /* generic LAME version */ + int major; + int minor; + int alpha; /* 0 if not an alpha version */ + int beta; /* 0 if not a beta version */ + + /* version of the psy model */ + int psy_major; + int psy_minor; + int psy_alpha; /* 0 if not an alpha version */ + int psy_beta; /* 0 if not a beta version */ + + /* compile time features */ + const char *features; /* Don't make assumptions about the contents! */ +} lame_version_t; +void CDECL get_lame_version_numerical(lame_version_t *); + + +/* + * OPTIONAL: + * print internal lame configuration to message handler + */ +void CDECL lame_print_config(const lame_global_flags* gfp); + +void CDECL lame_print_internals( const lame_global_flags *gfp); + + +/* + * input pcm data, output (maybe) mp3 frames. + * This routine handles all buffering, resampling and filtering for you. + * + * return code number of bytes output in mp3buf. Can be 0 + * -1: mp3buf was too small + * -2: malloc() problem + * -3: lame_init_params() not called + * -4: psycho acoustic problems + * + * The required mp3buf_size can be computed from num_samples, + * samplerate and encoding rate, but here is a worst case estimate: + * + * mp3buf_size in bytes = 1.25*num_samples + 7200 + * + * I think a tighter bound could be: (mt, March 2000) + * MPEG1: + * num_samples*(bitrate/8)/samplerate + 4*1152*(bitrate/8)/samplerate + 512 + * MPEG2: + * num_samples*(bitrate/8)/samplerate + 4*576*(bitrate/8)/samplerate + 256 + * + * but test first if you use that! + * + * set mp3buf_size = 0 and LAME will not check if mp3buf_size is + * large enough. + * + * NOTE: + * if gfp->num_channels=2, but gfp->mode = 3 (mono), the L & R channels + * will be averaged into the L channel before encoding only the L channel + * This will overwrite the data in buffer_l[] and buffer_r[]. + * +*/ +int CDECL lame_encode_buffer ( + lame_global_flags* gfp, /* global context handle */ + const short int buffer_l [], /* PCM data for left channel */ + const short int buffer_r [], /* PCM data for right channel */ + const int nsamples, /* number of samples per channel */ + unsigned char* mp3buf, /* pointer to encoded MP3 stream */ + const int mp3buf_size ); /* number of valid octets in this + stream */ + +/* + * as above, but input has L & R channel data interleaved. + * NOTE: + * num_samples = number of samples in the L (or R) + * channel, not the total number of samples in pcm[] + */ +int CDECL lame_encode_buffer_interleaved( + lame_global_flags* gfp, /* global context handlei */ + short int pcm[], /* PCM data for left and right + channel, interleaved */ + int num_samples, /* number of samples per channel, + _not_ number of samples in + pcm[] */ + unsigned char* mp3buf, /* pointer to encoded MP3 stream */ + int mp3buf_size ); /* number of valid octets in this + stream */ + + +/* as lame_encode_buffer, but for 'float's. + * !! NOTE: !! data must still be scaled to be in the same range as + * short int, +/- 32768 + */ +int CDECL lame_encode_buffer_float( + lame_global_flags* gfp, /* global context handle */ + const float pcm_l [], /* PCM data for left channel */ + const float pcm_r [], /* PCM data for right channel */ + const int nsamples, /* number of samples per channel */ + unsigned char* mp3buf, /* pointer to encoded MP3 stream */ + const int mp3buf_size ); /* number of valid octets in this + stream */ + +/* as lame_encode_buffer, but for 'float's. + * !! NOTE: !! data must be scaled to +/- 1 full scale + */ +int CDECL lame_encode_buffer_ieee_float( + lame_t gfp, + const float pcm_l [], /* PCM data for left channel */ + const float pcm_r [], /* PCM data for right channel */ + const int nsamples, + unsigned char * mp3buf, + const int mp3buf_size); +int CDECL lame_encode_buffer_interleaved_ieee_float( + lame_t gfp, + const float pcm[], /* PCM data for left and right + channel, interleaved */ + const int nsamples, + unsigned char * mp3buf, + const int mp3buf_size); + +/* as lame_encode_buffer, but for 'double's. + * !! NOTE: !! data must be scaled to +/- 1 full scale + */ +int CDECL lame_encode_buffer_ieee_double( + lame_t gfp, + const double pcm_l [], /* PCM data for left channel */ + const double pcm_r [], /* PCM data for right channel */ + const int nsamples, + unsigned char * mp3buf, + const int mp3buf_size); +int CDECL lame_encode_buffer_interleaved_ieee_double( + lame_t gfp, + const double pcm[], /* PCM data for left and right + channel, interleaved */ + const int nsamples, + unsigned char * mp3buf, + const int mp3buf_size); + +/* as lame_encode_buffer, but for long's + * !! NOTE: !! data must still be scaled to be in the same range as + * short int, +/- 32768 + * + * This scaling was a mistake (doesn't allow one to exploit full + * precision of type 'long'. Use lame_encode_buffer_long2() instead. + * + */ +int CDECL lame_encode_buffer_long( + lame_global_flags* gfp, /* global context handle */ + const long buffer_l [], /* PCM data for left channel */ + const long buffer_r [], /* PCM data for right channel */ + const int nsamples, /* number of samples per channel */ + unsigned char* mp3buf, /* pointer to encoded MP3 stream */ + const int mp3buf_size ); /* number of valid octets in this + stream */ + +/* Same as lame_encode_buffer_long(), but with correct scaling. + * !! NOTE: !! data must still be scaled to be in the same range as + * type 'long'. Data should be in the range: +/- 2^(8*size(long)-1) + * + */ +int CDECL lame_encode_buffer_long2( + lame_global_flags* gfp, /* global context handle */ + const long buffer_l [], /* PCM data for left channel */ + const long buffer_r [], /* PCM data for right channel */ + const int nsamples, /* number of samples per channel */ + unsigned char* mp3buf, /* pointer to encoded MP3 stream */ + const int mp3buf_size ); /* number of valid octets in this + stream */ + +/* as lame_encode_buffer, but for int's + * !! NOTE: !! input should be scaled to the maximum range of 'int' + * If int is 4 bytes, then the values should range from + * +/- 2147483648. + * + * This routine does not (and cannot, without loosing precision) use + * the same scaling as the rest of the lame_encode_buffer() routines. + * + */ +int CDECL lame_encode_buffer_int( + lame_global_flags* gfp, /* global context handle */ + const int buffer_l [], /* PCM data for left channel */ + const int buffer_r [], /* PCM data for right channel */ + const int nsamples, /* number of samples per channel */ + unsigned char* mp3buf, /* pointer to encoded MP3 stream */ + const int mp3buf_size ); /* number of valid octets in this + stream */ + +/* + * as above, but for interleaved data. + * !! NOTE: !! data must still be scaled to be in the same range as + * type 'int32_t'. Data should be in the range: +/- 2^(8*size(int32_t)-1) + * NOTE: + * num_samples = number of samples in the L (or R) + * channel, not the total number of samples in pcm[] + */ +int +lame_encode_buffer_interleaved_int( + lame_t gfp, + const int pcm [], /* PCM data for left and right + channel, interleaved */ + const int nsamples, /* number of samples per channel, + _not_ number of samples in + pcm[] */ + unsigned char* mp3buf, /* pointer to encoded MP3 stream */ + const int mp3buf_size ); /* number of valid octets in this + stream */ + + + +/* + * REQUIRED: + * lame_encode_flush will flush the intenal PCM buffers, padding with + * 0's to make sure the final frame is complete, and then flush + * the internal MP3 buffers, and thus may return a + * final few mp3 frames. 'mp3buf' should be at least 7200 bytes long + * to hold all possible emitted data. + * + * will also write id3v1 tags (if any) into the bitstream + * + * return code = number of bytes output to mp3buf. Can be 0 + */ +int CDECL lame_encode_flush( + lame_global_flags * gfp, /* global context handle */ + unsigned char* mp3buf, /* pointer to encoded MP3 stream */ + int size); /* number of valid octets in this stream */ + +/* + * OPTIONAL: + * lame_encode_flush_nogap will flush the internal mp3 buffers and pad + * the last frame with ancillary data so it is a complete mp3 frame. + * + * 'mp3buf' should be at least 7200 bytes long + * to hold all possible emitted data. + * + * After a call to this routine, the outputed mp3 data is complete, but + * you may continue to encode new PCM samples and write future mp3 data + * to a different file. The two mp3 files will play back with no gaps + * if they are concatenated together. + * + * This routine will NOT write id3v1 tags into the bitstream. + * + * return code = number of bytes output to mp3buf. Can be 0 + */ +int CDECL lame_encode_flush_nogap( + lame_global_flags * gfp, /* global context handle */ + unsigned char* mp3buf, /* pointer to encoded MP3 stream */ + int size); /* number of valid octets in this stream */ + +/* + * OPTIONAL: + * Normally, this is called by lame_init_params(). It writes id3v2 and + * Xing headers into the front of the bitstream, and sets frame counters + * and bitrate histogram data to 0. You can also call this after + * lame_encode_flush_nogap(). + */ +int CDECL lame_init_bitstream( + lame_global_flags * gfp); /* global context handle */ + + + +/* + * OPTIONAL: some simple statistics + * a bitrate histogram to visualize the distribution of used frame sizes + * a stereo mode histogram to visualize the distribution of used stereo + * modes, useful in joint-stereo mode only + * 0: LR left-right encoded + * 1: LR-I left-right and intensity encoded (currently not supported) + * 2: MS mid-side encoded + * 3: MS-I mid-side and intensity encoded (currently not supported) + * + * attention: don't call them after lame_encode_finish + * suggested: lame_encode_flush -> lame_*_hist -> lame_close + */ + +void CDECL lame_bitrate_hist( + const lame_global_flags * gfp, + int bitrate_count[14] ); +void CDECL lame_bitrate_kbps( + const lame_global_flags * gfp, + int bitrate_kbps [14] ); +void CDECL lame_stereo_mode_hist( + const lame_global_flags * gfp, + int stereo_mode_count[4] ); + +void CDECL lame_bitrate_stereo_mode_hist ( + const lame_global_flags * gfp, + int bitrate_stmode_count[14][4] ); + +void CDECL lame_block_type_hist ( + const lame_global_flags * gfp, + int btype_count[6] ); + +void CDECL lame_bitrate_block_type_hist ( + const lame_global_flags * gfp, + int bitrate_btype_count[14][6] ); + +#if (DEPRECATED_OR_OBSOLETE_CODE_REMOVED && 0) +#else +/* + * OPTIONAL: + * lame_mp3_tags_fid will rewrite a Xing VBR tag to the mp3 file with file + * pointer fid. These calls perform forward and backwards seeks, so make + * sure fid is a real file. Make sure lame_encode_flush has been called, + * and all mp3 data has been written to the file before calling this + * function. + * NOTE: + * if VBR tags are turned off by the user, or turned off by LAME because + * the output is not a regular file, this call does nothing + * NOTE: + * LAME wants to read from the file to skip an optional ID3v2 tag, so + * make sure you opened the file for writing and reading. + * NOTE: + * You can call lame_get_lametag_frame instead, if you want to insert + * the lametag yourself. +*/ +void CDECL lame_mp3_tags_fid(lame_global_flags *, FILE* fid); +#endif + +/* + * OPTIONAL: + * lame_get_lametag_frame copies the final LAME-tag into 'buffer'. + * The function returns the number of bytes copied into buffer, or + * the required buffer size, if the provided buffer is too small. + * Function failed, if the return value is larger than 'size'! + * Make sure lame_encode flush has been called before calling this function. + * NOTE: + * if VBR tags are turned off by the user, or turned off by LAME, + * this call does nothing and returns 0. + * NOTE: + * LAME inserted an empty frame in the beginning of mp3 audio data, + * which you have to replace by the final LAME-tag frame after encoding. + * In case there is no ID3v2 tag, usually this frame will be the very first + * data in your mp3 file. If you put some other leading data into your + * file, you'll have to do some bookkeeping about where to write this buffer. + */ +size_t CDECL lame_get_lametag_frame( + const lame_global_flags *, unsigned char* buffer, size_t size); + +/* + * REQUIRED: + * final call to free all remaining buffers + */ +int CDECL lame_close (lame_global_flags *); + +#if DEPRECATED_OR_OBSOLETE_CODE_REMOVED +#else +/* + * OBSOLETE: + * lame_encode_finish combines lame_encode_flush() and lame_close() in + * one call. However, once this call is made, the statistics routines + * will no longer work because the data will have been cleared, and + * lame_mp3_tags_fid() cannot be called to add data to the VBR header + */ +int CDECL lame_encode_finish( + lame_global_flags* gfp, + unsigned char* mp3buf, + int size ); +#endif + + + + + + +/********************************************************************* + * + * decoding + * + * a simple interface to mpglib, part of mpg123, is also included if + * libmp3lame is compiled with HAVE_MPGLIB + * + *********************************************************************/ + +struct hip_global_struct; +typedef struct hip_global_struct hip_global_flags; +typedef hip_global_flags *hip_t; + + +typedef struct { + int header_parsed; /* 1 if header was parsed and following data was + computed */ + int stereo; /* number of channels */ + int samplerate; /* sample rate */ + int bitrate; /* bitrate */ + int mode; /* mp3 frame type */ + int mode_ext; /* mp3 frame type */ + int framesize; /* number of samples per mp3 frame */ + + /* this data is only computed if mpglib detects a Xing VBR header */ + unsigned long nsamp; /* number of samples in mp3 file. */ + int totalframes; /* total number of frames in mp3 file */ + + /* this data is not currently computed by the mpglib routines */ + int framenum; /* frames decoded counter */ +} mp3data_struct; + +/* required call to initialize decoder */ +hip_t CDECL hip_decode_init(void); + +/* cleanup call to exit decoder */ +int CDECL hip_decode_exit(hip_t gfp); + +/* HIP reporting functions */ +void CDECL hip_set_errorf(hip_t gfp, lame_report_function f); +void CDECL hip_set_debugf(hip_t gfp, lame_report_function f); +void CDECL hip_set_msgf (hip_t gfp, lame_report_function f); + +/********************************************************************* + * input 1 mp3 frame, output (maybe) pcm data. + * + * nout = hip_decode(hip, mp3buf,len,pcm_l,pcm_r); + * + * input: + * len : number of bytes of mp3 data in mp3buf + * mp3buf[len] : mp3 data to be decoded + * + * output: + * nout: -1 : decoding error + * 0 : need more data before we can complete the decode + * >0 : returned 'nout' samples worth of data in pcm_l,pcm_r + * pcm_l[nout] : left channel data + * pcm_r[nout] : right channel data + * + *********************************************************************/ +int CDECL hip_decode( hip_t gfp + , unsigned char * mp3buf + , size_t len + , short pcm_l[] + , short pcm_r[] + ); + +/* same as hip_decode, and also returns mp3 header data */ +int CDECL hip_decode_headers( hip_t gfp + , unsigned char* mp3buf + , size_t len + , short pcm_l[] + , short pcm_r[] + , mp3data_struct* mp3data + ); + +/* same as hip_decode, but returns at most one frame */ +int CDECL hip_decode1( hip_t gfp + , unsigned char* mp3buf + , size_t len + , short pcm_l[] + , short pcm_r[] + ); + +/* same as hip_decode1, but returns at most one frame and mp3 header data */ +int CDECL hip_decode1_headers( hip_t gfp + , unsigned char* mp3buf + , size_t len + , short pcm_l[] + , short pcm_r[] + , mp3data_struct* mp3data + ); + +/* same as hip_decode1_headers, but also returns enc_delay and enc_padding + from VBR Info tag, (-1 if no info tag was found) */ +int CDECL hip_decode1_headersB( hip_t gfp + , unsigned char* mp3buf + , size_t len + , short pcm_l[] + , short pcm_r[] + , mp3data_struct* mp3data + , int *enc_delay + , int *enc_padding + ); + + + +/* OBSOLETE: + * lame_decode... functions are there to keep old code working + * but it is strongly recommended to replace calls by hip_decode... + * function calls, see above. + */ +#if DEPRECATED_OR_OBSOLETE_CODE_REMOVED +#else +int CDECL lame_decode_init(void); +int CDECL lame_decode( + unsigned char * mp3buf, + int len, + short pcm_l[], + short pcm_r[] ); +int CDECL lame_decode_headers( + unsigned char* mp3buf, + int len, + short pcm_l[], + short pcm_r[], + mp3data_struct* mp3data ); +int CDECL lame_decode1( + unsigned char* mp3buf, + int len, + short pcm_l[], + short pcm_r[] ); +int CDECL lame_decode1_headers( + unsigned char* mp3buf, + int len, + short pcm_l[], + short pcm_r[], + mp3data_struct* mp3data ); +int CDECL lame_decode1_headersB( + unsigned char* mp3buf, + int len, + short pcm_l[], + short pcm_r[], + mp3data_struct* mp3data, + int *enc_delay, + int *enc_padding ); +int CDECL lame_decode_exit(void); + +#endif /* obsolete lame_decode API calls */ + + +/********************************************************************* + * + * id3tag stuff + * + *********************************************************************/ + +/* + * id3tag.h -- Interface to write ID3 version 1 and 2 tags. + * + * Copyright (C) 2000 Don Melton. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 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 + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library 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. + */ + +/* utility to obtain alphabetically sorted list of genre names with numbers */ +void CDECL id3tag_genre_list( + void (*handler)(int, const char *, void *), + void* cookie); + +void CDECL id3tag_init (lame_t gfp); + +/* force addition of version 2 tag */ +void CDECL id3tag_add_v2 (lame_t gfp); + +/* add only a version 1 tag */ +void CDECL id3tag_v1_only (lame_t gfp); + +/* add only a version 2 tag */ +void CDECL id3tag_v2_only (lame_t gfp); + +/* pad version 1 tag with spaces instead of nulls */ +void CDECL id3tag_space_v1 (lame_t gfp); + +/* pad version 2 tag with extra 128 bytes */ +void CDECL id3tag_pad_v2 (lame_t gfp); + +/* pad version 2 tag with extra n bytes */ +void CDECL id3tag_set_pad (lame_t gfp, size_t n); + +void CDECL id3tag_set_title(lame_t gfp, const char* title); +void CDECL id3tag_set_artist(lame_t gfp, const char* artist); +void CDECL id3tag_set_album(lame_t gfp, const char* album); +void CDECL id3tag_set_year(lame_t gfp, const char* year); +void CDECL id3tag_set_comment(lame_t gfp, const char* comment); + +/* return -1 result if track number is out of ID3v1 range + and ignored for ID3v1 */ +int CDECL id3tag_set_track(lame_t gfp, const char* track); + +/* return non-zero result if genre name or number is invalid + result 0: OK + result -1: genre number out of range + result -2: no valid ID3v1 genre name, mapped to ID3v1 'Other' + but taken as-is for ID3v2 genre tag */ +int CDECL id3tag_set_genre(lame_t gfp, const char* genre); + +/* return non-zero result if field name is invalid */ +int CDECL id3tag_set_fieldvalue(lame_t gfp, const char* fieldvalue); + +/* return non-zero result if image type is invalid */ +int CDECL id3tag_set_albumart(lame_t gfp, const char* image, size_t size); + +/* lame_get_id3v1_tag copies ID3v1 tag into buffer. + * Function returns number of bytes copied into buffer, or number + * of bytes rquired if buffer 'size' is too small. + * Function fails, if returned value is larger than 'size'. + * NOTE: + * This functions does nothing, if user/LAME disabled ID3v1 tag. + */ +size_t CDECL lame_get_id3v1_tag(lame_t gfp, unsigned char* buffer, size_t size); + +/* lame_get_id3v2_tag copies ID3v2 tag into buffer. + * Function returns number of bytes copied into buffer, or number + * of bytes rquired if buffer 'size' is too small. + * Function fails, if returned value is larger than 'size'. + * NOTE: + * This functions does nothing, if user/LAME disabled ID3v2 tag. + */ +size_t CDECL lame_get_id3v2_tag(lame_t gfp, unsigned char* buffer, size_t size); + +/* normaly lame_init_param writes ID3v2 tags into the audio stream + * Call lame_set_write_id3tag_automatic(gfp, 0) before lame_init_param + * to turn off this behaviour and get ID3v2 tag with above function + * write it yourself into your file. + */ +void CDECL lame_set_write_id3tag_automatic(lame_global_flags * gfp, int); +int CDECL lame_get_write_id3tag_automatic(lame_global_flags const* gfp); + +/* experimental */ +int CDECL id3tag_set_textinfo_latin1(lame_t gfp, char const *id, char const *text); + +/* experimental */ +int CDECL id3tag_set_comment_latin1(lame_t gfp, char const *lang, char const *desc, char const *text); + +#if DEPRECATED_OR_OBSOLETE_CODE_REMOVED +#else +/* experimental */ +int CDECL id3tag_set_textinfo_ucs2(lame_t gfp, char const *id, unsigned short const *text); + +/* experimental */ +int CDECL id3tag_set_comment_ucs2(lame_t gfp, char const *lang, + unsigned short const *desc, unsigned short const *text); + +/* experimental */ +int CDECL id3tag_set_fieldvalue_ucs2(lame_t gfp, const unsigned short *fieldvalue); +#endif + +/* experimental */ +int CDECL id3tag_set_fieldvalue_utf16(lame_t gfp, const unsigned short *fieldvalue); + +/* experimental */ +int CDECL id3tag_set_textinfo_utf16(lame_t gfp, char const *id, unsigned short const *text); + +/* experimental */ +int CDECL id3tag_set_comment_utf16(lame_t gfp, char const *lang, unsigned short const *desc, unsigned short const *text); + + +/*********************************************************************** +* +* list of valid bitrates [kbps] & sample frequencies [Hz]. +* first index: 0: MPEG-2 values (sample frequencies 16...24 kHz) +* 1: MPEG-1 values (sample frequencies 32...48 kHz) +* 2: MPEG-2.5 values (sample frequencies 8...12 kHz) +***********************************************************************/ + +extern const int bitrate_table [3][16]; +extern const int samplerate_table [3][ 4]; + +/* access functions for use in DLL, global vars are not exported */ +int CDECL lame_get_bitrate(int mpeg_version, int table_index); +int CDECL lame_get_samplerate(int mpeg_version, int table_index); + + +/* maximum size of albumart image (128KB), which affects LAME_MAXMP3BUFFER + as well since lame_encode_buffer() also returns ID3v2 tag data */ +#define LAME_MAXALBUMART (128 * 1024) + +/* maximum size of mp3buffer needed if you encode at most 1152 samples for + each call to lame_encode_buffer. see lame_encode_buffer() below + (LAME_MAXMP3BUFFER is now obsolete) */ +#define LAME_MAXMP3BUFFER (16384 + LAME_MAXALBUMART) + + +typedef enum { + LAME_OKAY = 0, + LAME_NOERROR = 0, + LAME_GENERICERROR = -1, + LAME_NOMEM = -10, + LAME_BADBITRATE = -11, + LAME_BADSAMPFREQ = -12, + LAME_INTERNALERROR = -13, + + FRONTEND_READERROR = -80, + FRONTEND_WRITEERROR = -81, + FRONTEND_FILETOOLARGE = -82 + +} lame_errorcodes_t; + +#if defined(__cplusplus) +} +#endif +#endif /* LAME_LAME_H */ + diff --git a/cmake-proxies/lib-widget-extra/CMakeLists.txt b/cmake-proxies/lib-widget-extra/CMakeLists.txt new file mode 100644 index 000000000..6a264cce4 --- /dev/null +++ b/cmake-proxies/lib-widget-extra/CMakeLists.txt @@ -0,0 +1,26 @@ + +add_library( ${TARGET} STATIC ) + +list( APPEND SOURCES + PRIVATE + ${TARGET_ROOT}/NonGuiThread.cpp +) + +list( APPEND INCLUDES + PUBLIC + ${TARGET_ROOT} +) + +list( APPEND LIBRARIES + PRIVATE + wxwidgets +) + +organize_source( "${TARGET_ROOT}" "" "${SOURCES}" ) +target_sources( ${TARGET} PRIVATE ${SOURCES} ) +target_compile_definitions( ${TARGET} PRIVATE ${DEFINES} ) +target_compile_features( ${TARGET} PRIVATE ${FEATURES} ) +target_compile_options( ${TARGET} PRIVATE ${OPTIONS} ) +target_include_directories( ${TARGET} PRIVATE ${INCLUDES} ) +target_link_libraries( ${TARGET} PRIVATE ${LIBRARIES} ) + diff --git a/cmake-proxies/lib-widget-extra/config.h.in b/cmake-proxies/lib-widget-extra/config.h.in new file mode 100644 index 000000000..b160b77df --- /dev/null +++ b/cmake-proxies/lib-widget-extra/config.h.in @@ -0,0 +1,96 @@ +/* libtwolame/config.h.in. Generated from configure.ac by autoheader. */ + +/* Define if building universal (internal helper macro) */ +#cmakedefine AC_APPLE_UNIVERSAL_BUILD 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_ASSERT_H 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_DLFCN_H 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_INTTYPES_H 1 + +/* Define to 1 if you have the `m' library (-lm). */ +#cmakedefine HAVE_LIBM 1 + +/* Define to 1 if you have the `mx' library (-lmx). */ +#cmakedefine HAVE_LIBMX 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_MALLOC_H 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_MEMORY_H 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_STDINT_H 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_STDLIB_H 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_STRINGS_H 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_STRING_H 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_SYS_STAT_H 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_SYS_TYPES_H 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_UNISTD_H 1 + +/* Define to the sub-directory in which libtool stores uninstalled libraries. + */ +#cmakedefine LT_OBJDIR "@LT_OBJDIR@" + +/* Name of package */ +#cmakedefine PACKAGE "@PACKAGE@" + +/* Define to the address where bug reports for this package should be sent. */ +#cmakedefine PACKAGE_BUGREPORT "@PACKAGE_BUGREPORT@" + +/* Define to the full name of this package. */ +#cmakedefine PACKAGE_NAME "@PACKAGE_NAME@" + +/* Define to the full name and version of this package. */ +#cmakedefine PACKAGE_STRING "@PACKAGE_STRING@" + +/* Define to the one symbol short name of this package. */ +#cmakedefine PACKAGE_TARNAME "@PACKAGE_TARNAME@" + +/* Define to the home page for this package. */ +#cmakedefine PACKAGE_URL "@PACKAGE_URL@" + +/* Define to the version of this package. */ +#cmakedefine PACKAGE_VERSION "@PACKAGE_VERSION@" + +/* The size of `float', as computed by sizeof. */ +#define SIZEOF_FLOAT @SIZEOF_FLOAT@ + +/* The size of `short', as computed by sizeof. */ +#define SIZEOF_SHORT @SIZEOF_SHORT@ + +/* Define to 1 if you have the ANSI C header files. */ +#cmakedefine STDC_HEADERS 1 + +/* Version number of package */ +#cmakedefine VERSION "@VERSION@" + +/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most + significant byte first (like Motorola and SPARC, unlike Intel). */ +#cmakedefine WORDS_BIGENDIAN @WORDS_BIGENDIAN@ + +/* Define to empty if `const' does not conform to ANSI C. */ +#cmakedefine const @const@ + +/* Define to `__inline__' or `__inline' if that's what the C compiler + calls it, or to nothing if 'inline' is not supported under any name. */ +#ifndef __cplusplus +#cmakedefine inline @inline@ +#endif diff --git a/cmake-proxies/libflac/CMakeLists.txt b/cmake-proxies/libflac/CMakeLists.txt index 6ef10b4f1..077510b79 100644 --- a/cmake-proxies/libflac/CMakeLists.txt +++ b/cmake-proxies/libflac/CMakeLists.txt @@ -1,222 +1,98 @@ -#directory cmake-proxies/libflac -cmake_minimum_required(VERSION 3.12) -set(TARGET libflac) -set(TARGET_SOURCE ${LIB_SRC_DIRECTORY}${TARGET}) -project(${TARGET} VERSION 1.3.1) +add_library( ${TARGET} STATIC ) +add_library( ${TARGET}++ STATIC ) -option(FLAC_ENABLE_64_BIT_WORDS "Set FLAC__BYTES_PER_WORD to 8 (4 is the default)" OFF) -option(FLAC_WITH_ASM "Use any assembly optimization routines" ON) +list( APPEND SOURCES + PRIVATE -if(CMAKE_C_COMPILER_ID MATCHES "GNU|Clang") - if(CMAKE_BULD_TYPE STREQUAL Release) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O3 -funroll-loops") - endif() + # libflac + ${TARGET_ROOT}/src/libFLAC/bitmath.c + ${TARGET_ROOT}/src/libFLAC/bitreader.c + ${TARGET_ROOT}/src/libFLAC/bitwriter.c + ${TARGET_ROOT}/src/libFLAC/cpu.c + ${TARGET_ROOT}/src/libFLAC/crc.c + ${TARGET_ROOT}/src/libFLAC/fixed.c + ${TARGET_ROOT}/src/libFLAC/fixed_intrin_sse2.c + ${TARGET_ROOT}/src/libFLAC/fixed_intrin_ssse3.c + ${TARGET_ROOT}/src/libFLAC/float.c + ${TARGET_ROOT}/src/libFLAC/format.c + ${TARGET_ROOT}/src/libFLAC/lpc.c + ${TARGET_ROOT}/src/libFLAC/lpc_intrin_sse.c + ${TARGET_ROOT}/src/libFLAC/lpc_intrin_sse2.c + ${TARGET_ROOT}/src/libFLAC/lpc_intrin_sse41.c + ${TARGET_ROOT}/src/libFLAC/lpc_intrin_avx2.c + ${TARGET_ROOT}/src/libFLAC/md5.c + ${TARGET_ROOT}/src/libFLAC/memory.c + ${TARGET_ROOT}/src/libFLAC/metadata_iterators.c + ${TARGET_ROOT}/src/libFLAC/metadata_object.c + ${TARGET_ROOT}/src/libFLAC/stream_decoder.c + ${TARGET_ROOT}/src/libFLAC/stream_encoder.c + ${TARGET_ROOT}/src/libFLAC/stream_encoder_intrin_sse2.c + ${TARGET_ROOT}/src/libFLAC/stream_encoder_intrin_ssse3.c + ${TARGET_ROOT}/src/libFLAC/stream_encoder_intrin_avx2.c + ${TARGET_ROOT}/src/libFLAC/stream_encoder_framing.c + ${TARGET_ROOT}/src/libFLAC/window.c + ${TARGET_ROOT}/src/libFLAC/ogg_decoder_aspect.c + ${TARGET_ROOT}/src/libFLAC/ogg_encoder_aspect.c + ${TARGET_ROOT}/src/libFLAC/ogg_helper.c + ${TARGET_ROOT}/src/libFLAC/ogg_mapping.c + $<$:${TARGET_ROOT}/src/share/win_utf8_io/win_utf8_io.c> +) - option(FLAC_ENABLE_SSP "Enable GNU GCC stack smash protection" OFF) -endif() +list( APPEND SOURCES++ + # libflac++ + ${TARGET_ROOT}/src/libFLAC++/metadata.cpp + ${TARGET_ROOT}/src/libFLAC++/stream_decoder.cpp + ${TARGET_ROOT}/src/libFLAC++/stream_encoder.cpp +) -if(CMAKE_SYSTEM_PROCESSOR MATCHES "[xX]86(_64)?|(AMD|amd)64|i[346]86") - option(FLAC_WITH_AVX "Enable AVX, AVX2 optimizations" ON) - option(FLAC_WITH_SSE "Enable AVX, AVX2 optimizations" ON) -endif() +list( APPEND INCLUDES + PRIVATE + ${CMAKE_CURRENT_BINARY_DIR}/private + ${TARGET_ROOT}/src/libFLAC/include + PUBLIC + ${TARGET_ROOT}/include +) -include(CheckCCompilerFlag) -include(CheckCXXCompilerFlag) -include(CheckSymbolExists) -include(CheckFunctionExists) -include(CheckIncludeFile) -include(CheckCSourceCompiles) -include(CheckCXXSourceCompiles) -include(TestBigEndian) +list( APPEND DEFINES + PRIVATE + HAVE_CONFIG_H + PUBLIC + FLAC__NO_DLL +) -check_include_file("byteswap.h" HAVE_BYTESWAP_H) -check_include_file("inttypes.h" HAVE_INTTYPES_H) -check_include_file("stdint.h" HAVE_STDINT_H) -check_include_file("x86intrin.h" HAVE_X86INTRIN_H) -check_include_file("cpuid.h" HAVE_CPUID_H) -check_include_file("sys/param.h" HAVE_SYS_PARAM_H) +list( APPEND LIBRARIES + PRIVATE + libogg +) -function(check_lround) - set(CMAKE_REQUIRED_LIBRARIES m) - check_function_exists(lround HAVE_LROUND) -endfunction() +list( APPEND LIBRARIES++ + PRIVATE + libflac +) -check_lround() +set( CPU_IS_BIG_ENDIAN ${WORDS_BIGENDIAN} ) +set( CPU_IS_LITTLE_ENDIAN NOT ${WORDS_BIGENDIAN} ) -check_c_source_compiles("int main() { return __builtin_bswap16 (0) ; }" HAVE_BSWAP16) -check_c_source_compiles("int main() { return __builtin_bswap32 (0) ; }" HAVE_BSWAP32) -check_c_source_compiles(" - int main() - { - #ifndef _FORTIFY_SOURCE - return 0; - #else - this_is_an_error; - #endif - }" - HAVENOT_FORTIFY_SOURCE) +set( FLAC__HAS_OGG 1 ) -test_big_endian(CPU_IS_BIG_ENDIAN) +set( VERSION "1.3.1" ) -check_c_compiler_flag(-Werror HAVE_WERROR_FLAG) -check_c_compiler_flag(-Wdeclaration-after-statement HAVE_DECL_AFTER_STMT_FLAG) -check_c_compiler_flag("-fstack-protector --param ssp-buffer-size=4" HAVE_SSP_FLAG) -check_c_compiler_flag("-mstackrealign" HAVE_STACKREALIGN_FLAG) -check_c_compiler_flag(-msse2 HAVE_MSSE2_FLAG) -check_cxx_compiler_flag(-Weffc++ HAVE_WEFFCXX_FLAG) +configure_file( config.h.in private/config.h ) -add_compile_definitions( - VERSION="${PROJECT_VERSION}" - $<$:HAVE_BYTESWAP_H> - $<$:HAVE_INTTYPES_H> - $<$:HAVE_STDINT_H> - $<$:_CRT_SECURE_NO_WARNINGS> - $<$:_USE_MATH_DEFINES> - $<$:HAVE_ICONV> - $<$:HAVE_LROUND> - $<$:HAVE_CPUID_H> - $<$:HAVE_SYS_PARAM_H> - $<$:ENABLE_64_BIT_WORDS> - HAVE_BSWAP16=$ - HAVE_BSWAP32=$ - ENABLE_64_BIT_WORDS=$ - WORDS_BIGENDIAN=$ - CPU_IS_BIG_ENDIAN=$ - CPU_IS_LITTLE_ENDIAN=$ - FLAC__HAS_X86INTRIN=$ - FLAC__USE_AVX=$ - $<$,$>:FLAC__OVERFLOW_DETECT> - _ALL_SOURCE - _DARWIN_C_SOURCE - _GNU_SOURCE - _POSIX_PTHREAD_SEMANTICS - __STDC_WANT_IEC_60559_ATTRIBS_EXT__ - __STDC_WANT_IEC_60559_BFP_EXT__ - __STDC_WANT_IEC_60559_DFP_EXT__ - __STDC_WANT_IEC_60559_FUNCS_EXT__ - __STDC_WANT_IEC_60559_TYPES_EXT__ - __STDC_WANT_LIB_EXT2__ - __STDC_WANT_MATH_SPEC_FUNCS__ - _TANDEM_SOURCE - $<$,$,$>>:_FORTIFY_SOURCE=2>) +organize_source( "${TARGET_ROOT}" "" "${SOURCES}" ) +target_sources( ${TARGET} PRIVATE ${SOURCES} ) +target_compile_definitions( ${TARGET} PRIVATE ${DEFINES} ) +target_compile_features( ${TARGET} PRIVATE ${FEATURES} ) +target_compile_options( ${TARGET} PRIVATE ${OPTIONS} ) +target_include_directories( ${TARGET} PRIVATE ${INCLUDES} ) +target_link_libraries( ${TARGET} PRIVATE ${LIBRARIES} ) -add_compile_options( - $<$:/wd4267> - $<$:/wd4996> - $<$:-Werror> - $<$,$>:"-fstack-protector --param ssp-buffer-size=4"> - $<$,$>:-msse2>) +organize_source( "${TARGET_ROOT}" "" "${SOURCES++}" ) +target_sources( ${TARGET}++ PRIVATE ${SOURCES++} ) +target_compile_definitions( ${TARGET}++ PRIVATE ${DEFINES} ) +target_compile_features( ${TARGET}++ PRIVATE ${FEATURES} ) +target_compile_options( ${TARGET}++ PRIVATE ${OPTIONS} ) +target_include_directories( ${TARGET}++ PRIVATE ${INCLUDES} ) +target_link_libraries( ${TARGET}++ PRIVATE ${LIBRARIES++} ) -if(CMAKE_SYSTEM_PROCESSOR STREQUAL "i686" AND HAVE_STACKREALIGN_FLAG) - add_compile_options(-mstackrealign) -endif() -if(HAVE_WEFFCXX_FLAG) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Weffc++") -endif() -if(HAVE_DECL_AFTER_STMT_FLAG) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wdeclaration-after-statement") -endif() - -if(CMAKE_SYSTEM_PROCESSOR MATCHES "[xX]86_64|(AMD|amd)64") - if(CMAKE_SIZEOF_VOID_P EQUAL 4) - set(IA32 TRUE) - endif() - add_compile_definitions( - FLAC__CPU_X86_64 - FLAC__ALIGN_MALLOC_DATA) -elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "([xX]|i[346])86") - set(IA32 TRUE) - add_compile_definitions( - FLAC__CPU_IA32 - FLAC__ALIGN_MALLOC_DATA) -endif() - -include(CheckLanguage) -check_language(ASM_NASM) -if(CMAKE_ASM_NASM_COMPILER) - enable_language(ASM_NASM) - add_compile_definitions(FLAC__HAS_NASM) -endif() - -if(NOT WITH_ASM) - add_compile_definitions(FLAC__NO_ASM) -endif() - -if(WITH_ASM AND IA32 AND CMAKE_ASM_NASM_COMPILER) - if(APPLE) - set(CMAKE_ASM_NASM_FLAGS -dOBJ_FORMAT_macho) - elseif(WIN32) - set(CMAKE_ASM_NASM_FLAGS -dOBJ_FORMAT_win32) - else() - set(CMAKE_ASM_NASM_FLAGS -dOBJ_FORMAT_elf) - endif() - - add_library(FLAC-asm STATIC - "${TARGET_SOURCE}/src/libFLAC/ia32/cpu_asm.nasm" - "${TARGET_SOURCE}/src/libFLAC/ia32/fixed_asm.nasm" - "${TARGET_SOURCE}/src/libFLAC/ia32/lpc_asm.nasm") - set_target_properties(FLAC-asm PROPERTIES COMPILE_OPTIONS "") - target_include_directories(FLAC-asm PRIVATE "${TARGET_SOURCE}/src/libFLAC/ia32/") -endif() - -add_library(FLAC-static STATIC - "${TARGET_SOURCE}/src/libFLAC/bitmath.c" - "${TARGET_SOURCE}/src/libFLAC/bitreader.c" - "${TARGET_SOURCE}/src/libFLAC/bitwriter.c" - "${TARGET_SOURCE}/src/libFLAC/cpu.c" - "${TARGET_SOURCE}/src/libFLAC/crc.c" - "${TARGET_SOURCE}/src/libFLAC/fixed.c" - "${TARGET_SOURCE}/src/libFLAC/fixed_intrin_sse2.c" - "${TARGET_SOURCE}/src/libFLAC/fixed_intrin_ssse3.c" - "${TARGET_SOURCE}/src/libFLAC/float.c" - "${TARGET_SOURCE}/src/libFLAC/format.c" - "${TARGET_SOURCE}/src/libFLAC/lpc.c" - "${TARGET_SOURCE}/src/libFLAC/lpc_intrin_sse.c" - "${TARGET_SOURCE}/src/libFLAC/lpc_intrin_sse2.c" - "${TARGET_SOURCE}/src/libFLAC/lpc_intrin_sse41.c" - "${TARGET_SOURCE}/src/libFLAC/lpc_intrin_avx2.c" - "${TARGET_SOURCE}/src/libFLAC/md5.c" - "${TARGET_SOURCE}/src/libFLAC/memory.c" - "${TARGET_SOURCE}/src/libFLAC/metadata_iterators.c" - "${TARGET_SOURCE}/src/libFLAC/metadata_object.c" - "${TARGET_SOURCE}/src/libFLAC/stream_decoder.c" - "${TARGET_SOURCE}/src/libFLAC/stream_encoder.c" - "${TARGET_SOURCE}/src/libFLAC/stream_encoder_intrin_sse2.c" - "${TARGET_SOURCE}/src/libFLAC/stream_encoder_intrin_ssse3.c" - "${TARGET_SOURCE}/src/libFLAC/stream_encoder_intrin_avx2.c" - "${TARGET_SOURCE}/src/libFLAC/stream_encoder_framing.c" - "${TARGET_SOURCE}/src/libFLAC/window.c" - "${TARGET_SOURCE}/src/libFLAC/ogg_decoder_aspect.c" - "${TARGET_SOURCE}/src/libFLAC/ogg_encoder_aspect.c" - "${TARGET_SOURCE}/src/libFLAC/ogg_helper.c" - "${TARGET_SOURCE}/src/libFLAC/ogg_mapping.c" - "$<$:${TARGET_SOURCE}/src/share/win_utf8_io/win_utf8_io.c>") - -include_directories( - "${TARGET_SOURCE}/include" - "${TARGET_SOURCE}/src/libFLAC/include") - -target_compile_definitions(FLAC-static PUBLIC FLAC__NO_DLL FLAC__HAS_OGG) -target_include_directories(FLAC-static INTERFACE - "$") -target_link_libraries(FLAC-static PUBLIC - libogg - $ - $<$:m> - $) -set_target_properties(FLAC-static PROPERTIES - OSX_ARCHITECTURES "" - OUTPUT_NAME libflac) - -add_library(FLACXX-static STATIC - "${TARGET_SOURCE}/src/libFLAC++/metadata.cpp" - "${TARGET_SOURCE}/src/libFLAC++/stream_decoder.cpp" - "${TARGET_SOURCE}/src/libFLAC++/stream_encoder.cpp") -target_compile_definitions(FLACXX-static PUBLIC FLAC__NO_DLL) -target_include_directories(FLACXX-static INTERFACE - "$") -target_link_libraries(FLACXX-static PUBLIC FLAC-static) -set_target_properties(FLACXX-static PROPERTIES - OSX_ARCHITECTURES "" - OUTPUT_NAME libflac++) diff --git a/cmake-proxies/libflac/config.h.in b/cmake-proxies/libflac/config.h.in new file mode 100644 index 000000000..d1beb6398 --- /dev/null +++ b/cmake-proxies/libflac/config.h.in @@ -0,0 +1,234 @@ +/* config.h.in. Generated from configure.ac by autoheader. */ + +/* Define if building universal (internal helper macro) */ +#cmakedefine AC_APPLE_UNIVERSAL_BUILD 1 + +/* Target processor is big endian. */ +#cmakedefine01 CPU_IS_BIG_ENDIAN + +/* Target processor is little endian. */ +#cmakedefine01 CPU_IS_LITTLE_ENDIAN + +/* define to align allocated memory on 32-byte boundaries */ +#cmakedefine FLAC__ALIGN_MALLOC_DATA 1 + +/* define if building for ia32/i386 */ +#cmakedefine FLAC__CPU_IA32 1 + +/* define if building for PowerPC */ +#cmakedefine FLAC__CPU_PPC 1 + +/* define if building for PowerPC with SPE ABI */ +#cmakedefine FLAC__CPU_PPC_SPE 1 + +/* define if building for SPARC */ +#cmakedefine FLAC__CPU_SPARC 1 + +/* define if building for x86_64 */ +#cmakedefine FLAC__CPU_X86_64 1 + +/* define if you have docbook-to-man or docbook2man */ +#cmakedefine FLAC__HAS_DOCBOOK_TO_MAN 1 + +/* define if you are compiling for x86 and have the NASM assembler */ +#cmakedefine FLAC__HAS_NASM 1 + +/* define if you have the ogg library */ +#cmakedefine FLAC__HAS_OGG 1 + +/* Set to 1 if is available. */ +#cmakedefine FLAC__HAS_X86INTRIN 1 + +/* define to disable use of assembly code */ +#cmakedefine FLAC__NO_ASM 1 + +/* define if your operating system supports SSE instructions */ +#cmakedefine FLAC__SSE_OS 1 + +/* define if building for Darwin / MacOS X */ +#cmakedefine FLAC__SYS_DARWIN 1 + +/* define if building for Linux */ +#cmakedefine FLAC__SYS_LINUX 1 + +/* define to enable use of Altivec instructions */ +#cmakedefine FLAC__USE_ALTIVEC 1 + +/* Define to 1 if `TIOCGWINSZ' requires . */ +#cmakedefine GWINSZ_IN_SYS_IOCTL 1 + +/* Compiler has the __builtin_bswap16 intrinsic */ +#cmakedefine HAVE_BSWAP16 1 + +/* Compiler has the __builtin_bswap32 intrinsic */ +#cmakedefine HAVE_BSWAP32 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_BYTESWAP_H 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_CPUID_H 1 + +/* Define to 1 if C++ supports variable-length arrays. */ +#cmakedefine HAVE_CXX_VARARRAYS 1 + +/* Define to 1 if C supports variable-length arrays. */ +#cmakedefine HAVE_C_VARARRAYS 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_DLFCN_H 1 + +/* Define to 1 if fseeko (and presumably ftello) exists and is declared. */ +#cmakedefine HAVE_FSEEKO 1 + +/* Define to 1 if you have the `getopt_long' function. */ +#cmakedefine HAVE_GETOPT_LONG 1 + +/* Define if you have the iconv() function and it works. */ +#cmakedefine HAVE_ICONV 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_INTTYPES_H 1 + +/* Define if you have and nl_langinfo(CODESET). */ +#cmakedefine HAVE_LANGINFO_CODESET 1 + +/* lround support */ +#cmakedefine HAVE_LROUND 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_MEMORY_H 1 + +/* Define to 1 if the system has the type `socklen_t'. */ +#cmakedefine HAVE_SOCKLEN_T 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_STDINT_H 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_STDLIB_H 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_STRINGS_H 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_STRING_H 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_SYS_PARAM_H 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_SYS_STAT_H 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_SYS_TYPES_H 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_TERMIOS_H 1 + +/* Define to 1 if typeof works with your compiler. */ +#cmakedefine HAVE_TYPEOF 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_UNISTD_H 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_X86INTRIN_H 1 + +/* Define as const if the declaration of iconv() needs const. */ +#cmakedefine ICONV_CONST @ICONV_CONST@ + +/* Define to the sub-directory in which libtool stores uninstalled libraries. + */ +#cmakedefine LT_OBJDIR "@LT_OBJDIR@" + +/* Name of package */ +#cmakedefine PACKAGE "@PACKAGE@" + +/* Define to the address where bug reports for this package should be sent. */ +#cmakedefine PACKAGE_BUGREPORT "@PACKAGE_BUGREPORT@" + +/* Define to the full name of this package. */ +#cmakedefine PACKAGE_NAME "@PACKAGE_NAME@" + +/* Define to the full name and version of this package. */ +#cmakedefine PACKAGE_STRING "@PACKAGE_STRING@" + +/* Define to the one symbol short name of this package. */ +#cmakedefine PACKAGE_TARNAME "@PACKAGE_TARNAME@" + +/* Define to the home page for this package. */ +#cmakedefine PACKAGE_URL "@PACKAGE_URL@" + +/* Define to the version of this package. */ +#cmakedefine PACKAGE_VERSION "@PACKAGE_VERSION" + +/* The size of `off_t', as computed by sizeof. */ +#define SIZEOF_OFF_T @SIZEOF_OFF_T + +/* The size of `void*', as computed by sizeof. */ +#define SIZEOF_VOIDP @SIZEOF_VOIDP@ + +/* Define to 1 if you have the ANSI C header files. */ +#cmakedefine STDC_HEADERS 1 + +/* Enable extensions on AIX 3, Interix. */ +#ifndef _ALL_SOURCE +# cmakedefine _ALL_SOURCE 1 +#endif +/* Enable GNU extensions on systems that have them. */ +#ifndef _GNU_SOURCE +# cmakedefine _GNU_SOURCE 1 +#endif +/* Enable threading extensions on Solaris. */ +#ifndef _POSIX_PTHREAD_SEMANTICS +# cmakedefine _POSIX_PTHREAD_SEMANTICS 1 +#endif +/* Enable extensions on HP NonStop. */ +#ifndef _TANDEM_SOURCE +# cmakedefine _TANDEM_SOURCE 1 +#endif +/* Enable general extensions on Solaris. */ +#ifndef __EXTENSIONS__ +# cmakedefine __EXTENSIONS__ 1 +#endif + + +/* Version number of package */ +#cmakedefine VERSION "@VERSION@" + +/* Target processor is big endian. */ +#cmakedefine WORDS_BIGENDIAN 1 + +/* Enable large inode numbers on Mac OS X 10.5. */ +#ifndef _DARWIN_USE_64_BIT_INODE +# define _DARWIN_USE_64_BIT_INODE 1 +#endif + +/* Number of bits in a file offset, on hosts where this is settable. */ +#cmakedefine _FILE_OFFSET_BITS @_FILE_OFFSET_BITS@ + +/* Define to 1 to make fseeko visible on some hosts (e.g. glibc 2.2). */ +#cmakedefine _LARGEFILE_SOURCE 1 + +/* Define for large files, on AIX-style hosts. */ +#cmakedefine _LARGE_FILES 1 + +/* Define to 1 if on MINIX. */ +#cmakedefine _MINIX 1 + +/* Define to 2 if the system does not provide POSIX.1 features except with + this defined. */ +#cmakedefine _POSIX_1_SOURCE 1 + +/* Define to 1 if you need to in order for `stat' and other things to work. */ +#cmakedefine _POSIX_SOURCE 1 + +/* Define to `__inline__' or `__inline' if that's what the C compiler + calls it, or to nothing if 'inline' is not supported under any name. */ +#ifndef __cplusplus +#cmakedefine inline @inline@ +#endif + +/* Define to __typeof__ if your compiler spells it that way. */ +#cmakedefine typeof @typeof@ diff --git a/cmake-proxies/libid3tag/CMakeLists.txt b/cmake-proxies/libid3tag/CMakeLists.txt index 05e01b8ff..11598ad2b 100644 --- a/cmake-proxies/libid3tag/CMakeLists.txt +++ b/cmake-proxies/libid3tag/CMakeLists.txt @@ -1,38 +1,50 @@ -#directory cmake-proxies/libid3tag -set( TARGET libid3tag ) -set( TARGET_SOURCE ${LIB_SRC_DIRECTORY}${TARGET} ) -project( ${TARGET} ) -set( SOURCES -${LIB_SRC_DIRECTORY}libid3tag/compat.c -${LIB_SRC_DIRECTORY}libid3tag/crc.c -${LIB_SRC_DIRECTORY}libid3tag/debug.c -${LIB_SRC_DIRECTORY}libid3tag/field.c -${LIB_SRC_DIRECTORY}libid3tag/file.c -${LIB_SRC_DIRECTORY}libid3tag/frame.c -${LIB_SRC_DIRECTORY}libid3tag/frametype.c -${LIB_SRC_DIRECTORY}libid3tag/genre.c -${LIB_SRC_DIRECTORY}libid3tag/latin1.c -${LIB_SRC_DIRECTORY}libid3tag/parse.c -${LIB_SRC_DIRECTORY}libid3tag/render.c -${LIB_SRC_DIRECTORY}libid3tag/tag.c -${LIB_SRC_DIRECTORY}libid3tag/ucs4.c -${LIB_SRC_DIRECTORY}libid3tag/utf16.c -${LIB_SRC_DIRECTORY}libid3tag/utf8.c -${LIB_SRC_DIRECTORY}libid3tag/util.c -${LIB_SRC_DIRECTORY}libid3tag/version.c -) -# This defines the #define on both Windows and Linux. -add_definitions( --D_LIB -) -add_library( ${TARGET} STATIC ${SOURCES}) +add_library( ${TARGET} STATIC ) -find_package(wxWidgets REQUIRED COMPONENTS net core base) -#include( ${wxWidgets_USE_FILE} ) - -target_include_directories( ${TARGET} PRIVATE -${wxWidgets_ROOT_DIR}/src/zlib +list( APPEND SOURCES + PRIVATE + ${TARGET_ROOT}/compat.c + ${TARGET_ROOT}/crc.c + $<$:${TARGET_ROOT}/debug.c> + ${TARGET_ROOT}/field.c + ${TARGET_ROOT}/file.c + ${TARGET_ROOT}/frame.c + ${TARGET_ROOT}/frametype.c + ${TARGET_ROOT}/genre.c + ${TARGET_ROOT}/latin1.c + ${TARGET_ROOT}/parse.c + ${TARGET_ROOT}/render.c + ${TARGET_ROOT}/tag.c + ${TARGET_ROOT}/ucs4.c + ${TARGET_ROOT}/utf16.c + ${TARGET_ROOT}/utf8.c + ${TARGET_ROOT}/util.c + ${TARGET_ROOT}/version.c ) -target_link_libraries( ${TARGET} ) \ No newline at end of file +list( APPEND INCLUDES + PRIVATE + ${CMAKE_CURRENT_BINARY_DIR}/private + PUBLIC + ${TARGET_ROOT} +) + +list( APPEND OPTIONS + PRIVATE + $<$:-Wno-implicit-function-declaration> +) + +list( APPEND LIBRARIES + PRIVATE + wxwidgets +) +configure_file( config.h.in private/config.h ) + +organize_source( "${TARGET_ROOT}" "src" "${SOURCES}" ) +target_sources( ${TARGET} PRIVATE ${SOURCES} ) +target_compile_definitions( ${TARGET} PRIVATE ${DEFINES} ) +target_compile_features( ${TARGET} PRIVATE ${FEATURES} ) +target_compile_options( ${TARGET} PRIVATE ${OPTIONS} ) +target_include_directories( ${TARGET} PRIVATE ${INCLUDES} ) +target_link_libraries( ${TARGET} PRIVATE ${LIBRARIES} ) + diff --git a/cmake-proxies/libid3tag/config.h.in b/cmake-proxies/libid3tag/config.h.in new file mode 100644 index 000000000..0a8ee48c8 --- /dev/null +++ b/cmake-proxies/libid3tag/config.h.in @@ -0,0 +1,86 @@ +/* config.h.in. Generated from configure.ac by autoheader. */ + +/* Define to enable diagnostic debugging support. */ +#cmakedefine DEBUG 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_ASSERT_H 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_DLFCN_H 1 + +/* Define to 1 if you have the `ftruncate' function. */ +#cmakedefine HAVE_FTRUNCATE 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_INTTYPES_H 1 + +/* Define to 1 if you have the `z' library (-lz). */ +#cmakedefine HAVE_LIBZ 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_MEMORY_H 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_STDINT_H 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_STDLIB_H 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_STRINGS_H 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_STRING_H 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_SYS_STAT_H 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_SYS_TYPES_H 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_UNISTD_H 1 + +/* Define to the sub-directory in which libtool stores uninstalled libraries. + */ +#cmakedefine LT_OBJDIR "@LT_OBJDIR@" + +/* Define to disable debugging assertions. */ +#cmakedefine NDEBUG 1 + +/* Name of package */ +#cmakedefine PACKAGE "@PACKAGE@" + +/* Define to the address where bug reports for this package should be sent. */ +#cmakedefine PACKAGE_BUGREPORT "@PACKAGE_BUGREPORT@" + +/* Define to the full name of this package. */ +#cmakedefine PACKAGE_NAME "@PACKAGE_NAME@" + +/* Define to the full name and version of this package. */ +#cmakedefine PACKAGE_STRING "@PACKAGE_STRING@" + +/* Define to the one symbol short name of this package. */ +#cmakedefine PACKAGE_TARNAME "@PACKAGE_TARNAME@" + +/* Define to the home page for this package. */ +#cmakedefine PACKAGE_URL "@PACKAGE_URL@" + +/* Define to the version of this package. */ +#cmakedefine PACKAGE_VERSION "@PACKAGE_VERSION@" + +/* Define to 1 if you have the ANSI C header files. */ +#cmakedefine STDC_HEADERS 1 + +/* Version number of package */ +#cmakedefine VERSION "@VERSION@" + +/* Define to empty if `const' does not conform to ANSI C. */ +#cmakedefine const @const@ + +/* Define to `__inline__' or `__inline' if that's what the C compiler + calls it, or to nothing if 'inline' is not supported under any name. */ +#ifndef __cplusplus +#cmakedefine inline @inline@ +#endif diff --git a/cmake-proxies/libmad/CMakeLists.txt b/cmake-proxies/libmad/CMakeLists.txt index 2ef1e188f..ad79c62ca 100644 --- a/cmake-proxies/libmad/CMakeLists.txt +++ b/cmake-proxies/libmad/CMakeLists.txt @@ -1,39 +1,53 @@ -#directory cmake-proxies/libmad -set( TARGET libmad ) -set( TARGET_SOURCE ${LIB_SRC_DIRECTORY}${TARGET} ) -project( ${TARGET} ) -set( SOURCES -${LIB_SRC_DIRECTORY}libmad/bit.c -${LIB_SRC_DIRECTORY}libmad/decoder.c -${LIB_SRC_DIRECTORY}libmad/fixed.c -${LIB_SRC_DIRECTORY}libmad/frame.c -${LIB_SRC_DIRECTORY}libmad/huffman.c -${LIB_SRC_DIRECTORY}libmad/layer12.c -${LIB_SRC_DIRECTORY}libmad/layer3.c -#${LIB_SRC_DIRECTORY}libmad/minimad.c -${LIB_SRC_DIRECTORY}libmad/stream.c -${LIB_SRC_DIRECTORY}libmad/synth.c -${LIB_SRC_DIRECTORY}libmad/timer.c -${LIB_SRC_DIRECTORY}libmad/version.c -) -# This defines the #define on both Windows and Linux. -add_definitions( --D__WX__ --DWIN32 --D_WINDOWS --D__WINDOWS__ --D__WXMSW__ --D__WIN95__ --D__WIN32__ --D_LIB --DHAVE_CONFIG_H --DFPM_INTEL -) -add_library( ${TARGET} STATIC ${SOURCES}) +add_library( ${TARGET} STATIC ) -target_include_directories( ${TARGET} PRIVATE -${TARGET_SOURCE}/msvc++ +list( APPEND SOURCES + PRIVATE + ${TARGET_ROOT}/bit.c + ${TARGET_ROOT}/decoder.c + ${TARGET_ROOT}/fixed.c + ${TARGET_ROOT}/frame.c + ${TARGET_ROOT}/huffman.c + ${TARGET_ROOT}/layer12.c + ${TARGET_ROOT}/layer3.c + ${TARGET_ROOT}/stream.c + ${TARGET_ROOT}/synth.c + ${TARGET_ROOT}/timer.c + ${TARGET_ROOT}/version.c ) -target_link_libraries( ${TARGET} ) \ No newline at end of file +list( APPEND INCLUDES + PRIVATE + ${CMAKE_CURRENT_BINARY_DIR}/private + PUBLIC + ${CMAKE_CURRENT_BINARY_DIR}/public + ${TARGET_ROOT} +) + +list( APPEND DEFINES + PRIVATE + HAVE_CONFIG_H + OPT_ACCURACY + $<$:FPM_INTEL> + $<$>:FPM_DEFAULT> +) + +list( APPEND OPTIONS + PRIVATE + $<$:-Wall> +) + +configure_file( config.h.in private/config.h ) + +set( FPM FPM_DEFAULT ) + +configure_file( mad.h.in public/mad.h ) + +organize_source( "${TARGET_ROOT}" "" "${SOURCES}" ) +target_sources( ${TARGET} PRIVATE ${SOURCES} ) +target_compile_definitions( ${TARGET} PRIVATE ${DEFINES} ) +target_compile_features( ${TARGET} PRIVATE ${FEATURES} ) +target_compile_options( ${TARGET} PRIVATE ${OPTIONS} ) +target_include_directories( ${TARGET} PRIVATE ${INCLUDES} ) +target_link_libraries( ${TARGET} PRIVATE ${LIBRARIES} ) + diff --git a/cmake-proxies/libmad/config.h.in b/cmake-proxies/libmad/config.h.in new file mode 100644 index 000000000..ec0889887 --- /dev/null +++ b/cmake-proxies/libmad/config.h.in @@ -0,0 +1,215 @@ +/* config.h.in. Generated from configure.ac by autoheader. */ +/* + * libmad - MPEG audio decoder library + * Copyright (C) 2000-2001 Robert Leslie + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * $Id: acconfig.h,v 1.2 2001-10-21 22:26:32 dmazzoni Exp $ + */ + +# ifndef LIBMAD_CONFIG_H 1 +# define LIBMAD_CONFIG_H 1 + +/***************************************************************************** + * Definitions selected automatically by `configure' * + *****************************************************************************/ + +/* Define to optimize for speed over accuracy. */ +#cmakedefine OPT_SPEED 1 + +/* Define to optimize for accuracy over speed. */ +#cmakedefine OPT_ACCURACY 1 + +/* Define to enable a fast subband synthesis approximation optimization. */ +#cmakedefine OPT_SSO 1 + +/* Define to influence a strict interpretation of the ISO/IEC standards, + even if this is in opposition with best accepted practices. */ +#cmakedefine OPT_STRICT 1 + +/* Define if your MIPS CPU supports a 2-operand MADD instruction. */ +#cmakedefine HAVE_MADD_ASM 1 + +/* Define if your MIPS CPU supports a 2-operand MADD16 instruction. */ +#cmakedefine HAVE_MADD16_ASM 1 + +/* Define to enable diagnostic debugging support. */ +#cmakedefine DEBUG 1 + +/* Define to disable debugging assertions. */ +#cmakedefine NDEBUG 1 + +/* Define to enable experimental code. */ +#cmakedefine EXPERIMENTAL 1 + + +/* Define if building universal (internal helper macro) */ +#cmakedefine AC_APPLE_UNIVERSAL_BUILD 1 + +/* Define to enable diagnostic debugging support. */ +#cmakedefine DEBUG 1 + +/* Define to enable experimental code. */ +#cmakedefine EXPERIMENTAL 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_ASSERT_H 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_DLFCN_H 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_ERRNO_H 1 + +/* Define to 1 if you have the `fcntl' function. */ +#cmakedefine HAVE_FCNTL 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_FCNTL_H 1 + +/* Define to 1 if you have the `fork' function. */ +#cmakedefine HAVE_FORK 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_INTTYPES_H 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_LIMITS_H 1 + +/* Define if your MIPS CPU supports a 2-operand MADD16 instruction. */ +#cmakedefine HAVE_MADD16_ASM 1 + +/* Define if your MIPS CPU supports a 2-operand MADD instruction. */ +#cmakedefine HAVE_MADD_ASM 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_MEMORY_H 1 + +/* Define to 1 if you have the `pipe' function. */ +#cmakedefine HAVE_PIPE 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_STDINT_H 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_STDLIB_H 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_STRINGS_H 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_STRING_H 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_SYS_STAT_H 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_SYS_TYPES_H 1 + +/* Define to 1 if you have that is POSIX.1 compatible. */ +#cmakedefine HAVE_SYS_WAIT_H 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_UNISTD_H 1 + +/* Define to 1 if you have the `waitpid' function. */ +#cmakedefine HAVE_WAITPID 1 + +/* Define to the sub-directory in which libtool stores uninstalled libraries. + */ +#cmakedefine LT_OBJDIR "@LT_OBJDIR@" + +/* Define to disable debugging assertions. */ +#cmakedefine NDEBUG 1 + +/* Define to optimize for accuracy over speed. */ +#cmakedefine OPT_ACCURACY 1 + +/* Define to optimize for speed over accuracy. */ +#cmakedefine OPT_SPEED 1 + +/* Define to enable a fast subband synthesis approximation optimization. */ +#cmakedefine OPT_SSO 1 + +/* Define to influence a strict interpretation of the ISO/IEC standards, even + if this is in opposition with best accepted practices. */ +#cmakedefine OPT_STRICT 1 + +/* Name of package */ +#cmakedefine PACKAGE "@PACKAGES" + +/* Define to the address where bug reports for this package should be sent. */ +#cmakedefine PACKAGE_BUGREPORT "@PACKAGE_BUGREPORT@" + +/* Define to the full name of this package. */ +#cmakedefine PACKAGE_NAME "@PACKAGE_NAME@" + +/* Define to the full name and version of this package. */ +#cmakedefine PACKAGE_STRING "@PACKAGE_STRING@" + +/* Define to the one symbol short name of this package. */ +#cmakedefine PACKAGE_TARNAME "@PACKAGE_TARNAME@" + +/* Define to the home page for this package. */ +#cmakedefine PACKAGE_URL "@PACKAGE_URL@" + +/* Define to the version of this package. */ +#cmakedefine PACKAGE_VERSION "@PACKAGE_VERSION@" + +/* The size of `int', as computed by sizeof. */ +#define SIZEOF_INT @SIZEOF_INT@ + +/* The size of `long', as computed by sizeof. */ +#define SIZEOF_LONG @SIZEOF_LONG@ + +/* The size of `long long', as computed by sizeof. */ +#define SIZEOF_LONG_LONG @SIZEOF_LONG_LONG@ + +/* Define to 1 if you have the ANSI C header files. */ +#cmakedefine STDC_HEADERS 1 + +/* Version number of package */ +#cmakedefine VERSION "@VERSION@" + +/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most + significant byte first (like Motorola and SPARC, unlike Intel). */ +#if defined AC_APPLE_UNIVERSAL_BUILD +# if defined __BIG_ENDIAN__ +# define WORDS_BIGENDIAN 1 +# endif +#else +# ifndef WORDS_BIGENDIAN +# cmakedefine WORDS_BIGENDIAN @WORDS_BIGENDIAN@ +# endif +#endif + +/* Define to empty if `const' does not conform to ANSI C. */ +#cmakedefine const @const@ + +/* Define to `__inline__' or `__inline' if that's what the C compiler + calls it, or to nothing if 'inline' is not supported under any name. */ +#ifndef __cplusplus +#cmakedefine inline @const@ +#endif + +/* Define to `int' if does not define. */ +#cmakedefine pid_t @pid_t@ + +/***************************************************************************** + * End of automatically configured definitions * + *****************************************************************************/ + +# endif diff --git a/cmake-proxies/libmad/mad.h.in b/cmake-proxies/libmad/mad.h.in new file mode 100755 index 000000000..fc5edb5b6 --- /dev/null +++ b/cmake-proxies/libmad/mad.h.in @@ -0,0 +1,15 @@ +#ifndef _MAD_H_ +#define _MAD_H_ + +#define @FPM@ + +#include "version.h" +#include "fixed.h" +#include "bit.h" +#include "timer.h" +#include "stream.h" +#include "frame.h" +#include "synth.h" +#include "decoder.h" + +#endif diff --git a/cmake-proxies/libnyquist/CMakeLists.txt b/cmake-proxies/libnyquist/CMakeLists.txt index a83602347..d5547830a 100644 --- a/cmake-proxies/libnyquist/CMakeLists.txt +++ b/cmake-proxies/libnyquist/CMakeLists.txt @@ -1,288 +1,307 @@ -#directory cmake-proxies/libnyquist -set( TARGET libnyquist ) -set( TARGET_SOURCE ${LIB_SRC_DIRECTORY}${TARGET} ) -project( ${TARGET} ) -set( SOURCES -${LIB_SRC_DIRECTORY}libnyquist/nyquist/nyqsrc/f0.cpp -${LIB_SRC_DIRECTORY}libnyquist/nyquist/nyqstk/instr.cpp -${LIB_SRC_DIRECTORY}libnyquist/nyquist/nyqstk/stkinit.cpp -${LIB_SRC_DIRECTORY}libnyquist/nyquist/nyqstk/stkint.cpp -${LIB_SRC_DIRECTORY}libnyquist/nyquist/nyqstk/src/ADSR.cpp -${LIB_SRC_DIRECTORY}libnyquist/nyquist/nyqstk/src/BandedWG.cpp -${LIB_SRC_DIRECTORY}libnyquist/nyquist/nyqstk/src/BiQuad.cpp -${LIB_SRC_DIRECTORY}libnyquist/nyquist/nyqstk/src/Bowed.cpp -${LIB_SRC_DIRECTORY}libnyquist/nyquist/nyqstk/src/BowTable.cpp -${LIB_SRC_DIRECTORY}libnyquist/nyquist/nyqstk/src/Chorus.cpp -${LIB_SRC_DIRECTORY}libnyquist/nyquist/nyqstk/src/Clarinet.cpp -${LIB_SRC_DIRECTORY}libnyquist/nyquist/nyqstk/src/Delay.cpp -${LIB_SRC_DIRECTORY}libnyquist/nyquist/nyqstk/src/DelayA.cpp -${LIB_SRC_DIRECTORY}libnyquist/nyquist/nyqstk/src/DelayL.cpp -${LIB_SRC_DIRECTORY}libnyquist/nyquist/nyqstk/src/Effect.cpp -${LIB_SRC_DIRECTORY}libnyquist/nyquist/nyqstk/src/Envelope.cpp -${LIB_SRC_DIRECTORY}libnyquist/nyquist/nyqstk/src/FileRead.cpp -${LIB_SRC_DIRECTORY}libnyquist/nyquist/nyqstk/src/FileWvIn.cpp -${LIB_SRC_DIRECTORY}libnyquist/nyquist/nyqstk/src/Filter.cpp -${LIB_SRC_DIRECTORY}libnyquist/nyquist/nyqstk/src/Flute.cpp -${LIB_SRC_DIRECTORY}libnyquist/nyquist/nyqstk/src/Function.cpp -${LIB_SRC_DIRECTORY}libnyquist/nyquist/nyqstk/src/Generator.cpp -${LIB_SRC_DIRECTORY}libnyquist/nyquist/nyqstk/src/Instrmnt.cpp -${LIB_SRC_DIRECTORY}libnyquist/nyquist/nyqstk/src/JCRev.cpp -${LIB_SRC_DIRECTORY}libnyquist/nyquist/nyqstk/src/JetTable.cpp -${LIB_SRC_DIRECTORY}libnyquist/nyquist/nyqstk/src/Mandolin.cpp -${LIB_SRC_DIRECTORY}libnyquist/nyquist/nyqstk/src/Modal.cpp -${LIB_SRC_DIRECTORY}libnyquist/nyquist/nyqstk/src/ModalBar.cpp -${LIB_SRC_DIRECTORY}libnyquist/nyquist/nyqstk/src/Noise.cpp -${LIB_SRC_DIRECTORY}libnyquist/nyquist/nyqstk/src/NRev.cpp -${LIB_SRC_DIRECTORY}libnyquist/nyquist/nyqstk/src/OnePole.cpp -${LIB_SRC_DIRECTORY}libnyquist/nyquist/nyqstk/src/OneZero.cpp -${LIB_SRC_DIRECTORY}libnyquist/nyquist/nyqstk/src/PitShift.cpp -${LIB_SRC_DIRECTORY}libnyquist/nyquist/nyqstk/src/PluckTwo.cpp -${LIB_SRC_DIRECTORY}libnyquist/nyquist/nyqstk/src/PoleZero.cpp -${LIB_SRC_DIRECTORY}libnyquist/nyquist/nyqstk/src/PRCRev.cpp -#${LIB_SRC_DIRECTORY}libnyquist/nyquist/nyqstk/src/ReedTabl.cpp #Junk?? -${LIB_SRC_DIRECTORY}libnyquist/nyquist/nyqstk/src/ReedTable.cpp -${LIB_SRC_DIRECTORY}libnyquist/nyquist/nyqstk/src/Saxofony.cpp -${LIB_SRC_DIRECTORY}libnyquist/nyquist/nyqstk/src/SineWave.cpp -${LIB_SRC_DIRECTORY}libnyquist/nyquist/nyqstk/src/Sitar.cpp -${LIB_SRC_DIRECTORY}libnyquist/nyquist/nyqstk/src/Stk.cpp -${LIB_SRC_DIRECTORY}libnyquist/nyquist/nyqstk/src/WaveLoop.cpp -${LIB_SRC_DIRECTORY}libnyquist/nyquist/nyqstk/src/WvIn.cpp -#${LIB_SRC_DIRECTORY}libnyquist/nyquist/sys/win/wingui/longque.cpp -#${LIB_SRC_DIRECTORY}libnyquist/nyquist/sys/win/wingui/textio.cpp -#${LIB_SRC_DIRECTORY}libnyquist/nyquist/sys/win/wingui/winmain.cpp +add_library( ${TARGET} STATIC ) -${LIB_SRC_DIRECTORY}libnyquist/nyx.c -${LIB_SRC_DIRECTORY}libnyquist/xlextstart.c +list( APPEND SOURCES + PRIVATE + # libnyquist -${LIB_SRC_DIRECTORY}libnyquist/nyx.c -${LIB_SRC_DIRECTORY}libnyquist/xlextstart.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/cmt/cext.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/cmt/cleanup.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/cmt/cmdline.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/cmt/cmtcmd.c -#${LIB_SRC_DIRECTORY}libnyquist/nyquist/cmt/cmtio.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/cmt/mem.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/cmt/midifile.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/cmt/midifns.c -#${LIB_SRC_DIRECTORY}libnyquist/nyquist/cmt/midimgr.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/cmt/moxc.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/cmt/record.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/cmt/seq.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/cmt/seqmread.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/cmt/seqmwrite.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/cmt/seqread.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/cmt/seqwrite.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/cmt/tempomap.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/cmt/timebase.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/cmt/userio.c -#${LIB_SRC_DIRECTORY}libnyquist/nyquist/ffts/Matlab-testing/conv2dTest.c -#${LIB_SRC_DIRECTORY}libnyquist/nyquist/ffts/Matlab-testing/convTest.c -#${LIB_SRC_DIRECTORY}libnyquist/nyquist/ffts/Matlab-testing/rfft2dTestML.c -#${LIB_SRC_DIRECTORY}libnyquist/nyquist/ffts/Numerical-Recipes-testing/fftTest.c -#${LIB_SRC_DIRECTORY}libnyquist/nyquist/ffts/Numerical-Recipes-testing/fftTest2d.c -#${LIB_SRC_DIRECTORY}libnyquist/nyquist/ffts/Numerical-Recipes-testing/fftTest3d.c -#${LIB_SRC_DIRECTORY}libnyquist/nyquist/ffts/Numerical-Recipes-testing/rfftTest.c -#${LIB_SRC_DIRECTORY}libnyquist/nyquist/ffts/Numerical-Recipes-testing/rfftTest2d.c -#${LIB_SRC_DIRECTORY}libnyquist/nyquist/ffts/src/dxpose.c -#${LIB_SRC_DIRECTORY}libnyquist/nyquist/ffts/src/fft2d.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/ffts/src/fftext.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/ffts/src/fftlib.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/ffts/src/matlib.c -#${LIB_SRC_DIRECTORY}libnyquist/nyquist/ffts/Timing-code/fftTiming.c -#${LIB_SRC_DIRECTORY}libnyquist/nyquist/ffts/Timing-code/rfftTiming.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/nyqsrc/add.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/nyqsrc/avg.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/nyqsrc/compose.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/nyqsrc/convolve.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/nyqsrc/debug.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/nyqsrc/downsample.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/nyqsrc/falloc.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/nyqsrc/ffilterkit.c -#${LIB_SRC_DIRECTORY}libnyquist/nyquist/nyqsrc/fft-rbd.c #?? using official fft.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/nyqsrc/fft.c -#${LIB_SRC_DIRECTORY}libnyquist/nyquist/nyqsrc/fftr4.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/nyqsrc/handlers.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/nyqsrc/inverse.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/nyqsrc/local.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/nyqsrc/lpanal.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/nyqsrc/multiread.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/nyqsrc/multiseq.c -#${LIB_SRC_DIRECTORY}libnyquist/nyquist/nyqsrc/nfilterkit.c -#${LIB_SRC_DIRECTORY}libnyquist/nyquist/nyqsrc/nyq-osc-server.c -#${LIB_SRC_DIRECTORY}libnyquist/nyquist/nyqsrc/nyx.c -#${LIB_SRC_DIRECTORY}libnyquist/nyquist/nyqsrc/oldyin.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/nyqsrc/phasevocoder.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/nyqsrc/probe.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/nyqsrc/pvshell.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/nyqsrc/resamp.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/nyqsrc/resampv.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/nyqsrc/samples.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/nyqsrc/seqext.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/nyqsrc/seqfnint.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/nyqsrc/seqinterf.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/nyqsrc/sliderdata.c -#${LIB_SRC_DIRECTORY}libnyquist/nyquist/nyqsrc/sndfail.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/nyqsrc/sndfnint.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/nyqsrc/sndmax.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/nyqsrc/sndread.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/nyqsrc/sndseq.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/nyqsrc/sndsliders.c -#${LIB_SRC_DIRECTORY}libnyquist/nyquist/nyqsrc/sndwrite.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/nyqsrc/sndwritepa.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/nyqsrc/sound.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/nyqsrc/stats.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/nyqsrc/trigger.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/nyqsrc/yin.c -#${LIB_SRC_DIRECTORY}libnyquist/nyquist/sys/mac/macaboutbox.c -#${LIB_SRC_DIRECTORY}libnyquist/nyquist/sys/mac/MacAE.c -#${LIB_SRC_DIRECTORY}libnyquist/nyquist/sys/mac/MacCommandWin.c -#${LIB_SRC_DIRECTORY}libnyquist/nyquist/sys/mac/macdrag.c -#${LIB_SRC_DIRECTORY}libnyquist/nyquist/sys/mac/MacFileUtils.c -#${LIB_SRC_DIRECTORY}libnyquist/nyquist/sys/mac/macfun.c -#${LIB_SRC_DIRECTORY}libnyquist/nyquist/sys/mac/MacHandleEv.c -#${LIB_SRC_DIRECTORY}libnyquist/nyquist/sys/mac/macint.c -#${LIB_SRC_DIRECTORY}libnyquist/nyquist/sys/mac/macstuff.c -#${LIB_SRC_DIRECTORY}libnyquist/nyquist/sys/mac/xlextstart.c -#${LIB_SRC_DIRECTORY}libnyquist/nyquist/sys/unix/io.c -#${LIB_SRC_DIRECTORY}libnyquist/nyquist/sys/unix/osstuff.c -#${LIB_SRC_DIRECTORY}libnyquist/nyquist/sys/unix/term.c -#${LIB_SRC_DIRECTORY}libnyquist/nyquist/sys/unix/termtest.c -#${LIB_SRC_DIRECTORY}libnyquist/nyquist/sys/win/msvc/winfun.c -#${LIB_SRC_DIRECTORY}libnyquist/nyquist/sys/win/msvc/winstuff.c -#${LIB_SRC_DIRECTORY}libnyquist/nyquist/sys/win/wingui/winguistuff.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/sys/win/wingui/xlextstart.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/sys/win/wingui/xlispfns.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/tran/abs.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/tran/allpoles.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/tran/alpass.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/tran/alpasscv.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/tran/alpassvc.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/tran/alpassvv.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/tran/amosc.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/tran/areson.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/tran/aresoncv.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/tran/aresonvc.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/tran/aresonvv.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/tran/atone.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/tran/atonev.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/tran/biquadfilt.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/tran/buzz.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/tran/chase.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/tran/clip.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/tran/congen.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/tran/const.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/tran/coterm.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/tran/delaycc.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/tran/delaycv.c -#${LIB_SRC_DIRECTORY}libnyquist/nyquist/tran/downproto.c #?? Used downsample.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/tran/eqbandvvv.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/tran/exp.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/tran/fmfb.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/tran/fmfbv.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/tran/fmosc.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/tran/follow.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/tran/fromarraystream.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/tran/fromobject.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/tran/gate.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/tran/ifft.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/tran/instrbanded.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/tran/instrbow.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/tran/instrbowedfreq.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/tran/instrclar.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/tran/instrclarall.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/tran/instrclarfreq.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/tran/instrflute.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/tran/instrfluteall.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/tran/instrflutefreq.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/tran/instrmandolin.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/tran/instrmodalbar.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/tran/instrsax.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/tran/instrsaxall.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/tran/instrsaxfreq.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/tran/instrsitar.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/tran/integrate.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/tran/log.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/tran/lpreson.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/tran/maxv.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/tran/offset.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/tran/oneshot.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/tran/osc.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/tran/partial.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/tran/pluck.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/tran/prod.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/tran/pwl.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/tran/quantize.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/tran/recip.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/tran/reson.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/tran/resoncv.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/tran/resonvc.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/tran/resonvv.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/tran/sampler.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/tran/scale.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/tran/shape.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/tran/sine.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/tran/siosc.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/tran/slope.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/tran/sqrt.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/tran/stkchorus.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/tran/stkpitshift.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/tran/stkrev.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/tran/tapf.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/tran/tapv.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/tran/tone.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/tran/tonev.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/tran/upsample.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/tran/white.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/xlisp/extern.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/xlisp/path.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/xlisp/security.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/xlisp/xlbfun.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/xlisp/xlcont.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/xlisp/xldbug.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/xlisp/xldmem.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/xlisp/xleval.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/xlisp/xlfio.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/xlisp/xlftab.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/xlisp/xlglob.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/xlisp/xlimage.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/xlisp/xlinit.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/xlisp/xlio.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/xlisp/xlisp.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/xlisp/xljump.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/xlisp/xllist.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/xlisp/xlmath.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/xlisp/xlobj.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/xlisp/xlpp.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/xlisp/xlprin.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/xlisp/xlread.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/xlisp/xlstr.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/xlisp/xlsubr.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/xlisp/xlsym.c -${LIB_SRC_DIRECTORY}libnyquist/nyquist/xlisp/xlsys.c -) -# This defines the #define on both Windows and Linux. -add_definitions( -DWIN32 -D_LIB ) -add_library( ${TARGET} STATIC ${SOURCES}) + ${TARGET_ROOT}/nyx.c -target_include_directories( ${TARGET} PRIVATE -${TARGET_SOURCE} -${TARGET_SOURCE}/nyquist -${TARGET_SOURCE}/nyquist/cmt -${TARGET_SOURCE}/nyquist/ffts/src -${TARGET_SOURCE}/nyquist/nyqsrc -${TARGET_SOURCE}/nyquist/nyqstk -${TARGET_SOURCE}/nyquist/nyqstk/include -${TARGET_SOURCE}/nyquist/snd -${TARGET_SOURCE}/nyquist/tran -${TARGET_SOURCE}/nyquist/sys/win/msvc -${TARGET_SOURCE}/nyquist/xlisp -${TARGET_SOURCE}/nyquist/win -${top_dir}/win/Projects/libsndfile # This is terrible place for sndfile.h! -${LIB_SRC_DIRECTORY}portaudio-v19/include + # libnyquist/nyquist/cmt + + ${TARGET_ROOT}/nyquist/cmt/cext.c + ${TARGET_ROOT}/nyquist/cmt/cleanup.c + ${TARGET_ROOT}/nyquist/cmt/cmdline.c + ${TARGET_ROOT}/nyquist/cmt/cmtcmd.c + ${TARGET_ROOT}/nyquist/cmt/mem.c + ${TARGET_ROOT}/nyquist/cmt/midifile.c + ${TARGET_ROOT}/nyquist/cmt/midifns.c + ${TARGET_ROOT}/nyquist/cmt/moxc.c + ${TARGET_ROOT}/nyquist/cmt/record.c + ${TARGET_ROOT}/nyquist/cmt/seq.c + ${TARGET_ROOT}/nyquist/cmt/seqmread.c + ${TARGET_ROOT}/nyquist/cmt/seqmwrite.c + ${TARGET_ROOT}/nyquist/cmt/seqread.c + ${TARGET_ROOT}/nyquist/cmt/seqwrite.c + ${TARGET_ROOT}/nyquist/cmt/tempomap.c + ${TARGET_ROOT}/nyquist/cmt/timebase.c + ${TARGET_ROOT}/nyquist/cmt/userio.c + + # libnyquist/nyquist/cmupv + + ${TARGET_ROOT}/nyquist/cmupv/src/cmupv.c + ${TARGET_ROOT}/nyquist/cmupv/src/cmupvdbg.c + ${TARGET_ROOT}/nyquist/cmupv/src/internal.c + + # libnyquist/nyquist/ffts + + ${TARGET_ROOT}/nyquist/ffts/src/fftext.c + ${TARGET_ROOT}/nyquist/ffts/src/fftlib.c + ${TARGET_ROOT}/nyquist/ffts/src/matlib.c + + # libnyquist/nyquist/nyqsrc + + ${TARGET_ROOT}/nyquist/nyqsrc/add.c + ${TARGET_ROOT}/nyquist/nyqsrc/avg.c + ${TARGET_ROOT}/nyquist/nyqsrc/compose.c + ${TARGET_ROOT}/nyquist/nyqsrc/convolve.c + ${TARGET_ROOT}/nyquist/nyqsrc/debug.c + ${TARGET_ROOT}/nyquist/nyqsrc/downsample.c + ${TARGET_ROOT}/nyquist/nyqsrc/f0.cpp + ${TARGET_ROOT}/nyquist/nyqsrc/falloc.c + ${TARGET_ROOT}/nyquist/nyqsrc/ffilterkit.c + ${TARGET_ROOT}/nyquist/nyqsrc/fft.c + ${TARGET_ROOT}/nyquist/nyqsrc/handlers.c + ${TARGET_ROOT}/nyquist/nyqsrc/inverse.c + ${TARGET_ROOT}/nyquist/nyqsrc/local.c + ${TARGET_ROOT}/nyquist/nyqsrc/lpanal.c + ${TARGET_ROOT}/nyquist/nyqsrc/multiread.c + ${TARGET_ROOT}/nyquist/nyqsrc/multiseq.c + ${TARGET_ROOT}/nyquist/nyqsrc/phasevocoder.c + ${TARGET_ROOT}/nyquist/nyqsrc/probe.c + ${TARGET_ROOT}/nyquist/nyqsrc/pvshell.c + ${TARGET_ROOT}/nyquist/nyqsrc/resamp.c + ${TARGET_ROOT}/nyquist/nyqsrc/resampv.c + ${TARGET_ROOT}/nyquist/nyqsrc/samples.c + ${TARGET_ROOT}/nyquist/nyqsrc/seqext.c + ${TARGET_ROOT}/nyquist/nyqsrc/seqfnint.c + ${TARGET_ROOT}/nyquist/nyqsrc/seqinterf.c + ${TARGET_ROOT}/nyquist/nyqsrc/sliderdata.c + ${TARGET_ROOT}/nyquist/nyqsrc/sndfnint.c + ${TARGET_ROOT}/nyquist/nyqsrc/sndmax.c + ${TARGET_ROOT}/nyquist/nyqsrc/sndread.c + ${TARGET_ROOT}/nyquist/nyqsrc/sndseq.c + ${TARGET_ROOT}/nyquist/nyqsrc/sndsliders.c + ${TARGET_ROOT}/nyquist/nyqsrc/sndwritepa.c + ${TARGET_ROOT}/nyquist/nyqsrc/sound.c + ${TARGET_ROOT}/nyquist/nyqsrc/stats.c + ${TARGET_ROOT}/nyquist/nyqsrc/stoponzero.c + ${TARGET_ROOT}/nyquist/nyqsrc/trigger.c + ${TARGET_ROOT}/nyquist/nyqsrc/yin.c + + # libnyquist/nyquist/nyqstk + + ${TARGET_ROOT}/nyquist/nyqstk/instr.cpp + ${TARGET_ROOT}/nyquist/nyqstk/stkinit.cpp + ${TARGET_ROOT}/nyquist/nyqstk/stkint.cpp + ${TARGET_ROOT}/nyquist/nyqstk/src/ADSR.cpp + ${TARGET_ROOT}/nyquist/nyqstk/src/BandedWG.cpp + ${TARGET_ROOT}/nyquist/nyqstk/src/BiQuad.cpp + ${TARGET_ROOT}/nyquist/nyqstk/src/Bowed.cpp + ${TARGET_ROOT}/nyquist/nyqstk/src/BowTable.cpp + ${TARGET_ROOT}/nyquist/nyqstk/src/Chorus.cpp + ${TARGET_ROOT}/nyquist/nyqstk/src/Clarinet.cpp + ${TARGET_ROOT}/nyquist/nyqstk/src/Delay.cpp + ${TARGET_ROOT}/nyquist/nyqstk/src/DelayA.cpp + ${TARGET_ROOT}/nyquist/nyqstk/src/DelayL.cpp + ${TARGET_ROOT}/nyquist/nyqstk/src/Effect.cpp + ${TARGET_ROOT}/nyquist/nyqstk/src/Envelope.cpp + ${TARGET_ROOT}/nyquist/nyqstk/src/FileRead.cpp + ${TARGET_ROOT}/nyquist/nyqstk/src/FileWvIn.cpp + ${TARGET_ROOT}/nyquist/nyqstk/src/Filter.cpp + ${TARGET_ROOT}/nyquist/nyqstk/src/Flute.cpp + ${TARGET_ROOT}/nyquist/nyqstk/src/Function.cpp + ${TARGET_ROOT}/nyquist/nyqstk/src/Generator.cpp + ${TARGET_ROOT}/nyquist/nyqstk/src/Instrmnt.cpp + ${TARGET_ROOT}/nyquist/nyqstk/src/JCRev.cpp + ${TARGET_ROOT}/nyquist/nyqstk/src/JetTable.cpp + ${TARGET_ROOT}/nyquist/nyqstk/src/Mandolin.cpp + ${TARGET_ROOT}/nyquist/nyqstk/src/Modal.cpp + ${TARGET_ROOT}/nyquist/nyqstk/src/ModalBar.cpp + ${TARGET_ROOT}/nyquist/nyqstk/src/Noise.cpp + ${TARGET_ROOT}/nyquist/nyqstk/src/NRev.cpp + ${TARGET_ROOT}/nyquist/nyqstk/src/OnePole.cpp + ${TARGET_ROOT}/nyquist/nyqstk/src/OneZero.cpp + ${TARGET_ROOT}/nyquist/nyqstk/src/PitShift.cpp + ${TARGET_ROOT}/nyquist/nyqstk/src/PluckTwo.cpp + ${TARGET_ROOT}/nyquist/nyqstk/src/PoleZero.cpp + ${TARGET_ROOT}/nyquist/nyqstk/src/PRCRev.cpp + ${TARGET_ROOT}/nyquist/nyqstk/src/ReedTable.cpp + ${TARGET_ROOT}/nyquist/nyqstk/src/Saxofony.cpp + ${TARGET_ROOT}/nyquist/nyqstk/src/SineWave.cpp + ${TARGET_ROOT}/nyquist/nyqstk/src/Sitar.cpp + ${TARGET_ROOT}/nyquist/nyqstk/src/Stk.cpp + ${TARGET_ROOT}/nyquist/nyqstk/src/WaveLoop.cpp + ${TARGET_ROOT}/nyquist/nyqstk/src/WvIn.cpp + + + # libnyquist/nyquist/sys + + #${TARGET_ROOT}/nyquist/sys/mac/macaboutbox.c + #${TARGET_ROOT}/nyquist/sys/mac/MacAE.c + #${TARGET_ROOT}/nyquist/sys/mac/MacCommandWin.c + #${TARGET_ROOT}/nyquist/sys/mac/macdrag.c + #${TARGET_ROOT}/nyquist/sys/mac/MacFileUtils.c + #${TARGET_ROOT}/nyquist/sys/mac/macfun.c + #${TARGET_ROOT}/nyquist/sys/mac/MacHandleEv.c + #${TARGET_ROOT}/nyquist/sys/mac/macint.c + #${TARGET_ROOT}/nyquist/sys/mac/macstuff.c + #${TARGET_ROOT}/nyquist/sys/mac/xlextstart.c + #${TARGET_ROOT}/nyquist/sys/unix/io.c + #${TARGET_ROOT}/nyquist/sys/unix/osstuff.c + #${TARGET_ROOT}/nyquist/sys/unix/term.c + #${TARGET_ROOT}/nyquist/sys/unix/termtest.c + #${TARGET_ROOT}/nyquist/sys/win/msvc/winfun.c + #${TARGET_ROOT}/nyquist/sys/win/msvc/winstuff.c + #${TARGET_ROOT}/nyquist/sys/win/wingui/winguistuff.c + #${TARGET_ROOT}/nyquist/sys/win/wingui/xlextstart.c + #${TARGET_ROOT}/nyquist/sys/win/wingui/xlispfns.c + + # libnyquist/nyquist/tran + + ${TARGET_ROOT}/nyquist/tran/abs.c + ${TARGET_ROOT}/nyquist/tran/allpoles.c + ${TARGET_ROOT}/nyquist/tran/alpass.c + ${TARGET_ROOT}/nyquist/tran/alpasscv.c + ${TARGET_ROOT}/nyquist/tran/alpassvc.c + ${TARGET_ROOT}/nyquist/tran/alpassvv.c + ${TARGET_ROOT}/nyquist/tran/amosc.c + ${TARGET_ROOT}/nyquist/tran/areson.c + ${TARGET_ROOT}/nyquist/tran/aresoncv.c + ${TARGET_ROOT}/nyquist/tran/aresonvc.c + ${TARGET_ROOT}/nyquist/tran/aresonvv.c + ${TARGET_ROOT}/nyquist/tran/atone.c + ${TARGET_ROOT}/nyquist/tran/atonev.c + ${TARGET_ROOT}/nyquist/tran/biquadfilt.c + ${TARGET_ROOT}/nyquist/tran/buzz.c + ${TARGET_ROOT}/nyquist/tran/chase.c + ${TARGET_ROOT}/nyquist/tran/clip.c + ${TARGET_ROOT}/nyquist/tran/congen.c + ${TARGET_ROOT}/nyquist/tran/const.c + ${TARGET_ROOT}/nyquist/tran/coterm.c + ${TARGET_ROOT}/nyquist/tran/delaycc.c + ${TARGET_ROOT}/nyquist/tran/delaycv.c + ${TARGET_ROOT}/nyquist/tran/eqbandvvv.c + ${TARGET_ROOT}/nyquist/tran/exp.c + ${TARGET_ROOT}/nyquist/tran/fmfb.c + ${TARGET_ROOT}/nyquist/tran/fmfbv.c + ${TARGET_ROOT}/nyquist/tran/fmosc.c + ${TARGET_ROOT}/nyquist/tran/follow.c + ${TARGET_ROOT}/nyquist/tran/fromarraystream.c + ${TARGET_ROOT}/nyquist/tran/fromobject.c + ${TARGET_ROOT}/nyquist/tran/gate.c + ${TARGET_ROOT}/nyquist/tran/ifft.c + ${TARGET_ROOT}/nyquist/tran/instrbanded.c + ${TARGET_ROOT}/nyquist/tran/instrbow.c + ${TARGET_ROOT}/nyquist/tran/instrbowedfreq.c + ${TARGET_ROOT}/nyquist/tran/instrclar.c + ${TARGET_ROOT}/nyquist/tran/instrclarall.c + ${TARGET_ROOT}/nyquist/tran/instrclarfreq.c + ${TARGET_ROOT}/nyquist/tran/instrflute.c + ${TARGET_ROOT}/nyquist/tran/instrfluteall.c + ${TARGET_ROOT}/nyquist/tran/instrflutefreq.c + ${TARGET_ROOT}/nyquist/tran/instrmandolin.c + ${TARGET_ROOT}/nyquist/tran/instrmodalbar.c + ${TARGET_ROOT}/nyquist/tran/instrsax.c + ${TARGET_ROOT}/nyquist/tran/instrsaxall.c + ${TARGET_ROOT}/nyquist/tran/instrsaxfreq.c + ${TARGET_ROOT}/nyquist/tran/instrsitar.c + ${TARGET_ROOT}/nyquist/tran/integrate.c + ${TARGET_ROOT}/nyquist/tran/log.c + ${TARGET_ROOT}/nyquist/tran/lpreson.c + ${TARGET_ROOT}/nyquist/tran/maxv.c + ${TARGET_ROOT}/nyquist/tran/offset.c + ${TARGET_ROOT}/nyquist/tran/oneshot.c + ${TARGET_ROOT}/nyquist/tran/osc.c + ${TARGET_ROOT}/nyquist/tran/partial.c + ${TARGET_ROOT}/nyquist/tran/pluck.c + ${TARGET_ROOT}/nyquist/tran/prod.c + ${TARGET_ROOT}/nyquist/tran/pwl.c + ${TARGET_ROOT}/nyquist/tran/quantize.c + ${TARGET_ROOT}/nyquist/tran/recip.c + ${TARGET_ROOT}/nyquist/tran/reson.c + ${TARGET_ROOT}/nyquist/tran/resoncv.c + ${TARGET_ROOT}/nyquist/tran/resonvc.c + ${TARGET_ROOT}/nyquist/tran/resonvv.c + ${TARGET_ROOT}/nyquist/tran/sampler.c + ${TARGET_ROOT}/nyquist/tran/scale.c + ${TARGET_ROOT}/nyquist/tran/shape.c + ${TARGET_ROOT}/nyquist/tran/sine.c + ${TARGET_ROOT}/nyquist/tran/siosc.c + ${TARGET_ROOT}/nyquist/tran/slope.c + ${TARGET_ROOT}/nyquist/tran/sqrt.c + ${TARGET_ROOT}/nyquist/tran/stkchorus.c + ${TARGET_ROOT}/nyquist/tran/stkpitshift.c + ${TARGET_ROOT}/nyquist/tran/stkrev.c + ${TARGET_ROOT}/nyquist/tran/tapf.c + ${TARGET_ROOT}/nyquist/tran/tapv.c + ${TARGET_ROOT}/nyquist/tran/tone.c + ${TARGET_ROOT}/nyquist/tran/tonev.c + ${TARGET_ROOT}/nyquist/tran/upsample.c + ${TARGET_ROOT}/nyquist/tran/white.c + + # libnyquist/nyquist/xlisp + + ${TARGET_ROOT}/nyquist/xlisp/extern.c + ${TARGET_ROOT}/nyquist/xlisp/path.c + ${TARGET_ROOT}/nyquist/xlisp/security.c + ${TARGET_ROOT}/nyquist/xlisp/xlbfun.c + ${TARGET_ROOT}/nyquist/xlisp/xlcont.c + ${TARGET_ROOT}/nyquist/xlisp/xldbug.c + ${TARGET_ROOT}/nyquist/xlisp/xldmem.c + ${TARGET_ROOT}/nyquist/xlisp/xleval.c + ${TARGET_ROOT}/nyquist/xlisp/xlfio.c + ${TARGET_ROOT}/nyquist/xlisp/xlftab.c + ${TARGET_ROOT}/nyquist/xlisp/xlglob.c + ${TARGET_ROOT}/nyquist/xlisp/xlimage.c + ${TARGET_ROOT}/nyquist/xlisp/xlinit.c + ${TARGET_ROOT}/nyquist/xlisp/xlio.c + ${TARGET_ROOT}/nyquist/xlisp/xlisp.c + ${TARGET_ROOT}/nyquist/xlisp/xljump.c + ${TARGET_ROOT}/nyquist/xlisp/xllist.c + ${TARGET_ROOT}/nyquist/xlisp/xlmath.c + ${TARGET_ROOT}/nyquist/xlisp/xlobj.c + ${TARGET_ROOT}/nyquist/xlisp/xlpp.c + ${TARGET_ROOT}/nyquist/xlisp/xlprin.c + ${TARGET_ROOT}/nyquist/xlisp/xlread.c + ${TARGET_ROOT}/nyquist/xlisp/xlstr.c + ${TARGET_ROOT}/nyquist/xlisp/xlsubr.c + ${TARGET_ROOT}/nyquist/xlisp/xlsym.c + ${TARGET_ROOT}/nyquist/xlisp/xlsys.c ) -target_link_libraries( ${TARGET} ) +list( APPEND INCLUDES + PRIVATE + ${TARGET_ROOT}/nyquist/cmt + ${TARGET_ROOT}/nyquist/cmupv/src + ${TARGET_ROOT}/nyquist/ffts/src + ${TARGET_ROOT}/nyquist/nyqsrc + ${TARGET_ROOT}/nyquist/nyqstk + ${TARGET_ROOT}/nyquist/nyqstk/include + ${TARGET_ROOT}/nyquist/tran + ${TARGET_ROOT}/nyquist/xlisp + $<$:${TARGET_ROOT}/nyquist/sys/unix> + $<$:${TARGET_ROOT}/nyquist/sys/unix> + $<$:${TARGET_ROOT}/nyquist/sys/win/msvc> + PUBLIC + ${TARGET_ROOT} +) + +list( APPEND DEFINES + PRIVATE + CMTSTUFF + EXT + $<$:_LIB WIN32 D_LIB> +) + +list( APPEND OPTIONS + PRIVATE + $<$:-fno-common> +) + +list( APPEND LIBRARIES + PRIVATE + portaudio-v19 + libsndfile +) + +organize_source( "${TARGET_ROOT}" "" "${SOURCES}" ) +target_sources( ${TARGET} PRIVATE ${SOURCES} ) +target_compile_definitions( ${TARGET} PRIVATE ${DEFINES} ) +target_compile_features( ${TARGET} PRIVATE ${FEATURES} ) +target_compile_options( ${TARGET} PRIVATE ${OPTIONS} ) +target_include_directories( ${TARGET} PRIVATE ${INCLUDES} ) +target_link_libraries( ${TARGET} PRIVATE ${LIBRARIES} ) diff --git a/cmake-proxies/libogg/CMakeLists.txt b/cmake-proxies/libogg/CMakeLists.txt index e99be56e5..425e58a11 100644 --- a/cmake-proxies/libogg/CMakeLists.txt +++ b/cmake-proxies/libogg/CMakeLists.txt @@ -1,96 +1,89 @@ -#directory cmake-proxies/libogg -set(TARGET libogg) -set(TARGET_SOURCE ${LIB_SRC_DIRECTORY}${TARGET}) -project(${TARGET}) +add_library( ${TARGET} STATIC ) -include(CheckIncludeFile) -include(CheckTypeSize) +list( APPEND SOURCES + PRIVATE + ${TARGET_ROOT}/src/bitwise.c + ${TARGET_ROOT}/src/framing.c +) -check_include_file("inttypes.h" INCLUDE_INTTYPES_H) -check_include_file("stdint.h" INCLUDE_STDINT_H) -check_include_file("sys/types.h" INCLUDE_SYS_TYPES_H) +list( APPEND INCLUDES + PUBLIC + ${CMAKE_CURRENT_BINARY_DIR}/public + ${TARGET_ROOT}/include +) -check_type_size("int16_t" INT16_SIZE LANGUAGE C) -check_type_size("uint16_t" UINT16_SIZE LANGUAGE C) -check_type_size("u_int16_t" U_INT16_SIZE LANGUAGE C) -check_type_size("int32_t" INT32_SIZE LANGUAGE C) -check_type_size("uint32_t" UINT32_SIZE LANGUAGE C) -check_type_size("u_int32_t" U_INT32_SIZE LANGUAGE C) -check_type_size("int64_t" INT64_SIZE LANGUAGE C) -check_type_size("short" SHORT_SIZE LANGUAGE C) -check_type_size("int" INT_SIZE LANGUAGE C) -check_type_size("long" LONG_SIZE LANGUAGE C) -check_type_size("long long" LONG_LONG_SIZE LANGUAGE C) - -if(INT16_SIZE EQUAL 2) - set(SIZE16 "int16_t") -elseif(SHORT_SIZE EQUAL 2) - set(SIZE16 "short") -elseif(INT_SIZE EQUAL 2) - set(SIZE16 "int") +if( SIZEOF_INT16 EQUAL 2 ) + set( SIZE16 "int16_t" ) +elseif( SIZEOF_SHORT EQUAL 2 ) + set( SIZE16 "short" ) +elseif( SIZEOF_INT EQUAL 2 ) + set( SIZE16 "int" ) else() - message(FATAL_ERROR "No 16 bit type found on this platform!") + message( FATAL_ERROR "No 16 bit type found on this platform!" ) endif() -if(UINT16_SIZE EQUAL 2) - set(USIZE16 "uint16_t") -elseif(SHORT_SIZE EQUAL 2) - set(USIZE16 "unsigned short") -elseif(INT_SIZE EQUAL 2) - set(USIZE16 "unsigned int") -elseif(U_INT_SIZE EQUAL 2) - set(USIZE16 "u_int16_t") +if( SIZEOF_UINT16 EQUAL 2 ) + set( USIZE16 "uint16_t" ) +elseif( SIZEOF_SHORT EQUAL 2 ) + set( USIZE16 "unsigned short" ) +elseif( SIZEOF_INT EQUAL 2 ) + set( USIZE16 "unsigned int" ) +elseif( SIZEOF_U_INT EQUAL 2 ) + set( USIZE16 "u_int16_t" ) else() - message(FATAL_ERROR "No unsigned 16 bit type found on this platform!") + message( FATAL_ERROR "No unsigned 16 bit type found on this platform!" ) endif() -if(INT32_SIZE EQUAL 4) - set(SIZE32 "int32_t") -elseif(SHORT_SIZE EQUAL 4) - set(SIZE32 "short") -elseif(INT_SIZE EQUAL 4) - set(SIZE32 "int") -elseif(LONG_SIZE EQUAL 4) - set(SIZE16 "long") +if( SIZEOF_INT32 EQUAL 4 ) + set( SIZE32 "int32_t" ) +elseif( SIZEOF_SHORT EQUAL 4 ) + set( SIZE32 "short" ) +elseif( SIZEOF_INT EQUAL 4 ) + set( SIZE32 "int" ) +elseif( SIZEOF_LONG EQUAL 4 ) + set( SIZE16 "long" ) else() - message(FATAL_ERROR "No 32 bit type found on this platform!") + message( FATAL_ERROR "No 32 bit type found on this platform!" ) endif() -if(UINT32_SIZE EQUAL 4) - set(USIZE32 "uint32_t") -elseif(SHORT_SIZE EQUAL 4) - set(USIZE32 "unsigned short") -elseif(INT_SIZE EQUAL 4) - set(USIZE32 "unsigned int") -elseif(LONG_SIZE EQUAL 4) - set(USIZE32 "unsigned long") -elseif(U_INT_SIZE EQUAL 4) - set(USIZE32 "u_int32_t") +if( SIZEOF_UINT32 EQUAL 4 ) + set( USIZE32 "uint32_t" ) +elseif( SIZEOF_SHORT EQUAL 4 ) + set( USIZE32 "unsigned short" ) +elseif( SIZEOF_INT EQUAL 4 ) + set( USIZE32 "unsigned int" ) +elseif( SIZEOF_LONG EQUAL 4 ) + set( USIZE32 "unsigned long" ) +elseif( SIZEOF_U_INT EQUAL 4 ) + set( USIZE32 "u_int32_t" ) else() - message(FATAL_ERROR "No unsigned 32 bit type found on this platform!") + message( FATAL_ERROR "No unsigned 32 bit type found on this platform!" ) endif() -if(INT64_SIZE EQUAL 8) - set(SIZE64 "int64_t") -elseif(INT_SIZE EQUAL 8) - set(SIZE64 "int") -elseif(LONG_SIZE EQUAL 8) - set(SIZE64 "long") -elseif(LONG_LONG_SIZE EQUAL 8) - set(SIZE64 "long long") +if( SIZEOF_INT64 EQUAL 8 ) + set( SIZE64 "int64_t" ) +elseif( SIZEOF_INT EQUAL 8 ) + set( SIZE64 "int" ) +elseif( SIZEOF_LONG EQUAL 8 ) + set( SIZE64 "long" ) +elseif( SIZEOF_LONG_LONG EQUAL 8 ) + set( SIZE64 "long long" ) else() - message(FATAL_ERROR "No 64 bit type found on this platform!") + message( FATAL_ERROR "No 64 bit type found on this platform!" ) endif() -configure_file( - "${LIB_SRC_DIRECTORY}libogg/include/ogg/config_types.h.in" - "ogg/config_types.h") +set( INCLUDE_INTTYPES_H ${HAVE_INTTYPES_H} ) +set( INCLUDE_STDINT_H ${HAVE_STDINT_H} ) +set( INCLUDE_SYS_TYPES_H ${HAVE_SYS_TYPES_H} ) -add_library(${TARGET} - "${LIB_SRC_DIRECTORY}libogg/src/bitwise.c" - "${LIB_SRC_DIRECTORY}libogg/src/framing.c") +configure_file( config_types.h.in public/ogg/config_types.h ) + +organize_source( "${TARGET_ROOT}" "" "${SOURCES}" ) +target_sources( ${TARGET} PRIVATE ${SOURCES} ) +target_compile_definitions( ${TARGET} PRIVATE ${DEFINES} ) +target_compile_features( ${TARGET} PRIVATE ${FEATURES} ) +target_compile_options( ${TARGET} PRIVATE ${OPTIONS} ) +target_include_directories( ${TARGET} PRIVATE ${INCLUDES} ) +target_link_libraries( ${TARGET} PRIVATE ${LIBRARIES} ) -target_include_directories(${TARGET} PUBLIC - "${TARGET_SOURCE}/include" - "${CMAKE_CURRENT_BINARY_DIR}") diff --git a/cmake-proxies/libogg/config_types.h.in b/cmake-proxies/libogg/config_types.h.in new file mode 100644 index 000000000..750e29ddc --- /dev/null +++ b/cmake-proxies/libogg/config_types.h.in @@ -0,0 +1,25 @@ +#ifndef __CONFIG_TYPES_H__ +#define __CONFIG_TYPES_H__ + +/* these are filled in by configure */ +#define INCLUDE_INTTYPES_H @INCLUDE_INTTYPES_H@ +#define INCLUDE_STDINT_H @INCLUDE_STDINT_H@ +#define INCLUDE_SYS_TYPES_H @INCLUDE_SYS_TYPES_H@ + +#if INCLUDE_INTTYPES_H +# include +#endif +#if INCLUDE_STDINT_H +# include +#endif +#if INCLUDE_SYS_TYPES_H +# include +#endif + +typedef @SIZE16@ ogg_int16_t; +typedef @USIZE16@ ogg_uint16_t; +typedef @SIZE32@ ogg_int32_t; +typedef @USIZE32@ ogg_uint32_t; +typedef @SIZE64@ ogg_int64_t; + +#endif diff --git a/cmake-proxies/libscorealign/CMakeLists.txt b/cmake-proxies/libscorealign/CMakeLists.txt index 74616fa24..8d6a74b6b 100644 --- a/cmake-proxies/libscorealign/CMakeLists.txt +++ b/cmake-proxies/libscorealign/CMakeLists.txt @@ -1,34 +1,29 @@ -#directory cmake-proxies/libscorealign -set( TARGET libscorealign ) -set( TARGET_SOURCE ${LIB_SRC_DIRECTORY}${TARGET} ) -project( ${TARGET} ) -set( SOURCES -#${LIB_SRC_DIRECTORY}libscorealign/alignfiles.cpp -#${LIB_SRC_DIRECTORY}libscorealign/audiofilereader-snd.cpp -#${LIB_SRC_DIRECTORY}libscorealign/audiofilereader.cpp +add_library( ${TARGET} STATIC ) -${LIB_SRC_DIRECTORY}libscorealign/audioreader.cpp -${LIB_SRC_DIRECTORY}libscorealign/comp_chroma.cpp -${LIB_SRC_DIRECTORY}libscorealign/curvefit.cpp -${LIB_SRC_DIRECTORY}libscorealign/gen_chroma.cpp -${LIB_SRC_DIRECTORY}libscorealign/hillclimb.cpp -#${LIB_SRC_DIRECTORY}libscorealign/main.cpp -${LIB_SRC_DIRECTORY}libscorealign/regression.cpp -${LIB_SRC_DIRECTORY}libscorealign/sautils.cpp -${LIB_SRC_DIRECTORY}libscorealign/scorealign.cpp -#${LIB_SRC_DIRECTORY}libscorealign/trace.cpp -#${LIB_SRC_DIRECTORY}libscorealign/compare_transcripts/compare.cpp -${LIB_SRC_DIRECTORY}libscorealign/fft3/FFT3.cpp -) -# This defines the #define on both Windows and Linux. -add_definitions( --D_LIB -) -add_library( ${TARGET} STATIC ${SOURCES}) - -target_include_directories( ${TARGET} PRIVATE -${LIB_SRC_DIRECTORY}/portsmf +list( APPEND SOURCES + PRIVATE + ${TARGET_ROOT}/audioreader.cpp + ${TARGET_ROOT}/comp_chroma.cpp + ${TARGET_ROOT}/curvefit.cpp + ${TARGET_ROOT}/gen_chroma.cpp + ${TARGET_ROOT}/hillclimb.cpp + ${TARGET_ROOT}/regression.cpp + ${TARGET_ROOT}/sautils.cpp + ${TARGET_ROOT}/scorealign.cpp + ${TARGET_ROOT}/fft3/FFT3.cpp ) -target_link_libraries( ${TARGET} ) \ No newline at end of file +list( APPEND INCLUDES + PUBLIC + ${TARGET_ROOT} +) + +organize_source( "${TARGET_ROOT}" "" "${SOURCES}" ) +target_sources( ${TARGET} PRIVATE ${SOURCES} ) +target_compile_definitions( ${TARGET} PRIVATE ${DEFINES} ) +target_compile_features( ${TARGET} PRIVATE ${FEATURES} ) +target_compile_options( ${TARGET} PRIVATE ${OPTIONS} ) +target_include_directories( ${TARGET} PRIVATE ${INCLUDES} ) +target_link_libraries( ${TARGET} PRIVATE ${LIBRARIES} ) + diff --git a/cmake-proxies/libsndfile/CMakeLists.txt b/cmake-proxies/libsndfile/CMakeLists.txt index d3096b52f..d597e2f31 100644 --- a/cmake-proxies/libsndfile/CMakeLists.txt +++ b/cmake-proxies/libsndfile/CMakeLists.txt @@ -1,171 +1,183 @@ -#directory cmake-proxies/libsndfile -set( TARGET libsndfile ) -set( TARGET_SOURCE ${LIB_SRC_DIRECTORY}${TARGET} ) -project( ${TARGET} ) -set( SOURCES -#${LIB_SRC_DIRECTORY}libsndfile/examples/generate.c -#${LIB_SRC_DIRECTORY}libsndfile/examples/list_formats.c -#${LIB_SRC_DIRECTORY}libsndfile/examples/make_sine.c -#${LIB_SRC_DIRECTORY}libsndfile/examples/sfprocess.c -#${LIB_SRC_DIRECTORY}libsndfile/examples/sndfile-to-text.c -#${LIB_SRC_DIRECTORY}libsndfile/programs/common.c -#${LIB_SRC_DIRECTORY}libsndfile/programs/sndfile-cmp.c -#${LIB_SRC_DIRECTORY}libsndfile/programs/sndfile-concat.c -#${LIB_SRC_DIRECTORY}libsndfile/programs/sndfile-convert.c -#${LIB_SRC_DIRECTORY}libsndfile/programs/sndfile-deinterleave.c -#${LIB_SRC_DIRECTORY}libsndfile/programs/sndfile-info.c -#${LIB_SRC_DIRECTORY}libsndfile/programs/sndfile-interleave.c -#${LIB_SRC_DIRECTORY}libsndfile/programs/sndfile-metadata-get.c -#${LIB_SRC_DIRECTORY}libsndfile/programs/sndfile-metadata-set.c -#${LIB_SRC_DIRECTORY}libsndfile/programs/sndfile-play.c -#${LIB_SRC_DIRECTORY}libsndfile/programs/sndfile-salvage.c -#${LIB_SRC_DIRECTORY}libsndfile/regtest/checksum.c -#${LIB_SRC_DIRECTORY}libsndfile/regtest/database.c -#${LIB_SRC_DIRECTORY}libsndfile/regtest/sndfile-regtest.c -${LIB_SRC_DIRECTORY}libsndfile/src/aiff.c -${LIB_SRC_DIRECTORY}libsndfile/src/alaw.c -${LIB_SRC_DIRECTORY}libsndfile/src/au.c -${LIB_SRC_DIRECTORY}libsndfile/src/audio_detect.c -${LIB_SRC_DIRECTORY}libsndfile/src/avr.c -${LIB_SRC_DIRECTORY}libsndfile/src/broadcast.c -${LIB_SRC_DIRECTORY}libsndfile/src/caf.c -${LIB_SRC_DIRECTORY}libsndfile/src/chanmap.c -${LIB_SRC_DIRECTORY}libsndfile/src/chunk.c -${LIB_SRC_DIRECTORY}libsndfile/src/command.c -${LIB_SRC_DIRECTORY}libsndfile/src/common.c -${LIB_SRC_DIRECTORY}libsndfile/src/dither.c -${LIB_SRC_DIRECTORY}libsndfile/src/double64.c -${LIB_SRC_DIRECTORY}libsndfile/src/dwd.c -${LIB_SRC_DIRECTORY}libsndfile/src/dwvw.c -${LIB_SRC_DIRECTORY}libsndfile/src/file_io.c -${LIB_SRC_DIRECTORY}libsndfile/src/flac.c -${LIB_SRC_DIRECTORY}libsndfile/src/float32.c -${LIB_SRC_DIRECTORY}libsndfile/src/g72x.c -${LIB_SRC_DIRECTORY}libsndfile/src/gsm610.c -${LIB_SRC_DIRECTORY}libsndfile/src/htk.c -${LIB_SRC_DIRECTORY}libsndfile/src/id3.c -${LIB_SRC_DIRECTORY}libsndfile/src/ima_adpcm.c -${LIB_SRC_DIRECTORY}libsndfile/src/ima_oki_adpcm.c -${LIB_SRC_DIRECTORY}libsndfile/src/interleave.c -${LIB_SRC_DIRECTORY}libsndfile/src/ircam.c -${LIB_SRC_DIRECTORY}libsndfile/src/macbinary3.c -${LIB_SRC_DIRECTORY}libsndfile/src/macos.c -${LIB_SRC_DIRECTORY}libsndfile/src/mat4.c -${LIB_SRC_DIRECTORY}libsndfile/src/mat5.c -${LIB_SRC_DIRECTORY}libsndfile/src/mpc2k.c -${LIB_SRC_DIRECTORY}libsndfile/src/ms_adpcm.c -${LIB_SRC_DIRECTORY}libsndfile/src/nist.c -${LIB_SRC_DIRECTORY}libsndfile/src/ogg.c -${LIB_SRC_DIRECTORY}libsndfile/src/paf.c -${LIB_SRC_DIRECTORY}libsndfile/src/pcm.c -${LIB_SRC_DIRECTORY}libsndfile/src/pvf.c -${LIB_SRC_DIRECTORY}libsndfile/src/raw.c -${LIB_SRC_DIRECTORY}libsndfile/src/rf64.c -${LIB_SRC_DIRECTORY}libsndfile/src/rx2.c -${LIB_SRC_DIRECTORY}libsndfile/src/sd2.c -${LIB_SRC_DIRECTORY}libsndfile/src/sds.c -${LIB_SRC_DIRECTORY}libsndfile/src/sndfile.c -${LIB_SRC_DIRECTORY}libsndfile/src/strings.c -${LIB_SRC_DIRECTORY}libsndfile/src/svx.c -#${LIB_SRC_DIRECTORY}libsndfile/src/test_audio_detect.c -#${LIB_SRC_DIRECTORY}libsndfile/src/test_broadcast_var.c -#${LIB_SRC_DIRECTORY}libsndfile/src/test_conversions.c -#${LIB_SRC_DIRECTORY}libsndfile/src/test_endswap.c -#${LIB_SRC_DIRECTORY}libsndfile/src/test_file_io.c -#${LIB_SRC_DIRECTORY}libsndfile/src/test_float.c -#${LIB_SRC_DIRECTORY}libsndfile/src/test_ima_oki_adpcm.c -#${LIB_SRC_DIRECTORY}libsndfile/src/test_log_printf.c -#${LIB_SRC_DIRECTORY}libsndfile/src/test_main.c -#${LIB_SRC_DIRECTORY}libsndfile/src/test_strncpy_crlf.c -${LIB_SRC_DIRECTORY}libsndfile/src/txw.c -${LIB_SRC_DIRECTORY}libsndfile/src/ulaw.c -${LIB_SRC_DIRECTORY}libsndfile/src/voc.c -${LIB_SRC_DIRECTORY}libsndfile/src/vox_adpcm.c -${LIB_SRC_DIRECTORY}libsndfile/src/w64.c -${LIB_SRC_DIRECTORY}libsndfile/src/wav.c -${LIB_SRC_DIRECTORY}libsndfile/src/wav_w64.c -${LIB_SRC_DIRECTORY}libsndfile/src/windows.c -${LIB_SRC_DIRECTORY}libsndfile/src/wve.c -${LIB_SRC_DIRECTORY}libsndfile/src/xi.c -${LIB_SRC_DIRECTORY}libsndfile/src/G72x/g721.c -${LIB_SRC_DIRECTORY}libsndfile/src/G72x/g723_16.c -${LIB_SRC_DIRECTORY}libsndfile/src/G72x/g723_24.c -${LIB_SRC_DIRECTORY}libsndfile/src/G72x/g723_40.c -${LIB_SRC_DIRECTORY}libsndfile/src/G72x/g72x.c -#${LIB_SRC_DIRECTORY}libsndfile/src/G72x/g72x_test.c -${LIB_SRC_DIRECTORY}libsndfile/src/GSM610/add.c -${LIB_SRC_DIRECTORY}libsndfile/src/GSM610/code.c -${LIB_SRC_DIRECTORY}libsndfile/src/GSM610/decode.c -${LIB_SRC_DIRECTORY}libsndfile/src/GSM610/gsm_create.c -${LIB_SRC_DIRECTORY}libsndfile/src/GSM610/gsm_decode.c -${LIB_SRC_DIRECTORY}libsndfile/src/GSM610/gsm_destroy.c -${LIB_SRC_DIRECTORY}libsndfile/src/GSM610/gsm_encode.c -${LIB_SRC_DIRECTORY}libsndfile/src/GSM610/gsm_option.c -${LIB_SRC_DIRECTORY}libsndfile/src/GSM610/long_term.c -${LIB_SRC_DIRECTORY}libsndfile/src/GSM610/lpc.c -${LIB_SRC_DIRECTORY}libsndfile/src/GSM610/preprocess.c -${LIB_SRC_DIRECTORY}libsndfile/src/GSM610/rpe.c -${LIB_SRC_DIRECTORY}libsndfile/src/GSM610/short_term.c -${LIB_SRC_DIRECTORY}libsndfile/src/GSM610/table.c -#${LIB_SRC_DIRECTORY}libsndfile/tests/aiff_rw_test.c -#${LIB_SRC_DIRECTORY}libsndfile/tests/alaw_test.c -#${LIB_SRC_DIRECTORY}libsndfile/tests/benchmark.c -#${LIB_SRC_DIRECTORY}libsndfile/tests/checksum_test.c -#${LIB_SRC_DIRECTORY}libsndfile/tests/command_test.c -#${LIB_SRC_DIRECTORY}libsndfile/tests/dft_cmp.c -#${LIB_SRC_DIRECTORY}libsndfile/tests/dither_test.c -#${LIB_SRC_DIRECTORY}libsndfile/tests/dwvw_test.c -#${LIB_SRC_DIRECTORY}libsndfile/tests/error_test.c -#${LIB_SRC_DIRECTORY}libsndfile/tests/external_libs_test.c -#${LIB_SRC_DIRECTORY}libsndfile/tests/fix_this.c -#${LIB_SRC_DIRECTORY}libsndfile/tests/floating_point_test.c -#${LIB_SRC_DIRECTORY}libsndfile/tests/generate.c -#${LIB_SRC_DIRECTORY}libsndfile/tests/headerless_test.c -#${LIB_SRC_DIRECTORY}libsndfile/tests/header_test.c -#${LIB_SRC_DIRECTORY}libsndfile/tests/largefile_test.c -#${LIB_SRC_DIRECTORY}libsndfile/tests/locale_test.c -#${LIB_SRC_DIRECTORY}libsndfile/tests/lossy_comp_test.c -#${LIB_SRC_DIRECTORY}libsndfile/tests/misc_test.c -#${LIB_SRC_DIRECTORY}libsndfile/tests/multi_file_test.c -#${LIB_SRC_DIRECTORY}libsndfile/tests/ogg_test.c -#${LIB_SRC_DIRECTORY}libsndfile/tests/pcm_test.c -#${LIB_SRC_DIRECTORY}libsndfile/tests/peak_chunk_test.c -#${LIB_SRC_DIRECTORY}libsndfile/tests/pipe_test.c -#${LIB_SRC_DIRECTORY}libsndfile/tests/raw_test.c -#${LIB_SRC_DIRECTORY}libsndfile/tests/rdwr_test.c -#${LIB_SRC_DIRECTORY}libsndfile/tests/scale_clip_test.c -#${LIB_SRC_DIRECTORY}libsndfile/tests/sfversion.c -#${LIB_SRC_DIRECTORY}libsndfile/tests/stdin_test.c -#${LIB_SRC_DIRECTORY}libsndfile/tests/stdio_test.c -#${LIB_SRC_DIRECTORY}libsndfile/tests/stdout_test.c -#${LIB_SRC_DIRECTORY}libsndfile/tests/string_test.c -#${LIB_SRC_DIRECTORY}libsndfile/tests/ulaw_test.c -#${LIB_SRC_DIRECTORY}libsndfile/tests/utils.c -#${LIB_SRC_DIRECTORY}libsndfile/tests/virtual_io_test.c -#${LIB_SRC_DIRECTORY}libsndfile/tests/vorbis_test.c -#${LIB_SRC_DIRECTORY}libsndfile/tests/win32_ordinal_test.c -#${LIB_SRC_DIRECTORY}libsndfile/tests/win32_test.c -#${LIB_SRC_DIRECTORY}libsndfile/tests/write_read_test.c -#${LIB_SRC_DIRECTORY}libsndfile/Win32/testprog.c -#${LIB_SRC_DIRECTORY}libsndfile/programs/sndfile-play-beos.cpp +add_library( ${TARGET} STATIC ) -) -# This defines the #define on both Windows and Linux. -add_definitions( --D_LIB --Dinline=__inline --DLIBSNDFILE_PRIVATE_CONFIG - ) -add_library( ${TARGET} STATIC ${SOURCES}) +def_vars() -add_compile_options(/wd4996) - -target_include_directories( ${TARGET} PRIVATE -${TARGET_SOURCE}/include -${TARGET_SOURCE}/src -${LIB_SRC_DIRECTORY}/ffmpeg/win32 -${top_dir}/win/Projects/libsndfile #to get config.h +list( APPEND SOURCES + PRIVATE + ${TARGET_ROOT}/src/aiff.c + ${TARGET_ROOT}/src/alaw.c + ${TARGET_ROOT}/src/au.c + ${TARGET_ROOT}/src/audio_detect.c + ${TARGET_ROOT}/src/avr.c + ${TARGET_ROOT}/src/broadcast.c + ${TARGET_ROOT}/src/caf.c + ${TARGET_ROOT}/src/chanmap.c + ${TARGET_ROOT}/src/chunk.c + ${TARGET_ROOT}/src/command.c + ${TARGET_ROOT}/src/common.c + ${TARGET_ROOT}/src/dither.c + ${TARGET_ROOT}/src/double64.c + ${TARGET_ROOT}/src/dwd.c + ${TARGET_ROOT}/src/dwvw.c + ${TARGET_ROOT}/src/file_io.c + ${TARGET_ROOT}/src/flac.c + ${TARGET_ROOT}/src/float32.c + ${TARGET_ROOT}/src/g72x.c + ${TARGET_ROOT}/src/gsm610.c + ${TARGET_ROOT}/src/htk.c + ${TARGET_ROOT}/src/id3.c + ${TARGET_ROOT}/src/ima_adpcm.c + ${TARGET_ROOT}/src/ima_oki_adpcm.c + ${TARGET_ROOT}/src/interleave.c + ${TARGET_ROOT}/src/ircam.c + ${TARGET_ROOT}/src/macbinary3.c + ${TARGET_ROOT}/src/macos.c + ${TARGET_ROOT}/src/mat4.c + ${TARGET_ROOT}/src/mat5.c + ${TARGET_ROOT}/src/mpc2k.c + ${TARGET_ROOT}/src/ms_adpcm.c + ${TARGET_ROOT}/src/nist.c + ${TARGET_ROOT}/src/ogg.c + ${TARGET_ROOT}/src/paf.c + ${TARGET_ROOT}/src/pcm.c + ${TARGET_ROOT}/src/pvf.c + ${TARGET_ROOT}/src/raw.c + ${TARGET_ROOT}/src/rf64.c + ${TARGET_ROOT}/src/rx2.c + ${TARGET_ROOT}/src/sd2.c + ${TARGET_ROOT}/src/sds.c + ${TARGET_ROOT}/src/sndfile.c + ${TARGET_ROOT}/src/strings.c + ${TARGET_ROOT}/src/svx.c + ${TARGET_ROOT}/src/txw.c + ${TARGET_ROOT}/src/ulaw.c + ${TARGET_ROOT}/src/voc.c + ${TARGET_ROOT}/src/vox_adpcm.c + ${TARGET_ROOT}/src/w64.c + ${TARGET_ROOT}/src/wav.c + ${TARGET_ROOT}/src/wav_w64.c + ${TARGET_ROOT}/src/windows.c + ${TARGET_ROOT}/src/wve.c + ${TARGET_ROOT}/src/xi.c + ${TARGET_ROOT}/src/G72x/g721.c + ${TARGET_ROOT}/src/G72x/g723_16.c + ${TARGET_ROOT}/src/G72x/g723_24.c + ${TARGET_ROOT}/src/G72x/g723_40.c + ${TARGET_ROOT}/src/G72x/g72x.c + ${TARGET_ROOT}/src/GSM610/add.c + ${TARGET_ROOT}/src/GSM610/code.c + ${TARGET_ROOT}/src/GSM610/decode.c + ${TARGET_ROOT}/src/GSM610/gsm_create.c + ${TARGET_ROOT}/src/GSM610/gsm_decode.c + ${TARGET_ROOT}/src/GSM610/gsm_destroy.c + ${TARGET_ROOT}/src/GSM610/gsm_encode.c + ${TARGET_ROOT}/src/GSM610/gsm_option.c + ${TARGET_ROOT}/src/GSM610/long_term.c + ${TARGET_ROOT}/src/GSM610/lpc.c + ${TARGET_ROOT}/src/GSM610/preprocess.c + ${TARGET_ROOT}/src/GSM610/rpe.c + ${TARGET_ROOT}/src/GSM610/short_term.c + ${TARGET_ROOT}/src/GSM610/table.c ) -target_link_libraries( ${TARGET} ) \ No newline at end of file +list( APPEND INCLUDES + PRIVATE + ${_PRVDIR} + ${TARGET_ROOT}/src + PUBLIC + ${_PUBDIR} +) + +list( APPEND DEFINES + PRIVATE + inline=__inline + LIBSNDFILE_PRIVATE_CONFIG +) + +list( APPEND OPTIONS + PRIVATE + $<$:/wd4996> +) + +if( CMAKE_SYSTEM_NAME MATCHES "Windows" ) + cmake_push_check_state(RESET) + set( CMAKE_EXTRA_INCLUDE_FILES "BaseTsd.h" ) + check_type_size( "SSIZE_T" SIZEOF_SSIZE LANGUAGE C ) + list( APPEND DEFINES + ssize_t=SSIZE_T + ) + cmake_pop_check_state() +else() + check_type_size( "ssize_t" SIZEOF_SSIZE LANGUAGE C ) +endif() + +set( TYPEOF_SF_COUNT_T "int64_t" ) +set( SIZEOF_SF_COUNT_T ${SIZEOF_INT64} ) +set( SF_COUNT_MAX "0x7FFFFFFFFFFFFFFFLL" ) + +configure_file( sndfile.h.in ${_PUBDIR}/sndfile.h ) + +check_symbol_exists( S_IRGRP "sys/stat.h" HAVE_DECL_S_IRGRP ) + +set( COMPILER_IS_GCC OFF ) +if( CMAKE_C_COMPILER_ID MATCHES "GNU|.*Clang" ) + set( COMPILER_IS_GCC ON ) +endif() + +set( OS_IS_MACOSX OFF) +if( CMAKE_SYSTEM_NAME MATCHES "Darwin" ) + set( OS_IS_MACOSX ON ) +endif() + +set( OS_IS_WIN32 OFF ) +set( USE_WINDOWS_API OFF ) +if( CMAKE_SYSTEM_NAME MATCHES "Windows" ) + set( OS_IS_MACOSX ON ) + set( USE_WINDOWS_API ON ) +endif() + +set( CPU_IS_BIG_ENDIAN ${WORDS_BIGENDIAN} ) +set( CPU_IS_LITTLE_ENDIAN NOT ${WORDS_BIGENDIAN} ) +set( HAVE_EXTERNAL_LIBS 0 ) + +set( VERSION "1.0.24" ) +set( PACKAGE "libsndfile" ) +set( PACKAGE_NAME ${PACKAGE} ) +set( PACKAGE_VERSION ${VERSION} ) + +# Does compiler support "flexible array members" +try_compile( HAVE_FLEXIBLE_ARRAY + ${CMAKE_CURRENT_BINARY_DIR} + ${CMAKE_CURRENT_SOURCE_DIR}/famcheck.c + LINK_OPTIONS ${CMAKE_REQUIRED_LIBRARIES} + OUTPUT_VARIABLE c_out +) + +# Determine how the CPU clips when doing float to int conversions +try_run( r_rc c_rc + ${CMAKE_CURRENT_BINARY_DIR} + ${CMAKE_CURRENT_SOURCE_DIR}/clipcheck.c + LINK_OPTIONS ${CMAKE_REQUIRED_LIBRARIES} + RUN_OUTPUT_VARIABLE r_out + COMPILE_OUTPUT_VARIABLE c_out +) + +if( NOT c_rc ) + message( STATUS c_out ) + message( FATAL_ERROR "${CMAKE_CURRENT_SOURCE_DIR}/clipcheck.c compile failed:" ) +endif() + +list( GET r_out 0 CPU_CLIPS_POSITIVE ) +list( GET r_out 1 CPU_CLIPS_NEGATIVE ) + +configure_file( config.h.in ${_PRVDIR}/config.h ) + +organize_source( "${TARGET_ROOT}" "" "${SOURCES}" ) +target_sources( ${TARGET} PRIVATE ${SOURCES} ) +target_compile_definitions( ${TARGET} PRIVATE ${DEFINES} ) +target_compile_features( ${TARGET} PRIVATE ${FEATURES} ) +target_compile_options( ${TARGET} PRIVATE ${OPTIONS} ) +target_include_directories( ${TARGET} PRIVATE ${INCLUDES} ) +target_link_libraries( ${TARGET} PRIVATE ${LIBRARIES} ) + diff --git a/cmake-proxies/libsndfile/clipcheck.c b/cmake-proxies/libsndfile/clipcheck.c new file mode 100644 index 000000000..7f4d36571 --- /dev/null +++ b/cmake-proxies/libsndfile/clipcheck.c @@ -0,0 +1,44 @@ +#define _ISOC9X_SOURCE 1 +#define _ISOC99_SOURCE 1 +#define __USE_ISOC99 1 +#define __USE_ISOC9X 1 +#include +#include +int main (void) +{ + double fval ; + int k, ival ; + int pos = 0 ; + int neg = 0 ; + + fval = 1.0 * 0x7FFFFFFF ; + for (k = 0 ; k < 100 ; k++) + { + ival = (lrint (fval)) >> 24 ; + if (ival != 127) + { + pos = 1 ; + break ; + } + + fval *= 1.2499999 ; + } + + fval = -8.0 * 0x10000000 ; + for (k = 0 ; k < 100 ; k++) + { + ival = (lrint (fval)) >> 24 ; + if (ival != -128) + { + neg = 1 ; + break ; + } + + fval *= 1.2499999 ; + } + + printf("%d;%d", pos, neg) ; + + return 0 ; +} + diff --git a/cmake-proxies/libsndfile/config.h.in b/cmake-proxies/libsndfile/config.h.in new file mode 100644 index 000000000..9c24b947a --- /dev/null +++ b/cmake-proxies/libsndfile/config.h.in @@ -0,0 +1,287 @@ +/* src/config.h.in. Generated from configure.ac by autoheader. */ + +/* Set to 1 if the compile is GNU GCC. */ +#cmakedefine01 COMPILER_IS_GCC + +/* Target processor clips on negative float to int conversion. */ +#cmakedefine01 CPU_CLIPS_NEGATIVE + +/* Target processor clips on positive float to int conversion. */ +#cmakedefine01 CPU_CLIPS_POSITIVE + +/* Target processor is big endian. */ +#cmakedefine01 CPU_IS_BIG_ENDIAN + +/* Target processor is little endian. */ +#cmakedefine01 CPU_IS_LITTLE_ENDIAN + +/* Set to 1 to enable experimental code. */ +#cmakedefine01 ENABLE_EXPERIMENTAL_CODE + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_ALSA_ASOUNDLIB_H 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine01 HAVE_YTESWAP_H + +/* Define to 1 if you have the `calloc' function. */ +#cmakedefine HAVE_CALLOC 1 + +/* Define to 1 if you have the `ceil' function. */ +#cmakedefine HAVE_CEIL 1 + +/* Set to 1 if S_IRGRP is defined. */ +#cmakedefine01 HAVE_DECL_S_IRGRP + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_DLFCN_H 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_ENDIAN_H 1 + +/* Will be set to 1 if flac, ogg and vorbis are available. */ +#cmakedefine01 HAVE_EXTERNAL_LIBS + +/* Set to 1 if the compile supports the struct hack. */ +#cmakedefine01 HAVE_FLEXIBLE_ARRAY + +/* Define to 1 if you have the `floor' function. */ +#cmakedefine HAVE_FLOOR 1 + +/* Define to 1 if you have the `fmod' function. */ +#cmakedefine HAVE_FMOD 1 + +/* Define to 1 if you have the `free' function. */ +#cmakedefine HAVE_FREE 1 + +/* Define to 1 if you have the `fstat' function. */ +#cmakedefine HAVE_FSTAT 1 + +/* Define to 1 if you have the `fsync' function. */ +#cmakedefine01 HAVE_FSYNC + +/* Define to 1 if you have the `ftruncate' function. */ +#cmakedefine HAVE_FTRUNCATE 1 + +/* Define to 1 if you have the `getpagesize' function. */ +#cmakedefine HAVE_GETPAGESIZE 1 + +/* Define to 1 if you have the `gettimeofday' function. */ +#cmakedefine01 HAVE_GETTIMEOFDAY + +/* Define to 1 if you have the `gmtime' function. */ +#cmakedefine HAVE_GMTIME 1 + +/* Define to 1 if you have the `gmtime_r' function. */ +#cmakedefine HAVE_GMTIME_R 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine01 HAVE_INTTYPES_H + +/* Define to 1 if you have the `m' library (-lm). */ +#cmakedefine HAVE_LIBM 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_LOCALE_H 1 + +/* Define to 1 if you have the `localtime' function. */ +#cmakedefine HAVE_LOCALTIME 1 + +/* Define to 1 if you have the `localtime_r' function. */ +#cmakedefine HAVE_LOCALTIME_R 1 + +/* Define if you have C99's lrint function. */ +#cmakedefine HAVE_LRINT 1 + +/* Define if you have C99's lrintf function. */ +#cmakedefine HAVE_LRINTF 1 + +/* Define to 1 if you have the `lseek' function. */ +#cmakedefine HAVE_LSEEK 1 + +/* Define to 1 if you have the `malloc' function. */ +#cmakedefine HAVE_MALLOC 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_MEMORY_H 1 + +/* Define to 1 if you have the `mmap' function. */ +#cmakedefine HAVE_MMAP 1 + +/* Define to 1 if you have the `open' function. */ +#cmakedefine HAVE_OPEN 1 + +/* Define to 1 if you have the `pipe' function. */ +#cmakedefine HAVE_PIPE 1 + +/* Define to 1 if you have the `pread' function. */ +#cmakedefine HAVE_PREAD 1 + +/* Define to 1 if you have the `pwrite' function. */ +#cmakedefine HAVE_PWRITE 1 + +/* Define to 1 if you have the `read' function. */ +#cmakedefine HAVE_READ 1 + +/* Define to 1 if you have the `realloc' function. */ +#cmakedefine HAVE_REALLOC 1 + +/* Define to 1 if you have the `setlocale' function. */ +#cmakedefine HAVE_SETLOCALE 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_SNDIO_H 1 + +/* Define to 1 if you have the `snprintf' function. */ +#cmakedefine HAVE_SNPRINTF 1 + +/* Set to 1 if you have libsqlite3. */ +#cmakedefine HAVE_SQLITE3 1 + +/* Define to 1 if the system has the type `ssize_t'. */ +#cmakedefine HAVE_SSIZE_T 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine01 HAVE_STDINT_H + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_STDLIB_H 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_STRINGS_H 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_STRING_H 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_SYS_STAT_H 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_SYS_TIME_H 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_SYS_TYPES_H 1 + +/* Define to 1 if you have that is POSIX.1 compatible. */ +#cmakedefine HAVE_SYS_WAIT_H 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine01 HAVE_UNISTD_H + +/* Define to 1 if you have the `vsnprintf' function. */ +#cmakedefine HAVE_VSNPRINTF 1 + +/* Define to 1 if you have the `waitpid' function. */ +#cmakedefine HAVE_WAITPID 1 + +/* Define to 1 if you have the `write' function. */ +#cmakedefine HAVE_WRITE 1 + +/* Define to the sub-directory in which libtool stores uninstalled libraries. + */ +#cmakedefine LT_OBJDIR "@LT_OBJDIR@" + +/* Set to 1 if compiling for MacOSX */ +#cmakedefine01 OS_IS_MACOSX + +/* Set to 1 if compiling for Win32 */ +#cmakedefine01 OS_IS_WIN32 + +/* Name of package */ +#cmakedefine PACKAGE "@PACKAGE@" + +/* Define to the address where bug reports for this package should be sent. */ +#cmakedefine PACKAGE_BUGREPORT "@PACKAGE_BUGREPORT@" + +/* Define to the full name of this package. */ +#cmakedefine PACKAGE_NAME "@PACKAGE_NAME@" + +/* Define to the full name and version of this package. */ +#cmakedefine PACKAGE_STRING "@PACKAGE_STRING@" + +/* Define to the one symbol short name of this package. */ +#cmakedefine PACKAGE_TARNAME "@PACKAGE_TARNAME@" + +/* Define to the home page for this package. */ +#cmakedefine PACKAGE_URL "@PACKAGE_URL@" + +/* Define to the version of this package. */ +#cmakedefine PACKAGE_VERSION "@PACKAGE_VERSION@" + +/* Set to maximum allowed value of sf_count_t type. */ +#cmakedefine SF_COUNT_MAX @SF_COUNT_MAX@ + +/* The size of `double', as computed by sizeof. */ +#define SIZEOF_DOUBLE @SIZEOF_DOUBLE@ + +/* The size of `float', as computed by sizeof. */ +#define SIZEOF_FLOAT @SIZEOF_FLOAT@ + +/* The size of `int', as computed by sizeof. */ +#define SIZEOF_INT @SIZEOF_INT@ + +/* The size of `int64_t', as computed by sizeof. */ +#define SIZEOF_INT64_T @SIZEOF_INT64@ + +/* The size of `loff_t', as computed by sizeof. */ +#define SIZEOF_LOFF_T @SIZEOF_LOFF@ + +/* The size of `long', as computed by sizeof. */ +#define SIZEOF_LONG @SIZEOF_LONG@ + +/* The size of `long long', as computed by sizeof. */ +#define SIZEOF_LONG_LONG @SIZEOF_LONG_LONG@ + +/* The size of `off64_t', as computed by sizeof. */ +#define SIZEOF_OFF64_T @SIZEOF_OFF64@ + +/* The size of `off_t', as computed by sizeof. */ +#define SIZEOF_OFF_T @SIZEOF_OFF@ + +/* Set to sizeof (long) if unknown. */ +#define SIZEOF_SF_COUNT_T @SIZEOF_SF_COUNT_T@ + +/* The size of `short', as computed by sizeof. */ +#define SIZEOF_SHORT @SIZEOF_SHORT@ + +/* The size of `size_t', as computed by sizeof. */ +#define SIZEOF_SIZE_T @SIZEOF_SIZE@ + +/* The size of `ssize_t', as computed by sizeof. */ +#define SIZEOF_SSIZE_T @SIZEOF_SSIZE@ + +/* The size of `void*', as computed by sizeof. */ +#define SIZEOF_VOIDP @SIZEOF_POINTER@ + +/* The size of `wchar_t', as computed by sizeof. */ +#define SIZEOF_WCHAR_T @SIZEOF_WCHAR@ + +/* Define to 1 if you have the ANSI C header files. */ +#cmakedefine STDC_HEADERS 1 + +/* Set to long if unknown. */ +#define TYPEOF_SF_COUNT_T @TYPEOF_SF_COUNT_T@ + +/* Set to 1 to use the native windows API */ +#cmakedefine01 USE_WINDOWS_API + +/* Version number of package */ +#define VERSION "@VERSION@" + +/* Set to 1 if windows DLL is being built. */ +#cmakedefine WIN32_TARGET_DLL 1 + +/* Target processor is big endian. */ +#define WORDS_BIGENDIAN @WORDS_BIGENDIAN@ + +/* Number of bits in a file offset, on hosts where this is settable. */ +#cmakedefine _FILE_OFFSET_BITS @_FILE_OFFSET_BITS@ + +/* Define to make fseeko etc. visible, on some hosts. */ +#cmakedefine _LARGEFILE_SOURCE 1 + +/* Define for large files, on AIX-style hosts. */ +#cmakedefine _LARGE_FILES 1 + +/* Set to 1 to use C99 printf/snprintf in MinGW. */ +#cmakedefine __USE_MINGW_ANSI_STDIO 1 diff --git a/cmake-proxies/libsndfile/famcheck.c b/cmake-proxies/libsndfile/famcheck.c new file mode 100644 index 000000000..dba1b47e1 --- /dev/null +++ b/cmake-proxies/libsndfile/famcheck.c @@ -0,0 +1,12 @@ +#include +typedef struct +{ + int k; + char buffer []; +} MY_STRUCT; +int main(void) +{ + MY_STRUCT *p = calloc (1, sizeof (MY_STRUCT) + 42); + return 0; +} + diff --git a/cmake-proxies/libsndfile/sndfile.h.in b/cmake-proxies/libsndfile/sndfile.h.in new file mode 100644 index 000000000..3777e5f59 --- /dev/null +++ b/cmake-proxies/libsndfile/sndfile.h.in @@ -0,0 +1,666 @@ +/* +** Copyright (C) 1999-2011Erik de Castro Lopo +** +** This program 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 program 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 program; if not, write to the Free Software +** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +*/ + +/* +** sndfile.h -- system-wide definitions +** +** API documentation is in the doc/ directory of the source code tarball +** and at http://www.mega-nerd.com/libsndfile/api.html. +*/ + +#ifndef SNDFILE_H +#define SNDFILE_H + +/* This is the version 1.0.X header file. */ +#define SNDFILE_1 + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +/* The following file types can be read and written. +** A file type would consist of a major type (ie SF_FORMAT_WAV) bitwise +** ORed with a minor type (ie SF_FORMAT_PCM). SF_FORMAT_TYPEMASK and +** SF_FORMAT_SUBMASK can be used to separate the major and minor file +** types. +*/ + +enum +{ /* Major formats. */ + SF_FORMAT_WAV = 0x010000, /* Microsoft WAV format (little endian default). */ + SF_FORMAT_AIFF = 0x020000, /* Apple/SGI AIFF format (big endian). */ + SF_FORMAT_AU = 0x030000, /* Sun/NeXT AU format (big endian). */ + SF_FORMAT_RAW = 0x040000, /* RAW PCM data. */ + SF_FORMAT_PAF = 0x050000, /* Ensoniq PARIS file format. */ + SF_FORMAT_SVX = 0x060000, /* Amiga IFF / SVX8 / SV16 format. */ + SF_FORMAT_NIST = 0x070000, /* Sphere NIST format. */ + SF_FORMAT_VOC = 0x080000, /* VOC files. */ + SF_FORMAT_IRCAM = 0x0A0000, /* Berkeley/IRCAM/CARL */ + SF_FORMAT_W64 = 0x0B0000, /* Sonic Foundry's 64 bit RIFF/WAV */ + SF_FORMAT_MAT4 = 0x0C0000, /* Matlab (tm) V4.2 / GNU Octave 2.0 */ + SF_FORMAT_MAT5 = 0x0D0000, /* Matlab (tm) V5.0 / GNU Octave 2.1 */ + SF_FORMAT_PVF = 0x0E0000, /* Portable Voice Format */ + SF_FORMAT_XI = 0x0F0000, /* Fasttracker 2 Extended Instrument */ + SF_FORMAT_HTK = 0x100000, /* HMM Tool Kit format */ + SF_FORMAT_SDS = 0x110000, /* Midi Sample Dump Standard */ + SF_FORMAT_AVR = 0x120000, /* Audio Visual Research */ + SF_FORMAT_WAVEX = 0x130000, /* MS WAVE with WAVEFORMATEX */ + SF_FORMAT_SD2 = 0x160000, /* Sound Designer 2 */ + SF_FORMAT_FLAC = 0x170000, /* FLAC lossless file format */ + SF_FORMAT_CAF = 0x180000, /* Core Audio File format */ + SF_FORMAT_WVE = 0x190000, /* Psion WVE format */ + SF_FORMAT_OGG = 0x200000, /* Xiph OGG container */ + SF_FORMAT_MPC2K = 0x210000, /* Akai MPC 2000 sampler */ + SF_FORMAT_RF64 = 0x220000, /* RF64 WAV file */ + + /* Subtypes from here on. */ + + SF_FORMAT_PCM_S8 = 0x0001, /* Signed 8 bit data */ + SF_FORMAT_PCM_16 = 0x0002, /* Signed 16 bit data */ + SF_FORMAT_PCM_24 = 0x0003, /* Signed 24 bit data */ + SF_FORMAT_PCM_32 = 0x0004, /* Signed 32 bit data */ + + SF_FORMAT_PCM_U8 = 0x0005, /* Unsigned 8 bit data (WAV and RAW only) */ + + SF_FORMAT_FLOAT = 0x0006, /* 32 bit float data */ + SF_FORMAT_DOUBLE = 0x0007, /* 64 bit float data */ + + SF_FORMAT_ULAW = 0x0010, /* U-Law encoded. */ + SF_FORMAT_ALAW = 0x0011, /* A-Law encoded. */ + SF_FORMAT_IMA_ADPCM = 0x0012, /* IMA ADPCM. */ + SF_FORMAT_MS_ADPCM = 0x0013, /* Microsoft ADPCM. */ + + SF_FORMAT_GSM610 = 0x0020, /* GSM 6.10 encoding. */ + SF_FORMAT_VOX_ADPCM = 0x0021, /* OKI / Dialogix ADPCM */ + + SF_FORMAT_G721_32 = 0x0030, /* 32kbs G721 ADPCM encoding. */ + SF_FORMAT_G723_24 = 0x0031, /* 24kbs G723 ADPCM encoding. */ + SF_FORMAT_G723_40 = 0x0032, /* 40kbs G723 ADPCM encoding. */ + + SF_FORMAT_DWVW_12 = 0x0040, /* 12 bit Delta Width Variable Word encoding. */ + SF_FORMAT_DWVW_16 = 0x0041, /* 16 bit Delta Width Variable Word encoding. */ + SF_FORMAT_DWVW_24 = 0x0042, /* 24 bit Delta Width Variable Word encoding. */ + SF_FORMAT_DWVW_N = 0x0043, /* N bit Delta Width Variable Word encoding. */ + + SF_FORMAT_DPCM_8 = 0x0050, /* 8 bit differential PCM (XI only) */ + SF_FORMAT_DPCM_16 = 0x0051, /* 16 bit differential PCM (XI only) */ + + SF_FORMAT_VORBIS = 0x0060, /* Xiph Vorbis encoding. */ + + /* Endian-ness options. */ + + SF_ENDIAN_FILE = 0x00000000, /* Default file endian-ness. */ + SF_ENDIAN_LITTLE = 0x10000000, /* Force little endian-ness. */ + SF_ENDIAN_BIG = 0x20000000, /* Force big endian-ness. */ + SF_ENDIAN_CPU = 0x30000000, /* Force CPU endian-ness. */ + + SF_FORMAT_SUBMASK = 0x0000FFFF, + SF_FORMAT_TYPEMASK = 0x0FFF0000, + SF_FORMAT_ENDMASK = 0x30000000 +} ; + +/* +** The following are the valid command numbers for the sf_command() +** interface. The use of these commands is documented in the file +** command.html in the doc directory of the source code distribution. +*/ + +enum +{ SFC_GET_LIB_VERSION = 0x1000, + SFC_GET_LOG_INFO = 0x1001, + SFC_GET_CURRENT_SF_INFO = 0x1002, + + + SFC_GET_NORM_DOUBLE = 0x1010, + SFC_GET_NORM_FLOAT = 0x1011, + SFC_SET_NORM_DOUBLE = 0x1012, + SFC_SET_NORM_FLOAT = 0x1013, + SFC_SET_SCALE_FLOAT_INT_READ = 0x1014, + SFC_SET_SCALE_INT_FLOAT_WRITE = 0x1015, + + SFC_GET_SIMPLE_FORMAT_COUNT = 0x1020, + SFC_GET_SIMPLE_FORMAT = 0x1021, + + SFC_GET_FORMAT_INFO = 0x1028, + + SFC_GET_FORMAT_MAJOR_COUNT = 0x1030, + SFC_GET_FORMAT_MAJOR = 0x1031, + SFC_GET_FORMAT_SUBTYPE_COUNT = 0x1032, + SFC_GET_FORMAT_SUBTYPE = 0x1033, + + SFC_CALC_SIGNAL_MAX = 0x1040, + SFC_CALC_NORM_SIGNAL_MAX = 0x1041, + SFC_CALC_MAX_ALL_CHANNELS = 0x1042, + SFC_CALC_NORM_MAX_ALL_CHANNELS = 0x1043, + SFC_GET_SIGNAL_MAX = 0x1044, + SFC_GET_MAX_ALL_CHANNELS = 0x1045, + + SFC_SET_ADD_PEAK_CHUNK = 0x1050, + SFC_SET_ADD_HEADER_PAD_CHUNK = 0x1051, + + SFC_UPDATE_HEADER_NOW = 0x1060, + SFC_SET_UPDATE_HEADER_AUTO = 0x1061, + + SFC_FILE_TRUNCATE = 0x1080, + + SFC_SET_RAW_START_OFFSET = 0x1090, + + SFC_SET_DITHER_ON_WRITE = 0x10A0, + SFC_SET_DITHER_ON_READ = 0x10A1, + + SFC_GET_DITHER_INFO_COUNT = 0x10A2, + SFC_GET_DITHER_INFO = 0x10A3, + + SFC_GET_EMBED_FILE_INFO = 0x10B0, + + SFC_SET_CLIPPING = 0x10C0, + SFC_GET_CLIPPING = 0x10C1, + + SFC_GET_INSTRUMENT = 0x10D0, + SFC_SET_INSTRUMENT = 0x10D1, + + SFC_GET_LOOP_INFO = 0x10E0, + + SFC_GET_BROADCAST_INFO = 0x10F0, + SFC_SET_BROADCAST_INFO = 0x10F1, + + SFC_GET_CHANNEL_MAP_INFO = 0x1100, + SFC_SET_CHANNEL_MAP_INFO = 0x1101, + + SFC_RAW_DATA_NEEDS_ENDSWAP = 0x1110, + + /* Support for Wavex Ambisonics Format */ + SFC_WAVEX_SET_AMBISONIC = 0x1200, + SFC_WAVEX_GET_AMBISONIC = 0x1201, + + SFC_SET_VBR_ENCODING_QUALITY = 0x1300, + + /* Following commands for testing only. */ + SFC_TEST_IEEE_FLOAT_REPLACE = 0x6001, + + /* + ** SFC_SET_ADD_* values are deprecated and will disappear at some + ** time in the future. They are guaranteed to be here up to and + ** including version 1.0.8 to avoid breakage of existng software. + ** They currently do nothing and will continue to do nothing. + */ + SFC_SET_ADD_DITHER_ON_WRITE = 0x1070, + SFC_SET_ADD_DITHER_ON_READ = 0x1071 +} ; + + +/* +** String types that can be set and read from files. Not all file types +** support this and even the file types which support one, may not support +** all string types. +*/ + +enum +{ SF_STR_TITLE = 0x01, + SF_STR_COPYRIGHT = 0x02, + SF_STR_SOFTWARE = 0x03, + SF_STR_ARTIST = 0x04, + SF_STR_COMMENT = 0x05, + SF_STR_DATE = 0x06, + SF_STR_ALBUM = 0x07, + SF_STR_LICENSE = 0x08, + SF_STR_TRACKNUMBER = 0x09, + SF_STR_GENRE = 0x10 +} ; + +/* +** Use the following as the start and end index when doing metadata +** transcoding. +*/ + +#define SF_STR_FIRST SF_STR_TITLE +#define SF_STR_LAST SF_STR_LICENSE + +enum +{ /* True and false */ + SF_FALSE = 0, + SF_TRUE = 1, + + /* Modes for opening files. */ + SFM_READ = 0x10, + SFM_WRITE = 0x20, + SFM_RDWR = 0x30, + + SF_AMBISONIC_NONE = 0x40, + SF_AMBISONIC_B_FORMAT = 0x41 +} ; + +/* Public error values. These are guaranteed to remain unchanged for the duration +** of the library major version number. +** There are also a large number of private error numbers which are internal to +** the library which can change at any time. +*/ + +enum +{ SF_ERR_NO_ERROR = 0, + SF_ERR_UNRECOGNISED_FORMAT = 1, + SF_ERR_SYSTEM = 2, + SF_ERR_MALFORMED_FILE = 3, + SF_ERR_UNSUPPORTED_ENCODING = 4 +} ; + + +/* Channel map values (used with SFC_SET/GET_CHANNEL_MAP). +*/ + +enum +{ SF_CHANNEL_MAP_INVALID = 0, + SF_CHANNEL_MAP_MONO = 1, + SF_CHANNEL_MAP_LEFT, /* Apple calls this 'Left' */ + SF_CHANNEL_MAP_RIGHT, /* Apple calls this 'Right' */ + SF_CHANNEL_MAP_CENTER, /* Apple calls this 'Center' */ + SF_CHANNEL_MAP_FRONT_LEFT, + SF_CHANNEL_MAP_FRONT_RIGHT, + SF_CHANNEL_MAP_FRONT_CENTER, + SF_CHANNEL_MAP_REAR_CENTER, /* Apple calls this 'Center Surround', Msft calls this 'Back Center' */ + SF_CHANNEL_MAP_REAR_LEFT, /* Apple calls this 'Left Surround', Msft calls this 'Back Left' */ + SF_CHANNEL_MAP_REAR_RIGHT, /* Apple calls this 'Right Surround', Msft calls this 'Back Right' */ + SF_CHANNEL_MAP_LFE, /* Apple calls this 'LFEScreen', Msft calls this 'Low Frequency' */ + SF_CHANNEL_MAP_FRONT_LEFT_OF_CENTER, /* Apple calls this 'Left Center' */ + SF_CHANNEL_MAP_FRONT_RIGHT_OF_CENTER, /* Apple calls this 'Right Center */ + SF_CHANNEL_MAP_SIDE_LEFT, /* Apple calls this 'Left Surround Direct' */ + SF_CHANNEL_MAP_SIDE_RIGHT, /* Apple calls this 'Right Surround Direct' */ + SF_CHANNEL_MAP_TOP_CENTER, /* Apple calls this 'Top Center Surround' */ + SF_CHANNEL_MAP_TOP_FRONT_LEFT, /* Apple calls this 'Vertical Height Left' */ + SF_CHANNEL_MAP_TOP_FRONT_RIGHT, /* Apple calls this 'Vertical Height Right' */ + SF_CHANNEL_MAP_TOP_FRONT_CENTER, /* Apple calls this 'Vertical Height Center' */ + SF_CHANNEL_MAP_TOP_REAR_LEFT, /* Apple and MS call this 'Top Back Left' */ + SF_CHANNEL_MAP_TOP_REAR_RIGHT, /* Apple and MS call this 'Top Back Right' */ + SF_CHANNEL_MAP_TOP_REAR_CENTER, /* Apple and MS call this 'Top Back Center' */ + + SF_CHANNEL_MAP_AMBISONIC_B_W, + SF_CHANNEL_MAP_AMBISONIC_B_X, + SF_CHANNEL_MAP_AMBISONIC_B_Y, + SF_CHANNEL_MAP_AMBISONIC_B_Z, + + SF_CHANNEL_MAP_MAX +} ; + + +/* A SNDFILE* pointer can be passed around much like stdio.h's FILE* pointer. */ + +typedef struct SNDFILE_tag SNDFILE ; + +/* The following typedef is system specific and is defined when libsndfile is +** compiled. sf_count_t will be a 64 bit value when the underlying OS allows +** 64 bit file offsets. +** On windows, we need to allow the same header file to be compiler by both GCC +** and the Microsoft compiler. +*/ + +#if (defined (_MSCVER) || defined (_MSC_VER)) +typedef __int64 sf_count_t ; +#define SF_COUNT_MAX 0x7fffffffffffffffi64 +#else +typedef @TYPEOF_SF_COUNT_T@ sf_count_t ; +#define SF_COUNT_MAX @SF_COUNT_MAX@ +#endif + + +/* A pointer to a SF_INFO structure is passed to sf_open () and filled in. +** On write, the SF_INFO structure is filled in by the user and passed into +** sf_open (). +*/ + +struct SF_INFO +{ sf_count_t frames ; /* Used to be called samples. Changed to avoid confusion. */ + int samplerate ; + int channels ; + int format ; + int sections ; + int seekable ; +} ; + +typedef struct SF_INFO SF_INFO ; + +/* The SF_FORMAT_INFO struct is used to retrieve information about the sound +** file formats libsndfile supports using the sf_command () interface. +** +** Using this interface will allow applications to support new file formats +** and encoding types when libsndfile is upgraded, without requiring +** re-compilation of the application. +** +** Please consult the libsndfile documentation (particularly the information +** on the sf_command () interface) for examples of its use. +*/ + +typedef struct +{ int format ; + const char *name ; + const char *extension ; +} SF_FORMAT_INFO ; + +/* +** Enums and typedefs for adding dither on read and write. +** See the html documentation for sf_command(), SFC_SET_DITHER_ON_WRITE +** and SFC_SET_DITHER_ON_READ. +*/ + +enum +{ SFD_DEFAULT_LEVEL = 0, + SFD_CUSTOM_LEVEL = 0x40000000, + + SFD_NO_DITHER = 500, + SFD_WHITE = 501, + SFD_TRIANGULAR_PDF = 502 +} ; + +typedef struct +{ int type ; + double level ; + const char *name ; +} SF_DITHER_INFO ; + +/* Struct used to retrieve information about a file embedded within a +** larger file. See SFC_GET_EMBED_FILE_INFO. +*/ + +typedef struct +{ sf_count_t offset ; + sf_count_t length ; +} SF_EMBED_FILE_INFO ; + +/* +** Structs used to retrieve music sample information from a file. +*/ + +enum +{ /* + ** The loop mode field in SF_INSTRUMENT will be one of the following. + */ + SF_LOOP_NONE = 800, + SF_LOOP_FORWARD, + SF_LOOP_BACKWARD, + SF_LOOP_ALTERNATING +} ; + +typedef struct +{ int gain ; + char basenote, detune ; + char velocity_lo, velocity_hi ; + char key_lo, key_hi ; + int loop_count ; + + struct + { int mode ; + unsigned int start ; + unsigned int end ; + unsigned int count ; + } loops [16] ; /* make variable in a sensible way */ +} SF_INSTRUMENT ; + + + +/* Struct used to retrieve loop information from a file.*/ +typedef struct +{ + short time_sig_num ; /* any positive integer > 0 */ + short time_sig_den ; /* any positive power of 2 > 0 */ + int loop_mode ; /* see SF_LOOP enum */ + + int num_beats ; /* this is NOT the amount of quarter notes !!!*/ + /* a full bar of 4/4 is 4 beats */ + /* a full bar of 7/8 is 7 beats */ + + float bpm ; /* suggestion, as it can be calculated using other fields:*/ + /* file's lenght, file's sampleRate and our time_sig_den*/ + /* -> bpms are always the amount of _quarter notes_ per minute */ + + int root_key ; /* MIDI note, or -1 for None */ + int future [6] ; +} SF_LOOP_INFO ; + + +/* Struct used to retrieve broadcast (EBU) information from a file. +** Strongly (!) based on EBU "bext" chunk format used in Broadcast WAVE. +*/ +#define SF_BROADCAST_INFO_VAR(coding_hist_size) \ + struct \ + { char description [256] ; \ + char originator [32] ; \ + char originator_reference [32] ; \ + char origination_date [10] ; \ + char origination_time [8] ; \ + unsigned int time_reference_low ; \ + unsigned int time_reference_high ; \ + short version ; \ + char umid [64] ; \ + char reserved [190] ; \ + unsigned int coding_history_size ; \ + char coding_history [coding_hist_size] ; \ + } + +/* SF_BROADCAST_INFO is the above struct with coding_history field of 256 bytes. */ +typedef SF_BROADCAST_INFO_VAR (256) SF_BROADCAST_INFO ; + + +/* Virtual I/O functionality. */ + +typedef sf_count_t (*sf_vio_get_filelen) (void *user_data) ; +typedef sf_count_t (*sf_vio_seek) (sf_count_t offset, int whence, void *user_data) ; +typedef sf_count_t (*sf_vio_read) (void *ptr, sf_count_t count, void *user_data) ; +typedef sf_count_t (*sf_vio_write) (const void *ptr, sf_count_t count, void *user_data) ; +typedef sf_count_t (*sf_vio_tell) (void *user_data) ; + +struct SF_VIRTUAL_IO +{ sf_vio_get_filelen get_filelen ; + sf_vio_seek seek ; + sf_vio_read read ; + sf_vio_write write ; + sf_vio_tell tell ; +} ; + +typedef struct SF_VIRTUAL_IO SF_VIRTUAL_IO ; + + +/* Open the specified file for read, write or both. On error, this will +** return a NULL pointer. To find the error number, pass a NULL SNDFILE +** to sf_strerror (). +** All calls to sf_open() should be matched with a call to sf_close(). +*/ + +SNDFILE* sf_open (const char *path, int mode, SF_INFO *sfinfo) ; + + +/* Use the existing file descriptor to create a SNDFILE object. If close_desc +** is TRUE, the file descriptor will be closed when sf_close() is called. If +** it is FALSE, the descritor will not be closed. +** When passed a descriptor like this, the library will assume that the start +** of file header is at the current file offset. This allows sound files within +** larger container files to be read and/or written. +** On error, this will return a NULL pointer. To find the error number, pass a +** NULL SNDFILE to sf_strerror (). +** All calls to sf_open_fd() should be matched with a call to sf_close(). + +*/ + +SNDFILE* sf_open_fd (int fd, int mode, SF_INFO *sfinfo, int close_desc) ; + +SNDFILE* sf_open_virtual (SF_VIRTUAL_IO *sfvirtual, int mode, SF_INFO *sfinfo, void *user_data) ; + + +/* sf_error () returns a error number which can be translated to a text +** string using sf_error_number(). +*/ + +int sf_error (SNDFILE *sndfile) ; + + +/* sf_strerror () returns to the caller a pointer to the current error message for +** the given SNDFILE. +*/ + +const char* sf_strerror (SNDFILE *sndfile) ; + + +/* sf_error_number () allows the retrieval of the error string for each internal +** error number. +** +*/ + +const char* sf_error_number (int errnum) ; + + +/* The following two error functions are deprecated but they will remain in the +** library for the forseeable future. The function sf_strerror() should be used +** in their place. +*/ + +int sf_perror (SNDFILE *sndfile) ; +int sf_error_str (SNDFILE *sndfile, char* str, size_t len) ; + + +/* Return TRUE if fields of the SF_INFO struct are a valid combination of values. */ + +int sf_command (SNDFILE *sndfile, int command, void *data, int datasize) ; + + +/* Return TRUE if fields of the SF_INFO struct are a valid combination of values. */ + +int sf_format_check (const SF_INFO *info) ; + + +/* Seek within the waveform data chunk of the SNDFILE. sf_seek () uses +** the same values for whence (SEEK_SET, SEEK_CUR and SEEK_END) as +** stdio.h function fseek (). +** An offset of zero with whence set to SEEK_SET will position the +** read / write pointer to the first data sample. +** On success sf_seek returns the current position in (multi-channel) +** samples from the start of the file. +** Please see the libsndfile documentation for moving the read pointer +** separately from the write pointer on files open in mode SFM_RDWR. +** On error all of these functions return -1. +*/ + +sf_count_t sf_seek (SNDFILE *sndfile, sf_count_t frames, int whence) ; + + +/* Functions for retrieving and setting string data within sound files. +** Not all file types support this features; AIFF and WAV do. For both +** functions, the str_type parameter must be one of the SF_STR_* values +** defined above. +** On error, sf_set_string() returns non-zero while sf_get_string() +** returns NULL. +*/ + +int sf_set_string (SNDFILE *sndfile, int str_type, const char* str) ; + +const char* sf_get_string (SNDFILE *sndfile, int str_type) ; + + +/* Return the library version string. */ + +const char * sf_version_string (void) ; + + +/* Functions for reading/writing the waveform data of a sound file. +*/ + +sf_count_t sf_read_raw (SNDFILE *sndfile, void *ptr, sf_count_t bytes) ; +sf_count_t sf_write_raw (SNDFILE *sndfile, const void *ptr, sf_count_t bytes) ; + + +/* Functions for reading and writing the data chunk in terms of frames. +** The number of items actually read/written = frames * number of channels. +** sf_xxxx_raw read/writes the raw data bytes from/to the file +** sf_xxxx_short passes data in the native short format +** sf_xxxx_int passes data in the native int format +** sf_xxxx_float passes data in the native float format +** sf_xxxx_double passes data in the native double format +** All of these read/write function return number of frames read/written. +*/ + +sf_count_t sf_readf_short (SNDFILE *sndfile, short *ptr, sf_count_t frames) ; +sf_count_t sf_writef_short (SNDFILE *sndfile, const short *ptr, sf_count_t frames) ; + +sf_count_t sf_readf_int (SNDFILE *sndfile, int *ptr, sf_count_t frames) ; +sf_count_t sf_writef_int (SNDFILE *sndfile, const int *ptr, sf_count_t frames) ; + +sf_count_t sf_readf_float (SNDFILE *sndfile, float *ptr, sf_count_t frames) ; +sf_count_t sf_writef_float (SNDFILE *sndfile, const float *ptr, sf_count_t frames) ; + +sf_count_t sf_readf_double (SNDFILE *sndfile, double *ptr, sf_count_t frames) ; +sf_count_t sf_writef_double (SNDFILE *sndfile, const double *ptr, sf_count_t frames) ; + + +/* Functions for reading and writing the data chunk in terms of items. +** Otherwise similar to above. +** All of these read/write function return number of items read/written. +*/ + +sf_count_t sf_read_short (SNDFILE *sndfile, short *ptr, sf_count_t items) ; +sf_count_t sf_write_short (SNDFILE *sndfile, const short *ptr, sf_count_t items) ; + +sf_count_t sf_read_int (SNDFILE *sndfile, int *ptr, sf_count_t items) ; +sf_count_t sf_write_int (SNDFILE *sndfile, const int *ptr, sf_count_t items) ; + +sf_count_t sf_read_float (SNDFILE *sndfile, float *ptr, sf_count_t items) ; +sf_count_t sf_write_float (SNDFILE *sndfile, const float *ptr, sf_count_t items) ; + +sf_count_t sf_read_double (SNDFILE *sndfile, double *ptr, sf_count_t items) ; +sf_count_t sf_write_double (SNDFILE *sndfile, const double *ptr, sf_count_t items) ; + + +/* Close the SNDFILE and clean up all memory allocations associated with this +** file. +** Returns 0 on success, or an error number. +*/ + +int sf_close (SNDFILE *sndfile) ; + + +/* If the file is opened SFM_WRITE or SFM_RDWR, call fsync() on the file +** to force the writing of data to disk. If the file is opened SFM_READ +** no action is taken. +*/ + +void sf_write_sync (SNDFILE *sndfile) ; + + + +/* The function sf_wchar_open() is Windows Only! +** Open a file passing in a Windows Unicode filename. Otherwise, this is +** the same as sf_open(). +** +** In order for this to work, you need to do the following: +** +** #include +** #define ENABLE_SNDFILE_WINDOWS_PROTOTYPES 1 +** #including +*/ + +#if ENABLE_SNDFILE_WINDOWS_PROTOTYPES +SNDFILE* sf_wchar_open (LPCWSTR wpath, int mode, SF_INFO *sfinfo) ; +#endif + + + +#ifdef __cplusplus +} /* extern "C" */ +#endif /* __cplusplus */ + +#endif /* SNDFILE_H */ + diff --git a/cmake-proxies/libsoxr/CMakeLists.txt b/cmake-proxies/libsoxr/CMakeLists.txt index faf429229..29468b3b0 100644 --- a/cmake-proxies/libsoxr/CMakeLists.txt +++ b/cmake-proxies/libsoxr/CMakeLists.txt @@ -1,57 +1,95 @@ -#directory cmake-proxies/libsoxr -set( TARGET libsoxr ) -set( TARGET_SOURCE ${LIB_SRC_DIRECTORY}${TARGET} ) -project( ${TARGET} ) -set( SOURCES -#${LIB_SRC_DIRECTORY}libsoxr/examples/1-single-block.c -#${LIB_SRC_DIRECTORY}libsoxr/examples/1a-lsr.c -#${LIB_SRC_DIRECTORY}libsoxr/examples/2-stream.C -#${LIB_SRC_DIRECTORY}libsoxr/examples/3-options-input-fn.c -#${LIB_SRC_DIRECTORY}libsoxr/examples/4-split-channels.c -#${LIB_SRC_DIRECTORY}libsoxr/examples/5-variable-rate.c -#${LIB_SRC_DIRECTORY}libsoxr/src/avfft32.c -#${LIB_SRC_DIRECTORY}libsoxr/src/avfft32s.c -#${LIB_SRC_DIRECTORY}libsoxr/src/cr-core.c -${LIB_SRC_DIRECTORY}libsoxr/src/cr.c -${LIB_SRC_DIRECTORY}libsoxr/src/cr32.c -${LIB_SRC_DIRECTORY}libsoxr/src/cr32s.c -${LIB_SRC_DIRECTORY}libsoxr/src/cr64.c -#${LIB_SRC_DIRECTORY}libsoxr/src/cr64s.c -${LIB_SRC_DIRECTORY}libsoxr/src/data-io.c -${LIB_SRC_DIRECTORY}libsoxr/src/dbesi0.c -${LIB_SRC_DIRECTORY}libsoxr/src/fft4g.c -${LIB_SRC_DIRECTORY}libsoxr/src/fft4g32.c -#${LIB_SRC_DIRECTORY}libsoxr/src/fft4g32s.c -${LIB_SRC_DIRECTORY}libsoxr/src/fft4g64.c -${LIB_SRC_DIRECTORY}libsoxr/src/filter.c -#${LIB_SRC_DIRECTORY}libsoxr/src/pffft-wrap.c -#${LIB_SRC_DIRECTORY}libsoxr/src/pffft.c -#${LIB_SRC_DIRECTORY}libsoxr/src/pffft32.c -${LIB_SRC_DIRECTORY}libsoxr/src/pffft32s.c -#${LIB_SRC_DIRECTORY}libsoxr/src/pffft64s.c -#${LIB_SRC_DIRECTORY}libsoxr/src/soxr-lsr.c -${LIB_SRC_DIRECTORY}libsoxr/src/soxr.c -#${LIB_SRC_DIRECTORY}libsoxr/src/util-simd.c -${LIB_SRC_DIRECTORY}libsoxr/src/util32s.c -#${LIB_SRC_DIRECTORY}libsoxr/src/util64s.c -#${LIB_SRC_DIRECTORY}libsoxr/src/vr-coefs.c -${LIB_SRC_DIRECTORY}libsoxr/src/vr32.c -#${LIB_SRC_DIRECTORY}libsoxr/tests/1-delay-clear.c -#${LIB_SRC_DIRECTORY}libsoxr/tests/throughput.c -#${LIB_SRC_DIRECTORY}libsoxr/tests/vector-cmp.c -#${LIB_SRC_DIRECTORY}libsoxr/tests/vector-gen.c -) -# This defines the #define on both Windows and Linux. -add_definitions( --D_USE_MATH_DEFINES --D_CRT_SECURE_NO_WARNINGS --DSOXR_LIB - ) -add_library( ${TARGET} STATIC ${SOURCES}) +add_library( ${TARGET} STATIC ) -target_include_directories( ${TARGET} PRIVATE -${TARGET_SOURCE}/msvc +set(CMAKE_MODULE_PATH ${TARGET_ROOT}/cmake/Modules ) + +list( APPEND SOURCES + PRIVATE + ${TARGET_ROOT}/src/cr.c + ${TARGET_ROOT}/src/cr32.c + ${TARGET_ROOT}/src/cr32s.c + ${TARGET_ROOT}/src/cr64.c + ${TARGET_ROOT}/src/cr64s.c + ${TARGET_ROOT}/src/data-io.c + ${TARGET_ROOT}/src/dbesi0.c + ${TARGET_ROOT}/src/fft4g.c + ${TARGET_ROOT}/src/fft4g32.c + ${TARGET_ROOT}/src/fft4g64.c + ${TARGET_ROOT}/src/filter.c + ${TARGET_ROOT}/src/pffft32s.c + ${TARGET_ROOT}/src/pffft64s.c + ${TARGET_ROOT}/src/soxr.c + ${TARGET_ROOT}/src/util32s.c + ${TARGET_ROOT}/src/util64s.c + ${TARGET_ROOT}/src/vr32.c ) -target_link_libraries( ${TARGET} ) \ No newline at end of file +list( APPEND INCLUDES + PRIVATE + ${CMAKE_CURRENT_BINARY_DIR}/private + PUBLIC + ${TARGET_ROOT}/src +) + +list( APPEND DEFINES + PRIVATE + _USE_MATH_DEFINES + _CRT_SECURE_NO_WARNINGS + SOXR_LIB +) + +list( APPEND OPTIONS + PRIVATE + $<$:-Wall> +) + +if( CMAKE_C_COMPILER_ID MATCHES "GNU|.*Clang" ) + list( APPEND OPTIONS + PRIVATE + -Wconversion -Wall -Wextra -pedantic -Wundef -Wpointer-arith -Wno-long-long + $<$:-Wno-keyword-macro> + $<$: + -std=gnu89 -Wnested-externs -Wmissing-prototypes -Wstrict-prototypes + > + ) +endif() + +set( HAVE_BIGENDIAN ${WORDS_BIGENDIAN} ) + +set( AVCODEC_FOUND NO ) +set( AVUTIL_FOUND NO ) +set( WITH_PFFFT YES ) + +set( WITH_CR32 YES ) +set( WITH_CR32S YES ) +set( WITH_CR64 YES ) +set( WITH_CR64S YES ) +set( WITH_VR32 YES ) + +# Copied from libsoxr CMakeLists.txt +if( WITH_CR32S ) + find_package( SIMD32 ) + set( WITH_CR32S ${SIMD32_FOUND} ) +# list( APPEND OPTIONS ${SIMD32_C_FLAGS} ) +endif() + +if( WITH_CR64S ) + find_package( SIMD64 ) + set( WITH_CR64S ${SIMD64_FOUND} ) + list( APPEND OPTIONS ${SIMD64_C_FLAGS} ) +endif() + +set( WITH_HI_PREC_CLOCK YES ) +set( WITH_FLOAT_STD_PREC_CLOCK NO ) +set( WITH_DEV_TRACE NO ) + +configure_file( soxr-config.h.in private/soxr-config.h ) + +organize_source( "${TARGET_ROOT}" "" "${SOURCES}" ) +target_sources( ${TARGET} PRIVATE ${SOURCES} ) +target_compile_definitions( ${TARGET} PRIVATE ${DEFINES} ) +target_compile_features( ${TARGET} PRIVATE ${FEATURES} ) +target_compile_options( ${TARGET} PRIVATE ${OPTIONS} ) +target_include_directories( ${TARGET} PRIVATE ${INCLUDES} ) +target_link_libraries( ${TARGET} PRIVATE ${LIBRARIES} ) + diff --git a/cmake-proxies/libsoxr/soxr-config.h.in b/cmake-proxies/libsoxr/soxr-config.h.in new file mode 100644 index 000000000..00b3b4570 --- /dev/null +++ b/cmake-proxies/libsoxr/soxr-config.h.in @@ -0,0 +1,27 @@ +/* SoX Resampler Library Copyright (c) 2007-16 robs@users.sourceforge.net + * Licence for this file: LGPL v2.1 See LICENCE for details. */ + +#if !defined soxr_config_included +#define soxr_config_included + +#cmakedefine01 AVCODEC_FOUND +#cmakedefine01 AVUTIL_FOUND +#cmakedefine01 WITH_PFFFT + +#cmakedefine01 HAVE_FENV_H +#cmakedefine01 HAVE_STDBOOL_H +#cmakedefine01 HAVE_STDINT_H +#cmakedefine01 HAVE_LRINT +#cmakedefine01 HAVE_BIGENDIAN + +#cmakedefine01 WITH_CR32 +#cmakedefine01 WITH_CR32S +#cmakedefine01 WITH_CR64 +#cmakedefine01 WITH_CR64S +#cmakedefine01 WITH_VR32 + +#cmakedefine01 WITH_HI_PREC_CLOCK +#cmakedefine01 WITH_FLOAT_STD_PREC_CLOCK +#cmakedefine01 WITH_DEV_TRACE + +#endif diff --git a/cmake-proxies/libvamp/CMakeLists.txt b/cmake-proxies/libvamp/CMakeLists.txt index 8070e920e..eec2c3a87 100644 --- a/cmake-proxies/libvamp/CMakeLists.txt +++ b/cmake-proxies/libvamp/CMakeLists.txt @@ -1,47 +1,33 @@ -#directory cmake-proxies/libvamp -#UNUSED -set( TARGET libvamp ) -set( TARGET_SOURCE ${LIB_SRC_DIRECTORY}${TARGET} ) -project( ${TARGET} ) -set( SOURCES -#${LIB_SRC_DIRECTORY}libvamp/examples/AmplitudeFollower.cpp -#${LIB_SRC_DIRECTORY}libvamp/examples/FixedTempoEstimator.cpp -#${LIB_SRC_DIRECTORY}libvamp/examples/PercussionOnsetDetector.cpp -#${LIB_SRC_DIRECTORY}libvamp/examples/plugins.cpp -#${LIB_SRC_DIRECTORY}libvamp/examples/PowerSpectrum.cpp -#${LIB_SRC_DIRECTORY}libvamp/examples/SpectralCentroid.cpp -#${LIB_SRC_DIRECTORY}libvamp/examples/ZeroCrossing.cpp -#${LIB_SRC_DIRECTORY}libvamp/host/vamp-simple-host.cpp -#${LIB_SRC_DIRECTORY}libvamp/rdf/generator/vamp-rdf-template-generator.cpp -#${LIB_SRC_DIRECTORY}libvamp/skeleton/MyPlugin.cpp -#${LIB_SRC_DIRECTORY}libvamp/skeleton/plugins.cpp -${LIB_SRC_DIRECTORY}libvamp/src/vamp-hostsdk/PluginBufferingAdapter.cpp -${LIB_SRC_DIRECTORY}libvamp/src/vamp-hostsdk/PluginChannelAdapter.cpp -${LIB_SRC_DIRECTORY}libvamp/src/vamp-hostsdk/PluginHostAdapter.cpp -${LIB_SRC_DIRECTORY}libvamp/src/vamp-hostsdk/PluginInputDomainAdapter.cpp -${LIB_SRC_DIRECTORY}libvamp/src/vamp-hostsdk/PluginLoader.cpp -${LIB_SRC_DIRECTORY}libvamp/src/vamp-hostsdk/PluginSummarisingAdapter.cpp -${LIB_SRC_DIRECTORY}libvamp/src/vamp-hostsdk/PluginWrapper.cpp -${LIB_SRC_DIRECTORY}libvamp/src/vamp-hostsdk/RealTime.cpp -#${LIB_SRC_DIRECTORY}libvamp/src/vamp-sdk/FFT.cpp -#${LIB_SRC_DIRECTORY}libvamp/src/vamp-sdk/FFTimpl.cpp -#${LIB_SRC_DIRECTORY}libvamp/src/vamp-sdk/PluginAdapter.cpp -#${LIB_SRC_DIRECTORY}libvamp/src/vamp-sdk/RealTime.cpp +add_library( ${TARGET} STATIC ) -#${LIB_SRC_DIRECTORY}libvamp/src/vamp-hostsdk/acsymbols.c -#${LIB_SRC_DIRECTORY}libvamp/src/vamp-sdk/acsymbols.c - -) -# This defines the #define on both Windows and Linux. -add_definitions( --D_LIB --D_USE_MATH_DEFINES - ) -add_library( ${TARGET} STATIC ${SOURCES}) - -target_include_directories( ${TARGET} PRIVATE -${TARGET_SOURCE} +list( APPEND SOURCES + PRIVATE + ${TARGET_ROOT}/src/vamp-hostsdk/PluginBufferingAdapter.cpp + ${TARGET_ROOT}/src/vamp-hostsdk/PluginChannelAdapter.cpp + ${TARGET_ROOT}/src/vamp-hostsdk/PluginHostAdapter.cpp + ${TARGET_ROOT}/src/vamp-hostsdk/PluginInputDomainAdapter.cpp + ${TARGET_ROOT}/src/vamp-hostsdk/PluginLoader.cpp + ${TARGET_ROOT}/src/vamp-hostsdk/PluginSummarisingAdapter.cpp + ${TARGET_ROOT}/src/vamp-hostsdk/PluginWrapper.cpp + ${TARGET_ROOT}/src/vamp-hostsdk/RealTime.cpp ) -target_link_libraries( ${TARGET} ) \ No newline at end of file +list( APPEND INCLUDES + PUBLIC + ${TARGET_ROOT} +) + +list( APPEND DEFINES + PRIVATE + _USE_MATH_DEFINES +) + +organize_source( "${TARGET_ROOT}" "" "${SOURCES}" ) +target_sources( ${TARGET} PRIVATE ${SOURCES} ) +target_compile_definitions( ${TARGET} PRIVATE ${DEFINES} ) +target_compile_features( ${TARGET} PRIVATE ${FEATURES} ) +target_compile_options( ${TARGET} PRIVATE ${OPTIONS} ) +target_include_directories( ${TARGET} PRIVATE ${INCLUDES} ) +target_link_libraries( ${TARGET} PRIVATE ${LIBRARIES} ) + diff --git a/cmake-proxies/libvorbis/CMakeLists.txt b/cmake-proxies/libvorbis/CMakeLists.txt index 5855534e4..7a5e2daf3 100644 --- a/cmake-proxies/libvorbis/CMakeLists.txt +++ b/cmake-proxies/libvorbis/CMakeLists.txt @@ -1,71 +1,58 @@ -#directory cmake-proxies/libvorbis -set( TARGET libvorbis ) -set( TARGET_SOURCE ${LIB_SRC_DIRECTORY}${TARGET} ) -project( ${TARGET} ) -set( SOURCES -#${LIB_SRC_DIRECTORY}libvorbis/examples/chaining_example.c -#${LIB_SRC_DIRECTORY}libvorbis/examples/decoder_example.c -#${LIB_SRC_DIRECTORY}libvorbis/examples/encoder_example.c -#${LIB_SRC_DIRECTORY}libvorbis/examples/seeking_example.c -#${LIB_SRC_DIRECTORY}libvorbis/examples/vorbisfile_example.c -${LIB_SRC_DIRECTORY}libvorbis/lib/analysis.c -#${LIB_SRC_DIRECTORY}libvorbis/lib/barkmel.c -${LIB_SRC_DIRECTORY}libvorbis/lib/bitrate.c -${LIB_SRC_DIRECTORY}libvorbis/lib/block.c -${LIB_SRC_DIRECTORY}libvorbis/lib/codebook.c -${LIB_SRC_DIRECTORY}libvorbis/lib/envelope.c -${LIB_SRC_DIRECTORY}libvorbis/lib/floor0.c -${LIB_SRC_DIRECTORY}libvorbis/lib/floor1.c -${LIB_SRC_DIRECTORY}libvorbis/lib/info.c -${LIB_SRC_DIRECTORY}libvorbis/lib/lookup.c -${LIB_SRC_DIRECTORY}libvorbis/lib/lpc.c -${LIB_SRC_DIRECTORY}libvorbis/lib/lsp.c -${LIB_SRC_DIRECTORY}libvorbis/lib/mapping0.c -${LIB_SRC_DIRECTORY}libvorbis/lib/mdct.c -${LIB_SRC_DIRECTORY}libvorbis/lib/psy.c -#${LIB_SRC_DIRECTORY}libvorbis/lib/psytune.c -${LIB_SRC_DIRECTORY}libvorbis/lib/registry.c -${LIB_SRC_DIRECTORY}libvorbis/lib/res0.c -${LIB_SRC_DIRECTORY}libvorbis/lib/sharedbook.c -${LIB_SRC_DIRECTORY}libvorbis/lib/smallft.c -${LIB_SRC_DIRECTORY}libvorbis/lib/synthesis.c -#${LIB_SRC_DIRECTORY}libvorbis/lib/tone.c -${LIB_SRC_DIRECTORY}libvorbis/lib/vorbisenc.c -${LIB_SRC_DIRECTORY}libvorbis/lib/vorbisfile.c -${LIB_SRC_DIRECTORY}libvorbis/lib/window.c -#${LIB_SRC_DIRECTORY}libvorbis/macos/compat/strdup.c -#${LIB_SRC_DIRECTORY}libvorbis/test/test.c -#${LIB_SRC_DIRECTORY}libvorbis/test/util.c -#${LIB_SRC_DIRECTORY}libvorbis/test/write_read.c -#${LIB_SRC_DIRECTORY}libvorbis/vq/bookutil.c -#${LIB_SRC_DIRECTORY}libvorbis/vq/build.c -#${LIB_SRC_DIRECTORY}libvorbis/vq/cascade.c -#${LIB_SRC_DIRECTORY}libvorbis/vq/distribution.c -#${LIB_SRC_DIRECTORY}libvorbis/vq/genericdata.c -#${LIB_SRC_DIRECTORY}libvorbis/vq/huffbuild.c -#${LIB_SRC_DIRECTORY}libvorbis/vq/latticebuild.c -#${LIB_SRC_DIRECTORY}libvorbis/vq/latticehint.c -#${LIB_SRC_DIRECTORY}libvorbis/vq/latticepare.c -#${LIB_SRC_DIRECTORY}libvorbis/vq/latticetune.c -#${LIB_SRC_DIRECTORY}libvorbis/vq/lspdata.c -#${LIB_SRC_DIRECTORY}libvorbis/vq/metrics.c -#${LIB_SRC_DIRECTORY}libvorbis/vq/residuedata.c -#${LIB_SRC_DIRECTORY}libvorbis/vq/residuesplit.c -#${LIB_SRC_DIRECTORY}libvorbis/vq/run.c -#${LIB_SRC_DIRECTORY}libvorbis/vq/train.c -#${LIB_SRC_DIRECTORY}libvorbis/vq/vqgen.c -#${LIB_SRC_DIRECTORY}libvorbis/vq/vqsplit.c -) -# This defines the #define on both Windows and Linux. -add_definitions( --D_LIB - ) -add_library( ${TARGET} STATIC ${SOURCES}) +add_library( ${TARGET} STATIC ) -target_include_directories( ${TARGET} PRIVATE -${TARGET_SOURCE}/include -${LIB_SRC_DIRECTORY}/libogg/include +list( APPEND SOURCES + PRIVATE + ${TARGET_ROOT}/lib/analysis.c + ${TARGET_ROOT}/lib/bitrate.c + ${TARGET_ROOT}/lib/block.c + ${TARGET_ROOT}/lib/codebook.c + ${TARGET_ROOT}/lib/envelope.c + ${TARGET_ROOT}/lib/floor0.c + ${TARGET_ROOT}/lib/floor1.c + ${TARGET_ROOT}/lib/info.c + ${TARGET_ROOT}/lib/lookup.c + ${TARGET_ROOT}/lib/lpc.c + ${TARGET_ROOT}/lib/lsp.c + ${TARGET_ROOT}/lib/mapping0.c + ${TARGET_ROOT}/lib/mdct.c + ${TARGET_ROOT}/lib/psy.c + ${TARGET_ROOT}/lib/registry.c + ${TARGET_ROOT}/lib/res0.c + ${TARGET_ROOT}/lib/sharedbook.c + ${TARGET_ROOT}/lib/smallft.c + ${TARGET_ROOT}/lib/synthesis.c + ${TARGET_ROOT}/lib/vorbisenc.c + ${TARGET_ROOT}/lib/vorbisfile.c + ${TARGET_ROOT}/lib/window.c ) -target_link_libraries( ${TARGET} ) \ No newline at end of file +list( APPEND INCLUDES + PRIVATE + ${CMAKE_CURRENT_BINARY_DIR}/private + ${TARGET_ROOT}/lib + ${LIBOGG_INCLUDES} + PUBLIC + ${TARGET_ROOT}/include +) + +list( APPEND DEFINES + PRIVATE + HAVE_CONFIG_H +) + +list( APPEND LIBRARIES + PRIVATE + libogg +) + +configure_file( config.h.in private/config.h ) + +organize_source( "${TARGET_ROOT}" "" "${SOURCES}" ) +target_sources( ${TARGET} PRIVATE ${SOURCES} ) +target_compile_definitions( ${TARGET} PRIVATE ${DEFINES} ) +target_compile_features( ${TARGET} PRIVATE ${FEATURES} ) +target_compile_options( ${TARGET} PRIVATE ${OPTIONS} ) +target_include_directories( ${TARGET} PRIVATE ${INCLUDES} ) +target_link_libraries( ${TARGET} PRIVATE ${LIBRARIES} ) + diff --git a/cmake-proxies/libvorbis/config.h.in b/cmake-proxies/libvorbis/config.h.in new file mode 100644 index 000000000..c99770062 --- /dev/null +++ b/cmake-proxies/libvorbis/config.h.in @@ -0,0 +1,94 @@ +/* config.h.in. Generated from configure.ac by autoheader. */ + +/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP + systems. This function is required for `alloca.c' support on those systems. + */ +#cmakedefine CRAY_STACKSEG_END 1 + +/* Define to 1 if using `alloca.c'. */ +#cmakedefine C_ALLOCA 1 + +/* Define to 1 if you have `alloca', as a function or macro. */ +#cmakedefine HAVE_ALLOCA 1 + +/* Define to 1 if you have and it should be used (not on Ultrix). + */ +#cmakedefine HAVE_ALLOCA_H 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_DLFCN_H 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_INTTYPES_H 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_MEMORY_H 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_STDINT_H 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_STDLIB_H 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_STRINGS_H 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_STRING_H 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_SYS_STAT_H 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_SYS_TYPES_H 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_UNISTD_H 1 + +/* Define to the sub-directory in which libtool stores uninstalled libraries. + */ +#cmakedefine LT_OBJDIR "@LT_OBDIR@" + +/* Name of package */ +#cmakedefine PACKAGE "@PACKAGE@" + +/* Define to the address where bug reports for this package should be sent. */ +#cmakedefine PACKAGE_BUGREPORT "@PACKAGE_BUGREPORT@" + +/* Define to the full name of this package. */ +#cmakedefine PACKAGE_NAME "@PACKAGE_NAME@" + +/* Define to the full name and version of this package. */ +#cmakedefine PACKAGE_STRING "@PACKAGE_STRING@" + +/* Define to the one symbol short name of this package. */ +#cmakedefine PACKAGE_TARNAME "@PACKAGE_TARNAME@" + +/* Define to the home page for this package. */ +#cmakedefine PACKAGE_URL "@PACKAGE_URL@" + +/* Define to the version of this package. */ +#cmakedefine PACKAGE_VERSION "@PACKAGE_VERSION@" + +/* If using the C implementation of alloca, define if you know the + direction of stack growth for your system; otherwise it will be + automatically deduced at runtime. + STACK_DIRECTION > 0 => grows toward higher addresses + STACK_DIRECTION < 0 => grows toward lower addresses + STACK_DIRECTION = 0 => direction of growth unknown */ +#cmakedefine STACK_DIRECTION 1 + +/* Define to 1 if you have the ANSI C header files. */ +#cmakedefine STDC_HEADERS 1 + +/* Version number of package */ +#cmakedefine VERSION "@VERSION@" + +/* Define to `__inline__' or `__inline' if that's what the C compiler + calls it, or to nothing if 'inline' is not supported under any name. */ +#ifndef __cplusplus +#cmakedefine inline @inline@ +#endif + +/* Define to `unsigned int' if does not define. */ +#cmakedefine size_t @size_t@ diff --git a/cmake-proxies/lv2/CMakeLists.txt b/cmake-proxies/lv2/CMakeLists.txt index 8b3c9d05f..f8457a3ba 100644 --- a/cmake-proxies/lv2/CMakeLists.txt +++ b/cmake-proxies/lv2/CMakeLists.txt @@ -1,93 +1,273 @@ -#directory cmake-proxies/lv2 -set( TARGET lv2 ) -set( TARGET_SOURCE ${LIB_SRC_DIRECTORY}${TARGET} ) -project( ${TARGET} ) -set( SOURCES -#${LIB_SRC_DIRECTORY}lv2/sord/src/sordmm_test.cpp -#${LIB_SRC_DIRECTORY}lv2/suil/src/gtk2_in_qt4.cpp -#${LIB_SRC_DIRECTORY}lv2/suil/src/qt4_in_gtk2.cpp -#${LIB_SRC_DIRECTORY}lv2/suil/src/win_in_gtk2.cpp -#${LIB_SRC_DIRECTORY}lv2/suil/src/x11_in_qt4.cpp +add_library( ${TARGET} STATIC ) -#${LIB_SRC_DIRECTORY}lv2/lilv/bindings/test/bindings_test_plugin.c -${LIB_SRC_DIRECTORY}lv2/lilv/src/collections.c -${LIB_SRC_DIRECTORY}lv2/lilv/src/instance.c -${LIB_SRC_DIRECTORY}lv2/lilv/src/lib.c -${LIB_SRC_DIRECTORY}lv2/lilv/src/node.c -${LIB_SRC_DIRECTORY}lv2/lilv/src/plugin.c -${LIB_SRC_DIRECTORY}lv2/lilv/src/pluginclass.c -${LIB_SRC_DIRECTORY}lv2/lilv/src/port.c -${LIB_SRC_DIRECTORY}lv2/lilv/src/query.c -${LIB_SRC_DIRECTORY}lv2/lilv/src/scalepoint.c -${LIB_SRC_DIRECTORY}lv2/lilv/src/state.c -${LIB_SRC_DIRECTORY}lv2/lilv/src/ui.c -${LIB_SRC_DIRECTORY}lv2/lilv/src/util.c -${LIB_SRC_DIRECTORY}lv2/lilv/src/world.c -#${LIB_SRC_DIRECTORY}lv2/lilv/src/zix/tree.c #see sord source. +def_vars() -#${LIB_SRC_DIRECTORY}lv2/lilv/test/lilv_test.c -#${LIB_SRC_DIRECTORY}lv2/lilv/test/test_plugin.c -#${LIB_SRC_DIRECTORY}lv2/lilv/utils/lilv-bench.c -#${LIB_SRC_DIRECTORY}lv2/lilv/utils/lv2bench.c -#${LIB_SRC_DIRECTORY}lv2/lilv/utils/lv2info.c -#${LIB_SRC_DIRECTORY}lv2/lilv/utils/lv2ls.c -#${LIB_SRC_DIRECTORY}lv2/lv2/lv2/lv2plug.in/ns/ext/atom/atom-test.c -#${LIB_SRC_DIRECTORY}lv2/lv2/plugins/eg-amp.lv2/amp.c -#${LIB_SRC_DIRECTORY}lv2/lv2/plugins/eg-fifths.lv2/fifths.c -#${LIB_SRC_DIRECTORY}lv2/lv2/plugins/eg-metro.lv2/metro.c -#${LIB_SRC_DIRECTORY}lv2/lv2/plugins/eg-midigate.lv2/midigate.c -#${LIB_SRC_DIRECTORY}lv2/lv2/plugins/eg-sampler.lv2/sampler.c -#${LIB_SRC_DIRECTORY}lv2/lv2/plugins/eg-sampler.lv2/sampler_ui.c -#${LIB_SRC_DIRECTORY}lv2/lv2/plugins/eg-scope.lv2/examploscope.c -#${LIB_SRC_DIRECTORY}lv2/lv2/plugins/eg-scope.lv2/examploscope_ui.c -${LIB_SRC_DIRECTORY}lv2/serd/src/env.c -#${LIB_SRC_DIRECTORY}lv2/serd/src/node.c -${LIB_SRC_DIRECTORY}lv2/serd/src/reader.c -#${LIB_SRC_DIRECTORY}lv2/serd/src/serdi.c -${LIB_SRC_DIRECTORY}lv2/serd/src/serdnode.c -${LIB_SRC_DIRECTORY}lv2/serd/src/string.c -${LIB_SRC_DIRECTORY}lv2/serd/src/uri.c -${LIB_SRC_DIRECTORY}lv2/serd/src/writer.c -#${LIB_SRC_DIRECTORY}lv2/serd/tests/serd_test.c -${LIB_SRC_DIRECTORY}lv2/sord/src/sord.c -#${LIB_SRC_DIRECTORY}lv2/sord/src/sordi.c -#${LIB_SRC_DIRECTORY}lv2/sord/src/sord_test.c -#${LIB_SRC_DIRECTORY}lv2/sord/src/sord_validate.c -${LIB_SRC_DIRECTORY}lv2/sord/src/syntax.c -${LIB_SRC_DIRECTORY}lv2/sord/src/zix/digest.c -${LIB_SRC_DIRECTORY}lv2/sord/src/zix/hash.c -${LIB_SRC_DIRECTORY}lv2/sord/src/zix/tree.c -${LIB_SRC_DIRECTORY}lv2/sratom/src/sratom.c -#${LIB_SRC_DIRECTORY}lv2/sratom/tests/sratom_test.c -${LIB_SRC_DIRECTORY}lv2/suil/src/host.c -#${LIB_SRC_DIRECTORY}lv2/suil/src/instance.c -${LIB_SRC_DIRECTORY}lv2/suil/src/suil_instance.c -#${LIB_SRC_DIRECTORY}lv2/suil/src/x11_in_gtk2.c +list( APPEND SOURCES + PRIVATE + # lilv + + ${TARGET_ROOT}/lilv/src/collections.c + ${TARGET_ROOT}/lilv/src/instance.c + ${TARGET_ROOT}/lilv/src/lib.c + ${TARGET_ROOT}/lilv/src/node.c + ${TARGET_ROOT}/lilv/src/plugin.c + ${TARGET_ROOT}/lilv/src/pluginclass.c + ${TARGET_ROOT}/lilv/src/port.c + ${TARGET_ROOT}/lilv/src/query.c + ${TARGET_ROOT}/lilv/src/scalepoint.c + ${TARGET_ROOT}/lilv/src/state.c + ${TARGET_ROOT}/lilv/src/ui.c + ${TARGET_ROOT}/lilv/src/util.c + ${TARGET_ROOT}/lilv/src/world.c + ${TARGET_ROOT}/lilv/src/zix/tree.c + + # serd + + ${TARGET_ROOT}/serd/src/byte_source.c + ${TARGET_ROOT}/serd/src/env.c + ${TARGET_ROOT}/serd/src/n3.c + ${TARGET_ROOT}/serd/src/node.c + ${TARGET_ROOT}/serd/src/reader.c + ${TARGET_ROOT}/serd/src/serdi.c + ${TARGET_ROOT}/serd/src/string.c + ${TARGET_ROOT}/serd/src/uri.c + ${TARGET_ROOT}/serd/src/writer.c + + # sord + + ${TARGET_ROOT}/sord/src/sord.c + ${TARGET_ROOT}/sord/src/sord_validate.c + ${TARGET_ROOT}/sord/src/sordi.c + ${TARGET_ROOT}/sord/src/syntax.c + ${TARGET_ROOT}/sord/src/zix/btree.c + ${TARGET_ROOT}/sord/src/zix/digest.c + ${TARGET_ROOT}/sord/src/zix/hash.c + + # sratom + + ${TARGET_ROOT}/sratom/src/sratom.c + + # suil + + ${TARGET_ROOT}/suil/src/host.c + ${TARGET_ROOT}/suil/src/instance.c ) -# This defines the #define on both Windows and Linux. -add_definitions( --D_LIB --Dinline=__inline # Not needed in non CMake version. --DHAVE_FMAX --DLILV_INTERNAL --D_DEBUG - ) -if( NOT MSVC OR MSVC_VERSION LESS 1900 ) - add_definitions(-Dsnprintf=_snprintf) + +list( APPEND INCLUDES + PRIVATE + ${_PRVDIR} + ${TARGET_ROOT}/lilv/src + ${TARGET_ROOT}/lilv/src/zix + ${TARGET_ROOT}/serd/src + ${TARGET_ROOT}/sord/src + ${TARGET_ROOT}/sord/src/zix + ${TARGET_ROOT}/sratom/src + ${TARGET_ROOT}/suil/src + PUBLIC + ${_PUBDIR} + ${TARGET_ROOT}/lv2 + ${TARGET_ROOT}/lilv + ${TARGET_ROOT}/serd + ${TARGET_ROOT}/sord + ${TARGET_ROOT}/sratom + ${TARGET_ROOT}/suil +) + +list( APPEND DEFINES + PRIVATE + SUIL_INTERNAL +) + +list( APPEND HEADERS + + # lv2 + + ${TARGET_ROOT}/lv2/lv2/atom/atom.h + ${TARGET_ROOT}/lv2/lv2/atom/forge.h + ${TARGET_ROOT}/lv2/lv2/atom/util.h + ${TARGET_ROOT}/lv2/lv2/buf-size/buf-size.h + ${TARGET_ROOT}/lv2/lv2/core/attributes.h + ${TARGET_ROOT}/lv2/lv2/core/lv2.h + ${TARGET_ROOT}/lv2/lv2/core/lv2_util.h + ${TARGET_ROOT}/lv2/lv2/data-access/data-access.h + ${TARGET_ROOT}/lv2/lv2/dynmanifest/dynmanifest.h + ${TARGET_ROOT}/lv2/lv2/event/event-helpers.h + ${TARGET_ROOT}/lv2/lv2/event/event.h + ${TARGET_ROOT}/lv2/lv2/instance-access/instance-access.h + ${TARGET_ROOT}/lv2/lv2/log/log.h + ${TARGET_ROOT}/lv2/lv2/log/logger.h + ${TARGET_ROOT}/lv2/lv2/midi/midi.h + ${TARGET_ROOT}/lv2/lv2/morph/morph.h + ${TARGET_ROOT}/lv2/lv2/options/options.h + ${TARGET_ROOT}/lv2/lv2/parameters/parameters.h + ${TARGET_ROOT}/lv2/lv2/patch/patch.h + ${TARGET_ROOT}/lv2/lv2/port-groups/port-groups.h + ${TARGET_ROOT}/lv2/lv2/port-props/port-props.h + ${TARGET_ROOT}/lv2/lv2/presets/presets.h + ${TARGET_ROOT}/lv2/lv2/resize-port/resize-port.h + ${TARGET_ROOT}/lv2/lv2/state/state.h + ${TARGET_ROOT}/lv2/lv2/time/time.h + ${TARGET_ROOT}/lv2/lv2/ui/ui.h + ${TARGET_ROOT}/lv2/lv2/units/units.h + ${TARGET_ROOT}/lv2/lv2/uri-map/uri-map.h + ${TARGET_ROOT}/lv2/lv2/urid/urid.h + ${TARGET_ROOT}/lv2/lv2/worker/worker.h +) + +set( src "${TARGET_ROOT}/lv2" ) +set( dst "${_PUBDIR}" ) +set( ns "${dst}/lv2/lv2plug.in/ns" ) +set( stamp "${_INTDIR}/.stamp.lv2" ) + +execute_process( + COMMAND + "${CMAKE_COMMAND}" -E make_directory "${ns}" +) + +execute_process( + COMMAND + "${CMAKE_COMMAND}" -E create_symlink "${src}/lv2/core/lv2.h" "${dst}/lv2.h" +) + +execute_process( + COMMAND + "${CMAKE_COMMAND}" -E create_symlink "${src}/lv2" "${ns}/ext" +) + +execute_process( + COMMAND + "${CMAKE_COMMAND}" -E create_symlink "${src}/lv2" "${ns}/extensions" +) + +execute_process( + COMMAND + "${CMAKE_COMMAND}" -E create_symlink "${src}/lv2/core" "${ns}/lv2core" +) + +set( LILV_VERSION "0.24.4" ) +set( SERD_VERSION "0.30.2" ) +set( SORD_VERSION "0.16.4" ) +set( SRATOM_VERSION "0.6.4" ) +set( SUIL_VERSION "0.10.6" ) + +set( HAVE_LV2 1 ) +set( HAVE_SERD 1 ) +set( HAVE_SORD 1 ) +set( HAVE_SRATOM 1 ) + +macro( bld name packages define sources ) + set( libs ) + set( missing ) + foreach( pkg ${packages} ) + if( NOT "${${pkg}_FOUND}" ) + set( missing ON ) + break() + endif() + + list( APPEND libs PRIVATE + "PkgConfig::${pkg}" + ) + endforeach() + + if( NOT missing ) + + list( APPEND DEFINES +# PUBLIC + PRIVATE + ${define} + ) + + add_library( ${name} SHARED "${sources}" ) + set_target_properties( ${name} PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${_MODDIR} ) + add_dependencies( ${TARGET} ${name} ) + organize_source( "${TARGET_ROOT}" "" "${sources}" ) + target_compile_definitions( ${name} PRIVATE SUIL_SHARED ${DEFINES} ) + target_include_directories( ${name} PRIVATE ${INCLUDES} ) + target_link_libraries( ${name} PRIVATE ${libs} ) + endif() +endmacro() + +if( WIN32 ) + set( LILV_PATH_SEP ";" ) + set( LILV_DIR_SEP "\\\\" ) + set( LILV_DEFAULT_LV2_PATH "%APPDATA%\\LV2;%COMMONPROGRAMFILES%\\LV2" ) + + set( SUIL_MODULE_DIR "C:\\Windows\\System32" ) + set( SUIL_DIR_SEP "\\\\" ) + set( SUIL_GTK2_LIB_NAME "libgtk-x11-2.0.so.0" ) + set( SUIL_GTK3_LIB_NAME "libgtk-x11-3.0.so.0" ) + set( SUIL_MODULE_PREFIX "" ) + set( SUIL_MODULE_EXT ".dll" ) +elseif( APPLE ) + set( LILV_PATH_SEP ":" ) + set( LILV_DIR_SEP "/" ) + set( LILV_DEFAULT_LV2_PATH "~/Library/Audio/Plug-Ins/LV2:~/.lv2:/usr/local/lib/lv2:/usr/lib/lv2:/Library/Audio/Plug-Ins/LV2" ) + + set( SUIL_MODULE_DIR "/usr/local/lib/suil-0" ) + set( SUIL_DIR_SEP "/" ) + set( SUIL_GTK2_LIB_NAME "libgtk-x11-2.0.so.0" ) + set( SUIL_GTK3_LIB_NAME "libgtk-x11-3.0.so.0" ) + set( SUIL_MODULE_PREFIX "lib" ) + set( SUIL_MODULE_EXT ".dylib" ) +elseif( UNIX ) + set( LILV_PATH_SEP ":" ) + set( LILV_DIR_SEP "/" ) + set( LILV_DEFAULT_LV2_PATH "~/.lv2:/usr/lib/lv2:/usr/local/lib/lv2" ) + + set( SUIL_MODULE_DIR "/usr/local/lib/suil-0" ) + set( SUIL_DIR_SEP "/" ) + set( SUIL_GTK2_LIB_NAME "libgtk-x11-2.0.so.0" ) + set( SUIL_GTK3_LIB_NAME "libgtk-x11-3.0.so.0" ) + set( SUIL_MODULE_PREFIX "lib" ) + set( SUIL_MODULE_EXT ".so" ) + + pkg_check_modules( X11 IMPORTED_TARGET "x11" ) + pkg_check_modules( GTK2 IMPORTED_TARGET "gtk+-2.0" ) + pkg_check_modules( GTK3 IMPORTED_TARGET "gtk+-3.0" ) + pkg_check_modules( GTK2X11 IMPORTED_TARGET "gtk+-x11-2.0" ) + pkg_check_modules( GTK3X11 IMPORTED_TARGET "gtk+-x11-3.0" ) + pkg_check_modules( QT4 IMPORTED_TARGET "QtGui >= 4.4.0" ) + pkg_check_modules( QT5 IMPORTED_TARGET "Qt5Widgets >= 5.1.0" ) + + bld( "suil_x11" + "X11" + "SUIL_WITH_X11" + "${TARGET_ROOT}/suil/src/x11.c" ) + bld( "suil_x11_in_gtk2" + "X11;GTK2X11" + "SUIL_WITH_X11_IN_GTK2" + "${TARGET_ROOT}/suil/src/x11_in_gtk2.c" ) + bld( "suil_x11_in_gtk3" + "X11;GTK3X11" + "SUIL_WITH_X11_IN_GTK3" + "${TARGET_ROOT}/suil/src/x11_in_gtk3.c" ) + bld( "suil_qt4_in_gtk2" + "QT4;GTK2" + "SUIL_WITH_QT4_IN_GTK2" + "${TARGET_ROOT}/suil/src/qt4_in_gtk2.cpp" ) + bld( "suil_qt5_in_gtk2" + "QT5;GTK2" + "SUIL_WITH_QT5_IN_GTK2" + "${TARGET_ROOT}/suil/src/qt5_in_gtk.cpp" ) + bld( "suil_qt5_in_gtk3" + "QT5;GTK3" + "SUIL_WITH_QT5_IN_GTK3" + "${TARGET_ROOT}/suil/src/qt5_in_gtk.cpp" ) endif() -add_library( ${TARGET} STATIC ${SOURCES}) -add_compile_options(/TP) -target_include_directories( ${TARGET} PRIVATE -${TARGET_SOURCE}/windows -${TARGET_SOURCE}/sord/src -${TARGET_SOURCE}/lilv -${TARGET_SOURCE}/lv2 -${TARGET_SOURCE}/serd -${TARGET_SOURCE}/sord -${TARGET_SOURCE}/sratom -${TARGET_SOURCE}/suil -) -target_link_libraries( ${TARGET} ) +configure_file( lilv_config.h.in "${_PRVDIR}/lilv_config.h" ) +configure_file( serd_config.h.in "${_PRVDIR}/serd_config.h" ) +configure_file( sord_config.h.in "${_PRVDIR}/sord_config.h" ) +configure_file( sratom_config.h.in "${_PRVDIR}/sratom_config.h" ) +configure_file( suil_config.h.in "${_PRVDIR}/suil_config.h" ) + +organize_source( "${TARGET_ROOT}" "" "${SOURCES} ${HEADERS}" ) +target_sources( ${TARGET} PRIVATE ${SOURCES} ${HEADERS} )# ${stamp} ) +target_compile_definitions( ${TARGET} PRIVATE ${DEFINES} ) +target_compile_features( ${TARGET} PRIVATE ${FEATURES} ) +target_compile_options( ${TARGET} PRIVATE ${OPTIONS} ) +target_include_directories( ${TARGET} PRIVATE ${INCLUDES} ) +target_link_libraries( ${TARGET} PRIVATE ${LIBRARIES} ) + diff --git a/cmake-proxies/lv2/lilv_config.h.in b/cmake-proxies/lv2/lilv_config.h.in new file mode 100644 index 000000000..1354e1331 --- /dev/null +++ b/cmake-proxies/lv2/lilv_config.h.in @@ -0,0 +1,24 @@ +/* WARNING! All changes made to this file will be lost! */ + +#ifndef W_LILV_CONFIG_H_WAF +#define W_LILV_CONFIG_H_WAF + +#cmakedefine LILV_CXX 1 +#define PYTHONDIR "@PYTHONDIR@" +#define PYTHONARCHDIR "@PYTHONARCHDIR@" +#define LILV_VERSION "@LILV_VERSION@" +#cmakedefine HAVE_LV2 1 +#cmakedefine HAVE_SERD 1 +#cmakedefine HAVE_SORD 1 +#cmakedefine HAVE_SRATOM 1 +#cmakedefine HAVE_SNDFILE 1 +#cmakedefine HAVE_LSTAT 1 +#cmakedefine HAVE_FLOCK 1 +#cmakedefine HAVE_FILENO 1 +#cmakedefine HAVE_CLOCK_GETTIME 1 +#cmakedefine HAVE_LIBDL 1 +#define LILV_PATH_SEP "@LILV_PATH_SEP@" +#define LILV_DIR_SEP "@LILV_DIR_SEP@" +#define LILV_DEFAULT_LV2_PATH "@LILV_DEFAULT_LV2_PATH@" + +#endif /* W_LILV_CONFIG_H_WAF */ diff --git a/cmake-proxies/lv2/serd_config.h.in b/cmake-proxies/lv2/serd_config.h.in new file mode 100644 index 000000000..0c1130112 --- /dev/null +++ b/cmake-proxies/lv2/serd_config.h.in @@ -0,0 +1,12 @@ +/* WARNING! All changes made to this file will be lost! */ + +#ifndef W_SERD_CONFIG_H_WAF +#define W_SERD_CONFIG_H_WAF + +#cmakedefine HAVE_GCOV 1 +#define SERD_VERSION "@SERD_VERSION@" +#cmakedefine HAVE_FILENO 1 +#cmakedefine HAVE_POSIX_FADVISE 1 +#cmakedefine HAVE_POSIX_MEMALIGN 1 + +#endif /* W_SERD_CONFIG_H_WAF */ diff --git a/cmake-proxies/lv2/sord_config.h.in b/cmake-proxies/lv2/sord_config.h.in new file mode 100644 index 000000000..189da9077 --- /dev/null +++ b/cmake-proxies/lv2/sord_config.h.in @@ -0,0 +1,11 @@ +/* WARNING! All changes made to this file will be lost! */ + +#ifndef W_SORD_CONFIG_H_WAF +#define W_SORD_CONFIG_H_WAF + +#cmakedefine HAVE_GCOV 1 +#define SORD_VERSION "@SORD_VERSION@" +#cmakedefine HAVE_SERD 1 +#cmakedefine HAVE_PCRE 1 + +#endif /* W_SORD_CONFIG_H_WAF */ diff --git a/cmake-proxies/lv2/sratom_config.h.in b/cmake-proxies/lv2/sratom_config.h.in new file mode 100644 index 000000000..a75a482cd --- /dev/null +++ b/cmake-proxies/lv2/sratom_config.h.in @@ -0,0 +1,11 @@ +/* WARNING! All changes made to this file will be lost! */ + +#ifndef W_SRATOM_CONFIG_H_WAF +#define W_SRATOM_CONFIG_H_WAF + +#cmakedefine HAVE_LV2 1 +#cmakedefine HAVE_SERD 1 +#cmakedefine HAVE_SORD 1 +#define SRATOM_VERSION "@SRATOM_VERSION@" + +#endif /* W_SRATOM_CONFIG_H_WAF */ diff --git a/cmake-proxies/lv2/suil_config.h.in b/cmake-proxies/lv2/suil_config.h.in new file mode 100644 index 000000000..4e9dcd0ec --- /dev/null +++ b/cmake-proxies/lv2/suil_config.h.in @@ -0,0 +1,34 @@ +/* WARNING! All changes made to this file will be lost! */ + +#ifndef W_SUIL_CONFIG_H_WAF +#define W_SUIL_CONFIG_H_WAF + +#define SUIL_VERSION "@SUIL_VERSION@" +#cmakedefine HAVE_LV2 1 +#cmakedefine HAVE_X11 1 +#cmakedefine HAVE_GTK2 1 +#cmakedefine HAVE_GTK2_X11 1 +#cmakedefine HAVE_GTK3 1 +#cmakedefine HAVE_GTK3_X11 1 +#cmakedefine HAVE_QT4 1 +#cmakedefine HAVE_QT5 1 +#cmakedefine HAVE_QMACCOCOAVIEWCONTAINER 1 +#cmakedefine HAVE_LIBDL 1 +#define SUIL_MODULE_DIR "@SUIL_MODULE_DIR@" +#define SUIL_DIR_SEP "@SUIL_DIR_SEP@" +#define SUIL_GTK2_LIB_NAME "@SUIL_GTK2_LIB_NAME@" +#define SUIL_GTK3_LIB_NAME "@SUIL_GTK3_LIB_NAME@" +#define SUIL_MODULE_PREFIX "@SUIL_MODULE_PREFIX@" +#define SUIL_MODULE_EXT "@SUIL_MODULE_EXT@" +#cmakedefine SUIL_WITH_QT4_IN_GTK2 1 +#cmakedefine SUIL_WITH_GTK2_IN_QT4 1 +#cmakedefine SUIL_WITH_GTK2_IN_QT5 1 +#cmakedefine SUIL_WITH_QT5_IN_GTK2 1 +#cmakedefine SUIL_WITH_X11_IN_GTK2 1 +#cmakedefine SUIL_WITH_X11_IN_GTK3 1 +#cmakedefine SUIL_WITH_QT5_IN_GTK3 1 +#cmakedefine SUIL_WITH_X11_IN_QT4 1 +#cmakedefine SUIL_WITH_X11_IN_QT5 1 +#cmakedefine SUIL_WITH_X11 1 + +#endif /* W_SUIL_CONFIG_H_WAF */ diff --git a/cmake-proxies/portaudio-v19/CMakeLists.txt b/cmake-proxies/portaudio-v19/CMakeLists.txt index 02cbace8a..73385ab07 100644 --- a/cmake-proxies/portaudio-v19/CMakeLists.txt +++ b/cmake-proxies/portaudio-v19/CMakeLists.txt @@ -1,55 +1,149 @@ -cmake_minimum_required(VERSION 3.13) -set(TARGET portaudio-v19) -set(TARGET_SOURCE ${LIB_SRC_DIRECTORY}${TARGET}) +add_library( ${TARGET} STATIC ) -add_subdirectory("${TARGET_SOURCE}" "${CMAKE_CURRENT_BINARY_DIR}/portaudio" EXCLUDE_FROM_ALL) -target_include_directories(portaudio_static INTERFACE "${TARGET_SOURCE}/include") -set_target_properties(portaudio_static PROPERTIES OSX_ARCHITECTURES "") +list( APPEND SOURCES + PRIVATE + ${TARGET_ROOT}/src/common/pa_allocation.c + ${TARGET_ROOT}/src/common/pa_converters.c + ${TARGET_ROOT}/src/common/pa_cpuload.c + ${TARGET_ROOT}/src/common/pa_debugprint.c + ${TARGET_ROOT}/src/common/pa_dither.c + ${TARGET_ROOT}/src/common/pa_dynload.c + ${TARGET_ROOT}/src/common/pa_front.c + ${TARGET_ROOT}/src/common/pa_process.c + ${TARGET_ROOT}/src/common/pa_ringbuffer.c + ${TARGET_ROOT}/src/common/pa_stream.c + ${TARGET_ROOT}/src/common/pa_trace.c +) -if(NOT UNIX) - return() +list( APPEND INCLUDES + PRIVATE + ${TARGET_ROOT}/src/common + PUBLIC + ${TARGET_ROOT}/include +) + +if( WIN32 ) + list( APPEND DEFINES + PUBLIC + PA_USE_DS=1 + PA_USE_WASAPI=1 + PA_USE_WMME=1 + ) + + list( APPEND SOURCES + PRIVATE + ${TARGET_ROOT}/src/hostapi/dsound/pa_win_ds.c + ${TARGET_ROOT}/src/hostapi/dsound/pa_win_ds_dynlink.c + ${TARGET_ROOT}/src/hostapi/wasapi/pa_win_wasapi.c + ${TARGET_ROOT}/src/hostapi/wmme/pa_win_wmme.c + ${TARGET_ROOT}/src/os/win/pa_win_coinitialize.c + ${TARGET_ROOT}/src/os/win/pa_win_hostapis.c + ${TARGET_ROOT}/src/os/win/pa_win_util.c + ${TARGET_ROOT}/src/os/win/pa_win_waveformat.c + ${TARGET_ROOT}/src/os/win/pa_win_wdmks_utils.c + ${TARGET_ROOT}/src/os/win/pa_x86_plain_converters.c + ) + + list( APPEND INCLUDES + PRIVATE + ${TARGET_ROOT}/src/hostapi/dsound + ${TARGET_ROOT}/src/os/win + ) + +elseif( APPLE ) + list( APPEND DEFINES + PUBLIC + PA_USE_COREAUDIO=1 + ) + + list( APPEND SOURCES + PRIVATE + ${TARGET_ROOT}/src/hostapi/coreaudio/pa_mac_core.c + ${TARGET_ROOT}/src/hostapi/coreaudio/pa_mac_core_blocking.c + ${TARGET_ROOT}/src/hostapi/coreaudio/pa_mac_core_utilities.c + ${TARGET_ROOT}/src/os/unix/pa_unix_hostapis.c + ${TARGET_ROOT}/src/os/unix/pa_unix_util.c + ) + + list( APPEND INCLUDES + PRIVATE + ${TARGET_ROOT}/src/hostapi/coreaudio + ${TARGET_ROOT}/src/os/unix + ) + + list( APPEND LIBRARIES + INTERFACE + "-framework CoreAudio" + ) +elseif( UNIX ) + find_package(ALSA) + if( ALSA_FOUND ) + list( APPEND DEFINES + PUBLIC + PA_USE_ALSA=1 + ) + + list( APPEND SOURCES + PRIVATE + ${TARGET_ROOT}/src/hostapi/alsa/pa_linux_alsa.c + ) + + list( APPEND INCLUDES + PRIVATE + ${ALSA_INCLUDE_DIRS} + ) + + list( APPEND LIBRARIES + INTERFACE + ${ALSA_LIBRARIES} + ) + endif() + + list( APPEND SOURCES + PRIVATE + ${TARGET_ROOT}/src/os/unix/pa_unix_hostapis.c + ${TARGET_ROOT}/src/os/unix/pa_unix_util.c + ) + + list( APPEND INCLUDES + PRIVATE + ${TARGET_ROOT}/src/os/unix + ) endif() -include(CheckIncludeFile) +set( CMAKE_MODULE_PATH ${TARGET_ROOT}/cmake_support ) -target_include_directories(portaudio_static PRIVATE - "${TARGET_SOURCE}/src/os/unix/") -target_sources(portaudio_static PRIVATE - "${TARGET_SOURCE}/src/os/unix/pa_unix_hostapis.c" - "${TARGET_SOURCE}/src/os/unix/pa_unix_util.c") +find_package(Jack) +if( JACK_FOUND ) + list( APPEND DEFINES + PUBLIC + PA_USE_JACK=1 + ) -if(APPLE) - target_compile_definitions(portaudio_static PUBLIC PA_USE_COREAUDIO=1) - target_sources(portaudio_static PRIVATE - "${TARGET_SOURCE}/src/hostapi/coreaudio/pa_mac_core.c" - "${TARGET_SOURCE}/src/hostapi/coreaudio/pa_mac_core_utilities.c" - "${TARGET_SOURCE}/src/hostapi/coreaudio/pa_mac_core_blocking.c" - "${TARGET_SOURCE}/src/common/pa_ringbuffer.c") -else() - option(PA_WITH_ALSA "Enable support for ALSA" OFF) - if(PA_WITH_ALSA) - find_package(ALSA REQUIRED) - target_compile_definitions(portaudio_static PUBLIC PA_USE_ALSA=1) - target_sources(portaudio_static PRIVATE - "${TARGET_SOURCE}/src/hostapi/alsa/pa_linux_alsa.c") - target_link_libraries(portaudio_static PUBLIC ALSA::ALSA) - endif() + list( APPEND SOURCES + PRIVATE + ${TARGET_ROOT}/src/hostapi/jack/pa_jack.c + ${TARGET_ROOT}/src/hostapi/jack/pa_jack_dynload.c + ) - option(PA_WITH_OSS "Enable support for OSS" OFF) - if(PA_WITH_OSS) - check_include_file(sys/soundcard.h HAVE_SYS_SOUNDCARD_H) - check_include_file(linux/soundcard.h HAVE_LINUX_SOUNDCARD_H) - check_include_file(machine/soundcard.h HAVE_MACHINE_SOUNDCARD_H) - if(NOT (HAVE_SYS_SOUNDCARD_H OR HAVE_LINUX_SOUNDCARD_H OR HAVE_MACHINE_SOUNDCARD_H)) - message(FATAL_ERROR "Couldn't find OSS") - endif() - target_compile_definitions(portaudio_static PUBLIC - PA_USE_OSS=1 - $<$:HAVE_SYS_SOUNDCARD_H> - $<$:HAVE_LINUX_SOUNDCARD_H> - $<$:HAVE_MACHINE_SOUNDCARD_H>) - target_sources(portaudio_static PRIVATE - "${TARGET_SOURCE}/src/hostapi/oss/pa_unix_oss.c") - endif() + list( APPEND INCLUDES + PRIVATE + ${TARGET_ROOT}/src/hostapi/jack + ${JACK_INCLUDE_DIRS} + ) + + list( APPEND LIBRARIES + INTERFACE + ${JACK_LIBRARIES} + ) endif() + +organize_source( "${TARGET_ROOT}" "" "${SOURCES}" ) +target_sources( ${TARGET} PRIVATE ${SOURCES} ) +target_compile_definitions( ${TARGET} PRIVATE ${DEFINES} ) +target_compile_features( ${TARGET} PRIVATE ${FEATURES} ) +target_compile_options( ${TARGET} PRIVATE ${OPTIONS} ) +target_include_directories( ${TARGET} PRIVATE ${INCLUDES} ) +target_link_libraries( ${TARGET} PRIVATE ${LIBRARIES} ) + diff --git a/cmake-proxies/portmidi/CMakeLists.txt b/cmake-proxies/portmidi/CMakeLists.txt index 521dca457..2bd3d7cb6 100644 --- a/cmake-proxies/portmidi/CMakeLists.txt +++ b/cmake-proxies/portmidi/CMakeLists.txt @@ -1,10 +1,53 @@ -cmake_minimum_required(VERSION 2.8.11) -set(TARGET portmidi) -set(TARGET_SOURCE ${LIB_SRC_DIRECTORY}${TARGET}) +add_library( ${TARGET} STATIC ) + +list( APPEND SOURCES + PRIVATE + ${TARGET_ROOT}/pm_common/portmidi.c + ${TARGET_ROOT}/pm_common/pmutil.c + ${TARGET_ROOT}/porttime/porttime.c + $<$:${TARGET_ROOT}/pm_win/pmwin.c> + $<$:${TARGET_ROOT}/pm_win/pmwinmm.c> + $<$:${TARGET_ROOT}/porttime/ptwinmm.c> + $<$:${TARGET_ROOT}/pm_mac/finddefault.c> + $<$:${TARGET_ROOT}/pm_mac/pmmac.c> + $<$:${TARGET_ROOT}/pm_mac/pmmacosxcm.c> + $<$:${TARGET_ROOT}/pm_mac/readbinaryplist.c> + $<$:${TARGET_ROOT}/porttime/ptmacosx_mach.c> + $<$:${TARGET_ROOT}/pm_linux/finddefault.c> + $<$:${TARGET_ROOT}/pm_linux/pmlinux.c> + $<$:${TARGET_ROOT}/pm_linux/pmlinuxalsa.c> + $<$:${TARGET_ROOT}/porttime/ptlinux.c> +) + +list( APPEND INCLUDES + PRIVATE + ${TARGET_ROOT}/pm_common + ${TARGET_ROOT}/porttime + $<$:${TARGET_ROOT}/pm_win> + $<$:${TARGET_ROOT}/pm_linux> + $<$:${TARGET_ROOT}/pm_win> +) + +list( APPEND DEFINES + PRIVATE + $<$:PMALSA=1> +) + +list( APPEND OPTIONS + PRIVATE + $<$: + -Wno-pointer-to-int-cast + -Wno-int-to-pointer-cast + -Wno-implicit-function-declaration + > +) + +organize_source( "${TARGET_ROOT}" "" "${SOURCES}" ) +target_sources( ${TARGET} PRIVATE ${SOURCES} ) +target_compile_definitions( ${TARGET} PRIVATE ${DEFINES} ) +target_compile_features( ${TARGET} PRIVATE ${FEATURES} ) +target_compile_options( ${TARGET} PRIVATE ${OPTIONS} ) +target_include_directories( ${TARGET} PRIVATE ${INCLUDES} ) +target_link_libraries( ${TARGET} PRIVATE ${LIBRARIES} ) -set(CMAKE_CACHEFILE_DIR ${CMAKE_BINARY_DIR}) -add_subdirectory( "${TARGET_SOURCE}" "${CMAKE_CURRENT_BINARY_DIR}/${TARGET}" EXCLUDE_FROM_ALL ) -set_target_properties(portmidi-static PROPERTIES - OSX_ARCHITECTURES "" - OUTPUT_NAME ${TARGET}) diff --git a/cmake-proxies/portmixer/CMakeLists.txt b/cmake-proxies/portmixer/CMakeLists.txt index 6dad37221..1308669f8 100644 --- a/cmake-proxies/portmixer/CMakeLists.txt +++ b/cmake-proxies/portmixer/CMakeLists.txt @@ -1,32 +1,48 @@ -#directory cmake-proxies/portmixer -set(TARGET portmixer) -set(TARGET_SOURCE ${LIB_SRC_DIRECTORY}${TARGET}) -project(${TARGET}) -include(CheckIncludeFiles) +add_library( ${TARGET} STATIC ) -get_target_property(PA_DEFINITIONS portaudio_static INTERFACE_COMPILE_DEFINITIONS) +get_target_property( PA_DEFS portaudio-v19 COMPILE_DEFINITIONS ) +string( REPLACE ";" " " PA_DEFS "${PA_DEFS}" ) -add_library(${TARGET} STATIC - "${TARGET_SOURCE}/src/px_mixer.c" - "$<$:${TARGET_SOURCE}/src/px_win_common.c>" - "$<$:${TARGET_SOURCE}/src/px_win_ds.c>" - "$<$:${TARGET_SOURCE}/src/px_win_endpoint.c>" - "$<$:${TARGET_SOURCE}/src/px_win_wasapi.c>" - "$<$:${TARGET_SOURCE}/src/px_win_wmme.c>" - "$<$:${TARGET_SOURCE}/src/px_linux_alsa.c>" - "$<$:${TARGET_SOURCE}/src/px_unix_oss.c>" - "$<$:${TARGET_SOURCE}/src/px_mac_coreaudio.c>") +list( APPEND SOURCES + PRIVATE + ${TARGET_ROOT}/src/px_mixer.c + $<$:${TARGET_ROOT}/src/px_win_common.c> + $<$:${TARGET_ROOT}/src/px_win_ds.c> + $<$:${TARGET_ROOT}/src/px_win_wasapi.c> + $<$:${TARGET_ROOT}/src/px_win_wmme.c> + $<$:${TARGET_ROOT}/src/px_mac_coreaudio.c> + $<$:${TARGET_ROOT}/src/px_linux_alsa.c> + $<$:${TARGET_ROOT}/src/px_unix_oss.c> +) +list( APPEND INCLUDES + PRIVATE + ${TARGET_ROOT}/src + PUBLIC + ${TARGET_ROOT}/include +) -target_compile_definitions(${TARGET} PRIVATE -# $<$:PX_USE_WIN_DSOUND> - $<$:PX_USE_WIN_MME> - $<$:PX_USE_WIN_WASAPI> - $<$:PX_USE_LINUX_ALSA> - $<$:PX_USE_UNIX_OSS> - $<$:PX_USE_MAC_COREAUDIO>) +list( APPEND DEFINES + PRIVATE + $<$:PX_USE_WIN_DSOUND=1> + $<$:PX_USE_WIN_WASAPI=1> + $<$:PX_USE_WIN_MME=1> + $<$:PX_USE_MAC_COREAUDIO=1> + $<$:PX_USE_LINUX_ALSA=1> + $<$:PX_USE_UNIX_OSS=1> +) + +list( APPEND LIBRARIES + PRIVATE + portaudio-v19 +) + +organize_source( "${TARGET_ROOT}" "" "${SOURCES}" ) +target_sources( ${TARGET} PRIVATE ${SOURCES} ) +target_compile_definitions( ${TARGET} PRIVATE ${DEFINES} ) +target_compile_features( ${TARGET} PRIVATE ${FEATURES} ) +target_compile_options( ${TARGET} PRIVATE ${OPTIONS} ) +target_include_directories( ${TARGET} PRIVATE ${INCLUDES} ) +target_link_libraries( ${TARGET} PRIVATE ${LIBRARIES} ) -target_include_directories(${TARGET} PUBLIC "${TARGET_SOURCE}/include") -target_link_libraries(${TARGET} PUBLIC portaudio_static) -set_target_properties(${TARGET} PROPERTIES OSX_ARCHITECTURES "") diff --git a/cmake-proxies/portsmf/CMakeLists.txt b/cmake-proxies/portsmf/CMakeLists.txt index 874d95b7a..cf6456fd0 100644 --- a/cmake-proxies/portsmf/CMakeLists.txt +++ b/cmake-proxies/portsmf/CMakeLists.txt @@ -1,31 +1,28 @@ -#directory cmake-proxies/portsmf -set( TARGET portsmf ) -set( TARGET_SOURCE ${LIB_SRC_DIRECTORY}${TARGET} ) -project( ${TARGET} ) -set( SOURCES -${LIB_SRC_DIRECTORY}portsmf/allegro.cpp -${LIB_SRC_DIRECTORY}portsmf/allegrord.cpp -${LIB_SRC_DIRECTORY}portsmf/allegroserial.cpp -${LIB_SRC_DIRECTORY}portsmf/allegrosmfrd.cpp -${LIB_SRC_DIRECTORY}portsmf/allegrosmfwr.cpp -${LIB_SRC_DIRECTORY}portsmf/allegrowr.cpp -${LIB_SRC_DIRECTORY}portsmf/mfmidi.cpp -${LIB_SRC_DIRECTORY}portsmf/strparse.cpp -#${LIB_SRC_DIRECTORY}portsmf/trace.cpp -#${LIB_SRC_DIRECTORY}portsmf/apps/allegroconvert.cpp -#${LIB_SRC_DIRECTORY}portsmf/apps/allegroplay.cpp -#${LIB_SRC_DIRECTORY}portsmf/apps/seq2midi.cpp -#${LIB_SRC_DIRECTORY}portsmf/portsmf_test/portsmf_test.cpp -) -# This defines the #define on both Windows and Linux. -add_definitions( --D_LIB - ) -add_library( ${TARGET} STATIC ${SOURCES}) - -target_include_directories( ${TARGET} PRIVATE +add_library( ${TARGET} STATIC ) +list( APPEND SOURCES + PRIVATE + ${TARGET_ROOT}/allegro.cpp + ${TARGET_ROOT}/allegrord.cpp + ${TARGET_ROOT}/allegroserial.cpp + ${TARGET_ROOT}/allegrosmfrd.cpp + ${TARGET_ROOT}/allegrosmfwr.cpp + ${TARGET_ROOT}/allegrowr.cpp + ${TARGET_ROOT}/mfmidi.cpp + ${TARGET_ROOT}/strparse.cpp ) -target_link_libraries( ${TARGET} ) \ No newline at end of file +list( APPEND INCLUDES + PUBLIC + ${TARGET_ROOT}/include +) + +organize_source( "${TARGET_ROOT}" "" "${SOURCES}" ) +target_sources( ${TARGET} PRIVATE ${SOURCES} ) +target_compile_definitions( ${TARGET} PRIVATE ${DEFINES} ) +target_compile_features( ${TARGET} PRIVATE ${FEATURES} ) +target_compile_options( ${TARGET} PRIVATE ${OPTIONS} ) +target_include_directories( ${TARGET} PRIVATE ${INCLUDES} ) +target_link_libraries( ${TARGET} PRIVATE ${LIBRARIES} ) + diff --git a/cmake-proxies/sbsms/CMakeLists.txt b/cmake-proxies/sbsms/CMakeLists.txt index effaf2cf7..f3dbe5662 100644 --- a/cmake-proxies/sbsms/CMakeLists.txt +++ b/cmake-proxies/sbsms/CMakeLists.txt @@ -1,31 +1,55 @@ -#directory cmake-proxies/sbsms -set( TARGET sbsms ) -set( TARGET_SOURCE ${LIB_SRC_DIRECTORY}${TARGET} ) -project( ${TARGET} ) -set( SOURCES -${LIB_SRC_DIRECTORY}sbsms/src/buffer.cpp -${LIB_SRC_DIRECTORY}sbsms/src/dBTable.cpp -${LIB_SRC_DIRECTORY}sbsms/src/fft.cpp -${LIB_SRC_DIRECTORY}sbsms/src/grain.cpp -${LIB_SRC_DIRECTORY}sbsms/src/resample.cpp -${LIB_SRC_DIRECTORY}sbsms/src/sbsms.cpp -${LIB_SRC_DIRECTORY}sbsms/src/slide.cpp -${LIB_SRC_DIRECTORY}sbsms/src/sms.cpp -${LIB_SRC_DIRECTORY}sbsms/src/subband.cpp -${LIB_SRC_DIRECTORY}sbsms/src/track.cpp -${LIB_SRC_DIRECTORY}sbsms/src/trackpoint.cpp -) -# This defines the #define on both Windows and Linux. -add_definitions( --D_LIB --DNDEBUG - ) -add_library( ${TARGET} STATIC ${SOURCES}) +add_library( ${TARGET} STATIC ) -target_include_directories( ${TARGET} PRIVATE -${TARGET_SOURCE}/include -${TARGET_SOURCE}/win +list( APPEND SOURCES + PRIVATE + ${TARGET_ROOT}/src/buffer.cpp + ${TARGET_ROOT}/src/dBTable.cpp + ${TARGET_ROOT}/src/fft.cpp + ${TARGET_ROOT}/src/grain.cpp + ${TARGET_ROOT}/src/resample.cpp + ${TARGET_ROOT}/src/sbsms.cpp + ${TARGET_ROOT}/src/slide.cpp + ${TARGET_ROOT}/src/sms.cpp + ${TARGET_ROOT}/src/subband.cpp + ${TARGET_ROOT}/src/track.cpp + ${TARGET_ROOT}/src/trackpoint.cpp ) -target_link_libraries( ${TARGET} ) \ No newline at end of file +list( APPEND INCLUDES + PRIVATE + ${CMAKE_CURRENT_BINARY_DIR}/private + PUBLIC + ${TARGET_ROOT}/include +) + +list( APPEND OPTIONS + PRIVATE + $<$:-Wno-enum-compare> + $<$:-Wno-enum-compare> +) + +find_package( Threads ) +if( Threads_FOUND AND CMAKE_USE_PTHREADS_INIT ) + set( MULTITHREADED 1 ) +endif() + +if( UNIX ) + check_cxx_compiler_flag( "-msse" ENABLE_SSE ) + if( ENABLE_SSE ) + list( APPEND OPTIONS + PRIVATE -msse + ) + endif() +endif() + +configure_file( config.h.in private/config.h ) + +organize_source( "${TARGET_ROOT}" "" "${SOURCES}" ) +target_sources( ${TARGET} PRIVATE ${SOURCES} ) +target_compile_definitions( ${TARGET} PRIVATE ${DEFINES} ) +target_compile_features( ${TARGET} PRIVATE ${FEATURES} ) +target_compile_options( ${TARGET} PRIVATE ${OPTIONS} ) +target_include_directories( ${TARGET} PRIVATE ${INCLUDES} ) +target_link_libraries( ${TARGET} PRIVATE ${LIBRARIES} ) + diff --git a/cmake-proxies/sbsms/config.h.in b/cmake-proxies/sbsms/config.h.in new file mode 100644 index 000000000..c8cbd4c9d --- /dev/null +++ b/cmake-proxies/sbsms/config.h.in @@ -0,0 +1,75 @@ +/* src/config.h.in. Generated from configure.ac by autoheader. */ + +/* Define to enable sse */ +#cmakedefine ENABLE_SSE 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_DLFCN_H 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_INTTYPES_H 1 + +/* Define if you have C99's lrint function. */ +#cmakedefine HAVE_LRINT 1 + +/* Define if you have C99's lrintf function. */ +#cmakedefine HAVE_LRINTF 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_MEMORY_H 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_STDINT_H 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_STDLIB_H 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_STRINGS_H 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_STRING_H 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_SYS_STAT_H 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_SYS_TYPES_H 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_UNISTD_H 1 + +/* Define to the sub-directory in which libtool stores uninstalled libraries. + */ +#cmakedefine LT_OBJDIR "@LT_OBJDIR@" + +/* Define to compile multithreaded sbsms */ +#cmakedefine MULTITHREADED 1 + +/* Name of package */ +#cmakedefine PACKAGE "@PACKAGE@" + +/* Define to the address where bug reports for this package should be sent. */ +#cmakedefine PACKAGE_BUGREPORT "@PACKAGE_BUGREPORT@" + +/* Define to the full name of this package. */ +#cmakedefine PACKAGE_NAME "@PACKAGE_NAME@" + +/* Define to the full name and version of this package. */ +#cmakedefine PACKAGE_STRING "@PACKAGE_STRING@" + +/* Define to the one symbol short name of this package. */ +#cmakedefine PACKAGE_TARNAME "@PACKAGE_TARNAME@" + +/* Define to the home page for this package. */ +#cmakedefine PACKAGE_URL "@PACKAGE_URL@" + +/* Define to the version of this package. */ +#cmakedefine PACKAGE_VERSION "@PACKAGE_VERSION@" + +/* Define to 1 if you have the ANSI C header files. */ +#cmakedefine STDC_HEADERS 1 + +/* Version number of package */ +#cmakedefine VERSION "@VERSION@" + diff --git a/cmake-proxies/soundtouch/CMakeLists.txt b/cmake-proxies/soundtouch/CMakeLists.txt index c0c489a7c..0b63e716b 100644 --- a/cmake-proxies/soundtouch/CMakeLists.txt +++ b/cmake-proxies/soundtouch/CMakeLists.txt @@ -1,35 +1,51 @@ -#directory cmake-proxies/soundtouch -set( TARGET soundtouch ) -set( TARGET_SOURCE ${LIB_SRC_DIRECTORY}${TARGET} ) -project( ${TARGET} ) -set( SOURCES +add_library( ${TARGET} STATIC ) -#${LIB_SRC_DIRECTORY}soundtouch/source/Android-lib/jni/soundtouch-jni.cpp -#${LIB_SRC_DIRECTORY}soundtouch/source/SoundStretch/main.cpp -#${LIB_SRC_DIRECTORY}soundtouch/source/SoundStretch/RunParameters.cpp -#${LIB_SRC_DIRECTORY}soundtouch/source/SoundStretch/WavFile.cpp -${LIB_SRC_DIRECTORY}soundtouch/source/SoundTouch/AAFilter.cpp -#${LIB_SRC_DIRECTORY}soundtouch/source/SoundTouch/BPMDetect.cpp -${LIB_SRC_DIRECTORY}soundtouch/source/SoundTouch/cpu_detect_x86.cpp -${LIB_SRC_DIRECTORY}soundtouch/source/SoundTouch/FIFOSampleBuffer.cpp -${LIB_SRC_DIRECTORY}soundtouch/source/SoundTouch/FIRFilter.cpp -${LIB_SRC_DIRECTORY}soundtouch/source/SoundTouch/mmx_optimized.cpp -#${LIB_SRC_DIRECTORY}soundtouch/source/SoundTouch/PeakFinder.cpp -${LIB_SRC_DIRECTORY}soundtouch/source/SoundTouch/RateTransposer.cpp -${LIB_SRC_DIRECTORY}soundtouch/source/SoundTouch/SoundTouch.cpp -${LIB_SRC_DIRECTORY}soundtouch/source/SoundTouch/sse_optimized.cpp -${LIB_SRC_DIRECTORY}soundtouch/source/SoundTouch/TDStretch.cpp -#${LIB_SRC_DIRECTORY}soundtouch/source/SoundTouchDLL/SoundTouchDLL.cpp -) -# This defines the #define on both Windows and Linux. -add_definitions( --D_LIB - ) -add_library( ${TARGET} STATIC ${SOURCES}) - -target_include_directories( ${TARGET} PRIVATE -${TARGET_SOURCE}/include +list( APPEND SOURCES + PRIVATE + ${TARGET_ROOT}/source/SoundTouch/AAFilter.cpp + ${TARGET_ROOT}/source/SoundTouch/FIFOSampleBuffer.cpp + ${TARGET_ROOT}/source/SoundTouch/FIRFilter.cpp + ${TARGET_ROOT}/source/SoundTouch/mmx_optimized.cpp + ${TARGET_ROOT}/source/SoundTouch/RateTransposer.cpp + ${TARGET_ROOT}/source/SoundTouch/SoundTouch.cpp + ${TARGET_ROOT}/source/SoundTouch/TDStretch.cpp + ${TARGET_ROOT}/source/SoundTouch/cpu_detect_x86.cpp + ${TARGET_ROOT}/source/SoundTouch/sse_optimized.cpp ) -target_link_libraries( ${TARGET} ) \ No newline at end of file +list( APPEND INCLUDES + PUBLIC + ${CMAKE_CURRENT_BINARY_DIR}/public + ${TARGET_ROOT}/include +) + + +if( UNIX ) + check_cxx_compiler_flag( "-mmmx" HAVE_MMX ) + if( HAVE_MMX ) + list( APPEND OPTIONS + PRIVATE + -mmmx + ) + endif() + + check_cxx_compiler_flag( "-msse" HAVE_SSE ) + if( HAVE_SSE ) + list( APPEND OPTIONS + PRIVATE + -msse + ) + endif() +endif() + +configure_file( soundtouch_config.h.in public/soundtouch_config.h ) + +organize_source( "${TARGET_ROOT}" "" "${SOURCES}" ) +target_sources( ${TARGET} PRIVATE ${SOURCES} ) +target_compile_definitions( ${TARGET} PRIVATE ${DEFINES} ) +target_compile_features( ${TARGET} PRIVATE ${FEATURES} ) +target_compile_options( ${TARGET} PRIVATE ${OPTIONS} ) +target_include_directories( ${TARGET} PRIVATE ${INCLUDES} ) +target_link_libraries( ${TARGET} PRIVATE ${LIBRARIES} ) + diff --git a/cmake-proxies/soundtouch/soundtouch_config.h.in b/cmake-proxies/soundtouch/soundtouch_config.h.in new file mode 100644 index 000000000..ea881d016 --- /dev/null +++ b/cmake-proxies/soundtouch/soundtouch_config.h.in @@ -0,0 +1,75 @@ +/* include/soundtouch_config.h.in. Generated from configure.ac by autoheader. */ + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_CPUID_H 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_DLFCN_H 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_INTTYPES_H 1 + +/* Define to 1 if you have the `m' library (-lm). */ +#cmakedefine HAVE_LIBM 1 + +/* Define to 1 if your system has a GNU libc compatible `malloc' function, and + to 0 otherwise. */ +#cmakedefine HAVE_MALLOC 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_MEMORY_H 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_STDINT_H 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_STDLIB_H 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_STRINGS_H 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_STRING_H 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_SYS_STAT_H 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_SYS_TYPES_H 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_UNISTD_H 1 + +/* Define to the sub-directory in which libtool stores uninstalled libraries. + */ +#cmakedefine LT_OBJDIR "@LT_OBJDIR@" + +/* Define as the return type of signal handlers (`int' or `void'). */ +#cmakedefine RETSIGTYPE @RETSIGTYPE@ + +/* Do not use x86 optimizations */ +#cmakedefine SOUNDTOUCH_DISABLE_X86_OPTIMIZATIONS 1 + +/* Use Float as Sample type */ +#cmakedefine SOUNDTOUCH_FLOAT_SAMPLES 1 + +/* Use Integer as Sample type */ +#cmakedefine SOUNDTOUCH_INTEGER_SAMPLES 1 + +/* Define to 1 if you have the ANSI C header files. */ +#cmakedefine STDC_HEADERS 1 + +/* Version number of package */ +#cmakedefine VERSION "@VERSION@" + +/* Define to empty if `const' does not conform to ANSI C. */ +#cmakedefine const @const@ + +/* Define to `__inline__' or `__inline' if that's what the C compiler + calls it, or to nothing if 'inline' is not supported under any name. */ +#ifndef __cplusplus +#cmakedefine inline @inline@ +#endif + +/* Define to rpl_malloc if the replacement function should be used. */ +#cmakedefine malloc @malloc@ diff --git a/cmake-proxies/twolame/CMakeLists.txt b/cmake-proxies/twolame/CMakeLists.txt index 843e834d9..eddf7dde0 100644 --- a/cmake-proxies/twolame/CMakeLists.txt +++ b/cmake-proxies/twolame/CMakeLists.txt @@ -1,44 +1,56 @@ -#directory cmake-proxies/twolame -#UNUSED -set( TARGET twolame ) -set( TARGET_SOURCE ${LIB_SRC_DIRECTORY}${TARGET} ) -project( ${TARGET} ) -set( SOURCES -#${LIB_SRC_DIRECTORY}twolame/frontend/audioin_raw.c -#${LIB_SRC_DIRECTORY}twolame/frontend/audioin_sndfile.c -#${LIB_SRC_DIRECTORY}twolame/frontend/frontend.c -${LIB_SRC_DIRECTORY}twolame/libtwolame/ath.c -${LIB_SRC_DIRECTORY}twolame/libtwolame/availbits.c -${LIB_SRC_DIRECTORY}twolame/libtwolame/bitbuffer.c -${LIB_SRC_DIRECTORY}twolame/libtwolame/crc.c -${LIB_SRC_DIRECTORY}twolame/libtwolame/dab.c -${LIB_SRC_DIRECTORY}twolame/libtwolame/encode.c -${LIB_SRC_DIRECTORY}twolame/libtwolame/energy.c -${LIB_SRC_DIRECTORY}twolame/libtwolame/fft.c -${LIB_SRC_DIRECTORY}twolame/libtwolame/get_set.c -${LIB_SRC_DIRECTORY}twolame/libtwolame/mem.c -${LIB_SRC_DIRECTORY}twolame/libtwolame/psycho_0.c -${LIB_SRC_DIRECTORY}twolame/libtwolame/psycho_1.c -${LIB_SRC_DIRECTORY}twolame/libtwolame/psycho_2.c -${LIB_SRC_DIRECTORY}twolame/libtwolame/psycho_3.c -${LIB_SRC_DIRECTORY}twolame/libtwolame/psycho_4.c -${LIB_SRC_DIRECTORY}twolame/libtwolame/psycho_n1.c -${LIB_SRC_DIRECTORY}twolame/libtwolame/subband.c -${LIB_SRC_DIRECTORY}twolame/libtwolame/twolame.c -${LIB_SRC_DIRECTORY}twolame/libtwolame/util.c -#${LIB_SRC_DIRECTORY}twolame/simplefrontend/audio_wave.c -#${LIB_SRC_DIRECTORY}twolame/simplefrontend/simplefrontend.c -) -# This defines the #define on both Windows and Linux. -add_definitions( --D_LIB --DLIBTWOLAME_STATIC - ) -add_library( ${TARGET} STATIC ${SOURCES}) - -target_include_directories( ${TARGET} PRIVATE +add_library( ${TARGET} STATIC ) +list( APPEND SOURCES + PRIVATE + ${TARGET_ROOT}/libtwolame/ath.c + ${TARGET_ROOT}/libtwolame/availbits.c + ${TARGET_ROOT}/libtwolame/bitbuffer.c + ${TARGET_ROOT}/libtwolame/crc.c + ${TARGET_ROOT}/libtwolame/dab.c + ${TARGET_ROOT}/libtwolame/encode.c + ${TARGET_ROOT}/libtwolame/energy.c + ${TARGET_ROOT}/libtwolame/fft.c + ${TARGET_ROOT}/libtwolame/get_set.c + ${TARGET_ROOT}/libtwolame/mem.c + ${TARGET_ROOT}/libtwolame/psycho_0.c + ${TARGET_ROOT}/libtwolame/psycho_1.c + ${TARGET_ROOT}/libtwolame/psycho_2.c + ${TARGET_ROOT}/libtwolame/psycho_3.c + ${TARGET_ROOT}/libtwolame/psycho_4.c + ${TARGET_ROOT}/libtwolame/psycho_n1.c + ${TARGET_ROOT}/libtwolame/subband.c + ${TARGET_ROOT}/libtwolame/twolame.c + ${TARGET_ROOT}/libtwolame/util.c ) -target_link_libraries( ${TARGET} ) \ No newline at end of file +list( APPEND INCLUDES + PRIVATE + ${CMAKE_CURRENT_BINARY_DIR}/private + PUBLIC + ${TARGET_ROOT}/libtwolame +) + +list( APPEND DEFINES + PRIVATE + LIBTWOLAME_STATIC +) + +list( APPEND OPTIONS + PRIVATE + $<$:-Wno-implicit-function-declaration> +) + +set( PACKAGE_BUGREPORT "twolame-discuss@lists.sourceforge.net" ) +set( PACKAGE_VERSION "0.3.13" ) + +configure_file( config.h.in private/config.h ) + +organize_source( "${TARGET_ROOT}" "" "${SOURCES}" ) +target_sources( ${TARGET} PRIVATE ${SOURCES} ) +target_compile_definitions( ${TARGET} PRIVATE ${DEFINES} ) +target_compile_features( ${TARGET} PRIVATE ${FEATURES} ) +target_compile_options( ${TARGET} PRIVATE ${OPTIONS} ) +target_include_directories( ${TARGET} PRIVATE ${INCLUDES} ) +target_link_libraries( ${TARGET} PRIVATE ${LIBRARIES} ) + diff --git a/cmake-proxies/twolame/config.h.in b/cmake-proxies/twolame/config.h.in new file mode 100644 index 000000000..b160b77df --- /dev/null +++ b/cmake-proxies/twolame/config.h.in @@ -0,0 +1,96 @@ +/* libtwolame/config.h.in. Generated from configure.ac by autoheader. */ + +/* Define if building universal (internal helper macro) */ +#cmakedefine AC_APPLE_UNIVERSAL_BUILD 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_ASSERT_H 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_DLFCN_H 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_INTTYPES_H 1 + +/* Define to 1 if you have the `m' library (-lm). */ +#cmakedefine HAVE_LIBM 1 + +/* Define to 1 if you have the `mx' library (-lmx). */ +#cmakedefine HAVE_LIBMX 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_MALLOC_H 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_MEMORY_H 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_STDINT_H 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_STDLIB_H 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_STRINGS_H 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_STRING_H 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_SYS_STAT_H 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_SYS_TYPES_H 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_UNISTD_H 1 + +/* Define to the sub-directory in which libtool stores uninstalled libraries. + */ +#cmakedefine LT_OBJDIR "@LT_OBJDIR@" + +/* Name of package */ +#cmakedefine PACKAGE "@PACKAGE@" + +/* Define to the address where bug reports for this package should be sent. */ +#cmakedefine PACKAGE_BUGREPORT "@PACKAGE_BUGREPORT@" + +/* Define to the full name of this package. */ +#cmakedefine PACKAGE_NAME "@PACKAGE_NAME@" + +/* Define to the full name and version of this package. */ +#cmakedefine PACKAGE_STRING "@PACKAGE_STRING@" + +/* Define to the one symbol short name of this package. */ +#cmakedefine PACKAGE_TARNAME "@PACKAGE_TARNAME@" + +/* Define to the home page for this package. */ +#cmakedefine PACKAGE_URL "@PACKAGE_URL@" + +/* Define to the version of this package. */ +#cmakedefine PACKAGE_VERSION "@PACKAGE_VERSION@" + +/* The size of `float', as computed by sizeof. */ +#define SIZEOF_FLOAT @SIZEOF_FLOAT@ + +/* The size of `short', as computed by sizeof. */ +#define SIZEOF_SHORT @SIZEOF_SHORT@ + +/* Define to 1 if you have the ANSI C header files. */ +#cmakedefine STDC_HEADERS 1 + +/* Version number of package */ +#cmakedefine VERSION "@VERSION@" + +/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most + significant byte first (like Motorola and SPARC, unlike Intel). */ +#cmakedefine WORDS_BIGENDIAN @WORDS_BIGENDIAN@ + +/* Define to empty if `const' does not conform to ANSI C. */ +#cmakedefine const @const@ + +/* Define to `__inline__' or `__inline' if that's what the C compiler + calls it, or to nothing if 'inline' is not supported under any name. */ +#ifndef __cplusplus +#cmakedefine inline @inline@ +#endif diff --git a/cmake-proxies/wxwidgets/CMakeLists.txt b/cmake-proxies/wxwidgets/CMakeLists.txt new file mode 100644 index 000000000..acde6f841 --- /dev/null +++ b/cmake-proxies/wxwidgets/CMakeLists.txt @@ -0,0 +1,109 @@ + +add_library( ${TARGET} INTERFACE ) + +def_vars() + +set( WXWIN $ENV{WXWIN} ) +if( "${WXWIN}" STREQUAL "" ) + set( WXWIN "${_INTDIR}/wxwidgets" ) + # XXX: Look into importing instead of adding to this project +endif() + +if( NOT EXISTS "${WXWIN}" ) + find_package( Git ) + if( NOT GIT_FOUND ) + message( FATAL_ERROR "Git is needed to clone wxWidgets" ) + endif() + + execute_process( + COMMAND + ${GIT_EXECUTABLE} clone + --depth 1 + --single-branch + --recurse-submodules + https://github.com/audacity/wxwidgets + "${WXWIN}" + ) +endif() + +if( CMAKE_SYSTEM_NAME MATCHES "Windows" ) + # Want accessibility + set( wxUSE_ACCESSIBILITY YES ) + + # Windows requires it due to missing "#include" directives + set( wxBUILD_PRECOMP YES ) +elseif( CMAKE_SYSTEM_NAME MATCHES "Darwin" ) + # Want accessibility + set( wxUSE_ACCESSIBILITY YES ) + + # Causes problems on OSX, so turn it off + set( wxBUILD_PRECOMP NO ) +elseif( CMAKE_SYSTEM_NAME MATCHES "Linux" ) + # Doesn't yet have accessbility + set( wxUSE_ACCESSIBILITY NO ) + + # Linux can go either way, so might as well use it + set( wxBUILD_PRECOMP YES ) +endif() + +# Just to be consistent with Audacity +set( wxBUILD_CXX_STANDARD "14" ) + +# Pull in wxWidgets +add_subdirectory( ${WXWIN} ${WXWIN} ) + +# And rearrange the folder structure +set_dir_folder( ${WXWIN} "wxWidgets" ) + +set( INCLUDES + $<$:${WXWIN}/src/zlib> +) + +set( DEFINES + WXUSINGDLL +) + +set( LIBRARIES + adv + base + core + html + net + qa + xml + $<$:wxexpat> + $<$:wxjpeg> + $<$:wxpng> + $<$:wxtiff> + $<$:wxregex> + $<$:wxzlib> +) + +if( CMAKE_SYSTEM_NAME MATCHES "Darwin" ) + # When accessibility is enabled, the build will fail in "wx/chkconf.h" + # since wxRegex compile defines do not include __WXOSX_COCOA__. So, + # add it here. + target_compile_definitions( wxregex PRIVATE "__WXOSX_COCOA__" ) +elseif( CMAKE_SYSTEM_NAME MATCHES "Linux" ) + # We need the system GTK/GLIB packages + if( "${wxBUILD_TOOLKIT}" STREQUAL "gtk2" ) + set( gtk gtk+-2.0 ) + set( glib glib-2.0 ) + elseif( "${wxBUILD_TOOLKIT}" STREQUAL "gtk3" ) + set( gtk gtk+-3.0 ) + set( glib glib-2.0 ) + elseif( "${wxBUILD_TOOLKIT}" STREQUAL "gtk4" ) + set( gtk gtk+-4.0 ) + set( glib glib-2.0 ) + else() + message( FATAL_ERROR "Unrecognized wxGTK version: ${wxBUILD_TOOLKIT}" ) + endif() + + pkg_check_modules( GTK REQUIRED IMPORTED_TARGET GLOBAL ${gtk} ) + pkg_check_modules( GLIB REQUIRED IMPORTED_TARGET GLOBAL ${glib} ) +endif() + +target_include_directories( ${TARGET} INTERFACE ${INCLUDES} ) +target_compile_definitions( ${TARGET} INTERFACE ${DEFINES} ) +target_link_libraries( ${TARGET} INTERFACE ${LIBRARIES} ) + diff --git a/help/CMakeLists.txt b/help/CMakeLists.txt new file mode 100755 index 000000000..b8b6426f3 --- /dev/null +++ b/help/CMakeLists.txt @@ -0,0 +1,46 @@ + +set( TARGET manual ) +set( TARGET_ROOT ${topdir}/help ) + +message( STATUS "========== Configuring ${TARGET} ==========" ) + +set( host "alphamanual.audacityteam.org" ) +set( src "https://${host}/man" ) +set( dst "$/help/manual" ) +set( script_dir "${top_dir}/scripts/mw2html_audacity" ) +set( script "mw2html.py" ) +set( out_dir "${CMAKE_CURRENT_BINARY_DIR}" ) +set( out "${out_dir}/${host}/index.html" ) + +if( CMAKE_SYSTEM_NAME MATCHES "Windows" ) + file( TO_NATIVE_PATH + "${CMAKE_BINARY_DIR}/packages/${PYTHON_NAME}.${PYTHON_VERSION}/tools/python.exe" + python + ) +else() + find_package( Python2 ) + if( Python2_FOUND ) + set( python "${Python2_EXECUTABLE}" ) + endif() +endif() + +if( NOT DEFINED python ) + message( WARNING "Python not found...unable to produce manual." ) + return() +endif() + +add_custom_command( + COMMENT + "Downloading manual from: ${src}" + COMMAND + "${python}" "${script_dir}/${script}" -s "${src}" "${out_dir}" + COMMAND + ${CMAKE_COMMAND} -E copy_directory "${out_dir}/${host}" "${dst}" + WORKING_DIRECTORY + "${script_dir}" + OUTPUT + "${out}" +) + +add_custom_target( ${TARGET} DEPENDS "${out}" ) +add_dependencies( ${TARGET} Audacity ) diff --git a/lib-src/CMakeLists.txt b/lib-src/CMakeLists.txt deleted file mode 100644 index b4394a74b..000000000 --- a/lib-src/CMakeLists.txt +++ /dev/null @@ -1,34 +0,0 @@ -#directory lib-src -set( LIB_SRC_DIRECTORY ${top_dir}/lib-src/ ) - -#These two are done in lib-src -add_subdirectory( "mod-script-pipe" ) -add_subdirectory( "FileDialog" ) - -#Same idea, but not yet done/needed -#add_subdirectory( "mod-null" ) -#add_subdirectory( "mod-nyq-bench" ) -#add_subdirectory( "mod-track-panel" ) - -#These are included in some other lib, and don't need a lib of their own. -#add_subdirectory( "lib-widget-extra" ) - -# Most of the others are done via cmake-proxies subdirectory. - - -#Some left over file names, not yet used in the cmake build. -#[[ -${LIB_SRC_DIRECTORY}mod-null/ModNullCallback.cpp -${LIB_SRC_DIRECTORY}mod-nyq-bench/NyqBench.cpp - -${LIB_SRC_DIRECTORY}mod-track-panel/ModTrackPanelCallback.cpp -${LIB_SRC_DIRECTORY}mod-track-panel/Registrar.cpp -${LIB_SRC_DIRECTORY}mod-track-panel/SkewedRuler.cpp -${LIB_SRC_DIRECTORY}mod-track-panel/TrackPanel2.cpp - -${LIB_SRC_DIRECTORY}lib-widget-extra/NonGuiThread.cpp - -]]# - - - diff --git a/locale/CMakeLists.txt b/locale/CMakeLists.txt new file mode 100755 index 000000000..50fa1a783 --- /dev/null +++ b/locale/CMakeLists.txt @@ -0,0 +1,174 @@ + +set( TARGET locale ) +set( TARGET_ROOT ${topdir}/locale ) + +message( STATUS "========== Configuring ${TARGET} ==========" ) + +def_vars() + +list( APPEND SOURCES + af.po + ar.po + be.po + bg.po + bn.po + bs.po + ca.po + ca_ES@valencia.po + cs.po + cy.po + da.po + de.po + el.po + es.po + eu.po + eu_ES.po + fa.po + fi.po + fr.po + ga.po + gl.po + he.po + hi.po + hr.po + hu.po + hy.po + id.po + it.po + ja.po + ka.po + km.po + ko.po + lt.po + mk.po + my.po + nb.po + nl.po + oc.po + pl.po + pt_BR.po + pt_PT.po + ro.po + ru.po + sk.po + sl.po + sr_RS.po + sr_RS@latin.po + sv.po + ta.po + tg.po + tr.po + uk.po + vi.po + zh_CN.po + zh_TW.po +) + +if( CMAKE_SYSTEM_NAME MATCHES "Windows" ) + + file( TO_NATIVE_PATH "${CMAKE_BINARY_DIR}/packages/${GETTEXT_NAME}.${GETTEXT_VERSION}/tools/bin/msgfmt.exe" msgfmt ) + +elseif( CMAKE_SYSTEM_NAME MATCHES "Darwin" ) + find_package( Gettext ) + if( GETTEXT_FOUND ) + set( msgfmt "${GETTEXT_MSGFMT_EXECUTABLE}" ) + else() + set( root "${CMAKE_CURRENT_BINARY_DIR}/usr/local" ) + set( msgfmt "${CMAKE_CURRENT_BINARY_DIR}/msgfmt" ) + + if( NOT EXISTS "${root}" ) + execute_process( + COMMAND + curl -L -o /tmp/gettext.pkg https://raw.githubusercontent.com/rudix-mac/packages/master/gettext-0.20.1-macos10.14.pkg + ) + execute_process( + COMMAND + pkgutil --force --expand /tmp/gettext.pkg /tmp/gettext + ) + execute_process( + COMMAND + tar -C "${CMAKE_CURRENT_BINARY_DIR}" -x -f /tmp/gettext/gettextinstall.pkg/Payload + ) + execute_process( + COMMAND + rm -rf /tmp/gettext.pkg /tmp/gettext + ) + endif() + + file( WRITE ${CMAKE_BINARY_DIR}/msgfmt + "#!/bin/sh\n" + "export DYLD_LIBRARY_PATH=${root}/lib\n" + "${root}/bin/msgfmt \$@ \n" + ) + + file( COPY ${CMAKE_BINARY_DIR}/msgfmt + DESTINATION ${CMAKE_CURRENT_BINARY_DIR} + FILE_PERMISSIONS + OWNER_READ OWNER_EXECUTE + GROUP_READ GROUP_EXECUTE + WORLD_READ WORLD_EXECUTE + ) + + file( REMOVE ${CMAKE_BINARY_DIR}/msgfmt ) + + endif() + + +else() + + find_package( Gettext ) + if( GETTEXT_FOUND ) + set( msgfmt "${GETTEXT_MSGFMT_EXECUTABLE}" ) + endif() + +endif() + +if( NOT DEFINED msgfmt ) + message( WARNING "Gettext not found...translations will not be provided." ) + return() +endif() + +set( OUTPUTS ) +foreach( source ${SOURCES} ) + get_filename_component( lang "${source}" NAME_WE ) + + if( CMAKE_SYSTEM_NAME MATCHES "Darwin" ) + set( dst "${_EXEDIR}/Resources/${lang}.lproj" ) + elseif( CMAKE_SYSTEM_NAME MATCHES "Linux" ) + set( dst "${_EXEDIR}/locale/${lang}/LC_MESSAGES" ) + elseif( CMAKE_SYSTEM_NAME MATCHES "Windows" ) + set( dst "${_EXEDIR}/Languanges/${lang}" ) + endif() + + set( po "${_SRCDIR}/${source}" ) + set( mo "${dst}/audacity.mo" ) + + add_custom_command( + DEPENDS + "${po}" + COMMAND + "${CMAKE_COMMAND}" -E make_directory "${dst}" + COMMAND + "${msgfmt}" -o "${mo}" "${po}" + OUTPUT + "${mo}" + ) + + # Always make sure there's an empty English folder. Otherwise, some menu + # items will be translated to the next language listed in System + # Preferences/Language & Text + if( CMAKE_SYSTEM_NAME MATCHES "Darwin" ) + add_custom_command( + COMMAND + ${CMAKE_COMMAND} -E make_directory "${_EXEDIR}/Resources/en.lproj" + OUTPUT + "${mo}" + APPEND + ) + endif() + + list( APPEND OUTPUTS ${mo} ) +endforeach() + +add_custom_target( "${TARGET}" ALL DEPENDS ${OUTPUTS} SOURCES "${SOURCES}" ) + diff --git a/nyquist/CMakeLists.txt b/nyquist/CMakeLists.txt new file mode 100755 index 000000000..0c19814ca --- /dev/null +++ b/nyquist/CMakeLists.txt @@ -0,0 +1,75 @@ + +set( TARGET nyquist ) +set( TARGET_ROOT ${topdir}/nyquist ) + +message( STATUS "========== Configuring ${TARGET} ==========" ) + +def_vars() + +list( APPEND SOURCES + aud-do-support.lsp + dspprims.lsp + envelopes.lsp + equalizer.lsp + evalenv.lsp + fileio.lsp + init.lsp + misc.lsp + nyinit-dbg.lsp + nyinit.lsp + nyqmisc.lsp + nyquist.lsp + printrec.lsp + profile.lsp + sal-parse.lsp + sal.lsp + seq.lsp + seqfnint.lsp + seqmidi.lsp + sliders.lsp + sndfnint.lsp + spec-plot.lsp + spectral-analysis.lsp + stk.lsp + system.lsp + test.lsp + velocity.lsp + xlinit.lsp + xm.lsp + rawwaves/mand1.raw + rawwaves/mand10.raw + rawwaves/mand11.raw + rawwaves/mand12.raw + rawwaves/mand2.raw + rawwaves/mand3.raw + rawwaves/mand4.raw + rawwaves/mand5.raw + rawwaves/mand6.raw + rawwaves/mand7.raw + rawwaves/mand8.raw + rawwaves/mand9.raw + rawwaves/mandpluk.raw + rawwaves/marmstk1.raw + rawwaves/sinewave.raw +) + +foreach( source ${SOURCES} ) + set( src "${_SRCDIR}/${source}" ) + set( dst "${_EXEDIR}/${TARGET}/${source}" ) + + add_custom_command( + DEPENDS + "${src}" + COMMAND + ${CMAKE_COMMAND} -E make_directory "${_EXEDIR}/${TARGET}" + COMMAND + ${CMAKE_COMMAND} -E copy "${src}" "${dst}" + OUTPUT + "${dst}" + ) + + list( APPEND OUTPUTS "${dst}" ) +endforeach() + +add_custom_target( ${TARGET} ALL DEPENDS ${OUTPUTS} SOURCES ${SOURCES} ) + diff --git a/plug-ins/CMakeLists.txt b/plug-ins/CMakeLists.txt new file mode 100755 index 000000000..0a4be911f --- /dev/null +++ b/plug-ins/CMakeLists.txt @@ -0,0 +1,59 @@ + +set( TARGET plug-ins ) +set( TARGET_ROOT ${topdir}/plug-ins ) + +message( STATUS "========== Configuring ${TARGET} ==========" ) + +def_vars() + +list( APPEND SOURCES + SilenceMarker.ny + SoundFinder.ny + SpectralEditMulti.ny + SpectralEditParametricEQ.ny + SpectralEditShelves.ny + StudioFadeOut.ny + adjustable-fade.ny + beat.ny + clipfix.ny + crossfadeclips.ny + crossfadetracks.ny + delay.ny + equalabel.ny + highpass.ny + limiter.ny + lowpass.ny + noisegate.ny + notch.ny + nyquist-plug-in-installer.ny + pluck.ny + rhythmtrack.ny + rissetdrum.ny + rms.ny + sample-data-export.ny + sample-data-import.ny + tremolo.ny + vocalrediso.ny + vocoder.ny +) + +foreach( source ${SOURCES} ) + set( src "${_SRCDIR}/${source}" ) + set( dst "${_EXEDIR}/${TARGET}/${source}" ) + + add_custom_command( + DEPENDS + "${src}" + COMMAND + ${CMAKE_COMMAND} -E make_directory "${_EXEDIR}/${TARGET}" + COMMAND + ${CMAKE_COMMAND} -E copy "${src}" "${dst}" + OUTPUT + "${dst}" + ) + + list( APPEND OUTPUTS "${dst}" ) +endforeach() + +add_custom_target( ${TARGET} ALL DEPENDS ${OUTPUTS} SOURCES ${SOURCES} ) + diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 9ab5aa27a..edbf35190 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,538 +1,1199 @@ -#directory src -project (Audacity) -find_package(wxWidgets REQUIRED COMPONENTS net core base html qa adv) -include(${wxWidgets_USE_FILE}) -set_property(GLOBAL PROPERTY USE_FOLDERS On) +set( TARGET Audacity ) +set( TARGET_ROOT ${topdir}/src ) + +message( STATUS "========== Configuring ${TARGET} ==========" ) + +# Allow modules to link against the Audacity executable +set( CMAKE_ENABLE_EXPORTS ON ) + +add_executable( ${TARGET} ) + +def_vars() + +# +# +# +list( APPEND SOURCES + PRIVATE + AColor.cpp + AColor.h + AboutDialog.cpp + AboutDialog.h + AdornedRulerPanel.cpp + AdornedRulerPanel.h + AllThemeResources.h + AttachedVirtualFunction.h + Audacity.h + AudacityApp.cpp + AudacityApp.h + AudacityException.cpp + AudacityException.h + AudacityHeaders.cpp + AudacityHeaders.h + AudacityLogger.cpp + AudacityLogger.h + AudioIO.cpp + AudioIO.h + AudioIOBase.cpp + AudioIOBase.h + AudioIOListener.h + AutoRecovery.cpp + AutoRecovery.h + AutoRecoveryDialog.cpp + AutoRecoveryDialog.h + BatchCommandDialog.cpp + BatchCommandDialog.h + BatchCommands.cpp + BatchCommands.h + BatchProcessDialog.cpp + BatchProcessDialog.h + Benchmark.cpp + Benchmark.h + BlockFile.cpp + BlockFile.h + CellularPanel.cpp + CellularPanel.h + ClassicThemeAsCeeCode.h + ClientData.h + ClientDataHelpers.h + Clipboard.cpp + Clipboard.h + CommonCommandFlags.cpp + CommonCommandFlags.h + CrashReport.cpp + CrashReport.h + DarkThemeAsCeeCode.h + Dependencies.cpp + Dependencies.h + DeviceChange.cpp + DeviceChange.h + DeviceManager.cpp + DeviceManager.h + Diags.cpp + Diags.h + DirManager.cpp + DirManager.h + Dither.cpp + Dither.h + Envelope.cpp + Envelope.h + EnvelopeEditor.cpp + EnvelopeEditor.h + Experimental.h + FFT.cpp + FFT.h + FFmpeg.cpp + FFmpeg.h + FileException.cpp + FileException.h + FileFormats.cpp + FileFormats.h + FileIO.cpp + FileIO.h + FileNames.cpp + FileNames.h + FreqWindow.cpp + FreqWindow.h + HelpText.cpp + HelpText.h + HiContrastThemeAsCeeCode.h + HistoryWindow.cpp + HistoryWindow.h + HitTestResult.h + ImageManipulation.cpp + ImageManipulation.h + InconsistencyException.cpp + InconsistencyException.h + Internat.cpp + Internat.h + InterpolateAudio.cpp + InterpolateAudio.h + KeyboardCapture.cpp + KeyboardCapture.h + LabelDialog.cpp + LabelDialog.h + LabelTrack.cpp + LabelTrack.h + LangChoice.cpp + LangChoice.h + Languages.cpp + Languages.h + Legacy.cpp + Legacy.h + LightThemeAsCeeCode.h + Lyrics.cpp + Lyrics.h + LyricsWindow.cpp + LyricsWindow.h + MacroMagic.h + Makefile.am + Makefile.in + Matrix.cpp + Matrix.h + MemoryX.h + Menus.cpp + Menus.h + MissingAliasFileDialog.cpp + MissingAliasFileDialog.h + Mix.cpp + Mix.h + MixerBoard.cpp + MixerBoard.h + ModuleManager.cpp + ModuleManager.h + NoteTrack.cpp + NoteTrack.h + NumberScale.h + PitchName.cpp + PitchName.h + PlatformCompatibility.cpp + PlatformCompatibility.h + PluginManager.cpp + PluginManager.h + Prefs.cpp + Prefs.h + Printing.cpp + Printing.h + Profiler.cpp + Profiler.h + Project.cpp + Project.h + ProjectAudioIO.cpp + ProjectAudioIO.h + ProjectAudioManager.cpp + ProjectAudioManager.h + ProjectFSCK.cpp + ProjectFSCK.h + ProjectFileIO.cpp + ProjectFileIO.h + ProjectFileIORegistry.cpp + ProjectFileIORegistry.h + ProjectFileManager.cpp + ProjectFileManager.h + ProjectHistory.cpp + ProjectHistory.h + ProjectManager.cpp + ProjectManager.h + ProjectSelectionManager.cpp + ProjectSelectionManager.h + ProjectSettings.cpp + ProjectSettings.h + ProjectStatus.cpp + ProjectStatus.h + ProjectWindow.cpp + ProjectWindow.h + ProjectWindowBase.cpp + ProjectWindowBase.h + RealFFTf.cpp + RealFFTf.h + RealFFTf48x.cpp + RealFFTf48x.h + RefreshCode.h + Registrar.h + Resample.cpp + Resample.h + RevisionIdent.h + RingBuffer.cpp + RingBuffer.h + SampleFormat.cpp + SampleFormat.h + Screenshot.cpp + Screenshot.h + SelectUtilities.cpp + SelectUtilities.h + SelectedRegion.cpp + SelectedRegion.h + SelectionState.cpp + SelectionState.h + Sequence.cpp + Sequence.h + Shuttle.cpp + Shuttle.h + ShuttleGetDefinition.cpp + ShuttleGetDefinition.h + ShuttleGui.cpp + ShuttleGui.h + ShuttlePrefs.cpp + ShuttlePrefs.h + Snap.cpp + Snap.h + SoundActivatedRecord.cpp + SoundActivatedRecord.h + Spectrum.cpp + Spectrum.h + SpectrumAnalyst.cpp + SpectrumAnalyst.h + SplashDialog.cpp + SplashDialog.h + SseMathFuncs.cpp + SseMathFuncs.h + Tags.cpp + Tags.h + Theme.cpp + Theme.h + ThemeAsCeeCode.h + TimeDialog.cpp + TimeDialog.h + TimeTrack.cpp + TimeTrack.h + TimerRecordDialog.cpp + TimerRecordDialog.h + Track.cpp + Track.h + TrackArtist.cpp + TrackArtist.h + TrackInfo.cpp + TrackInfo.h + TrackPanel.cpp + TrackPanel.h + TrackPanelAx.cpp + TrackPanelAx.h + TrackPanelCell.h + TrackPanelDrawable.h + TrackPanelDrawingContext.h + TrackPanelListener.h + TrackPanelMouseEvent.h + TrackPanelResizeHandle.cpp + TrackPanelResizeHandle.h + TrackPanelResizerCell.cpp + TrackPanelResizerCell.h + TrackUtilities.cpp + TrackUtilities.h + TranslatableStringArray.h + UIHandle.cpp + UIHandle.h + UndoManager.cpp + UndoManager.h + UserException.cpp + UserException.h + ViewInfo.cpp + ViewInfo.h + VoiceKey.cpp + VoiceKey.h + WaveClip.cpp + WaveClip.h + WaveTrack.cpp + WaveTrack.h + WaveTrackLocation.h + WrappedType.cpp + WrappedType.h + ZoomInfo.cpp + ZoomInfo.h + float_cast.h + wxFileNameWrapper.h + + # Blockfile + + blockfile/LegacyAliasBlockFile.cpp + blockfile/LegacyAliasBlockFile.h + blockfile/LegacyBlockFile.cpp + blockfile/LegacyBlockFile.h + blockfile/NotYetAvailableException.cpp + blockfile/NotYetAvailableException.h + blockfile/ODDecodeBlockFile.cpp + blockfile/ODDecodeBlockFile.h + blockfile/ODPCMAliasBlockFile.cpp + blockfile/ODPCMAliasBlockFile.h + blockfile/PCMAliasBlockFile.cpp + blockfile/PCMAliasBlockFile.h + blockfile/SilentBlockFile.cpp + blockfile/SilentBlockFile.h + blockfile/SimpleBlockFile.cpp + blockfile/SimpleBlockFile.h + + # Commands + + commands/AppCommandEvent.cpp + commands/AppCommandEvent.h + commands/AudacityCommand.cpp + commands/AudacityCommand.h + commands/BatchEvalCommand.cpp + commands/BatchEvalCommand.h + commands/Command.cpp + commands/Command.h + commands/CommandBuilder.cpp + commands/CommandBuilder.h + commands/CommandContext.cpp + commands/CommandContext.h + commands/CommandDirectory.cpp + commands/CommandDirectory.h + commands/CommandFlag.h + commands/CommandFunctors.h + commands/CommandHandler.cpp + commands/CommandHandler.h + commands/CommandManager.cpp + commands/CommandManager.h + commands/CommandManagerWindowClasses.h + commands/CommandMisc.h + commands/CommandSignature.cpp + commands/CommandSignature.h + commands/CommandTargets.cpp + commands/CommandTargets.h + commands/CommandType.cpp + commands/CommandType.h + commands/CompareAudioCommand.cpp + commands/CompareAudioCommand.h + commands/Demo.cpp + commands/Demo.h + commands/DragCommand.cpp + commands/DragCommand.h + commands/GetInfoCommand.cpp + commands/GetInfoCommand.h + commands/GetTrackInfoCommand.cpp + commands/GetTrackInfoCommand.h + commands/HelpCommand.cpp + commands/HelpCommand.h + commands/ImportExportCommands.cpp + commands/ImportExportCommands.h + commands/Keyboard.cpp + commands/Keyboard.h + commands/LoadCommands.cpp + commands/LoadCommands.h + commands/MessageCommand.cpp + commands/MessageCommand.h + commands/OpenSaveCommands.cpp + commands/OpenSaveCommands.h + commands/PreferenceCommands.cpp + commands/PreferenceCommands.h + commands/ResponseQueue.cpp + commands/ResponseQueue.h + commands/ScreenshotCommand.cpp + commands/ScreenshotCommand.h + commands/ScriptCommandRelay.cpp + commands/ScriptCommandRelay.h + commands/SelectCommand.cpp + commands/SelectCommand.h + commands/SetClipCommand.cpp + commands/SetClipCommand.h + commands/SetEnvelopeCommand.cpp + commands/SetEnvelopeCommand.h + commands/SetLabelCommand.cpp + commands/SetLabelCommand.h + commands/SetProjectCommand.cpp + commands/SetProjectCommand.h + commands/SetTrackInfoCommand.cpp + commands/SetTrackInfoCommand.h + commands/Validators.h + + # Built-in Effects + + effects/Amplify.cpp + effects/Amplify.h + effects/AutoDuck.cpp + effects/AutoDuck.h + effects/BassTreble.cpp + effects/BassTreble.h + effects/Biquad.cpp + effects/Biquad.h + effects/ChangePitch.cpp + effects/ChangePitch.h + effects/ChangeSpeed.cpp + effects/ChangeSpeed.h + effects/ChangeTempo.cpp + effects/ChangeTempo.h + effects/ClickRemoval.cpp + effects/ClickRemoval.h + effects/Compressor.cpp + effects/Compressor.h + effects/Contrast.cpp + effects/Contrast.h + effects/Distortion.cpp + effects/Distortion.h + effects/DtmfGen.cpp + effects/DtmfGen.h + effects/EBUR128.cpp + effects/EBUR128.h + effects/Echo.cpp + effects/Echo.h + effects/Effect.cpp + effects/Effect.h + effects/EffectManager.cpp + effects/EffectManager.h + effects/EffectUI.cpp + effects/EffectUI.h + effects/Equalization.cpp + effects/Equalization.h + effects/Equalization48x.cpp + effects/Equalization48x.h + effects/Fade.cpp + effects/Fade.h + effects/FindClipping.cpp + effects/FindClipping.h + effects/Generator.cpp + effects/Generator.h + effects/Invert.cpp + effects/Invert.h + effects/LoadEffects.cpp + effects/LoadEffects.h + effects/Loudness.cpp + effects/Loudness.h + effects/Noise.cpp + effects/Noise.h + effects/NoiseReduction.cpp + effects/NoiseReduction.h + effects/NoiseRemoval.cpp + effects/NoiseRemoval.h + effects/Normalize.cpp + effects/Normalize.h + effects/Paulstretch.cpp + effects/Paulstretch.h + effects/Phaser.cpp + effects/Phaser.h + effects/RealtimeEffectManager.cpp + effects/RealtimeEffectManager.h + effects/Repair.cpp + effects/Repair.h + effects/Repeat.cpp + effects/Repeat.h + effects/Reverb.cpp + effects/Reverb.h + effects/Reverb_libSoX.h + effects/Reverse.cpp + effects/Reverse.h + effects/SBSMSEffect.cpp + effects/SBSMSEffect.h + effects/ScienFilter.cpp + effects/ScienFilter.h + effects/ScoreAlignDialog.cpp + effects/ScoreAlignDialog.h + effects/Silence.cpp + effects/Silence.h + effects/SimpleMono.cpp + effects/SimpleMono.h + effects/SoundTouchEffect.cpp + effects/SoundTouchEffect.h + effects/StereoToMono.cpp + effects/StereoToMono.h + effects/TimeScale.cpp + effects/TimeScale.h + effects/TimeWarper.cpp + effects/TimeWarper.h + effects/ToneGen.cpp + effects/ToneGen.h + effects/TruncSilence.cpp + effects/TruncSilence.h + effects/TwoPassSimpleMono.cpp + effects/TwoPassSimpleMono.h + effects/Wahwah.cpp + effects/Wahwah.h + + # VST Effects + + $<$:effects/VST/VSTControl.h> + $<$:effects/VST/VSTEffect.cpp> + $<$:effects/VST/VSTEffect.h> + $<$:effects/VST/aeffectx.h> + $<$,$>:effects/VST/VSTControlGTK.cpp> + $<$,$>:effects/VST/VSTControlGTK.h> + $<$,$>:effects/VST/VSTControlMSW.cpp> + $<$,$>:effects/VST/VSTControlMSW.h> + $<$,$>:effects/VST/VSTControlOSX.h> + $<$,$>:effects/VST/VSTControlOSX.mm> + + # Audio Unit Effects + + $<$,$>:effects/audiounits/AUControl.h> + $<$,$>:effects/audiounits/AUControl.mm> + $<$,$>:effects/audiounits/AudioUnitEffect.cpp> + $<$,$>:effects/audiounits/AudioUnitEffect.h> + + # Ladspa Effects + + $<$:effects/ladspa/LadspaEffect.cpp> + $<$:effects/ladspa/LadspaEffect.h> + $<$:effects/ladspa/ladspa.h> + + # LV2 Effects + + $<$:effects/lv2/LV2Effect.cpp> + $<$:effects/lv2/LV2Effect.h> + $<$:effects/lv2/LoadLV2.cpp> + $<$:effects/lv2/LoadLV2.h> + $<$:effects/lv2/NativeWindow.h> + $<$:effects/lv2/lv2_external_ui.h> + $<$:effects/lv2/zix/common.h> + $<$:effects/lv2/zix/ring.cpp> + $<$:effects/lv2/zix/ring.h> + + # Nyquist Effects + + $<$:effects/nyquist/LoadNyquist.cpp> + $<$:effects/nyquist/LoadNyquist.h> + $<$:effects/nyquist/Nyquist.cpp> + $<$:effects/nyquist/Nyquist.h> + + # VAMP Effects + + $<$:effects/vamp/LoadVamp.cpp> + $<$:effects/vamp/LoadVamp.h> + $<$:effects/vamp/VampEffect.cpp> + $<$:effects/vamp/VampEffect.h> + + # Export + + export/Export.cpp + export/Export.h + + # Standard exporters + export/ExportCL.cpp + export/ExportMP3.cpp + export/ExportMP3.h + export/ExportMultiple.cpp + export/ExportMultiple.h + export/ExportPCM.cpp -# Needed for configwin.h included by Audacity.h -include_directories(${top_dir}/win) + # Optional exporters + $<$:export/ExportFFmpeg.cpp> + $<$:export/ExportFFmpegDialogs.cpp> + $<$:export/ExportFFmpegDialogs.h> + $<$:export/ExportFLAC.cpp> + $<$:export/ExportMP2.cpp> + $<$:export/ExportOGG.cpp> -#include_directories(${top_dir}/lib-src/) -include_directories(${top_dir}/include) -include_directories(${top_dir}/src) # for AudacityHeaders.h -include_directories(${top_dir}/lib-src/expat/lib) -include_directories(${top_dir}/lib-src/FileDialog) -include_directories(${top_dir}/lib-src/FileDialog/win) -include_directories(${top_dir}/lib-src/ffmpeg) -include_directories(${top_dir}/lib-src/ffmpeg/win32) -include_directories(${top_dir}/lib-src/lib-widget-extra) -include_directories(${top_dir}/lib-src/libid3tag) #for id3tag.h -include_directories(${top_dir}/lib-src/libmad/msvc++) -include_directories(${top_dir}/lib-src/libmad) -include_directories(${top_dir}/lib-src/libnyquist) -include_directories(${top_dir}/lib-src/libogg/include) -include_directories(${top_dir}/lib-src/libscorealign) -include_directories(${top_dir}/win/Projects/libsndfile) -include_directories(${top_dir}/lib-src/libsoxr/src) #really? Src? -include_directories(${top_dir}/lib-src/libvamp) -include_directories(${top_dir}/lib-src/libvorbis/include) -include_directories(${top_dir}/lib-src/lib-widget-extra) -include_directories(${top_dir}/lib-src/portmixer/include) -include_directories(${top_dir}/lib-src/portsmf) -include_directories(${top_dir}/lib-src/sbsms/include) -include_directories(${top_dir}/lib-src/soundtouch/include) -include_directories(${top_dir}/lib-src/twolame/libtwolame) -include_directories(${top_dir}/lib-src/portmidi/pm_common) -include_directories(${top_dir}/lib-src/portmidi/porttime) -include_directories(${top_dir}/lib-src/lv2/lilv) -include_directories(${top_dir}/lib-src/lv2/lv2) -include_directories(${top_dir}/lib-src/lv2/suil) -include_directories(${top_dir}/lib-src/lame) + # Import -#if(MSVC) - add_definitions(/FI"AudacityHeaders.h") -#else() - # GCC or Clang -# add_definitions(-include AudacityHeaders.h) -#endif() + import/FormatClassifier.cpp + import/FormatClassifier.h + import/Import.cpp + import/Import.h + import/ImportForwards.h + import/MultiFormatReader.cpp + import/MultiFormatReader.h + import/RawAudioGuess.cpp + import/RawAudioGuess.h + import/SpecPowerMeter.cpp + import/SpecPowerMeter.h + # Standard importers + import/ImportLOF.cpp + import/ImportPCM.cpp + import/ImportPlugin.h + import/ImportRaw.cpp + import/ImportRaw.h + # Optional importers -# Consider moving many of these # defines to Audacity.h. -# disable warning of insecure functions like getEnv -add_definitions( -D_CRT_SECURE_NO_WARNINGS ) + $<$:import/ImportFFmpeg.cpp> + $<$:import/ImportFLAC.cpp> + $<$:import/ImportGStreamer.cpp> + $<$:import/ImportMIDI.cpp> + $<$:import/ImportMIDI.h> + $<$:import/ImportMP3.cpp> + $<$:import/ImportOGG.cpp> +# import/ImportQT.cpp -add_definitions( -DBUILDING_AUDACITY ) -add_definitions( -DXML_STATIC ) -add_definitions( -D__STDC_CONSTANT_MACROS ) -add_definitions( -DWXINTL_NO_GETTEXT_MACRO ) -add_definitions( -DWXUSINGDLL ) -add_definitions( -D__WXMSW__ ) -add_definitions( -DwxDEBUG_LEVEL=0 ) -add_definitions( -DNDEBUG ) -add_definitions( -DWIN32 ) -add_definitions( -DSTRICT ) + # Menus + menus/ClipMenus.cpp + menus/EditMenus.cpp + menus/ExtraMenus.cpp + menus/FileMenus.cpp + menus/HelpMenus.cpp + menus/LabelMenus.cpp + menus/NavigationMenus.cpp + menus/PluginMenus.cpp + menus/SelectMenus.cpp + menus/ToolbarMenus.cpp + menus/TrackMenus.cpp + menus/TransportMenus.cpp + menus/ViewMenus.cpp + menus/WindowMenus.cpp + # On demand loading + ondemand/ODComputeSummaryTask.cpp + ondemand/ODComputeSummaryTask.h + ondemand/ODDecodeFFmpegTask.cpp + ondemand/ODDecodeFFmpegTask.h + ondemand/ODDecodeFlacTask.cpp + ondemand/ODDecodeFlacTask.h + ondemand/ODDecodeTask.cpp + ondemand/ODDecodeTask.h + ondemand/ODManager.cpp + ondemand/ODManager.h + ondemand/ODTask.cpp + ondemand/ODTask.h + ondemand/ODTaskThread.cpp + ondemand/ODTaskThread.h + ondemand/ODWaveTrackTaskQueue.cpp + ondemand/ODWaveTrackTaskQueue.h -# disable warning of deprecated features. -# NB we may want this ON for better wx code style. -add_compile_options(/wd4996) + # Preferences + prefs/BatchPrefs.cpp + prefs/BatchPrefs.h + prefs/DevicePrefs.cpp + prefs/DevicePrefs.h + prefs/DirectoriesPrefs.cpp + prefs/DirectoriesPrefs.h + prefs/EffectsPrefs.cpp + prefs/EffectsPrefs.h + prefs/ExtImportPrefs.cpp + prefs/ExtImportPrefs.h + prefs/GUIPrefs.cpp + prefs/GUIPrefs.h + prefs/GUISettings.h + prefs/ImportExportPrefs.cpp + prefs/ImportExportPrefs.h + prefs/KeyConfigPrefs.cpp + prefs/KeyConfigPrefs.h + prefs/LibraryPrefs.cpp + prefs/LibraryPrefs.h + prefs/MidiIOPrefs.cpp + prefs/MidiIOPrefs.h + prefs/ModulePrefs.cpp + prefs/ModulePrefs.h + prefs/MousePrefs.cpp + prefs/MousePrefs.h + prefs/PlaybackPrefs.cpp + prefs/PlaybackPrefs.h + prefs/PrefsDialog.cpp + prefs/PrefsDialog.h + prefs/PrefsPanel.h + prefs/ProjectsPrefs.cpp + prefs/ProjectsPrefs.h + prefs/QualityPrefs.cpp + prefs/QualityPrefs.h + prefs/RecordingPrefs.cpp + prefs/RecordingPrefs.h + prefs/SpectrogramSettings.cpp + prefs/SpectrogramSettings.h + prefs/SpectrumPrefs.cpp + prefs/SpectrumPrefs.h + prefs/ThemePrefs.cpp + prefs/ThemePrefs.h + prefs/TracksBehaviorsPrefs.cpp + prefs/TracksBehaviorsPrefs.h + prefs/TracksPrefs.cpp + prefs/TracksPrefs.h + prefs/WarningsPrefs.cpp + prefs/WarningsPrefs.h + prefs/WaveformPrefs.cpp + prefs/WaveformPrefs.h + prefs/WaveformSettings.cpp + prefs/WaveformSettings.h + # Toolbars + toolbars/ControlToolBar.cpp + toolbars/ControlToolBar.h + toolbars/DeviceToolBar.cpp + toolbars/DeviceToolBar.h + toolbars/EditToolBar.cpp + toolbars/EditToolBar.h + toolbars/MeterToolBar.cpp + toolbars/MeterToolBar.h + toolbars/MixerToolBar.cpp + toolbars/MixerToolBar.h + toolbars/ScrubbingToolBar.cpp + toolbars/ScrubbingToolBar.h + toolbars/SelectionBar.cpp + toolbars/SelectionBar.h + toolbars/SelectionBarListener.h + toolbars/SpectralSelectionBar.cpp + toolbars/SpectralSelectionBar.h + toolbars/SpectralSelectionBarListener.h + toolbars/TimerToolBar.cpp + toolbars/TimerToolBar.h + toolbars/ToolBar.cpp + toolbars/ToolBar.h + toolbars/ToolDock.cpp + toolbars/ToolDock.h + toolbars/ToolManager.cpp + toolbars/ToolManager.h + toolbars/ToolsToolBar.cpp + toolbars/ToolsToolBar.h + toolbars/TranscriptionToolBar.cpp + toolbars/TranscriptionToolBar.h -set( SOURCE - ${CMAKE_SOURCE_DIRECTORY}AudacityHeaders.cpp #first so cotire can precompile - ${CMAKE_SOURCE_DIRECTORY}AboutDialog.cpp - ${CMAKE_SOURCE_DIRECTORY}AColor.cpp - ${CMAKE_SOURCE_DIRECTORY}AudacityApp.cpp - ${CMAKE_SOURCE_DIRECTORY}AudacityException.cpp - ${CMAKE_SOURCE_DIRECTORY}AudacityLogger.cpp - ${CMAKE_SOURCE_DIRECTORY}AudioIO.cpp - ${CMAKE_SOURCE_DIRECTORY}AutoRecovery.cpp - ${CMAKE_SOURCE_DIRECTORY}BatchCommandDialog.cpp - ${CMAKE_SOURCE_DIRECTORY}BatchCommands.cpp - ${CMAKE_SOURCE_DIRECTORY}BatchProcessDialog.cpp - ${CMAKE_SOURCE_DIRECTORY}Benchmark.cpp - ${CMAKE_SOURCE_DIRECTORY}BlockFile.cpp - #${CMAKE_SOURCE_DIRECTORY}CrossFade.cpp # abandoned code. - ${CMAKE_SOURCE_DIRECTORY}Dependencies.cpp - ${CMAKE_SOURCE_DIRECTORY}DeviceChange.cpp - ${CMAKE_SOURCE_DIRECTORY}DeviceManager.cpp - ${CMAKE_SOURCE_DIRECTORY}Diags.cpp - ${CMAKE_SOURCE_DIRECTORY}DirManager.cpp - ${CMAKE_SOURCE_DIRECTORY}Dither.cpp - ${CMAKE_SOURCE_DIRECTORY}Envelope.cpp - ${CMAKE_SOURCE_DIRECTORY}FFmpeg.cpp - ${CMAKE_SOURCE_DIRECTORY}FFT.cpp - ${CMAKE_SOURCE_DIRECTORY}FileException.cpp - ${CMAKE_SOURCE_DIRECTORY}FileFormats.cpp - ${CMAKE_SOURCE_DIRECTORY}FileIO.cpp - ${CMAKE_SOURCE_DIRECTORY}FileNames.cpp - ${CMAKE_SOURCE_DIRECTORY}FreqWindow.cpp - ${CMAKE_SOURCE_DIRECTORY}HelpText.cpp - ${CMAKE_SOURCE_DIRECTORY}HistoryWindow.cpp - ${CMAKE_SOURCE_DIRECTORY}ImageManipulation.cpp - ${CMAKE_SOURCE_DIRECTORY}InconsistencyException.cpp - ${CMAKE_SOURCE_DIRECTORY}Internat.cpp - ${CMAKE_SOURCE_DIRECTORY}InterpolateAudio.cpp - ${CMAKE_SOURCE_DIRECTORY}LabelDialog.cpp - ${CMAKE_SOURCE_DIRECTORY}LabelTrack.cpp - ${CMAKE_SOURCE_DIRECTORY}LangChoice.cpp - ${CMAKE_SOURCE_DIRECTORY}Languages.cpp - ${CMAKE_SOURCE_DIRECTORY}Legacy.cpp - ${CMAKE_SOURCE_DIRECTORY}Lyrics.cpp - ${CMAKE_SOURCE_DIRECTORY}LyricsWindow.cpp - ${CMAKE_SOURCE_DIRECTORY}Matrix.cpp - ${CMAKE_SOURCE_DIRECTORY}Menus.cpp - ${CMAKE_SOURCE_DIRECTORY}#MenusMac.cpp # Not wanted on Windows. - ${CMAKE_SOURCE_DIRECTORY}Mix.cpp - ${CMAKE_SOURCE_DIRECTORY}MixerBoard.cpp - ${CMAKE_SOURCE_DIRECTORY}ModuleManager.cpp - ${CMAKE_SOURCE_DIRECTORY}NoteTrack.cpp - ${CMAKE_SOURCE_DIRECTORY}PitchName.cpp - ${CMAKE_SOURCE_DIRECTORY}PlatformCompatibility.cpp - ${CMAKE_SOURCE_DIRECTORY}PluginManager.cpp - ${CMAKE_SOURCE_DIRECTORY}Prefs.cpp - ${CMAKE_SOURCE_DIRECTORY}Printing.cpp - ${CMAKE_SOURCE_DIRECTORY}Profiler.cpp - ${CMAKE_SOURCE_DIRECTORY}Project.cpp - ${CMAKE_SOURCE_DIRECTORY}RealFFTf.cpp - ${CMAKE_SOURCE_DIRECTORY}RealFFTf48x.cpp - ${CMAKE_SOURCE_DIRECTORY}Resample.cpp - ${CMAKE_SOURCE_DIRECTORY}RingBuffer.cpp - ${CMAKE_SOURCE_DIRECTORY}SampleFormat.cpp - ${CMAKE_SOURCE_DIRECTORY}Screenshot.cpp - ${CMAKE_SOURCE_DIRECTORY}SelectedRegion.cpp - ${CMAKE_SOURCE_DIRECTORY}SelectionState.cpp - ${CMAKE_SOURCE_DIRECTORY}Sequence.cpp - ${CMAKE_SOURCE_DIRECTORY}Shuttle.cpp - ${CMAKE_SOURCE_DIRECTORY}ShuttleGui.cpp - ${CMAKE_SOURCE_DIRECTORY}ShuttlePrefs.cpp - ${CMAKE_SOURCE_DIRECTORY}Snap.cpp - ${CMAKE_SOURCE_DIRECTORY}SoundActivatedRecord.cpp - ${CMAKE_SOURCE_DIRECTORY}Spectrum.cpp - ${CMAKE_SOURCE_DIRECTORY}SplashDialog.cpp - ${CMAKE_SOURCE_DIRECTORY}SseMathFuncs.cpp - ${CMAKE_SOURCE_DIRECTORY}Tags.cpp - ${CMAKE_SOURCE_DIRECTORY}Theme.cpp - ${CMAKE_SOURCE_DIRECTORY}TimeDialog.cpp - ${CMAKE_SOURCE_DIRECTORY}TimerRecordDialog.cpp - ${CMAKE_SOURCE_DIRECTORY}TimeTrack.cpp - ${CMAKE_SOURCE_DIRECTORY}Track.cpp - ${CMAKE_SOURCE_DIRECTORY}TrackArtist.cpp - ${CMAKE_SOURCE_DIRECTORY}TrackPanel.cpp - ${CMAKE_SOURCE_DIRECTORY}TrackPanelAx.cpp - ${CMAKE_SOURCE_DIRECTORY}TrackPanelResizeHandle.cpp - ${CMAKE_SOURCE_DIRECTORY}TrackPanelResizerCell.cpp - ${CMAKE_SOURCE_DIRECTORY}UIHandle.cpp - ${CMAKE_SOURCE_DIRECTORY}UndoManager.cpp - ${CMAKE_SOURCE_DIRECTORY}UserException.cpp - ${CMAKE_SOURCE_DIRECTORY}ViewInfo.cpp - ${CMAKE_SOURCE_DIRECTORY}VoiceKey.cpp - ${CMAKE_SOURCE_DIRECTORY}WaveClip.cpp - ${CMAKE_SOURCE_DIRECTORY}WaveTrack.cpp - ${CMAKE_SOURCE_DIRECTORY}WrappedType.cpp - #An anomoly - a source file plucked from a lib. - ${top_dir}/lib-src/lib-widget-extra/NonGuiThread.cpp + # Tracks + + tracks/labeltrack/ui/LabelDefaultClickHandle.cpp + tracks/labeltrack/ui/LabelDefaultClickHandle.h + tracks/labeltrack/ui/LabelGlyphHandle.cpp + tracks/labeltrack/ui/LabelGlyphHandle.h + tracks/labeltrack/ui/LabelTextHandle.cpp + tracks/labeltrack/ui/LabelTextHandle.h + tracks/labeltrack/ui/LabelTrackControls.cpp + tracks/labeltrack/ui/LabelTrackControls.h + tracks/labeltrack/ui/LabelTrackVRulerControls.cpp + tracks/labeltrack/ui/LabelTrackVRulerControls.h + tracks/labeltrack/ui/LabelTrackView.cpp + tracks/labeltrack/ui/LabelTrackView.h + tracks/playabletrack/notetrack/ui/NoteTrackButtonHandle.cpp + tracks/playabletrack/notetrack/ui/NoteTrackButtonHandle.h + tracks/playabletrack/notetrack/ui/NoteTrackControls.cpp + tracks/playabletrack/notetrack/ui/NoteTrackControls.h + tracks/playabletrack/notetrack/ui/NoteTrackSliderHandles.cpp + tracks/playabletrack/notetrack/ui/NoteTrackSliderHandles.h + tracks/playabletrack/notetrack/ui/NoteTrackVRulerControls.cpp + tracks/playabletrack/notetrack/ui/NoteTrackVRulerControls.h + tracks/playabletrack/notetrack/ui/NoteTrackVZoomHandle.cpp + tracks/playabletrack/notetrack/ui/NoteTrackVZoomHandle.h + tracks/playabletrack/notetrack/ui/NoteTrackView.cpp + tracks/playabletrack/notetrack/ui/NoteTrackView.h + tracks/playabletrack/notetrack/ui/StretchHandle.cpp + tracks/playabletrack/notetrack/ui/StretchHandle.h + tracks/playabletrack/ui/PlayableTrackButtonHandles.cpp + tracks/playabletrack/ui/PlayableTrackButtonHandles.h + tracks/playabletrack/ui/PlayableTrackControls.cpp + tracks/playabletrack/ui/PlayableTrackControls.h + tracks/playabletrack/wavetrack/ui/CutlineHandle.cpp + tracks/playabletrack/wavetrack/ui/CutlineHandle.h + tracks/playabletrack/wavetrack/ui/SampleHandle.cpp + tracks/playabletrack/wavetrack/ui/SampleHandle.h + tracks/playabletrack/wavetrack/ui/SpectrumVRulerControls.cpp + tracks/playabletrack/wavetrack/ui/SpectrumVRulerControls.h + tracks/playabletrack/wavetrack/ui/SpectrumVZoomHandle.cpp + tracks/playabletrack/wavetrack/ui/SpectrumVZoomHandle.h + tracks/playabletrack/wavetrack/ui/SpectrumView.cpp + tracks/playabletrack/wavetrack/ui/SpectrumView.h + tracks/playabletrack/wavetrack/ui/WaveTrackControls.cpp + tracks/playabletrack/wavetrack/ui/WaveTrackControls.h + tracks/playabletrack/wavetrack/ui/WaveTrackSliderHandles.cpp + tracks/playabletrack/wavetrack/ui/WaveTrackSliderHandles.h + tracks/playabletrack/wavetrack/ui/WaveTrackVRulerControls.cpp + tracks/playabletrack/wavetrack/ui/WaveTrackVRulerControls.h + tracks/playabletrack/wavetrack/ui/WaveTrackVZoomHandle.cpp + tracks/playabletrack/wavetrack/ui/WaveTrackVZoomHandle.h + tracks/playabletrack/wavetrack/ui/WaveTrackView.cpp + tracks/playabletrack/wavetrack/ui/WaveTrackView.h + tracks/playabletrack/wavetrack/ui/WaveTrackViewConstants.cpp + tracks/playabletrack/wavetrack/ui/WaveTrackViewConstants.h + tracks/playabletrack/wavetrack/ui/WaveformVRulerControls.cpp + tracks/playabletrack/wavetrack/ui/WaveformVRulerControls.h + tracks/playabletrack/wavetrack/ui/WaveformVZoomHandle.cpp + tracks/playabletrack/wavetrack/ui/WaveformVZoomHandle.h + tracks/playabletrack/wavetrack/ui/WaveformView.cpp + tracks/playabletrack/wavetrack/ui/WaveformView.h + tracks/timetrack/ui/TimeTrackControls.cpp + tracks/timetrack/ui/TimeTrackControls.h + tracks/timetrack/ui/TimeTrackVRulerControls.cpp + tracks/timetrack/ui/TimeTrackVRulerControls.h + tracks/timetrack/ui/TimeTrackView.cpp + tracks/timetrack/ui/TimeTrackView.h + + # Tracks UI + + tracks/ui/BackgroundCell.cpp + tracks/ui/BackgroundCell.h + tracks/ui/ButtonHandle.cpp + tracks/ui/ButtonHandle.h + tracks/ui/CommonTrackControls.cpp + tracks/ui/CommonTrackControls.h + tracks/ui/CommonTrackPanelCell.cpp + tracks/ui/CommonTrackPanelCell.h + tracks/ui/CommonTrackView.cpp + tracks/ui/CommonTrackView.h + tracks/ui/EditCursorOverlay.cpp + tracks/ui/EditCursorOverlay.h + tracks/ui/EnvelopeHandle.cpp + tracks/ui/EnvelopeHandle.h + tracks/ui/PlayIndicatorOverlay.cpp + tracks/ui/PlayIndicatorOverlay.h + tracks/ui/ScrubUI.cpp + tracks/ui/ScrubUI.h + tracks/ui/Scrubbing.cpp + tracks/ui/Scrubbing.h + tracks/ui/SelectHandle.cpp + tracks/ui/SelectHandle.h + tracks/ui/SliderHandle.cpp + tracks/ui/SliderHandle.h + tracks/ui/TimeShiftHandle.cpp + tracks/ui/TimeShiftHandle.h + tracks/ui/TrackButtonHandles.cpp + tracks/ui/TrackButtonHandles.h + tracks/ui/TrackControls.cpp + tracks/ui/TrackControls.h + tracks/ui/TrackSelectHandle.cpp + tracks/ui/TrackSelectHandle.h + tracks/ui/TrackVRulerControls.cpp + tracks/ui/TrackVRulerControls.h + tracks/ui/TrackView.cpp + tracks/ui/TrackView.h + tracks/ui/ZoomHandle.cpp + tracks/ui/ZoomHandle.h + + # Widgets + + widgets/AButton.cpp + widgets/AButton.h + widgets/ASlider.cpp + widgets/ASlider.h + widgets/AttachableScrollBar.cpp + widgets/AttachableScrollBar.h + widgets/AudacityMessageBox.cpp + widgets/AudacityMessageBox.h + widgets/BackedPanel.cpp + widgets/BackedPanel.h + widgets/ErrorDialog.cpp + widgets/ErrorDialog.h + widgets/ExpandingToolBar.cpp + widgets/ExpandingToolBar.h + widgets/FileHistory.cpp + widgets/FileHistory.h + widgets/Grabber.cpp + widgets/Grabber.h + widgets/Grid.cpp + widgets/Grid.h + widgets/HelpSystem.cpp + widgets/HelpSystem.h + widgets/HtmlWindow.cpp + widgets/HtmlWindow.h + widgets/ImageRoll.cpp + widgets/ImageRoll.h + widgets/KeyView.cpp + widgets/KeyView.h + widgets/Meter.cpp + widgets/Meter.h + widgets/MeterPanelBase.cpp + widgets/MeterPanelBase.h + widgets/MultiDialog.cpp + widgets/MultiDialog.h + widgets/NumericTextCtrl.cpp + widgets/NumericTextCtrl.h + widgets/Overlay.cpp + widgets/Overlay.h + widgets/OverlayPanel.cpp + widgets/OverlayPanel.h + widgets/PopupMenuTable.cpp + widgets/PopupMenuTable.h + widgets/ProgressDialog.cpp + widgets/ProgressDialog.h + widgets/Ruler.cpp + widgets/Ruler.h + widgets/Warning.cpp + widgets/Warning.h + widgets/WindowAccessible.cpp + widgets/WindowAccessible.h + widgets/numformatter.cpp + widgets/numformatter.h + widgets/valnum.cpp + widgets/valnum.h + widgets/wxPanelWrapper.cpp + widgets/wxPanelWrapper.h + + # XML handling + xml/XMLFileReader.cpp + xml/XMLFileReader.h + xml/XMLTagHandler.cpp + xml/XMLTagHandler.h + xml/XMLWriter.cpp + xml/XMLWriter.h + xml/audacityproject.dtd ) -# We're not yet adding each subdirectory. -# instead we do what we would do there here. -#add_subdirectory( blockfile ) -set( BLOCKFILE_SOURCE - ${CMAKE_SOURCE_DIRECTORY}blockfile/LegacyAliasBlockFile.cpp - ${CMAKE_SOURCE_DIRECTORY}blockfile/LegacyBlockFile.cpp - ${CMAKE_SOURCE_DIRECTORY}blockfile/NotYetAvailableException.cpp - ${CMAKE_SOURCE_DIRECTORY}blockfile/ODDecodeBlockFile.cpp - ${CMAKE_SOURCE_DIRECTORY}blockfile/ODPCMAliasBlockFile.cpp - ${CMAKE_SOURCE_DIRECTORY}blockfile/PCMAliasBlockFile.cpp - ${CMAKE_SOURCE_DIRECTORY}blockfile/SilentBlockFile.cpp - ${CMAKE_SOURCE_DIRECTORY}blockfile/SimpleBlockFile.cpp +# +# +# +list( APPEND HEADERS + ../include/audacity/EffectInterface.h + ../include/audacity/Types.h + ../include/audacity/ConfigInterface.h + ../include/audacity/ModuleInterface.h + ../include/audacity/PluginInterface.h + ../include/audacity/ComponentInterface.h + ../include/audacity/EffectAutomationParameters.h + ../include/audacity/ImporterInterface.h ) -source_group( blockfile FILES ${BLOCKFILE_SOURCE} ) - -#add_subdirectory( commands ) -set( COMMANDS_SOURCE - ${CMAKE_SOURCE_DIRECTORY}commands/AppCommandEvent.cpp - ${CMAKE_SOURCE_DIRECTORY}commands/AudacityCommand.cpp - ${CMAKE_SOURCE_DIRECTORY}commands/BatchEvalCommand.cpp - ${CMAKE_SOURCE_DIRECTORY}commands/Command.cpp - ${CMAKE_SOURCE_DIRECTORY}commands/CommandBuilder.cpp - ${CMAKE_SOURCE_DIRECTORY}commands/CommandContext.cpp - ${CMAKE_SOURCE_DIRECTORY}commands/CommandDirectory.cpp - ${CMAKE_SOURCE_DIRECTORY}commands/CommandHandler.cpp - ${CMAKE_SOURCE_DIRECTORY}commands/CommandManager.cpp - ${CMAKE_SOURCE_DIRECTORY}commands/CommandSignature.cpp - ${CMAKE_SOURCE_DIRECTORY}commands/CommandTargets.cpp - ${CMAKE_SOURCE_DIRECTORY}commands/CommandType.cpp - ${CMAKE_SOURCE_DIRECTORY}commands/CompareAudioCommand.cpp - ${CMAKE_SOURCE_DIRECTORY}commands/Demo.cpp - ${CMAKE_SOURCE_DIRECTORY}commands/DragCommand.cpp - ${CMAKE_SOURCE_DIRECTORY}commands/GetInfoCommand.cpp - ${CMAKE_SOURCE_DIRECTORY}commands/GetTrackInfoCommand.cpp - ${CMAKE_SOURCE_DIRECTORY}commands/HelpCommand.cpp - ${CMAKE_SOURCE_DIRECTORY}commands/ImportExportCommands.cpp - ${CMAKE_SOURCE_DIRECTORY}commands/Keyboard.cpp - ${CMAKE_SOURCE_DIRECTORY}commands/LoadCommands.cpp - ${CMAKE_SOURCE_DIRECTORY}commands/MessageCommand.cpp - ${CMAKE_SOURCE_DIRECTORY}commands/OpenSaveCommands.cpp - ${CMAKE_SOURCE_DIRECTORY}commands/PreferenceCommands.cpp - ${CMAKE_SOURCE_DIRECTORY}commands/ResponseQueue.cpp - ${CMAKE_SOURCE_DIRECTORY}commands/ScreenshotCommand.cpp - ${CMAKE_SOURCE_DIRECTORY}commands/ScriptCommandRelay.cpp - ${CMAKE_SOURCE_DIRECTORY}commands/SelectCommand.cpp - ${CMAKE_SOURCE_DIRECTORY}commands/SetClipCommand.cpp - ${CMAKE_SOURCE_DIRECTORY}commands/SetEnvelopeCommand.cpp - ${CMAKE_SOURCE_DIRECTORY}commands/SetLabelCommand.cpp - ${CMAKE_SOURCE_DIRECTORY}commands/SetProjectCommand.cpp - ${CMAKE_SOURCE_DIRECTORY}commands/SetTrackInfoCommand.cpp +# +# +# +list( APPEND INCLUDES + PRIVATE + ${CMAKE_CURRENT_BINARY_DIR}/private + ${topdir}/lib-src/lib-widget-extra + ${topdir}/include + ${TARGET_ROOT} ) -source_group( commands FILES ${COMMANDS_SOURCE} ) -#add_subdirectory( effects ) -set( EFFECTS_SOURCE - ${CMAKE_SOURCE_DIRECTORY}effects/Amplify.cpp - ${CMAKE_SOURCE_DIRECTORY}effects/AutoDuck.cpp - ${CMAKE_SOURCE_DIRECTORY}effects/BassTreble.cpp - ${CMAKE_SOURCE_DIRECTORY}effects/Biquad.cpp - ${CMAKE_SOURCE_DIRECTORY}effects/ChangePitch.cpp - ${CMAKE_SOURCE_DIRECTORY}effects/ChangeSpeed.cpp - ${CMAKE_SOURCE_DIRECTORY}effects/ChangeTempo.cpp - ${CMAKE_SOURCE_DIRECTORY}effects/ClickRemoval.cpp - ${CMAKE_SOURCE_DIRECTORY}effects/Compressor.cpp - ${CMAKE_SOURCE_DIRECTORY}effects/Contrast.cpp - ${CMAKE_SOURCE_DIRECTORY}effects/Distortion.cpp - ${CMAKE_SOURCE_DIRECTORY}effects/DtmfGen.cpp - ${CMAKE_SOURCE_DIRECTORY}effects/EBUR128.cpp - ${CMAKE_SOURCE_DIRECTORY}effects/Echo.cpp - ${CMAKE_SOURCE_DIRECTORY}effects/Effect.cpp - ${CMAKE_SOURCE_DIRECTORY}effects/EffectManager.cpp - ${CMAKE_SOURCE_DIRECTORY}effects/EffectRack.cpp - ${CMAKE_SOURCE_DIRECTORY}effects/Equalization.cpp - ${CMAKE_SOURCE_DIRECTORY}effects/Equalization48x.cpp - ${CMAKE_SOURCE_DIRECTORY}effects/Fade.cpp - ${CMAKE_SOURCE_DIRECTORY}effects/FindClipping.cpp - ${CMAKE_SOURCE_DIRECTORY}effects/Generator.cpp - ${CMAKE_SOURCE_DIRECTORY}effects/Invert.cpp - ${CMAKE_SOURCE_DIRECTORY}effects/Leveller.cpp - ${CMAKE_SOURCE_DIRECTORY}effects/LoadEffects.cpp - ${CMAKE_SOURCE_DIRECTORY}effects/Loudness.cpp - ${CMAKE_SOURCE_DIRECTORY}effects/Noise.cpp - ${CMAKE_SOURCE_DIRECTORY}effects/NoiseReduction.cpp - ${CMAKE_SOURCE_DIRECTORY}effects/NoiseRemoval.cpp - ${CMAKE_SOURCE_DIRECTORY}effects/Normalize.cpp - ${CMAKE_SOURCE_DIRECTORY}effects/Paulstretch.cpp - ${CMAKE_SOURCE_DIRECTORY}effects/Phaser.cpp - ${CMAKE_SOURCE_DIRECTORY}effects/Repair.cpp - ${CMAKE_SOURCE_DIRECTORY}effects/Repeat.cpp - ${CMAKE_SOURCE_DIRECTORY}effects/Reverb.cpp - ${CMAKE_SOURCE_DIRECTORY}effects/Reverse.cpp - ${CMAKE_SOURCE_DIRECTORY}effects/SBSMSEffect.cpp - ${CMAKE_SOURCE_DIRECTORY}effects/ScienFilter.cpp - ${CMAKE_SOURCE_DIRECTORY}effects/ScoreAlignDialog.cpp - ${CMAKE_SOURCE_DIRECTORY}effects/Silence.cpp - ${CMAKE_SOURCE_DIRECTORY}effects/SimpleMono.cpp - ${CMAKE_SOURCE_DIRECTORY}effects/SoundTouchEffect.cpp - ${CMAKE_SOURCE_DIRECTORY}effects/StereoToMono.cpp - ${CMAKE_SOURCE_DIRECTORY}effects/TimeScale.cpp - ${CMAKE_SOURCE_DIRECTORY}effects/TimeWarper.cpp - ${CMAKE_SOURCE_DIRECTORY}effects/ToneGen.cpp - ${CMAKE_SOURCE_DIRECTORY}effects/TruncSilence.cpp - ${CMAKE_SOURCE_DIRECTORY}effects/TwoPassSimpleMono.cpp - ${CMAKE_SOURCE_DIRECTORY}effects/Wahwah.cpp - ${CMAKE_SOURCE_DIRECTORY}effects/audiounits/AudioUnitEffect.cpp - ${CMAKE_SOURCE_DIRECTORY}effects/ladspa/LadspaEffect.cpp - ${CMAKE_SOURCE_DIRECTORY}effects/lv2/LoadLV2.cpp - ${CMAKE_SOURCE_DIRECTORY}effects/lv2/LV2Effect.cpp - ${CMAKE_SOURCE_DIRECTORY}effects/nyquist/LoadNyquist.cpp - ${CMAKE_SOURCE_DIRECTORY}effects/nyquist/Nyquist.cpp - ${CMAKE_SOURCE_DIRECTORY}effects/vamp/LoadVamp.cpp - ${CMAKE_SOURCE_DIRECTORY}effects/vamp/VampEffect.cpp - #${CMAKE_SOURCE_DIRECTORY}effects/VST/VSTControlGTK.cpp #Not for Windows. - ${CMAKE_SOURCE_DIRECTORY}effects/VST/VSTControlMSW.cpp - ${CMAKE_SOURCE_DIRECTORY}effects/VST/VSTEffect.cpp +# +# +# +list( APPEND RESOURCES + $<$:../win/audacity.rc> + $<$:../win/packages.config> ) -source_group( effects FILES ${EFFECTS_SOURCE} ) -#add_subdirectory( export ) -set( EXPORT_SOURCE - ${CMAKE_SOURCE_DIRECTORY}export/Export.cpp - ${CMAKE_SOURCE_DIRECTORY}export/ExportCL.cpp - ${CMAKE_SOURCE_DIRECTORY}export/ExportFFmpeg.cpp - ${CMAKE_SOURCE_DIRECTORY}export/ExportFFmpegDialogs.cpp - ${CMAKE_SOURCE_DIRECTORY}export/ExportFLAC.cpp - ${CMAKE_SOURCE_DIRECTORY}export/ExportMP2.cpp - ${CMAKE_SOURCE_DIRECTORY}export/ExportMP3.cpp - ${CMAKE_SOURCE_DIRECTORY}export/ExportMultiple.cpp - ${CMAKE_SOURCE_DIRECTORY}export/ExportOGG.cpp - ${CMAKE_SOURCE_DIRECTORY}export/ExportPCM.cpp +# +# Get those pesky CMake files out of the way (on Windows) +# +source_group( + TREE + "${_INTDIR}" + PREFIX + "CMake" + FILES + ${_INTDIR}/CMakeFiles/Audacity.dir/cmake_pch.cxx + ${_INTDIR}/CMakeFiles/Audacity.dir/cmake_pch.hxx ) -source_group( export FILES ${EXPORT_SOURCE} ) -#add_subdirectory( import ) -set( IMPORT_SOURCE - ${CMAKE_SOURCE_DIRECTORY}import/FormatClassifier.cpp - ${CMAKE_SOURCE_DIRECTORY}import/Import.cpp - ${CMAKE_SOURCE_DIRECTORY}import/ImportFFmpeg.cpp - ${CMAKE_SOURCE_DIRECTORY}import/ImportFLAC.cpp - ${CMAKE_SOURCE_DIRECTORY}import/ImportGStreamer.cpp - ${CMAKE_SOURCE_DIRECTORY}import/ImportLOF.cpp - ${CMAKE_SOURCE_DIRECTORY}import/ImportMIDI.cpp - ${CMAKE_SOURCE_DIRECTORY}import/ImportMP3.cpp - ${CMAKE_SOURCE_DIRECTORY}import/ImportOGG.cpp - ${CMAKE_SOURCE_DIRECTORY}import/ImportPCM.cpp - ${CMAKE_SOURCE_DIRECTORY}import/ImportQT.cpp - ${CMAKE_SOURCE_DIRECTORY}import/ImportRaw.cpp - ${CMAKE_SOURCE_DIRECTORY}import/MultiFormatReader.cpp - ${CMAKE_SOURCE_DIRECTORY}import/RawAudioGuess.cpp - ${CMAKE_SOURCE_DIRECTORY}import/SpecPowerMeter.cpp +# +# +# +list( APPEND DEFINES + PRIVATE + BUILDING_AUDACITY + XML_STATIC + wxDEBUG_LEVEL=0 + WXINTL_NO_GETTEXT_MACRO + WXUSINGDLL + $<$: + _CRT_SECURE_NO_WARNINGS + __STDC_CONSTANT_MACROS + __WXMSW__ + NDEBUG + WIN32 + STRICT + > ) -source_group( import FILES ${IMPORT_SOURCE} ) -#add_subdirectory( ondemand ) -set( ONDEMAND_SOURCE - ${CMAKE_SOURCE_DIRECTORY}ondemand/ODComputeSummaryTask.cpp - ${CMAKE_SOURCE_DIRECTORY}ondemand/ODDecodeFFmpegTask.cpp - ${CMAKE_SOURCE_DIRECTORY}ondemand/ODDecodeFlacTask.cpp - ${CMAKE_SOURCE_DIRECTORY}ondemand/ODDecodeTask.cpp - ${CMAKE_SOURCE_DIRECTORY}ondemand/ODManager.cpp - ${CMAKE_SOURCE_DIRECTORY}ondemand/ODTask.cpp - ${CMAKE_SOURCE_DIRECTORY}ondemand/ODTaskThread.cpp - ${CMAKE_SOURCE_DIRECTORY}ondemand/ODWaveTrackTaskQueue.cpp +list( APPEND OPTIONS + PRIVATE + -std=c++11 + $<$:-stdlib=libc++> + $<$:/permissive-> +# $<$:-Wl,-rpath -Wl,${_RPATH}> ) -source_group( ondemand FILES ${ONDEMAND_SOURCE} ) -#add_subdirectory( prefs ) -set( PREFS_SOURCE - ${CMAKE_SOURCE_DIRECTORY}prefs/BatchPrefs.cpp - ${CMAKE_SOURCE_DIRECTORY}prefs/DevicePrefs.cpp - ${CMAKE_SOURCE_DIRECTORY}prefs/DirectoriesPrefs.cpp - ${CMAKE_SOURCE_DIRECTORY}prefs/EffectsPrefs.cpp - ${CMAKE_SOURCE_DIRECTORY}prefs/ExtImportPrefs.cpp - ${CMAKE_SOURCE_DIRECTORY}prefs/GUIPrefs.cpp - ${CMAKE_SOURCE_DIRECTORY}prefs/ImportExportPrefs.cpp - ${CMAKE_SOURCE_DIRECTORY}prefs/KeyConfigPrefs.cpp - ${CMAKE_SOURCE_DIRECTORY}prefs/LibraryPrefs.cpp - ${CMAKE_SOURCE_DIRECTORY}prefs/MidiIOPrefs.cpp - ${CMAKE_SOURCE_DIRECTORY}prefs/ModulePrefs.cpp - ${CMAKE_SOURCE_DIRECTORY}prefs/MousePrefs.cpp - ${CMAKE_SOURCE_DIRECTORY}prefs/PlaybackPrefs.cpp - ${CMAKE_SOURCE_DIRECTORY}prefs/PrefsDialog.cpp - ${CMAKE_SOURCE_DIRECTORY}prefs/ProjectsPrefs.cpp - ${CMAKE_SOURCE_DIRECTORY}prefs/QualityPrefs.cpp - ${CMAKE_SOURCE_DIRECTORY}prefs/RecordingPrefs.cpp - ${CMAKE_SOURCE_DIRECTORY}prefs/SpectrogramSettings.cpp - ${CMAKE_SOURCE_DIRECTORY}prefs/SpectrumPrefs.cpp - ${CMAKE_SOURCE_DIRECTORY}prefs/ThemePrefs.cpp - ${CMAKE_SOURCE_DIRECTORY}prefs/TracksBehaviorsPrefs.cpp - ${CMAKE_SOURCE_DIRECTORY}prefs/TracksPrefs.cpp - ${CMAKE_SOURCE_DIRECTORY}prefs/WarningsPrefs.cpp - ${CMAKE_SOURCE_DIRECTORY}prefs/WaveformPrefs.cpp - ${CMAKE_SOURCE_DIRECTORY}prefs/WaveformSettings.cpp +list( APPEND FEATURES + PRIVATE + cxx_std_11 ) -source_group( prefs FILES ${PREFS_SOURCE} ) -#add_subdirectory( toolbars ) -set( TOOLBARS_SOURCE - ${CMAKE_SOURCE_DIRECTORY}toolbars/ControlToolBar.cpp - ${CMAKE_SOURCE_DIRECTORY}toolbars/DeviceToolBar.cpp - ${CMAKE_SOURCE_DIRECTORY}toolbars/EditToolBar.cpp - ${CMAKE_SOURCE_DIRECTORY}toolbars/MeterToolBar.cpp - ${CMAKE_SOURCE_DIRECTORY}toolbars/MixerToolBar.cpp - ${CMAKE_SOURCE_DIRECTORY}toolbars/ScrubbingToolBar.cpp - ${CMAKE_SOURCE_DIRECTORY}toolbars/SelectionBar.cpp - ${CMAKE_SOURCE_DIRECTORY}toolbars/SpectralSelectionBar.cpp - ${CMAKE_SOURCE_DIRECTORY}toolbars/TimerToolBar.cpp - ${CMAKE_SOURCE_DIRECTORY}toolbars/ToolBar.cpp - ${CMAKE_SOURCE_DIRECTORY}toolbars/ToolDock.cpp - ${CMAKE_SOURCE_DIRECTORY}toolbars/ToolManager.cpp - ${CMAKE_SOURCE_DIRECTORY}toolbars/ToolsToolBar.cpp - ${CMAKE_SOURCE_DIRECTORY}toolbars/TranscriptionToolBar.cpp +list( APPEND LDFLAGS + PRIVATE + $<$:/MANIFEST:NO> ) -source_group( toolbars FILES ${TOOLBARS_SOURCE} ) -#add_subdirectory( tracks ) -set( TRACKS_SOURCE - ${CMAKE_SOURCE_DIRECTORY}tracks/labeltrack/ui/LabelDefaultClickHandle.cpp - ${CMAKE_SOURCE_DIRECTORY}tracks/labeltrack/ui/LabelGlyphHandle.cpp - ${CMAKE_SOURCE_DIRECTORY}tracks/labeltrack/ui/LabelTextHandle.cpp - ${CMAKE_SOURCE_DIRECTORY}tracks/labeltrack/ui/LabelTrackControls.cpp - ${CMAKE_SOURCE_DIRECTORY}tracks/labeltrack/ui/LabelTrackUI.cpp - ${CMAKE_SOURCE_DIRECTORY}tracks/labeltrack/ui/LabelTrackVRulerControls.cpp - ${CMAKE_SOURCE_DIRECTORY}tracks/playabletrack/notetrack/ui/NoteTrackButtonHandle.cpp - ${CMAKE_SOURCE_DIRECTORY}tracks/playabletrack/notetrack/ui/NoteTrackControls.cpp - ${CMAKE_SOURCE_DIRECTORY}tracks/playabletrack/notetrack/ui/NoteTrackSliderHandles.cpp - ${CMAKE_SOURCE_DIRECTORY}tracks/playabletrack/notetrack/ui/NoteTrackUI.cpp - ${CMAKE_SOURCE_DIRECTORY}tracks/playabletrack/notetrack/ui/NoteTrackVRulerControls.cpp - ${CMAKE_SOURCE_DIRECTORY}tracks/playabletrack/notetrack/ui/NoteTrackVZoomHandle.cpp - ${CMAKE_SOURCE_DIRECTORY}tracks/playabletrack/notetrack/ui/StretchHandle.cpp - ${CMAKE_SOURCE_DIRECTORY}tracks/playabletrack/ui/PlayableTrackButtonHandles.cpp - ${CMAKE_SOURCE_DIRECTORY}tracks/playabletrack/wavetrack/ui/CutlineHandle.cpp - ${CMAKE_SOURCE_DIRECTORY}tracks/playabletrack/wavetrack/ui/SampleHandle.cpp - ${CMAKE_SOURCE_DIRECTORY}tracks/playabletrack/wavetrack/ui/WaveTrackControls.cpp - ${CMAKE_SOURCE_DIRECTORY}tracks/playabletrack/wavetrack/ui/WaveTrackSliderHandles.cpp - ${CMAKE_SOURCE_DIRECTORY}tracks/playabletrack/wavetrack/ui/WaveTrackUI.cpp - ${CMAKE_SOURCE_DIRECTORY}tracks/playabletrack/wavetrack/ui/WaveTrackVRulerControls.cpp - ${CMAKE_SOURCE_DIRECTORY}tracks/playabletrack/wavetrack/ui/WaveTrackVZoomHandle.cpp - ${CMAKE_SOURCE_DIRECTORY}tracks/timetrack/ui/TimeTrackControls.cpp - ${CMAKE_SOURCE_DIRECTORY}tracks/timetrack/ui/TimeTrackUI.cpp - ${CMAKE_SOURCE_DIRECTORY}tracks/timetrack/ui/TimeTrackVRulerControls.cpp - ${CMAKE_SOURCE_DIRECTORY}tracks/ui/BackgroundCell.cpp - ${CMAKE_SOURCE_DIRECTORY}tracks/ui/ButtonHandle.cpp - ${CMAKE_SOURCE_DIRECTORY}tracks/ui/CommonTrackPanelCell.cpp - ${CMAKE_SOURCE_DIRECTORY}tracks/ui/EditCursorOverlay.cpp - ${CMAKE_SOURCE_DIRECTORY}tracks/ui/EnvelopeHandle.cpp - ${CMAKE_SOURCE_DIRECTORY}tracks/ui/PlayIndicatorOverlay.cpp - ${CMAKE_SOURCE_DIRECTORY}tracks/ui/Scrubbing.cpp - ${CMAKE_SOURCE_DIRECTORY}tracks/ui/SelectHandle.cpp - ${CMAKE_SOURCE_DIRECTORY}tracks/ui/SliderHandle.cpp - ${CMAKE_SOURCE_DIRECTORY}tracks/ui/TimeShiftHandle.cpp - ${CMAKE_SOURCE_DIRECTORY}tracks/ui/TrackButtonHandles.cpp - ${CMAKE_SOURCE_DIRECTORY}tracks/ui/TrackControls.cpp - ${CMAKE_SOURCE_DIRECTORY}tracks/ui/TrackSelectHandle.cpp - ${CMAKE_SOURCE_DIRECTORY}tracks/ui/TrackUI.cpp - ${CMAKE_SOURCE_DIRECTORY}tracks/ui/TrackVRulerControls.cpp - ${CMAKE_SOURCE_DIRECTORY}tracks/ui/ZoomHandle.cpp +# +# +# +list( APPEND LIBRARIES + PRIVATE + ${CMAKE_REQUIRED_LIBRARIES} + wxwidgets + FileDialog + expat + lame + libsndfile + libsoxr + lib-widget-extra + portaudio-v19 + $<$:libid3tag> + $<$:libflac> + $<$:libflac++> + $<$:libmad> + $<$:libogg> + $<$:libvorbis> + $<$:twolame> + $<$:lv2> + $<$:portmidi> + $<$:portsmf> + $<$:libnyquist> + $<$:portmixer> + $<$:sbsms> + $<$:soundtouch> + $<$:libvamp> ) -source_group( tracks FILES ${TRACKS_SOURCE} ) -#add_subdirectory( widgets ) -set( WIDGETS_SOURCE - ${CMAKE_SOURCE_DIRECTORY}widgets/AButton.cpp - ${CMAKE_SOURCE_DIRECTORY}widgets/ASlider.cpp - ${CMAKE_SOURCE_DIRECTORY}widgets/AttachableScrollBar.cpp - ${CMAKE_SOURCE_DIRECTORY}widgets/BackedPanel.cpp - ${CMAKE_SOURCE_DIRECTORY}widgets/ErrorDialog.cpp - ${CMAKE_SOURCE_DIRECTORY}widgets/ExpandingToolBar.cpp - ${CMAKE_SOURCE_DIRECTORY}widgets/FileHistory.cpp - ${CMAKE_SOURCE_DIRECTORY}widgets/Grabber.cpp - ${CMAKE_SOURCE_DIRECTORY}widgets/Grid.cpp - ${CMAKE_SOURCE_DIRECTORY}widgets/HelpSystem.cpp - ${CMAKE_SOURCE_DIRECTORY}widgets/HtmlWindow.cpp - ${CMAKE_SOURCE_DIRECTORY}widgets/ImageRoll.cpp - ${CMAKE_SOURCE_DIRECTORY}widgets/KeyView.cpp - ${CMAKE_SOURCE_DIRECTORY}widgets/LinkingHtmlWindow.cpp - ${CMAKE_SOURCE_DIRECTORY}widgets/Meter.cpp - ${CMAKE_SOURCE_DIRECTORY}widgets/MultiDialog.cpp - ${CMAKE_SOURCE_DIRECTORY}widgets/NumericTextCtrl.cpp - ${CMAKE_SOURCE_DIRECTORY}widgets/numformatter.cpp - ${CMAKE_SOURCE_DIRECTORY}widgets/Overlay.cpp - ${CMAKE_SOURCE_DIRECTORY}widgets/OverlayPanel.cpp - ${CMAKE_SOURCE_DIRECTORY}widgets/PopupMenuTable.cpp - ${CMAKE_SOURCE_DIRECTORY}widgets/ProgressDialog.cpp - ${CMAKE_SOURCE_DIRECTORY}widgets/Ruler.cpp - ${CMAKE_SOURCE_DIRECTORY}widgets/valnum.cpp - ${CMAKE_SOURCE_DIRECTORY}widgets/Warning.cpp - ${CMAKE_SOURCE_DIRECTORY}widgets/wxPanelWrapper.cpp -) -source_group( widgets FILES ${WIDGETS_SOURCE} ) +# +# If was have cmake 3.16 or higher, we can use precompiled headers +# +if( CMAKE_VERSION VERSION_GREATER_EQUAL "3.16" ) + list( APPEND PRECOMP + AudacityHeaders.h + ) +endif() -#add_subdirectory( xml ) -set( XML_SOURCE - ${CMAKE_SOURCE_DIRECTORY}xml/XMLFileReader.cpp - ${CMAKE_SOURCE_DIRECTORY}xml/XMLTagHandler.cpp - ${CMAKE_SOURCE_DIRECTORY}xml/XMLWriter.cpp -) -source_group( xml FILES ${XML_SOURCE} ) +# Handle Ladspa option +option( enable_ladspa "Enable LADSPA plug-in support" ON ) +set( USE_LADSPA ${enable_ladspa} ) -set( SOURCE - ${SOURCE} - ${BLOCKFILE_SOURCE} - ${COMMANDS_SOURCE} - ${EFFECTS_SOURCE} - ${EXPORT_SOURCE} - ${IMPORT_SOURCE} - ${ONDEMAND_SOURCE} - ${PREFS_SOURCE} - ${TOOLBARS_SOURCE} - ${TRACKS_SOURCE} - ${WIDGETS_SOURCE} - ${XML_SOURCE} +# Handle VST option +option( enable_vst "Enable VST2 plug-in support" ON ) +set( USE_VST ${enable_vst} ) + +set( AUDACITY_NAME "Audacity" ) +set( BUILDING_AUDACITY 1 ) +set( INSTALL_PREFIX "" ) +#set( DISABLE_DYNAMIC_LOADING_FFMPEG 1 ) +#set( DISABLE_DYNAMIC_LOADING_LAME 1 ) + +if( CMAKE_SYSTEM_NAME MATCHES "Windows" ) + set_directory_properties( + PROPERTIES + # Make sure Audacity is the startup project + VS_STARTUP_PROJECT "${TARGET}" ) -add_executable( Audacity ${SOURCE} ) + set( PACKAGES + "${GETTEXT_NAME}_${GETTEXT_VERSION}" + "${PYTHON_NAME}_${PYTHON_VERSION}" + ) -message( STATUS "link directory is: ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/Debug" ) -message( STATUS "wxWidgets libraries in: ${wxWidgets_LIBRARIES}" ) + set_target_properties( + ${TARGET} + PROPERTIES + # Make sure we're a GUI application and not a console tool + WIN32_EXECUTABLE ON -target_link_libraries(Audacity -${wxWidgets_LIBRARIES} -expat -FileDialog -FLACXX-static -libsndfile -libsoxr -portmixer -portmidi-static -) -if(MSVC) - set_property(TARGET Audacity APPEND PROPERTY LINK_FLAGS "/SUBSYSTEM:WINDOWS /LIBPATH:${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/Debug") - #set_property(TARGET Audacity APPEND PROPERTY LINK_FLAGS ) + # These two are for auto-restoring gettext and python + VS_PACKAGE_REFERENCES "${PACKAGES}" + DOTNET_TARGET_FRAMEWORK_VERSION "v4.5" + ) + + # And copy the NuGet packages config + configure_file( ../win/packages.config packages.config COPYONLY ) + + # Create the config file + configure_file( audacity_config.h.in private/configwin.h ) + + # Copy over the wxWidgets DLLs + file( TO_NATIVE_PATH ${_EXEDIR} exedir ) + add_custom_command( + TARGET + ${TARGET} + COMMAND + XCOPY "*.dll" ${exedir} /I /R /Y + WORKING_DIRECTORY + "${CMAKE_BINARY_DIR}/lib/vc_dll" + POST_BUILD + ) +elseif( CMAKE_SYSTEM_NAME MATCHES "Darwin" ) + # Handle Audio Units option + option( enable_audiounits "Enable Audio Unit plug-in support" ON ) + set( USE_AUDIO_UNITS ${enable_audiounits} ) + + set_target_properties( + ${TARGET} + PROPERTIES + # Build a bundle + MACOSX_BUNDLE 1 + ) + + # These sources must be compiled as Objective C++ + set_source_files_properties( + KeyboardCapture.cpp + effects/EffectUI.cpp + menus/WindowMenus.cpp + PROPERTIES + COMPILE_FLAGS "-x objective-c++" + ) + + # Because of the "misidentified" Objective C++ sources listed above, + # we can only use precompiled headers if also using Xcode. + if( NOT "${CMAKE_GENERATOR}" MATCHES "Xcode" ) + set( PRECOMP ) + endif() + + # Add our required frameworks + list(APPEND LIBRARIES + PRIVATE + "-framework AudioUnit" + "-framework CoreAudioKit" + ) + + # Create the config file + set( HAVE_VISIBILITY 1 ) + configure_file( audacity_config.h.in private/configmac.h ) + + # Extract the version information + execute_process( + COMMAND + gcc -E -dM ${_SRCDIR}/Audacity.h + COMMAND + awk "/#define *AUDACITY_(VERSION|RELEASE|REVISION|MODLEVEL) /{printf \"%s %s;\",$2,$3}" + OUTPUT_VARIABLE + output + ) + + foreach( line ${output} ) + string( REPLACE " " ";" line ${line}) + list( GET line 0 name ) + list( GET line 1 value ) + set( ${name} ${value} ) + endforeach() + + set( AUDACITY_DIST_VERSION ${AUDACITY_VERSION}.${AUDACITY_RELEASE}.${AUDACITY_REVISION} ) + set( AUDACITY_INFO_VERSION ${AUDACITY_VERSION}.${AUDACITY_RELEASE}.${AUDACITY_REVISION}.${AUDACITY_MODLEVEL} ) + + # Copy the wxWidgets libraries into the bundle + add_custom_command( + TARGET + ${TARGET} + COMMAND + sh -c "TARGET_BUILD_DIR=${_EXEDIR} EXECUTABLE_PATH=MacOS/Audacity FRAMEWORKS_FOLDER_PATH=Frameworks ${topdir}/mac/scripts/install_wxlibs.sh" + WORKING_DIRECTORY + ${CMAKE_BINARY_DIR}/lib + POST_BUILD + ) +elseif( CMAKE_SYSTEM_NAME MATCHES "Linux" ) + # Add additional library requirements + list( APPEND LIBRARIES + PRIVATE + PkgConfig::GLIB + z + pthread + ) + + # Create the config file + set( HAVE_VISIBILITY 1 ) + configure_file( audacity_config.h.in private/configunix.h ) + + # Create the script to copy required wxWidgets libraries + file( WRITE "${_INTDIR}/copy_libs.sh" + "for lib in \$(ldd ${_EXEDIR}/Audacity | awk '/libwx/{print \$1}') + do + echo \${lib} + ldd ${WXWIN}/lib/\${lib} | awk '/libwx/{print \$1}' + done | sort -u | xargs cp -n -H -t ${_LIBDIR} + rm \${0}" + ) + + # And run it after the build + add_custom_command( + TARGET + ${TARGET} + COMMAND + sh "${_INTDIR}/copy_libs.sh" + WORKING_DIRECTORY + ${WXWIN}/lib + POST_BUILD + ) endif() -#Use cotire to get precompiled headers, and a unity build. -set_target_properties(Audacity -PROPERTIES COTIRE_CXX_PREFIX_HEADER_INIT -"AudacityHeaders.h") -cotire(Audacity) +find_package (Git) +if (GIT_FOUND) + execute_process( + COMMAND + ${GIT_EXECUTABLE} show -s "--format=\"%H\";\"%cd\";" + OUTPUT_VARIABLE + output + ) + list( GET output 0 long ) + list( GET output 1 time ) + list( APPEND DEFINES + REV_LONG=${long} + REV_TIME=${time} + ) -# (commented out) Debugging info for the curious about Cotire. -#[[ - -# cotire sets the following properties -get_target_property(_unitySource Audacity COTIRE_CXX_UNITY_SOURCE) -get_target_property(_prefixHeader Audacity COTIRE_CXX_PREFIX_HEADER) -get_target_property(_precompiledHeader Audacity COTIRE_CXX_PRECOMPILED_HEADER) -get_target_property(_unityTargetName Audacity COTIRE_UNITY_TARGET_NAME) - -if (_unitySource) - message(STATUS "Audacity unity source: ${_unitySource}") -endif() -if (_prefixHeader) - message(STATUS "Audacity prefix header: ${_prefixHeader}") -endif() -if (_precompiledHeader) - message(STATUS "Audacity precompiled header: ${_precompiledHeader}") -endif() -if (TARGET ${_unityTargetName}) - message(STATUS "Audacity unity target: ${_unityTargetName}") endif() -]]# +organize_source( "${TARGET_ROOT}/.." "include" "${HEADERS}" ) +organize_source( "${TARGET_ROOT}/../win" "win" "${RESOURCES}" ) +organize_source( "${TARGET_ROOT}" "src" "${SOURCES}" ) + +target_sources( ${TARGET} PRIVATE ${HEADERS} ${SOURCES} ${RESOURCES} ) +target_compile_definitions( ${TARGET} PRIVATE ${DEFINES} ) +target_compile_features( ${TARGET} PRIVATE ${FEATURES} ) +target_compile_options( ${TARGET} PRIVATE ${OPTIONS} ) +target_include_directories( ${TARGET} PRIVATE ${INCLUDES} ) +target_link_options( "${TARGET}" PRIVATE ${LDFLAGS} ) +target_link_libraries( ${TARGET} PRIVATE ${LIBRARIES} ) +target_precompile_headers( ${TARGET} PRIVATE ${PRECOMP} ) + diff --git a/src/audacity_config.h.in b/src/audacity_config.h.in new file mode 100755 index 000000000..4bac5f3c6 --- /dev/null +++ b/src/audacity_config.h.in @@ -0,0 +1,107 @@ +/* src/configtemplate.h. Generated from configure.ac by autoheader. */ + +/* define if Audacity is being installed under a name other than "audacity", + so it can find the files it needs at runtime */ +#cmakedefine AUDACITY_NAME "@AUDACITY_NAME@" + +/* Define we are compiling Audacity itself, not an Audacity plug-in */ +#cmakedefine BUILDING_AUDACITY 1 + +/* Use system FFmpeg library and disable dynamic loading of it. */ +#cmakedefine DISABLE_DYNAMIC_LOADING_FFMPEG 1 + +/* Define if LAME should be linked at compile time */ +#cmakedefine DISABLE_DYNAMIC_LOADING_LAME 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_ALLOCA_H 1 + +/* Define if GTK is available */ +#cmakedefine HAVE_GTK 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_LIBUDEV_H 1 + +/* Define if you have C99's lrint function. */ +#cmakedefine HAVE_LRINT 1 + +/* Define if you have C99's lrintf function. */ +#cmakedefine HAVE_LRINTF 1 + +/* Define to 1 or 0, depending whether the compiler supports simple visibility + declarations. */ +#cmakedefine HAVE_VISIBILITY 1 + +/* define as prefix where Audacity is installed */ +#define INSTALL_PREFIX "@INSTALL_PREFIX@" + +/* define as prefix where Audacity is installed */ +#define LIBDIR "@LIBDIR@" + +/* Define if Audio Unit plug-ins are enabled (Mac OS X only) */ +#cmakedefine USE_AUDIO_UNITS 1 + +/* Define if ffmpeg (multi-format import and export) support should be enabled + */ +#cmakedefine USE_FFMPEG 1 + +/* Define if GStreamer 1 is present */ +#cmakedefine USE_GSTREAMER 1 + +/* Define if LADSPA plug-ins are enabled */ +#cmakedefine USE_LADSPA 1 + +/* Define if the FLAC library is present */ +#cmakedefine USE_LIBFLAC 1 + +/* Define if libid3tag is present */ +#cmakedefine USE_LIBID3TAG 1 + +/* Define if mp3 support is implemented with the libmad library */ +#cmakedefine USE_LIBMAD 1 + +/* Define if libtwolame (MP2 export) support should be enabled */ +#cmakedefine USE_LIBTWOLAME 1 + +/* Define if the ogg vorbis decoding library is present */ +#cmakedefine USE_LIBVORBIS 1 + +/* Define if LV2 support should be enabled */ +#cmakedefine USE_LV2 1 + +/* Define if midi support should be enabled */ +#cmakedefine USE_MIDI 1 + +/* Define if Nyquist support should be enabled */ +#cmakedefine USE_NYQUIST 1 + +/* Define if midi support should be enabled */ +#cmakedefine USE_PORTMIDI 1 + +/* Define if PortMixer support should be enabled */ +#cmakedefine USE_PORTMIXER 1 + +/* Define if QuickTime importing is enabled (Mac OS X only) */ +#cmakedefine USE_QUICKTIME 1 + +/* Define if SBSMS support should be enabled */ +#cmakedefine USE_SBSMS 1 + +/* Define if SoundTouch support should be enabled */ +#cmakedefine USE_SOUNDTOUCH 1 + +/* Define if Vamp analysis plugin support should be enabled */ +#cmakedefine USE_VAMP 1 + +/* Define if VST plug-in support is enabled */ +#cmakedefine USE_VST 1 + +/* Version number of package */ +#cmakedefine VERSION "@VERSION@" + +/* Placeholder for large file support */ +#cmakedefine _FILE_OFFSET_BITS 0 + +/* We're using cygwin */ +#cmakedefine __CYGWIN__ 1 + diff --git a/win/packages.config b/win/packages.config new file mode 100755 index 000000000..3e6286f0b --- /dev/null +++ b/win/packages.config @@ -0,0 +1,5 @@ + + + + +