mirror of
https://github.com/digital-asset/daml.git
synced 2024-11-10 10:46:11 +03:00
427179ab27
This commit fixes a few copyright headers that have been missed in the automatic update on Jan 1, as well as the generation code in the compat workspace so it generates the right headers. CHANGELOG_BEGIN CHANGELOG_END
211 lines
6.0 KiB
Bash
Executable File
211 lines
6.0 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Copyright (c) 2021 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved.
|
|
# SPDX-License-Identifier: Apache-2.0
|
|
|
|
set -eou pipefail
|
|
|
|
if [ "$#" -ne 1 ]; then
|
|
echo "Expected exactly one argument."
|
|
echo "Usage: ./build_packages.sh TARGET_DIR"
|
|
exit 1
|
|
fi
|
|
|
|
TARGET_DIR=$PWD/$1
|
|
cd "$(dirname ${BASH_SOURCE[0]})/.."
|
|
|
|
mkdir -p $TARGET_DIR
|
|
|
|
# This version needs to be adapted in all cabal files, too
|
|
# The script below will fail on the `cp` command otherwise.
|
|
LIB_VERSION="0.1.8.0"
|
|
|
|
package_from_dir() {
|
|
local dir=$1
|
|
if [ ! -d $dir ]; then
|
|
echo "Directory $dir does not exist!"
|
|
exit 1
|
|
fi
|
|
pushd $dir
|
|
cabal v2-sdist
|
|
cp dist-newstyle/sdist/*${LIB_VERSION}.tar.gz "$TARGET_DIR/"
|
|
rm -rf cabal.tix dist-newstyle/
|
|
popd
|
|
}
|
|
|
|
package_from_dir libs-haskell/da-hs-base
|
|
# removed the GCP logger from the exposed modules to avoid SdkVersion.hs
|
|
|
|
package_from_dir compiler/daml-lf-ast
|
|
|
|
package_from_dir compiler/daml-lf-proto
|
|
|
|
package_from_dir compiler/daml-lf-reader
|
|
|
|
DIR=$(mktemp -d)
|
|
mkdir -p "$DIR/protobuf/com/daml"
|
|
cp -RL "daml-lf/archive/src/main/protobuf/com/daml/daml_lf_dev" "$DIR/protobuf/com/daml/"
|
|
# generate code from protobuf using the matching tool, as a configure script
|
|
cat <<EOF >"$DIR/Setup.hs"
|
|
-- Copyright (c) 2021 The DAML Authors. All rights reserved.
|
|
-- SPDX-License-Identifier: Apache-2.0
|
|
--
|
|
-- Parts of this code were adapted from
|
|
-- https://hackage.haskell.org/package/proto-lens-setup-0.4.0.4
|
|
-- which is (c) 2016 Google Inc. with a BSD-style license that can be found at
|
|
-- https://developers.google.com/open-source/licenses/bsd
|
|
|
|
{-# Language RecordWildCards #-}
|
|
module Main where
|
|
|
|
import Distribution.Simple
|
|
import Distribution.Simple.BuildPaths (autogenPackageModulesDir)
|
|
import Distribution.Simple.LocalBuildInfo
|
|
import Distribution.Simple.Utils
|
|
( createDirectoryIfMissingVerbose
|
|
, installOrdinaryFile
|
|
)
|
|
import Distribution.PackageDescription
|
|
|
|
import System.FilePath -- filepath package
|
|
|
|
import System.Directory
|
|
import System.Process
|
|
|
|
main :: IO ()
|
|
main = defaultMainWithHooks $ generateHooks
|
|
where
|
|
generateHooks :: UserHooks
|
|
generateHooks =
|
|
simple { buildHook = \p l h f -> generate l >> buildHook simple p l h f
|
|
, haddockHook = \p l h f -> generate l >> haddockHook simple p l h f
|
|
, replHook = \p l h f args -> generate l >> replHook simple p l h f args
|
|
}
|
|
|
|
simple = simpleUserHooks
|
|
|
|
generate :: LocalBuildInfo -> IO ()
|
|
generate locInfo =
|
|
generateFromProtos locInfo "protobuf" (autogenPackageModulesDir locInfo)
|
|
|
|
-- generates Haskell from all proto files from extra-source-files which are
|
|
-- under a given srcDir path (used as include directory)
|
|
generateFromProtos :: LocalBuildInfo -> FilePath -> FilePath -> IO ()
|
|
generateFromProtos locInfo srcDir outDir = do
|
|
let protos = collectProtos srcDir
|
|
mapM_ (generateProto srcDir outDir) protos
|
|
where
|
|
collectProtos :: FilePath -> [FilePath]
|
|
collectProtos path =
|
|
map (makeRelative path)
|
|
. filter ((== ".proto") . takeExtension)
|
|
. filter (isInside path) $
|
|
(extraSrcFiles $ localPkgDescr locInfo)
|
|
|
|
isInside :: FilePath -> FilePath -> Bool
|
|
isInside path file = isRelative file &&
|
|
equalFilePath file (path </> makeRelative path file)
|
|
|
|
-- | runs @compile-proto-file@ for the given path @proto@, assumed relative to
|
|
-- @imports@, output in @output@ path.
|
|
generateProto :: FilePath -> FilePath -> FilePath -> IO ()
|
|
generateProto imports output proto = do
|
|
putStrLn $ "generate from proto file " ++ proto
|
|
createDirectoryIfMissing True output
|
|
callProcess "compile-proto-file"
|
|
["--includeDir", imports, "--out", output, "--proto", proto]
|
|
EOF
|
|
cat <<EOF > "$DIR/daml-lf-proto-types.cabal"
|
|
cabal-version: 2.4
|
|
name: daml-lf-proto-types
|
|
version: ${LIB_VERSION}
|
|
|
|
extra-source-files:
|
|
protobuf/com/daml/daml_lf_dev/daml_lf.proto
|
|
protobuf/com/daml/daml_lf_dev/daml_lf_1.proto
|
|
build-type: Custom
|
|
custom-setup
|
|
setup-depends:
|
|
base,
|
|
Cabal,
|
|
directory,
|
|
filepath,
|
|
process
|
|
|
|
library
|
|
default-language: Haskell2010
|
|
build-depends:
|
|
base,
|
|
bytestring,
|
|
containers,
|
|
deepseq,
|
|
proto3-suite,
|
|
proto3-wire,
|
|
text,
|
|
vector,
|
|
exposed-modules:
|
|
Com.Daml.DamlLfDev.DamlLf
|
|
Com.Daml.DamlLfDev.DamlLf1
|
|
autogen-modules:
|
|
Com.Daml.DamlLfDev.DamlLf
|
|
Com.Daml.DamlLfDev.DamlLf1
|
|
EOF
|
|
package_from_dir "$DIR"
|
|
rm -rf "$DIR"
|
|
|
|
if [ ! -f "$TARGET_DIR/cabal.project" ]; then
|
|
cat <<EOF > "$TARGET_DIR/cabal.project"
|
|
packages:
|
|
-- ./. -- add this if the top project is cabalised
|
|
./da-hs-base-${LIB_VERSION}.tar.gz
|
|
./daml-lf-ast-${LIB_VERSION}.tar.gz
|
|
./daml-lf-proto-${LIB_VERSION}.tar.gz
|
|
./daml-lf-proto-types-${LIB_VERSION}.tar.gz
|
|
./daml-lf-reader-${LIB_VERSION}.tar.gz
|
|
EOF
|
|
echo "Wrote $TARGET_DIR/cabal.project"
|
|
else
|
|
echo "not overwriting existing cabal.project file"
|
|
fi
|
|
|
|
if [ ! -f "$TARGET_DIR/stack.yaml" ]; then
|
|
cat <<EOF > "$TARGET_DIR/stack.yaml"
|
|
# last known good resolver configuration for these libraries
|
|
resolver: lts-14.27
|
|
|
|
packages:
|
|
- .
|
|
|
|
# adding proto3 libraries (not on stackage) for daml-lf-proto-types
|
|
extra-deps:
|
|
- proto3-suite-0.4.0.0
|
|
- proto3-wire-1.1.0
|
|
- ./da-hs-base-${LIB_VERSION}.tar.gz
|
|
- ./daml-lf-ast-${LIB_VERSION}.tar.gz
|
|
- ./daml-lf-proto-types-${LIB_VERSION}.tar.gz
|
|
- ./daml-lf-proto-${LIB_VERSION}.tar.gz
|
|
- ./daml-lf-reader-${LIB_VERSION}.tar.gz
|
|
EOF
|
|
echo "Wrote $TARGET_DIR/stack.yaml"
|
|
else
|
|
echo "not overwriting existing stack.yaml file"
|
|
fi
|
|
|
|
# add a dummy cabal file so one can compile the libraries for a test
|
|
cat <<EOF > $TARGET_DIR/test-lib-lf.cabal
|
|
cabal-version: 2.4
|
|
|
|
name: test-lib-lf
|
|
description: Dummy package to test compilation of the extracted LF libraries
|
|
version: ${LIB_VERSION}
|
|
build-type: Simple
|
|
|
|
library
|
|
hs-source-dirs: .
|
|
build-depends: da-hs-base,
|
|
daml-lf-ast,
|
|
daml-lf-proto,
|
|
daml-lf-proto-types,
|
|
daml-lf-reader
|
|
default-language: Haskell2010
|
|
EOF
|