File: Makefile.node_prebuilt.defs

package info (click to toggle)
node-getpass 0.1.7-3
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, forky, sid, trixie
  • size: 176 kB
  • sloc: javascript: 135; makefile: 35
file content (153 lines) | stat: -rw-r--r-- 6,181 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
# -*- mode: makefile -*-
#
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
#

#
# Copyright (c) 2014, Joyent, Inc.
#

#
# Makefile.node_prebuilt.defs: Makefile for including a prebuilt Node.js build.
#
# NOTE: This makefile comes from the "eng" repo. It's designed to be dropped
# into other repos as-is without requiring any modifications. If you find
# yourself changing this file, you should instead update the original copy in
# eng.git and then update your repo to use the new version.
#

#
# This Makefile facilitates downloading and bundling a prebuilt node.js
# build (using the 'sdcnode' distro builds). This is an alternative to
# the "Makefile.node.*" makefiles for *building* a node from source.
#
# Usage:
#
# - Define `NODE_PREBUILT_VERSION` in your Makefile to choose a node version.
#   E.g.: `NODE_PREBUILT_VERSION=v0.6.19`. See other optional variables
#   below.
# - `include tools/mk/Makefile.node_prebuilt.defs` after this in your Makefile.
# - `include tools/mk/Makefile.node_prebuilt.targ` near the end of your
#   Makefile.
# - Have at least one of your Makefile targets depend on either `$(NODE_EXEC)`
#   or `$(NPM_EXEC)`. E.g.:
#
#		node_modules/restify: deps/restify $(NPM_EXEC)
#			$(NPM) install deps/restify
#
#   or better, use an order-only dependency to avoid spurious rebuilds:
#
#		node_modules/restify: deps/restify | $(NPM_EXEC)
#			$(NPM) install deps/restify
#
# - Use `$(NPM)` or `$(NODE)` to use your node build.
# - Include the "$(NODE_INSTALL)" tree in your release package.
#
#
# When including this Makefile, you MUST also specify:
#
#	NODE_PREBUILT_VERSION 	The node version in the prebuilt 'sdcnode'
#				package to use. Typically this is one of the
#				node version tags, e.g. "v0.6.18" but it
#				can be any commitish.
#
# When including this Makefile, you MAY also specify:
#
#	NODE_PREBUILT_DIR 	The dir in which to find sdcnode builds. This
#				can either be a *local directory* or *a
#				URL* dir (with trailing '/') which serves
#				Apache/Nginx dir listing HTML.
#				(default: sdcnode master build dir on stuff)
#
#	NODE_PREBUILT_TAG	The 'sdcnode' project supports special
#				configuration builds of node, e.g. say a
#				build configured `--without-ssl`. These
#				special configurations are given a tag, e.g.
#				'gz', that is used in the filename. Optionally
#				specify a tag name here.
#				(default: empty)
#
#	NODE_PREBUILT_BRANCH	Specify a particular branch of 'sdcnode' builds
#				from which to pull. Generally one should stick
#				with the default.
#				(default: master)
#
#	NODE_PREBUILT_IMAGE		If you have a zone image that differs from that
#				for an sdcnode build that you want to use (potential compat
#				issues be damned), then set this to the UUID of the sdcnode
#				build you want. See here for available build image uuids:
#				<https://download.joyent.com/pub/build/sdcnode/master-latest/sdcnode/>
#
#	BUILD			top-level directory for built binaries
#				(default: "build")
#
#	NODE_INSTALL		where node should install its built items
#				(default: "$BUILD/node")
#
#
# Dev Notes:
#
# This works by getting "NODE_PREBUILT_NAME" from the provided "NODE_PREBUILT_*"
# vars and the image version (via 'mdata-get sdc:image_uuid'). The image uuid is
# included to ensure an exact match with the build machine. This name (e.g.
# "v0.6.18-zone-$uuid") is used to find a matching "sdcnode-$name-*.tgz" build
# in "NODE_PREBUILT_DIR" (either a local directory or a URL). That tarball is
# downloaded and extracted into "NODE_INSTALL".
#
# The "*_EXEC" vars are set to named symlinks, e.g.
# "build/prebuilt-node-v0.6.18-$uuid", so that a change of selected node
# build (say the developer changes NODE_PREBUILT_VERSION) will recreate the
# node install.
#
# See <https://mo.joyent.com/docs/sdcnode/master/> for details on 'sdcnode-*'
# package naming.
#

TOP ?= $(error You must include Makefile.defs before this makefile)
NODE_PREBUILT_VERSION ?= $(error NODE_PREBUILT_VERSION is not set.)


BUILD		?= build
NODE_INSTALL	?= $(BUILD)/node
DISTCLEAN_FILES	+= $(NODE_INSTALL) \
	$(BUILD)/prebuilt-node-* $(BUILD)/prebuilt-npm-*

NODE_PREBUILT_BRANCH ?= master
NODE_PREBUILT_IMAGE ?= $(shell pfexec mdata-get sdc:image_uuid)
ifeq ($(NODE_PREBUILT_TAG),)
	NODE_PREBUILT_NAME := $(NODE_PREBUILT_VERSION)-$(NODE_PREBUILT_IMAGE)
else
	NODE_PREBUILT_NAME := $(NODE_PREBUILT_VERSION)-$(NODE_PREBUILT_TAG)-$(NODE_PREBUILT_IMAGE)
endif
NODE_PREBUILT_PATTERN := sdcnode-$(NODE_PREBUILT_NAME)-$(NODE_PREBUILT_BRANCH)-.*\.tgz
NODE_PREBUILT_DIR ?= https://download.joyent.com/pub/build/sdcnode/$(NODE_PREBUILT_IMAGE)/$(NODE_PREBUILT_BRANCH)-latest/sdcnode/
ifeq ($(shell echo $(NODE_PREBUILT_DIR) | cut -c 1-4),http)
	NODE_PREBUILT_BASE := $(shell curl -ksS --fail --connect-timeout 30 $(NODE_PREBUILT_DIR) | grep 'href=' | cut -d'"' -f2 | grep "^$(NODE_PREBUILT_PATTERN)$$" | sort | tail -1)
	ifneq ($(NODE_PREBUILT_BASE),)
		NODE_PREBUILT_TARBALL := $(NODE_PREBUILT_DIR)$(NODE_PREBUILT_BASE)
	endif
else
	NODE_PREBUILT_BASE := $(shell ls -1 $(NODE_PREBUILT_DIR)/ | grep "^$(NODE_PREBUILT_PATTERN)$$" 2>/dev/null | sort | tail -1)
	ifneq ($(NODE_PREBUILT_BASE),)
		NODE_PREBUILT_TARBALL := $(NODE_PREBUILT_DIR)/$(NODE_PREBUILT_BASE)
	endif
endif
ifeq ($(NODE_PREBUILT_TARBALL),)
	NODE_PREBUILT_TARBALL = $(error NODE_PREBUILT_TARBALL is empty: no '$(NODE_PREBUILT_DIR)/$(NODE_PREBUILT_PATTERN)' found)
endif


# Prebuild-specific paths for the "*_EXEC" vars to ensure that
# a prebuild change (e.g. if master Makefile's NODE_PREBUILT_VERSION
# choice changes) causes a install of the new node.
NODE_EXEC	:= $(BUILD)/prebuilt-node-$(NODE_PREBUILT_NAME)
NODE_WAF_EXEC	:= $(BUILD)/prebuilt-node-waf-$(NODE_PREBUILT_NAME)
NPM_EXEC	:= $(BUILD)/prebuilt-npm-$(NODE_PREBUILT_NAME)

# Ensure these use absolute paths to the executables to allow running
# from a dir other than the project top.
NODE		:= $(TOP)/$(NODE_INSTALL)/bin/node
NODE_WAF	:= $(TOP)/$(NODE_INSTALL)/bin/node-waf
NPM		:= PATH=$(TOP)/$(NODE_INSTALL)/bin:$(PATH) node $(TOP)/$(NODE_INSTALL)/bin/npm