Merge commit '9f57f134c19773d54269b6cb9ee455ff87c2e9e1'
authorHendrik Leppkes <h.leppkes@gmail.com>
Sat, 5 Dec 2015 10:49:44 +0000 (11:49 +0100)
committerHendrik Leppkes <h.leppkes@gmail.com>
Sat, 5 Dec 2015 11:21:33 +0000 (12:21 +0100)
* commit '9f57f134c19773d54269b6cb9ee455ff87c2e9e1':
  configure: ObjC support

Merged-by: Hendrik Leppkes <h.leppkes@gmail.com>
1  2 
common.mak
configure

diff --cc common.mak
  # first so "all" becomes default target
  all: all-yes
  
- BRIEF  = CC CXX HOSTCC HOSTLD AS YASM AR LD STRIP CP WINDRES
 +DEFAULT_YASMD=.dbg
 +
 +ifeq ($(DBG),1)
 +YASMD=$(DEFAULT_YASMD)
 +else
 +YASMD=
 +endif
 +
 +ifndef SUBDIR
 +
 +ifndef V
 +Q      = @
 +ECHO   = printf "$(1)\t%s\n" $(2)
-       $(COMPILE_C)
++BRIEF  = CC CXX OBJCC HOSTCC HOSTLD AS YASM AR LD STRIP CP WINDRES
 +SILENT = DEPCC DEPHOSTCC DEPAS DEPYASM RANLIB RM
 +
 +MSG    = $@
 +M      = @$(call ECHO,$(TAG),$@);
 +$(foreach VAR,$(BRIEF), \
 +    $(eval override $(VAR) = @$$(call ECHO,$(VAR),$$(MSG)); $($(VAR))))
 +$(foreach VAR,$(SILENT),$(eval override $(VAR) = @$($(VAR))))
 +$(eval INSTALL = @$(call ECHO,INSTALL,$$(^:$(SRC_DIR)/%=%)); $(INSTALL))
 +endif
 +
 +ALLFFLIBS = avcodec avdevice avfilter avformat avresample avutil postproc swscale swresample
 +
 +# NASM requires -I path terminated with /
 +IFLAGS     := -I. -I$(SRC_PATH)/
 +CPPFLAGS   := $(IFLAGS) $(CPPFLAGS)
 +CFLAGS     += $(ECFLAGS)
 +CCFLAGS     = $(CPPFLAGS) $(CFLAGS)
++OBJCFLAGS  += $(EOBJCFLAGS)
++OBJCCFLAGS  = $(CPPFLAGS) $(CFLAGS) $(OBJCFLAGS)
 +ASFLAGS    := $(CPPFLAGS) $(ASFLAGS)
 +CXXFLAGS   += $(CPPFLAGS) $(CFLAGS)
 +YASMFLAGS  += $(IFLAGS:%=%/) -Pconfig.asm
 +
 +HOSTCCFLAGS = $(IFLAGS) $(HOSTCPPFLAGS) $(HOSTCFLAGS)
 +LDFLAGS    := $(ALLFFLIBS:%=$(LD_PATH)lib%) $(LDFLAGS)
 +
 +define COMPILE
 +       $(call $(1)DEP,$(1))
 +       $($(1)) $($(1)FLAGS) $($(1)_DEPFLAGS) $($(1)_C) $($(1)_O) $<
 +endef
 +
 +COMPILE_C = $(call COMPILE,CC)
 +COMPILE_CXX = $(call COMPILE,CXX)
 +COMPILE_S = $(call COMPILE,AS)
++COMPILE_M = $(call COMPILE,OBJCC)
 +COMPILE_HOSTC = $(call COMPILE,HOSTCC)
 +
 +%.o: %.c
 +      $(COMPILE_C)
 +
 +%.o: %.cpp
 +      $(COMPILE_CXX)
 +
 +%.o: %.m
++      $(COMPILE_M)
 +
 +%.s: %.c
 +      $(CC) $(CPPFLAGS) $(CFLAGS) -S -o $@ $<
 +
 +%.o: %.S
 +      $(COMPILE_S)
 +
 +%_host.o: %.c
 +      $(COMPILE_HOSTC)
 +
 +%.o: %.rc
 +      $(WINDRES) $(IFLAGS) --preprocessor "$(DEPWINDRES) -E -xc-header -DRC_INVOKED $(CC_DEPFLAGS)" -o $@ $<
 +
 +%.i: %.c
 +      $(CC) $(CCFLAGS) $(CC_E) $<
 +
 +%.h.c:
 +      $(Q)echo '#include "$*.h"' >$@
 +
 +%.ver: %.v
 +      $(Q)sed 's/$$MAJOR/$($(basename $(@F))_VERSION_MAJOR)/' $^ | sed -e 's/:/:\
 +/' -e 's/; /;\
 +/g' > $@
 +
 +%.c %.h: TAG = GEN
 +
 +# Dummy rule to stop make trying to rebuild removed or renamed headers
 +%.h:
 +      @:
 +
 +# Disable suffix rules.  Most of the builtin rules are suffix rules,
 +# so this saves some time on slow systems.
 +.SUFFIXES:
 +
 +# Do not delete intermediate files from chains of implicit rules
 +$(OBJS):
 +endif
 +
  include $(SRC_PATH)/arch.mak
  
  OBJS      += $(OBJS-yes)
diff --cc configure
+++ b/configure
@@@ -307,21 -239,16 +307,22 @@@ Toolchain options
    --target-exec=CMD        command to run executables on target
    --target-path=DIR        path to view of build directory on target
    --target-samples=DIR     path to samples directory on target
 +  --tempprefix=PATH        force fixed dir/prefix instead of mktemp for checks
    --toolchain=NAME         set tool defaults according to NAME
 -  --nm=NM                  use nm tool
 +  --nm=NM                  use nm tool NM [$nm_default]
    --ar=AR                  use archive tool AR [$ar_default]
    --as=AS                  use assembler AS [$as_default]
 +  --windres=WINDRES        use windows resource compiler WINDRES [$windres_default]
 +  --yasmexe=EXE            use yasm-compatible assembler EXE [$yasmexe_default]
    --cc=CC                  use C compiler CC [$cc_default]
 +  --cxx=CXX                use C compiler CXX [$cxx_default]
+   --objcc=OCC              use ObjC compiler OCC [$cc_default]
    --dep-cc=DEPCC           use dependency generator DEPCC [$cc_default]
 -  --ld=LD                  use linker LD
 +  --ld=LD                  use linker LD [$ld_default]
    --pkg-config=PKGCONFIG   use pkg-config tool PKGCONFIG [$pkg_config_default]
    --pkg-config-flags=FLAGS pass additional flags to pkgconf []
 +  --ranlib=RANLIB          use ranlib RANLIB [$ranlib_default]
 +  --doxygen=DOXYGEN        use DOXYGEN to generate API doc [$doxygen_default]
    --host-cc=HOSTCC         use host C compiler HOSTCC
    --host-cflags=HCFLAGS    use HCFLAGS when compiling for host
    --host-cppflags=HCPPFLAGS use HCPPFLAGS when compiling for host
    --host-libs=HLIBS        use libs HLIBS when linking for host
    --host-os=OS             compiler host OS [$target_os]
    --extra-cflags=ECFLAGS   add ECFLAGS to CFLAGS [$CFLAGS]
 +  --extra-cxxflags=ECFLAGS add ECFLAGS to CXXFLAGS [$CXXFLAGS]
+   --extra-objcflags=FLAGS  add FLAGS to OBJCFLAGS [$CFLAGS]
    --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]
    --extra-ldexeflags=ELDFLAGS add ELDFLAGS to LDEXEFLAGS [$LDEXEFLAGS]
 +  --extra-ldlibflags=ELDFLAGS add ELDFLAGS to LDLIBFLAGS [$LDLIBFLAGS]
    --extra-libs=ELIBS       add ELIBS [$ELIBS]
    --extra-version=STRING   version string suffix []
    --optflags=OPTFLAGS      override optimization-related compiler flags
@@@ -868,18 -755,11 +874,18 @@@ check_cc()
      check_cmd $cc $CPPFLAGS $CFLAGS "$@" $CC_C $(cc_o $TMPO) $TMPC
  }
  
- check_oc(){
-     log check_oc "$@"
 +check_cxx(){
 +    log check_cxx "$@"
 +    cat > $TMPCPP
 +    log_file $TMPCPP
 +    check_cmd $cxx $CPPFLAGS $CFLAGS $CXXFLAGS "$@" $CXX_C -o $TMPO $TMPCPP
 +}
 +
 -    cat > $TMPC
 -    log_file $TMPC
 -    check_cmd $objcc $CPPFLAGS $CFLAGS $OBJCFLAGS "$@" $OBJCC_C $(cc_o $TMPO) $TMPC
+ check_objcc(){
+     log check_objcc "$@"
-     check_cmd $cc -Werror=missing-prototypes $CPPFLAGS $CFLAGS "$@" $CC_C $(cc_o $TMPO) $TMPM
 +    cat > $TMPM
 +    log_file $TMPM
++    check_cmd $objcc -Werror=missing-prototypes $CPPFLAGS $CFLAGS $OBJCFLAGS "$@" $OBJCC_C $(cc_o $TMPO) $TMPM
  }
  
  check_cpp(){
@@@ -982,17 -860,22 +988,30 @@@ check_cflags()
      test_cflags "$@" && add_cflags "$@"
  }
  
 +check_cxxflags(){
 +    log check_cxxflags "$@"
 +    set -- $($cflags_filter "$@")
 +    check_cxx "$@" <<EOF && append CXXFLAGS "$@"
 +int x;
 +EOF
 +}
 +
+ test_objcflags(){
+     log test_cflags "$@"
+     set -- $($cflags_filter "$@")
+     check_objcc "$@" <<EOF
+ int x;
+ EOF
+ }
+ check_objcflags(){
+     log check_cflags "$@"
+     test_objcflags "$@" && add_objcflags "$@"
+ }
  test_ldflags(){
      log test_ldflags "$@"
 -    check_ld "$@" <<EOF
 +    check_ld "cc" "$@" <<EOF
  int main(void){ return 0; }
  EOF
  }
@@@ -1027,18 -910,6 +1046,18 @@@ int x
  EOF
  }
  
- check_header_oc(){
-     log check_header_oc "$@"
++check_header_objcc(){
++    log check_header_objcc "$@"
 +    rm -f -- "$TMPO"
 +    header=$1
 +    shift
 +    disable_safe $header
 +    {
 +       echo "#include <$header>"
 +       echo "int main(void) { return 0; }"
-     } | check_oc && check_stat "$TMPO" && enable_safe $headers
++    } | check_objcc && check_stat "$TMPO" && enable_safe $headers
 +}
 +
  check_func(){
      log check_func "$@"
      func=$1
@@@ -2058,9 -1734,9 +2077,10 @@@ CMDLINE_SET=
      ar
      arch
      as
 +    assert_level
      build_suffix
      cc
+     objcc
      cpu
      cross_prefix
      custom_allocator
  
  CMDLINE_APPEND="
      extra_cflags
 +    extra_cxxflags
+     extra_objcflags
      host_cppflags
  "
  
@@@ -3024,8 -2445,9 +3045,11 @@@ AS_O='-o $@
  CC_C='-c'
  CC_E='-E -o $@'
  CC_O='-o $@'
 +CXX_C='-c'
 +CXX_O='-o $@'
+ OBJCC_C='-c'
+ OBJCC_E='-E -o $@'
+ OBJCC_O='-o $@'
  LD_O='-o $@'
  LD_LIB='-l%'
  LD_PATH='-L'
@@@ -3853,7 -3215,7 +3878,7 @@@ test -n "$cc_type" && enable $cc_type |
  : ${dep_cc_default:=$cc}
  : ${ld_default:=$cc}
  : ${host_ld_default:=$host_cc}
- set_default ar as dep_cc ld host_ld windres
 -set_default ar as objcc dep_cc ld host_ld
++set_default ar as objcc dep_cc ld host_ld windres
  
  probe_cc as "$as"
  asflags_filter=$_flags_filter
@@@ -3898,7 -3262,7 +3928,8 @@@ els
  fi
  
  add_cflags $extra_cflags
 +add_cxxflags $extra_cxxflags
+ add_objcflags $extra_objcflags
  add_asflags $extra_cflags
  
  if test -n "$sysroot"; then
@@@ -5330,45 -4445,18 +5361,45 @@@ for func in $MATH_FUNCS; d
      eval check_mathfunc $func \${${func}_args:-1}
  done
  
 +for func in $COMPLEX_FUNCS; do
 +    eval check_complexfunc $func \${${func}_args:-1}
 +done
 +
  # these are off by default, so fail if requested and not available
- enabled avfoundation_indev && { check_header_oc AVFoundation/AVFoundation.h || disable avfoundation_indev; }
 -enabled avisynth          && { check_lib2 "avisynth/avisynth_c.h windows.h" LoadLibrary ||
 -                               check_lib2 "avxsynth/avxsynth_c.h dlfcn.h" dlopen -ldl   ||
 -                               die "ERROR: LoadLibrary/dlopen not found, or avisynth header not found"; }
++enabled avfoundation_indev && { check_header_objcc AVFoundation/AVFoundation.h || disable avfoundation_indev; }
 +enabled avfoundation_indev && { check_lib2 CoreGraphics/CoreGraphics.h CGGetActiveDisplayList -framework CoreGraphics ||
 +                                check_lib2 ApplicationServices/ApplicationServices.h CGGetActiveDisplayList -framework ApplicationServices; }
 +enabled avisynth          && { { check_lib2 "windows.h" LoadLibrary; } ||
 +                               { check_lib2 "dlfcn.h" dlopen -ldl; } ||
 +                               die "ERROR: LoadLibrary/dlopen not found for avisynth"; }
 +enabled chromaprint       && require chromaprint chromaprint.h chromaprint_get_version -lchromaprint
 +enabled decklink          && { check_header DeckLinkAPI.h || die "ERROR: DeckLinkAPI.h header not found"; }
  enabled frei0r            && { check_header frei0r.h || die "ERROR: frei0r.h header not found"; }
 +enabled gcrypt            && require2 gcrypt gcrypt.h gcry_mpi_new -lgcrypt
 +enabled gmp               && require2 gmp gmp.h mpz_export -lgmp
  enabled gnutls            && require_pkg_config gnutls gnutls/gnutls.h gnutls_global_init
 +enabled ladspa            && { check_header ladspa.h || die "ERROR: ladspa.h header not found"; }
 +enabled libiec61883       && require libiec61883 libiec61883/iec61883.h iec61883_cmp_connect -lraw1394 -lavc1394 -lrom1394 -liec61883
 +enabled libaacplus        && require "libaacplus >= 2.0.0" aacplus.h aacplusEncOpen -laacplus
 +enabled libass            && require_pkg_config libass ass/ass.h ass_library_init
 +enabled libbluray         && require_pkg_config libbluray libbluray/bluray.h bd_open
  enabled libbs2b           && require_pkg_config libbs2b bs2b.h bs2b_open
 -enabled libdcadec         && require libdcadec libdcadec/dca_context.h dcadec_context_create -ldcadec
 +enabled libcelt           && require libcelt celt/celt.h celt_decode -lcelt0 &&
 +                             { check_lib celt/celt.h celt_decoder_create_custom -lcelt0 ||
 +                               die "ERROR: libcelt must be installed and version must be >= 0.11.0."; }
 +enabled libcaca           && require_pkg_config caca caca.h caca_create_canvas
 +enabled libdcadec         && require_pkg_config "dcadec >= 0.1.0" libdcadec/dca_context.h dcadec_context_create
  enabled libfaac           && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
 -enabled libfdk_aac        && require_pkg_config fdk-aac "fdk-aac/aacenc_lib.h" aacEncOpen
 +enabled libfdk_aac        && { use_pkg_config fdk-aac "fdk-aac/aacenc_lib.h" aacEncOpen ||
 +                               { require libfdk_aac fdk-aac/aacenc_lib.h aacEncOpen -lfdk-aac &&
 +                                 warn "using libfdk without pkg-config"; } }
 +flite_libs="-lflite_cmu_time_awb -lflite_cmu_us_awb -lflite_cmu_us_kal -lflite_cmu_us_kal16 -lflite_cmu_us_rms -lflite_cmu_us_slt -lflite_usenglish -lflite_cmulex -lflite"
 +enabled libflite          && require2 libflite "flite/flite.h" flite_init $flite_libs
 +enabled fontconfig        && enable libfontconfig
  enabled libfontconfig     && require_pkg_config fontconfig "fontconfig/fontconfig.h" FcInit
 -enabled libfreetype       && require_pkg_config freetype2 "ft2build.h FT_FREETYPE_H" FT_Init_FreeType
 +enabled libfreetype       && require_libfreetype
 +enabled libfribidi        && require_pkg_config fribidi fribidi.h fribidi_version_info
 +enabled libgme            && require  libgme gme/gme.h gme_new_emu -lgme -lstdc++
  enabled libgsm            && { for gsm_hdr in "gsm.h" "gsm/gsm.h"; do
                                     check_lib "${gsm_hdr}" gsm_create -lgsm && break;
                                 done || die "ERROR: libgsm not found"; }
@@@ -5491,7 -4525,11 +5522,7 @@@ enabled openssl           && { check_li
                                 check_lib openssl/ssl.h SSL_library_init -lssl32 -leay32 ||
                                 check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto -lws2_32 -lgdi32 ||
                                 die "ERROR: openssl not found"; }
- enabled qtkit_indev      && { check_header_oc QTKit/QTKit.h || disable qtkit_indev; }
 -
 -if enabled gnutls; then
 -    { check_lib2 gmp.h mpz_export -lgmp && enable gmp; } ||
 -    { check_lib gcrypt.h gcry_mpi_new -lgcrypt && enable gcrypt; }
 -fi
++enabled qtkit_indev      && { check_header_objcc QTKit/QTKit.h || disable qtkit_indev; }
  
  # libdc1394 check
  if enabled libdc1394; then
@@@ -6152,8 -5014,9 +6183,9 @@@ CC_IDENT=$cc_iden
  ARCH=$arch
  INTRINSICS=$intrinsics
  CC=$cc
 -OBJCC=$cc
 +CXX=$cxx
  AS=$as
+ OBJCC=$objcc
  LD=$ld
  DEPCC=$dep_cc
  DEPCCFLAGS=$DEPCCFLAGS \$(CPPFLAGS)
@@@ -6170,7 -5032,7 +6202,8 @@@ CP=cp -
  LN_S=$ln_s
  CPPFLAGS=$CPPFLAGS
  CFLAGS=$CFLAGS
 +CXXFLAGS=$CXXFLAGS
+ OBJCFLAGS=$OBJCFLAGS
  ASFLAGS=$ASFLAGS
  AS_C=$AS_C
  AS_O=$AS_O