shithub: sox

ref: 92ba81db75c5b673ce4d1d561a97d3296ebad4df
dir: /src/CMakeLists.txt/

View raw version
include(CheckIncludeFiles)
include(CheckFunctionExists)
include(CheckLibraryExists)
include(TestBigEndian)

macro(optional variable header library function source)
  check_include_files(${header} ${variable}1)
  if (${variable}1)
    check_library_exists(${library} ${function} "" ${variable})
    if (${variable})
      set(optional_srcs ${optional_srcs} ${source})
      set(optional_libs ${optional_libs} ${library})
    endif (${variable})
  endif (${variable}1)
endmacro(optional)

macro(optional3 variable header library1 function1 library2 function2 library3 function3 source)
  check_include_files(${header} ${variable}1)
  if (${variable}1)
    check_library_exists(${library1} ${function1} "" ${variable}2)
    if (${variable}2)
      check_library_exists(${library2} ${function2} "" ${variable}3)
      if (${variable}3)
	check_library_exists(${library3} ${function3} "" ${variable})
        if (${variable})
          set(optional_srcs ${optional_srcs} ${source})
          set(optional_libs ${optional_libs} ${library1} ${library2} ${library3})
        endif (${variable})
      endif (${variable}3)
    endif (${variable}2)
  endif (${variable}1)
endmacro(optional3)

check_include_files("byteswap.h"         HAVE_BYTESWAP_H)
check_include_files("inttypes.h"         HAVE_INTTYPES_H)
check_include_files("io.h"               HAVE_IO_H)
#check_include_files("ltdl.h"             HAVE_LTDL_H) # no plug-ins as yet
check_include_files("stdint.h"           HAVE_STDINT_H)
check_include_files("string.h"           HAVE_STRING_H)
check_include_files("sys/time.h"         HAVE_SYS_TIME_H)
check_include_files("sys/timeb.h"        HAVE_SYS_TIMEB_H)
check_include_files("unistd.h"           HAVE_UNISTD_H)

check_function_exists("fseeko"           HAVE_FSEEKO)
check_function_exists("getopt_long"      HAVE_GETOPT_LONG)
check_function_exists("gettimeofday"     HAVE_GETTIMEOFDAY)
check_function_exists("popen"            HAVE_POPEN)
check_function_exists("strcasecmp"       HAVE_STRCASECMP)
check_function_exists("strdup"           HAVE_STRDUP)
check_function_exists("strrstr"          HAVE_STRRSTR)
check_function_exists("vsnprintf"        HAVE_VSNPRINTF)

test_big_endian(WORDS_BIGENDIAN)

optional(NEED_LIBM math.h m pow "")
optional(EXTERNAL_GSM gsm/gsm.h gsm gsm_create "")
optional(HAVE_ALSA alsa/asoundlib.h asound snd_pcm_open alsa)
optional(HAVE_AMRNB amrnb/sp_dec.h amrnb Decoder_Interface_init amr-nb)
optional(HAVE_AMRWB amrwb/dec.h amrwb D_IF_init amr-wb)
optional(HAVE_LIBAO ao/ao.h ao ao_play ao)
optional(HAVE_FLAC FLAC/all.h FLAC FLAC__stream_encoder_new flac)
optional(HAVE_MAD_H mad.h mad mad_stream_buffer mp3)
optional(HAVE_LAME_LAME_H lame/lame.h mp3lame lame_init mp3)
if (NOT HAVE_LAME_LAME_H)
  optional(HAVE_LAME_LAME_H lame.h mp3lame lame_init mp3)
endif (NOT HAVE_LAME_LAME_H)
optional(HAVE_SAMPLERATE_H samplerate.h samplerate src_simple rabbit)
optional(HAVE_SNDFILE_H sndfile.h sndfile sf_open sndfile)
optional(HAVE_SNDFILE_1_0_12 sndfile.h sndfile sf_open_virtual "")
optional(HAVE_SUN_AUDIOIO_H sun/audioio.h c ioctl sunaudio)
if (NOT HAVE_SUN_AUDIOIO_H)
  optional(HAVE_SYS_AUDIOIO_H sys/audioio.h c ioctl sunaudio)
endif (NOT HAVE_SUN_AUDIOIO_H)
optional(HAVE_SYS_SOUNDCARD_H sys/soundcard.h c ioctl oss)
if (NOT HAVE_SYS_SOUNDCARD_H)
  optional(HAVE_MACHINE_SOUNDCARD_H machine/soundcard.h ossaudio _oss_ioctl oss)
endif (NOT HAVE_SYS_SOUNDCARD_H)
optional3(HAVE_OGG_VORBIS vorbis/codec.h vorbis vorbis_analysis_headerout vorbisfile ov_clear vorbisenc vorbis_encode_init_vbr vorbis)
optional3(HAVE_FFMPEG ffmpeg/avformat.h avformat av_open_input_file avutil av_rescale_q avcodec avcodec_encode_audio ffmpeg)

configure_file(${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}config.h)

#include_directories(${liblpc10_BINARY_DIR}/lpc10)
#link_directories(${liblpc10_SOURCE_DIR}/lpc10)

if(CMAKE_COMPILER_IS_GNUCC)
#  add_definitions(-Wconversion)
endif(CMAKE_COMPILER_IS_GNUCC)

if (NOT EXTERNAL_GSM)
  add_subdirectory(libgsm)
  set(optional_libs ${optional_libs} gsm)
endif (NOT EXTERNAL_GSM)

add_custom_command(
  OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/soxstdint.h
  COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/soxstdint.h.cmake ${CMAKE_CURRENT_SOURCE_DIR}/soxstdint.h
  DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/soxstdint.h.cmake
  )

# Format with: !xargs echo|tr ' ' '\n'|sort|column|expand|sed 's/^/  /'
set(effects_srcs
  biquad          echos           noiseprof       resample        synth
  biquads         effects         noisered        reverb          tempo
  chorus          fade            pad             reverse         tremolo
  compand         FFT             pan             silence         trim
  compandt        filter          phaser          skeleff         vibro
  dcshift         flanger         pitch           speed           vol
  dither          key             polyphas        stat
  earwax          mcompand        rate            stretch
  echo            mixer           repeat          swap
)
set(formats_srcs
  8svx            cvsd            hcom            s1-fmt          u2-fmt
  adpcm           cvsd-fmt        ima-fmt         s2-fmt          u3-fmt
  adpcms          dat             ima_rw          s3-fmt          u4-fmt
  aifc-fmt        dvms-fmt        la-fmt          s4-fmt          ul-fmt
  aiff            formats         lpc10.c         sf              voc
  aiff-fmt        g711            lu-fmt          skelform        vox
  al-fmt          g721            maud            smp             vox-fmt
  au              g723_24         nulfile         sndrtool        wav
  auto            g723_40         prc             sphere          wve
  avr             g72x            raw             tx16w           xa
  cdr             gsm             raw-fmt         u1-fmt
)
add_library(lib${PROJECT_NAME}
  getopt
  getopt1
  misc
  soxio
  soxstdint
  util
  xmalloc
  ${effects_srcs}
  ${formats_srcs}
  ${optional_srcs}
)
add_executable(${PROJECT_NAME} ${PROJECT_NAME}.c)
target_link_libraries(${PROJECT_NAME} lib${PROJECT_NAME} lpc10 ${optional_libs})
add_executable(sox_sample_test sox_sample_test.c)
add_custom_target(rec ALL ln -sf sox rec DEPENDS sox)
add_custom_target(play ALL ln -sf sox play DEPENDS sox)
find_program(CTAGS NAMES exuberant-ctags ctags)
add_custom_target(tags ${CTAGS} --recurse --extra=fq ${CMAKE_CURRENT_SOURCE_DIR})