Annotated mingw-6 changes to clazzes-org debian packages
summarizes the most important changes to debian packages
debian/control
Key changes:
- mingw-w32-pkg-config and mingw-w64-pkg-config are deprecated, use mingw-w64-tools, which contains tools for both architectures (w32/w64).
mingw-w32-gcc and mingw-w64-gcc are deprecated, simply use g++-mingw-w64, which contains all compilers for both architectures (w32/w64).
- Split packages to dev and runtime package
- Root runtime dependencies are mingw-w64-gcc-rt resp. mingw-w64-g++-rt and mingw-w32-gcc-rt resp. mingw-w32-g++-rt
- Root development dependencies are mingw-w64-i686-dev (w32) and mingw-w64-x86-64-dev (w64)
- Correctly refer to upstream dev/runtime packages like mingw-w64-zlib, mingw-w64-zlib-dev and other likewise dependencies of your package (not shown in the example below...)
- Depend on debhelper >= 9
- Distribution is jessie, generation is 6
Index: debian/control =================================================================== --- debian/control (.../mingw-w64-libiconv-1.13.1) (Revision 560) +++ debian/control (.../mingw-w64-libiconv-1.14) (Arbeitskopie) @@ -2,18 +2,28 @@ Priority: extra Section: devel Maintainer: Wolfgang Glas <wolfgang.glas@iteg.at> -Build-Depends: cdbs, debhelper (>> 5), mingw-w32-gcc, mingw-w64-gcc +Build-Depends: cdbs, debhelper (>= 9), g++-mingw-w64, mingw-w64-tools XBCS-PBA-Category: mingw -XBCS-PBA-Generation: 5 -XBCS-PBA-Distributions: squeeze wheezy +XBCS-PBA-Generation: 6 +XBCS-PBA-Distributions: jessie XBCS-PBA-Repositories: deb.clazzes.org Package: mingw-w64-libiconv Architecture: all -Depends: mingw-w64-gcc +Depends: mingw-w64-gcc-rt Description: This is the libiconv port to mingw-w64. +Package: mingw-w64-libiconv-dev +Architecture: all +Depends: mingw-w64-x86-64-dev, mingw-w64-libiconv (= ${Source-Version}) +Description: This package contain header files and import libraries of the libiconv port to mingw-w64. + Package: mingw-w32-libiconv Architecture: all -Depends: mingw-w32-gcc +Depends: mingw-w32-gcc-rt Description: This is the libiconv port to mingw-w32. + +Package: mingw-w32-libiconv-dev +Architecture: all +Depends: mingw-w64-i686-dev, mingw-w32-libiconv (= ${Source-Version}) +Description: This package contain header files and import libraries of the libiconv port to mingw-w32.
Result: http://svn.clazzes.org/svn/mingw-pkg/trunk/mingw-w64-deb/mingw-w64-libiconv-1.14/debian/control
debian/rules
Key changes:
- Split deb and runtime packages.
- Do not include /usr/share/cdbs/1/rules/debhelper.mk
- Use dh wildcard rule as described e.g. in https://wiki.debian.org/IntroDebianPackaging
- Define DEB_UPSTREAM_VERSION on your own as seen below, if you need it. (Not needed for most packages...)
- Move $(prefix)/lib and $(prefix)/include to $(devprefix) (likewise for w32...)
- IMPORTANT: Add debian/devhost.txt.gz, debian/*.substvars and debian/*.debhelper.log to the list of cleaned files. (If you don't do this, you will suffer from really crazy effects on rebuilds!!!)
- Do not clean debian/compat, add it to the svn repository.
The fiddling with libiconv.pc is specific to the libiconv example, most modern autoconf packages come with a suitable *.pc file installed in the correct location.
Index: debian/rules =================================================================== --- debian/rules (.../mingw-w64-libiconv-1.13.1) (Revision 560) +++ debian/rules (.../mingw-w64-libiconv-1.14) (Arbeitskopie) @@ -1,10 +1,11 @@ #!/usr/bin/make -f -include /usr/share/cdbs/1/rules/debhelper.mk +DEB_UPSTREAM_VERSION ?= $(shell dpkg-parsechangelog | sed -rne 's/^Version: ([0-9.]+)[-+].*$$/\1/p') prefix=/usr package = mingw-w64-libiconv +devpackage = mingw-w64-libiconv-dev target = x86_64-w64-mingw32 prefix = /usr/$(target) docdir = debian/$(package)/usr/share/doc/$(package) @@ -12,6 +13,7 @@ DESTDIR = $(shell /bin/pwd)/debian/$(package) package32 = mingw-w32-libiconv +devpackage32 = mingw-w32-libiconv-dev target32 = i686-w64-mingw32 prefix32 = /usr/$(target32) docdir32 = debian/$(package32)/usr/share/doc/$(package32) @@ -24,11 +26,23 @@ DEB_DH_ALWAYS_EXCLUDE := .svn + +%: + dh $@ + # do not strip anything. # call 'strip' on a mingw lib*.a file causes the ranlib information to # be discarded rendering the libraries useless. -DEB_DH_STRIP_ARGS := -Xlib +override_dh_strip: +override_dh_shlibdeps: + +export DEB_CFLAGS_MAINT_SET = -O2 -Wall +export DEB_LDFLAGS_MAINT_SET = + +build-indep: common-build-indep +install-indep: common-install-indep + INSTALL_PROGRAM = install common-build-indep:: @@ -44,7 +58,7 @@ clean:: rm -f compile common-install-indep common-build-indep - rm -rf *~ debian/$(package) debian/$(package32) debian/*~ debian/files* debian/substvars debian/compat + rm -rf *~ debian/$(package) debian/$(devpackage) debian/$(package32) debian/$(devpackage32) debian/*~ debian/files* debian/substvars debian/devhost.txt.gz debian/*.substvars debian/*.debhelper.log rm -rf $(builddir) rm -rf $(builddir32) @@ -55,15 +69,23 @@ common-install-indep:: rm -rf debian/$(package) + rm -rf debian/$(devpackage) mkdir debian/$(package) cd $(builddir) && make DESTDIR=$(DESTDIR) install - cd debian/$(package)$(prefix)/lib; ln -s ../bin/libiconv-2.dll libiconv.dll + mkdir -p debian/$(devpackage)/usr/$(target) + mv debian/$(package)/usr/$(target)/include debian/$(devpackage)/usr/$(target) + mv debian/$(package)/usr/$(target)/lib debian/$(devpackage)/usr/$(target) + rm -rf debian/$(package)/usr/$(target)/share rm -rf debian/$(package32) + rm -rf debian/$(devpackage32) mkdir debian/$(package32) cd $(builddir32) && make DESTDIR=$(DESTDIR32) install - cd debian/$(package32)$(prefix32)/lib; ln -s ../bin/libiconv-2.dll libiconv.dll - mkdir -p debian/$(package)/usr/x86_64-w64-mingw32/lib/pkgconfig - sed -e 's/__VERSION__/$(DEB_UPSTREAM_VERSION)/' -e 's/__arch__/x86_64-w64-mingw32/' < pc/libiconv.pc > debian/$(package)/usr/x86_64-w64-mingw32/lib/pkgconfig/libiconv.pc - mkdir -p debian/$(package32)/usr/i686-w64-mingw32/lib/pkgconfig - sed -e 's/__VERSION__/$(DEB_UPSTREAM_VERSION)/' -e 's/__arch__/i686-w64-mingw32/' < pc/libiconv.pc > debian/$(package32)/usr/i686-w64-mingw32/lib/pkgconfig/libiconv.pc + mkdir -p debian/$(devpackage32)/usr/$(target32) + mv debian/$(package32)/usr/$(target32)/include debian/$(devpackage32)/usr/$(target32) + mv debian/$(package32)/usr/$(target32)/lib debian/$(devpackage32)/usr/$(target32) + rm -rf debian/$(package32)/usr/$(target32)/share + mkdir -p debian/$(devpackage)/usr/$(target)/lib/pkgconfig + sed -e 's/__VERSION__/$(DEB_UPSTREAM_VERSION)/' -e 's/__arch__/$(target)/' < pc/libiconv.pc > debian/$(devpackage)/usr/$(target)/lib/pkgconfig/libiconv.pc + mkdir -p debian/$(devpackage32)/usr/$(target32)/lib/pkgconfig + sed -e 's/__VERSION__/$(DEB_UPSTREAM_VERSION)/' -e 's/__arch__/$(target32)/' < pc/libiconv.pc > debian/$(devpackage32)/usr/$(target32)/lib/pkgconfig/libiconv.pc touch common-install-indep
Result: http://svn.clazzes.org/svn/mingw-pkg/trunk/mingw-w64-deb/mingw-w64-libiconv-1.14/debian/rules
debian/compat
Please add a debian/compat file to svn with a singel line containing the number '9' and never delete this file with
Index: debian/compat =================================================================== --- debian/compat (.../mingw-w64-libiconv-1.13.1) (Revision 0) +++ debian/compat (.../mingw-w64-libiconv-1.14) (Revision 609) @@ -0,0 +1 @@ +9
Portable projects examples
- Simple app project: http://svn.clazzes.org/svn/pba/trunk/pba-helloworld-portable/ (mingw-6 applied and released as of 0.3.2)
- Simple lib project: http://svn.clazzes.org/svn/pba/trunk/pba-hellolib-portable/ (mingw-6 TBD)
- Multimodule app project: http://svn.clazzes.org/svn/pba/trunk/pba-hellobigworld-portable/ (mingw-6 TBD)