DB_VERSION = '4.5.20' DB_URL = 'http://download.oracle.com/berkeley-db/db-%s.tar.gz' % DB_VERSION DB_PATCHES = ['http://www.oracle.com/technology/products/berkeley-db/db/update/4.5.20/patch.4.5.20.1', 'http://www.oracle.com/technology/products/berkeley-db/db/update/4.5.20/patch.4.5.20.2'] DB_FILES = ['db_static.vcproj', 'db_static_dbginfo.vsprops'] DB_CONFIGURE = '--disable-cryptography --disable-replication ' + \ '--disable-statistics --disable-shared --enable-static' LIBICONV_VERSION = '1.11' LIBICONV_URL = 'ftp://ftp.gnu.org/pub/gnu/libiconv/libiconv-%s.tar.gz' % LIBICONV_VERSION LIBICONV_CONFIGURE = '--disable-shared' GETTEXT_VERSION = '0.16.1' GETTEXT_URL = 'ftp://ftp.gnu.org/pub/gnu/gettext/gettext-%s.tar.gz' % GETTEXT_VERSION GETTEXT_PATCHES = ['gettext-0.16.1-mingw-localenames.patch'] GETTEXT_CONFIGURE = '--disable-java ' + \ '--disable-rpath --disable-openmp ' + \ '--disable-shared ' GETTEXT_BINARIES = ['msgfmt', 'msgmerge', 'msgunfmt', 'xgettext', 'msgcat'] WX_VERSION = '2.8.6' WX_URL = 'ftp://ftp.wxwidgets.org/pub/%s/wxWidgets-%s.tar.bz2' % (WX_VERSION, WX_VERSION) WX_PATCHES = ['wx-2.8.6-mac-dialog-fix.patch'] # NB: don't use --enable-debug_info, it forces -O0! WX_CONFIGURE = '--disable-shared --enable-unicode --disable-tga' WX_WINFLAGS = 'SHARED=0 BUILD=release DEBUG_INFO=1 UNICODE=1 USE_MEDIA=0 USE_AUI=0 USE_RICHTEXT=0 USE_STC=0 USE_QA=1' SPARKLE_VERSION = '1.1' SPARKLE_URL = 'http://www.andymatuschak.org/files/Sparkle-%s.zip' % SPARKLE_VERSION SPARKLE_PATCHES = ['sparkle-1.1-carbon.patch'] INNOSETUP_VERSION = '5.2.2' INNOSETUP_URL = 'http://files.jrsoftware.org/ispack/ispack-%s.exe' % INNOSETUP_VERSION INNOUNP_URL = 'http://innounp.sf.net/test020.rar' from rlsbot import BuildEnvironment env = BuildEnvironment() env['OSX_SDKROOT'] = '/Developer/SDKs/MacOSX10.4u.sdk' env['OSX_CFLAGS'] = '-isysroot $OSX_SDKROOT -O2 -ggdb3' env['OSX_CXXFLAGS'] = '-isysroot $OSX_SDKROOT -O2 -ggdb3' env['OSX_OBJCFLAGS'] = '-isysroot $OSX_SDKROOT -O2 -ggdb3' env['OSX_LDFLAGS'] = '-Wl,-syslibroot,$OSX_SDKROOT -ggdb3' # -feliminate-dwarf2-dups' env['OSX_CFLAGS_PPC'] = '$OSX_CFLAGS -arch ppc' env['OSX_CXXFLAGS_PPC'] = '$OSX_CXXFLAGS -arch ppc' env['OSX_OBJCFLAGS_PPC'] = '$OSX_OBJCFLAGS -arch ppc' env['OSX_LDFLAGS_PPC'] = '$OSX_LDFLAGS -arch ppc' env['OSX_CFLAGS_X86'] = '$OSX_CFLAGS -arch i386' env['OSX_CXXFLAGS_X86'] = '$OSX_CXXFLAGS -arch i386' env['OSX_OBJCFLAGS_X86'] = '$OSX_OBJCFLAGS -arch i386' env['OSX_LDFLAGS_X86'] = '$OSX_LDFLAGS -arch i386' env['OSX_HOST_PPC'] = 'powerpc-apple-darwin8' env['OSX_HOST_X86'] = 'i686-apple-darwin8' # FIXME: this should be per-agent configuration env['MINGW_HOST'] = 'i686-pc-mingw32' # FIXME: this should be per-agent configuration # FIXME: have some directives on specifying what is required from the agent # native type of the agent we're executing on env['OSX_NATIVE'] = 'ppc' # 'ppc' or 'x86' OSX_ENVIRONMENT_COMMON = { 'MACOSX_DEPLOYMENT_TARGET' : '10.4', } OSX_ENVIRONMENT_PPC = { 'CFLAGS' : '$OSX_CFLAGS_PPC', 'CXXFLAGS' : '$OSX_CXXFLAGS_PPC', 'OBJCFLAGS' : '$OSX_OBJCFLAGS_PPC', 'LDFLAGS' : '$OSX_LDFLAGS_PPC', } OSX_ENVIRONMENT_PPC.update(OSX_ENVIRONMENT_COMMON) OSX_ENVIRONMENT_X86 = { 'CFLAGS' : '$OSX_CFLAGS_X86', 'CXXFLAGS' : '$OSX_CXXFLAGS_X86', 'OBJCFLAGS' : '$OSX_OBJCFLAGS_X86', 'LDFLAGS' : '$OSX_LDFLAGS_X86', } OSX_ENVIRONMENT_X86.update(OSX_ENVIRONMENT_COMMON) # FIXME: these two should be in agent-specific (SCons) environment rather # that agent/target execution (OS) environment MINGW_ENVIRONMENT = { 'CC' : '$MINGW_HOST-gcc', 'CXX' : '$MINGW_HOST-g++', } VS2005_ENVIRONMENT = { 'MSVS_PATH' : 'C:\\Program Files\\Microsoft Visual Studio 8', 'PSDK_PATH' : 'C:\\Program Files\\Microsoft Platform SDK', } # ----------------------------------------------------------------- # Berkeley DB # ----------------------------------------------------------------- src_db = env.ComponentSources( name='db', source=DB_URL, patches=DB_PATCHES, morefiles=DB_FILES, post_commands=['mv db_static* build_windows']) db_osx_ppc = env.BuildComponent( name='db-osx-ppc', agent='osx', sources=src_db, deps=None, commands=[ '(cd build_unix ; ../dist/configure --host=$OSX_HOST_PPC --prefix=/usr/local %s)' % DB_CONFIGURE, '(cd build_unix ; make)', '(cd build_unix; make install DESTDIR=`pwd`/../D)', 'rm -rf D/usr/local/docs' ], environment=OSX_ENVIRONMENT_PPC, outputs=['D/usr/local/*']) db_osx_x86 = env.BuildComponent( name='db-osx-x86', agent='osx', sources=src_db, deps=None, commands=[ '(cd build_unix ; ../dist/configure --host=$OSX_HOST_X86 --prefix=/usr/local %s)' % DB_CONFIGURE, '(cd build_unix ; make)', '(cd build_unix; make install DESTDIR=`pwd`/../D)', 'rm -rf D/usr/local/docs' ], environment=OSX_ENVIRONMENT_X86, outputs=['D/usr/local/*']) db_osx = env.Alias('build-db-osx', [db_osx_ppc, db_osx_x86]) db_win32 = env.BuildComponent( name='db-win32', agent=['win32','vs2005'], sources=src_db, deps=None, toolchain=env.VisualStudioToolchain, commands=[ 'cd build_windows', 'vcbuild /useenv /override:db_static_dbginfo.vsprops /platform:Win32 db_static.vcproj Release', 'del /f /q Release\\db_static\\*.*', ], environment=VS2005_ENVIRONMENT, outputs=['build_windows']) # ----------------------------------------------------------------- # libiconv (needed by gettext) # ----------------------------------------------------------------- src_libiconv = env.ComponentSources( name='libiconv', source=LIBICONV_URL) libiconv_win32 = env.BuildComponent( name='libiconv-win32', agent='mingw', sources=src_libiconv, deps=None, commands=[ './configure --host=$MINGW_HOST %s' % LIBICONV_CONFIGURE, 'make', 'make install DESTDIR=`pwd`/D', ], environment=MINGW_ENVIRONMENT, outputs=['D/usr/local/*']) # ----------------------------------------------------------------- # GNU gettext # ----------------------------------------------------------------- src_gettext = env.ComponentSources( name='gettext', source=GETTEXT_URL, patches=GETTEXT_PATCHES) gettext_osx_ppc = env.BuildComponent( name='gettext-osx-ppc', agent='osx', sources=src_gettext, deps=None, commands=[ './configure --host=$OSX_HOST_PPC --with-libiconv-prefix=$OSX_SDKROOT/usr %s' % GETTEXT_CONFIGURE, 'make', 'make install DESTDIR=`pwd`/D', ], environment=OSX_ENVIRONMENT_PPC, outputs=['D/usr/local/bin/*']) gettext_osx_x86 = env.BuildComponent( name='gettext-osx-x86', agent='osx', sources=src_gettext, deps=None, commands=[ './configure --host=$OSX_HOST_X86 --with-libiconv-prefix=$OSX_SDKROOT/usr %s' % GETTEXT_CONFIGURE, 'make', 'make install DESTDIR=`pwd`/D', ], environment=OSX_ENVIRONMENT_X86, outputs=['D/usr/local/bin/*']) gettext_osx = env.BuildComponent( name='gettext-osx', agent='osx', sources=[], deps=[(gettext_osx_ppc, 'ppc'), (gettext_osx_x86, 'x86')], commands=[ 'mkdir univ', 'for i in %s ; do lipo -arch ppc ppc/$$i -arch i386 x86/$$i -create -output univ/$$i; done' % ' '.join(GETTEXT_BINARIES) ], environment=OSX_ENVIRONMENT_COMMON, outputs=['univ/*']) gettext_win32 = env.BuildComponent( name='gettext-win32', agent='mingw', sources=src_gettext, deps=[(libiconv_win32, 'libiconv')], commands=[ './configure --host=$MINGW_HOST --with-libiconv-prefix=`pwd`/libiconv %s' % GETTEXT_CONFIGURE, 'make', 'make install-strip DESTDIR=`pwd`/D', 'cp COPYING `pwd`/D/usr/local/bin', ], environment=MINGW_ENVIRONMENT, outputs=['D/usr/local/bin/*']) # ----------------------------------------------------------------- # Sparkle # ----------------------------------------------------------------- src_sparkle = env.ComponentSources( name='sparkle', source=SPARKLE_URL, patches=SPARKLE_PATCHES) sparkle = env.BuildComponent( name='sparkle', agent='osx', sources=src_sparkle, deps=None, commands=[ 'cd Extras/Source', 'xcodebuild -project Sparkle.xcodeproj -target Sparkle -configuration Release', ], environment=OSX_ENVIRONMENT_COMMON, outputs=['Extras/Source/build/Release/*']) # ----------------------------------------------------------------- # wxWidgets # ----------------------------------------------------------------- src_wx = env.ComponentSources( name='wx', source=WX_URL, patches=WX_PATCHES, post_commands=['(cd locale ; make allmo)']) wx_osx_ppc = env.BuildComponent( name='wx-osx-ppc', agent='osx', sources=src_wx, deps=None, commands=[ './configure --host=$OSX_HOST_PPC %s' % WX_CONFIGURE, 'make', 'make install DESTDIR=`pwd`/D', '(cd D/usr/local/bin; ln -sf ../lib/wx/config/* wx-config)'], environment=OSX_ENVIRONMENT_PPC, outputs=['D/usr/local/*']) wx_osx_x86 = env.BuildComponent( name='wx-osx-x86', agent='osx', sources=src_wx, deps=None, commands=[ './configure --host=$OSX_HOST_X86 %s' % WX_CONFIGURE, 'make', 'make install DESTDIR=`pwd`/D', '(cd D/usr/local/bin; ln -sf ../lib/wx/config/* wx-config)'], environment=OSX_ENVIRONMENT_X86, outputs=['D/usr/local/*']) wx_osx = env.Alias('build-wx-osx', [wx_osx_ppc, wx_osx_x86]) wx_win32 = env.BuildComponent( name='wx-win32', agent=['win32', 'vs2005'], sources=src_wx, deps=None, toolchain=env.VisualStudioToolchain, commands=[ 'cd build/msw', 'nmake -f makefile.vc %s' % WX_WINFLAGS, 'cd ../../utils/wxrc', 'nmake -f makefile.vc %s' % WX_WINFLAGS], environment=VS2005_ENVIRONMENT, outputs=['include', 'lib', 'locale', 'utils/wxrc/vc_*/wxrc.exe*']) # ----------------------------------------------------------------- # innosetup # ----------------------------------------------------------------- src_innounp = env.ComponentSources( name='innounp', source=INNOUNP_URL) src_innosetup = env.ComponentSources( name='innosetup', source=INNOSETUP_URL) innosetup = env.BuildComponent( name='innosetup', agent='win32', sources=src_innosetup, deps=[src_innounp], commands=[ 'innounp -x ispack-5.2.2.exe', 'move {app}\\ISCC?2.exe {app}\\ISCC.exe', 'del {app}\\ISCC?1.exe', 'move {app}\\ISCmplr?2.dll {app}\\ISCmplr.dll', 'move {app}\\ISCmplr?1.dll {app}\\ISCmplr.dls', ], outputs=['{app}/*']) # ----------------------------------------------------------------- # poedit # ----------------------------------------------------------------- src_poedit = env.ComponentSources( name='poedit', source='..', post_commands=['./bootstrap']) poedit_tarball = env.BuildComponent( name='poedit-tarball', agent='unix', sources=src_poedit, deps=None, commands=['./make-distrib.sh'], outputs=['poedit-*.tar.gz']) poedit_osx = env.BuildComponent( name='poedit-osx', agent='osx', sources=src_poedit, deps=[ (wx_osx_ppc, 'ppc/deps'), (wx_osx_x86, 'x86/deps'), (db_osx_ppc, 'ppc/deps'), (db_osx_x86, 'x86/deps'), (gettext_osx, 'deps/gettext'), (sparkle, 'deps/sparkle'), ], commands=[ # build PPC binary: 'cd ppc', '../configure' ' --host=$OSX_HOST_PPC' ' --with-wx-config=`pwd`/deps/bin/wx-config --with-wx-prefix=`pwd`/deps' ' --with-sparkle=`pwd`/../deps/sparkle' ' CFLAGS="$OSX_CFLAGS_PPC"' ' CXXFLAGS="$OSX_CXXFLAGS_PPC"' ' OBJCFLAGS="$OSX_OBJCFLAGS_PPC"' ' CPPFLAGS="-I`pwd`/deps/include"' ' LDFLAGS="$OSX_LDFLAGS_PPC -L`pwd`/deps/lib"' ' WXRC="`pwd`/../$OSX_NATIVE/deps/bin/wxrc"', 'make', 'cd ..', # build Intel binary: 'cd x86', '../configure' ' --host=$OSX_HOST_X86' ' --with-wx-config=`pwd`/deps/bin/wx-config --with-wx-prefix=`pwd`/deps' ' --with-sparkle=`pwd`/../deps/sparkle' ' CFLAGS="$OSX_CFLAGS_X86"' ' CXXFLAGS="$OSX_CXXFLAGS_X86"' ' OBJCFLAGS="$OSX_OBJCFLAGS_X86"' ' CPPFLAGS="-I`pwd`/deps/include"' ' LDFLAGS="$OSX_LDFLAGS_X86 -L`pwd`/deps/lib"' ' WXRC="`pwd`/../$OSX_NATIVE/deps/bin/wxrc"', 'make', # merge them: 'mv src/poedit src/poedit-x86', 'lipo -arch ppc ../ppc/src/poedit -arch i386 src/poedit-x86 -create -output src/poedit', # finally, create the bundle: 'GETTEXT_BINARIES="`pwd`/../deps/gettext" WX_ROOT="`pwd`/deps" make dist-osx', ], environment=OSX_ENVIRONMENT_COMMON, outputs=['x86/poedit-*.dmg', 'x86/src/*dSYM*']) poedit_win32 = env.BuildComponent( name='poedit-win32', agent=['win32', 'vs2005'], sources=src_poedit, deps=[ (wx_win32, 'deps/wx'), (gettext_win32, 'deps/gettext'), (db_win32, 'deps/db'), (innosetup, 'deps/inno'), ], toolchain=env.VisualStudioToolchain, commands=[ 'cd win32', 'set WXWIN=..\\deps\\wx', 'set WXRC="%WXWIN%\\wxrc.exe"', 'nmake -f makefile.vc WX_DEBUG=0 WXRC=%WXRC% DB_PATH=..\\deps\\db', '..\\deps\\inno\\iscc poedit.iss', ], environment=VS2005_ENVIRONMENT, outputs=['poedit-*-setup.exe', 'win32/poedit.pdb'])