Commits:
-
f290eb04
by Jouk Jansen at 2023-07-21T21:44:03+02:00
* vms_make.com: Synchronize with similar changes in the FreeType library.
-
751b0c3d
by Alexei Podtelezhnikov at 2023-07-25T23:45:07-04:00
* src/ftdump.c (Print_MM_Info): Fix signedness mismatch.
-
2186a044
by Charlie Jiang at 2023-07-26T12:29:07+00:00
[ftinspect] Fix the glyph index selector layout when the window resizes.
Fixes #26. When the window resizes, the invisible tabs don't get notified.
Therefore, when the active tab changes, we need to trigger a manual
relayouting of invisible tabs.
* src/ftinspect/widgets/glyphindexselector.hpp,
src/ftinspect/widgets/glyphindexselector.cpp:
Extract public method `relayoutNavigation` from `resizeEvent`.
* src/ftinspect/panels/abstracttab.hpp: Add `relayout` virtual method.
* src/ftinspect/maingui.cpp: Call `AbstractTab::relayout` on the new tab
when the active tab changes.
* src/ftinspect/panels/singular.cpp, src/ftinspect/panels/singular.hpp,
src/ftinspect/panels/continuous.cpp, src/ftinspect/panels/continuous.hpp:
Implement `relayout` method and call `relayoutNavigation` of the glyph
index selector in `relayout`.
-
6aca8caf
by Alexei Podtelezhnikov at 2023-07-27T23:43:12-04:00
* src/ftbench.c (usage): Document the `-a` option.
-
f563855d
by Charlie Jiang at 2023-08-06T09:37:06+00:00
[ftinspect] Fix named instances switching.
* src/ftinspect/engine/mmgx.cpp, src/ftinspect/engine/mmgx.hpp:
Load the default values of MMGX axes from the named instance instead of
the global default one.
* src/ftinspect/engine/engine.cpp, src/ftinspect/engine/engine.hpp:
Switch the named instance using `FT_Set_Named_Instance` when loading
fonts.
-
399eb8cf
by Charlie Jiang at 2023-08-06T09:37:06+00:00
[ftinspect] Fix default named instance handling.
Now the named instance selector no longer doubles the default named instance.
`FT_Get_Default_Named_Instance` is used to get the default NI index.
The default one is labeled as " (default)".
* src/ftinspect/widgets/tripletselector.cpp: Properly handle the new 1-based
named instance indices. Label the default NI correctly.
* src/ftinspect/engine/engine.cpp, src/ftinspect/engine/engine.hpp:
Add `Engine::defualtNamedInstanceIndex`.
* src/ftinspect/engine/mmgx.cpp: Change comments.
16 changed files:
Changes:
src/ftbench.c
... |
... |
@@ -1018,6 +1018,9 @@ |
1018
|
1018
|
"\n"
|
1019
|
1019
|
"Usage: ftbench [options] fontname\n"
|
1020
|
1020
|
"\n"
|
|
1021
|
+ " -a \"axis1 axis2 ...\"\n"
|
|
1022
|
+ " Specify the design coordinates for each, if any,\n"
|
|
1023
|
+ " Multiple Master axis at start-up.\n"
|
1021
|
1024
|
" -C Compare with cached version (if available).\n"
|
1022
|
1025
|
" -c N Use at most N iterations for each test\n"
|
1023
|
1026
|
" (0 means time limited).\n"
|
src/ftdump.c
... |
... |
@@ -925,7 +925,7 @@ |
925
|
925
|
FT_Fixed* coords;
|
926
|
926
|
const char* ps_name;
|
927
|
927
|
|
928
|
|
- FT_Long instance_count;
|
|
928
|
+ FT_UInt instance_count;
|
929
|
929
|
FT_UInt default_named_instance;
|
930
|
930
|
FT_Var_Named_Style* named_styles;
|
931
|
931
|
|
... |
... |
@@ -957,14 +957,14 @@ |
957
|
957
|
|
958
|
958
|
/* Show named instances. */
|
959
|
959
|
|
960
|
|
- instance_count = face->style_flags >> 16;
|
|
960
|
+ instance_count = (FT_UInt)face->style_flags >> 16;
|
961
|
961
|
named_styles = mm->namedstyle;
|
962
|
962
|
|
963
|
963
|
FT_Get_Default_Named_Instance( face, &default_named_instance );
|
964
|
964
|
default_named_instance--; /* `named_styles` is a zero-based array */
|
965
|
965
|
|
966
|
966
|
printf( "\n" );
|
967
|
|
- printf( " named instances (%lu)\n", instance_count );
|
|
967
|
+ printf( " named instances (%u)\n", instance_count );
|
968
|
968
|
|
969
|
969
|
for ( i = 0; i < instance_count; i++ )
|
970
|
970
|
{
|
src/ftinspect/engine/engine.cpp
... |
... |
@@ -71,6 +71,7 @@ FaceID::operator<(const FaceID& other) const |
71
|
71
|
// font, face, and named instance indices. Getting a key from a value is
|
72
|
72
|
// slow, but this must be done only once, since `faceRequester` is only
|
73
|
73
|
// called if the font is not yet in the cache.
|
|
74
|
+// Note: Instance indices start from 1, and 0 is used to indicate no MM/GX handling.
|
74
|
75
|
|
75
|
76
|
FT_Error
|
76
|
77
|
faceRequester(FTC_FaceID ftcFaceID,
|
... |
... |
@@ -101,8 +102,7 @@ faceRequester(FTC_FaceID ftcFaceID, |
101
|
102
|
QString font = engine->fontFileManager_[faceID.fontIndex].filePath();
|
102
|
103
|
long faceIndex = faceID.faceIndex;
|
103
|
104
|
|
104
|
|
- if (faceID.namedInstanceIndex > 0)
|
105
|
|
- faceIndex += faceID.namedInstanceIndex << 16;
|
|
105
|
+ faceIndex += (faceID.namedInstanceIndex) << 16;
|
106
|
106
|
|
107
|
107
|
*faceP = NULL;
|
108
|
108
|
return FT_New_Face(library,
|
... |
... |
@@ -227,8 +227,8 @@ int |
227
|
227
|
Engine::numberOfNamedInstances(int fontIndex,
|
228
|
228
|
long faceIndex)
|
229
|
229
|
{
|
230
|
|
- // We return `n` named instances plus one;
|
231
|
|
- // instance index 0 represents a face without a named instance selected.
|
|
230
|
+ // With the new `FT_Get_Default_Named_Instance` func, we no longer to return
|
|
231
|
+ // one more entries.
|
232
|
232
|
int numNamedInstances = -1;
|
233
|
233
|
if (fontIndex < 0)
|
234
|
234
|
return -1;
|
... |
... |
@@ -237,7 +237,7 @@ Engine::numberOfNamedInstances(int fontIndex, |
237
|
237
|
[&](FT_Face face)
|
238
|
238
|
{
|
239
|
239
|
numNamedInstances
|
240
|
|
- = static_cast<int>((face->style_flags >> 16) + 1);
|
|
240
|
+ = static_cast<int>((face->style_flags >> 16));
|
241
|
241
|
});
|
242
|
242
|
|
243
|
243
|
return numNamedInstances;
|
... |
... |
@@ -264,6 +264,25 @@ Engine::namedInstanceName(int fontIndex, |
264
|
264
|
}
|
265
|
265
|
|
266
|
266
|
|
|
267
|
+unsigned
|
|
268
|
+Engine::defaultNamedInstanceIndex(int fontIndex,
|
|
269
|
+ int faceIndex)
|
|
270
|
+{
|
|
271
|
+ if (fontIndex < 0)
|
|
272
|
+ return 0;
|
|
273
|
+ unsigned ret = 0;
|
|
274
|
+ withFace(FaceID(fontIndex, faceIndex, 0),
|
|
275
|
+ [&](FT_Face face)
|
|
276
|
+ {
|
|
277
|
+ if (FT_Get_Default_Named_Instance(face, &ret) != 0)
|
|
278
|
+ {
|
|
279
|
+ // XXX error handling?
|
|
280
|
+ }
|
|
281
|
+ });
|
|
282
|
+ return ret;
|
|
283
|
+}
|
|
284
|
+
|
|
285
|
+
|
267
|
286
|
bool
|
268
|
287
|
Engine::currentFontTricky()
|
269
|
288
|
{
|
... |
... |
@@ -359,6 +378,8 @@ Engine::loadFont(int fontIndex, |
359
|
378
|
else
|
360
|
379
|
fontType_ = FontType_Other;
|
361
|
380
|
|
|
381
|
+ switchNamedInstance(namedInstanceIndex);
|
|
382
|
+
|
362
|
383
|
curCharMaps_.clear();
|
363
|
384
|
curCharMaps_.reserve(ftFallbackFace_->num_charmaps);
|
364
|
385
|
for (int i = 0; i < ftFallbackFace_->num_charmaps; i++)
|
... |
... |
@@ -366,7 +387,8 @@ Engine::loadFont(int fontIndex, |
366
|
387
|
|
367
|
388
|
SFNTName::get(this, curSFNTNames_);
|
368
|
389
|
loadPaletteInfos();
|
369
|
|
- curMMGXState_ = MMGXAxisInfo::get(this, curMMGXAxes_);
|
|
390
|
+ curMMGXState_ = MMGXAxisInfo::get(
|
|
391
|
+ this, static_cast<unsigned>(namedInstanceIndex), curMMGXAxes_);
|
370
|
392
|
}
|
371
|
393
|
|
372
|
394
|
curNumGlyphs_ = numGlyphs;
|
... |
... |
@@ -1035,4 +1057,25 @@ Engine::loadPaletteInfos() |
1035
|
1057
|
}
|
1036
|
1058
|
|
1037
|
1059
|
|
|
1060
|
+void
|
|
1061
|
+Engine::switchNamedInstance(int index)
|
|
1062
|
+{
|
|
1063
|
+ if (!ftFallbackFace_ || !FT_HAS_MULTIPLE_MASTERS(ftFallbackFace_))
|
|
1064
|
+ return;
|
|
1065
|
+ auto err = FT_Set_Named_Instance(ftFallbackFace_, index);
|
|
1066
|
+ if (err)
|
|
1067
|
+ {
|
|
1068
|
+ // XXX error handling
|
|
1069
|
+ }
|
|
1070
|
+ if (ftSize_)
|
|
1071
|
+ {
|
|
1072
|
+ err = FT_Set_Named_Instance(ftSize_->face, index);
|
|
1073
|
+ if (err)
|
|
1074
|
+ {
|
|
1075
|
+ // XXX error handling
|
|
1076
|
+ }
|
|
1077
|
+ }
|
|
1078
|
+}
|
|
1079
|
+
|
|
1080
|
+
|
1038
|
1081
|
// end of engine.cpp |
src/ftinspect/engine/engine.hpp
... |
... |
@@ -145,6 +145,8 @@ public: |
145
|
145
|
QString namedInstanceName(int fontIndex,
|
146
|
146
|
long faceIndex,
|
147
|
147
|
int index);
|
|
148
|
+ unsigned defaultNamedInstanceIndex(int fontIndex,
|
|
149
|
+ int faceIndex);
|
148
|
150
|
|
149
|
151
|
bool currentFontTricky();
|
150
|
152
|
bool currentFontBitmapOnly();
|
... |
... |
@@ -286,6 +288,7 @@ private: |
286
|
288
|
|
287
|
289
|
void queryEngine();
|
288
|
290
|
void loadPaletteInfos();
|
|
291
|
+ void switchNamedInstance(int index);
|
289
|
292
|
|
290
|
293
|
// It is safe to put the implementation into the corresponding cpp file.
|
291
|
294
|
template <class Func>
|
src/ftinspect/engine/mmgx.cpp
... |
... |
@@ -10,7 +10,8 @@ |
10
|
10
|
|
11
|
11
|
|
12
|
12
|
MMGXState
|
13
|
|
-MMGXAxisInfo::get(Engine* engine,
|
|
13
|
+MMGXAxisInfo::get(Engine* engine,
|
|
14
|
+ unsigned namedInstanceIndex,
|
14
|
15
|
std::vector<MMGXAxisInfo>& infos)
|
15
|
16
|
{
|
16
|
17
|
auto face = engine->currentFallbackFtFace();
|
... |
... |
@@ -37,6 +38,12 @@ MMGXAxisInfo::get(Engine* engine, |
37
|
38
|
return state;
|
38
|
39
|
}
|
39
|
40
|
|
|
41
|
+ FT_Var_Named_Style* namedInstance = nullptr;
|
|
42
|
+ // named instance index starts from 1, but we need to reference using a
|
|
43
|
+ // 0-based index.
|
|
44
|
+ if (namedInstanceIndex > 0 && namedInstanceIndex <= mm->num_namedstyles)
|
|
45
|
+ namedInstance = &mm->namedstyle[namedInstanceIndex - 1];
|
|
46
|
+
|
40
|
47
|
infos.resize(mm->num_axis);
|
41
|
48
|
|
42
|
49
|
auto& sfnt = engine->currentFontSFNTNames();
|
... |
... |
@@ -54,6 +61,9 @@ MMGXAxisInfo::get(Engine* engine, |
54
|
61
|
FT_Get_Var_Axis_Flags(mm, i, &flags);
|
55
|
62
|
info.hidden = (flags & FT_VAR_AXIS_FLAG_HIDDEN) != 0;
|
56
|
63
|
|
|
64
|
+ if (namedInstance)
|
|
65
|
+ info.def = namedInstance->coords[i] / 65536.0;
|
|
66
|
+
|
57
|
67
|
auto nameSet = false;
|
58
|
68
|
if (state == MMGXState::GX_OVF)
|
59
|
69
|
{
|
src/ftinspect/engine/mmgx.hpp
... |
... |
@@ -33,6 +33,7 @@ struct MMGXAxisInfo |
33
|
33
|
bool isMM;
|
34
|
34
|
|
35
|
35
|
static MMGXState get(Engine* engine,
|
|
36
|
+ unsigned namedInstanceIndex,
|
36
|
37
|
std::vector<MMGXAxisInfo>& infos);
|
37
|
38
|
|
38
|
39
|
|
src/ftinspect/maingui.cpp
... |
... |
@@ -198,6 +198,8 @@ MainGUI::switchTab() |
198
|
198
|
else
|
199
|
199
|
leftWidget_->setVisible(!isComparator);
|
200
|
200
|
|
|
201
|
+ tabs_[tabWidget_->currentIndex()]->relayout();
|
|
202
|
+
|
201
|
203
|
reloadCurrentTabFont();
|
202
|
204
|
|
203
|
205
|
if (current == continuousTab_
|
src/ftinspect/panels/abstracttab.hpp
... |
... |
@@ -16,6 +16,7 @@ public: |
16
|
16
|
|
17
|
17
|
virtual void repaintGlyph() = 0;
|
18
|
18
|
virtual void reloadFont() = 0;
|
|
19
|
+ virtual void relayout() {}
|
19
|
20
|
};
|
20
|
21
|
|
21
|
22
|
|
src/ftinspect/panels/continuous.cpp
... |
... |
@@ -65,6 +65,13 @@ ContinuousTab::reloadFont() |
65
|
65
|
}
|
66
|
66
|
|
67
|
67
|
|
|
68
|
+void
|
|
69
|
+ContinuousTab::relayout()
|
|
70
|
+{
|
|
71
|
+ indexSelector_->relayoutNavigation();
|
|
72
|
+}
|
|
73
|
+
|
|
74
|
+
|
68
|
75
|
void
|
69
|
76
|
ContinuousTab::applySettings()
|
70
|
77
|
{
|
src/ftinspect/panels/continuous.hpp
... |
... |
@@ -46,6 +46,7 @@ public: |
46
|
46
|
|
47
|
47
|
void repaintGlyph() override;
|
48
|
48
|
void reloadFont() override;
|
|
49
|
+ void relayout() override;
|
49
|
50
|
void highlightGlyph(int index);
|
50
|
51
|
void applySettings();
|
51
|
52
|
|
src/ftinspect/panels/singular.cpp
... |
... |
@@ -459,6 +459,13 @@ SingularTab::reloadFont() |
459
|
459
|
}
|
460
|
460
|
|
461
|
461
|
|
|
462
|
+void
|
|
463
|
+SingularTab::relayout()
|
|
464
|
+{
|
|
465
|
+ indexSelector_->relayoutNavigation();
|
|
466
|
+}
|
|
467
|
+
|
|
468
|
+
|
462
|
469
|
void
|
463
|
470
|
SingularTab::setCurrentGlyphAndSize(int glyphIndex,
|
464
|
471
|
double sizePoint)
|
src/ftinspect/panels/singular.hpp
... |
... |
@@ -46,6 +46,7 @@ public: |
46
|
46
|
|
47
|
47
|
void repaintGlyph() override;
|
48
|
48
|
void reloadFont() override;
|
|
49
|
+ void relayout() override;
|
49
|
50
|
// The size remains unchanged if `sizePoint` <= 0.
|
50
|
51
|
void setCurrentGlyphAndSize(int glyphIndex,
|
51
|
52
|
double sizePoint);
|
src/ftinspect/widgets/glyphindexselector.cpp
... |
... |
@@ -20,6 +20,20 @@ GlyphIndexSelector::GlyphIndexSelector(QWidget* parent) |
20
|
20
|
}
|
21
|
21
|
|
22
|
22
|
|
|
23
|
+void
|
|
24
|
+GlyphIndexSelector::relayoutNavigation()
|
|
25
|
+{
|
|
26
|
+ auto minimumWidth = minimumSizeHint().width();
|
|
27
|
+ if (toEndButton_->isVisible())
|
|
28
|
+ {
|
|
29
|
+ if (width() < minimumWidth)
|
|
30
|
+ navigationWidget_->setVisible(false);
|
|
31
|
+ }
|
|
32
|
+ else if (navigationWidget_->minimumSizeHint().width() + minimumWidth <= width())
|
|
33
|
+ navigationWidget_->setVisible(true);
|
|
34
|
+}
|
|
35
|
+
|
|
36
|
+
|
23
|
37
|
void
|
24
|
38
|
GlyphIndexSelector::setMinMax(int min,
|
25
|
39
|
int max)
|
... |
... |
@@ -87,15 +101,7 @@ void |
87
|
101
|
GlyphIndexSelector::resizeEvent(QResizeEvent* event)
|
88
|
102
|
{
|
89
|
103
|
QWidget::resizeEvent(event);
|
90
|
|
- auto minimumWidth = minimumSizeHint().width();
|
91
|
|
- if (toEndButton_->isVisible())
|
92
|
|
- {
|
93
|
|
- if (width() < minimumWidth)
|
94
|
|
- navigationWidget_->setVisible(false);
|
95
|
|
- }
|
96
|
|
- else if (navigationWidget_->minimumSizeHint().width() + minimumWidth
|
97
|
|
- <= width())
|
98
|
|
- navigationWidget_->setVisible(true);
|
|
104
|
+ relayoutNavigation();
|
99
|
105
|
}
|
100
|
106
|
|
101
|
107
|
|
src/ftinspect/widgets/glyphindexselector.hpp
... |
... |
@@ -24,6 +24,8 @@ public: |
24
|
24
|
GlyphIndexSelector(QWidget* parent);
|
25
|
25
|
~GlyphIndexSelector() override = default;
|
26
|
26
|
|
|
27
|
+ void relayoutNavigation();
|
|
28
|
+
|
27
|
29
|
// Never triggers repaint!
|
28
|
30
|
void setMinMax(int min,
|
29
|
31
|
int max);
|
src/ftinspect/widgets/tripletselector.cpp
... |
... |
@@ -162,7 +162,7 @@ TripletSelector::repopulateNamedInstances(bool fontSwitched) |
162
|
162
|
newFaces.reserve(newSize);
|
163
|
163
|
for (long i = 0; i < newSize; i++)
|
164
|
164
|
{
|
165
|
|
- newFaces.emplace_back(engine_->namedInstanceName(fontIndex, faceIndex, i));
|
|
165
|
+ newFaces.emplace_back(engine_->namedInstanceName(fontIndex, faceIndex, i + 1));
|
166
|
166
|
if (!needToRecreate && newFaces[i] != niComboBox_->itemData(i))
|
167
|
167
|
needToRecreate = true;
|
168
|
168
|
}
|
... |
... |
@@ -181,16 +181,19 @@ TripletSelector::repopulateNamedInstances(bool fontSwitched) |
181
|
181
|
QSignalBlocker blk3(niComboBox_);
|
182
|
182
|
niComboBox_->clear();
|
183
|
183
|
|
184
|
|
- for (long i = 0; i < newSize; i++)
|
|
184
|
+ // Returned index starts from 1, therefore minus 1.
|
|
185
|
+ auto defaultId = engine_->defaultNamedInstanceIndex(fontIndex, faceIndex) - 1;
|
|
186
|
+ for (unsigned i = 0; i < static_cast<unsigned>(newSize); i++)
|
185
|
187
|
{
|
186
|
188
|
auto& name = newFaces[i];
|
187
|
|
- auto displayName = QString("%1: %2").arg(i).arg(name);
|
188
|
|
- if (i == 0)
|
189
|
|
- displayName = "* " + displayName;
|
|
189
|
+ auto displayName = QString("%1: %2").arg(i + 1).arg(name);
|
|
190
|
+ if (i == defaultId)
|
|
191
|
+ displayName = displayName + " (default)";
|
190
|
192
|
niComboBox_->addItem(displayName, name);
|
191
|
193
|
}
|
192
|
194
|
|
193
|
|
- niComboBox_->setCurrentIndex(0);
|
|
195
|
+ if (defaultId >= 0 && newSize > 0)
|
|
196
|
+ niComboBox_->setCurrentIndex(static_cast<int>(defaultId));
|
194
|
197
|
// Note: no signal is emitted from any combobox until this block ends.
|
195
|
198
|
}
|
196
|
199
|
|
... |
... |
@@ -460,10 +463,9 @@ TripletSelector::loadTriplet() |
460
|
463
|
|
461
|
464
|
if (faceIndex < 0)
|
462
|
465
|
faceIndex = 0;
|
463
|
|
- if (instanceIndex < 0)
|
464
|
|
- instanceIndex = 0;
|
465
|
|
-
|
466
|
|
- engine_->loadFont(fontIndex, faceIndex, instanceIndex);
|
|
466
|
+ if (instanceIndex < 0 || niComboBox_->count() == 0)
|
|
467
|
+ instanceIndex = -1; // No instance available.
|
|
468
|
+ engine_->loadFont(fontIndex, faceIndex, instanceIndex + 1);
|
467
|
469
|
|
468
|
470
|
// TODO: This may mess up with bitmap-only fonts.
|
469
|
471
|
if (!engine_->fontValid())
|
vms_make.com
... |
... |
@@ -9,6 +9,12 @@ $!------------------------------------------------------------------------------ |
9
|
9
|
$!
|
10
|
10
|
$ on error then goto err_exit
|
11
|
11
|
$!
|
|
12
|
+$! Get platform
|
|
13
|
+$ vax = f$getsyi("ARCH_NAME").eqs. "VAX"
|
|
14
|
+$ axp = f$getsyi("ARCH_NAME").eqs. "Alpha"
|
|
15
|
+$ ia64 = f$getsyi("ARCH_NAME").eqs. "IA64"
|
|
16
|
+$ x86_64 = f$getsyi("ARCH_NAME").eqs. "x86_64"
|
|
17
|
+$!
|
12
|
18
|
$! Just some general constants
|
13
|
19
|
$!
|
14
|
20
|
$ Make = ""
|
... |
... |
@@ -34,16 +40,25 @@ $! |
34
|
40
|
$! Create option file
|
35
|
41
|
$!
|
36
|
42
|
$ open/write optf 'optfile'
|
37
|
|
-$ If f$getsyi("HW_MODEL") .gt. 1024
|
|
43
|
+$ If .not. vax
|
38
|
44
|
$ Then
|
39
|
45
|
$ write optf "[-.freetype2.lib]freetype2shr.exe/share"
|
40
|
46
|
$ else
|
41
|
47
|
$ write optf "[-.freetype2.lib]freetype.olb/lib"
|
42
|
48
|
$ endif
|
43
|
49
|
$ gosub check_create_vmslib
|
44
|
|
-$ write optf "sys$library:libbz2.olb/lib"
|
45
|
|
-$ write optf "sys$library:libpng.olb/lib"
|
46
|
|
-$ write optf "sys$library:libz.olb/lib"
|
|
50
|
+$!
|
|
51
|
+$!
|
|
52
|
+$! Check external libraries
|
|
53
|
+$!
|
|
54
|
+$ have_png = f$search("sys$library:libpng.olb") .nes. ""
|
|
55
|
+$ have_bz2 = f$search("sys$library:libbz2.olb") .nes. ""
|
|
56
|
+$ have_z = f$search("sys$library:libz.olb") .nes. ""
|
|
57
|
+$ have_harfbuzz = f$search("sys$library:libharfbuzz.olb") .nes. ""
|
|
58
|
+$ if ( have_harfbuzz ) then write optf "sys$library:libharfbuzz.olb/lib"
|
|
59
|
+$ if ( have_bz2 ) then write optf "sys$library:libbz2.olb/lib"
|
|
60
|
+$ if ( have_png ) then write optf "sys$library:libpng.olb/lib"
|
|
61
|
+$ if ( have_z ) then write optf "sys$library:libz.olb/lib"
|
47
|
62
|
$ write optf "sys$share:decw$xlibshr.exe/share"
|
48
|
63
|
$ close optf
|
49
|
64
|
$!
|
... |
... |
@@ -122,7 +137,7 @@ GRAPHOBJ64 = $(OBJDIR)grobjs_64.obj, \ |
122
|
137
|
|
123
|
138
|
# C flags
|
124
|
139
|
CFLAGS = $(CCOPT)$(INCLUDES)/obj=$(OBJDIR)/define=("FT2_BUILD_LIBRARY=1")\
|
125
|
|
- /warn=disable=("MACROREDEF","MAYLOSEDATA3")
|
|
140
|
+ /warn=(noinfo,disable=("MACROREDEF","MAYLOSEDATA3"))
|
126
|
141
|
|
127
|
142
|
.c.obj :
|
128
|
143
|
cc$(CFLAGS)/point=32/list=$(MMS$TARGET_NAME).lis/show=all $(MMS$SOURCE)
|
... |
... |
@@ -286,20 +301,20 @@ $(OBJDIR)gblender.obj : $(GRAPHSRC)gblender.c |
286
|
301
|
$(OBJDIR)gblblit.obj : $(GRAPHSRC)gblblit.c
|
287
|
302
|
$(OBJDIR)grinit.obj : $(GRAPHSRC)grinit.c
|
288
|
303
|
set def $(GRAPHSRC)
|
289
|
|
- $(CC)$(CCOPT)/include=([.x11],[])/point=32/list/show=all\
|
|
304
|
+ $(CC)$(CCOPT)/warn=noinfo/include=([.x11],[])/point=32/list/show=all\
|
290
|
305
|
/define=(DEVICE_X11,"FT2_BUILD_LIBRARY=1")/obj=[-.objs] grinit.c
|
291
|
306
|
pipe link/map/full/exec=nl: [-.objs]grinit.obj | copy sys$input nl:
|
292
|
307
|
mc sys$library:vms_auto64 grinit.map grinit.lis
|
293
|
|
- $(CC)$(CCOPT)/include=([.x11],[])/point=64/obj=[-.objs] grinit_64.c
|
|
308
|
+ $(CC)$(CCOPT)/warn=noinfo/include=([.x11],[])/point=64/obj=[-.objs] grinit_64.c
|
294
|
309
|
delete grinit_64.c;*
|
295
|
310
|
set def [-]
|
296
|
311
|
$(OBJDIR)grx11.obj : $(GRX11SRC)grx11.c
|
297
|
312
|
set def $(GRX11SRC)
|
298
|
|
- $(CC)$(CCOPT)/include=([-])/point=32/list/show=all\
|
|
313
|
+ $(CC)$(CCOPT)/warn=noinfo/include=([-])/point=32/list/show=all\
|
299
|
314
|
/define=(DEVICE_X11,"FT2_BUILD_LIBRARY=1")/obj=[--.objs] grx11.c
|
300
|
315
|
pipe link/map/full/exec=nl: [--.objs]grx11.obj | copy sys$input nl:
|
301
|
316
|
mc sys$library:vms_auto64 grx11.map grx11.lis
|
302
|
|
- $(CC)$(CCOPT)/include=([-])/point=64/obj=[--.objs] grx11_64.c
|
|
317
|
+ $(CC)$(CCOPT)/warn=noinfo/include=([-])/point=64/obj=[--.objs] grx11_64.c
|
303
|
318
|
delete grx11_64.c;*
|
304
|
319
|
set def [--]
|
305
|
320
|
$(OBJDIR)grdevice.obj : $(GRAPHSRC)grdevice.c
|
|