From e72c5580c6dbb7cc8615aa78efdb6c9becc63f09 Mon Sep 17 00:00:00 2001 From: Eric Petit Date: Wed, 31 May 2006 12:54:53 +0000 Subject: [PATCH] Split and moved makefiles into a seperate folder, fixes and speed-up to the retrieving of the SVN revision, OS X packages now show the revision if this isn't a release build --- .gitignore | 4 +- Makefile | 136 ++++++-------------------- configure | 7 +- macosx/Makefile | 13 --- beos/Makefile => mk/beos.mk | 8 +- cli/Makefile => mk/cli.mk | 12 +-- Makefile.common => mk/common.mk | 4 - mk/config.mk | 14 +++ mk/default.mk | 52 ++++++++++ gtk/Makefile => mk/gtk.mk | 14 +-- libtransmission/Makefile => mk/lib.mk | 11 +-- mk/osx.mk | 59 +++++++++++ gtk/po/Makefile => mk/po.mk | 8 +- mk/version.mk.in | 5 + version.sh | 31 ++++-- 15 files changed, 212 insertions(+), 166 deletions(-) delete mode 100644 macosx/Makefile rename beos/Makefile => mk/beos.mk (78%) rename cli/Makefile => mk/cli.mk (68%) rename Makefile.common => mk/common.mk (96%) create mode 100644 mk/config.mk create mode 100644 mk/default.mk rename gtk/Makefile => mk/gtk.mk (71%) rename libtransmission/Makefile => mk/lib.mk (69%) create mode 100644 mk/osx.mk rename gtk/po/Makefile => mk/po.mk (64%) create mode 100644 mk/version.mk.in diff --git a/.gitignore b/.gitignore index 176a54ac5..6f5ce7d05 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,4 @@ /.depend -/Makefile.config -/Makefile.version Transmission.xcodeproj/*.mode1 Transmission.xcodeproj/*.pbxuser beos/.depend @@ -18,3 +16,5 @@ libtransmission/version.h macosx/English.lproj/*~.nib macosx/Info.plist macosx/Transmission.app +mk/config.mk +mk/version.mk diff --git a/Makefile b/Makefile index aa518d6f1..b29f5ba2a 100644 --- a/Makefile +++ b/Makefile @@ -1,116 +1,38 @@ # $Id$ --include Makefile.config -ifndef CONFIGURE_RUN -$(error You must run ./configure first) -endif +include mk/common.mk --include Makefile.version -include Makefile.common +default: all -ifneq ($(SYSTEM),Darwin) +# Before we do anything else, make sure we have config.mk and an +# updated version.mk -TARGETS = .cli -ifeq ($(GTK),yes) -TARGETS += .gtk -endif -ifeq ($(SYSTEM),BeOS) -TARGETS += .beos -endif - -all: $(TARGETS) - -.lib: .version - @echo "* Building libtransmission" - @$(MAKE) -C libtransmission - -.cli: .lib - @echo "* Building Transmission CLI client" - @$(MAKE) -C cli - -.gtk: .lib - @echo "* Building Transmission GTK+ client" - @$(MAKE) -C gtk - -.beos: .lib - @echo "* Building Transmission BeOS client" - @make -C beos - -install: all $(foreach SUB,$(TARGETS),.install$(SUB)) - -.install.cli: .cli - @echo "* Installing Transmission CLI client" - @$(MAKE) -C cli install - -.install.gtk: .gtk - @echo "* Installing Transmission GTK+ client" - @$(MAKE) -C gtk install - -.install.beos: - -clean: - @$(MAKE) -C libtransmission clean - @$(MAKE) -C cli clean -ifeq ($(GTK),yes) - @$(MAKE) -C gtk clean -endif -ifeq ($(SYSTEM),BeOS) - @$(MAKE) -C beos clean -endif - -else - -all: .version - @$(MAKE) -C macosx - @xcodebuild -alltargets -activeconfiguration | grep -v "^$$" - -clean: - @xcodebuild -alltargets -activeconfiguration clean | grep -v "^$$" - @$(MAKE) -C macosx clean - -MAKELINK = printf "[InternetShortcut]\nURL=http://transmission.m0k.org%s\n" -define PACKAGE_RULE1 - $(RM) tmp "Transmission $(VERSION_STRING)" \ - Transmission-$(VERSION_STRING).dmg - mkdir -p tmp - cp -r macosx/Transmission.app tmp/ - cp AUTHORS tmp/AUTHORS.txt - cp LICENSE tmp/LICENSE.txt - cp NEWS tmp/NEWS.txt - $(MAKELINK) "/" > tmp/Homepage.url - $(MAKELINK) "/forum" > tmp/Forums.url - $(MAKELINK) "/contribute.php" > tmp/Contribute.url -endef -define PACKAGE_RULE2 - mv tmp "Transmission $(VERSION_STRING)" - hdiutil create -format UDZO -srcfolder \ - "Transmission $(VERSION_STRING)" Transmission-$(VERSION_STRING).dmg - rm -rf "Transmission $(VERSION_STRING)" -endef - -package: - $(PACKAGE_RULE1) - $(PACKAGE_RULE2) - -package-release: - $(PACKAGE_RULE1) - strip -S tmp/Transmission.app/Contents/MacOS/Transmission - $(PACKAGE_RULE2) - -endif - -.version: .version1 .version2 - -.version1: +required: mk/config.mk mk/version.mk +mk/config.mk: + @echo "Please run ./configure first." + @false +mk/version.mk: FORCE @echo "Checking SVN revision..." @./version.sh +FORCE: -.version2: - @$(RM) libtransmission/version.h - @( echo "#define VERSION_MAJOR $(VERSION_MAJOR)" && \ - echo "#define VERSION_MINOR $(VERSION_MINOR)" && \ - echo "#define VERSION_STRING \"$(VERSION_STRING)\"" && \ - echo "#define VERSION_REVISION $(VERSION_REVISION)" ) > \ - libtransmission/version.h +# Now call the Makefile that'll really build +# OS X has its special Makefile that wraps to Xcode -Makefile.version: .version1 +-include mk/config.mk +ifneq ($(SYSTEM),Darwin) +REALMAKE = $(MAKE) -f mk/default.mk +else +REALMAKE = $(MAKE) -f mk/osx.mk +endif + +all: required + @$(REALMAKE) all +clean: required + @$(REALMAKE) clean +install: required + @$(REALMAKE) install +package: required + @$(REALMAKE) package +package-release: required + @$(REALMAKE) package-release diff --git a/configure b/configure index 79554817f..26993c8a2 100755 --- a/configure +++ b/configure @@ -284,11 +284,10 @@ lm_test lrintf_test # -# Generate Makefile.config +# Generate config.mk # -rm -f Makefile.config -cat > Makefile.config << EOF -CONFIGURE_RUN = yes +rm -f mk/config.mk +cat > mk/config.mk << EOF SYSTEM = $SYSTEM PREFIX = $PREFIX LOCALEDIR = $LOCALEDIR diff --git a/macosx/Makefile b/macosx/Makefile deleted file mode 100644 index bb69466f9..000000000 --- a/macosx/Makefile +++ /dev/null @@ -1,13 +0,0 @@ -# $Id$ - -include ../Makefile.config -include ../Makefile.version -include ../Makefile.common - -Info.plist: Info.plist.in ../Makefile.version ../Makefile.common - $(RM) $@ - sed -e "s/%%BUNDLE_VERSION%%/$(VERSION_REVISION)/g" \ - -e "s/%%SHORT_VERSION_STRING%%/$(VERSION_STRING)/g" < $< > $@ - -clean: - $(RM) Info.plist diff --git a/beos/Makefile b/mk/beos.mk similarity index 78% rename from beos/Makefile rename to mk/beos.mk index c46b9c9ad..db7c8328a 100644 --- a/beos/Makefile +++ b/mk/beos.mk @@ -1,7 +1,7 @@ # $Id$ -include ../Makefile.config -include ../Makefile.common +include ../mk/config.mk +include ../mk/common.mk SRCS = TRApplication.cpp TRWindow.cpp TRTransfer.cpp \ TRPrefsWindow.cpp TRInfoWindow.cpp @@ -17,13 +17,13 @@ Transmission: $(OBJS) Transmission.rsrc xres -o Transmission Transmission.rsrc mimeset -f Transmission -%.o: %.cpp ../Makefile.config ../Makefile.common Makefile +%.o: %.cpp ../mk/config.mk ../mk/common.mk ../mk/beos.mk $(CXX) $(CXXFLAGS) -o $@ -c $< clean: $(RM) Transmission $(OBJS) -.depend: $(SRCS) Makefile +.depend: $(SRCS) ../mk/config.mk ../mk/common.mk ../mk/beos.mk $(RM) .depend $(foreach SRC, $(SRCS), $(CXX) $(CXXFLAGS) -MM $(SRC) >> .depend;) diff --git a/cli/Makefile b/mk/cli.mk similarity index 68% rename from cli/Makefile rename to mk/cli.mk index 4d59bb9b4..da1326edd 100644 --- a/cli/Makefile +++ b/mk/cli.mk @@ -1,8 +1,7 @@ # $Id$ -include ../Makefile.config -include ../Makefile.version -include ../Makefile.common +include ../mk/config.mk +include ../mk/common.mk SRCS = transmissioncli.c OBJS = $(SRCS:%.c=%.o) @@ -10,13 +9,10 @@ OBJS = $(SRCS:%.c=%.o) CFLAGS += -I../libtransmission LDFLAGS += ../libtransmission/libtransmission.a -all: transmissioncli - @true - transmissioncli: $(OBJS) ../libtransmission/libtransmission.a $(LINK_RULE) -%.o: %.c ../Makefile.config ../Makefile.common Makefile +%.o: %.c ../mk/config.mk ../mk/common.mk ../mk/cli.mk $(CC_RULE) clean: @@ -25,7 +21,7 @@ clean: @echo "Clean $(OBJS)" @$(RM) $(OBJS) -.depend: $(SRCS) ../Makefile.config ../Makefile.common Makefile +.depend: $(SRCS) ../mk/config.mk ../mk/common.mk ../mk/cli.mk $(DEP_RULE) install: install-bin install-man diff --git a/Makefile.common b/mk/common.mk similarity index 96% rename from Makefile.common rename to mk/common.mk index 65e9f6499..6f01cd3e7 100644 --- a/Makefile.common +++ b/mk/common.mk @@ -1,9 +1,5 @@ # $Id$ -VERSION_MAJOR = 0 -VERSION_MINOR = 5 -VERSION_STRING = 0.6-svn - TMPCFLAGS = -g -Wall -W -O3 -funroll-loops -D_FILE_OFFSET_BITS=64 \ -D_LARGEFILE_SOURCE -D_GNU_SOURCE \ -DSYS_$(shell echo $(SYSTEM) | tr a-z A-Z) diff --git a/mk/config.mk b/mk/config.mk new file mode 100644 index 000000000..5c1e960eb --- /dev/null +++ b/mk/config.mk @@ -0,0 +1,14 @@ +SYSTEM = Linux +PREFIX = /usr/local +LOCALEDIR = /usr/local/share/locale +BEOS_NETSERVER = no +PTHREAD = yes +OPENSSL = yes +GTK = yes +CC = cc +CFLAGS = +CXX = c++ +CXXFLAGS = +LDFLAGS = -lm +CFLAGS_GTK = -DXTHREADS -I/usr/include/gtk-2.0 -I/usr/lib/gtk-2.0/include -I/usr/X11R6/include -I/usr/include/atk-1.0 -I/usr/include/pango-1.0 -I/usr/include/freetype2 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -DLOCALEDIR=\"/usr/local/share/locale\" +LDFLAGS_GTK = -Wl,--export-dynamic -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgdk_pixbuf-2.0 -lm -lpangoxft-1.0 -lpangox-1.0 -lpango-1.0 -lgobject-2.0 -lgmodule-2.0 -ldl -lglib-2.0 diff --git a/mk/default.mk b/mk/default.mk new file mode 100644 index 000000000..2d47e115d --- /dev/null +++ b/mk/default.mk @@ -0,0 +1,52 @@ +# $Id$ + +include mk/config.mk +include mk/common.mk + +TARGETS = .cli +ifeq ($(GTK),yes) +TARGETS += .gtk +endif +ifeq ($(SYSTEM),BeOS) +TARGETS += .beos +endif + +all: $(TARGETS) + +.lib: + @echo "* Building libtransmission" + @$(MAKE) -C libtransmission -f ../mk/lib.mk + +.cli: .lib + @echo "* Building Transmission CLI client" + @$(MAKE) -C cli -f ../mk/cli.mk + +.gtk: .lib + @echo "* Building Transmission GTK+ client" + @$(MAKE) -C gtk -f ../mk/gtk.mk + +.beos: .lib + @echo "* Building Transmission BeOS client" + @make -C beos -f ../mk/beos.mk + +install: all $(foreach SUB,$(TARGETS),.install$(SUB)) + +.install.cli: .cli + @echo "* Installing Transmission CLI client" + @$(MAKE) -C cli -f mk/cli.mk install + +.install.gtk: .gtk + @echo "* Installing Transmission GTK+ client" + @$(MAKE) -C gtk -f mk/gtk.mk install + +.install.beos: + +clean: + @$(MAKE) -C libtransmission -f ../mk/lib.mk clean + @$(MAKE) -C cli -f ../mk/cli.mk clean +ifeq ($(GTK),yes) + @$(MAKE) -C gtk -f ../mk/gtk.mk clean +endif +ifeq ($(SYSTEM),BeOS) + @$(MAKE) -C beos -f ../mk/beos.mk clean +endif diff --git a/gtk/Makefile b/mk/gtk.mk similarity index 71% rename from gtk/Makefile rename to mk/gtk.mk index f1c1ba4bc..c4f94f6d3 100644 --- a/gtk/Makefile +++ b/mk/gtk.mk @@ -1,7 +1,7 @@ # $Id$ -include ../Makefile.config -include ../Makefile.common +include ../mk/config.mk +include ../mk/common.mk SRCS = conf.c dialogs.c io.c ipc.c main.c tr_backend.c tr_torrent.c \ tr_cell_renderer_torrent.c util.c @@ -17,9 +17,9 @@ transmission-gtk: $(OBJS) ../libtransmission/libtransmission.a $(LINK_RULE) .po: - @$(MAKE) -C po + @$(MAKE) -C po -f ../../mk/po.mk -%.o: %.c ../Makefile.config ../Makefile.common Makefile +%.o: %.c ../mk/config.mk ../mk/common.mk ../mk/gtk.mk $(CC_RULE) clean: @@ -27,14 +27,14 @@ clean: @$(RM) transmission-gtk @echo "Clean $(OBJS)" @$(RM) $(OBJS) - @$(MAKE) -C po clean + @$(MAKE) -C po -f ../../mk/po.mk clean -.depend: $(SRCS) ../Makefile.config ../Makefile.common Makefile +.depend: $(SRCS) ../mk/config.mk ../mk/common.mk ../mk/gtk.mk $(DEP_RULE) install: transmission-gtk .po $(INSTALL_BIN_RULE) - @$(MAKE) -C po install + @$(MAKE) -C po -f ../../mk/po.mk install morepot: $(SRCS) xgettext --output=po/transmission-gtk.pot --from-code=UTF-8 --add-comments --keyword=_ --keyword=N_ $^ diff --git a/libtransmission/Makefile b/mk/lib.mk similarity index 69% rename from libtransmission/Makefile rename to mk/lib.mk index a18640044..0d5489dc9 100644 --- a/libtransmission/Makefile +++ b/mk/lib.mk @@ -1,7 +1,7 @@ # $Id$ -include ../Makefile.config -include ../Makefile.common +include ../mk/config.mk +include ../mk/common.mk SRCS = transmission.c bencode.c net.c tracker.c peer.c inout.c \ metainfo.c sha1.c utils.c fdlimit.c clients.c completion.c \ @@ -10,15 +10,12 @@ OBJS = $(SRCS:%.c=%.o) CFLAGS += -D__TRANSMISSION__ -all: libtransmission.a - @true - libtransmission.a: $(OBJS) @echo "Library $@" @ar ru $@ $(OBJS) @ranlib $@ -%.o: %.c ../Makefile.config ../Makefile.common Makefile +%.o: %.c ../mk/config.mk ../mk/common.mk ../mk/cli.mk $(CC_RULE) clean: @@ -26,7 +23,7 @@ clean: @echo "Clean $(OBJS)" @$(RM) libtransmission.a $(OBJS) -.depend: $(SRCS) ../Makefile.config ../Makefile.common Makefile +.depend: $(SRCS) ../mk/config.mk ../mk/common.mk ../mk/cli.mk $(DEP_RULE) -include .depend diff --git a/mk/osx.mk b/mk/osx.mk new file mode 100644 index 000000000..2b9d1b633 --- /dev/null +++ b/mk/osx.mk @@ -0,0 +1,59 @@ +# $Id$ + +# +# Update Info.plist with the version from version.mk +# +include mk/version.mk +macosx/Info.plist: macosx/Info.plist.in mk/version.mk + $(RM) $@ + sed -e "s/%%BUNDLE_VERSION%%/$(VERSION_REVISION)/g" \ + -e "s/%%SHORT_VERSION_STRING%%/$(VERSION_STRING)/g" < $< > $@ + +# +# Then use Xcode do make the actual build +# +all: macosx/Info.plist + @xcodebuild -alltargets -activeconfiguration | grep -v "^$$" +clean: + @xcodebuild -alltargets -activeconfiguration clean | grep -v "^$$" + $(RM) macosx/Info.plist + + +# +# Package generation +# Check if this is a release or an SVN build +# +ifeq ($(VERSION_STRING),$(VERSION_MAJOR).$(VERSION_MINOR)) +VERSION_PACKAGE = $(VERSION_STRING) +else +VERSION_PACKAGE = $(VERSION_STRING)-r$(VERSION_REVISION) +endif + +URL = printf "[InternetShortcut]\nURL=http://transmission.m0k.org%s\n" +define PACKAGE_RULE1 + $(RM) tmp "Transmission $(VERSION_PACKAGE)" \ + Transmission-$(VERSION_PACKAGE).dmg + mkdir -p tmp + cp -r macosx/Transmission.app tmp/ + cp AUTHORS tmp/AUTHORS.txt + cp LICENSE tmp/LICENSE.txt + cp NEWS tmp/NEWS.txt + $(URL) "/" > tmp/Homepage.url + $(URL) "/forum" > tmp/Forums.url + $(URL) "/contribute.php" > tmp/Contribute.url +endef +define PACKAGE_RULE2 + mv tmp "Transmission $(VERSION_PACKAGE)" + hdiutil create -format UDZO -srcfolder \ + "Transmission $(VERSION_PACKAGE)" Transmission-$(VERSION_PACKAGE).dmg + rm -rf "Transmission $(VERSION_PACKAGE)" +endef + +package: + $(PACKAGE_RULE1) + $(PACKAGE_RULE2) + +package-release: + $(PACKAGE_RULE1) + strip -S tmp/Transmission.app/Contents/MacOS/Transmission + $(PACKAGE_RULE2) diff --git a/gtk/po/Makefile b/mk/po.mk similarity index 64% rename from gtk/po/Makefile rename to mk/po.mk index 6c685ab01..f9abd5d3a 100644 --- a/gtk/po/Makefile +++ b/mk/po.mk @@ -1,7 +1,7 @@ # $Id$ -include ../../Makefile.config -include ../../Makefile.common +include ../../mk/config.mk +include ../../mk/common.mk POFILES = $(wildcard *.po) MOFILES = $(POFILES:%.po=%.mo) @@ -9,7 +9,7 @@ MOFILES = $(POFILES:%.po=%.mo) all: $(MOFILES) @true -%.mo: %.po ../../Makefile.config ../../Makefile.common Makefile +%.mo: %.po ../../mk/config.mk ../../mk/common.mk ../../mk/po.mk $(MSGFMT_RULE) %.mo.install: %.mo @@ -17,7 +17,7 @@ all: $(MOFILES) clean: @echo "Clean $(MOFILES)" - $(RM) $(MOFILES) + @$(RM) $(MOFILES) install: $(MOFILES) $(MOFILES:%.mo=%.mo.install) diff --git a/mk/version.mk.in b/mk/version.mk.in new file mode 100644 index 000000000..70ebc69f6 --- /dev/null +++ b/mk/version.mk.in @@ -0,0 +1,5 @@ +# $Id$ + +VERSION_MAJOR = 0 +VERSION_MINOR = 5 +VERSION_STRING = 0.6-svn diff --git a/version.sh b/version.sh index defa4a049..e02fe8400 100755 --- a/version.sh +++ b/version.sh @@ -2,11 +2,11 @@ # # $Id$ +# Get current SVN revision from Ids in all source files REVMAX=0 - -for pattern in '*.[chm]' '*.cpp' '*.po' 'Makefile*' 'configure'; do - for f in `find . -name "$pattern"`; do - REV=`grep '\$Id:' $f | sed 's/.*\$Id: [^ ]* \([0-9]*\) .*/\1/'` +for pattern in '*.[chm]' '*.cpp' '*.po' '*.mk'; do + for f in `find . -name "$pattern"` Makefile configure; do + REV=`sed -e '/\$Id:/!d; s/.*\$Id$f` if [ -n "$REV" ]; then if [ "$REV" -gt "$REVMAX" ]; then REVMAX="$REV" @@ -15,7 +15,26 @@ for pattern in '*.[chm]' '*.cpp' '*.po' 'Makefile*' 'configure'; do done done -rm -f Makefile.version -echo "VERSION_REVISION = $REVMAX" > Makefile.version +# Generate files to be included: only overwrite them if changed so make +# won't rebuild everything unless necessary +replace_if_differs () +{ + if cmp $1 $2 > /dev/null 2>&1; then + rm -f $1 + else + mv -f $1 $2 + fi +} + +# Generate version.mk +cp -f mk/version.mk.in mk/version.mk.new +echo "VERSION_REVISION = $REVMAX" >> mk/version.mk.new +replace_if_differs mk/version.mk.new mk/version.mk + +# Generate version.h from version.mk +grep "^VER" mk/version.mk | sed -e 's/^/#define /g' -e 's/= //g' \ + -e 's/\(VERSION_STRING[ ]*\)\(.*\)/\1"\2"/' > \ + libtransmission/version.h.new +replace_if_differs libtransmission/version.h.new libtransmission/version.h exit 0