Index: utils/objfw-compile ================================================================== --- utils/objfw-compile +++ utils/objfw-compile @@ -14,12 +14,12 @@ OBJC="$($OBJFW_CONFIG --objc)" OBJCFLAGS="$OBJCFLAGS $($OBJFW_CONFIG --objcflags)" LIBS="$LIBS $($OBJFW_CONFIG --libs)" LDFLAGS="$LDFLAGS $($OBJFW_CONFIG --ldflags)" -if test x"$1" = "x" -o x"$2" = "x"; then - echo "Syntax: objfw-compile outname source1.m source2.m ..." +if test x"$1" = "x"; then + echo "Syntax: objfw-compile -o outname source1.m source2.m ..." exit 1 fi status_compiling() { printf "\033[K\033[0;33mCompiling \033[1;33m$1\033[0;33m...\033[0m\r" @@ -44,25 +44,52 @@ printf "\033[K\033[0;31mFailed to link \033[1;31m$1\033[0;31m!" printf "\033[0m\n" exit $2 } -out="$1" +flags_done="no" +out="" objs="" link="no" -shift - -case "$out" in - *.c | *.C | *.cpp | *.cxx | *.C | *.h | *.m | *.mm | *.M) - echo "The first paramter must be the output name!" 1>&2 - exit 1 - ;; -esac +out_prefix="" +out_suffix="" while test x"$1" != "x"; do case "$1" in + -o|--out) + shift + out="$1" + ;; + -l|--lib) + if test x"flags_done" = x"yes"; then + printf "The --lib flag needs to be specified " + printf "before any source file!\n" + exit 1 + fi + + shift + + if ! echo "$1" | grep "^[0-9]\+\.[0-9]\+" >/dev/null + then + echo "$1 is not a valid library version!" + exit 1 + fi + + export LIB_MAJOR="${1%.*}" + export LIB_MINOR="${1#*.}" + + OBJCFLAGS="$OBJCFLAGS $($OBJFW_CONFIG --lib-cflags)" + LDFLAGS="$LDFLAGS $($OBJFW_CONFIG --lib-ldflags)" + out_prefix="$($OBJFW_CONFIG --lib-prefix)" + out_suffix="$($OBJFW_CONFIG --lib-suffix)" + ;; + -*) + echo "Unknown option: $1" + exit 1 + ;; *.m) + flags_done="yes" obj="${1%.m}.o" objs="$objs $obj" build="no" deps=$($OBJC -E -M $CPPFLAGS $ENV_CPPFLAGS $1 | \ sed 's/.*: //' | sed 's/\\//g') @@ -90,11 +117,16 @@ esac shift done -if test ! -f "$out" -o x"$link" = x"yes"; then - status_linking $out - $OBJC -o $out $objs $LIBS $ENV_LIBS $LDFLAGS $ENV_LDFLAGS || \ - status_link_failed $out $? - status_linked $out +if test x"$out" = x""; then + echo "No output name specified! Use -o or --out!" + exit 1 +fi + +if test ! -f "$out_prefix$out$out_suffix" -o x"$link" = x"yes"; then + status_linking $out_prefix$out$out_suffix + $OBJC -o $out_prefix$out$out_suffix $objs $LIBS $ENV_LIBS $LDFLAGS \ + $ENV_LDFLAGS || status_link_failed $out $? + status_linked $out_prefix$out$out_suffix fi Index: utils/objfw-config.in ================================================================== --- utils/objfw-config.in +++ utils/objfw-config.in @@ -7,10 +7,14 @@ CXXFLAGS="" OBJC="@OBJC@" OBJCFLAGS="@GNU_RUNTIME@ -fexceptions -fobjc-exceptions" OBJCFLAGS="$OBJCFLAGS -fconstant-string-class=OFConstantString" OBJCFLAGS="$OBJCFLAGS @NO_CONST_CFSTRINGS@ @BLOCKS_FLAGS@ @NO_WARN_UNUSED@" +LIB_CFLAGS="@LIB_CFLAGS@" +LIB_LDFLAGS="@LIB_LDFLAGS@" +LIB_PREFIX="@LIB_PREFIX@" +LIB_SUFFIX="@LIB_SUFFIX@" LDFLAGS="" LDFLAGS_REEXPORT="@LDFLAGS_REEXPORT@" LDFLAGS_RPATH="@LDFLAGS_RPATH@" LIBS="-L${libdir} -lobjfw @LIBS@" VERSION="0.4-dev" @@ -27,10 +31,14 @@ --objcflags Outputs the required OBJCFLAGS --ldflags Outputs the required LDFLAGS --reexport Outputs LDFLAGS to reexport ObjFW --rpath Outputs LDFLAGS for using rpath --libs Outputs the required LIBS + --lib-cflags Outputs CFLAGS for building a library" + --lib-ldflags Outputs LDFLAGS for building a library" + --lib-prefix Outputs the prefix for libraries" + --lib-suffix Outputs the suffix for libraries" --version Outputs the installed version __EOF__ exit 0 } @@ -60,10 +68,46 @@ printf "%s" "$OBJCFLAGS" ;; --libs) printf "%s" "$LIBS" ;; + --lib-cflags) + if test x"$LIB_MAJOR" = x"" -o x"$LIB_MINOR" = x""; then + echo "LIB_MAJOR and LIB_MINOR need to be set!" \ + 1>&2 + exit 1 + fi + + printf "%s" "$LIB_CFLAGS" + ;; + --lib-ldflags) + if test x"$LIB_MAJOR" = x"" -o x"$LIB_MINOR" = x""; then + echo "LIB_MAJOR and LIB_MINOR need to be set!" \ + 1>&2 + exit 1 + fi + + printf "%s" "$LIB_LDFLAGS" + ;; + --lib-prefix) + if test x"$LIB_MAJOR" = x"" -o x"$LIB_MINOR" = x""; then + echo "LIB_MAJOR and LIB_MINOR need to be set!" \ + 1>&2 + exit 1 + fi + + printf "%s" "$LIB_PREFIX" + ;; + --lib-suffix) + if test x"$LIB_MAJOR" = x"" -o x"$LIB_MINOR" = x""; then + echo "LIB_MAJOR and LIB_MINOR need to be set!" \ + 1>&2 + exit 1 + fi + + printf "%s" "$LIB_SUFFIX" + ;; --ldflags) printf "%s" "$LDFLAGS" ;; --reexport) printf "%s" "$LDFLAGS_REEXPORT"