# -*- ruby -*- # sake variant sake0 require 'sake0/component' class Sake::CompBuild def pyd_file generated_file("_ctypes.pyd") end end $comp = Sake::Component.new(:basename => 'ctypes', :vendor => "HIIT", :version => [0, 2], :uid_v9 => 0xe3462354, # test UID for v9 :caps => Sake::DEV_CERT_CAPS) if $sake_op[:kits] $kits = Sake::DevKits::get_exact_set($sake_op[:kits].strip.split(/,/)) else # Target all devices that look like they support Python builds. $kits = Sake::DevKits::get_all $kits.delete_if do |kit| !kit.supports_python? end end $signsisrc = File.join(ENV["HOME"], "symbian-signed", "signsis.rb") load($signsisrc) if File.exist? $signsisrc if $sake_op[:szeged] # use Szeged GCC 3.0 backport $epoc_gcc = "gcc-3.0-psion-98r2" end $builds = $kits.map do |kit| Sake::CompBuild.new :component => $comp, :devkit => kit end $builds = $builds.map do |build| if build.target.symbian_platform.major_version >= 9 selfbuild = build.to_self_signed selfbuild.cert_file = $sake_op[:cert] || $self_cert || raise selfbuild.key_file = $sake_op[:key] || $key_file || raise selfbuild.passphrase = $sake_op[:passphrase] || $key_password devbuild = build.to_dev_signed devbuild.cert_file = $sake_op[:cert] || $dev_cert || raise devbuild.key_file = $sake_op[:key] || $key_file || raise devbuild.passphrase = $sake_op[:passphrase] || $key_password [selfbuild, devbuild] end end $builds.compact! $builds.flatten! # We probably do not require separate documentation for every single # build variant, as at least the interface should be just about the # same in each file; although given that we are documenting private # stuff, too, there could be differences, but still, let us just pick # one version. $doc_build = $builds.last for build in $builds map = build.trait_map if $sake_op[:logging] and map[:has_flogger] map[:do_logging] = :define end # The new thing here is that we are using Open C. # So its libc.lib, and not estlib.lib. list = %w{libc.lib libdl.lib libm.lib euser.lib libffi.lib python222.lib} build.libs = list list = %w{_ctypes.c stgdict.c callbacks.c callproc.c cfield.c ffitypes_impl.c} list = list.sort.map do |x| $comp.src_dir + x end build.cxx_files = list end task :default => [:pyd, :sis] require 'sake0/tasks' Sake::Tasks::def_list_devices_tasks(:builds => $builds) Sake::Tasks::def_makefile_tasks(:builds => $builds, :open_c => true) Sake::Tasks::def_pyd_tasks(:builds => $builds) Sake::Tasks::def_sis_tasks(:builds => $builds) Sake::Tasks::def_clean_tasks(:builds => $builds) task :all => [:makefiles, :pyd] if $doc_build # C++ API documentation. Sake::Tasks::def_doxygen_tasks(:build => $doc_build) task :all => :cxxdoc # Python API documentation. py_file = $doc_build.src_dir + ($doc_build.component.basename + ".py") Sake::Tasks::def_pydoc_tasks(:build => $doc_build, :py_file => py_file) task :all => :pydoc end Sake::Tasks::def_dist_tasks :builds => $builds Sake::Tasks::force_uncurrent_on_op_change task :web do srcfiles = Dir['web/*.txt2tags.txt'] for srcfile in srcfiles htmlfile = srcfile.sub(/\.txt2tags\.txt$/, ".html") sh("tools/txt2tags --target xhtml --infile %s --outfile %s --encoding utf-8 --verbose" % [srcfile, htmlfile]) end end task :upload do ruby("local/upload.rb") end task :upload_dry do ruby("local/upload.rb", "dry") end def sis_info opt for build in $builds if build.short_sisx_file.exist? sh("sisinfo -f #{build.short_sisx_file} #{opt}") end end end task :sis_ls do sis_info "-i" end task :sis_cert do sis_info "-c" end task :sis_struct do sis_info "-s" end