# file : xsd/buildfile # license : GNU GPL v2 + exceptions; see accompanying LICENSE file import libs = libxsd-frontend%lib{xsd-frontend} import libs += libcutl%lib{cutl} import libs += libxerces-c%lib{xerces-c} ops = options cxx/options cxx/parser/options cxx/tree/options ./: exe{xsd}: {hxx ixx txx cxx}{** -version -{$ops} -pregenerated/**} \ {hxx}{version} \ $libs # Target metadata, see also --build2-metadata in xsd.cxx. # # Note that xsd does not query any environment variables. # exe{xsd}: { export.metadata = 1 xsd xsd.name = [string] xsd xsd.version = [string] $version xsd.checksum = [string] $version } hxx{version}: in{version} $src_root/manifest ## Consumption build ($develop == false). # # Use pregenerated versions in the consumption build. # exe{xsd}: pregenerated/{hxx ixx cxx}{**}: include = (!$develop) if! $develop cxx.poptions =+ "-I($src_base/pregenerated)" # Note: must come first. # Distribute pregenerated versions only in the consumption build. # pregenerated/{hxx ixx cxx}{*}: dist = (!$develop) # ## ## Development build ($develop == true). # exe{xsd}: {hxx ixx cxx}{$ops}: include = $develop if $develop import! [metadata] cli = cli%exe{cli} # In the development build distribute regenerated {hxx ixx cxx}{options}, # remapping their locations to the paths of the pregenerated versions (which # are only distributed in the consumption build; see above). This way we make # sure that the distributed files are always up-to-date. # for f: $ops { d = $directory($f) # empty, cxx/, etc. <{hxx ixx cxx}{$f}>: cli{$f} { dist = ($develop ? $relative([dir_path] "pregenerated/xsd/$d", $d) : false) # Symlink the generated code in src for convenience of development. # backlink = true } } : cli{~'/\1/'} $cli % if $develop {{ t = $path($>[0]).t depdb dyndep --byproduct --file $t h = $path($>[0]) i = $path($>[1]) c = $path($>[2]) d = $directory($h) p = $string($leaf($d, $out_root)) # xsd, xsd/cxx, etc options = --std c++11 -I $src_root --include-prefix $p \ --guard-prefix $regex.replace($ucase($p), '[/\\]', '_') \ --generate-specifier --generate-file-scanner \ --suppress-undocumented --ostream-type ::std::wostream \ --exclude-base --include-with-brackets --option-length 28 \ --cxx-prologue '#include ' $cli $options --generate-dep --dep-file $t -o $d $path($<[0]) # If the result differs from the pregenerated version, copy it over. # d = [dir_path] $src_base/pregenerated/$p dh = $d/$leaf($h) di = $d/$leaf($i) dc = $d/$leaf($c) if diff $dh $h >- && \ diff $di $i >- && \ diff $dc $c >- exit end cp $h $dh cp $i $di cp $c $dc }} # ## # Pass the copyright notice extracted from the LICENSE file. # obj{xsd cxx/parser/generator cxx/tree/generator}: \ cxx.poptions += -DXSD_COPYRIGHT=\"$copyright\"