Skip to content

Commit e8260f5

Browse files
authored
Merge pull request #10 from hellium6/zig-0.14.0
Add lang/zig-0.14.0 package
2 parents 72659e6 + f0e7947 commit e8260f5

File tree

6 files changed

+14936
-0
lines changed

6 files changed

+14936
-0
lines changed

README.md

+11
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,9 @@ cd /usr/pkgsrc/lang/clang19
4949
make install
5050

5151
cd /usr/pkgsrc/lang/zig-master
52+
### For 0.14.0 stable:
53+
### cd /usr/pkgsrc/lang/zig-0.14.0
54+
5255
## update DISTNAME in Makefile according to download URL
5356
## read comment in the file for details
5457
## to get latest master or dev download:
@@ -115,6 +118,12 @@ $ zig version
115118
0.13.0
116119
$ zig-master version
117120
0.14.0
121+
### For lang/zig-0.14.0 you'd have to run zig-0.14.0 or
122+
### if you've changed DISTNAME, type "zig" and press tab twice for hint.
123+
### Example:
124+
### $ zig-0.14.0-dev.3462 version
125+
### 0.14.0-dev.3462+edabcf619
126+
118127
### typing zig-master every time is boring, so...
119128
$ alias zig=zig-master
120129
### above can be added in ~/.bashrc to do this automatically on startup
@@ -139,6 +148,8 @@ Example of uninstalling a package:
139148
```sh
140149
$ pkg_info -a | grep ^zig
141150
zig-master-0.14.0-dev.3462+edabcf619 Programming language designed for robustness and clarity
151+
### For lang/zig-0.14.0 the output might be something like:
152+
### zig-isolated0140-0.14.0 Programming language designed for robustness and clarity (prefix isolated)
142153
$ doas pkg_delete zig-master-0.14.0-dev.3462+edabcf619
143154
```
144155

pkgsrc/lang/zig-0.14.0/DESCR

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
Zig is an open-source programming language designed for robustness,
2+
optimality, and clarity.
3+
4+
* Robust - behavior is correct even for edge cases such as out
5+
of memory.
6+
* Optimal - write programs the best way they can
7+
behave and perform.
8+
* Clear - precisely communicate your intent
9+
to the compiler and other programmers. The language imposes a
10+
low overhead to reading code.
11+
12+
(This modified package installs in a different prefix than usual:
13+
${PREFIX}/zig-${PKGVERSION_NOREV} which might be something like:
14+
/usr/pkg/zig-0.14.0)

pkgsrc/lang/zig-0.14.0/Makefile

+149
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,149 @@
1+
# $NetBSD: Makefile,v 1.42 2024/08/10 10:19:01 nia Exp $
2+
3+
## If you want to use another commit, update DISTNAME according to the
4+
## 0.14.0 download URL and run "make makesum" after that.
5+
## Example: If the URL is:
6+
## https://ziglang.org/builds/zig-0.14.0-dev.3462+edabcf619.tar.xz
7+
## then this value would be: zig-0.14.0-dev.3462+edabcf619
8+
## Meaning, filename minus the .tar.xz extension.
9+
## If any pkgsrc package you need depends on application.mk, e.g. zls,
10+
## changes might be needed on application.mk file as well.
11+
DISTNAME= zig-0.14.0
12+
## Want to make this (a) a separate package than lang/zig and (b) we
13+
## want to be able to install different commits of the same version.
14+
## For example 0.14.0 (stable) and 0.14.0-dev.3462+edabcf619 (unstable).
15+
## Having the package name as "zig" won't let us install another version
16+
## with the same name. We need a unique package name based on version in
17+
## the DISTNAME so that it allows both to be installed.
18+
##
19+
## We prepare a version suffix code to make the name unique.
20+
## Example values:
21+
## - "zig-0.14.0-dev.3462+edabcf619" becomes "0140dev3462"
22+
## - "zig-0.14.0" becomes "0140"
23+
APPEND_VER= ${DISTNAME:S/zig-//:S/.//g:S/-//:C/\+.*$//}
24+
## Finally appending the version code creates our unique package name.
25+
## e.g. "zig-isolated0140" or "zig-isolated0140dev3462+edabcf619". Both
26+
## should be able to be installed at the same time.
27+
PKGNAME= ${DISTNAME:S/zig-/zig-isolated${APPEND_VER}-/}
28+
PKGREVISION= 4
29+
CATEGORIES= lang
30+
## https://ziglang.org/builds/ is the official
31+
MASTER_SITES= https://ziglang.org/builds/
32+
## Alternate mirror
33+
#MASTER_SITES= https://zig.linus.dev/zig/
34+
EXTRACT_SUFX= .tar.xz
35+
## Used mainly for /usr/pkg/xx directory and binary symlink name.
36+
## e.g. If this is "zig-0.14.0" (a) zig will be installed in
37+
## /usr/pkg/zig-0.14.0, (b) symlinked as /usr/pkg/bin/zig-0.14.0 and
38+
## (c) can be used by running "zig-0.14.0". "+" causes Zig binary to not
39+
## be available on double tab press. We remove "+" as fix and following
40+
## chars to make it shorter.
41+
PACKAGE_SLUG= ${DISTNAME:C/\+.*$//}
42+
43+
MAINTAINER= [email protected]
44+
HOMEPAGE= https://ziglang.org/
45+
COMMENT= Programming language designed for robustness and clarity (prefix isolated)
46+
LICENSE= mit
47+
48+
# Fails to build in chroot on netbsd: https://github.com/ziglang/zig/issues/19756
49+
USE_CXX_FEATURES+= c++17
50+
USE_LANGUAGES= c c++
51+
USE_TOOLS+= bash:run
52+
53+
CMAKE_CONFIGURE_ARGS+= -DCMAKE_BUILD_TYPE=Release
54+
CMAKE_CONFIGURE_ARGS+= -DZIG_SHARED_LLVM=ON
55+
## Seperate prefix (may not work, needs post-configure target below)
56+
CMAKE_CONFIGURE_ARGS+= -DCMAKE_INSTALL_PREFIX=${DESTDIR}${PREFIX}/${PACKAGE_SLUG}
57+
# avoid full-cu-features available to build host,
58+
# in other words ensure that we run everywhere
59+
CMAKE_CONFIGURE_ARGS+= -DZIG_TARGET_MCPU=baseline
60+
#CMAKE_CONFIGURE_ARGS+= -DZIG_PIE=ON
61+
62+
## Make it see files from the path of lang/llvm19
63+
.include "../../lang/llvm19/isolatedversion.mk"
64+
LDFLAGS+= -L${LLVM_ISOLATED_PREFIX}/lib -Wl,-R${LLVM_ISOLATED_PREFIX}/lib
65+
CMAKE_CONFIGURE_ARGS+= -DCMAKE_CXX_LINK_FLAGS=${LDFLAGS:Q}
66+
CMAKE_CONFIGURE_ARGS+= -DCMAKE_C_LINK_FLAGS=${LDFLAGS:Q}
67+
## Because zig build can't find libxml etc. if not set to /usr/pkg
68+
CMAKE_CONFIGURE_ARGS+= -DCMAKE_PREFIX_PATH=${PREFIX}
69+
## Print every CMake command being run (for debugging/troubleshooting)
70+
MAKE_ENV+= VERBOSE=1
71+
## Fix for "libclang-cpp.so.xx.y" not found.
72+
## CMake things don't seem to work here because it is done with zig's
73+
## build system. Also MAKE_ENV doesn't send the vars (esp.
74+
## LD_LIBRARY_PATH) to zig build. So we need to prepend LD_LIBRARY_PATH
75+
## in cmake/install.cmake (see post-configure target below)
76+
MAKE_ENV+= LD_LIBRARY_PATH=${LLVM_ISOLATED_PREFIX}/lib:/usr/pkg/lib:/usr/lib
77+
MAKE_ENV+= LDFLAGS=-Wl,-R${LLVM_ISOLATED_PREFIX}/lib
78+
MAKE_ENV+= LDFLAGS=-L/usr/pkg/lib
79+
80+
MAKE_ENV+= ZIG_GLOBAL_CACHE_DIR=${WRKDIR}/${PACKAGE_SLUG}-global-cache
81+
MAKE_ENV+= ZIG_LOCAL_CACHE_DIR=${WRKDIR}/${PACKAGE_SLUG}-local-cache
82+
83+
CHECK_PORTABILITY_SKIP+= ci/azure/macos_script
84+
BUILDLINK_TRANSFORM+= rm:-Werror
85+
86+
UNLIMIT_RESOURCES= stacksize
87+
88+
# again, sigh...
89+
RELRO_SUPPORTED= no
90+
MKPIE_SUPPORTED= no
91+
# TODO: /usr/bin/env + /bin/env in lib/std/zig/system.zig
92+
93+
pre-configure:
94+
## - Make zig build see LD_LIBRARY_PATH (e.g. path to
95+
## "libclang-cpp.so.xx.y")
96+
## - Set version string (esp. for dev builds)
97+
## - Make stage3 zig build process (build.zig) see the path
98+
${SED} -i'_orig' \
99+
-e '1{h;s,.*,set(ENV{LD_LIBRARY_PATH} "'${LLVM_ISOLATED_PREFIX}'/lib:/usr/pkg/lib:/usr/lib:$$\ENV{LD_LIBRARY_PATH}")\n,;G;}' \
100+
-e '1{h;s,.*,set(ENV{LIBRARY_PATH} "'${LLVM_ISOLATED_PREFIX}'/lib:/usr/pkg/lib:/usr/lib:$$\ENV{LIBRARY_PATH}")\n,;G;}' \
101+
-e '1{h;s,.*,set(ENV{LDFLAGS} "-Wl\,-R'${LLVM_ISOLATED_PREFIX}'/lib -L'${LLVM_ISOLATED_PREFIX}'/lib $$\ENV{LDFLAGS}")\n,;G;}' \
102+
-e '/set(ZIG_VERSION/ s,set(ZIG_VERSION "",set(ZIG_VERSION "${DISTNAME:S/zig-//}",' \
103+
-e '/$${CMAKE_PREFIX_PATH}/ s,^,list(APPEND ZIG_CMAKE_PREFIX_PATH "${LLVM_ISOLATED_PREFIX}")\n,' \
104+
${WRKDIR}/${DISTNAME}/CMakeLists.txt
105+
## Fix paths when lang/clang is already installed on system
106+
${SED} -i'_orig' \
107+
-e '1{h;s,.*,set(LLVM_INCLUDE_DIRS "'${LLVM_ISOLATED_PREFIX}'/include:$$\{LLVM_INCLUDE_DIRS}")\n,;G;}' \
108+
-e '1{h;s,.*,set(LLVM_LIBDIRS "'${LLVM_ISOLATED_PREFIX}'/lib:$$\{LLVM_LIBDIRS}")\n,;G;}' \
109+
-e '1{h;s,.*,set(CMAKE_PREFIX_PATH "'${LLVM_ISOLATED_PREFIX}'")\n,;G;}' \
110+
${WRKDIR}/${DISTNAME}/cmake/Findclang.cmake
111+
112+
post-configure:
113+
## Workaround for making CMake see the isolated prefix
114+
${FIND} ${WRKSRC} -name CMakeCache\.txt -exec sed -i'_orig' \
115+
-e 's,^CMAKE_INSTALL_PREFIX:PATH=.*,CMAKE_INSTALL_PREFIX:PATH='${PREFIX}/${PACKAGE_SLUG}',' \
116+
-e '/^CMAKE_CXX_FLAGS:/ s,$$, -I'${LLVM_ISOLATED_PREFIX}'/include,' \
117+
-e '/^CMAKE_CXX_LINK_FLAGS:/ s,$$, -L'${LLVM_ISOLATED_PREFIX}'/lib -Wl\,-R'${LLVM_ISOLATED_PREFIX}'/lib,' \
118+
-e '/^CMAKE_C_FLAGS:/ s,$$, -I'${LLVM_ISOLATED_PREFIX}'/include,' \
119+
-e '/^CMAKE_EXE_LINKER_FLAGS:/ s,$$, -L'${LLVM_ISOLATED_PREFIX}'/lib -Wl\,-R'${LLVM_ISOLATED_PREFIX}'/lib,' \
120+
-e '/^CMAKE_MODULE_LINKER_FLAGS:/ s,$$, -L'${LLVM_ISOLATED_PREFIX}'/lib -Wl\,-R'${LLVM_ISOLATED_PREFIX}'/lib,' \
121+
-e '/^CMAKE_SHARED_LINKER_FLAGS:/ s,$$, -L'${LLVM_ISOLATED_PREFIX}'/lib -Wl\,-R'${LLVM_ISOLATED_PREFIX}'/lib,' \
122+
-e '$$s,$$,\nCMAKE_INSTALL_RPATH:PATH='${LLVM_ISOLATED_PREFIX}'/lib,' \
123+
-e '$$s,$$,\nCMAKE_INSTALL_RPATH_USE_LINK_PATH:BOOL=ON,' \
124+
{} \;
125+
## Hardcode the path so that executing the linked
126+
## /usr/pkg/bin/${PACKAGE_SLUG} file doesn't say "unable to find zig
127+
## installation directory"
128+
${SED} -i'_orig' -e 's,= self_exe_path;,= "/usr/pkg/${PACKAGE_SLUG}/bin";\n _ = self_exe_path;,' ${WRKDIR}/${DISTNAME}/src/introspect.zig
129+
130+
post-install:
131+
## Binary link for isolated install
132+
${MKDIR} -p ${DESTDIR}${PREFIX}/bin
133+
${LN} -sf ${PREFIX}/${PACKAGE_SLUG}/bin/zig ${DESTDIR}${PREFIX}/bin/${PACKAGE_SLUG}
134+
135+
# after install, because the zig binary ends up in paths like
136+
# ./zig-0.10.1/zig-cache/o/e6445b80597d6bc8fe865e7254800ac9/zig
137+
# unless we want to run find for the executable here?
138+
do-test:
139+
mkdir ${WRKDIR}/cache
140+
cd ${WRKSRC} && \
141+
${DESTDIR}${PREFIX}/bin/${PACKAGE_SLUG} build test-behavior \
142+
--cache-dir ${WRKDIR}/cache --global-cache-dir ${WRKDIR}/cache \
143+
--zig-lib-dir ${WRKSRC}/lib
144+
145+
.include "../../devel/cmake/build.mk"
146+
.include "../../devel/lld19/buildlink3.mk"
147+
.include "../../lang/clang19/buildlink3.mk"
148+
.include "../../lang/llvm19/buildlink3.mk"
149+
.include "../../mk/bsd.pkg.mk"

0 commit comments

Comments
 (0)